UNPKG

homebridge-config-ui-x

Version:

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

19 lines 226 kB
import{a as E,c as y,i as D,o as w,s as x}from"./chunk-D39XL-zh.js";import{$ as Le,$n as ic,Ct as Qo$1,Dt as Rt,E as Dy,Fr as se,Gr as uy,I as Ga$1,It as TT,Jn as gy,Jr as ve,K as J,Kr as v3,Kt as Uy,Ln as db,Lt as T_,M as Fe,On as b_,Pr as sc,Q as Ko$1,Qn as i$,Rt as Te,Sn as a$,Tn as ac,U as I_,Un as g,Vt as U3,Wt as UT,X as Jt,Y as Je$1,Yr as vy,Yt as Va$1,Zr as w_,_ as By,ai as xi,at as Mn,b as Co$1,bn as _w,br as pb,d as Ay,dr as m_,dt as Nf,fn as Z,gr as o$,gt as Pe,hn as _T,hr as nc,i as $y,it as Mi,jt as S_,kn as br$1,kt as ST,lt as NU,mt as P,n as $T,oi as xn,on as Xe,or as jy,p as Bd,pt as Ot,qr as vE,ri as x_,rn as Wf,rr as jd,sn as Xg,sr as kt,st as My,tr as ii,tt as Ln,u as An,ui as z0,ut as N_,v as C,vt as Py,wr as q,x as Cr$1,y as C_}from"./chunk-D96TCRAL.js";import{l as le}from"./chunk-DZYp0NQB.js";import{n as zt$1}from"./chunk-CdJ3i4Aq.js";import{$ as dn$1,B as Hn,C as ay,D as sy,E as jr$1,G as Mt,H as Jn$1,J as Xn$1,K as Se,M as ca$1,N as pa$1,O as uy$1,S as Xk,T as i$$1,U as Kn,V as Ht,X as Yn$1,Y as Ye,_ as GN,b as Ou,et as fn$1,ft as he,g as F$,h as $$,j as Ra$1,k as wN,lt as fe,n as X,nt as mn$1,p as k,q as Vt,r as Y,t as m,tt as ln$1,ut as si,v as JN,w as bN,x as Rr$1,y as KN,z as Gt$1}from"./main-E3N63CH7.js";import{t}from"./chunk-CNdjlH36.js";import{t as t$1}from"./chunk-BMskvib5.js";import{t as ds$1}from"./chunk-CiY-LsUw.js";import{n as bn$1,r as kn,t as Mn$1}from"./chunk-CLsCjV2Q.js";import{S as n,T as s,a as I,h as a,l as O,m as _,o as L,s as M,t as A,v as e,w as r,x as l,y as g$1}from"./chunk-nWnpef0a.js";import{t as O$1}from"./chunk-C-2fYS21.js";import{t as t$2}from"./chunk-B9KT1fF8.js";import{t as o}from"./chunk-CTbxnc6u.js";import{t as t$3}from"./chunk-Bp5Om8MY.js";import{t as t$4}from"./chunk-MuM3itMG.js";import{t as t$5}from"./chunk-assYt6R8.js";import{t as t$6}from"./chunk-CKdicYhg.js";import{T as i,_ as T,a as E$1,c as H,f as N,h as R,i as D$1,l as I$1,m as P$1,p as O$2,r as C$1,s as G,u as L$1,w as g$2}from"./chunk-BuXBmaui.js";import{t as t$7}from"./chunk-I_ippnQy.js";import{t as n$1}from"./chunk-htzpKVdQ2.js";import{t as o$1}from"./chunk-Kj3J4PSZ2.js";import{t as a$1}from"./chunk-CAWrKCeJ2.js";import{t as p}from"./chunk-BinBJ-zk2.js";import{a as oe,i as jt,o as qt$1,t as Dt}from"./chunk-Bwmof_W-2.js";import{t as N$1}from"./chunk-MQWddKEg2.js";import{t as L$2}from"./chunk-tTuB-TjV2.js";import{t as s$1}from"./chunk-B2ue2DGm2.js";import{t as o$2}from"./chunk-BF5hZcd92.js";import{t as I$2}from"./chunk-DOaV0Kb62.js";import{n as Uo$1,t as Ti}from"./chunk-Cgpv3T9Y2.js";import{n as m$1,r as v,t as Y$1}from"./chunk-DJ26AmHP2.js";import{n as Z$1,t as E$2}from"./chunk-C4DEjFyc2.js";import{t as pr$1}from"./chunk-CyjdE5Hm2.js";import{t as i$1}from"./chunk-D_9w2yDS2.js";import{t as t$8}from"./chunk-BA5JJK7Y2.js";import{t as i$2}from"./chunk-QIVnO9La2.js";import{t as s$2}from"./chunk-By3GA2Y42.js";import{t as t$9}from"./chunk-DYMwD0gG2.js";import{t as t$10}from"./chunk-zRCOLcwS.js";import{t as s$3}from"./chunk-BOJ24JZp.js";import{t as s$4}from"./chunk-BYmiFHWh.js";import{t as t$11}from"./chunk-BrEC1trG.js";import{t as s$5}from"./chunk-CDFhfMZe.js";import{t as i$3}from"./chunk-B_c39FCv.js";import{t as t$12}from"./chunk-jcZFMRXG.js";import{t as s$6}from"./chunk-CT8rUNvc.js";import{t as s$7}from"./chunk-AeHsXVLc.js";import{t as s$8}from"./chunk-azhdPFP3.js";var Gi=`plugins-list`;var Ge=(()=>{class i{$api=g(U3);$auth=g(he);$cache=g(p);get(){let e=this.$auth.user.admin?`/plugins?include=config`:`/plugins`;return this.$cache.get(Gi,()=>this.$api.get(e))}invalidate(){this.$cache.invalidate(Gi)}static ɵfac=function(n){return new(n||i)};static ɵprov=C({token:i,factory:i.ɵfac,providedIn:`root`})}return i})();var Je=D(Ti(),1);var Ki=(()=>{class i{host=g(Xe);jsonSchemaForm=g(i$$1,{host:!0,self:!0,optional:!0});observer;patchingInProgress=!1;jsfPatch=i$(!1);constructor(){let e=this.jsonSchemaForm;if(!e)return;let n=e.jsf.buildLayout.bind(e.jsf);e.jsf.buildLayout=t=>(n(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(n=>{if(!this.patchingInProgress){for(let t of n){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,attributes:!0,attributeFilter:[`class`,`aria-expanded`]})}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.patchExpandableSectionLegends(e),this.patchDeleteButtons(e),this.patchCheckboxRadioDuplicateText(e),this.patchBasicControlNames(e),this.patchingInProgress=!1}patchExpandableFieldsetLegends(e){e.querySelectorAll(`fieldset`).forEach(t=>{let a=t,m=a.querySelector(`legend`);if(!m)return;let u=this.cleanSectionTitle((m.textContent||``).trim());if(!u)return;let h=m.querySelector(`button`)||m.querySelector(`a`)||m.querySelector(`[data-bs-toggle="collapse"]`)||m.querySelector(`[aria-expanded]`)||m,x=this.findCollapseBody(a,h),w=a.querySelector(`:scope > button.jsf-fieldset-proxy`);w||(w=document.createElement(`button`),w.type=`button`,w.className=`jsf-fieldset-proxy visually-hidden-focusable`,a.insertBefore(w,a.firstChild),w.addEventListener(`click`,O=>{O.preventDefault(),h.click(),window.setTimeout(()=>{this.syncProxyExpanded(a,w,h,x)},0)}),w.addEventListener(`keydown`,O=>{(O.key===`Enter`||O.key===` `)&&(O.preventDefault(),w.click())})),w.textContent=u,w.setAttribute(`role`,`button`),w.setAttribute(`tabindex`,`0`),w.setAttribute(`aria-label`,u),w.removeAttribute(`aria-describedby`),x?(x.id||(x.id=`jsf_collapse_${Math.random().toString(36).slice(2)}`),w.setAttribute(`aria-controls`,x.id)):w.removeAttribute(`aria-controls`),a.setAttribute(`role`,`presentation`),m.setAttribute(`aria-hidden`,`true`),m.querySelectorAll(`button, a, [tabindex]`).forEach(O=>{O.setAttribute(`tabindex`,`-1`)}),this.syncProxyExpanded(a,w,h,x)})}syncProxyExpanded(e,n,t,a){let u=this.getExpandedState(e,a,t)?`true`:`false`;n.getAttribute(`aria-expanded`)!==u&&n.setAttribute(`aria-expanded`,u)}patchExpandableSectionLegends(e){e.querySelectorAll(`section-widget`).forEach(t=>{let a=t.querySelector(`:scope > div`);if(!a||!a.classList.contains(`expandable`)&&!a.classList.contains(`expanded`))return;let m=a.querySelector(`:scope > label.legend`);if(!m)return;let u=this.cleanSectionTitle((m.textContent||``).trim());if(!u)return;let h=a.querySelector(`:scope > root-widget`),x=a.querySelector(`:scope > button.jsf-section-proxy`);x||(x=document.createElement(`button`),x.type=`button`,x.className=`jsf-section-proxy visually-hidden-focusable`,a.insertBefore(x,a.firstChild),x.addEventListener(`click`,w=>{w.preventDefault(),m.click(),window.setTimeout(()=>{this.syncSectionProxyExpanded(a,x,h)},0)}),x.addEventListener(`keydown`,w=>{(w.key===`Enter`||w.key===` `)&&(w.preventDefault(),x.click())})),x.textContent=u,x.setAttribute(`role`,`button`),x.setAttribute(`tabindex`,`0`),x.setAttribute(`aria-label`,u),x.removeAttribute(`aria-describedby`),h?(h.id||(h.id=`jsf_section_${Math.random().toString(36).slice(2)}`),x.setAttribute(`aria-controls`,h.id)):x.removeAttribute(`aria-controls`),a.setAttribute(`role`,`presentation`),m.setAttribute(`aria-hidden`,`true`),m.querySelectorAll(`button, a, [tabindex]`).forEach(w=>{w.setAttribute(`tabindex`,`-1`)}),this.syncSectionProxyExpanded(a,x,h)})}syncSectionProxyExpanded(e,n,t){let m=this.getSectionExpandedState(e,t)?`true`:`false`;n.getAttribute(`aria-expanded`)!==m&&n.setAttribute(`aria-expanded`,m)}getSectionExpandedState(e,n){return e.classList.contains(`expanded`)?!0:e.classList.contains(`expandable`)&&!e.classList.contains(`expanded`)?!1:n?window.getComputedStyle(n).display!==`none`:!0}findCollapseBody(e,n){if(n){let t=n.getAttribute(`aria-controls`);if(t){let m=document.getElementById(t);if(m)return m}let a=n.getAttribute(`data-bs-target`)||n.getAttribute(`data-target`);if(a&&a.startsWith(`#`)){let m=document.getElementById(a.slice(1));if(m)return m}}return e.querySelector(`:scope .collapse`)}getExpandedState(e,n,t){let a=t?.getAttribute(`aria-expanded`);return a===`true`?!0:a===`false`||t?.classList.contains(`collapsed`)?!1:n?n.classList.contains(`show`):this.isFieldsetExpanded(e)}isFieldsetExpanded(e){let n=e.querySelectorAll(`input, select, textarea, button, a`);for(let t of n){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 n=window.getComputedStyle(e);return n.display===`none`||n.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 m=this.findNearestItemName(a,e);a.setAttribute(`aria-label`,m?`Delete ${m}`:`Delete`),a.removeAttribute(`title`),a.setAttribute(`data-jsf-a11y-delete`,`true`)})}findNearestItemName(e,n){let a=e.closest(`.list-group-item`)||e.closest(`.card`)||e.closest(`li`)||e.closest(`fieldset`)||e.parentElement||n,m=a.querySelector(`legend`);if(m){let h=this.cleanSectionTitle((m.textContent||``).trim());if(h)return h}let u=a.querySelector(`h1, h2, h3, h4, h5, h6`);if(u){let h=this.cleanSectionTitle((u.textContent||``).trim());if(h)return h}return``}cleanSectionTitle(e){let n=(e||``).replace(H,``).trim();return n=n.replace(G,``).trim(),n.length>80&&(n=n.slice(0,80).trim()),n}patchCheckboxRadioDuplicateText(e){e.querySelectorAll(`input`).forEach(t=>{let a=t,m=(a.getAttribute(`type`)||``).toLowerCase();if(m!==`checkbox`&&m!==`radio`||a.hasAttribute(`data-jsf-a11y-processed`))return;let u=a.id?e.querySelector(`label[for="${a.id}"]`):null,h=a.closest(`label`),x=u||h,w=this.getLabelText(x);if(!w)return;this.hasExplicitA11yName(a)||a.setAttribute(`aria-label`,w),a.setAttribute(`data-jsf-a11y-processed`,`true`),h&&h.contains(a)&&h.querySelectorAll(`*`).forEach(H=>{if(H===a||H.contains(a)||H.hasAttribute(`data-jsf-a11y-hidden`))return;(H.classList.contains(`hb-uix-slider`)||H.classList.contains(`hb-uix-round`))&&(H.setAttribute(`aria-hidden`,`true`),H.setAttribute(`data-jsf-a11y-hidden`,`true`))});let O=a.parentElement;if(O)for(let H=0;H<O.children.length;H+=1){let N=O.children[H];if(!(N instanceof HTMLElement)||N===a||x&&N===x||N.hasAttribute(`data-jsf-a11y-hidden`)||this.isInteractiveElement(N))continue;let it=(N.textContent||``).trim();it&&it===w&&(N.setAttribute(`aria-hidden`,`true`),N.setAttribute(`data-jsf-a11y-hidden`,`true`))}})}getLabelText(e){return e?(e.textContent||``).replace(I$1,` `).trim():``}hasExplicitA11yName(e){let n=e.getAttribute(`aria-label`);if(n&&n.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 n=e.tagName.toLowerCase();if([`a`,`button`,`input`,`select`,`textarea`].includes(n))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 m=``;if(a.id&&(m=(e.querySelector(`label[for="${a.id}"]`)?.textContent||``).trim()),!m){let u=a.closest(`label`);m=this.getLabelText(u)}m&&(a.setAttribute(`aria-label`,m),a.setAttribute(`data-jsf-a11y-labeled`,`true`))})}fixNestedArrayLayout(e,n){return this.fixArray(e,n,``),e}fixArray(e,n,t){if(Array.isArray(e)){let a=e.filter(h=>h.name!==`_bridge`),m=a.filter(h=>h.items&&Array.isArray(h.items)).flatMap(h=>h.items).filter(h=>h.dataType===`array`||h.arrayItem);[...a,...m].filter(h=>h.dataType===`array`||h.arrayItem).forEach(h=>{this.fixNestedArray(h,n,t)})}else this.fixNestedArray(e,n,t)}fixNestedArray(e,n,t){if(e.items&&Array.isArray(e.items)){let a=e.items.find(m=>m.type===`$ref`);if(a){let m=e.items.filter(x=>x.type===`section`||x.type===`div`),u=m.length>0?m.reduce((x,w)=>x.id>w.id?x:w):this.getItemTemplateFromRef(a),h=this.getDataFromPointer(n,a.dataPointer.replace(t,``));if(h===null)return;if(Array.isArray(h)){for(;e.items.length-1<h.length;){let x=pa$1(u);x._id=Ra$1(`new_`),e.items.unshift(x)}h.forEach((x,w)=>{this.fixArray(e.items[w],x,a.dataPointer)})}else this.fixArray(e.items,n,a.dataPointer)}else this.fixArray(e.items,n,t);e.items.filter(m=>m.items&&Array.isArray(m.items)).forEach(m=>{this.fixArray(m.items,n,t)})}}getDataFromPointer(e,n){let t=e;return n.substring(1).split(N).filter(a=>a!==`-`).forEach(a=>{try{t=t[a]}catch(m){t=null}}),t}getItemTemplateFromRef(e){let n={type:`section`,items:[]},t=pa$1(e);return ca$1(t,n),t}static ɵfac=function(n){return new(n||i)};static ɵdir=Mn({type:i,selectors:[[``,`jsfPatch`,``]],inputs:{jsfPatch:[1,`jsfPatch`]}})}return i})();function Jn(i,c){if(i&1){let e=sc();Va$1(0,`json-schema-form`,1),ac(`onChanges`,function(t){Ko$1(e);return Qo$1(ve().onChanges(t))})(`isValid`,function(t){Ko$1(e);return Qo$1(ve().validChange(t))}),jd()}if(i&2){let e=ve();vy(`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 $t=(()=>{class i{$settings=g(zt$1);availableLanguages=[`de`,`en`,`es`,`fr`,`it`,`pt`,`zh`];configSchema=i$.required();data=i$.required();dataChange=o$();dataChanged=o$();isValid=o$();currentData=q(null);language=q(`en`);jsonFormOptions={addSubmit:!1,loadExternalAssets:!1,returnEmptyFields:!1,setSchemaDefaults:!0,autocomplete:!1};lastValidState=void 0;validationTimeout=null;lastDataReference=null;processingInternalChange=!1;constructor(){ii(()=>{let e=this.data();if(this.processingInternalChange){this.lastDataReference=e;return}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 n=this.data();if(n&&typeof n==`object`&&typeof e==`object`){let t=n._bridge;for(let a of Object.keys(n))a in e||delete n[a];Object.assign(n,e),t===void 0?delete n._bridge:n._bridge=t,this.dataChange.emit(n),this.dataChanged.emit(n)}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 ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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(n,t){n&1&&(Bd(0),Fe(1,Jn,1,8,`json-schema-form`,0),ic()),n&2&&(se(),Le(t.configSchema().schema?1:-1))},dependencies:[Rr$1,i$$1,Ki],encapsulation:2})}return i})();var Xn=y({"../../../../i18n/bg.json":()=>s$6(),"../../../../i18n/ca.json":()=>t$6(),"../../../../i18n/cs.json":()=>o$2(),"../../../../i18n/de.json":()=>t$4(),"../../../../i18n/en.json":()=>s$7(),"../../../../i18n/es.json":()=>a$1(),"../../../../i18n/fi.json":()=>s$8(),"../../../../i18n/fr.json":()=>t$5(),"../../../../i18n/he.json":()=>t$11(),"../../../../i18n/hu.json":()=>s$5(),"../../../../i18n/id.json":()=>i$3(),"../../../../i18n/it.json":()=>o$1(),"../../../../i18n/ja.json":()=>t$7(),"../../../../i18n/ko.json":()=>t$12(),"../../../../i18n/mk.json":()=>s$1(),"../../../../i18n/nl.json":()=>i$2(),"../../../../i18n/no.json":()=>s$2(),"../../../../i18n/pl.json":()=>o(),"../../../../i18n/pt-BR.json":()=>t$2(),"../../../../i18n/pt.json":()=>t$9(),"../../../../i18n/ru.json":()=>t$10(),"../../../../i18n/sl.json":()=>s$3(),"../../../../i18n/sv.json":()=>s$4(),"../../../../i18n/th.json":()=>t$3(),"../../../../i18n/tr.json":()=>i$1(),"../../../../i18n/uk.json":()=>t$8(),"../../../../i18n/vi.json":()=>n$1(),"../../../../i18n/zh-CN.json":()=>t(),"../../../../i18n/zh-TW.json":()=>t$1()});var Qn=[`custompluginui`];function Yn(i,c){i&1&&(Va$1(0,`div`,6),Dy(1,`i`,18),jd())}function Zn(i,c){if(i&1){let e=sc();Va$1(0,`div`,8)(1,`app-schema-form`,19),Uy(`dataChange`,function(t){Ko$1(e);let a=ve();return m_(a.pluginConfig[0],t)||(a.pluginConfig[0]=t),Qo$1(t)}),ac(`dataChanged`,function(t){Ko$1(e);return Qo$1(ve().schemaFormUpdatedSubject.next(t))})(`isValid`,function(t){Ko$1(e);return Qo$1(ve().onIsValid(t))}),jd()()}if(i&2){let e=ve();se(),vy(`configSchema`,e.schema),$y(`data`,e.pluginConfig[0])}}function eo(i,c){if(i&1){let e=sc();Va$1(0,`button`,23),ac(`click`,function(){Ko$1(e);return Qo$1(ve(2).formActionSubject.next(`cancel`))}),Ot(1),jd()}if(i&2){let e=ve(2);se(),kt(` `,e.formCancelButtonLabel(),` `)}}function to(i,c){if(i&1){let e=sc();Va$1(0,`button`,16),ac(`click`,function(){Ko$1(e);return Qo$1(ve(2).formActionSubject.next(`submit`))}),Ot(1),jd()}if(i&2){let e=ve(2);vy(`disabled`,!e.formValid()),se(),kt(` `,e.formSubmitButtonLabel(),` `)}}function io(i,c){if(i&1){let e=sc();Va$1(0,`div`,8)(1,`app-schema-form`,19),ac(`dataChange`,function(t){Ko$1(e);return Qo$1(ve().formData.set(t))})(`dataChanged`,function(t){Ko$1(e);return Qo$1(ve().formUpdatedSubject.next(t))})(`isValid`,function(t){Ko$1(e);return Qo$1(ve().formValidEvent(t))}),jd(),Va$1(2,`div`,20),Fe(3,eo,2,1,`button`,21),Fe(4,to,2,2,`button`,22),jd()()}if(i&2){let e=ve();se(),vy(`configSchema`,e.formSchema())(`data`,e.formData()),se(2),Le(e.formCancelButtonLabel()?3:-1),se(),Le(e.formSubmitButtonLabel()?4:-1)}}function no(i,c){i&1&&(Va$1(0,`div`,9),Dy(1,`i`,18),jd())}function oo(i,c){if(i&1&&(Dy(0,`i`,24),S_(1,`translate`)),i&2){let e=ve();Ay(`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()),vy(`ngbTooltip`,N_(1,12,e.formIsValid()?`form.label_valid`:e.strictValidation()?`form.label_invalid_strict`:`form.label_invalid`))(`openDelay`,150)}}function ao(i,c){i&1&&(Ot(0),S_(1,`translate`)),i&2&&kt(` `,N_(1,1,`form.button_save`),` `)}function ro(i,c){i&1&&Dy(0,`i`,17)}var Ji=(()=>{class i{$activeModal=g(fe);$accessoryCache=g(m$1);$api=g(U3);$cb=g(jt);$plugin=g(Ie);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);$ws=g(ds$1);modalData=g(_);customPluginUiElementTarget=a$(`custompluginui`);plugin=this.modalData.plugin;schema=this.modalData.schema;pluginConfig=this.modalData.pluginConfig??[];pluginAlias=q(``);pluginType=q(`platform`);loading=q(!0);saveInProgress=q(!1);pluginSpinner=q(!1);saveButtonDisabled=q(!1);uiLoaded=q(!1);showSchemaForm=q(!1);formId=q(void 0);formSchema=q(void 0);formData=q(void 0);formSubmitButtonLabel=q(void 0);formCancelButtonLabel=q(void 0);formValid=q(!0);isFirstSave=q(!1);formIsValid=q(!0);strictValidation=q(!1);io;basePath=``;iframe;iframeLoadInProgress=!1;schemaFormRecentlyRefreshed=!1;assetSessionRevoked=!1;destroyRef=g(Z);schemaFormUpdatedSubject=new P;schemaFormRefreshSubject=new P;formUpdatedSubject=new P;formActionSubject=new P;ngOnInit(){let e=this.schema,n=this.plugin;if(!e||!n){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(n.name)}`,this.initialize(),this.schemaFormRefreshSubject.pipe(Wf(250),An(this.destroyRef)).subscribe(this.schemaFormRefresh.bind(this)),this.schemaFormUpdatedSubject.pipe(Wf(250),vE(1),An(this.destroyRef)).subscribe(()=>{this.schemaFormUpdated()}),this.formUpdatedSubject.pipe(Wf(100),vE(1),An(this.destroyRef)).subscribe(this.formUpdated.bind(this)),this.formActionSubject.pipe(An(this.destroyRef)).subscribe(this.formActionEvent.bind(this)),window.addEventListener(`message`,this.handleMessage,!1)}ngOnDestroy(){this.revokeAssetSession(),window.removeEventListener(`message`,this.handleMessage),this.io?.socket&&(this.io.socket.removeAllListeners(`response`),this.io.socket.removeAllListeners(`stream`),this.io.socket.removeAllListeners(`ready`)),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 E(this,null,function*(){let n=this.plugin;if(!n)return!1;this.saveInProgress.set(!0);try{let t=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(n.name)}?include=restart-info`,this.pluginConfig),a=t.config;if(this.saveInProgress.set(!1),e){if(this.isFirstSave()&&this.$settings.env.recommendChildBridges&&a[0]?.platform)return yield this.revokeAssetSession(),this.$activeModal.close(),this.$plugin.bridgeSettings(n,!0),!0;yield this.revokeAssetSession(),this.$activeModal.close(),this.$cb.openCorrectRestartModalWithBridges(t.affectedBridges)}return!0}catch(t){return console.error(t),this.$toastr.error(this.$translate.instant(`config.failed_to_save_config`),this.$translate.instant(`toast.title_error`)),this.saveInProgress.set(!1),!1}})}dismissModal(){return E(this,null,function*(){yield this.revokeAssetSession(),this.$activeModal.dismiss(`Dismiss`)})}initialize(){return E(this,null,function*(){let e=this.plugin;e&&(this.io.connected.pipe(An(this.destroyRef)).subscribe(()=>{this.io.socket.emit(`start`,e.name)}),this.io.socket.on(`response`,n=>{n.action=`response`,this.iframe?.contentWindow?.postMessage(n,Co$1.api.origin)}),this.io.socket.on(`stream`,n=>{n.action=`stream`,this.iframe?.contentWindow?.postMessage(n,Co$1.api.origin)}),this.io.socket.on(`ready`,()=>{this.loading.set(!1),this.loadUi()}))})}loadUi(){return E(this,null,function*(){let e=this.plugin;if(!e||this.iframe||this.iframeLoadInProgress)return;let n=this.customPluginUiElementTarget()?.nativeElement;if(n){this.iframeLoadInProgress=!0;try{let{ticket:t}=yield this.$api.post(`${this.basePath}/ticket`,{}),a=new URL(`${Co$1.api.base+this.basePath}/index.html`,location.origin);a.searchParams.set(`ticket`,t),a.searchParams.set(`v`,e.installedVersion),this.iframe=n,n.src=a.toString()}catch(t){console.error(`Failed to load custom plugin UI:`,t),this.loading.set(!1),this.$toastr.error(this.$translate.instant(`plugins.settings.message_ui_offline`),this.$translate.instant(`toast.title_error`))}finally{this.iframeLoadInProgress=!1}}})}handleMessage=e=>{if(e.source===this.iframe?.contentWindow&&(e.origin===Co$1.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.savePluginConfig().then(n=>{n?this.requestResponse(e,this.getConfigBlocks()):this.requestResponse(e,{message:this.$translate.instant(`config.failed_to_save_config`)},!1)});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`:{let n;try{n=Xn(`../../../../i18n/${this.$translate.getCurrentLang()}.json`)}catch(t){n=s$7()}this.requestResponse(e,n);break}case`close`:this.revokeAssetSession().finally(()=>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){if(!this.io.socket.connected){this.requestResponse(e,{message:this.$translate.instant(`plugins.settings.message_ui_offline`)},!1);return}this.io.socket.emit(`request`,e.data)}handleUpdateConfig(e,n){if(!Array.isArray(n))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 n)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(n),this.pluginConfig[0]&&this.showSchemaForm()&&(this.pluginConfig[0]=w({},this.pluginConfig[0]),this.schemaFormRefreshSubject.next(void 0)),this.requestResponse(e,this.getConfigBlocks())}revokeAssetSession(){return E(this,null,function*(){if(!(this.assetSessionRevoked||!this.plugin))try{yield this.$api.post(`${this.basePath}/session/revoke`,{},{withCredentials:!0}),this.assetSessionRevoked=!0}catch(e){console.warn(`Failed to revoke custom plugin UI asset session:`,e)}})}requestResponse(e,n,t=!0){e.source.postMessage({action:`response`,requestId:e.data.requestId,success:t,data:n},e.origin)}injectDefaultStyles(e){return E(this,null,function*(){let n=[...window.document.body.classList].find(x=>x.startsWith(`config-ui-x-`)),t=window.document.body.classList.contains(`dark-mode`),a=e.source;a.postMessage({action:`body-class`,class:n},e.origin),a.postMessage({action:`body-class`,class:`modal-content`},e.origin),t&&a.postMessage({action:`body-class`,class:`dark-mode`},e.origin);let m=[...document.querySelectorAll(`link`)];for(let x of m)if(x.getAttribute(`rel`)===`stylesheet`){let w=x.getAttribute(`href`),O=document.baseURI+(w.startsWith(`/`)?w.substring(1):w);a.postMessage({action:`link-element`,href:O,rel:`stylesheet`},e.origin)}let u=[...document.querySelectorAll(`style`)];for(let x of u)a.postMessage({action:`inline-style`,style:x.innerHTML},e.origin);let h=`
      body {
        height: unset !important;
        background-color: ${t?`#242424`:`#FFFFFF`} !important;
        color: ${t?`#FFFFFF`:`#000000`} !important;
      }
    `;a.postMessage({action:`inline-style`,style:h},e.origin)})}getConfigBlocks(){return this.pluginConfig}updateConfigBlocks(e){for(let n=0;n<e.length;n++){let t=e[n];t[this.pluginType()]=this.pluginAlias(),this.pluginConfig[n]?Object.assign(this.pluginConfig[n],t):this.pluginConfig[n]=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},Co$1.api.origin)}}schemaFormRefresh(){this.schemaFormRecentlyRefreshed=!0,this.showSchemaForm()&&(this.showSchemaForm.set(!1),queueMicrotask(()=>{this.showSchemaForm.set(!0)}))}formCreate(e,n,t,a,m){return E(this,null,function*(){yield this.formEnd(),this.formId.set(e),this.formSchema.set(n),this.formData.set(t),this.formSubmitButtonLabel.set(a),this.formCancelButtonLabel.set(m)})}formEnd(){return E(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}},Co$1.api.origin)}formActionEvent(e){this.iframe.contentWindow.postMessage({action:`stream`,event:this.formId(),data:{formEvent:e,formData:this.formData()}},Co$1.api.origin)}handleGetCachedAccessories(e){return E(this,null,function*(){let n=this.plugin;if(n)try{let t=yield this.$accessoryCache.getHap();return this.requestResponse(e,t.filter(a=>a.plugin===n.name))}catch(t){console.error(`Failed to get cached accessories:`,t),this.$toastr.error(this.$translate.instant(`toast.title_error`))}})}handleGetCachedMatterAccessories(e){return E(this,null,function*(){let n=this.plugin;if(n)try{let t=yield this.$accessoryCache.getMatter();return this.requestResponse(e,t.filter(a=>a.plugin===n.name))}catch(t){console.error(`Failed to get cached Matter accessories:`,t),this.$toastr.error(this.$translate.instant(`toast.title_error`))}})}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,selectors:[[`app-custom-plugins`]],viewQuery:function(n,t){n&1&&My(t.customPluginUiElementTarget,Qn,5),n&2&&$T()},decls:26,vars:22,consts:[[`custompluginui`,``],[1,`modal-content`],[1,`modal-header`],[1,`modal-title`],[`type`,`button`,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`,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,`fas`,`fa-xl`,`me-2`,3,`fa-circle-check`,`green-text`,`fa-circle-exclamation`,`red-text`,`orange-text`,`ngbTooltip`,`openDelay`],[`type`,`button`,1,`btn`,`btn-primary`,3,`click`,`disabled`],[1,`fas`,`fa-circle-notch`,`fa-spin`],[1,`fas`,`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`],[`container`,`modal`,`placement`,`top`,`triggers`,`hover`,1,`fas`,`fa-xl`,`me-2`,3,`ngbTooltip`,`openDelay`]],template:function(n,t){n&1&&(Va$1(0,`div`,1)(1,`div`,2)(2,`h5`,3),Ot(3),jd(),Va$1(4,`button`,4),S_(5,`translate`),ac(`click`,function(){return t.dismissModal()}),jd()(),Va$1(6,`div`,5),Fe(7,Yn,2,0,`div`,6),Dy(8,`iframe`,7,0),S_(10,`translate`),S_(11,`translate`),Fe(12,Zn,2,2,`div`,8),Fe(13,io,5,4,`div`,8),Fe(14,no,2,0,`div`,9),jd(),Va$1(15,`div`,10)(16,`div`,11)(17,`button`,12),ac(`click`,function(){return t.dismissModal()}),Ot(18),S_(19,`translate`),jd()(),Dy(20,`div`,13),Va$1(21,`div`,14),Fe(22,oo,2,14,`i`,15),Va$1(23,`button`,16),ac(`click`,function(){return t.savePluginConfig(!0)}),Fe(24,ao,2,3)(25,ro,1,0,`i`,17),jd()()()()),n&2&&(se(3),Py(t.plugin.displayName||t.plugin.name),se(),vy(`disabled`,t.saveInProgress()),Cr$1(`aria-label`,N_(5,14,`form.button_close`)),se(3),Le(t.loading()?7:-1),se(),Cr$1(`title`,N_(10,16,`plugins.button_settings`))(`aria-label`,N_(11,18,`plugins.button_settings`)),se(4),Le(t.uiLoaded()&&t.pluginConfig.length&&t.schema.singular&&t.showSchemaForm()?12:-1),se(),Le(t.formId()?13:-1),se(),Le(t.pluginSpinner()?14:-1),se(3),vy(`disabled`,t.saveInProgress()),se(),kt(` `,N_(19,20,`form.button_close`),` `),se(4),Le(t.saveButtonDisabled()?-1:22),se(),vy(`disabled`,t.saveInProgress()||t.saveButtonDisabled()),se(),Le(t.saveInProgress()?25:24))},dependencies:[$t,Xk,Y,v3],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}`]})}return i})();var Xi=(()=>{class i{injector=g(Te);$api=g(U3);$modal=g(si);plugins={};openSettings(e,n,t){return E(this,null,function*(){let m=uy([{provide:_,useValue:{plugin:e,schema:n,pluginConfig:t?.config??(yield this.loadPluginConfig(e.name)),editorContext:t}}],this.injector);return this.$modal.open(this.plugins[e.name],{size:`lg`,backdrop:`static`,injector:m}).result.catch(()=>{})})}openCustomSettingsUi(e,n,t){return E(this,null,function*(){let m=uy([{provide:_,useValue:{plugin:e,schema:n,pluginConfig:t?.config??(yield this.loadPluginConfig(e.name)),editorContext:t}}],this.injector);return this.$modal.open(Ji,{size:`lg`,backdrop:`static`,injector:m}).result.catch(()=>{})})}loadPluginConfig(e){return E(this,null,function*(){return this.$api.get(`/config-editor/plugin/${encodeURIComponent(e)}`)})}static ɵfac=function(n){return new(n||i)};static ɵprov=C({token:i,factory:i.ɵfac,providedIn:`root`})}return i})();var on=D(L$2(),1);var Qi=D(Ti(),1);function lo(i,c){i&1&&(Va$1(0,`div`,5),Dy(1,`i`,12),jd())}function so(i,c){if(i&1&&(Dy(0,`i`,20),Va$1(1,`h6`,21),Ot(2),S_(3,`translate`),jd(),Va$1(4,`p`,21),Ot(5),S_(6,`translate`),Va$1(7,`span`,22),Ot(8),jd()()),i&2){let e=ve(2);se(2),Py(N_(3,3,`plugins.manage.select_version`)),se(3),kt(` `,N_(6,5,`plugins.status_installed`),`: `),se(3),kt(`v`,e.plugin?.installedVersion)}}function co(i,c){i&1&&(Dy(0,`i`,23),Va$1(1,`h6`,21),Ot(2),S_(3,`translate`),jd()),i&2&&(se(2),Py(N_(3,1,`plugins.manage.select_version`)))}function po(i,c){i&1&&Dy(0,`i`,26)}function mo(i,c){i&1&&Dy(0,`i`,27)}function go(i,c){if(i&1){let e=sc();Va$1(0,`li`,14)(1,`span`,8),Ot(2),Dy(3,`br`),Va$1(4,`small`,24),Ot(5),jd()(),Va$1(6,`button`,25),S_(7,`translate`),S_(8,`translate`),ac(`click`,function(){let t=Ko$1(e).$implicit;return Qo$1(ve(2).doInstall(t.version))}),Fe(9,po,1,0,`i`,26)(10,mo,1,0,`i`,27),jd()()}if(i&2){let e=c.$implicit,n=ve(2);se(2),kt(` `,e.tag,` `),se(3),kt(`v`,e.version),se(),Cr$1(`aria-label`,`${n.plugin?.installedVersion===e.version?N_(7,4,`plugins.manage.reinstall`):N_(8,6,`plugins.manage.install`)} v${e.version}`),se(3),Le(n.plugin?.installedVersion===e.version?9:10)}}function uo(i,c){i&1&&Ot(0,` ✓ `)}function _o(i,c){if(i&1&&(Va$1(0,`option`,17),Ot(1),Fe(2,uo,1,0),jd()),i&2){let e=c.$implicit,n=ve(2);vy(`value`,e.version)(`selected`,n.versionSelect===e.version),se(),kt(` v`,e.version,` `),se(),Le(e.version===n.plugin?.installedVersion?2:-1)}}function fo(i,c){i&1&&Dy(0,`i`,26)}function ho(i,c){i&1&&Dy(0,`i`,27)}function bo(i,c){if(i&1){let e=sc();Va$1(0,`button`,25),S_(1,`translate`),S_(2,`translate`),ac(`click`,function(){Ko$1(e);let t=ve(2);return Qo$1(t.doInstall(t.versionSelect))}),Fe(3,fo,1,0,`i`,26)(4,ho,1,0,`i`,27),jd()}if(i&2){let e=ve(2);Cr$1(`aria-label`,`${e.plugin?.installedVersion===e.versionSelect?N_(1,2,`plugins.manage.reinstall`):N_(2,4,`plugins.manage.install`)} v${e.versionSelect}`),se(3),Le(e.plugin?.installedVersion===e.versionSelect?3:4)}}function Co(i,c){i&1&&(Va$1(0,`div`,36),Dy(1,`i`,41),jd())}function xo(i,c){i&1&&(Va$1(0,`div`,36),Dy(1,`i`,41),jd())}function vo(i,c){i&1&&(Va$1(0,`div`,36),Dy(1,`i`,41),jd())}function yo(i,c){if(i&1&&(Va$1(0,`li`,28)(1,`label`,29),Dy(2,`input`,42),S_(3,`translate`),db(),Va$1(4,`div`,31),Dy(5,`i`,43),jd(),Va$1(6,`div`,33)(7,`div`,34),Ot(8),S_(9,`translate`),jd(),Va$1(10,`small`,35),Ot(11),S_(12,`translate`),jd()(),Fe(13,vo,2,0,`div`,36),jd()()),i&2){let e=ve(3);se(2),vy(`formControl`,e.updatePreferenceControl),Cr$1(`aria-label`,N_(3,9,`plugins.manage.notifications_major`)),pb(),se(3),Ay(`primary-text`,e.updatePreferenceControl.value===`major`)(`grey-text`,e.updatePreferenceControl.value!==`major`),se(3),Py(N_(9,11,`plugins.manage.notifications_major`)),se(3),Py(N_(12,13,`plugins.manage.notifications_major_desc`)),se(2),Le(e.updatePreferenceControl.value===`major`?13:-1)}}function Bo(i,c){i&1&&(Va$1(0,`div`,36),Dy(1,`i`,41),jd())}function So(i,c){if(i&1&&(Va$1(0,`ul`,19),S_(1,`translate`),Va$1(2,`li`,28)(3,`label`,29),Dy(4,`input`,30),S_(5,`translate`),db(),Va$1(6,`div`,31),Dy(7,`i`,32),jd(),Va$1(8,`div`,33)(9,`div`,34),Ot(10),S_(11,`translate`),jd(),Va$1(12,`small`,35),Ot(13),S_(14,`translate`),jd()(),Fe(15,Co,2,0,`div`,36),jd()(),Va$1(16,`li`,28)(17,`label`,29),Dy(18,`input`,37),S_(19,`translate`),db(),Va$1(20,`div`,31),Dy(21,`i`,38),jd(),Va$1(22,`div`,33)(23,`div`,34),Ot(24),S_(25,`translate`),jd(),Va$1(26,`small`,35),Ot(27),S_(28,`translate`),jd()(),Fe(29,xo,2,0,`div`,36),jd()(),Fe(30,yo,14,15,`li`,28),Va$1(31,`li`,28)(32,`label`,29),Dy(33,`input`,39),S_(34,`translate`),db(),Va$1(35,`div`,31),Dy(36,`i`,40),jd(),Va$1(37,`div`,33)(38,`div`,34),Ot(39),S_(40,`translate`),jd(),Va$1(41,`small`,35),Ot(42),S_(43,`translate`),jd()(),Fe(44,Bo,2,0,`div`,36),jd()()()),i&2){let e=ve(2);Cr$1(`aria-label`,N_(1,29,`plugins.manage.notifications`)),se(4),vy(`formControl`,e.updatePreferenceControl),Cr$1(`aria-label`,N_(5,31,`plugins.manage.notifications_all`)),pb(),se(3),Ay(`primary-text`,e.updatePreferenceControl.value===`all`)(`grey-text`,e.updatePreferenceControl.value!==`all`),se(3),Py(N_(11,33,`plugins.manage.notifications_all`)),se(3),Py(N_(14,35,`plugins.manage.notifications_all_desc`)),se(2),Le(e.updatePreferenceControl.value===`all`?15:-1),se(3),vy(`formControl`,e.updatePreferenceControl),Cr$1(`aria-label`,N_(19,37,`plugins.manage.notifications_beta`)),pb(),se(3),Ay(`primary-text`,e.updatePreferenceControl.value===`beta`)(`grey-text`,e.updatePreferenceControl.value!==`beta`),se(3),Py(N_(25,39,`plugins.manage.notifications_beta`)),se(3),Py(N_(28,41,`plugins.manage.notifications_beta_desc`)),se(2),Le(e.updatePreferenceControl.value===`beta`?29:-1),se(),Le(e.plugin.name===`homebridge`||e.plugin.name===`homebridge-config-ui-x`?30:-1),se(3),vy(`formControl`,e.updatePreferenceControl),Cr$1(`aria-label`,N_(34,43,`plugins.manage.notifications_none`)),pb(),se(3),Ay(`primary-text`,e.updatePreferenceControl.value===`none`)(`grey-text`,e.updatePreferenceControl.value!==`none`),se(3),Py(N_(40,45,`plugins.manage.notifications_none`)),se(3),Py(N_(43,47,`plugins.manage.notifications_none_desc`)),se(2),Le(e.updatePreferenceControl.value===`none`?44:-1)}}function ko(i,c){if(i&1){let e=sc();Va$1(0,`div`,6),Fe(1,so,9,7)(2,co,4,3),Va$1(3,`ul`,13),_T(4,go,11,8,`li`,14,TT),Va$1(6,`li`,14)(7,`div`,15),Ot(8),S_(9,`translate`),Dy(10,`br`),Va$1(11,`select`,16),S_(12,`translate`),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve();return m_(a.versionSelect,t)||(a.versionSelect=t),Qo$1(t)}),_T(13,_o,3,4,`option`,17,TT),jd(),db(),jd(),Fe(15,bo,5,6,`button`,18),jd()(),Fe(16,So,45,49,`ul`,19),jd()}if(i&2){let e=ve();se(),Le(e.plugin?.installedVersion?1:2),se(3),ST(e.versionsWithTags()),se(4),kt(` `,N_(9,6,`plugins.manage.all_versions`),` `),se(3),$y(`ngModel`,e.versionSelect),Cr$1(`aria-label`,N_(12,8,`plugins.manage.all_versions`)),pb(),se(2),ST(e.versions()),se(2),Le(e.versionSelect?15:-1),se(),Le(e.plugin?.installedVersion?16:-1)}}var At=(()=>{class i{$activeModal=g(fe);$api=g(U3);$pluginsCache=g(Ge);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);modalData=g(l);destroyRef=g(Z);plugin=this.modalData.plugin;onRefreshPluginList=this.modalData.onRefreshPluginList;onSettingsChange=this.modalData.onSettingsChange;_versionSelect=q(``);loading=q(!0);versions=q([]);versionsWithTags=q([]);get versionSelect(){return this._versionSelect()}set versionSelect(e){this._versionSelect.set(e)}updatePreferenceControl=new Se(`all`);ngOnInit(){let e=this.plugin;if(!e)return;this.versionSelect=e.installedVersion||e.latestVersion,this.lookupVersions();let n=this.getCurrentUpdatePreference();this.updatePreferenceControl.setValue(n),this.updatePreferenceControl.valueChanges.pipe(Wf(500),An(this.destroyRef)).subscribe(t=>{t!==null&&this.updatePreference(t)})}doInstall(e){let n=this.plugin;if(!n)return;let t=this.versions().find(a=>a.version===e);this.$activeModal.close({name:n.name,version:e,engines:t?.engines,action:n.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 E(this,null,function*(){let n=this.plugin;if(n)try{if(n.name===`homebridge`)yield this.$api.patch(`/config-editor/ui`,{homebridgeUpdatePolicy:e}),this.$settings.env.homebridgeUpdatePolicy=e,yield this.$api.post(`/plugins/clear-cache`,{});else if(n.name===`homebridge-config-ui-x`)yield this.$api.patch(`/config-editor/ui`,{homebridgeUiUpdatePolicy:e}),this.$settings.env.homebridgeUiUpdatePolicy=e,yield this.$api.post(`/plugins/clear-cache`,{});else{let m=e===`none`,u=e===`beta`,h=this.$settings.env.plugins?.hideUpdatesFor||[];m&&!h.includes(n.name)?h=[...h,n.name].sort((w,O)=>w.localeCompare(O)):m||(h=h.filter(w=>w!==n.name));let x=this.$settings.env.plugins?.showBetasFor||[];u&&!x.includes(n.name)?x=[...x,n.name].sort((w,O)=>w.localeCompare(O)):u||(x=x.filter(w=>w!==n.name)),yield this.$api.put(`/config-editor/ui/plugins/hide-updates-for`,{body:h}),yield this.$api.patch(`/config-editor/ui`,{"plugins.showBetasFor":x}),this.$settings.setEnvItem(`plugins.hideUpdatesFor`,h),this.$settings.setEnvItem(`plugins.showBetasFor`,x),yield this.$api.post(`/plugins/clear-cache`,{})}this.$pluginsCache.invalidate();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 E(this,null,function*(){let e=this.plugin;if(e)try{let n=yield this.$api.get(`/plugins/lookup/${encodeURIComponent(e.name)}/versions`),t=[],a=[];for(let[u,h]of Object.entries(n.versions))t.push({version:u,engines:h.engines||null}),Object.keys(n.tags).filter(x=>n.tags[x]===u).forEach(x=>{a.push({version:u,tag:x})});let m=this.plugin;m?.installedVersion&&!t.some(u=>u.version===m.installedVersion)&&t.push({version:m.installedVersion,engines:m.engines||null}),t.sort((u,h)=>(0,Qi.rcompare)(u.version,h.version)),a.sort((u,h)=>{let x=[`latest`,`next`,`beta`,`alpha`];return(x.includes(u.tag)?x.indexOf(u.tag):999)-(x.includes(h.tag)?x.indexOf(h.tag):999)}),this.versions.set(t),this.versionsWithTags.set(a),!t.some(u=>u.version===this.versionSelect)&&n.tags.latest&&(this.versionSelect=n.tags.latest),this.loading.set(!1)}catch(n){console.error(n);let t=n instanceof Error?n.error?.message||n.message:this.$translate.instant(`toast.title_error`);this.$toastr.error(t,this.$translate.instant(`toast.title_error`)),this.$activeModal.dismiss()}})}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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,`fas`,`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-2x`]],template:function(n,t){n&1&&(Va$1(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),jd(),Va$1(4,`button`,3),S_(5,`translate`),ac(`click`,function(){return t.dismissModal()}),jd()(),Va$1(6,`div`,4),Fe(7,lo,2,0,`div`,5)(8,ko,17,10,`div`,6),jd(),Va$1(9,`div`,7),Dy(10,`div`,8),Va$1(11,`div`,9)(12,`button`,10),ac(`click`,function(){return t.dismissModal()}),Ot(13),S_(14,`translate`),jd()(),Dy(15,`div`,11),jd()()),n&2&&(se(3),Py(t.plugin?.displayName||t.plugin?.name),se(),Cr$1(`aria-label`,N_(5,4,`form.button_close`)),se(3),Le(t.loading()?7:8),se(6),kt(` `,N_(14,6,`form.button_close`),` `))},dependencies:[Kn,Xn$1,Yn$1,Ye,Vt,fn$1,Hn,ln$1,Jn$1,mn$1,v3],styles:[`.version-select[_ngcontent-%COMP%]{font-size:.875rem}`]})}return i})();var Zi=D(L$2(),1);var Eo=[`pluginlogoutput`];function wo(i,c){if(i&1){let e=sc();Va$1(0,`button`,15),S_(1,`translate`),S_(2,`translate`),ac(`click`,function(){Ko$1(e);return Qo$1(ve().restartChildBridges())}),Dy(3,`i`,16),jd()}if(i&2){let e=ve();vy(`ngbTooltip`,N_(1,4,e.childBridges.length>1?`child_bridge.restart_plural`:`child_bridge.restart`))(`openDelay`,150)(`disabled`,e.midAction()),Cr$1(`aria-label`,N_(2,6,e.childBridges.length>1?`child_bridge.restart_plural`:`child_bridge.restart`))}}var Yi=/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g;var Mo=/36m\[.*?\]/;var en=(()=>{class i{$activeModal=g(fe);$api=g(U3);$log=g(Z$1);$modal=g(si);$toastr=g(z0);$translate=g(Nf);$settings=g(zt$1);injector=g(Te);modalData=g(M);termTarget=a$(`pluginlogoutput`);plugin=this.modalData.plugin;childBridges=this.modalData.childBridges??[];editorContext=this.modalData.editorContext;midAction=q(!1);resizeEvent=new P;pluginAlias;get isLightTerminalTheme(){return this.$settings.getEffectiveTerminalLightingMode()===`light`}ngOnInit(){this.getPluginLog()}ngOnDestroy(){this.$log.destroyTerminal()}onWindowResize(){this.resizeEvent.next(void 0)}patchXtermLiveRegion(){let e=this.termTarget()?.nativeElement;if(!e)return;let n=e.querySelector(`[aria-live]`);n&&(n.setAttribute(`role`,`status`),n.setAttribute(`aria-live`,`polite`),n.setAttribute(`aria-atomic`,`true`))}restartChildBridges(){return E(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 E(this,null,function*(){this.midAction.set(!0);let e=uy([{provide:A,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),n=this.$modal.open(O$1,{size:`lg`,backdrop:`static`,injector:e});try{yield n.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(`
`),m=``,u=!1;a.forEach(h=>{if(h){if(u)if(Mo.test(h))u=!1;else{m+=`${h.replace(Yi,``)}\r
`;return}h.includes(`36m[${this.pluginAlias}]`)&&(m+=`${h.replace(Yi,``)}\r
`,u=!0)}}),this.plugin&&(0,Zi.saveAs)(new Blob([m],{type:`text/plain;charset=utf-8`}),`${this.plugin.name}.log.txt`),this.midAction.set(!1)}catch(t){let a;try{t instanceof xn&&t.error?.text&&(a=JSON.parse(yield t.error.text()).message)}catch(m){console.error(m)}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 E(this,null,function*(){if(this.plugin)try{let e=this.editorContext?.config??(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({disableStdin:!0}),this.resizeEvent,this.pluginAlias),requestAnimationFrame(()=>this.patchXtermLiveRegion())}catch(e){console.error(e);let n=e instanceof Error?e.error?.message||e.message:this.$translate.instant(`toast.title_error`);this.$toastr.error(n,this.$translate.instant(`toast.title_error`)),this.$activeModal.dismiss()}})}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,selectors:[[`app-plugin-logs`]],viewQuery:function(n,t){n&1&&My(t.termTarget,Eo,5),n&2&&$T()},hostBindings:function(n,t){n&1&&ac(`resize`,function(){return t.onWindowResize()},_w)},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`],[`aria-hidden`,`true`,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`],[`aria-hidden`,`true`,1,`fas`,`fa-power-off`]],template:function(n,t){n&1&&(Va$1(0,`div`,1)(1,`div`,2)(2,`h5`,3),Ot(3),jd(),Va$1(4,`button`,4),S_(5,`translate`),ac(`click`,function(){return t.dismissModal()}),jd()(),Va$1(6,`div`,5),Dy(7,`div`,6,0),jd(),Va$1(9,`div`,7)(10,`div`,8)(11,`button`,9),S_(12,`translate`),ac(`click`,function(){return t.dismissModal()}),Ot(13),S_(14,`translate`),jd()(),Dy(15,`div`,10),Va$1(16,`div`,11)(17,`button`,12),S_(18,`translate`),S_(19,`translate`),ac(`click`,function(){return t.downloadLogFile()}),Dy(20,`i`,13),jd(),Fe(21,wo,4,8,`button`,14),jd()()()),n&2&&(Ay(`terminal-light-theme`,t.isLightTerminalTheme),se(3),Py(t.plugin?.displayName||t.plugin?.name),se(),vy(`disabled`,t.midAction()),Cr$1(`aria-label`,N_(5,17,`form.button_close`)),se(3),Ay(`terminal-dark-bg`,!t.isLightTerminalTheme)(`terminal-light-bg`,t.isLightTerminalTheme),se(4),vy(`disabled`,t.midAction()),Cr$1(`aria-label`,N_(12,19,`form.button_close`)),se(2),kt(` `,N_(14,21,`form.button_close`),` `),se(4),vy(`ngbTooltip`,N_(18,23,`logs.title_download_log_file`))(`openDelay`,150)(`disabled`,t.midAction()),Cr$1(`aria-label`,N_(19,25,`logs.title_download_log_file`)),se(4),Le(t.childBridges.length?21:-1))},dependencies:[Y,v3],encapsulation:2})}return i})();var tn=D(Ti(),1);var qt=()=>({app:`Homebridge v2`});function Io(i,c){i&1&&(Va$1(0,`div`,5),Dy(1,`i`,12),jd())}function Po(i,c){i&1&&(Va$1(0,`p`,9),Ot(1,`All your plugins are marked as compatible with Homebridge v2.`),jd())}function To(i,c){i&1&&(Va$1(0,`p`,9),Ot(1,`To ignore this warning and continue with the update, click continue below.`),jd())}function Vo(i,c){if(i&1&&(Va$1(0,`p`,9),Ot(1,` Some of your plugins are not explicitly marked as compatible with Homebridge v2. This does `),Va$1(2,`span`,17),Ot(3,`not`),jd(),Ot(4,` necessarily mean that they won't work. We just can't guarantee that they will. `),jd(),Va$1(5,`p`,9),Ot(6,` For more information about this update, please see the `),Va$1(7,`a`,18),Ot(8,`wiki page`),jd(),Ot(9,`. `),jd(),Fe(10,To,2,0,`p`,9)),i&2){let e=ve(2);se(10),Le(e.isUpdating?10:-1)}}function $o(i,c){i&1&&(Va$1(0,`div`,19),Ot(1,` Node.js Version`),Dy(2,`br`),Va$1(3,`span`,20),Ot(4),S_(5,`translate`),jd()(),Va$1(6,`div`,21),Dy(7,`i`,22),jd()),i&2&&(se(4),Py(x_(5,1,`status.readiness.node_yes`,I_(4,qt))))}function Do(i,c){i&1&&(Va$1(0,`div`,19),Ot(1,` Node.js Version`),Dy(2,`br`),Va$1(3,`span`,20),Ot(4),S_(5,`translate`),jd(),Dy(6,`br`),Va$1(7,`a`,23),Ot(8),S_(9,`translate`),Dy(10,`i`,24),jd()(),Va$1(11,`div`,21),Dy(12,`i`,25),jd()),i&2&&(se(4),Py(x_(5,2,`status.readiness.node_no`,I_(7,qt))),se(4),kt(` `,N_(9,5,`plugins.compat.node_link`),` `))}function Ao(i,c){i&1&&Dy(0,`i`,28)}function No(i,c){i&1&&Dy(0,`i`,29)}function Lo(i,c){if(i&1){let e=sc();Va$1(0,`li`,16)(1,`div`,26)(2,`img`,27),ac(`error`,function(){let t=Ko$1(e).$implicit;return Qo$1(ve(2).handleIconError(t))}),jd()(),Va$1(3,`div`,19),Ot(4),jd(),Va$1(5,`div`,21),Fe(6,Ao,1,0,`i`,28),Fe(7,No,1,0,`i`,29),jd()()}if(i&2){let e=c.$implicit;se(2),vy(`src`,e.icon,Xg),se(2),Py(e.displayName),se(2),Le(e.hb2Ready===`supported`?6:-1),se(),Le(e.hb2Ready===`unknown`?7:-1)}}function Oo(i,c){if(i&1&&(Va$1(0,`div`,13),Dy(1,`img`,14),jd(),Fe(2,Po,2,0,`p`,9)(3,Vo,11,1),Va$1(4,`ul`,15)(5,`li`,16),Fe(6,$o,8,5)(7,Do,13,8),jd(),_T(8,Lo,8,4,`li`,16,TT),jd()),i&2){let e=ve();se(2),Le(e.allPluginsSupported()?2:3),se(4),Le(e.nodeReady()?6:7),se(2),ST(e.installedPlugins())}}function jo(i,c){if(i&1){let e=sc();Va$1(0,`button`,30),S_(1,`translate`),ac(`click`,function(){Ko$1(e);return Qo$1(ve().closeModal(`Dismiss`))}),Ot(2),S_(3,`translate`),jd()}i&2&&(Cr$1(`aria-label`,N_(1,2,`form.button_close`)),se(2),kt(` `,N_(3,4,`form.button_close`),` `))}function Fo(i,c){if(i&1){let e=sc();Va$1(0,`button`,30),S_(1,`translate`),ac(`click`,function(){Ko$1(e);return Qo$1(ve().closeModal(`Dismiss`))}),Ot(2),S_(3,`translate`),jd()}i&2&&(Cr$1(`aria-label`,N_(1,2,`form.button_close`)),se(2),kt(` `,N_(3,4,`form.button_close`),` `))}function Ho(i,c){if(i&1){let e=sc();Va$1(0,`button`,31),ac(`click`,function(){Ko$1(e);return Qo$1(ve().closeModal(`update`))}),Ot(1),S_(2,`translate`),jd()}if(i&2)vy(`disabled`,ve().loading()),se(),kt(` `,N_(2,2,`form.button_continue`),` `)}var nn=(()=>{class i{$activeModal=g(fe);$errors=g(m);$pluginsCache=g(Ge);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);$ws=g(ds$1);io;modalData=g(g$1);isUpdating=this.modalData.isUpdating;skipIfCompatible=this.modalData.skipIfCompatible;defaultIcon=`assets/hb-icon.png`;loading=q(!0);installedPlugins=q([]);allPluginsSupported=q(!0);nodeReady=q(!1);ngOnInit(){this.initialize()}initialize(){return E(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 E(this,null,function*(){try{let{nodeVersion:e}=yield Ln(this.io.request(`get-homebridge-server-info`));this.nodeReady.set((0,tn.satisfies)(e,`>=22`))}catch(e){console.error(e),this.$toastr.error(this.$errors.toToastMessage(e),this.$translate.instant(`toast.title_error`))}})}loadInstalledPlugins(){return E(this,null,function*(){this.installedPlugins.set([]),this.loading.set(!0);let e=this.$settings.env.homebridgeVersion.split(`.`)[0];try{let t=(yield this.$pluginsCache.get()).filter(a=>a.name!==`homebridge-config-ui-x`).map(a=>{let m=a.engines?.homebridge?.split(`||`).map(h=>h.trim())||[],u=e===`2`?`hide`:m.some(h=>h.startsWith(`^2`)||h.startsWith(`>=2`))?`supported`:`unknown`;return u===`unknown`&&this.allPluginsSupported.set(!1),x(w({},a),{hb2Ready:u})}).sort((a,m)=>a.name.localeCompare(m.name));this.installedPlugins.set(t),this.skipIfCompatible&&this.installedPlugins().length===0&&this.$activeModal.close(`update`)}catch(n){console.error(n),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 ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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,`fas`,`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,`fas`,`fa-up-right-from-square`],[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(n,t){n&1&&(Va$1(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),S_(4,`translate`),jd(),Va$1(5,`button`,3),S_(6,`translate`),ac(`click`,function(){return t.closeModal(`Dismiss`)}),jd()(),Va$1(7,`div`,4),Fe(8,Io,2,0,`div`,5)(9,Oo,10,2),jd(),Va$1(10,`div`,6)(11,`div`,7),Fe(12,jo,4,6,`button`,8),jd(),Va$1(13,`div`,9),Fe(14,Fo,4,6,`button`,8),jd(),Va$1(15,`div`,10),Fe(16,Ho,3,4,`button`,11),jd()()()),n&2&&(se(3),Py(x_(4,6,`status.readiness.title`,I_(11,qt))),se(2),Cr$1(`aria-label`,N_(6,9,`form.button_close`)),se(3),Le(t.loading()?8:9),se(4),Le(t.isUpdating?12:-1),se(2),Le(t.isUpdating?-1:14),se(2),Le(t.isUpdating?16:-1))},dependencies:[NU,v3],encapsulation:2})}return i})();var Uo=(i,c,e,n,t)=>({iconStar:i,iconThumbsUp:c,iconCoffee:e,iconHeart:n,link:t});var Ro=()=>[`homebridge`,`homebridge-config-ui-x`];var qo=i=>({pluginName:i});function zo(i,c){i&1&&(Va$1(0,`p`,15),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),Py(N_(2,1,`plugins.settings.restart_required`)))}function Wo(i,c){i&1&&(Va$1(0,`p`,15),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),Py(N_(2,1,`restart.child_bridges`)))}function Go(i,c){if(i&1&&(Dy(0,`p`,14),S_(1,`translate`),Fe(2,zo,3,3,`p`,15)(3,Wo,3,3,`p`,15)),i&2){let e=ve(3);vy(`innerHTML`,x_(1,2,e.supportMessageKey(),T_(5,Uo,e.iconStar,e.iconThumbsUp,e.iconCoffee,e.iconHeart,e.donationLink())),Ga$1),se(2),Le(e.childBridges().length===0?2:3)}}function Ko(i,c){if(i&1&&(Va$1(0,`div`,11),Dy(1,`i`,12),jd(),Va$1(2,`h5`,13),Ot(3),jd(),Fe(4,Go,4,11)),i&2){let e=ve(2);se(3),By(``,e.pastTenseVerb(),`: `,e.pluginDisplayName,` (`,e.targetVersionPretty(),`)`),se(),Le(e.isDisabled?-1:4)}}function Jo(i,c){if(i&1&&(Va$1(0,`div`,7),Fe(1,Ko,5,4),jd()),i&2){let e=ve();se(),Le(e.justUpdatedPlugin()?1:-1)}}function Xo(i,c){if(i&1&&(Va$1(0,`div`,8)(1,`div`,11),Dy(2,`i`,16),jd(),Va$1(3,`ul`,17)(4,`li`),Ot(5),S_(6,`translate`),jd(),Va$1(7,`li`),Ot(8),S_(9,`translate`),jd()(),Va$1(10,`pre`,18),Ot(11),jd()()),i&2){let e=ve();se(2),Ay(`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`),se(3),Py(N_(6,12,`plugins.manage.online_updates`)),se(3),Py(N_(9,14,`plugins.manage.manual_update_command`)),se(3),jy(`hb-service stop
npm install -g `,e.pluginName,`@`,e.targetVersion,`
hb-service start`)}}function Qo(i,c){if(i&1&&(Va$1(0,`span`),Ot(1),jd()),i&2){let e=ve(3);se(),kt(`v`,e.installedVersion,` → `)}}function Yo(i,c){if(i&1&&(Va$1(0,`h5`,20),Fe(1,Qo,2,1,`span`),Ot(2),jd()),i&2){let e=ve(2);se(),Le(e.installedVersion?1:-1),se(),kt(` `,e.targetVersionPretty(),` `)}}function Zo(i,c){i&1&&(Va$1(0,`div`,29),Dy(1,`i`,30),jd())}function ea(i,c){if(i&1&&Dy(0,`markdown`,31),i&2)vy(`data`,ve(4).versionNotes())}function ta(i,c){i&1&&(Va$1(0,`div`,32),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),kt(` `,N_(2,1,`plugins.manage.notes_none`),` `))}function ia(i,c){if(i&1&&(Va$1(0,`div`,32),Ot(1),S_(2,`translate`),Dy(3,`br`),Ot(4),S_(5,`translate`),Dy(6,`br`),Ot(7),S_(8,`translate`),Dy(9,`br`),jd()),i&2){let e=ve(6);se(),kt(` `,x_(2,3,`plugins.manage.notes_beta_1`,w_(10,qo,e.pluginDisplayName))),se(3),kt(` `,N_(5,6,`plugins.manage.notes_beta_2`)),se(3),kt(` `,N_(8,8,`plugins.manage.notes_beta_3`))}}function na(i,c){i&1&&(Va$1(0,`div`,32),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),kt(` `,N_(2,1,`plugins.manage.notes_latest`),` `))}function oa(i,c){if(i&1&&Fe(0,ia,10,12,`div`,32)(1,na,3,3,`div`,32),i&2){let e=ve(5);Le(e.targetVersion.includes(`beta`)||e.targetVersion.includes(`alpha`)||e.targetVersion.includes(`next`)?0:1)}}function aa(i,c){if(i&1&&Fe(0,ta,3,3,`div`,32)(1,oa,2,1),i&2)Le(ve(4).versionNotesShow()?0:1)}function ra(i,c){if(i&1&&Fe(0,ea,1,1,`markdown`,31)(1,aa,2,1),i&2)Le(ve(3).versionNotes()?0:1)}function la(i,c){if(i&1&&(Va$1(0,`div`,28),Fe(1,Zo,2,0,`div`,29)(2,ra,2,1),jd()),i&2){let e=ve(2);se(),Le(e.action===`Update`&&!e.versionNotesLoaded()?1:2)}}function sa(i,c){i&1&&(Va$1(0,`div`,29),Dy(1,`i`,30),jd())}function da(i,c){if(i&1&&Dy(0,`markdown`,31),i&2)vy(`data`,ve(4).fullChangelog())}function ca(i,c){i&1&&(Dy(0,`div`,33),S_(1,`translate`)),i&2&&vy(`innerHTML`,N_(1,1,`plugins.manage.changelog_none`),Ga$1)}function pa(i,c){if(i&1&&Fe(0,da,1,1,`markdown`,31)(1,ca,2,3,`div`,33),i&2)Le(ve(3).fullChangelog()?0:1)}function ma(i,c){if(i&1&&(Va$1(0,`div`,28),Fe(1,sa,2,0,`div`,29)(2,pa,2,1),jd()),i&2){let e=ve(2);se(),Le(e.action===`Update`&&!e.fullChangelogLoaded()?1:2)}}function ga(i,c){i&1&&(Va$1(0,`span`,36),Dy(1,`i`,39),jd())}function ua(i,c){if(i&1){let e=sc();Va$1(0,`button`,40),S_(1,`translate`),ac(`click`,function(){Ko$1(e);return Qo$1(ve(3).downloadBackupFile())}),Dy(2,`i`,41),jd()}i&2&&Cr$1(`aria-label`,N_(1,1,`form.button_download`))}function _a(i,c){if(i&1&&(Va$1(0,`div`,27)(1,`p`,34)(2,`span`,35),Ot(3),S_(4,`translate`),jd(),Fe(5,ga,2,0,`span`,36)(6,ua,3,3,`button`,37),jd(),Va$1(7,`p`,38),Ot(8),S_(9,`translate`),jd()()),i&2){let e=ve(2);se(3),Py(N_(4,3,`plugins.manage.backup`)),se(2),Le(e.downloadingBackup()?5:6),se(3),Py(N_(9,5,`plugins.manage.hb_restart`))}}function fa(i,c){if(i&1){let e=sc();Va$1(0,`div`,9)(1,`div`,11),Dy(2,`i`,19),jd(),Fe(3,Yo,3,2,`h5`,20),Va$1(4,`ul`,21,0),ac(`activeIdChange`,function(t){Ko$1(e);return Qo$1(ve().releaseNotesTab.set(t))}),Va$1(6,`li`,22)(7,`button`,23),Ot(8),S_(9,`translate`),jd(),gy(10,la,3,1,`ng-template`,24),jd(),Va$1(11,`li`,22)(12,`button`,25),Ot(13),S_(14,`translate`),jd(),gy(15,ma,3,1,`ng-template`,24),jd()(),Dy(16,`div`,26),Fe(17,_a,10,7,`div`,27),jd()}if(i&2){let e=UT(5),n=ve();se(2),Ay(`fa-arrow-alt-circle-down`,n.action===`Install`&&!n.installedVersion)(`fa-code-compare`,n.action===`Install`&&n.installedVersion)(`fa-arrow-alt-circle-up`,n.action===`Update`)(`fa-trash`,n.action===`Uninstall`),se(),Le(n.latestVersion?3:-1),se(),vy(`activeId`,n.releaseNotesTab()),se(2),vy(`ngbNavItem`,1),se(2),Py(N_(9,16,`plugins.manage.notes`)),se(3),vy(`ngbNavItem`,2),se(2),kt(` `,N_(14,18,`plugins.manage.changelog`),` `),se(3),vy(`ngbNavOutlet`,e),se(),Le(I_(20,Ro).includes(n.pluginName)?17:-1)}}function ha(i,c){if(i&1){let e=sc();Va$1(0,`button`,47),S_(1,`translate`),ac(`click`,function(){Ko$1(e);let t=ve(2);return Qo$1(t.backToVersionModal&&!t.actionComplete()?t.goBack():t.dismissModal())}),Ot(2),S_(3,`translate`),jd()}if(i&2){let e=ve(2);Cr$1(`aria-label`,N_(1,2,e.backToVersionModal&&!e.actionComplete()?`form.button_back`:`form.button_close`)),se(2),kt(` `,N_(3,4,e.backToVersionModal&&!e.actionComplete()?`form.button_back`:`form.button_close`),` `)}}function ba(i,c){if(i&1){let e=sc();Va$1(0,`button`,47),S_(1,`translate`),ac(`click`,function(){Ko$1(e);return Qo$1(ve(2).dismissModal())}),Ot(2),S_(3,`translate`),jd()}i&2&&(Cr$1(`aria-label`,N_(1,2,`form.button_close`)),se(2),kt(` `,N_(3,4,`form.button_close`),` `))}function Ca(i,c){if(i&1){let e=sc();Va$1(0,`button`,48),ac(`click`,function(){Ko$1(e);return Qo$1(ve(2).update())}),Ot(1),S_(2,`translate`),jd()}i&2&&(se(),kt(` `,N_(2,1,`form.button_continue`),` `))}function xa(i,c){if(i&1){let e=sc();Va$1(0,`button`,48),ac(`click`,function(){Ko$1(e);let t=ve(2);return Qo$1(t.childBridges().length>0?t.onRestartChildBridgeClick():t.onRestartHomebridgeClick())}),Ot(1),S_(2,`translate`),jd()}i&2&&(se(),kt(` `,N_(2,1,`menu.tooltip_restart`),` `))}function va(i,c){if(i&1){let e=sc();Va$1(0,`button`,48),ac(`click`,function(){Ko$1(e);return Qo$1(ve(2).downloadLogFile())}),Ot(1),S_(2,`translate`),jd()}i&2&&(se(),kt(` `,N_(2,1,`form.button_download`),` `))}function ya(i,c){if(i&1&&(Va$1(0,`div`,10)(1,`div`,42),Fe(2,ha,4,6,`button`,43),jd(),Va$1(3,`div`,44),Fe(4,ba,4,6,`button`,43),jd(),Va$1(5,`div`,45),Fe(6,Ca,3,3,`button`,46),Fe(7,xa,3,3,`button`,46),Fe(8,va,3,3,`button`,46),jd()()),i&2){let e=ve();se(2),Le(!e.justUpdatedPlugin()&&e.onlineUpdateOk()||e.justUpdatedPlugin()&&(!e.isDisabled||e.actionFailed())?2:-1),se(2),Le(e.justUpdatedPlugin()&&e.isDisabled&&!e.actionFailed()||!e.onlineUpdateOk()?4:-1),se(2),Le(e.onlineUpdateOk()&&e.releaseNotesShow()?6:-1),se(),Le(e.justUpdatedPlugin()&&!e.isDisabled?7:-1),se(),Le(e.actionFailed()?8:-1)}}var Ba=/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g;var Sa=/ko-?fi/i;var ka=/^\d/;var Ke=(()=>{class i{$activeModal=g(fe);$api=g(U3);$backup=g(I$2);$childBridges=g(jt);$errors=g(m);$modal=g(si);$pluginsCache=g(Ge);$router=g(le);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);$ws=g(ds$1);injector=g(Te);modalData=g(L);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=q(``);actionComplete=q(!1);actionFailed=q(!1);justUpdatedPlugin=q(!1);updateToBeta=q(!1);childBridges=q([]);pastTenseVerb=q(``);onlineUpdateOk=q(!1);versionNotes=q(``);versionNotesLoaded=q(!1);versionNotesShow=q(!1);fullChangelog=q(``);fullChangelogLoaded=q(!1);releaseNotesShow=q(!1);isConfigured=q(this.initialIsConfigured);supportMessageKey=q(``);donationLink=q(``);downloadingBackup=q(!1);presentTenseVerb=q(``);releaseNotesTab=q(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>`;actionLiveMessage=q(``);terminalAriaHidden=q(!1);restoreTerminalTimer=null;io;toastSuccess;term;termTarget;fitAddon=new bn$1;webLinksAddon=new kn;errorLog=``;get isLightTerminalTheme(){return this.$settings.getEffectiveTerminalLightingMode()===`light`}constructor(){this.term=new Mn$1(this.$settings.getTerminalOptions({disableStdin:!0})),this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon)}speakAction(e,n=2e3){this.terminalAriaHidden.set(!0),this.actionLiveMessage.set(``),setTimeout(()=>{this.actionLiveMessage.set(this.$translate.instant(e,{pluginName:this.pluginDisplayName||this.pluginName}))},0),this.restoreTerminalTimer&&clearTimeout(this.restoreTerminalTimer),this.restoreTerminalTimer=setTimeout(()=>{this.terminalAriaHidden.set(!1)},n)}applyXtermA11yPatches(){let e=this.termTarget;if(!e)return;let n=e.querySelector(`.xterm`);if(!n)return;let t=n.querySelector(`textarea`);t&&(t.disabled=!0,t.setAttribute(`aria-hidden`,`true`),t.setAttribute(`tabindex`,`-1`),t.setAttribute(`readonly`,`true`),document.activeElement===t&&t.blur());let a=Array.from(n.querySelectorAll(`[aria-live]`));for(let m of a)m.setAttribute(`aria-live`,`off`),m.setAttribute(`aria-atomic`,`false`)}ngOnInit(){let e=this.targetVersion,n=this.latestVersion;switch(this.targetVersionPretty.set(e===`latest`?`v${n}`:ka.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),this.applyXtermA11yPatches();let a=t.toString().replace(Ba,``).trimEnd();a&&(this.errorLog+=`${a}\r
`)}),this.applyXtermA11yPatches(),setTimeout(()=>this.applyXtermA11yPatches(),0),setTimeout(()=>this.applyXtermA11yPatches(),50),setTimeout(()=>this.applyXtermA11yPatches(),250),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.speakAction(`plugins.a11y.installing`,4e3),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.speakAction(`plugins.a11y.uninstalling`,4e3),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 n=this.funding.map(t=>typeof t==`string`?t:t?.url).filter(Boolean);e=n.length>0?n[Math.floor(Math.random()*n.length)]:null}else this.funding?.url&&(e=this.funding.url);if(e){let n=Sa.test(e);this.supportMessageKey.set(n?`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.restoreTerminalTimer&&(clearTimeout(this.restoreTerminalTimer),this.restoreTerminalTimer=null),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.speakAction(`plugins.a11y.updating`,4e3),this.io.request(`update`,{name:this.pluginName,version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>E(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(n){console.error(n)}this.$pluginsCache.invalidate(),this.$childBridges.invalidate();let e=this.onRefreshPluginList;e&&e(),!this.isConfigured()&&this.childBridges().length===0?(this.$toastr.success(this.$translate.instant(`plugins.manage.toast_success`,{verb:this.pastTenseVerb(),name:this.pluginName}),this.toastSuccess),this.$activeModal.close(),this.$router.navigate([`/plugins`])):(this.speakAction(`plugins.a11y.updated_restart`,3e3),this.actionComplete.set(!0),this.justUpdatedPlugin.set(!0),this.$router.navigate([`/plugins`]))}}),error:e=>{this.speakAction(`plugins.a11y.update_failed`,3e3),this.actionFailed.set(!0),console.error(e),this.$toastr.error(this.$errors.toToastMessage(e),this.$translate.instant(`toast.title_error`))}})}}onRestartHomebridgeClick(){this.$router.navigate([`/restart`]),this.$activeModal.close()}onRestartChildBridgeClick(){return E(this,null,function*(){try{for(let n of this.childBridges())yield this.$api.put(`/server/restart/${n.username}`,{});let e=uy([{provide:M,useValue:{plugin:{name:this.pluginName,displayName:this.pluginDisplayName},childBridges:this.childBridges()}}],this.injector);this.$modal.open(en,{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,on.saveAs)(e,`${this.pluginName}-error.log`)}downloadBackupFile(){return E(this,null,function*(){this.downloadingBackup.set(!0);try{yield this.$backup.downloadBackup()}catch(e){console.error(e);let n=e instanceof Error?e.message:this.$translate.instant(`toast.title_error`);this.$toastr.error(n,this.$translate.instant(`toast.title_error`))}finally{this.downloadingBackup.set(!1)}})}dismissModal(){this.$activeModal.dismiss(`Dismiss`)}goBack(){return E(this,null,function*(){this.$activeModal.dismiss(`Back`);let e=uy([{provide:l,useValue:{plugin:this.backToVersionModal,onRefreshPluginList:this.onRefreshPluginList}}],this.injector),n=this.$modal.open(At,{size:`lg`,backdrop:`static`,injector:e});try{let{action:t,version:a}=yield n.result,m=uy([{provide:L,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(i,{size:`lg`,backdrop:`static`,injector:m})}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:()=>E(this,null,function*(){this.speakAction(`plugins.a11y.installed_restart`,3e3),this.$toastr.success(this.$translate.instant(`plugins.manage.toast_success`,{verb:this.pastTenseVerb(),name:this.pluginName}),this.toastSuccess),this.$pluginsCache.invalidate(),this.$childBridges.invalidate();let e=this.onRefreshPluginList;e&&e();try{let t=(yield this.$pluginsCache.get()).find(a=>a.name===this.pluginName);this.$activeModal.close({action:`just-installed`,plugin:t})}catch(n){console.error(`Failed to fetch updated plugin data:`,n),this.$activeModal.close({action:`just-installed`,pluginName:this.pluginName})}}),error:e=>{this.speakAction(`plugins.a11y.install_failed`,3e3),this.actionFailed.set(!0),console.error(e),this.$router.navigate([`/plugins`]),this.$toastr.error(this.$errors.toToastMessage(e),this.$translate.instant(`toast.title_error`))}})}}uninstall(){this.io.request(`uninstall`,{name:this.pluginName,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{this.speakAction(`plugins.a11y.uninstalled_restart`,3e3),this.$pluginsCache.invalidate(),this.$childBridges.invalidate();let e=this.onRefreshPluginList;e&&e(),this.$activeModal.close(),this.$router.navigate([`/plugins`]),this.$modal.open(oe,{size:`lg`,backdrop:`static`,keyboard:!1})},error:e=>{this.speakAction(`plugins.a11y.uninstall_failed`,3e3),this.actionFailed.set(!0),console.error(e),this.$toastr.error(this.$errors.toToastMessage(e),this.$translate.instant(`toast.title_error`))}})}upgradeHomebridge(){return E(this,null,function*(){let e=`update`;if(Number(this.installedVersion.split(`.`)[0])<2&&[`2`,`alpha`,`beta`].includes(this.targetVersion.split(`.`)[0])){let n=uy([{provide:g$1,useValue:{isUpdating:!0,skipIfCompatible:!1}}],this.injector);e=yield this.$modal.open(nn,{size:`lg`,backdrop:`static`,injector:n}).result}e===`update`?(this.speakAction(`plugins.a11y.updating_homebridge`,4e3),this.io.request(`homebridge-update`,{version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>E(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(n){console.error(n),this.$router.navigate([`/restart`])}}),error:n=>{this.actionFailed.set(!0),console.error(n);let t=n instanceof Error?n.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 E(this,null,function*(){this.releaseNotesShow.set(!0);try{let e=yield this.$api.get(`/plugins/release/${encodeURIComponent(this.pluginName)}`,{params:{version:this.targetVersion}});if(this.fullChangelog.set(e.changelog),e.latestVersion&&this.targetVersion===`latest`&&this.targetVersionPretty.set(e.latestVersion),e.notes)this.versionNotes.set(e.notes),this.versionNotesShow.set(!0);else{let n=[`beta`,`alpha`,`test`,`next`].includes(this.targetVersion)||this.targetVersion.includes(`-`);this.versionNotesShow.set(!n)}}catch(e){console.error(`Error loading release notes:`,e)}this.fullChangelogLoaded.set(!0),this.versionNotesLoaded.set(!0)})}getChildBridges(){return E(this,null,function*(){let n=(yield this.$childBridges.getAll()).filter(t=>this.pluginName===t.plugin);this.childBridges.set(n)})}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,selectors:[[`app-manage-plugin`]],decls:13,vars:17,consts:[[`nav`,`ngbNav`],[1,`modal-content`],[1,`modal-header`],[1,`modal-title`],[`type`,`button`,`data-bs-dismiss`,`modal`,1,`btn-close`,3,`click`],[`role`,`status`,`aria-live`,`polite`,`aria-atomic`,`true`,1,`visually-hidden`],[`id`,`plugin-log-output`,1,`modal-body`,3,`hidden`],[`role`,`status`,`aria-live`,`polite`,`aria-atomic`,`true`,1,`modal-body`,`plugin-modal-body`],[1,`modal-body`],[1,`modal-body`,`plugin-modal-body`],[1,`modal-footer`,`justify-content-between`],[1,`mb-3`,`text-center`],[`aria-hidden`,`true`,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`],[`aria-hidden`,`true`,1,`fas`,`primary-text`,`icon-xl`],[1,`mb-3`],[1,`p-2`,`mb-0`],[`aria-hidden`,`true`,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`],[`aria-hidden`,`true`,1,`fas`,`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`],[`type`,`button`,1,`btn`,`btn-link`,`p-0`,`align-baseline`,`text-decoration-none`],[1,`w-100`,`text-center`,`mb-0`,`small`,`grey-text`],[`aria-hidden`,`true`,1,`fas`,`fa-circle-notch`,`fa-spin`],[`type`,`button`,1,`btn`,`btn-link`,`p-0`,`align-baseline`,`text-decoration-none`,3,`click`],[`aria-hidden`,`true`,1,`fas`,`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(n,t){n&1&&(Va$1(0,`div`,1)(1,`div`,2)(2,`h5`,3),Ot(3),jd(),Va$1(4,`button`,4),S_(5,`translate`),ac(`click`,function(){return t.dismissModal()}),jd()(),Va$1(6,`span`,5),Ot(7),jd(),Dy(8,`div`,6),Fe(9,Jo,2,1,`div`,7),Fe(10,Xo,12,16,`div`,8),Fe(11,fa,18,21,`div`,9),Fe(12,ya,9,5,`div`,10),jd()),n&2&&(Ay(`terminal-light-theme`,t.isLightTerminalTheme),se(3),Py(t.pluginDisplayName),se(),Cr$1(`aria-label`,N_(5,15,`form.button_close`)),se(3),kt(` `,t.actionLiveMessage(),` `),se(),Ay(`terminal-light-bg`,t.isLightTerminalTheme)(`terminal-dark-bg`,!t.isLightTerminalTheme),vy(`hidden`,!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()),Cr$1(`aria-hidden`,t.terminalAriaHidden()?`true`:null),se(),Le(t.actionComplete()?9:-1),se(),Le(t.onlineUpdateOk()?-1:10),se(),Le(t.releaseNotesShow()&&!t.actionComplete()&&t.onlineUpdateOk()?11:-1),se(),Le(!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()||t.actionFailed()?12:-1))},dependencies:[Uo$1,wN,ay,sy,$$,bN,v3],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%]{--%NS%bs-nav-tabs-border-width: 0}`]})}return i})();var an=D(Dt(),1);var Nt=(()=>{class i{transform(e){return e.replace(L$1,location.hostname)}static ɵfac=function(n){return new(n||i)};static ɵpipe=Rt({name:`interpolateMd`,type:i,pure:!0})}return i})();function Ea(i,c){i&1&&(Va$1(0,`div`,5),Dy(1,`i`,14),jd())}function wa(i,c){i&1&&(Va$1(0,`div`,6),Ot(1),S_(2,`translate`),S_(3,`translate`),jd()),i&2&&(se(),jy(` `,N_(2,2,`plugins.settings.message_manual_config_required`),` `,N_(3,4,`plugins.settings.message_consult_documentation`),` `))}function Ma(i,c){if(i&1&&(Dy(0,`markdown`,7),S_(1,`interpolateMd`)),i&2)vy(`data`,N_(1,1,ve().schema?.headerDisplay))}function Ia(i,c){if(i&1){let e=sc();Va$1(0,`button`,28),S_(1,`translate`),ac(`click`,function(){Ko$1(e);let t=ve(2).$index;return Qo$1(ve(2).removeBlock(t))}),Dy(2,`i`,29),jd()}i&2&&vy(`ngbTooltip`,N_(1,2,`form.button_delete`))(`openDelay`,150)}function Pa(i,c){if(i&1){let e=sc();Fe(0,Ia,3,4,`button`,25),Va$1(1,`button`,26),S_(2,`translate`),ac(`click`,function(){Ko$1(e);let t=ve().$index;return Qo$1(ve(2).editBlock(t))}),Dy(3,`i`,27),jd()}if(i&2){let e=ve().$index;Le(ve(2).show()===`configBlock.${e}`?0:-1),se(),vy(`ngbTooltip`,N_(2,3,`form.button_edit`))(`openDelay`,150)}}function Ta(i,c){if(i&1&&(Dy(0,`i`,30),S_(1,`translate`)),i&2){let e=ve().$index,n=ve(2);Ay(`fa-circle-check`,n.formBlocksValid()[e])(`green-text`,n.formBlocksValid()[e])(`fa-circle-exclamation`,!n.formBlocksValid()[e])(`red-text`,n.strictValidation()&&!n.formBlocksValid()[e])(`orange-text`,!n.strictValidation()&&!n.formBlocksValid()[e]),vy(`ngbTooltip`,N_(1,12,n.formBlocksValid()[e]?`form.label_valid`:n.strictValidation()?`form.label_invalid_strict`:`form.label_invalid`))(`openDelay`,150)}}function Va(i,c){if(i&1){let e=sc();Va$1(0,`div`,16)(1,`div`,18)(2,`div`,19)(3,`h5`,20),Ot(4),jd(),Va$1(5,`div`),Fe(6,Pa,4,5),Fe(7,Ta,2,14,`i`,21),jd()()(),Va$1(8,`div`,22)(9,`div`,23)(10,`ngx-monaco-editor`,24),ac(`ngModelChange`,function(t){Ko$1(e);return Qo$1(ve(2).currentBlock.set(t))})(`onInit`,function(t){Ko$1(e);return Qo$1(ve(2).onEditorInit(t))}),jd(),db(),jd()()()}if(i&2){let e=c.$implicit,n=c.$index,t=c.$count,a=ve(2);vy(`ngbAccordionItem`,`configBlock.${n}`)(`collapsed`,a.show()!==`configBlock.${n}`)(`id`,`configBlock.${n}`),se(4),Py(e.name||a.pluginAlias()),se(2),Le(!a.schema?.singular||t>1?6:-1),se(),Le(a.schema?.singular?-1:7),se(3),vy(`options`,a.editorOptions)(`ngModel`,a.currentBlock()),pb()}}function $a(i,c){if(i&1&&(Va$1(0,`div`,17),Dy(1,`markdown`,7),S_(2,`interpolateMd`),jd()),i&2){let e=ve(2);se(),vy(`data`,N_(2,1,e.schema?.footerDisplay))}}function Da(i,c){if(i&1&&(Va$1(0,`div`,15),_T(1,Va,11,8,`div`,16,TT),jd(),Fe(3,$a,3,3,`div`,17)),i&2){let e=ve();vy(`closeOthers`,!0),se(),ST(e.pluginConfig()),se(2),Le(e.schema?.footerDisplay?3:-1)}}function Aa(i,c){if(i&1&&(Dy(0,`i`,35),S_(1,`translate`)),i&2){let e=ve(2);Ay(`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()),vy(`ngbTooltip`,N_(1,12,e.formIsValid()?`form.label_valid`:e.strictValidation()?`form.label_invalid_strict`:`form.label_invalid`))(`openDelay`,150)}}function Na(i,c){if(i&1){let e=sc();Va$1(0,`button`,36),ac(`click`,function(){Ko$1(e);return Qo$1(ve(2).addBlock())}),Dy(1,`i`,37),jd()}}function La(i,c){i&1&&(Ot(0),S_(1,`translate`)),i&2&&kt(` `,N_(1,1,`form.button_save`),` `)}function Oa(i,c){i&1&&Dy(0,`i`,34)}function ja(i,c){if(i&1){let e=sc();Fe(0,Aa,2,14,`i`,31)(1,Na,2,0,`button`,32),Va$1(2,`button`,33),ac(`click`,function(){Ko$1(e);return Qo$1(ve().save())}),Fe(3,La,2,3)(4,Oa,1,0,`i`,34),jd()}if(i&2){let e=ve();Le(e.schema?.singular?0:1),se(2),vy(`disabled`,e.saveInProgress()||!e.formIsValid()&&e.strictValidation()),se(),Le(e.saveInProgress()?4:3)}}function Fa(i,c){if(i&1){let e=sc();Va$1(0,`button`,38),ac(`click`,function(){Ko$1(e);return Qo$1(ve().openFullConfigEditor())}),Ot(1),S_(2,`translate`),jd()}i&2&&(se(),kt(` `,N_(2,1,`plugins.settings.label_open_config_editor`),` `))}var zt=(()=>{class i{$activeModal=g(fe);$api=g(U3);$cb=g(jt);$md=g(N$1);$plugin=g(Ie);$router=g(le);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);modalData=g(a);plugin=this.modalData.plugin;schema=this.modalData.schema;editorContext=this.modalData.editorContext;isDebugModeEnabled=this.$settings.isFeatureEnabled(`childBridgeDebugMode`);isMatterSupported=this.$settings.isFeatureEnabled(`matterSupport`);isProtocolExternalsOnlyEnabled=this.$settings.isFeatureEnabled(`protocolExternalsOnly`);isMatterDisableIpv4Enabled=this.$settings.isFeatureEnabled(`matterDisableIpv4`);isHapDisableIdentifyingMaterialEnabled=this.$settings.isFeatureEnabled(`hapDisableIdentifyingMaterial`);pluginAlias=q(``);pluginType=q(null);loading=q(!0);canConfigure=q(!1);show=q(``);pluginConfig=q([]);currentBlock=q(void 0);currentBlockIndex=q(null);saveInProgress=q(!1);isFirstSave=q(!1);monacoEditor;formBlocksValid=q({});formIsValid=q(!0);strictValidation=q(!1);editorOptions;arrayKey=J(()=>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 E(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(m=>m.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 n=`http://plugin/${this.schema?.pluginAlias||this.pluginAlias()}/config.json`,a=(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas||[]).filter(m=>m.uri!==n);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(n=>x(w({},n),{[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(n=>x(w({},n),{[e]:!0})),this.updateOverallValidation(),setTimeout(()=>this.onValidationChange(),150)}removeBlock(e){let n=this.pluginConfig()[e],t=this.pluginConfig().findIndex(a=>a===n);t>-1&&this.pluginConfig.update(a=>{let m=[...a];return m.splice(t,1),m}),this.currentBlockIndex.set(null),this.currentBlock.set(void 0),this.show.set(``)}save(){return E(this,null,function*(){if(this.saveInProgress.set(!0),!this.saveCurrentBlock()){this.saveInProgress.set(!1);return}try{let e=this.plugin;if(!e)return;let n=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}?include=restart-info`,this.pluginConfig()),t=n.config;if(this.$activeModal.close(),this.isFirstSave()&&this.$settings.env.recommendChildBridges&&t[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(e,!0);return}this.$activeModal.close(),this.$cb.openCorrectRestartModalWithBridges(n.affectedBridges)}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=qt$1(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported,isPlatformPlugin:this.pluginType()===`platform`,isProtocolExternalsOnlyEnabled:this.isProtocolExternalsOnlyEnabled,isMatterDisableIpv4Enabled:this.isMatterDisableIpv4Enabled,isHapDisableIdentifyingMaterialEnabled:this.isHapDisableIdentifyingMaterialEnabled}),u=[...e.required||[]];this.pluginType()===`platform`?(u.includes(`platform`)||u.push(`platform`),e.properties?.platform?e.properties.platform.const=this.pluginAlias():e.properties=x(w({},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=x(w({},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:x(w({},e),{required:u,properties:x(w({},e.properties),{_bridge:a})})}]})}createBasicSchema(){let e=qt$1(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported,isPlatformPlugin:this.pluginType()===`platform`,isProtocolExternalsOnlyEnabled:this.isProtocolExternalsOnlyEnabled,isMatterDisableIpv4Enabled:this.isMatterDisableIpv4Enabled,isHapDisableIdentifyingMaterialEnabled:this.isHapDisableIdentifyingMaterialEnabled});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 n=window.monaco.editor.getModelMarkers({resource:e.uri}),t=window.monaco;return!n.filter(m=>m.severity===t.MarkerSeverity.Error||m.severity===t.MarkerSeverity.Warning).length}onValidationChange(){this.currentBlockIndex()!==null&&this.monacoEditor&&(this.formBlocksValid.update(e=>x(w({},e),{[this.currentBlockIndex()]:this.isJsonValid()})),this.updateOverallValidation())}updateOverallValidation(){this.formIsValid.set(Object.values(this.formBlocksValid()).every(e=>e))}loadPluginAlias(){return E(this,null,function*(){let e=this.plugin;if(e)try{let n=this.editorContext?.alias?this.editorContext.alias:yield this.$api.get(`/plugins/alias/${encodeURIComponent(e.name)}`);n.pluginAlias&&n.pluginType?(this.pluginAlias.set(n.pluginAlias),this.pluginType.set(n.pluginType),this.loadHomebridgeConfig()):this.loading.set(!1)}catch(n){this.loading.set(!1)}})}loadHomebridgeConfig(){return E(this,null,function*(){let e=this.plugin;if(!e)return;let n=this.editorContext?.config??(yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`));this.pluginConfig.set(n),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(),n;e.charAt(0)===`"`&&e.charAt(e.length-1)===`]`&&(e=`{${e}}`);try{n=an.default.parse(e)}catch(m){return console.error(m),this.$toastr.error(this.$translate.instant(`config.config_invalid_json`),this.$translate.instant(`toast.title_error`)),!1}if(Array.isArray(n)||typeof n!=`object`||n===null)return this.$toastr.error(this.$translate.instant(`plugins.config.must_be_object`),this.$translate.instant(`toast.title_error`)),!1;let t=n;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(m=>delete a[m]),Object.assign(a,t),a[this.pluginType()]=this.pluginAlias()}return!0}initializeValidationState(){let e={};for(let n=0;n<this.pluginConfig().length;n+=1)e[n]=!0;this.formBlocksValid.set(e),this.updateOverallValidation()}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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`],[`aria-hidden`,`true`,1,`fas`,`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,`fas`,`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`],[`aria-hidden`,`true`,1,`far`,`fa-pen-to-square`],[`type`,`button`,`container`,`modal`,`triggers`,`hover`,1,`btn`,`btn-danger`,`m-0`,`ms-2`,3,`click`,`ngbTooltip`,`openDelay`],[`aria-hidden`,`true`,1,`fas`,`fa-trash-can`],[`container`,`modal`,`placement`,`left`,`triggers`,`hover`,1,`fas`,`fa-xl`,3,`ngbTooltip`,`openDelay`],[`container`,`modal`,`placement`,`top`,`triggers`,`hover`,1,`fas`,`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`],[`aria-hidden`,`true`,1,`fas`,`fa-circle-notch`,`fa-spin`],[`container`,`modal`,`placement`,`top`,`triggers`,`hover`,1,`fas`,`fa-xl`,`me-2`,3,`ngbTooltip`,`openDelay`],[`type`,`button`,`data-bs-dismiss`,`modal`,1,`btn`,`btn-elegant`,`me-2`,3,`click`],[`aria-hidden`,`true`,1,`fas`,`fa-plus`],[`type`,`button`,1,`btn`,`btn-primary`,3,`click`]],template:function(n,t){n&1&&(Va$1(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),jd(),Va$1(4,`button`,3),S_(5,`translate`),ac(`click`,function(){return t.closeModal()}),jd()(),Va$1(6,`div`,4),Fe(7,Ea,2,0,`div`,5),Fe(8,wa,4,6,`div`,6),Fe(9,Ma,2,3,`markdown`,7),Fe(10,Da,4,2),jd(),Va$1(11,`div`,8)(12,`div`,9)(13,`button`,10),ac(`click`,function(){return t.closeModal()}),Ot(14),S_(15,`translate`),jd()(),Dy(16,`div`,11),Va$1(17,`div`,12),Fe(18,ja,5,3)(19,Fa,3,3,`button`,13),jd()()()),n&2&&(se(3),jy(``,t.plugin?.displayName||t.plugin?.name,` - `,t.pluginType()),se(),vy(`disabled`,t.saveInProgress()),Cr$1(`aria-label`,N_(5,11,`form.button_close`)),se(3),Le(t.loading()?7:-1),se(),Le(!t.loading()&&!t.canConfigure()?8:-1),se(),Le(t.schema?.headerDisplay?9:-1),se(),Le(!t.loading()&&t.canConfigure()?10:-1),se(3),vy(`disabled`,t.saveInProgress()),se(),kt(` `,N_(15,13,`form.button_close`),` `),se(4),Le(t.canConfigure()?18:19))},dependencies:[uy$1,jr$1,JN,Y,F$,KN,k,Kn,Hn,ln$1,GN,Uo$1,v3,Nt],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}`]})}return i})();var Wt=i=>({link:i});var Ha=i=>({name:i});var Ua=(i,c)=>c.fabricIndex;function Ra(i,c){if(i&1){let e=sc();Va$1(0,`button`,15),S_(1,`translate`),ac(`click`,function(){Ko$1(e);return Qo$1(ve().closeModal())}),jd()}if(i&2)vy(`disabled`,ve().saveInProgress()),Cr$1(`aria-label`,N_(1,2,`form.button_close`))}function qa(i,c){i&1&&(Va$1(0,`div`,6),Dy(1,`i`,16),jd())}function za(i,c){i&1&&(Va$1(0,`li`),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),Py(N_(2,1,`child_bridge.bridges_paired_2`)))}function Wa(i,c){if(i&1&&(Va$1(0,`li`),Ot(1),S_(2,`translate`),jd(),Fe(3,za,3,3,`li`)),i&2){let e=ve(2);se(),Py(N_(2,2,`child_bridge.bridges_paired`)),se(2),Le(e.configBlocks().length===1&&!e.deviceInfo().get(e.configBlocks()[0]._bridge?.username)&&e.originalBridges().length===0?3:-1)}}function Ga(i,c){if(i&1&&(Va$1(0,`option`,30),Ot(1),jd()),i&2){let e=c.$implicit,n=c.$index;vy(`value`,n),se(),Py(e.name||e.platform||e.accessory)}}function Ka(i,c){if(i&1){let e=sc();Va$1(0,`ul`,23)(1,`li`,26),Ot(2),S_(3,`translate`),jd(),Va$1(4,`li`,25)(5,`label`,27),Ot(6),S_(7,`translate`),jd(),Va$1(8,`div`,28)(9,`select`,29),ac(`ngModelChange`,function(t){Ko$1(e);let a=ve(3);return a.selectedBlock.set(t),Qo$1(a.onBlockChange(t))}),_T(10,Ga,2,2,`option`,30,TT),jd(),db(),jd()()()}if(i&2){let e=ve(3);se(2),Py(N_(3,3,`form.label.changes_kept`)),se(4),kt(` `,N_(7,5,`accessories.plugin`),` `),se(3),vy(`ngModel`,e.selectedBlock()),pb(),se(),ST(e.configBlocks())}}function Ja(i,c){if(i&1&&Ot(0),i&2){let e=ve().$implicit;jy(` `,e.name,` · `,e.username,` `)}}function Xa(i,c){if(i&1&&Ot(0),i&2){let e=ve().$implicit;kt(` `,e.username,` `)}}function Qa(i,c){if(i&1&&(Va$1(0,`option`,30),Fe(1,Ja,1,2)(2,Xa,1,1),jd()),i&2){let e=c.$implicit;vy(`value`,e.username),se(),Le(e.name?1:2)}}function Ya(i,c){if(i&1){let e=sc();Va$1(0,`li`,25)(1,`label`,31),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,28)(5,`select`,32,0),ac(`change`,function(){Ko$1(e);let t=UT(6);return Qo$1(ve(3).onLinkBridgeChange(t.value))}),Va$1(7,`option`,30),Ot(8),S_(9,`translate`),jd(),_T(10,Qa,3,2,`option`,30,TT),jd()()()}if(i&2){let e=ve(3);se(2),Py(N_(3,2,`child_bridge.config.or_link`)),se(6),Py(N_(9,4,`child_bridge.config.select_existing`)),se(2),ST(e.bridgesAvailableForLink())}}function Za(i,c){i&1&&(Va$1(0,`li`,25)(1,`span`,33),Ot(2,`Child Bridge`),jd(),Va$1(3,`div`,34),Ot(4),S_(5,`translate`),jd()()),i&2&&(se(4),kt(` `,N_(5,1,`child_bridge.config.prevent`),` `))}function er(i,c){if(i&1){let e=sc();Va$1(0,`li`,35)(1,`span`,9),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,36)(5,`input`,39),ac(`change`,function(){Ko$1(e);return Qo$1(ve(4).toggleHideChildBridgeSetup())}),jd(),Dy(6,`label`,40),jd()()}if(i&2){let e=ve(4);se(2),kt(` `,N_(3,2,`child_bridge.config.hide_setup_recommendation`),` `),se(3),vy(`checked`,e.hideChildBridgeSetup())}}function tr(i,c){if(i&1){let e=sc();Va$1(0,`li`,35)(1,`span`,9),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,36)(5,`input`,37),ac(`change`,function(){Ko$1(e);let t=ve(3);return Qo$1(t.toggleExternalBridge(t.configBlocks()[+t.selectedBlock()],!t.enabledBlocks()[+t.selectedBlock()],t.selectedBlock()))}),jd(),Dy(6,`label`,38),jd()(),Fe(7,er,7,4,`li`,35)}if(i&2){let e=ve(3);se(2),kt(` `,N_(3,5,e.currentlySelectedLink()?`child_bridge.config.or_link`:`child_bridge.config.use`),` `),se(3),vy(`id`,`toggleExternalBridgeInput_${e.selectedBlock()}`)(`checked`,e.enabledBlocks()[+e.selectedBlock()]),se(),vy(`for`,`toggleExternalBridgeInput_${e.selectedBlock()}`),se(),Le(!e.justInstalled&&!e.enabledBlocks()[+e.selectedBlock()]&&!e.currentlySelectedLink()?7:-1)}}function ir(i,c){if(i&1&&(Va$1(0,`li`,25)(1,`span`,33),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,41),Ot(5),jd()()),i&2){let e=ve(3);se(2),Py(N_(3,2,`child_bridge.config.name`)),se(3),kt(` `,e.currentlySelectedLink()?.name,` `)}}function nr(i,c){if(i&1&&(Va$1(0,`li`,25)(1,`span`,33),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,41),Ot(5),jd()()),i&2){let e=ve(3);se(2),Py(N_(3,2,`users.label_username`)),se(3),kt(` `,e.currentlySelectedLink()?.username||e.configBlocks()[+e.selectedBlock()]._bridge?.username,` `)}}function or(i,c){if(i&1&&(Va$1(0,`li`,25)(1,`span`,33),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,41),Ot(5),jd()()),i&2){let e=ve(3);se(2),Py(N_(3,2,`child_bridge.config.port`)),se(3),kt(` `,e.currentlySelectedLink()?.port,` `)}}function ar(i,c){i&1&&(Va$1(0,`div`,44),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),kt(` `,N_(2,1,`child_bridge.config.name_invalid`),` `))}function rr(i,c){if(i&1){let e=sc();Va$1(0,`li`,35)(1,`span`,9),Ot(2),S_(3,`translate`),Va$1(4,`code`),Ot(5,`-D`),jd(),Dy(6,`br`),Va$1(7,`small`,63),Ot(8),S_(9,`translate`),jd()(),Va$1(10,`div`,36)(11,`input`,65),S_(12,`translate`),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve(6);return m_(a.configBlocks()[+a.selectedBlock()]._bridge.debugModeEnabled,t)||(a.configBlocks()[+a.selectedBlock()]._bridge.debugModeEnabled=t),Qo$1(t)}),jd(),db(),Dy(13,`label`,38),jd()()}if(i&2){let e=ve(6);se(2),kt(``,N_(3,6,`child_bridge.config.debug`),` `),se(6),Py(N_(9,8,`child_bridge.config.debug_desc`)),se(3),vy(`id`,`homebridgeDebugMode_${e.selectedBlock()}`),$y(`ngModel`,e.configBlocks()[+e.selectedBlock()]._bridge.debugModeEnabled),Cr$1(`aria-label`,N_(12,10,`settings.startup.debug`)),pb(),se(2),vy(`for`,`homebridgeDebugMode_${e.selectedBlock()}`)}}function lr(i,c){if(i&1&&(Va$1(0,`small`,60),Ot(1),jd()),i&2){let e=ve(6);se(),kt(` `,e.globalDebug(),`, `)}}function sr(i,c){if(i&1&&(Va$1(0,`small`,60),Ot(1),jd()),i&2){let e=ve(6);se(),kt(` `,e.globalNodeOptions(),` `)}}function dr(i,c){if(i&1){let e=sc();Va$1(0,`li`,25)(1,`label`,53),Ot(2),S_(3,`translate`),Dy(4,`br`)(5,`small`,54),S_(6,`translate`),jd(),Va$1(7,`div`,55)(8,`input`,56),ac(`input`,function(t){Ko$1(e);let a=ve(5);return Qo$1(a.onScheduledRestartCronChange(a.asInputElement(t.target).value,a.configBlocks()[+a.selectedBlock()]._bridge?.username))}),jd()()(),Fe(9,rr,14,12,`li`,35),Va$1(10,`li`,25)(11,`label`,57)(12,`span`,58),Ot(13,`DEBUG`),jd(),Dy(14,`br`)(15,`small`,59),S_(16,`translate`),jd(),Va$1(17,`div`,28),Fe(18,lr,2,1,`small`,60),Va$1(19,`input`,61),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve(5);return m_(a.configBlocks()[+a.selectedBlock()]._bridge.env.DEBUG,t)||(a.configBlocks()[+a.selectedBlock()]._bridge.env.DEBUG=t),Qo$1(t)}),jd(),db(),jd()(),Va$1(20,`li`,25)(21,`label`,62)(22,`span`,58),Ot(23,`NODE_OPTIONS`),jd(),Dy(24,`br`),Va$1(25,`small`,63),Ot(26),S_(27,`translate`),jd()(),Va$1(28,`div`,28),Fe(29,sr,2,1,`small`,60),Va$1(30,`input`,64),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve(5);return m_(a.configBlocks()[+a.selectedBlock()]._bridge.env.NODE_OPTIONS,t)||(a.configBlocks()[+a.selectedBlock()]._bridge.env.NODE_OPTIONS=t),Qo$1(t)}),jd(),db(),jd()()}if(i&2){let e=ve(5);se(2),kt(` `,N_(3,10,`settings.startup.scheduled_restart`)),se(3),vy(`innerHtml`,x_(6,12,`settings.startup.scheduled_restart_desc`,w_(20,Wt,e.linkCron)),Ga$1),se(3),vy(`value`,e.getScheduledRestartCron(e.configBlocks()[+e.selectedBlock()]._bridge?.username)),se(),Le(e.canShowBridgeDebug()?9:-1),se(6),vy(`innerHTML`,x_(16,15,`settings.service.debug_tooltip_child`,w_(22,Wt,e.linkDebug)),Ga$1),se(3),Le(e.globalDebug()?18:-1),se(),$y(`ngModel`,e.configBlocks()[+e.selectedBlock()]._bridge.env.DEBUG),pb(),se(7),Py(N_(27,18,`settings.service.node_tooltip_child`)),se(3),Le(e.globalNodeOptions()?29:-1),se(),$y(`ngModel`,e.configBlocks()[+e.selectedBlock()]._bridge.env.NODE_OPTIONS),pb()}}function cr(i,c){if(i&1){let e=sc();Va$1(0,`li`,25)(1,`label`,47),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,28)(5,`input`,48),S_(6,`translate`),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve(4);return m_(a.configBlocks()[+a.selectedBlock()]._bridge.manufacturer,t)||(a.configBlocks()[+a.selectedBlock()]._bridge.manufacturer=t),Qo$1(t)}),jd(),db(),jd()(),Va$1(7,`li`,25)(8,`label`,49),Ot(9),S_(10,`translate`),jd(),Va$1(11,`div`,28)(12,`input`,50),S_(13,`translate`),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve(4);return m_(a.configBlocks()[+a.selectedBlock()]._bridge.model,t)||(a.configBlocks()[+a.selectedBlock()]._bridge.model=t),Qo$1(t)}),jd(),db(),jd()(),Va$1(14,`li`,25)(15,`label`,51),Ot(16),S_(17,`translate`),jd(),Va$1(18,`div`,28)(19,`input`,52),S_(20,`translate`),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve(4);return m_(a.configBlocks()[+a.selectedBlock()]._bridge.firmwareRevision,t)||(a.configBlocks()[+a.selectedBlock()]._bridge.firmwareRevision=t),Qo$1(t)}),jd(),db(),jd()(),Fe(21,dr,31,24)}if(i&2){let e=ve(4);se(2),Py(N_(3,12,`child_bridge.config.manufacturer`)),se(3),vy(`placeholder`,N_(6,14,`form.optional`)),$y(`ngModel`,e.configBlocks()[+e.selectedBlock()]._bridge.manufacturer),pb(),se(4),Py(N_(10,16,`child_bridge.config.model`)),se(3),vy(`placeholder`,N_(13,18,`form.optional`)),$y(`ngModel`,e.configBlocks()[+e.selectedBlock()]._bridge.model),pb(),se(4),Py(N_(17,20,`child_bridge.config.firmware`)),se(3),Ay(`font-monospace`,e.configBlocks()[+e.selectedBlock()]._bridge.firmwareRevision),vy(`placeholder`,N_(20,22,`form.optional`)),$y(`ngModel`,e.configBlocks()[+e.selectedBlock()]._bridge.firmwareRevision),pb(),se(2),Le(e.justInstalled?-1:21)}}function pr(i,c){if(i&1){let e=sc();Va$1(0,`li`,25)(1,`label`,42),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,28)(5,`input`,43),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve(3);return m_(a.configBlocks()[+a.selectedBlock()]._bridge.name,t)||(a.configBlocks()[+a.selectedBlock()]._bridge.name=t),Qo$1(t)}),jd(),db(),Fe(6,ar,3,3,`div`,44),jd()(),Va$1(7,`li`,45),ac(`click`,function(){Ko$1(e);let t=ve(3);return Qo$1(t.showAdvanced.set(!t.showAdvanced()))})(`keyup.enter`,function(){Ko$1(e);let t=ve(3);return Qo$1(t.showAdvanced.set(!t.showAdvanced()))}),Va$1(8,`span`,9),Ot(9),S_(10,`translate`),jd(),Dy(11,`i`,46),jd(),Fe(12,cr,22,24)}if(i&2){let e=ve(3);se(2),Py(N_(3,12,`child_bridge.config.name`)),se(3),Ay(`is-invalid`,e.getHapNameValidationError(e.selectedBlock())),$y(`ngModel`,e.configBlocks()[+e.selectedBlock()]._bridge.name),pb(),se(),Le(e.getHapNameValidationError(e.selectedBlock())?6:-1),se(),Cr$1(`aria-expanded`,e.showAdvanced()?`true`:`false`),se(2),Py(N_(10,14,`common.labels.advanced`)),se(2),Ay(`fa-chevron-left`,!e.showAdvanced())(`fa-chevron-down`,e.showAdvanced()),se(),Le(e.showAdvanced()?12:-1)}}function mr(i,c){if(i&1){let e=sc();Va$1(0,`li`,35)(1,`span`,66),Dy(2,`i`,67),Va$1(3,`span`),Ot(4),S_(5,`translate`),Va$1(6,`span`,70),Ot(7),S_(8,`translate`),jd(),Va$1(9,`span`,71),Ot(10),S_(11,`translate`),jd()()(),Va$1(12,`div`,36)(13,`input`,37),ac(`change`,function(t){Ko$1(e);let a=ve(5);return Qo$1(a.toggleHapExternalsOnly(t,+a.selectedBlock()))}),jd(),Dy(14,`label`,38),jd()()}if(i&2){let e=ve(5);se(2),Ay(`text-info`,e.hapExternalsOnlyBlocks()[+e.selectedBlock()])(`grey-text`,!e.hapExternalsOnlyBlocks()[+e.selectedBlock()]),se(2),kt(` `,N_(5,10,`child_bridge.config.hap_externals_only`),` `),se(3),Py(N_(8,12,`common.labels.beta`)),se(3),kt(` `,N_(11,14,`child_bridge.config.hap_externals_only_desc`),` `),se(3),vy(`id`,`toggleHapExternalsOnlyInput_${e.selectedBlock()}`)(`checked`,e.hapExternalsOnlyBlocks()[+e.selectedBlock()]),se(),vy(`for`,`toggleHapExternalsOnlyInput_${e.selectedBlock()}`)}}function gr(i,c){if(i&1){let e=sc();Va$1(0,`li`,35)(1,`span`,66),Dy(2,`i`,67),Va$1(3,`span`),Ot(4),S_(5,`translate`),Va$1(6,`span`,70),Ot(7),S_(8,`translate`),jd(),Va$1(9,`span`,71),Ot(10),S_(11,`translate`),jd()()(),Va$1(12,`div`,36)(13,`input`,37),S_(14,`translate`),ac(`change`,function(t){Ko$1(e);let a=ve(5);return Qo$1(a.toggleHapDisableIdentifyingMaterial(t,+a.selectedBlock()))}),jd(),Dy(15,`label`,38),jd()()}if(i&2){let e=ve(5);se(2),Ay(`text-warning`,e.hapDisableIdentifyingMaterialBlocks()[+e.selectedBlock()])(`grey-text`,!e.hapDisableIdentifyingMaterialBlocks()[+e.selectedBlock()]),se(2),kt(` `,N_(5,11,`settings.hap.disable_identifying_material`),` `),se(3),Py(N_(8,13,`common.labels.beta`)),se(3),kt(` `,N_(11,15,`settings.hap.disable_identifying_material_desc`),` `),se(3),vy(`id`,`toggleHapDisableIdentifyingMaterialInput_${e.selectedBlock()}`)(`checked`,e.hapDisableIdentifyingMaterialBlocks()[+e.selectedBlock()]),Cr$1(`aria-label`,N_(14,17,`settings.hap.disable_identifying_material`)),se(2),vy(`for`,`toggleHapDisableIdentifyingMaterialInput_${e.selectedBlock()}`)}}function ur(i,c){i&1&&(Va$1(0,`li`,72)(1,`div`,75)(2,`div`,76)(3,`div`)(4,`div`,77),Dy(5,`i`,78),jd(),Va$1(6,`div`,79),Ot(7),S_(8,`translate`),jd()()()()()),i&2&&(se(7),Py(N_(8,1,`child_bridge.return_to_pair`)))}function _r(i,c){i&1&&(Va$1(0,`span`),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),kt(` · `,N_(2,1,`status.code_scan`)))}function fr(i,c){if(i&1){let e=sc();Va$1(0,`li`,35)(1,`span`,9),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,36)(5,`input`,37),S_(6,`translate`),ac(`change`,function(){Ko$1(e);let t=ve(7);return Qo$1(t.toggleHideUnpairing(t.configBlocks()[+t.selectedBlock()]._bridge?.username,`hap`))}),jd(),Dy(7,`label`,38),jd()()}if(i&2){let e=ve(7);se(2),Py(N_(3,5,`child_bridge.config.hide_pairing_alert`)),se(3),vy(`id`,`toggleHideHapUnpairing_${e.selectedBlock()}`)(`checked`,e.isUnpairingHidden(e.configBlocks()[+e.selectedBlock()]._bridge?.username,`hap`)),Cr$1(`aria-label`,N_(6,7,`child_bridge.config.hide_pairing_alert`)),se(2),vy(`for`,`toggleHideHapUnpairing_${e.selectedBlock()}`)}}function hr(i,c){if(i&1&&(Va$1(0,`li`,72)(1,`div`,75),Dy(2,`app-qrcode`,80),Va$1(3,`p`,81),Ot(4),jd(),Va$1(5,`p`,82),Dy(6,`i`,83),Ot(7),S_(8,`translate`),Fe(9,_r,3,3,`span`),jd()()(),Fe(10,fr,8,9,`li`,35)),i&2){let e=ve(6);se(2),vy(`data`,(e.deviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)||void 0)?._setupCode??``),se(2),kt(` `,(e.deviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)||void 0)?.pincode,` `),se(2),Ay(`green-text`,(e.deviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)||void 0)?._isPaired)(`grey-text`,!(e.deviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)||void 0)?._isPaired),se(),kt(` `,N_(8,9,(e.deviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)||void 0)?._isPaired?`status.widget.qr_paired`:`status.widget.qr_unpaired`),` `),se(2),Le((e.deviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)||void 0)?._isPaired?-1:9),se(),Le((e.deviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)||void 0)?._isPaired?-1:10)}}function br(i,c){i&1&&(Va$1(0,`div`,44),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),kt(` `,N_(2,1,`settings.matter.port_desc`),` `))}function Cr(i,c){if(i&1){let e=sc();Fe(0,ur,9,3,`li`,72),Fe(1,hr,11,11),Va$1(2,`li`,25)(3,`label`,73),Ot(4),S_(5,`translate`),Dy(6,`br`),Va$1(7,`small`,63),Ot(8),S_(9,`translate`),jd()(),Va$1(10,`div`,28)(11,`input`,74),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve(5);return m_(a.configBlocks()[+a.selectedBlock()]._bridge.port,t)||(a.configBlocks()[+a.selectedBlock()]._bridge.port=t),Qo$1(t)}),jd(),db(),Fe(12,br,3,3,`div`,44),jd()()}if(i&2){let e=ve(5);Le(e.configBlocks()[+e.selectedBlock()]._bridge?.username&&e.deviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)===!1?0:-1),se(),Le(e.deviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?1:-1),se(3),Py(N_(5,8,`child_bridge.config.port`)),se(4),Py(N_(9,10,`child_bridge.config.hap_port_desc`)),se(3),Ay(`is-invalid`,e.getHapPortValidationError(e.selectedBlock())),$y(`ngModel`,e.configBlocks()[+e.selectedBlock()]._bridge.port),pb(),se(),Le(e.getHapPortValidationError(e.selectedBlock())?12:-1)}}function xr(i,c){if(i&1){let e=sc();Va$1(0,`ul`,24)(1,`li`,35)(2,`span`,66),Dy(3,`i`,67),Va$1(4,`span`),Ot(5),S_(6,`translate`),jd()(),Va$1(7,`div`,68),S_(8,`translate`),Va$1(9,`input`,69),ac(`change`,function(t){Ko$1(e);let a=ve(4);return Qo$1(a.toggleHapBridge(a.configBlocks()[+a.selectedBlock()],!a.hapEnabledBlocks()[+a.selectedBlock()],a.selectedBlock(),t))}),jd(),Dy(10,`label`,38),jd()(),Fe(11,mr,15,16,`li`,35),Fe(12,gr,16,19,`li`,35),Fe(13,Cr,13,12),jd()}if(i&2){let e=ve(4);se(3),Ay(`green-text`,e.hapEnabledBlocks()[+e.selectedBlock()])(`grey-text`,!e.hapEnabledBlocks()[+e.selectedBlock()]),se(2),Py(N_(6,19,`child_bridge.config.enable_hap`)),se(2),Ay(`hap-toggle-disabled`,e.configBlocks()[+e.selectedBlock()].accessory),vy(`title`,e.configBlocks()[+e.selectedBlock()].accessory?N_(8,21,`child_bridge.config.hap_disabled_for_accessory`):``),se(2),Ay(`pointer-events-none`,e.configBlocks()[+e.selectedBlock()].accessory),vy(`id`,`toggleHapInput_${e.selectedBlock()}`)(`checked`,e.hapEnabledBlocks()[+e.selectedBlock()])(`disabled`,e.configBlocks()[+e.selectedBlock()].accessory),se(),Ay(`cursor-not-allowed`,e.configBlocks()[+e.selectedBlock()].accessory),vy(`for`,`toggleHapInput_${e.selectedBlock()}`),se(),Le(!e.justInstalled&&e.isProtocolExternalsOnlyEnabled&&!e.hapEnabledBlocks()[+e.selectedBlock()]&&!e.configBlocks()[+e.selectedBlock()].accessory?11:-1),se(),Le(e.isHapDisableIdentifyingMaterialEnabled?12:-1),se(),Le(e.hapEnabledBlocks()[+e.selectedBlock()]?13:-1)}}function vr(i,c){if(i&1){let e=sc();Va$1(0,`li`,35)(1,`span`,66),Dy(2,`i`,84),Va$1(3,`span`),Ot(4),S_(5,`translate`),Va$1(6,`span`,70),Ot(7),S_(8,`translate`),jd(),Va$1(9,`span`,71),Ot(10),S_(11,`translate`),jd()()(),Va$1(12,`div`,36)(13,`input`,37),ac(`change`,function(t){Ko$1(e);let a=ve(5);return Qo$1(a.toggleMatterExternalsOnly(t,+a.selectedBlock()))}),jd(),Dy(14,`label`,38),jd()()}if(i&2){let e=ve(5);se(2),Ay(`text-info`,e.matterExternalsOnlyBlocks()[+e.selectedBlock()])(`grey-text`,!e.matterExternalsOnlyBlocks()[+e.selectedBlock()]),se(2),kt(` `,N_(5,10,`child_bridge.config.matter_externals_only`),` `),se(3),Py(N_(8,12,`common.labels.beta`)),se(3),kt(` `,N_(11,14,`child_bridge.config.matter_externals_only_desc`),` `),se(3),vy(`id`,`toggleMatterExternalsOnlyInput_${e.selectedBlock()}`)(`checked`,e.matterExternalsOnlyBlocks()[+e.selectedBlock()]),se(),vy(`for`,`toggleMatterExternalsOnlyInput_${e.selectedBlock()}`)}}function yr(i,c){i&1&&(Va$1(0,`span`),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),kt(` · `,N_(2,1,`status.code_scan`)))}function Br(i,c){if(i&1&&(Va$1(0,`div`),Dy(1,`i`,90),Ot(2),jd()),i&2){let e=c.$implicit,n=ve(8);se(2),kt(` `,n.getMatterFabricLabel(e),` `)}}function Sr(i,c){if(i&1&&(Va$1(0,`div`,89),_T(1,Br,3,1,`div`,null,Ua),jd()),i&2){let e=ve(7);se(),ST(e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.fabrics)}}function kr(i,c){if(i&1){let e=sc();Va$1(0,`li`,35)(1,`span`,9),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,36)(5,`input`,37),S_(6,`translate`),ac(`change`,function(){Ko$1(e);let t=ve(7);return Qo$1(t.toggleHideUnpairing(t.configBlocks()[+t.selectedBlock()]._bridge?.username,`matter`))}),jd(),Dy(7,`label`,38),jd()()}if(i&2){let e=ve(7);se(2),Py(N_(3,5,`child_bridge.config.hide_pairing_alert`)),se(3),vy(`id`,`toggleHideMatterUnpairing_${e.selectedBlock()}`)(`checked`,e.isUnpairingHidden(e.configBlocks()[+e.selectedBlock()]._bridge?.username,`matter`)),Cr$1(`aria-label`,N_(6,7,`child_bridge.config.hide_pairing_alert`)),se(2),vy(`for`,`toggleHideMatterUnpairing_${e.selectedBlock()}`)}}function Er(i,c){if(i&1&&(Va$1(0,`li`,72)(1,`div`,75),Dy(2,`app-qrcode`,80),Va$1(3,`p`,81),Ot(4),jd(),Va$1(5,`p`,82),Dy(6,`i`,83),Ot(7),S_(8,`translate`),Fe(9,yr,3,3,`span`),jd(),Fe(10,Sr,3,0,`div`,89),jd()(),Fe(11,kr,8,9,`li`,35)),i&2){let e=ve(6);se(2),vy(`data`,e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.setupUri),se(2),kt(` `,e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.pin,` `),se(2),Ay(`green-text`,e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.commissioned)(`grey-text`,!e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.commissioned),se(),kt(` `,N_(8,10,e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.commissioned?`status.widget.qr_paired`:`status.widget.qr_unpaired`),` `),se(2),Le(e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.commissioned?-1:9),se(),Le(e.isMatterFabricInfoEnabled&&e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.fabrics?.length?10:-1),se(),Le(e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.commissioned?-1:11)}}function wr(i,c){i&1&&(Va$1(0,`li`,72)(1,`div`,75)(2,`div`,91)(3,`div`)(4,`div`,77),Dy(5,`i`,78),jd(),Va$1(6,`div`,79),Ot(7),S_(8,`translate`),jd()()()()()),i&2&&(se(7),Py(N_(8,1,`child_bridge.return_to_pair`)))}function Mr(i,c){if(i&1){let e=sc();Va$1(0,`li`,35)(1,`span`,66)(2,`span`),Ot(3),S_(4,`translate`),Va$1(5,`span`,70),Ot(6),S_(7,`translate`),jd(),Va$1(8,`span`,71),Ot(9),S_(10,`translate`),jd()()(),Va$1(11,`div`,36)(12,`input`,37),S_(13,`translate`),ac(`change`,function(t){Ko$1(e);let a=ve(6);return Qo$1(a.toggleMatterDisableIpv4(t,+a.selectedBlock()))}),jd(),Dy(14,`label`,38),jd()()}if(i&2){let e=ve(6);se(3),kt(` `,N_(4,7,`settings.matter.disable_ipv4`),` `),se(3),Py(N_(7,9,`common.labels.beta`)),se(3),kt(` `,N_(10,11,`settings.matter.disable_ipv4_desc`),` `),se(3),vy(`id`,`toggleMatterDisableIpv4Input_${e.selectedBlock()}`)(`checked`,e.matterDisableIpv4Blocks()[+e.selectedBlock()]),Cr$1(`aria-label`,N_(13,13,`settings.matter.disable_ipv4`)),se(2),vy(`for`,`toggleMatterDisableIpv4Input_${e.selectedBlock()}`)}}function Ir(i,c){if(i&1){let e=sc();Va$1(0,`li`,85)(1,`ul`,86)(2,`li`),Ot(3),S_(4,`translate`),jd(),Va$1(5,`li`),Ot(6),S_(7,`translate`),jd()()(),Fe(8,Er,12,12),Fe(9,wr,9,3,`li`,72),Va$1(10,`li`,25)(11,`label`,87),Ot(12),S_(13,`translate`),Dy(14,`br`),Va$1(15,`small`,63),Ot(16),S_(17,`translate`),jd()(),Va$1(18,`div`,28)(19,`input`,88),Uy(`ngModelChange`,function(t){Ko$1(e);let a=ve(5);return m_(a.configBlocks()[+a.selectedBlock()]._bridge.matter.port,t)||(a.configBlocks()[+a.selectedBlock()]._bridge.matter.port=t),Qo$1(t)}),jd(),db(),jd()(),Fe(20,Mr,15,15,`li`,35)}if(i&2){let e=ve(5);se(3),Py(N_(4,10,`child_bridge.config.matter_note_1`)),se(3),Py(N_(7,12,`child_bridge.config.matter_note_2`)),se(2),Le(e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.setupUri?8:-1),se(),Le(e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)&&!e.matterDeviceInfo().get(e.configBlocks()[+e.selectedBlock()]._bridge?.username)?.setupUri?9:-1),se(3),Py(N_(13,14,`child_bridge.config.port`)),se(4),Py(N_(17,16,`child_bridge.config.matter_port_desc`)),se(3),Ay(`is-invalid`,e.getMatterPortValidationError(e.selectedBlock())),$y(`ngModel`,e.configBlocks()[+e.selectedBlock()]._bridge.matter.port),pb(),se(),Le(e.isMatterDisableIpv4Enabled?20:-1)}}function Pr(i,c){if(i&1){let e=sc();Va$1(0,`ul`,24)(1,`li`,35)(2,`span`,66),Dy(3,`i`,84),Va$1(4,`span`),Ot(5),S_(6,`translate`),Va$1(7,`span`,70),Ot(8),S_(9,`translate`),jd()()(),Va$1(10,`div`,36)(11,`input`,37),ac(`change`,function(t){Ko$1(e);let a=ve(4);return Qo$1(a.toggleMatterBridge(a.configBlocks()[+a.selectedBlock()],!a.matterEnabledBlocks()[+a.selectedBlock()],a.selectedBlock(),t))}),jd(),Dy(12,`label`,38),jd()(),Fe(13,vr,15,16,`li`,35),Fe(14,Ir,21,18),jd()}if(i&2){let e=ve(4);se(3),Ay(`green-text`,e.matterEnabledBlocks()[+e.selectedBlock()])(`grey-text`,!e.matterEnabledBlocks()[+e.selectedBlock()]),se(2),kt(` `,N_(6,11,`matter_bridge.config.use`),` `),se(3),Py(N_(9,13,`common.labels.beta`)),se(3),vy(`id`,`toggleMatterBridgeInput_${e.selectedBlock()}`)(`checked`,e.matterEnabledBlocks()[+e.selectedBlock()]),se(),vy(`for`,`toggleMatterBridgeInput_${e.selectedBlock()}`),se(),Le(!e.justInstalled&&e.isProtocolExternalsOnlyEnabled&&!e.matterEnabledBlocks()[+e.selectedBlock()]&&!e.configBlocks()[+e.selectedBlock()].accessory?13:-1),se(),Le(e.matterEnabledBlocks()[+e.selectedBlock()]&&e.configBlocks()[+e.selectedBlock()]._bridge?.matter&&e.configBlocks()[+e.selectedBlock()]._bridge?.username?14:-1)}}function Tr(i,c){if(i&1&&(Fe(0,xr,14,23,`ul`,24),Fe(1,Pr,15,15,`ul`,24)),i&2){let e=ve(3);Le(!e.isMatterOnlyPlugin||e.hapEnabledBlocks()[+e.selectedBlock()]?0:-1),se(),Le(e.isMatterSupported&&!e.configBlocks()[+e.selectedBlock()].accessory?1:-1)}}function Vr(i,c){if(i&1&&(Fe(0,Ka,12,7,`ul`,23),Va$1(1,`ul`,24),Fe(2,Ya,12,6,`li`,25),Fe(3,Za,6,3,`li`,25)(4,tr,8,7),Fe(5,ir,6,4,`li`,25),Fe(6,nr,6,4,`li`,25),Fe(7,or,6,4,`li`,25),Fe(8,pr,13,16),jd(),Fe(9,Tr,2,2)),i&2){let e=ve(2);Le(e.configBlocks().length>1?0:-1),se(2),Le(!e.configBlocks()[+e.selectedBlock()]._bridge?.username&&e.bridgesAvailableForLink().length&&!e.currentBridgeHasLinks()?2:-1),se(),Le(e.currentBridgeHasLinks()?3:4),se(2),Le(e.currentlySelectedLink()?5:-1),se(),Le((e.currentlySelectedLink()||e.configBlocks()[+e.selectedBlock()]._bridge?.username)&&(e.currentlySelectedLink()||!e.currentBridgeHasLinks())?6:-1),se(),Le(e.currentlySelectedLink()?7:-1),se(),Le(!e.currentlySelectedLink()&&e.configBlocks()[+e.selectedBlock()]._bridge?.username?8:-1),se(),Le(!e.currentlySelectedLink()&&e.configBlocks()[+e.selectedBlock()]._bridge?.username?9:-1)}}function $r(i,c){i&1&&(Ot(0),S_(1,`translate`)),i&2&&kt(` `,N_(1,1,`child_bridge.confirm_delete_2`),` `)}function Dr(i,c){if(i&1&&(Va$1(0,`li`),Dy(1,`i`,93),Ot(2),Va$1(3,`span`,63),Ot(4,` · `),jd(),Va$1(5,`span`,94),Ot(6),jd()()),i&2){let e=c.$implicit,n=ve(3);se(2),kt(` `,e.bridgeName||(n.deviceInfo().get(e.id)||void 0)?.displayName,` `),se(4),Py(e.id)}}function Ar(i,c){if(i&1&&(Va$1(0,`li`),Dy(1,`i`,95),Ot(2),Va$1(3,`span`,63),Ot(4,` · `),jd(),Va$1(5,`span`,94),Ot(6),jd()()),i&2){let e=c.$implicit;se(2),kt(` `,e.name,` `),se(4),Py(e.username)}}function Nr(i,c){if(i&1&&(Va$1(0,`ngb-alert`,20)(1,`p`),Ot(2),S_(3,`translate`),Fe(4,$r,2,3),jd(),Va$1(5,`div`,11)(6,`ul`,92),_T(7,Dr,7,2,`li`,null,TT),_T(9,Ar,7,2,`li`,null,TT),jd()()()),i&2){let e=ve(2);vy(`dismissible`,!1),se(2),kt(` `,N_(3,3,`child_bridge.confirm_delete_1`),` `),se(2),Le(e.deletingPairedBridge()?4:-1),se(3),ST(e.deleteBridges()),se(2),ST(e.deleteMatterBridges())}}function Lr(i,c){i&1&&(Va$1(0,`ngb-alert`,21),Ot(1),S_(2,`translate`),jd()),i&2&&(vy(`dismissible`,!1),se(),Py(N_(2,2,`child_bridge.must_configure_plugin`)))}function Or(i,c){if(i&1){let e=sc();Va$1(0,`ngb-alert`,22)(1,`div`,18),Ot(2),S_(3,`translate`),S_(4,`translate`),jd(),Va$1(5,`button`,96),ac(`click`,function(){Ko$1(e);return Qo$1(ve(2).openFullConfigEditor())}),Ot(6),S_(7,`translate`),jd()()}i&2&&(vy(`dismissible`,!1),se(2),jy(` `,N_(3,4,`plugins.settings.message_manual_config_required`),` `,N_(4,6,`plugins.settings.message_consult_documentation`),` `),se(4),kt(` `,N_(7,8,`plugins.settings.label_open_config_editor`),` `))}function jr(i,c){if(i&1){let e=sc();Va$1(0,`div`,11)(1,`img`,17),ac(`error`,function(){Ko$1(e);return Qo$1(ve().handleIconError())}),jd()(),Va$1(2,`ul`,18),Dy(3,`li`,19),S_(4,`translate`),Fe(5,Wa,4,4),jd(),Fe(6,Vr,10,8),Fe(7,Nr,11,5,`ngb-alert`,20),Fe(8,Lr,3,4,`ngb-alert`,21),Fe(9,Or,8,10,`ngb-alert`,22)}if(i&2){let e=ve();se(),vy(`src`,e.plugin.icon,Xg),se(2),vy(`innerHTML`,x_(4,7,`child_bridge.about`,w_(10,Wt,e.linkChildBridges)),Ga$1),se(2),Le(e.configBlocks().length?5:-1),se(),Le(e.canConfigure()&&e.configBlocks().length?6:-1),se(),Le(e.deleteBridges().length||e.deleteMatterBridges().length?7:-1),se(),Le(!e.configBlocks().length&&e.canConfigure()?8:-1),se(),Le(e.canConfigure()?-1:9)}}function Fr(i,c){i&1&&(Va$1(0,`div`,8),Dy(1,`i`,97),Ot(2),S_(3,`translate`),jd()),i&2&&(se(2),kt(` `,x_(3,1,`child_bridge.config.validation_blocking`,w_(4,Ha,c)),` `))}function Hr(i,c){if(i&1){let e=sc();Va$1(0,`button`,98),ac(`click`,function(){Ko$1(e);return Qo$1(ve().closeModal())}),Ot(1),S_(2,`translate`),jd()}if(i&2)vy(`disabled`,ve().saveInProgress()),se(),kt(` `,N_(2,2,`form.button_close`),` `)}function Ur(i,c){i&1&&Dy(0,`i`,100)}function Rr(i,c){if(i&1){let e=sc();Va$1(0,`button`,99),ac(`click`,function(){Ko$1(e);return Qo$1(ve().save())}),Ot(1),S_(2,`translate`),Fe(3,Ur,1,0,`i`,100),jd()}if(i&2){let e=ve();vy(`disabled`,e.saveInProgress()||e.hasValidationErrors),se(),kt(` `,N_(2,3,`form.button_save`),` `),se(2),Le(e.saveInProgress()?3:-1)}}function qr(i,c){if(i&1){let e=sc();Va$1(0,`button`,101),ac(`click`,function(){Ko$1(e);return Qo$1(ve().closeModal())}),Ot(1),S_(2,`translate`),jd()}i&2&&(se(),kt(` `,N_(2,1,`form.button_close`),` `))}function zr(i,c){i&1&&(Ot(0),S_(1,`translate`)),i&2&&kt(` `,N_(1,1,`form.button_save`),` `)}function Wr(i,c){i&1&&Dy(0,`i`,100)}function Gr(i,c){if(i&1){let e=sc();Va$1(0,`button`,99),ac(`click`,function(){Ko$1(e);return Qo$1(ve(2).save())}),Fe(1,zr,2,3)(2,Wr,1,0,`i`,100),jd()}if(i&2){let e=ve(2);vy(`disabled`,e.saveInProgress()||e.loading()||e.hasValidationErrors),se(),Le(e.saveInProgress()?2:1)}}function Kr(i,c){if(i&1){let e=sc();Va$1(0,`button`,103),ac(`click`,function(){Ko$1(e);return Qo$1(ve(2).openPluginConfig())}),Ot(1),S_(2,`translate`),jd()}i&2&&(se(),kt(` `,N_(2,1,`plugins.button_settings`),` `))}function Jr(i,c){if(i&1&&Fe(0,Gr,3,2,`button`,12)(1,Kr,3,3,`button`,102),i&2)Le(ve().configBlocks().length?0:1)}var rn=(()=>{class i$4{$activeModal=g(fe);$api=g(U3);$childBridges=g(jt);$modal=g(si);$plugin=g(Ie);$router=g(le);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);modalData=g(e);plugin=this.modalData.plugin;schema=this.modalData.schema;justInstalled=this.modalData.justInstalled??!1;editorContext=this.modalData.editorContext;loading=q(!0);canConfigure=q(!0);saveInProgress=q(!1);configBlocks=q([]);selectedBlock=q(`0`);isPlatform=q(!1);enabledBlocks=q({});hapEnabledBlocks=q({});matterEnabledBlocks=q({});showAdvanced=q(!1);globalDebug=q(``);globalNodeOptions=q(``);hideChildBridgeSetup=q(!1);matterExplicitlyDisabledBeforeChildBridge=new Set;bridgeConfigs=new Map;originalScheduledRestartCrons=new Map;originalHideAlerts=new Map;originalHideChildBridgeSetup=!1;bridgeCache=q(new Map);originalBridges=q([]);deviceInfo=q(new Map);matterBridgeCache=q(new Map);originalMatterBridges=q([]);matterDeviceInfo=q(new Map);deleteMatterBridges=q([]);canShowBridgeDebug=q(!1);deleteBridges=q([]);deletingPairedBridge=q(!1);accessoryBridgeLinks=q([]);bridgesAvailableForLink=q([]);currentlySelectedLink=q(null);currentBridgeHasLinks=q(!1);isMatterSupported=this.$settings.isFeatureEnabled(`matterSupport`);isMatterOnlyPlugin=this.isMatterSupported&&this.plugin?.supportsMatter===!0&&this.plugin?.supportsHap!==!0;allowDisableAllProtocols=this.$settings.isFeatureEnabled(`disableAllProtocols`);allowMatterDisableInPlace=this.$settings.isFeatureEnabled(`matterDisableInPlace`);isProtocolExternalsOnlyEnabled=this.$settings.isFeatureEnabled(`protocolExternalsOnly`);hapExternalsOnlyBlocks=q({});isHapDisableIdentifyingMaterialEnabled=this.$settings.isFeatureEnabled(`hapDisableIdentifyingMaterial`);hapDisableIdentifyingMaterialBlocks=q({});matterExternalsOnlyBlocks=q({});isMatterDisableIpv4Enabled=this.$settings.isFeatureEnabled(`matterDisableIpv4`);isMatterFabricInfoEnabled=this.$settings.isFeatureEnabled(`matterFabricInfo`);matterDisableIpv4Blocks=q({});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="fas fa-up-right-from-square primary-text"></i></a>`;linkCron=`<a href="https://crontab.guru/" target="_blank" rel="noopener noreferrer"><i class="fas fa-up-right-from-square primary-text"></i></a>`;ngOnInit(){this.initialize()}handleIconError(){this.plugin&&(this.plugin.icon=this.defaultIcon)}onBlockChange(e){this.selectedBlock.set(e);let n=this.configBlocks(),t=this.enabledBlocks();this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(m=>m.index===e)||null),this.currentBridgeHasLinks.set(this.accessoryBridgeLinks().some(m=>m.usesIndex===e));let a=[];if(n[Number(e)].accessory)for(let[m,u]of this.bridgeCache().entries())t[m]&&!this.deleteBridges().some(h=>h.id===u.username)&&m<Number(e)&&a.push({index:m.toString(),usesIndex:e,name:u.name,port:u.port,username:u.username});this.bridgesAvailableForLink.set(a)}onLinkBridgeChange(e){if(e){let n=this.configBlocks(),t=this.selectedBlock(),a=n.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=>x(w({},u),{[Number(t)]:!0})),this.hapEnabledBlocks.update(u=>x(w({},u),{[Number(t)]:!0}));let m=n[Number(t)];m._bridge={username:e}}}initialize(){return E(this,null,function*(){try{yield Promise.all([this.getPluginType(),this.loadPluginConfig(),this.loadBridgeConfigs(),this.loadGlobalStartupSettings()]),this.canShowBridgeDebug.set(this.$settings.isFeatureEnabled(`childBridgeDebugMode`));let e=!!this.plugin&&!!this.$settings.env.plugins?.hideChildBridgeSetupFor?.includes(this.plugin.name);this.hideChildBridgeSetup.set(e),this.originalHideChildBridgeSetup=e}catch(e){console.error(`Failed to initialize:`,e);let n=e instanceof Error?e.message:`Failed to initialize component`;this.$toastr.error(n,this.$translate.instant(`toast.title_error`))}finally{this.loading.set(!1)}})}getPluginType(){return E(this,null,function*(){let e=this.plugin;if(e)try{let n=this.editorContext?.alias?this.editorContext.alias:yield this.$api.get(`/plugins/alias/${encodeURIComponent(e.name)}`);this.isPlatform.set(n.pluginType===`platform`)}catch(n){console.error(n);let t=n instanceof Error?n.message:`Failed to load plugin type`;this.$toastr.error(t,this.$translate.instant(`toast.title_error`)),this.$activeModal.close()}})}loadPluginConfig(){return E(this,null,function*(){let e=this.plugin;if(e)try{let n=this.editorContext?.config??(yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`));this.configBlocks.set(n);for(let[h,x$1]of n.entries()){if(x$1._bridge){this.enabledBlocks.update(N=>x(w({},N),{[h]:!0}));let w$1=x$1._bridge.hap,O=!0,H=!1;x$1.accessory||(w$1===!1?O=!1:typeof w$1==`object`&&w$1!==null&&(O=w$1.enabled!==!1,H=w$1.externalsOnly===!0)),this.hapEnabledBlocks.update(N=>x(w({},N),{[h]:O})),this.isProtocolExternalsOnlyEnabled&&this.hapExternalsOnlyBlocks.update(N=>x(w({},N),{[h]:H})),this.isHapDisableIdentifyingMaterialEnabled&&this.hapDisableIdentifyingMaterialBlocks.update(N=>x(w({},N),{[h]:typeof w$1==`object`&&w$1!==null&&w$1.disableIdentifyingMaterial===!0}))}if(x$1._bridge&&x$1._bridge.username){let w=[...this.bridgeCache().entries()].find(([,N])=>N.username===x$1._bridge.username),O=w?w[0]:-1,H=w?w[1]:void 0;if(H)x$1._bridge.env={},this.accessoryBridgeLinks.update(N=>[...N,{index:h.toString(),usesIndex:O.toString(),name:H.name,port:H.port,username:x$1._bridge.username}]);else{if(x$1._bridge.env=x$1._bridge.env||{},this.bridgeCache.update(N=>new Map(N).set(h,x$1._bridge)),yield this.getDeviceInfo(x$1._bridge.username),!x$1._bridge.name){let N=this.deviceInfo().get(x$1._bridge.username);N&&(x$1._bridge.name=N.displayName)}this.originalBridges.update(N=>[...N,JSON.parse(JSON.stringify(x$1._bridge))])}}if(x$1._bridge&&x$1._bridge.matter)if(x$1.accessory)delete x$1._bridge.matter;else{let w$2=!this.allowMatterDisableInPlace||x$1._bridge.matter.enabled!==!1;this.matterEnabledBlocks.update(O=>x(w({},O),{[h]:w$2})),this.isProtocolExternalsOnlyEnabled&&this.matterExternalsOnlyBlocks.update(O=>x(w({},O),{[h]:x$1._bridge.matter.externalsOnly===!0})),this.isMatterDisableIpv4Enabled&&this.matterDisableIpv4Blocks.update(O=>x(w({},O),{[h]:x$1._bridge.matter.disableIpv4===!0})),this.matterBridgeCache.update(O=>new Map(O).set(h,{port:x$1._bridge.matter.port,disableIpv4:x$1._bridge.matter.disableIpv4===!0})),this.originalMatterBridges.update(O=>[...O,{port:x$1._bridge.matter.port}]),x$1._bridge.username&&(yield this.getMatterCommissioningInfo(x$1._bridge.username))}}this.justInstalled&&this.bridgeCache().size===0&&n.forEach((h,x$2)=>{this.enabledBlocks.update(w$3=>x(w({},w$3),{[x$2]:!0})),this.toggleExternalBridge(h,!0,x$2.toString())}),this.accessoryBridgeLinks().find(h=>h.username===this.bridgeCache().get(Number(this.selectedBlock()))?.username)&&this.currentBridgeHasLinks.set(!0);let a=this.selectedBlock(),m=this.enabledBlocks();this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(h=>h.index===a)||null);let u=[];if(n[Number(a)]?.accessory)for(let[h,x]of this.bridgeCache().entries())m[h]&&!this.deleteBridges().some(w=>w.id===x.username)&&h<Number(a)&&u.push({index:h.toString(),usesIndex:a,name:x.name,port:x.port,username:x.username});this.bridgesAvailableForLink.set(u)}catch(n){this.canConfigure.set(!1),console.error(n)}})}toggleExternalBridge(e,n,t){return E(this,null,function*(){let a=this.plugin;if(a){if(n){let m=this.bridgeCache().get(Number(t)),u=this.matterBridgeCache().get(Number(t)),h=this.isHapDisableIdentifyingMaterialEnabled&&typeof m?.hap==`object`&&m.hap!==null&&m.hap.disableIdentifyingMaterial===!0;if(e._bridge=w({username:m?m.username:this.generateUsername(),port:yield this.getUnusedPort(),name:m?.name||this.sanitizeBridgeName(a.displayName||a.name),model:m?.model,manufacturer:m?.manufacturer,firmwareRevision:m?.firmwareRevision,debugModeEnabled:m?.debugModeEnabled,env:m?.env||{}},h?{hap:{disableIdentifyingMaterial:!0}}:{}),u&&!this.matterExplicitlyDisabledBeforeChildBridge.has(Number(t))&&(e._bridge.matter=w({port:u.port??(yield this.getUnusedMatterPort())},u.disableIpv4===!0?{disableIpv4:!0}:{}),this.isMatterDisableIpv4Enabled&&this.matterDisableIpv4Blocks.update(x$3=>x(w({},x$3),{[Number(t)]:u.disableIpv4===!0})),this.matterEnabledBlocks.update(x$4=>x(w({},x$4),{[Number(t)]:!0})),e._bridge.username&&(this.originalMatterBridges().some(w=>w.port===u.port)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update(w=>new Map(w).set(e._bridge.username,{port:u.port}))),e._bridge.username)){let x=e._bridge.username.replace(P$1,`-`).replace(T,`-`).replace(g$2,``);this.deleteMatterBridges.update(w=>w.filter(O=>O.identifier!==x))}this.deleteBridges().some(x=>x.id===e._bridge.username)&&this.deleteBridges.update(x=>x.filter(w=>w.id!==e._bridge.username)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.bridgeCache.update(x=>new Map(x).set(Number(t),e._bridge)),yield this.getDeviceInfo(e._bridge.username),this.enabledBlocks.update(x$5=>x(w({},x$5),{[Number(t)]:!0})),this.hapEnabledBlocks.update(x$6=>x(w({},x$6),{[Number(t)]:!0})),this.isHapDisableIdentifyingMaterialEnabled&&this.hapDisableIdentifyingMaterialBlocks.update(x$7=>x(w({},x$7),{[Number(t)]:h})),this.isMatterOnlyPlugin&&!e.accessory&&!m&&!u&&(yield this.toggleMatterBridge(e,!0,t),yield this.toggleHapBridge(e,!1,t))}else{if(this.enabledBlocks.update(m=>x(w({},m),{[Number(t)]:!1})),this.hapEnabledBlocks.update(m=>x(w({},m),{[Number(t)]:!1})),e._bridge?.matter&&this.matterEnabledBlocks()[Number(t)]&&this.matterBridgeCache.update(m=>new Map(m).set(Number(t),{port:e._bridge.matter.port,disableIpv4:e._bridge.matter.disableIpv4===!0})),this.accessoryBridgeLinks().some(m=>m.index===t))this.accessoryBridgeLinks.update(m=>m.filter(u=>u.index!==t)),this.currentlySelectedLink.set(null);else{let m=this.originalBridges().find(u=>u.username===e._bridge.username);if(m&&!this.deleteBridges().some(u=>u.id===e._bridge.username)){let u=this.deviceInfo().get(e._bridge.username);this.deleteBridges.update(h=>[...h,{id:e._bridge.username,bridgeName:e._bridge.name||m.displayName,paired:u?u._isPaired:!1}])}if(e._bridge?.username){let u=e._bridge.username.replace(P$1,`-`).replace(T,`-`).replace(g$2,``);this.deleteMatterBridges().some(x=>x.identifier===u)&&this.matterExplicitlyDisabledBeforeChildBridge.add(Number(t))}if(e._bridge?.matter&&e._bridge.username&&this.originalMatterBridges().some(h=>h.port===e._bridge.matter.port)){let h=e._bridge.username.replace(P$1,`-`).replace(T,`-`).replace(g$2,``);if(!this.deleteMatterBridges().some(x=>x.identifier===h)){let x=e._bridge.name||a.displayName||a.name;this.deleteMatterBridges.update(w=>[...w,{username:e._bridge.username,identifier:h,name:x}])}}}this.matterEnabledBlocks.update(m=>x(w({},m),{[Number(t)]:!1})),delete e._bridge}this.deletingPairedBridge.set(this.deleteBridges().some(m=>m.paired))}})}get hasValidationErrors(){let e=this.configBlocks(),n=this.enabledBlocks();for(let[t,a]of e.entries())if(n[t]&&a._bridge?.username&&(this.getHapNameValidationError(t.toString())||this.getHapPortValidationError(t.toString())))return!0;return!1}getUnusedPort(){return E(this,null,function*(){try{return(yield this.$api.get(`/server/port/new`)).port}catch(e){return Math.floor(Math.random()*30001+3e4)}})}getUnusedMatterPort(){return E(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 E(this,null,function*(){try{let n=yield this.$api.get(`/server/pairings/${e.replace(R,``)}`);this.deviceInfo.update(t=>new Map(t).set(e,n))}catch(n){console.error(n),this.deviceInfo.update(t=>new Map(t).set(e,!1))}})}sanitizeBridgeName(e){if(!e)return e;let n=e.replace(C$1,``);return n=n.replace(D$1,``),n=n.replace(i,``),n}getMatterFabricLabel(e){let n=e.vendorId??e.rootVendorId,a={4937:`Apple Home`,4996:`Apple Keychain`,24582:`Google Home`,4631:`Amazon Alexa`,4169:`SmartThings`}[n??0]??`0x${(n??0).toString(16).toUpperCase()}`;return e.label?`${a} \xB7 ${e.label}`:a}getMatterCommissioningInfo(e){return E(this,null,function*(){try{let t=(yield this.$childBridges.getAll()).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,fabrics:t.matterFabrics,fabricCount:t.matterFabricCount})):this.matterDeviceInfo.update(a=>new Map(a).set(e,{port:t?.matterConfig?.port}))}catch(n){console.error(n),this.matterDeviceInfo.update(t=>new Map(t).set(e,{}))}})}toggleMatterBridge(e,n,t,a){return E(this,null,function*(){let m=this.plugin;if(m){if(e.accessory){this.syncCheckboxDom(a,!1),this.matterEnabledBlocks.update(u=>x(w({},u),{[Number(t)]:!1}));return}if(!n&&!this.hapEnabledBlocks()[Number(t)]&&!this.allowDisableAllProtocols){this.$toastr.info(this.$translate.instant(`child_bridge.config.disable_matter_requires_hap`),this.$translate.instant(`toast.title_notice`)),this.syncCheckboxDom(a,!0),this.matterEnabledBlocks.update(u=>x(w({},u),{[Number(t)]:!0}));return}if(n){this.matterEnabledBlocks.update(w$4=>x(w({},w$4),{[Number(t)]:!0})),this.isProtocolExternalsOnlyEnabled&&(this.matterExternalsOnlyBlocks.update(w$5=>x(w({},w$5),{[Number(t)]:!1})),e._bridge?.matter?.externalsOnly!==void 0&&delete e._bridge.matter.externalsOnly);let u=this.matterBridgeCache().get(Number(t));e._bridge||(e._bridge={env:{}});let h;u?.port?h=u.port:h=yield this.getUnusedMatterPort();let x$8=e._bridge.matter?.disableIpv4===!0||u?.disableIpv4===!0;if(e._bridge.matter=w({port:h},x$8?{disableIpv4:!0}:{}),this.isMatterDisableIpv4Enabled&&this.matterDisableIpv4Blocks.update(w$6=>x(w({},w$6),{[Number(t)]:x$8})),this.matterBridgeCache.update(w=>new Map(w).set(Number(t),{port:h,disableIpv4:x$8})),e._bridge.username){let w=e._bridge.username.replace(P$1,`-`).replace(T,`-`).replace(g$2,``);this.deleteMatterBridges.update(H=>H.filter(N=>N.identifier!==w)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.originalMatterBridges().some(H=>H.port===h)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update(H=>new Map(H).set(e._bridge.username,{port:h}))}}else{if(this.matterEnabledBlocks.update(h=>x(w({},h),{[Number(t)]:!1})),this.allowMatterDisableInPlace){e._bridge?.matter&&(this.matterBridgeCache.update(h=>new Map(h).set(Number(t),{port:e._bridge.matter.port,disableIpv4:e._bridge.matter.disableIpv4===!0})),e._bridge.matter.enabled=!1),e._bridge?.username&&this.matterDeviceInfo.update(h=>new Map(h).set(e._bridge.username,null));return}let u=this.originalMatterBridges().some(h=>e._bridge?.matter&&h.port===e._bridge.matter.port);if(e._bridge&&e._bridge.matter&&(this.matterBridgeCache.update(h=>new Map(h).set(Number(t),{port:e._bridge.matter.port,disableIpv4:e._bridge.matter.disableIpv4===!0})),delete e._bridge.matter),e._bridge?.username&&(this.matterDeviceInfo.update(h=>new Map(h).set(e._bridge.username,null)),u)){let h=e._bridge.username.replace(P$1,`-`).replace(T,`-`).replace(g$2,``),x=e._bridge.name||m.displayName||m.name;this.deleteMatterBridges.update(w=>[...w,{username:e._bridge.username,identifier:h,name:x}])}e._bridge&&Object.keys(e._bridge).length===0&&delete e._bridge}}})}toggleHapBridge(e,n,t,a){return E(this,null,function*(){let m=Number(t);if(!n&&e.accessory){this.$toastr.error(this.$translate.instant(`child_bridge.config.hap_disabled_for_accessory`),this.$translate.instant(`toast.title_error`)),this.syncCheckboxDom(a,!0),this.hapEnabledBlocks.update(u=>x(w({},u),{[m]:!0}));return}if(!n&&!this.matterEnabledBlocks()[m]&&!this.allowDisableAllProtocols){this.$toastr.info(this.$translate.instant(`child_bridge.config.disable_hap_requires_matter`),this.$translate.instant(`toast.title_notice`)),this.syncCheckboxDom(a,!0),this.hapEnabledBlocks.update(u=>x(w({},u),{[m]:!0}));return}if(n){let u=this.isHapDisableIdentifyingMaterialEnabled&&this.hapDisableIdentifyingMaterialBlocks()[m]===!0;this.hapEnabledBlocks.update(h=>x(w({},h),{[m]:!0})),this.isProtocolExternalsOnlyEnabled&&this.hapExternalsOnlyBlocks.update(h=>x(w({},h),{[m]:!1})),e._bridge||(e._bridge={env:{}}),e._bridge.username||(e._bridge.username=this.generateUsername()),e._bridge.port||(e._bridge.port=yield this.getUnusedPort()),!e._bridge.name&&this.plugin&&(e._bridge.name=this.sanitizeBridgeName(this.plugin.displayName||this.plugin.name)),u?e._bridge.hap={disableIdentifyingMaterial:!0}:delete e._bridge.hap,this.bridgeCache.update(h=>new Map(h).set(m,e._bridge)),yield this.getDeviceInfo(e._bridge.username)}else this.hapEnabledBlocks.update(u=>x(w({},u),{[m]:!1})),e._bridge=e._bridge||{},this.writeHapDisabled(e,m)})}writeHapDisabled(e,n){this.isProtocolExternalsOnlyEnabled||this.isHapDisableIdentifyingMaterialEnabled?e._bridge.hap=w({enabled:!1},this.hapDisableIdentifyingMaterialBlocks()[n]===!0?{disableIdentifyingMaterial:!0}:{}):e._bridge.hap=!1}toggleHapExternalsOnly(e,n){if(!this.isProtocolExternalsOnlyEnabled)return;let t=e.target.checked;this.hapExternalsOnlyBlocks.update(m=>x(w({},m),{[n]:t}));let a=this.configBlocks()[n];a?._bridge&&this.hapEnabledBlocks()[n]===!1&&(a._bridge.hap=w(w({enabled:!1},t?{externalsOnly:!0}:{}),this.hapDisableIdentifyingMaterialBlocks()[n]===!0?{disableIdentifyingMaterial:!0}:{}))}toggleHapDisableIdentifyingMaterial(e,n){if(!this.isHapDisableIdentifyingMaterialEnabled)return;let t=e.target.checked,a=this.configBlocks()[n];if(this.hapDisableIdentifyingMaterialBlocks.update(h=>x(w({},h),{[n]:t})),!a?._bridge)return;let m=a._bridge.hap,u=typeof m==`object`&&m!==null?w({},m):m===!1||this.hapEnabledBlocks()[n]===!1?{enabled:!1}:{};t?u.disableIdentifyingMaterial=!0:delete u.disableIdentifyingMaterial,Object.keys(u).length>0?a._bridge.hap=u:delete a._bridge.hap}toggleMatterExternalsOnly(e,n){return E(this,null,function*(){if(!this.isProtocolExternalsOnlyEnabled)return;let t=e.target.checked,a=this.configBlocks()[n];if(a?.accessory){this.syncCheckboxDom(e,!1),this.matterExternalsOnlyBlocks.update(m=>x(w({},m),{[n]:!1}));return}if(this.matterExternalsOnlyBlocks.update(m=>x(w({},m),{[n]:t})),!!a?._bridge)if(t)if(a._bridge.matter)a._bridge.matter.externalsOnly=!0;else{let m=yield this.getUnusedMatterPort();a._bridge.matter={port:m,enabled:!1,externalsOnly:!0}}else{if(!a._bridge.matter)return;delete a._bridge.matter.externalsOnly,this.matterBridgeCache().has(n)||delete a._bridge.matter}})}toggleMatterDisableIpv4(e,n){if(!this.isMatterDisableIpv4Enabled)return;let t=e.target.checked,a=this.configBlocks()[n];this.matterDisableIpv4Blocks.update(m=>x(w({},m),{[n]:t})),a?._bridge?.matter&&(t?a._bridge.matter.disableIpv4=!0:delete a._bridge.matter.disableIpv4,this.matterBridgeCache.update(m=>{let u=m.get(n);return u?new Map(m).set(n,x(w({},u),{disableIpv4:t})):m}))}getMatterPortValidationError(e){let n=this.configBlocks()[Number(e)],t=n._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=n._bridge?.port;return a&&t===a}getHapNameValidationError(e){let n=this.configBlocks()[Number(e)];if(!n._bridge?.name)return!1;let t=n._bridge.name;return!O$2.test(t)}getHapPortValidationError(e){let n=this.configBlocks(),t=this.enabledBlocks(),a=n[Number(e)],m=a._bridge?.port;if(!m&&m!==0)return!1;if(typeof m!=`number`||!Number.isInteger(m)||m<1025||m>65533)return!0;for(let[h,x]of n.entries())if(h.toString()!==e&&t[h]&&x._bridge?.port===m)return!0;let u=a._bridge?.matter?.port;return!!u&&m===u}get validationErrorBridgeName(){let e=this.configBlocks(),n=this.enabledBlocks();for(let[t,a]of e.entries())if(n[t]&&a._bridge?.username&&(this.getHapNameValidationError(t.toString())||this.getHapPortValidationError(t.toString())))return a._bridge.name||a.name||a.platform||a.accessory||`#${t+1}`;return null}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)}normalizeHapConfig(e,n,t=!1,a=!1){e._bridge&&(n===!1?this.isProtocolExternalsOnlyEnabled||this.isHapDisableIdentifyingMaterialEnabled?e._bridge.hap=w(w({enabled:!1},t?{externalsOnly:!0}:{}),a?{disableIdentifyingMaterial:!0}:{}):e._bridge.hap=!1:a?e._bridge.hap={disableIdentifyingMaterial:!0}:delete e._bridge.hap)}syncCheckboxDom(e,n){let t=e?.target;t&&(t.checked=n)}save(){return E(this,null,function*(){let e=this.plugin;if(e){this.saveInProgress.set(!0);try{let n=this.configBlocks(),t=this.matterEnabledBlocks(),a=this.hapEnabledBlocks(),m=this.enabledBlocks();for(let[F,ie]of n.entries()){let xe=ie.accessory?!0:!!a[F];if(!this.allowDisableAllProtocols&&m[F]&&!xe&&!t[F]){this.$toastr.error(this.$translate.instant(`child_bridge.config.at_least_one_protocol`),this.$translate.instant(`toast.title_error`)),this.saveInProgress.set(!1);return}if(ie._bridge?.username&&a[F]!==!1){if(this.getHapNameValidationError(F.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(F.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[F]&&this.getMatterPortValidationError(F.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(ie);let Pe=this.isProtocolExternalsOnlyEnabled&&a[F]===!1&&this.hapExternalsOnlyBlocks()[F]===!0,Te=this.isHapDisableIdentifyingMaterialEnabled&&this.hapDisableIdentifyingMaterialBlocks()[F]===!0;this.normalizeHapConfig(ie,a[F],Pe,Te)}yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}`,n);for(let F of this.deleteBridges())try{yield this.$api.delete(`/server/pairings/${F.id.replace(R,``)}`)}catch(ie){console.error(ie),this.$toastr.error(this.$translate.instant(`settings.reset_bridge.error`),this.$translate.instant(`toast.title_error`))}let u=this.deleteMatterBridges().filter(F=>!this.deleteBridges().some(ie=>ie.id===F.username));for(let F of u)try{let ie=F.username.replace(R,``);yield this.$api.delete(`/server/pairings/${ie}/matter`)}catch(ie){console.error(ie),this.$toastr.error(this.$translate.instant(`settings.reset_bridge.error`),this.$translate.instant(`toast.title_error`))}let h=this.hasScheduledRestartCronChanged(),x=this.hasHideAlertsChanged(),w=this.hasHideChildBridgeSetupChanged(),O=this.hasBridgeConfigChanged(),H=this.deleteBridges().length>0||this.deleteMatterBridges().length>0,it=!h&&!x&&!w&&!O&&!H&&!this.justInstalled,Cn=!this.justInstalled&&(x||w)&&!h&&!O&&!H;if(w)try{yield this.saveHideChildBridgeSetup()}catch(F){console.error(F)}for(let[F,ie]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(Ot=>Ot.id===F))continue;let xe=this.originalHideAlerts.get(F),Pe=!!ie.hideHapAlert,Te=!!ie.hideMatterAlert,Kt=xe?!!xe.hideHapAlert:!1,Xe=xe?!!xe.hideMatterAlert:!1;try{Pe!==Kt&&(yield this.saveHideAlert(F,`hap`,Pe)),Te!==Xe&&(yield this.saveHideAlert(F,`matter`,Te))}catch(Ot){console.error(Ot)}}for(let[F,ie]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(Xe=>Xe.id===F))continue;let xe=ie.scheduledRestartCron||null,Pe=this.originalScheduledRestartCrons.get(F)||null,Te=xe===``?null:xe;if(Te!==(Pe===``?null:Pe))try{yield this.saveScheduledRestartCron(F,Te)}catch(Xe){console.error(Xe)}}if(h)try{yield this.$api.put(`/platform-tools/hb-service/set-full-service-restart-flag`,{})}catch(F){console.error(F)}it?this.$activeModal.close():Cn?this.$activeModal.close(`refresh`):(this.$activeModal.close(),this.$modal.open(oe,{size:`lg`,backdrop:`static`,keyboard:!1}))}catch(n){console.error(n);let t=n instanceof Error?n.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`,n=`0E:`;for(let t=0;t<5;t+=1)n+=e.charAt(Math.round(Math.random()*15)),n+=e.charAt(Math.round(Math.random()*15)),t!==4&&(n+=`:`);return n}openFullConfigEditor(){this.$router.navigate([`/config`]),this.$activeModal.close()}dismissModal(){this.$activeModal.dismiss(`Dismiss`)}closeModal(){this.$activeModal.close(`Dismiss`)}loadBridgeConfigs(){return E(this,null,function*(){let e=this.$settings.env.bridges||[];this.bridgeConfigs.clear(),this.originalScheduledRestartCrons.clear(),this.originalHideAlerts.clear();for(let n of e){let t=n.username.toUpperCase();this.bridgeConfigs.set(t,n),this.originalScheduledRestartCrons.set(t,n.scheduledRestartCron||null),this.originalHideAlerts.set(t,{hideHapAlert:n.hideHapAlert,hideMatterAlert:n.hideMatterAlert})}})}loadGlobalStartupSettings(){return E(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,n){let t=this.bridgeConfigs.get(e.toUpperCase());return t?n===`hap`?!!t.hideHapAlert:!!t.hideMatterAlert:!1}toggleHideChildBridgeSetup(){this.hideChildBridgeSetup.update(e=>!e)}toggleHideUnpairing(e,n){let t=e.toUpperCase(),m=!this.isUnpairingHidden(e,n),u=this.bridgeConfigs.get(t);u||(u={username:t},this.bridgeConfigs.set(t,u)),n===`hap`?m?u.hideHapAlert=!0:delete u.hideHapAlert:m?u.hideMatterAlert=!0:delete u.hideMatterAlert}getScheduledRestartCron(e){return e&&this.bridgeConfigs.get(e.toUpperCase())?.scheduledRestartCron||``}asInputElement(e){return e}onScheduledRestartCronChange(e,n){if(!n)return;let t=n.toUpperCase(),a=this.bridgeConfigs.get(t);a||(a={username:t},this.bridgeConfigs.set(t,a));let m=e?.trim();m?a.scheduledRestartCron=m:delete a.scheduledRestartCron}hasScheduledRestartCronChanged(){for(let[e,n]of this.bridgeConfigs.entries()){let t=n.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(new Set(e.filter(t=>t._bridge&&t._bridge.username).map(t=>t._bridge.username)).size!==this.originalBridges().length)return!0;for(let[,t]of e.entries()){if(!t._bridge)continue;let a=this.originalBridges().find(N=>N.username===t._bridge.username);if(!a||t._bridge.name!==a.name||t._bridge.port!==a.port||t._bridge.model!==a.model||t._bridge.manufacturer!==a.manufacturer||t._bridge.firmwareRevision!==a.firmwareRevision||t._bridge.debugModeEnabled!==a.debugModeEnabled)return!0;let m=t._bridge.env||{},u=a.env||{};if(m.DEBUG!==u.DEBUG||m.NODE_OPTIONS!==u.NODE_OPTIONS)return!0;let h=N=>N===!1||typeof N==`object`&&N!==null&&N.enabled===!1,x=N=>typeof N==`object`&&N!==null&&N.externalsOnly===!0,w=N=>typeof N==`object`&&N!==null&&N.disableIdentifyingMaterial===!0;if(h(t._bridge.hap)!==h(a.hap)||x(t._bridge.hap)!==x(a.hap)||w(t._bridge.hap)!==w(a.hap))return!0;let O=!!t._bridge.matter,H=!!a.matter;if(O!==H||O&&H&&(t._bridge.matter.port!==a.matter.port||t._bridge.matter.externalsOnly!==a.matter.externalsOnly))return!0}return!1}hasHideAlertsChanged(){for(let[e,n]of this.bridgeConfigs.entries()){let t=this.originalHideAlerts.get(e),a=!!n.hideHapAlert,m=!!n.hideMatterAlert,u=t?!!t.hideHapAlert:!1,h=t?!!t.hideMatterAlert:!1;if(a!==u||m!==h)return!0}return!1}hasHideChildBridgeSetupChanged(){return this.hideChildBridgeSetup()!==this.originalHideChildBridgeSetup}saveHideChildBridgeSetup(){return E(this,null,function*(){let e=this.plugin;if(!e)return;let n=this.hideChildBridgeSetup(),a=[...this.$settings.env.plugins?.hideChildBridgeSetupFor||[]];n&&!a.includes(e.name)?a=[...a,e.name].sort((m,u)=>m.localeCompare(u)):n||(a=a.filter(m=>m!==e.name)),yield this.$api.put(`/config-editor/ui/plugins/hide-child-bridge-setup-for`,{body:a}),this.$settings.setEnvItem(`plugins.hideChildBridgeSetupFor`,a),this.originalHideChildBridgeSetup=n})}updateLocalBridgeConfig(e,n){let t=e.toUpperCase(),a=this.$settings.env.bridges||[],m=a.findIndex(u=>u.username.toUpperCase()===t);m!==-1?Object.assign(a[m],n):a.push(w({username:t},n)),this.$settings.env.bridges=a}saveHideAlert(e,n,t){return E(this,null,function*(){let a=e.toUpperCase(),m=n===`hap`?`/config-editor/ui/bridges/${encodeURIComponent(a)}/hide-hap-alert`:`/config-editor/ui/bridges/${encodeURIComponent(a)}/hide-matter-alert`;try{yield this.$api.put(m,{value:t}),this.updateLocalBridgeConfig(a,n===`hap`?{hideHapAlert:t}:{hideMatterAlert:t})}catch(u){throw console.error(`Failed to update hide ${n} alert:`,u),u}})}saveScheduledRestartCron(e,n){return E(this,null,function*(){let t=e.toUpperCase();try{if(yield this.$api.put(`/config-editor/ui/bridges/${encodeURIComponent(t)}/scheduled-restart-cron`,{value:n||null}),n)this.updateLocalBridgeConfig(t,{scheduledRestartCron:n});else{let a=this.$settings.env.bridges||[],m=a.findIndex(u=>u.username.toUpperCase()===t);m!==-1&&(delete a[m].scheduledRestartCron,this.$settings.env.bridges=a)}}catch(a){throw console.error(`Failed to update scheduled restart cron:`,a),a}})}static ɵfac=function(n){return new(n||i$4)};static ɵcmp=nc({type:i$4,selectors:[[`app-plugin-bridge`]],decls:17,vars:8,consts:[[`bridgeLinkSelect`,``],[1,`modal-content`],[1,`modal-header`],[1,`modal-title`],[`type`,`button`,`data-bs-dismiss`,`modal`,1,`btn-close`,3,`disabled`],[1,`modal-body`],[1,`text-center`,`primary-text`,`my-5`,`w-100`],[1,`modal-footer`,`justify-content-between`],[1,`w-100`,`text-center`,`small`,`text-danger`,`mb-1`],[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`],[`aria-hidden`,`true`,1,`fas`,`fa-circle-notch`,`fa-spin`,`icon-xl`],[`alt`,``,`aria-hidden`,`true`,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`,`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,`list-group-item`,`d-flex`,`justify-content-between`,`align-items-center`,`flex-row`,`pb-2`],[1,`text-end`,`grey-text`,`d-flex`,`align-items-center`],[`type`,`checkbox`,1,`rendux-input`,3,`change`,`id`,`checked`],[`aria-hidden`,`true`,1,`rendux-label`,3,`for`],[`type`,`checkbox`,`id`,`toggleHideChildBridgeSetupInput`,1,`rendux-input`,3,`change`,`checked`],[`aria-hidden`,`true`,`for`,`toggleHideChildBridgeSetupInput`,1,`rendux-label`],[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`],[1,`invalid-feedback`,`d-block`],[`role`,`button`,`tabindex`,`0`,1,`list-group-item`,`d-flex`,`justify-content-between`,`align-items-center`,`flex-row`,`cursor-pointer`,3,`click`,`keyup.enter`],[`aria-hidden`,`true`,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,`text-start`,`d-flex`,`align-items-center`,`flex-grow-1`,`me-3`],[`aria-hidden`,`true`,1,`fas`,`fa-xl`,`fa-hap`,`protocol-icon`,`my-2`],[1,`text-end`,`grey-text`,`d-flex`,`align-items-center`,3,`title`],[`type`,`checkbox`,1,`rendux-input`,3,`change`,`id`,`checked`,`disabled`],[1,`badge`,`badge-primary`,`ms-1`],[1,`d-block`,`small`,`grey-text`],[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`],[`aria-hidden`,`true`,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`],[`aria-hidden`,`true`,1,`fas`,`fa-link`],[`aria-hidden`,`true`,1,`fas`,`fa-xl`,`fa-matter`,`protocol-icon`,`my-2`],[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`,`small`,`grey-text`],[`aria-hidden`,`true`,1,`fas`,`fa-fw`,`fa-user`],[1,`mx-auto`,`d-flex`,`align-items-center`,`justify-content-center`,`qr-code-placeholder`,`primary-text`],[1,`d-inline-block`,`text-start`,`mb-0`],[`aria-hidden`,`true`,1,`fas`,`fa-lg`,`fa-hap`,`me-1`],[1,`grey-text`,`font-monospace`],[`aria-hidden`,`true`,1,`fas`,`fa-lg`,`fa-matter`,`me-1`],[`type`,`button`,1,`btn`,`btn-primary`,`mb-0`,3,`click`],[`aria-hidden`,`true`,1,`fas`,`fa-fw`,`fa-triangle-exclamation`,`me-1`],[`type`,`button`,`data-bs-dismiss`,`modal`,1,`btn`,`btn-elegant`,3,`click`,`disabled`],[`type`,`button`,1,`btn`,`btn-primary`,3,`click`,`disabled`],[`aria-hidden`,`true`,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(n,t){if(n&1&&(Va$1(0,`div`,1)(1,`div`,2)(2,`h5`,3),Ot(3),jd(),Fe(4,Ra,2,4,`button`,4),jd(),Va$1(5,`div`,5),Fe(6,qa,2,0,`div`,6)(7,jr,10,12),jd(),Va$1(8,`div`,7),Fe(9,Fr,4,6,`div`,8),Va$1(10,`div`,9),Fe(11,Hr,3,4,`button`,10),jd(),Va$1(12,`div`,11),Fe(13,Rr,4,5,`button`,12),Fe(14,qr,3,3,`button`,13),jd(),Va$1(15,`div`,14),Fe(16,Jr,2,1),jd()()()),n&2){let a;se(3),Py(t.plugin.displayName||t.plugin.name),se(),Le(t.justInstalled?-1:4),se(2),Le(t.loading()?6:7),se(3),Le((a=t.canConfigure()&&!t.justInstalled&&t.validationErrorBridgeName)?9:-1,a),se(2),Le(t.canConfigure()&&!t.justInstalled?11:-1),se(2),Le(t.justInstalled?13:-1),se(),Le(t.canConfigure()?-1:14),se(2),Le(t.canConfigure()&&!t.justInstalled?16:-1)}},dependencies:[Kn,Xn$1,Yn$1,Ye,dn$1,Mt,Vt,Hn,Ht,Gt$1,ln$1,X,pr$1,v3],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}.protocol-icon[_ngcontent-%COMP%]{margin-right:calc(var(--%NS%bs-list-group-item-padding-x, 1rem) - 1px)}`]})}return i$4})();var Gt=D(Ti(),1);var Lt=()=>[`homebridge`,`homebridge-config-ui-x`];var ln=(i,c,e)=>({pluginName:i,minVersion:c,installedVersion:e});var Xr=(i,c,e)=>({minVersion:i,installedVersion:c,latestVersion:e,packageName:`Homebridge`});var Qr=()=>({packageName:`Homebridge`});var Yr=(i,c,e)=>({minVersion:i,installedVersion:c,latestVersion:e,packageName:`Homebridge UI`});var Zr=()=>({packageName:`Homebridge UI`});function el(i,c){if(i&1&&(Va$1(0,`li`,14)(1,`div`,17),Dy(2,`i`,18),jd(),Va$1(3,`div`,19),Ot(4),S_(5,`translate`),jd()()),i&2){let e=ve(2);se(4),kt(` `,x_(5,1,`plugins.compat.node_too_low`,b_(4,ln,e.plugin.displayName,e.nodeMinVersion,e.nodeInstalledVersion)),` `)}}function tl(i,c){if(i&1&&(Va$1(0,`li`,14)(1,`div`,17),Dy(2,`i`,18),jd(),Va$1(3,`div`,19),Ot(4),S_(5,`translate`),jd()()),i&2){let e=ve(2);se(4),kt(` `,x_(5,1,`plugins.compat.hb_too_low`,b_(4,ln,e.plugin.displayName,e.hbMinVersion,e.hbInstalledVersion)),` `)}}function il(i,c){if(i&1&&(Va$1(0,`div`,11),Dy(1,`i`,12),jd(),Va$1(2,`ul`,13),Fe(3,el,6,8,`li`,14),Fe(4,tl,6,8,`li`,14),jd(),Va$1(5,`ngb-alert`,15)(6,`p`,16),Ot(7),S_(8,`translate`),jd()()),i&2){let e=ve();se(),Jt(`${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`),se(2),Le(e.isValidNode?-1:3),se(),Le(e.isValidHb?-1:4),se(),vy(`dismissible`,!1),se(2),Py(N_(8,6,`common.phrases.are_you_sure`))}}function nl(i,c){if(i&1&&(Va$1(0,`div`,11),Dy(1,`i`,20),jd(),Va$1(2,`ul`,13)(3,`li`,14)(4,`div`,17),Dy(5,`i`,18),jd(),Va$1(6,`div`,19),Ot(7),S_(8,`translate`),jd()()(),Va$1(9,`ngb-alert`,15)(10,`p`,21),Ot(11),S_(12,`translate`),jd(),Va$1(13,`p`,16)(14,`a`,22),Ot(15),S_(16,`translate`),Dy(17,`i`,23),jd()()()),i&2){let e=ve();se(7),kt(` `,x_(8,4,`plugins.compat.hb_node_too_low`,b_(12,Xr,e.nodeMinVersion,e.nodeInstalledVersion,e.plugin.latestVersion)),` `),se(2),vy(`dismissible`,!1),se(2),Py(x_(12,7,`plugins.compat.node_first`,I_(16,Qr))),se(4),kt(` `,N_(16,10,`plugins.compat.node_link`),` `)}}function ol(i,c){if(i&1&&(Va$1(0,`div`,11),Dy(1,`i`,20),jd(),Va$1(2,`ul`,13)(3,`li`,14)(4,`div`,17),Dy(5,`i`,18),jd(),Va$1(6,`div`,19),Ot(7),S_(8,`translate`),jd()()(),Va$1(9,`ngb-alert`,15)(10,`p`,21),Ot(11),S_(12,`translate`),jd(),Va$1(13,`p`,16)(14,`a`,22),Ot(15),S_(16,`translate`),Dy(17,`i`,23),jd()()()),i&2){let e=ve();se(7),kt(` `,x_(8,4,`plugins.compat.hb_node_too_low`,b_(12,Yr,e.nodeMinVersion,e.nodeInstalledVersion,e.plugin.latestVersion)),` `),se(2),vy(`dismissible`,!1),se(2),Py(x_(12,7,`plugins.compat.node_first`,I_(16,Zr))),se(4),kt(` `,N_(16,10,`plugins.compat.node_link`),` `)}}function al(i,c){if(i&1){let e=sc();Va$1(0,`button`,24),ac(`click`,function(){Ko$1(e);return Qo$1(ve().dismissModal())}),Ot(1),S_(2,`translate`),jd()}i&2&&(se(),kt(` `,N_(2,1,`form.button_close`),` `))}function rl(i,c){if(i&1){let e=sc();Va$1(0,`button`,24),ac(`click`,function(){Ko$1(e);return Qo$1(ve().dismissModal())}),Ot(1),S_(2,`translate`),jd()}i&2&&(se(),kt(` `,N_(2,1,`form.button_close`),` `))}function ll(i,c){if(i&1){let e=sc();Va$1(0,`button`,25),ac(`click`,function(){Ko$1(e);return Qo$1(ve().closeModal())}),Ot(1),S_(2,`translate`),jd()}i&2&&(se(),kt(` `,N_(2,1,`form.button_continue`),` `))}var sn=(()=>{class i{$activeModal=g(fe);$settings=g(zt$1);modalData=g(r);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,Gt.minVersion)(e.updateEngines?.node),this.nodeInstalledVersion=this.$settings.env.nodeVersion,this.hbMinVersion=(0,Gt.minVersion)(e.updateEngines?.homebridge),this.hbInstalledVersion=this.$settings.env.homebridgeVersion}dismissModal(){this.$activeModal.dismiss(`Dismiss`)}closeModal(){this.$activeModal.close(!0)}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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`],[`aria-hidden`,`true`],[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`],[`aria-hidden`,`true`,1,`fas`,`fa-exclamation-circle`,`orange-text`,`fa-xl`],[1,`text-start`,`flex-grow-1`],[`aria-hidden`,`true`,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`],[`aria-hidden`,`true`,1,`fas`,`fa-up-right-from-square`],[`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(n,t){n&1&&(Va$1(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),S_(4,`translate`),jd(),Va$1(5,`button`,3),S_(6,`translate`),ac(`click`,function(){return t.dismissModal()}),jd()(),Va$1(7,`div`,4),Fe(8,il,9,8),Fe(9,nl,18,17),Fe(10,ol,18,17),jd(),Va$1(11,`div`,5)(12,`div`,6),Fe(13,al,3,3,`button`,7),jd(),Va$1(14,`div`,8),Fe(15,rl,3,3,`button`,7),jd(),Va$1(16,`div`,9),Fe(17,ll,3,3,`button`,10),jd()()()),n&2&&(se(3),Py(N_(4,8,`plugins.compat.title`)),se(2),Cr$1(`aria-label`,N_(6,10,`form.button_close`)),se(3),Le(t.plugin&&!I_(12,Lt).includes(t.plugin.name)?8:-1),se(),Le(t.plugin&&t.plugin.name===`homebridge`?9:-1),se(),Le(t.plugin&&t.plugin.name===`homebridge-config-ui-x`?10:-1),se(3),Le(t.plugin&&!I_(13,Lt).includes(t.plugin.name)?13:-1),se(2),Le(t.plugin&&I_(14,Lt).includes(t.plugin.name)?15:-1),se(2),Le(t.plugin&&!I_(15,Lt).includes(t.plugin.name)?17:-1))},dependencies:[X,v3],styles:[`.modal-min-height[_ngcontent-%COMP%]{min-height:300px}`]})}return i})();var dn=D(L$2(),1);var cn=(()=>{class i{$api=g(U3);$toastr=g(z0);$translate=g(Nf);downloadDumpFile(){return E(this,null,function*(){try{let e=yield this.$api.get(`/plugins/custom-plugins/homebridge-deconz/dump-file`,{observe:`response`,responseType:`blob`});(0,dn.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 ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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(n,t){n&1&&(Pe(0,`button`,0),xi(`click`,function(){return t.downloadDumpFile()}),br$1(1,`i`,1),Ot(2),S_(3,`translate`),Je$1()),n&2&&(se(2),kt(` `,N_(3,1,`plugins.settings.custom.download_dump_file `),`
`))},dependencies:[v3],encapsulation:2})}return i})();var pn=D(L$2(),1);var mn=(()=>{class i{$api=g(U3);$translate=g(Nf);$toastr=g(z0);downloadDumpFile(){return E(this,null,function*(){try{let e=yield this.$api.get(`/plugins/custom-plugins/homebridge-hue/dump-file`,{observe:`response`,responseType:`blob`});(0,pn.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 ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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(n,t){n&1&&(Pe(0,`button`,0),xi(`click`,function(){return t.downloadDumpFile()}),br$1(1,`i`,1),Ot(2),S_(3,`translate`),Je$1()),n&2&&(se(2),kt(` `,N_(3,1,`plugins.settings.custom.download_dump_file `),`
`))},dependencies:[v3],encapsulation:2})}return i})();function sl(i,c){if(i&1&&(Dy(0,`markdown`,5),S_(1,`interpolateMd`)),i&2)vy(`data`,N_(1,1,ve().schema.headerDisplay))}function dl(i,c){if(i&1){let e=sc();Va$1(0,`button`,31),S_(1,`translate`),S_(2,`translate`),ac(`click`,function(){Ko$1(e);let t=ve().$implicit;return Qo$1(ve(2).removeBlock(t.__uuid__))}),Dy(3,`i`,32),jd()}if(i&2){let e=ve().$implicit;vy(`ngbTooltip`,N_(1,3,`form.button_delete`))(`openDelay`,150),Cr$1(`aria-label`,`${N_(2,5,`form.button_delete`)} ${e.name}`)}}function cl(i,c){if(i&1){let e=sc();Va$1(0,`div`,19)(1,`div`,20)(2,`div`,21)(3,`h5`,22),Ot(4),jd(),Va$1(5,`div`,23),Fe(6,dl,4,7,`button`,24),Va$1(7,`button`,25),S_(8,`translate`),S_(9,`translate`),Dy(10,`i`,26),jd(),Dy(11,`i`,27),S_(12,`translate`),jd()()(),Va$1(13,`div`,28)(14,`div`,29)(15,`app-schema-form`,30),Uy(`dataChange`,function(t){let a=Ko$1(e).$implicit;return m_(a.config,t)||(a.config=t),Qo$1(t)}),ac(`isValid`,function(t){let a=Ko$1(e).$index;return Qo$1(ve(2).onIsValid(t,a))}),jd()()()()}if(i&2){let e=c.$implicit,n=c.$index,t=ve(2);vy(`ngbAccordionItem`,e.__uuid__)(`collapsed`,t.show()!==e.__uuid__)(`id`,e.__uuid__),se(4),Py(e.name),se(2),Le(t.plugin.name!==`homebridge-config-ui-x`&&t.show()===e.__uuid__?6:-1),se(),vy(`ngbTooltip`,N_(8,22,`form.button_edit`))(`openDelay`,150),Cr$1(`aria-label`,`${N_(9,24,`form.button_edit`)} ${e.name}`),se(4),Ay(`fa-circle-check`,t.formBlocksValid()[n]===!0)(`green-text`,t.formBlocksValid()[n]===!0)(`fa-circle-exclamation`,t.formBlocksValid()[n]===!1)(`red-text`,t.strictValidation()&&t.formBlocksValid()[n]===!1)(`orange-text`,!t.strictValidation()&&t.formBlocksValid()[n]===!1),vy(`ngbTooltip`,N_(12,26,t.formBlocksValid()[n]?`form.label_valid`:t.strictValidation()?`form.label_invalid_strict`:`form.label_invalid`))(`openDelay`,150),se(4),vy(`configSchema`,t.schema),$y(`data`,e.config)}}function pl(i,c){if(i&1){let e=sc();Va$1(0,`div`,18),ac(`show`,function(t){Ko$1(e);return Qo$1(ve().blockShown(t))})(`hide`,function(t){Ko$1(e);return Qo$1(ve().blockHidden(t))}),_T(1,cl,16,28,`div`,19,TT),jd()}if(i&2){let e=ve();vy(`closeOthers`,!0),se(),ST(e.pluginConfig())}}function ml(i,c){i&1&&Dy(0,`app-homebridge-deconz`)}function gl(i,c){i&1&&Dy(0,`app-homebridge-hue`)}function ul(i,c){if(i&1){let e=sc();Va$1(0,`div`,7)(1,`app-schema-form`,30),Uy(`dataChange`,function(t){Ko$1(e);let a=ve();return m_(a.pluginConfig()[0].config,t)||(a.pluginConfig()[0].config=t),Qo$1(t)}),ac(`isValid`,function(t){Ko$1(e);return Qo$1(ve().onIsValid(t,0))}),jd(),Fe(2,ml,1,0,`app-homebridge-deconz`),Fe(3,gl,1,0,`app-homebridge-hue`),jd()}if(i&2){let e=ve();se(),vy(`configSchema`,e.schema),$y(`data`,e.pluginConfig()[0].config),se(),Le(e.plugin.name===`homebridge-deconz`?2:-1),se(),Le(e.plugin.name===`homebridge-hue`?3:-1)}}function _l(i,c){if(i&1&&(Va$1(0,`div`,8),Dy(1,`markdown`,5),S_(2,`interpolateMd`),jd()),i&2){let e=ve();se(),vy(`data`,N_(2,1,e.schema.footerDisplay))}}function fl(i,c){if(i&1&&(Dy(0,`i`,33),S_(1,`translate`)),i&2){let e=ve();Ay(`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()),vy(`ngbTooltip`,N_(1,12,e.formIsValid()?`form.label_valid`:e.strictValidation()?`form.label_invalid_strict`:`form.label_invalid`))(`openDelay`,150)}}function hl(i,c){if(i&1){let e=sc();Va$1(0,`button`,34),S_(1,`translate`),ac(`click`,function(){Ko$1(e);return Qo$1(ve().addBlock())}),Dy(2,`i`,35),jd()}i&2&&Cr$1(`aria-label`,N_(1,1,`plugins.config.add_block`))}function bl(i,c){i&1&&(Va$1(0,`span`),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),Py(N_(2,1,`form.button_save`)))}function Cl(i,c){i&1&&Dy(0,`i`,17)}var gn=(()=>{class i{$activeModal=g(fe);$api=g(U3);$cb=g(jt);$plugin=g(Ie);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);modalData=g(a);plugin=this.modalData.plugin;schema=this.modalData.schema;editorContext=this.modalData.editorContext;pluginConfig=q([]);show=q(``);saveInProgress=q(!1);formBlocksValid=q({});formIsValid=q(!0);strictValidation=q(!1);pluginAlias=q(``);pluginType=q(`platform`);isFirstSave=q(!1);form={};ngOnInit(){let e=this.schema,n=this.plugin;if(!e||!n){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 E(this,null,function*(){this.saveInProgress.set(!0);let e=this.pluginConfig().map(t=>t.config),n=this.plugin;if(!n){this.saveInProgress.set(!1);return}try{let t=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(n.name)}?include=restart-info`,e),a=t.config;if(this.saveInProgress.set(!1),n.name===`homebridge-config-ui-x`)this.$settings.getAppSettings().catch(()=>{});else if(this.isFirstSave()&&this.$settings.env.recommendChildBridges&&a[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(n,!0);return}this.$activeModal.close(),this.$cb.openCorrectRestartModalWithBridges(t.affectedBridges)}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 n=this.pluginConfig();for(let t of n)t.name=t.config.name||t.name}blockHidden(e){this.show()===e&&this.show.set(``)}addBlock(){let e=Ou(),n=this.schema;this.pluginConfig.update(t=>[...t,{__uuid__:e,name:n.pluginAlias,config:{[this.pluginType()]:n.pluginAlias}}]),this.formBlocksValid.update(t=>x(w({},t),{[this.pluginConfig().length-1]:!1})),this.blockShown(e)}removeBlock(e){let n=this.pluginConfig().findIndex(t=>t.__uuid__===e);this.pluginConfig.update(t=>t.filter(a=>a.__uuid__!==e)),this.formBlocksValid.update(t=>{let a=w({},t);return delete a[n],a}),Object.keys(this.formBlocksValid()).length||this.formIsValid.set(!0)}onIsValid(e,n){this.formBlocksValid.update(t=>x(w({},t),{[n]:e})),this.formIsValid.set(Object.values(this.formBlocksValid()).every(t=>t))}dismissModal(){this.$activeModal.dismiss(`Dismiss`)}closeModal(){this.$activeModal.close()}loadPluginConfig(){return E(this,null,function*(){let e=this.plugin,n=this.schema;if(!(!e||!n))try{let a=(this.editorContext?.config??(yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`))).map(m=>({__uuid__:Ou(),name:m.name||n.pluginAlias,config:m}));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 n=this.schema;if(n&&(n.schema.properties.users={type:`object`,properties:{}},!(!e.users||typeof e.users!=`object`)))for(let t of Object.keys(e.users))n.schema.properties.users.properties[t]={type:`string`}}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,selectors:[[`app-plugin-config`]],decls:23,vars:16,consts:[[`aria-labelledby`,`plugin-config-title`,1,`modal-content`],[1,`modal-header`],[`id`,`plugin-config-title`,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`],[`aria-hidden`,`true`,`container`,`modal`,`placement`,`top`,`triggers`,`hover`,1,`fas`,`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`],[`aria-hidden`,`true`,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`],[`aria-hidden`,`true`,1,`far`,`fa-pen-to-square`],[`aria-hidden`,`true`,`container`,`modal`,`placement`,`left`,`triggers`,`hover`,1,`fas`,`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`],[`aria-hidden`,`true`,1,`fas`,`fa-trash-can`],[`aria-hidden`,`true`,`container`,`modal`,`placement`,`top`,`triggers`,`hover`,1,`fas`,`fa-xl`,`me-2`,3,`ngbTooltip`,`openDelay`],[`type`,`button`,`data-dismiss`,`modal`,1,`btn`,`btn-elegant`,`me-2`,3,`click`],[`aria-hidden`,`true`,1,`fas`,`fa-plus`]],template:function(n,t){n&1&&(Va$1(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),jd(),Va$1(4,`button`,3),S_(5,`translate`),ac(`click`,function(){return t.dismissModal()}),jd()(),Va$1(6,`div`,4),Fe(7,sl,2,3,`markdown`,5),Fe(8,pl,3,1,`div`,6),Fe(9,ul,4,4,`div`,7),Fe(10,_l,3,3,`div`,8),jd(),Va$1(11,`div`,9)(12,`div`,10)(13,`button`,11),ac(`click`,function(){return t.closeModal()}),Ot(14),S_(15,`translate`),jd()(),Dy(16,`div`,12),Va$1(17,`div`,13),Fe(18,fl,2,14,`i`,14)(19,hl,3,3,`button`,15),Va$1(20,`button`,16),ac(`click`,function(){return t.save()}),Fe(21,bl,3,3,`span`)(22,Cl,1,0,`i`,17),jd()()()()),n&2&&(se(3),Py(t.plugin.displayName||t.plugin.name),se(),vy(`disabled`,t.saveInProgress()),Cr$1(`aria-label`,N_(5,12,`form.button_close`)),se(3),Le(t.schema.headerDisplay?7:-1),se(),Le(t.pluginConfig().length&&!t.schema.singular?8:-1),se(),Le(t.pluginConfig().length&&t.schema.singular?9:-1),se(),Le(t.schema.footerDisplay?10:-1),se(3),vy(`disabled`,t.saveInProgress()),se(),kt(` `,N_(15,14,`form.button_close`),` `),se(4),Le(t.schema.singular?18:19),se(2),vy(`disabled`,t.saveInProgress()||!t.formIsValid()&&t.strictValidation()),se(),Le(t.saveInProgress()?22:21))},dependencies:[Uo$1,uy$1,jr$1,JN,Y,F$,KN,$t,cn,mn,GN,v3,Nt],styles:[`.manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}`]})}return i})();var xl=(i,c)=>c._id;function vl(i,c){i&1&&(Va$1(0,`div`,5),Dy(1,`i`,11),jd())}function yl(i,c){i&1&&(Va$1(0,`p`,13),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),Py(N_(2,1,`external_accessories.no_accessories`)))}function Bl(i,c){if(i&1&&(Va$1(0,`option`,30),Ot(1),jd()),i&2){let e=c.$implicit,n=c.$index;vy(`value`,n),se(),Py(e.displayName||e.name)}}function Sl(i,c){if(i&1){let e=sc();Va$1(0,`li`,16)(1,`label`,27),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,28)(5,`select`,29),ac(`ngModelChange`,function(t){Ko$1(e);return Qo$1(ve(4).selectedIndex.set(t))}),_T(6,Bl,2,2,`option`,30,xl),jd(),db(),jd()()}if(i&2){let e=ve(4);se(2),kt(` `,N_(3,2,`external_accessories.select_accessory`),` `),se(3),vy(`ngModel`,e.selectedIndex()),pb(),se(),ST(e.accessories())}}function kl(i,c){if(i&1&&(Va$1(0,`li`,16)(1,`span`,25),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,26),Ot(5),jd()()),i&2){let e=ve();se(2),Py(N_(3,2,`external_accessories.select_accessory`)),se(3),kt(` `,e.displayName||e.name,` `)}}function El(i,c){if(i&1&&Dy(0,`app-qrcode`,19),i&2)vy(`data`,ve()._setupCode)}function wl(i,c){i&1&&(Va$1(0,`p`,20),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),Py(N_(2,1,`external_accessories.no_setup_code`)))}function Ml(i,c){if(i&1&&(Va$1(0,`p`,21),Ot(1),jd()),i&2){let e=ve();se(),Py(e.pincode)}}function Il(i,c){i&1&&(Va$1(0,`span`),Ot(1),S_(2,`translate`),jd()),i&2&&(se(),kt(` · `,N_(2,1,`status.code_scan`)))}function Pl(i,c){if(i&1&&(Va$1(0,`li`,16)(1,`span`,25),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,26),Ot(5),jd()()),i&2){let e=ve();se(2),Py(N_(3,2,`external_accessories.manufacturer`)),se(3),kt(` `,e.manufacturer,` `)}}function Tl(i,c){if(i&1&&(Va$1(0,`li`,16)(1,`span`,25),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,26),Ot(5),jd()()),i&2){let e=ve();se(2),Py(N_(3,2,`external_accessories.model`)),se(3),kt(` `,e.model,` `)}}function Vl(i,c){if(i&1&&(Va$1(0,`li`,16)(1,`span`,25),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,26),Ot(5),jd()()),i&2){let e=ve();se(2),Py(N_(3,2,`external_accessories.serial_number`)),se(3),kt(` `,e.serialNumber,` `)}}function $l(i,c){if(i&1&&(Va$1(0,`li`,16)(1,`span`,25),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,26),Ot(5),jd()()),i&2){let e=ve();se(2),Py(N_(3,2,`external_accessories.username`)),se(3),kt(` `,e._username,` `)}}function Dl(i,c){if(i&1&&(Va$1(0,`li`,16)(1,`span`,25),Ot(2),S_(3,`translate`),jd(),Va$1(4,`div`,26),Ot(5),jd()()),i&2){let e=ve();se(2),Py(N_(3,2,`external_accessories.port`)),se(3),kt(` `,e._port,` `)}}function Al(i,c){if(i&1&&(Va$1(0,`ul`,15),Fe(1,Sl,8,4,`li`,16)(2,kl,6,4,`li`,16),Va$1(3,`li`,17)(4,`div`,18),Fe(5,El,1,1,`app-qrcode`,19)(6,wl,3,3,`p`,20),Fe(7,Ml,2,1,`p`,21),Va$1(8,`p`,22),Dy(9,`i`,23),Ot(10),S_(11,`translate`),Fe(12,Il,3,3,`span`),jd()()()(),Va$1(13,`ul`,24)(14,`li`,16)(15,`span`,25),Ot(16),S_(17,`translate`),jd(),Va$1(18,`div`,26),Ot(19),jd()(),Fe(20,Pl,6,4,`li`,16),Fe(21,Tl,6,4,`li`,16),Fe(22,Vl,6,4,`li`,16),Fe(23,$l,6,4,`li`,16),Fe(24,Dl,6,4,`li`,16),jd()),i&2){let e=c,n=ve(3);se(),Le(n.accessories().length>1?1:2),se(4),Le(e._setupCode?5:6),se(2),Le(e.pincode?7:-1),se(2),Ay(`green-text`,e._isPaired)(`grey-text`,!e._isPaired),se(),kt(` `,N_(11,16,e._isPaired?`status.widget.qr_paired`:`status.widget.qr_unpaired`),` `),se(2),Le(!e._isPaired&&e._setupCode?12:-1),se(4),Py(N_(17,18,`external_accessories.protocol`)),se(3),kt(` `,e._matter||e._matterOnly?`Matter`:`HAP`,` `),se(),Le(e.manufacturer?20:-1),se(),Le(e.model?21:-1),se(),Le(e.serialNumber?22:-1),se(),Le(e._username?23:-1),se(),Le(e._port?24:-1)}}function Nl(i,c){if(i&1&&(Va$1(0,`ul`,14)(1,`li`),Ot(2),S_(3,`translate`),jd()(),Fe(4,Al,25,20)),i&2){let e,n=ve(2);se(2),Py(N_(3,2,`external_accessories.about`)),se(2),Le((e=n.selected())?4:-1,e)}}function Ll(i,c){if(i&1){let e=sc();Va$1(0,`div`,8)(1,`img`,12),ac(`error`,function(t){Ko$1(e);return Qo$1(ve().handleIconError(t))}),jd()(),Fe(2,yl,3,3,`p`,13)(3,Nl,5,4)}if(i&2){let e=ve();se(),vy(`src`,e.plugin.icon||e.defaultIcon,Xg),se(),Le(e.accessories().length===0?2:3)}}var un=(()=>{class i{$activeModal=g(fe);$pairingsCache=g(v);$toastr=g(z0);$translate=g(Nf);modalData=g(n);plugin=this.modalData.plugin;loading=q(!0);accessories=q([]);selectedIndex=q(`0`);defaultIcon=`assets/hb-icon.png`;selected=J(()=>{let e=this.accessories();if(e.length===0)return;let n=Number.parseInt(this.selectedIndex(),10);return e[Number.isFinite(n)?n:0]});ngOnInit(){this.loadAccessories()}closeModal(){this.$activeModal.dismiss()}handleIconError(e){e.target.src=this.defaultIcon}loadAccessories(){return E(this,null,function*(){try{let n=((yield this.$pairingsCache.get())??[]).filter(t=>t._plugin===this.plugin.name&&(t._isExternal===!0||t._matterOnly===!0)).sort((t,a)=>(t.name??``).localeCompare(a.name??``));this.accessories.set(n)}catch(e){console.error(e),this.$toastr.error(this.$translate.instant(`external_accessories.toast_failed_to_load`),this.$translate.instant(`toast.title_error`)),this.accessories.set([])}finally{this.loading.set(!1)}})}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,selectors:[[`app-plugin-externals`]],decls:17,vars:11,consts:[[1,`modal-content`],[1,`modal-header`],[1,`modal-title`],[`type`,`button`,`data-bs-dismiss`,`modal`,1,`btn-close`,3,`click`],[1,`modal-body`],[1,`text-center`,`primary-text`,`my-5`,`w-100`],[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`],[`aria-hidden`,`true`,1,`fas`,`fa-circle-notch`,`fa-spin`,`icon-xl`],[`alt`,``,`aria-hidden`,`true`,1,`mb-3`,`plugin-icon-card`,3,`error`,`src`],[1,`text-center`,`grey-text`],[1,`mb-3`],[1,`list-group`,`list-group-box`,`mb-3`],[1,`list-group-item`,`d-flex`,`flex-column`,`flex-md-row`,`align-items-center`],[1,`list-group-item`,`text-center`],[1,`w-100`,`d-flex`,`flex-column`,`text-center`,`pt-2`],[1,`mx-auto`,`qr-code-size`,3,`data`],[1,`grey-text`,`my-3`],[1,`mx-auto`,`mt-3`,`mb-1`,`font-monospace`],[1,`grey-text`,`mx-auto`,`small`,`mb-1`,`qr-code-info`],[`aria-hidden`,`true`,1,`fas`,`fa-link`],[1,`list-group`,`list-group-box`],[1,`mb-2`,`mb-md-0`,`w-100`,`w-md-50`],[1,`text-start`,`text-md-end`,`w-100`,`w-md-50`,`grey-text`,`font-monospace`],[`for`,`externalSelect`,1,`mb-2`,`mb-md-0`,`w-100`,`w-md-50`],[1,`text-start`,`text-md-end`,`w-100`,`w-md-50`],[`id`,`externalSelect`,1,`custom-select`,3,`ngModelChange`,`ngModel`],[3,`value`]],template:function(n,t){n&1&&(Va$1(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),jd(),Va$1(4,`button`,3),S_(5,`translate`),ac(`click`,function(){return t.closeModal()}),jd()(),Va$1(6,`div`,4),Fe(7,vl,2,0,`div`,5)(8,Ll,4,2),jd(),Va$1(9,`div`,6),Dy(10,`div`,7),Va$1(11,`div`,8)(12,`button`,9),S_(13,`translate`),ac(`click`,function(){return t.closeModal()}),Ot(14),S_(15,`translate`),jd()(),Dy(16,`div`,10),jd()()),n&2&&(se(3),kt(` `,t.plugin.displayName||t.plugin.name,` `),se(),Cr$1(`aria-label`,N_(5,5,`form.button_close`)),se(3),Le(t.loading()?7:8),se(5),Cr$1(`aria-label`,N_(13,7,`form.button_close`)),se(2),kt(` `,N_(15,9,`form.button_close`),` `))},dependencies:[Kn,Xn$1,Yn$1,Vt,Hn,ln$1,pr$1,v3],styles:[`.modal-title[_ngcontent-%COMP%]   small[_ngcontent-%COMP%]{font-size:.85rem;margin-top:.15rem}.qr-code-size[_ngcontent-%COMP%]{width:175px;height:175px}`]})}return i})();function Ol(i,c){i&1&&(Pe(0,`div`,12),br$1(1,`i`,13),Je$1(),Pe(2,`p`,14),Ot(3),S_(4,`translate`),Je$1()),i&2&&(se(3),Py(N_(4,1,`reset.bridge_accessories.empty`)))}function jl(i,c){if(i&1&&br$1(0,`i`,26)(1,`i`,27),i&2){let e=ve().$implicit;Ay(`opacity-muted`,e._protocol===`matter`),se(),Ay(`opacity-muted`,e._protocol!==`matter`)}}function Fl(i,c){i&1&&br$1(0,`i`,20)}function Hl(i,c){if(i&1){let e=sc();Pe(0,`li`,18)(1,`span`,19),Fe(2,jl,2,4)(3,Fl,1,0,`i`,20),Je$1(),Pe(4,`span`,21),Ot(5),br$1(6,`br`),Pe(7,`small`,22)(8,`span`,23),Ot(9),Je$1()()(),Pe(10,`button`,24),S_(11,`translate`),xi(`click`,function(){let t=Ko$1(e).$implicit;return Qo$1(ve(2).toggleList(t._id,t._protocol))}),br$1(12,`i`,25),Je$1()()}if(i&2){let e=c.$implicit,n=ve(2);se(2),Le(n.isMatterSupported?2:3),se(3),kt(` `,e.name,` `),se(4),Py(e._username),se(),Ay(`btn-danger`,!n.isInList(e._id,e._protocol))(`btn-elegant`,n.isInList(e._id,e._protocol)),Mi(`disabled`,n.clicked()),Cr$1(`aria-label`,N_(11,17,`form.button_delete`)),se(2),Ay(`fa-broom`,!n.isInList(e._id,e._protocol))(`fa-undo`,n.isInList(e._id,e._protocol)&&!n.clicked())(`fa-circle-notch`,n.isInList(e._id,e._protocol)&&n.clicked())(`fa-spin`,n.isInList(e._id,e._protocol)&&n.clicked())}}function Ul(i,c){if(i&1&&(Pe(0,`div`,12),br$1(1,`i`,15),Je$1(),Pe(2,`ul`,16)(3,`li`),Ot(4),S_(5,`translate`),Je$1(),Pe(6,`li`),Ot(7),S_(8,`translate`),Je$1()(),Pe(9,`ul`,17),_T(10,Hl,13,19,`li`,18,TT),Je$1()),i&2){let e=ve();se(4),Py(N_(5,2,`reset.bridge_accessories.list_1`)),se(3),Py(N_(8,4,`reset.clear_cache_single.list_3`)),se(3),ST(e.pairings())}}function Rl(i,c){if(i&1){let e=sc();Pe(0,`button`,28),xi(`click`,function(){Ko$1(e);return Qo$1(ve().dismissModal())}),Ot(1),S_(2,`translate`),Je$1()}if(i&2)Mi(`disabled`,ve().clicked()),se(),kt(` `,N_(2,2,`form.button_close`),` `)}function ql(i,c){if(i&1){let e=sc();Pe(0,`button`,29),xi(`click`,function(){Ko$1(e);return Qo$1(ve().dismissModal())}),Ot(1),S_(2,`translate`),Je$1()}i&2&&(se(),kt(` `,N_(2,1,`form.button_close`),` `))}function zl(i,c){if(i&1&&Ot(0),i&2)kt(` (`,ve(3).toDelete().length,`) `)}function Wl(i,c){if(i&1&&(Ot(0),S_(1,`translate`),Fe(2,zl,1,1)),i&2){let e=ve(2);kt(` `,N_(1,2,`form.button_reset`),` `),se(2),Le(e.toDelete().length>0?2:-1)}}function Gl(i,c){i&1&&br$1(0,`i`,31)}function Kl(i,c){if(i&1){let e=sc();Pe(0,`button`,30),xi(`click`,function(){Ko$1(e);return Qo$1(ve().cleanBridges())}),Fe(1,Wl,3,4)(2,Gl,1,0,`i`,31),Je$1()}if(i&2){let e=ve();Mi(`disabled`,!e.toDelete().length||e.clicked()),se(),Le(e.clicked()?2:1)}}var _n=(()=>{class i{$activeModal=g(fe);$accessoryOverview=g(Y$1);$api=g(U3);$router=g(le);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);modalData=g(O);childBridges=this.modalData.childBridges??[];clicked=q(!1);pairings=q([]);toDelete=q([]);isMatterSupported=this.$settings.isFeatureEnabled(`matterSupport`);ngOnInit(){this.loadPairings()}toggleList(e,n){let t=this.toDelete();t.some(a=>a.id===e&&a.protocol===n)?this.toDelete.set(t.filter(a=>a.id!==e||a.protocol!==n)):this.toDelete.update(a=>[...a,{id:e,protocol:n}])}isInList(e,n){return this.toDelete().some(t=>t.id===e&&t.protocol===n)}cleanBridges(){return E(this,null,function*(){this.clicked.set(!0);try{yield this.$api.delete(`/server/pairings/accessories`,{body:this.toDelete()}),this.$accessoryOverview.invalidate(),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 n=e instanceof Error?e.message:`Failed to clean bridges`;this.$toastr.error(n,this.$translate.instant(`toast.title_error`))}})}dismissModal(){this.$activeModal.dismiss(`Dismiss`)}loadPairings(){return E(this,null,function*(){try{let{pairings:e}=yield this.$accessoryOverview.get(),n=this.childBridges.length>0?this.childBridges[0].plugin:null,t=e.filter(u=>u._category===`bridge`&&!u._main&&this.childBridges.find(h=>h.username===u._username)).sort((u,h)=>u.name.localeCompare(h.name)),a=e.filter(u=>u._matterOnly&&u._plugin===n).sort((u,h)=>u.name.localeCompare(h.name)),m=[];for(let u of t)m.push(x(w({},u),{_protocol:`hap`,_displayName:u.name})),this.isMatterSupported&&u._matter&&m.push(x(w({},u),{_protocol:`matter`,_displayName:u.name}));if(this.isMatterSupported)for(let u of a)m.push(x(w({},u),{_protocol:`matter`,_displayName:u.name}));this.pairings.set(m)}catch(e){console.error(e);let n=e instanceof Error?e.message:`Failed to load pairings`;this.$toastr.error(n,this.$translate.instant(`toast.title_error`)),this.$activeModal.close()}})}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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`],[`aria-hidden`,`true`,1,`fas`,`fa-circle-check`,`primary-text`,`icon-xl`],[1,`mb-0`,`text-center`],[`aria-hidden`,`true`,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`],[`aria-hidden`,`true`,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`],[`aria-hidden`,`true`,1,`fas`],[`aria-hidden`,`true`,1,`fas`,`fa-lg`,`fa-hap`,`me-2`],[`aria-hidden`,`true`,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`],[`aria-hidden`,`true`,1,`fas`,`fa-circle-notch`,`fa-spin`]],template:function(n,t){n&1&&(Pe(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),S_(4,`translate`),Je$1(),Pe(5,`button`,3),S_(6,`translate`),xi(`click`,function(){return t.dismissModal()}),Je$1()(),Pe(7,`div`,4),Fe(8,Ol,5,3)(9,Ul,12,6),Je$1(),Pe(10,`div`,5)(11,`div`,6),Fe(12,Rl,3,4,`button`,7),Je$1(),Pe(13,`div`,8),Fe(14,ql,3,3,`button`,9),Je$1(),Pe(15,`div`,10),Fe(16,Kl,3,2,`button`,11),Je$1()()()),n&2&&(se(3),Py(N_(4,7,`child_bridge.reset_accessories`)),se(2),Mi(`disabled`,t.clicked()),Cr$1(`aria-label`,N_(6,9,`form.button_close`)),se(3),Le(t.pairings().length===0?8:9),se(4),Le(t.pairings().length>0?12:-1),se(2),Le(t.pairings().length===0?14:-1),se(2),Le(t.pairings().length>0?16:-1))},dependencies:[v3],styles:[`.opacity-muted[_ngcontent-%COMP%]{opacity:.25}`]})}return i})();var fn=D(L$2(),1);var Jl=i=>({prefix:i});var Xl=i=>({link:i});function Ql(i,c){i&1&&(Pe(0,`li`),Ot(1),S_(2,`translate`),Je$1()),i&2&&(se(),Py(N_(2,1,`plugins.manage.scoped.process`)))}function Yl(i,c){i&1&&(br$1(0,`li`,8),S_(1,`translate`),Pe(2,`li`),Ot(3),S_(4,`translate`),Je$1()),i&2&&(Mi(`innerHTML`,N_(1,2,`plugins.manage.scoped.windows`),Ga$1),se(3),Py(N_(4,4,`plugins.manage.manual_update_command`)))}function Zl(i,c){if(i&1&&(Pe(0,`pre`,9),Ot(1),Je$1()),i&2){let e=ve();se(),By(`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 es(i,c){if(i&1&&(Pe(0,`div`,10)(1,`ul`,18)(2,`li`),br$1(3,`i`,19),Ot(4),S_(5,`translate`),Pe(6,`span`,20),Ot(7),Je$1()(),Pe(8,`li`),br$1(9,`i`,19),Ot(10),S_(11,`translate`),Pe(12,`span`,20),Ot(13),Je$1()(),Pe(14,`li`),br$1(15,`i`,19),Ot(16),S_(17,`translate`),Je$1()()()),i&2){let e=ve();se(3),Ay(`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()),se(),kt(` `,N_(5,43,`plugins.manage.install`),` `),se(3),Py(e.plugin.newHbScope.to),se(2),Ay(`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()),se(),kt(` `,N_(11,45,`plugins.manage.uninstall`),` `),se(3),Py(e.plugin.newHbScope.from),se(2),Ay(`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()),se(),kt(` `,N_(17,47,`menu.hbrestart.title`),` `)}}function ts(i,c){if(i&1){let e=sc();Pe(0,`div`,11)(1,`p`),Ot(2),S_(3,`translate`),Je$1(),Pe(4,`p`,20),Ot(5),Je$1(),Pe(6,`button`,21),xi(`click`,function(){Ko$1(e);return Qo$1(ve().downloadLogFile())}),Ot(7),S_(8,`translate`),Je$1()()}if(i&2){let e=ve();se(2),Py(N_(3,3,`plugins.manage.scoped.error`)),se(3),Py(e.failure()),se(2),kt(` `,N_(8,5,`form.button_download`),` `)}}function is(i,c){if(i&1){let e=sc();Pe(0,`button`,22),S_(1,`translate`),xi(`click`,function(){Ko$1(e);return Qo$1(ve().dismissModal())}),Ot(2),S_(3,`translate`),Je$1()}if(i&2){let e=ve();Mi(`disabled`,e.installing()||e.uninstalling()||e.restarting()),Cr$1(`aria-label`,N_(1,3,`form.button_close`)),se(2),kt(` `,N_(3,5,`form.button_close`),` `)}}function ns(i,c){if(i&1){let e=sc();Pe(0,`button`,22),S_(1,`translate`),xi(`click`,function(){Ko$1(e);return Qo$1(ve().dismissModal())}),Ot(2),S_(3,`translate`),Je$1()}if(i&2){let e=ve();Mi(`disabled`,e.installing()||e.uninstalling()||e.restarting()),Cr$1(`aria-label`,N_(1,3,`form.button_close`)),se(2),kt(` `,N_(3,5,`form.button_close`),` `)}}function os(i,c){i&1&&(Pe(0,`span`),Ot(1),S_(2,`translate`),Je$1()),i&2&&(se(),Py(N_(2,1,`form.button_continue`)))}function as(i,c){i&1&&br$1(0,`i`,24)}function rs(i,c){if(i&1){let e=sc();Pe(0,`button`,23),xi(`click`,function(){Ko$1(e);return Qo$1(ve().doSwitch())}),Fe(1,os,3,3,`span`),Fe(2,as,1,0,`i`,24),Je$1()}if(i&2){let e=ve();Mi(`disabled`,e.installing()||e.uninstalling()||e.restarting()||!e.onlineUpdateOk()||e.failure()),se(),Le(!e.installing()&&!e.uninstalling()&&!e.restarting()?1:-1),se(),Le((e.installing()||e.uninstalling()||e.restarting())&&!e.failure()?2:-1)}}var hn=(()=>{class i{$activeModal=g(fe);$api=g(U3);$router=g(le);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);$ws=g(ds$1);modalData=g(I);plugin=this.modalData.plugin;installing=q(!1);installed=q(!1);uninstalling=q(!1);uninstalled=q(!1);restarting=q(!1);failure=q(``);onlineUpdateOk=q(!1);io;term;termTarget;fitAddon=new bn$1;webLinksAddon=new kn;errorLog=``;xtermA11yDisposer=null;moreInfo=`<a href="https://github.com/homebridge/plugins/wiki/Scoped-Plugins" target="_blank"><i class="fas fa-up-right-from-square primary-text"></i></a>`;prefix=`<span class="font-monospace">@homebridge-plugins/</span>`;get isLightTerminalTheme(){return this.$settings.getEffectiveTerminalLightingMode()===`light`}constructor(){this.term=new Mn$1(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.xtermA11yDisposer=E$2(this.termTarget),setTimeout(()=>this.fitAddon.fit(),0),this.io.socket.on(`stdout`,e=>{this.term.write(e);let n=e.toString().replace(E$1,``).trimEnd();n&&(this.errorLog+=`${n}\r
`)})}doSwitch(){return E(this,null,function*(){if(this.plugin)try{this.installing.set(!0),yield Ln(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 Ln(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 n=e instanceof Error?e.message:`An error occurred`;this.failure.set(n),console.error(e),this.$toastr.error(n,this.$translate.instant(`toast.title_error`))}})}downloadLogFile(){if(!this.plugin)return;let e=new Blob([this.errorLog],{type:`text/plain;charset=utf-8`});(0,fn.saveAs)(e,`${this.plugin.name}-error.log`)}ngOnDestroy(){this.io.end?.(),this.xtermA11yDisposer?.(),this.term.dispose()}dismissModal(){this.$activeModal.dismiss(`Dismiss`)}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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(n,t){n&1&&(Pe(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),S_(4,`translate`),Je$1(),Pe(5,`button`,3),S_(6,`translate`),xi(`click`,function(){return t.dismissModal()}),Je$1()(),Pe(7,`div`,4)(8,`div`,5),br$1(9,`i`,6),Je$1(),Pe(10,`ul`,7),br$1(11,`li`,8),S_(12,`translate`),Pe(13,`li`),Ot(14),S_(15,`translate`),Je$1(),br$1(16,`li`,8),S_(17,`translate`),Fe(18,Ql,3,3,`li`)(19,Yl,5,6),Je$1(),Fe(20,Zl,2,3,`pre`,9),Fe(21,es,18,49,`div`,10),Fe(22,ts,9,7,`div`,11),br$1(23,`div`,12),Je$1(),Pe(24,`div`,13)(25,`div`,14),Fe(26,is,4,7,`button`,15),Je$1(),Pe(27,`div`,10),Fe(28,ns,4,7,`button`,15),Je$1(),Pe(29,`div`,16),Fe(30,rs,3,3,`button`,17),Je$1()()()),n&2&&(se(3),Py(N_(4,18,`plugins.manage.scoped.switch`)),se(2),Mi(`disabled`,t.installing()||t.uninstalling()||t.restarting()),Cr$1(`aria-label`,N_(6,20,`form.button_close`)),se(6),Mi(`innerHTML`,x_(12,22,`plugins.manage.scoped.info_1`,w_(30,Jl,t.prefix)),Ga$1),se(3),Py(N_(15,25,`plugins.manage.scoped_message`)),se(2),Mi(`innerHTML`,x_(17,27,`plugins.manage.scoped.info_2`,w_(32,Xl,t.moreInfo)),Ga$1),se(2),Le(t.onlineUpdateOk()?18:19),se(2),Le(t.plugin&&!t.onlineUpdateOk()?20:-1),se(),Le(t.plugin&&t.onlineUpdateOk()?21:-1),se(),Le(t.failure()?22:-1),se(),Ay(`terminal-dark-bg`,!t.isLightTerminalTheme)(`terminal-light-bg`,t.isLightTerminalTheme),Mi(`hidden`,!t.onlineUpdateOk()||t.failure()),se(3),Le(t.onlineUpdateOk()?26:-1),se(2),Le(t.onlineUpdateOk()?-1:28),se(2),Le(t.onlineUpdateOk()?30:-1))},dependencies:[v3],styles:[`#plugin-output[_ngcontent-%COMP%]{height:150px;overflow-y:auto;overflow-x:hidden}.switch-steps-list[_ngcontent-%COMP%]{list-style-type:none}`]})}return i})();var ls=i=>({pluginName:i});var ss=(i,c)=>({setting:i,value:c});function ds(i,c){i&1&&(Va$1(0,`div`,5),Dy(1,`i`,13),jd())}function cs(i,c){i&1&&(Va$1(0,`li`),Ot(1),S_(2,`translate`),jd(),Va$1(3,`li`),Ot(4),S_(5,`translate`),jd()),i&2&&(se(),Py(N_(2,2,`plugins.manage.confirm_disable_platform_1`)),se(3),Py(N_(5,4,`plugins.manage.confirm_disable_platform_2`)))}function ps(i,c){i&1&&(Va$1(0,`li`),Ot(1),S_(2,`translate`),jd(),Va$1(3,`li`),Ot(4),S_(5,`translate`),jd()),i&2&&(se(),Py(N_(2,2,`plugins.manage.confirm_disable_accessory_1`)),se(3),Py(N_(5,4,`plugins.manage.confirm_disable_accessory_2`)))}function ms(i,c){i&1&&(Ot(0),S_(1,`translate`)),i&2&&kt(` `,N_(1,1,`plugins.uninstall_cleanup_child_bridge`),` `)}function gs(i,c){i&1&&(Ot(0),S_(1,`translate`)),i&2&&kt(` `,N_(1,1,`plugins.uninstall_cleanup_main_bridge`),` `)}function us(i,c){if(i&1&&(Va$1(0,`ngb-alert`,16),Fe(1,ms,2,3)(2,gs,2,3),jd()),i&2){let e=ve(4);vy(`dismissible`,!1),se(),Le(e.hasChildBridges()?1:2)}}function _s(i,c){if(i&1&&(Va$1(0,`ul`,24),Dy(1,`li`,25),S_(2,`translate`),Va$1(3,`ul`,18),Fe(4,cs,6,6)(5,ps,6,6),jd()(),Fe(6,us,3,2,`ngb-alert`,16)),i&2){let e=ve(3);se(),vy(`innerHtml`,x_(2,3,e.settingTranslationKey(),C_(6,ss,e.keepOrphansName,e.keepOrphansValue)),Ga$1),se(3),Le(e.willKeepAccessoriesInCache()?4:5),se(2),Le(e.shouldShowCleanupAlert()?6:-1)}}function fs(i,c){if(i&1){let e=sc();Va$1(0,`div`,19)(1,`p`,20)(2,`label`,21)(3,`input`,22),ac(`ngModelChange`,function(t){Ko$1(e);return Qo$1(ve(2).removeConfig.set(t))})(`change`,function(){Ko$1(e);return Qo$1(ve(2).onRemoveConfigChange())}),jd(),db(),Ot(4),S_(5,`translate`),Dy(6,`span`,23),jd()()(),Fe(7,_s,7,9)}if(i&2){let e=ve(2);se(3),vy(`ngModel`,e.removeConfig()),pb(),se(),kt(` `,N_(5,3,`plugins.uninstall_remove_plugin_config`),` `),se(3),Le(e.isConfiguredDynamicPlatform()?7:-1)}}function hs(i,c){i&1&&(Va$1(0,`ngb-alert`,16),Ot(1),S_(2,`translate`),jd()),i&2&&(vy(`dismissible`,!1),se(),kt(` `,N_(2,2,`plugins.uninstall_remove_config_required`),` `))}function bs(i,c){if(i&1&&(Va$1(0,`div`,14),Dy(1,`i`,15),jd(),Fe(2,fs,8,5),Fe(3,hs,3,4,`ngb-alert`,16),Va$1(4,`ngb-alert`,17)(5,`p`,18),Ot(6),S_(7,`translate`),jd()()),i&2){let e=ve();se(2),Le(e.isConfigured()&&e.pluginAlias()&&e.pluginType()?2:-1),se(),Le(e.isConfigured()&&(!e.pluginAlias()||!e.pluginType())?3:-1),se(),vy(`dismissible`,!1),se(2),kt(` `,x_(7,4,`plugins.uninstall_remove_confirmation`,w_(7,ls,e.plugin?.displayName)),` `)}}function Cs(i,c){i&1&&(Ot(0),S_(1,`translate`)),i&2&&kt(` `,N_(1,1,`plugins.manage.uninstall`),` `)}function xs(i,c){i&1&&Dy(0,`i`,12)}var vs=/:/g;var bn=(()=>{class i{$activeModal=g(fe);$api=g(U3);$modal=g(si);$toastr=g(z0);$translate=g(Nf);injector=g(Te);modalData=g(s);plugin=this.modalData.plugin;childBridges=this.modalData.childBridges??[];action=this.modalData.action??``;keepOrphans=this.modalData.keepOrphans??!1;onRefreshPluginList=this.modalData.onRefreshPluginList??(()=>{});editorContext=this.modalData.editorContext;keepOrphansName=`<code>${this.$translate.instant(`settings.startup.keep_accessories`)}</code>`;keepOrphansValue=`<code>false</code>`;loading=q(!0);uninstalling=q(!1);removeConfig=q(!0);removeChildBridges=q(!0);hasChildBridges=q(!1);isConfigured=q(!1);isConfiguredDynamicPlatform=q(!1);pluginType=q(null);pluginAlias=q(null);ngOnInit(){this.initialize()}doUninstall(){return E(this,null,function*(){if(this.uninstalling.set(!0),this.removeConfig()&&this.isConfigured())try{yield this.removePluginConfig()}catch(n){console.error(n);let t=n instanceof Error?n.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(n=>this.removeChildBridge(n.username.replace(vs,``))))}catch(n){console.error(n)}if(this.$activeModal.dismiss(),!this.plugin)return;let e=uy([{provide:L,useValue:{action:`Uninstall`,pluginName:this.plugin.name,pluginDisplayName:this.plugin.displayName,onRefreshPluginList:this.onRefreshPluginList}}],this.injector);this.$modal.open(Ke,{size:`lg`,backdrop:`static`,injector:e})})}dismissModal(){this.$activeModal.dismiss(`Dismiss`)}onRemoveConfigChange(){this.removeChildBridges.set(this.removeConfig())}settingTranslationKey=J(()=>this.isConfiguredDynamicPlatform()&&this.keepOrphans&&this.removeConfig()?`plugins.manage.confirm_disable_setting_override`:`plugins.manage.confirm_disable_setting`);shouldShowCleanupAlert=J(()=>!(this.keepOrphans&&this.isConfiguredDynamicPlatform()&&!this.removeConfig()));willKeepAccessoriesInCache=J(()=>this.keepOrphans&&this.isConfiguredDynamicPlatform()&&!this.removeConfig());initialize(){return E(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 n=e instanceof Error?e.message:`Failed to load plugin information`;this.$toastr.error(n,this.$translate.instant(`toast.title_error`))}finally{this.loading.set(!1)}})}getAlias(){return E(this,null,function*(){if(!this.plugin)throw new Error(`Plugin not set`);return this.editorContext?.alias??this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`)})}removePluginConfig(){return E(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 E(this,null,function*(){try{yield this.$api.delete(`/server/pairings/${e}`)}catch(n){console.error(n);let t=n instanceof Error?n.message:`Failed to remove child bridge`;this.$toastr.error(t,this.$translate.instant(`toast.title_error`))}})}static ɵfac=function(n){return new(n||i)};static ɵcmp=nc({type:i,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`],[`aria-hidden`,`true`,1,`fas`,`fa-circle-notch`,`fa-spin`],[`aria-hidden`,`true`,1,`fas`,`fa-circle-notch`,`fa-spin`,`icon-xl`],[1,`text-center`,`mb-0`],[`aria-hidden`,`true`,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(n,t){n&1&&(Va$1(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),jd(),Va$1(4,`button`,3),S_(5,`translate`),ac(`click`,function(){return t.dismissModal()}),jd()(),Va$1(6,`div`,4),Fe(7,ds,2,0,`div`,5)(8,bs,8,9),jd(),Va$1(9,`div`,6)(10,`div`,7)(11,`button`,8),S_(12,`translate`),ac(`click`,function(){return t.dismissModal()}),Ot(13),S_(14,`translate`),jd()(),Dy(15,`div`,9),Va$1(16,`div`,10)(17,`button`,11),ac(`click`,function(){return t.doUninstall()}),Fe(18,Cs,2,3)(19,xs,1,0,`i`,12),jd()()()()),n&2&&(se(3),Py(t.plugin?.displayName||t.plugin?.name),se(),vy(`disabled`,t.uninstalling()),Cr$1(`aria-label`,N_(5,9,`form.button_close`)),se(3),Le(t.loading()?7:8),se(4),vy(`disabled`,t.uninstalling()),Cr$1(`aria-label`,N_(12,11,`form.button_close`)),se(2),kt(` `,N_(14,13,`form.button_close`),` `),se(4),vy(`disabled`,t.loading()||t.uninstalling()),se(),Le(t.uninstalling()?19:18))},dependencies:[Kn,Mt,Hn,ln$1,X,v3],styles:[`.modal-min-height[_ngcontent-%COMP%]{min-height:300px}`]})}return i})();var Ie=(()=>{class i{$api=g(U3);$modal=g(si);$customPluginsService=g(Xi);$errors=g(m);$settings=g(zt$1);$toastr=g(z0);$translate=g(Nf);injector=g(Te);pluginListRefreshSubject=new P;onPluginListRefresh=this.pluginListRefreshSubject.asObservable();installPlugin(e,n,t=null){return E(this,null,function*(){let a=uy([{provide:L,useValue:{action:`Install`,pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:n,isConfigured:e.isConfigured,onRefreshPluginList:()=>this.pluginListRefreshSubject.next(),verifiedPlugin:e.verifiedPlugin,verifiedPlusPlugin:e.verifiedPlusPlugin,funding:e.funding,backToVersionModal:t}}],this.injector),m=this.$modal.open(Ke,{size:`lg`,backdrop:`static`,injector:a});try{let u=yield m.result;u?.action===`just-installed`&&u?.plugin&&(this.$settings.env.hasInstalledPlugins=!0,u.plugin.isConfigured?this.$modal.open(oe,{size:`lg`,backdrop:`static`,keyboard:!1}):yield this.settings(u.plugin))}catch(u){}})}uninstallPlugin(e,n){return E(this,null,function*(){let t;try{t=yield this.loadEditorContext(e.name)}catch(u){console.error(u)}let a=uy([{provide:s,useValue:{plugin:e,childBridges:n,action:`Uninstall`,keepOrphans:this.$settings.keepOrphans,onRefreshPluginList:()=>this.pluginListRefreshSubject.next(),editorContext:t}}],this.injector),m=this.$modal.open(bn,{size:`lg`,backdrop:`static`,injector:a});try{yield m.result,this.pluginListRefreshSubject.next()}catch(u){}})}checkAndUpdatePlugin(e,n){return E(this,null,function*(){(yield this.checkHbAndNodeVersion(e,`update`))&&(yield this.updatePlugin(e,n))})}updatePlugin(e,n,t=null){return E(this,null,function*(){let a=uy([{provide:L,useValue:{action:`Update`,pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:n,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),m=this.$modal.open(Ke,{size:`lg`,backdrop:`static`,injector:a});try{let u=yield m.result;u?.action===`just-installed`&&u?.plugin&&(u.plugin.isConfigured?this.$modal.open(oe,{size:`lg`,backdrop:`static`,keyboard:!1}):yield this.settings(u.plugin))}catch(u){}})}upgradeHomebridge(e,n){return E(this,null,function*(){if(!(yield this.checkHbAndNodeVersion(e,`update`)))return;let t=uy([{provide:L,useValue:{action:`Update`,pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:n,latestVersion:e.latestVersion,installedVersion:e.installedVersion}}],this.injector);this.$modal.open(Ke,{size:`lg`,backdrop:`static`,injector:t})})}installAlternateVersion(e,n){return E(this,null,function*(){let t=uy([{provide:l,useValue:{plugin:e,onRefreshPluginList:()=>this.pluginListRefreshSubject.next(),onSettingsChange:n}}],this.injector),a=this.$modal.open(At,{size:`lg`,backdrop:`static`,injector:t});try{let{action:m,version:u,engines:h}=yield a.result;return(yield this.checkHbAndNodeVersion(x(w({},e),{updateEngines:h}),m))?e.name===`homebridge`?yield this.upgradeHomebridge(e,u):e.installedVersion?yield this.updatePlugin(e,u,e):this.installPlugin(e,u,e):void 0}catch(m){}})}bridgeSettings(e$1,n=!1){return E(this,null,function*(){let t;try{t=yield this.loadEditorContext(e$1.name)}catch(h){console.error(h),this.$toastr.error(this.$translate.instant(`plugins.toast_failed_to_load_plugin_schema`),this.$translate.instant(`toast.title_error`));return}let m=uy([{provide:e,useValue:{schema:e$1.settingsSchema?t.configSchema:void 0,plugin:e$1,justInstalled:n,editorContext:t}}],this.injector),u=this.$modal.open(rn,{size:`lg`,backdrop:`static`,injector:m});try{(yield u.result)===`refresh`&&this.pluginListRefreshSubject.next()}catch(h){}})}externalAccessories(e){return E(this,null,function*(){let n$2=uy([{provide:n,useValue:{plugin:e}}],this.injector),t=this.$modal.open(un,{size:`lg`,backdrop:`static`,injector:n$2});try{yield t.result}catch(a){}})}settings(e){return E(this,null,function*(){let n;try{n=yield this.loadEditorContext(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 t=e.settingsSchema?n.configSchema:void 0;if(t&&t.customUi)return this.$customPluginsService.openCustomSettingsUi(e,t,n);if(this.$customPluginsService.plugins[e.name])return this.$customPluginsService.openSettings(e,t,n);let a$2=uy([{provide:a,useValue:{schema:t,plugin:e,editorContext:n}}],this.injector);return this.$modal.open(e.settingsSchema?gn:zt,{size:`lg`,backdrop:`static`,injector:a$2}).result.catch(()=>{})})}jsonEditor(e){return E(this,null,function*(){let n;try{n=yield this.loadEditorContext(e.name)}catch(u){console.error(u)}let a$3=uy([{provide:a,useValue:{schema:e.settingsSchema?n?.configSchema:void 0,plugin:e,editorContext:n}}],this.injector);return this.$modal.open(zt,{size:`lg`,backdrop:`static`,injector:a$3}).result.catch(u=>console.error(u))})}checkHbAndNodeVersion(e,n){return E(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(m){return console.error(m),this.$toastr.error(this.$errors.toToastMessage(m),this.$translate.instant(`toast.title_error`)),!1}if(!t||!a)try{let m=uy([{provide:r,useValue:{plugin:e,isValidNode:t,isValidHb:a,action:n}}],this.injector);return yield this.$modal.open(sn,{size:`lg`,backdrop:`static`,injector:m}).result}catch(m){return!1}return!0})}loadEditorContext(e){return E(this,null,function*(){return this.$api.get(`/plugins/${encodeURIComponent(e)}/editor-context`)})}resetChildBridges(e){return E(this,null,function*(){let n=uy([{provide:O,useValue:{childBridges:e}}],this.injector);this.$modal.open(_n,{size:`lg`,backdrop:`static`,injector:n})})}switchToScoped(e){return E(this,null,function*(){let n=uy([{provide:I,useValue:{plugin:e}}],this.injector);this.$modal.open(hn,{size:`lg`,backdrop:`static`,injector:n})})}static ɵfac=function(n){return new(n||i)};static ɵprov=C({token:i,factory:i.ɵfac,providedIn:`root`})}return i})();export{nn as i,Ie as n,en as r,Ge as t};