homebridge-config-ui-x 5.11.2-beta.2 → 5.11.2-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -2
- package/dist/core/auth/auth.controller.d.ts +4 -0
- package/dist/core/config/config.interfaces.d.ts +14 -0
- package/dist/core/config/config.service.d.ts +6 -0
- package/dist/core/config/config.service.js +8 -0
- package/dist/core/config/config.service.js.map +1 -1
- package/dist/core/config/config.startup.js +48 -17
- package/dist/core/config/config.startup.js.map +1 -1
- package/dist/core/feature-flags/feature-flags.registry.js +5 -0
- package/dist/core/feature-flags/feature-flags.registry.js.map +1 -1
- package/dist/core/homebridge-ipc/homebridge-ipc.service.js +1 -0
- package/dist/core/homebridge-ipc/homebridge-ipc.service.js.map +1 -1
- package/dist/core/spa/spa-html.service.d.ts +5 -0
- package/dist/core/spa/spa-html.service.js +32 -0
- package/dist/core/spa/spa-html.service.js.map +1 -0
- package/dist/core/spa/spa.filter.d.ts +3 -0
- package/dist/core/spa/spa.filter.js +22 -2
- package/dist/core/spa/spa.filter.js.map +1 -1
- package/dist/core/ssl/ssl-cert-generator.service.d.ts +15 -0
- package/dist/core/ssl/ssl-cert-generator.service.js +125 -0
- package/dist/core/ssl/ssl-cert-generator.service.js.map +1 -0
- package/dist/globalDefaults.js +3 -0
- package/dist/globalDefaults.js.map +1 -1
- package/dist/main.js +18 -4
- package/dist/main.js.map +1 -1
- package/dist/modules/accessories/accessories.controller.d.ts +1 -1
- package/dist/modules/accessories/accessories.interfaces.d.ts +94 -0
- package/dist/modules/accessories/accessories.interfaces.js +2 -0
- package/dist/modules/accessories/accessories.interfaces.js.map +1 -0
- package/dist/modules/accessories/accessories.module.js +2 -0
- package/dist/modules/accessories/accessories.module.js.map +1 -1
- package/dist/modules/accessories/accessories.service.d.ts +21 -3
- package/dist/modules/accessories/accessories.service.js +280 -17
- package/dist/modules/accessories/accessories.service.js.map +1 -1
- package/dist/modules/child-bridges/child-bridges.interfaces.d.ts +9 -0
- package/dist/modules/config-editor/config-editor.controller.d.ts +4 -0
- package/dist/modules/config-editor/config-editor.controller.js +64 -0
- package/dist/modules/config-editor/config-editor.controller.js.map +1 -1
- package/dist/modules/config-editor/config-editor.service.d.ts +6 -1
- package/dist/modules/config-editor/config-editor.service.js +45 -1
- package/dist/modules/config-editor/config-editor.service.js.map +1 -1
- package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js +1 -1
- package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js.map +1 -1
- package/dist/modules/plugins/plugins.service.js +15 -0
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/server/server.controller.d.ts +50 -0
- package/dist/modules/server/server.controller.js +201 -2
- package/dist/modules/server/server.controller.js.map +1 -1
- package/dist/modules/server/server.service.d.ts +48 -0
- package/dist/modules/server/server.service.js +502 -14
- package/dist/modules/server/server.service.js.map +1 -1
- package/dist/modules/status/status.gateway.d.ts +2 -0
- package/dist/modules/status/status.interfaces.d.ts +11 -0
- package/dist/modules/status/status.service.d.ts +4 -1
- package/dist/modules/status/status.service.js +21 -2
- package/dist/modules/status/status.service.js.map +1 -1
- package/docs/matter-todo.md +15 -0
- package/docs/ssl-upload-pr.md +103 -0
- package/package.json +3 -1
- package/public/3rdpartylicenses.txt +595 -621
- package/public/assets/matter.svg +8 -0
- package/public/assets/plugin-ui-utils/ui.js +3 -0
- package/public/assets/plugin-ui-utils/ui.js.map +1 -1
- package/public/chunk-2TQEV57U.js +2 -0
- package/public/chunk-2Y6QBPFY.js +1 -0
- package/public/chunk-3LKYOCGJ.js +1 -0
- package/public/chunk-3YTNATAH.js +1 -0
- package/public/chunk-42Y35W3J.js +2 -0
- package/public/chunk-47QTMPRY.js +1 -0
- package/public/chunk-4KXPUEE3.js +4 -0
- package/public/chunk-4PQ5WRGK.js +1 -0
- package/public/chunk-4TAGCB7R.js +1 -0
- package/public/chunk-4VLAXCSY.js +1 -0
- package/public/chunk-5K3S6ZXB.js +1 -0
- package/public/chunk-6BRZAIW2.js +3 -0
- package/public/chunk-6QJUZNZL.js +1 -0
- package/public/chunk-6ZOSTYPR.js +1 -0
- package/public/{chunk-ZV26JTV7.js → chunk-7JNVXXNR.js} +1 -1
- package/public/chunk-7PPGGAHV.js +1 -0
- package/public/chunk-AM5CKSLZ.js +1 -0
- package/public/chunk-B4AJQJMI.js +1 -0
- package/public/chunk-BBRC6PRL.js +1 -0
- package/public/chunk-BGCYR25X.js +1 -0
- package/public/chunk-BHA7V2NQ.js +1 -0
- package/public/{chunk-KI6BE77G.js → chunk-BMOLDRJ3.js} +1 -1
- package/public/chunk-BVJS76CN.js +1 -0
- package/public/chunk-CNUIQJSO.js +1 -0
- package/public/chunk-CPECPTSN.js +1 -0
- package/public/{chunk-75KR2TK6.js → chunk-DBMKB5Z2.js} +1 -1
- package/public/chunk-DEM3FH7C.js +1 -0
- package/public/chunk-E35SHTFY.js +1 -0
- package/public/chunk-EAYA44IV.js +1 -0
- package/public/chunk-EBHP3YOF.js +1 -0
- package/public/chunk-EMF6ZINV.js +4 -0
- package/public/chunk-FJB6YCFU.js +1 -0
- package/public/chunk-FKJY3Z2V.js +1 -0
- package/public/chunk-FQDRGOO5.js +1 -0
- package/public/chunk-FRMRAPF2.js +1 -0
- package/public/chunk-FYHEIYSO.js +5 -0
- package/public/chunk-GEQRIXEF.js +1 -0
- package/public/chunk-GJ42U6LP.js +16 -0
- package/public/chunk-GT2YL2TI.js +1 -0
- package/public/chunk-GTIVJH6Y.js +1 -0
- package/public/chunk-GYMWB5SQ.js +1 -0
- package/public/chunk-H2D3SCVU.js +1 -0
- package/public/{chunk-OMFNURQZ.js → chunk-H7F7H5MW.js} +1 -1
- package/public/chunk-HKOUIAFO.js +1 -0
- package/public/chunk-I5V7VF5M.js +1 -0
- package/public/chunk-IBFLM7UM.js +1 -0
- package/public/chunk-IZHFI46L.js +2 -0
- package/public/chunk-JNSPIONO.js +1 -0
- package/public/chunk-JUCPYKUR.js +1 -0
- package/public/chunk-KJH2IPMR.js +1 -0
- package/public/chunk-KPSGNAPN.js +1 -0
- package/public/chunk-LH4WRTR2.js +1 -0
- package/public/chunk-LHXNE56J.js +1 -0
- package/public/chunk-LOEOVQRM.js +1 -0
- package/public/chunk-LRB7FQNQ.js +1 -0
- package/public/chunk-LTYAICHT.js +1 -0
- package/public/chunk-LVBVUIJY.js +12 -0
- package/public/chunk-MKV5RAJQ.js +4 -0
- package/public/chunk-MPQEE6FH.js +1 -0
- package/public/chunk-MRPQNEON.js +35 -0
- package/public/chunk-MS4K4KAK.js +5 -0
- package/public/chunk-N6AN65NK.js +3 -0
- package/public/chunk-NCLG2ZY5.js +1 -0
- package/public/chunk-OHJQJ73S.js +1 -0
- package/public/chunk-P3DOEH3R.js +1 -0
- package/public/chunk-PEOTW7KR.js +1 -0
- package/public/chunk-PQM33D72.js +1 -0
- package/public/chunk-Q4PUZM2R.js +1 -0
- package/public/chunk-QBG7SKRK.js +68 -0
- package/public/chunk-QGLAR7UC.js +1 -0
- package/public/chunk-QK4CWVVD.js +1 -0
- package/public/chunk-QPGHC7OK.js +1 -0
- package/public/chunk-RAG53DHZ.js +1 -0
- package/public/chunk-RHJRKBK2.js +1 -0
- package/public/chunk-RQ42YKAP.js +1 -0
- package/public/chunk-S4BMZ4C4.js +1 -0
- package/public/chunk-S4O5HRCM.js +1 -0
- package/public/chunk-SE6AXFTZ.js +1 -0
- package/public/chunk-SIODBMHU.js +1 -0
- package/public/chunk-SS725Q7L.js +1 -0
- package/public/chunk-STXA2UWR.js +1 -0
- package/public/chunk-SVEGWVQJ.js +1 -0
- package/public/chunk-T472BWYK.js +1 -0
- package/public/chunk-TPGJVI7J.js +1 -0
- package/public/chunk-TRDYZJYI.js +1 -0
- package/public/chunk-TTX3XSDC.js +1 -0
- package/public/chunk-TVEZZ2CK.js +1 -0
- package/public/chunk-UDXPJS32.js +1 -0
- package/public/chunk-UO7KCTHV.js +1 -0
- package/public/chunk-UOOJPKZJ.js +1 -0
- package/public/chunk-VAD47NOZ.js +1 -0
- package/public/chunk-VBQ2CSUE.js +1 -0
- package/public/chunk-VWBS6KRT.js +1 -0
- package/public/chunk-VYAAI7PY.js +1 -0
- package/public/chunk-WBTFILXV.js +19 -0
- package/public/chunk-WO6QHRQI.js +1 -0
- package/public/chunk-WOMMYJV2.js +1 -0
- package/public/chunk-WOXYSKNU.js +1 -0
- package/public/{chunk-BKCIVF4W.js → chunk-WX345PMX.js} +52 -2
- package/public/chunk-XGK5YFH6.js +19 -0
- package/public/chunk-XLJ6VVK3.js +8 -0
- package/public/chunk-XPSIQPO4.js +1 -0
- package/public/chunk-XQXAVYM6.js +1 -0
- package/public/chunk-YBGB3IOQ.js +1 -0
- package/public/chunk-YHH6UACV.js +1 -0
- package/public/chunk-YLRX4V4V.js +1 -0
- package/public/chunk-YM6RL7NW.js +1 -0
- package/public/chunk-YMEXNW5V.js +1 -0
- package/public/chunk-YSJHLHJ6.js +1 -0
- package/public/chunk-ZCGZM7LU.js +1 -0
- package/public/chunk-ZDUAXPNP.js +1 -0
- package/public/index.html +2 -2
- package/public/main-SPPQL5YI.js +1 -0
- package/public/media/matter-P563JGDL.svg +8 -0
- package/public/polyfills-34U4WL3Z.js +1 -0
- package/public/styles-CT2LPGES.css +1 -0
- package/scripts/extract-plugin-alias.js +53 -2
- package/public/chunk-2VYCMFLK.js +0 -1
- package/public/chunk-337WAYBF.js +0 -1
- package/public/chunk-3F6KNL45.js +0 -5
- package/public/chunk-3GUIMBZA.js +0 -50
- package/public/chunk-4BH7J5ZU.js +0 -1
- package/public/chunk-4MSKGZXZ.js +0 -1
- package/public/chunk-4STYOKXR.js +0 -1
- package/public/chunk-5GRM2PNI.js +0 -8
- package/public/chunk-6C5CYDDU.js +0 -1
- package/public/chunk-6T52JN5R.js +0 -1
- package/public/chunk-7EKDGIG7.js +0 -1
- package/public/chunk-7O3SPIWC.js +0 -1
- package/public/chunk-ACK5QKZR.js +0 -1
- package/public/chunk-ADJ6TEYQ.js +0 -5
- package/public/chunk-ADWZU2CD.js +0 -1
- package/public/chunk-AGDDSLXN.js +0 -1
- package/public/chunk-ASZKPQUN.js +0 -1
- package/public/chunk-AZY2DNUN.js +0 -1
- package/public/chunk-B6MBMYJR.js +0 -1
- package/public/chunk-BBLJIMXX.js +0 -1
- package/public/chunk-BON2K2BD.js +0 -2
- package/public/chunk-BRP3EHP7.js +0 -1
- package/public/chunk-C5VP7CRC.js +0 -1
- package/public/chunk-C6X7E5CS.js +0 -1
- package/public/chunk-CM3N3C3W.js +0 -1
- package/public/chunk-CV2KW5FI.js +0 -1
- package/public/chunk-EDQF53QR.js +0 -1
- package/public/chunk-EZJQ5APU.js +0 -1
- package/public/chunk-FRNPHIV3.js +0 -1
- package/public/chunk-GBTKBQ2X.js +0 -16
- package/public/chunk-HDF4JHFI.js +0 -4
- package/public/chunk-JEUVQW5P.js +0 -1
- package/public/chunk-KWAS7MXI.js +0 -1
- package/public/chunk-KWC5QURK.js +0 -8
- package/public/chunk-KXNC6WH6.js +0 -1
- package/public/chunk-MMBLECEN.js +0 -1
- package/public/chunk-NQB7BEZZ.js +0 -1
- package/public/chunk-OKAPP6YO.js +0 -1
- package/public/chunk-OM7GHRRK.js +0 -1
- package/public/chunk-OOM2PIRM.js +0 -5
- package/public/chunk-OZKGVJ4N.js +0 -1
- package/public/chunk-PT24GQ5K.js +0 -1
- package/public/chunk-QPI2YWGC.js +0 -1
- package/public/chunk-QQRM2O4S.js +0 -3
- package/public/chunk-QXD4RXA4.js +0 -1
- package/public/chunk-QZU43P2A.js +0 -1
- package/public/chunk-R3Y3VSF7.js +0 -4
- package/public/chunk-R7Q4CXAE.js +0 -1
- package/public/chunk-RAG7VYNH.js +0 -40
- package/public/chunk-RY3E4AUI.js +0 -1
- package/public/chunk-SCWBTFUY.js +0 -1
- package/public/chunk-SRFINKMY.js +0 -1
- package/public/chunk-TRDROX2J.js +0 -1
- package/public/chunk-UH7ZNLL5.js +0 -19
- package/public/chunk-V2WJ2SKN.js +0 -1
- package/public/chunk-VZ3XY34I.js +0 -2
- package/public/chunk-W663VLRG.js +0 -1
- package/public/chunk-WDXU4PPN.js +0 -1
- package/public/chunk-WEXOQCVG.js +0 -1
- package/public/chunk-XDFBUXFD.js +0 -1
- package/public/chunk-XPGJPK66.js +0 -4
- package/public/chunk-YXLLPJEL.js +0 -1
- package/public/chunk-ZXUIFQS4.js +0 -51
- package/public/main-YD5INHXP.js +0 -1
- package/public/polyfills-5KWHJ7II.js +0 -2
- package/public/styles-7EFV5QBG.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as Y}from"./chunk-TUN7H57E.js";import{a as ee}from"./chunk-PEOTW7KR.js";import{a as Z}from"./chunk-TPGJVI7J.js";import{a as re}from"./chunk-WX345PMX.js";import{a as Q}from"./chunk-QGLAR7UC.js";import{a as J}from"./chunk-6ZOSTYPR.js";import{a as G}from"./chunk-AM5CKSLZ.js";import{n as B}from"./chunk-MS4K4KAK.js";import{a as q,b as R,d as W,e as $,f as H,g as j}from"./chunk-TRDYZJYI.js";import{a as O}from"./chunk-BGCYR25X.js";import{b as I}from"./chunk-E35SHTFY.js";import"./chunk-UO7KCTHV.js";import{b as A}from"./chunk-T472BWYK.js";import{E as V,F as X,J as T,q as N}from"./chunk-2TQEV57U.js";import{Ab as S,Ec as d,Fb as g,Fc as l,Gb as i,Hb as a,Ib as p,Oc as K,Rb as k,Xb as u,Za as n,Zb as C,aa as c,ga as b,ha as x,hb as F,ic as P,kc as _,lc as v,ma as D,n as U,nb as E,sa as w,xc as f,yb as m,zb as y}from"./chunk-MKV5RAJQ.js";import{g as ne,h as L}from"./chunk-B4AJQJMI.js";var ie=ne(re(),1);var z=()=>["/"],ae=()=>({exact:!0}),se=()=>["/plugins"],de=()=>["/accessories"],le=()=>["/logs"],pe=()=>["/support"],ce=()=>["/platform-tools/terminal"],me=()=>["/config"],ue=()=>["/settings"],_e=()=>["/power-options"];function ge(s,M){if(s&1){let e=k();i(0,"div",10)(1,"div",20),d(2,"translate"),d(3,"translate"),u("click",function(){b(e);let t=C();return x(t.openUnderVoltageModal())})("keydown",function(t){b(e);let r=C();return x(r.handleKeydown(t))}),i(4,"div",12),p(5,"i",21),a(),i(6,"div",14),_(7),d(8,"translate"),a()()()}s&2&&(n(),m("aria-label",l(2,2,"rpi.throttled.undervoltage_title")+" - "+l(3,4,"rpi.throttled.undervoltage_description")),n(6),v(l(8,6,"rpi.throttled.undervoltage_title")))}function he(s,M){if(s&1){let e=k();i(0,"div",10)(1,"div",15),d(2,"translate"),u("keydown",function(t){b(e);let r=C();return x(r.handleKeydown(t))}),i(3,"div",12),p(4,"i",22),a(),i(5,"div",14),_(6),d(7,"translate"),a()()()}s&2&&(n(),g("routerLink",f(8,ce))("routerLinkActive","active"),m("aria-label",l(2,4,"menu.linux.label_terminal")),n(5),v(l(7,6,"menu.linux.label_terminal")))}function ve(s,M){if(s&1){let e=k();i(0,"div",10)(1,"div",15),d(2,"translate"),u("keydown",function(t){b(e);let r=C();return x(r.handleKeydown(t))}),i(3,"div",12),p(4,"i",23),a(),i(5,"div",14),_(6),d(7,"translate"),a()()()}s&2&&(n(),g("routerLink",f(8,me))("routerLinkActive","active"),m("aria-label",l(2,4,"menu.config_json_editor")),n(5),v(l(7,6,"menu.config_json_editor")))}function fe(s,M){if(s&1){let e=k();i(0,"div",10)(1,"div",15),d(2,"translate"),u("keydown",function(t){b(e);let r=C();return x(r.handleKeydown(t))}),i(3,"div",12),p(4,"i",24),a(),i(5,"div",14),_(6),d(7,"translate"),a()()()}s&2&&(n(),g("routerLink",f(8,ue))("routerLinkActive","active"),m("aria-label",l(2,4,"menu.label_settings")),n(5),v(l(7,6,"menu.label_settings")))}function be(s,M){if(s&1){let e=k();i(0,"div",10)(1,"div",15),d(2,"translate"),u("keydown",function(t){b(e);let r=C();return x(r.handleKeydown(t))}),i(3,"div",12),p(4,"i",25),a(),i(5,"div",14),_(6),d(7,"translate"),a()()()}s&2&&(n(),g("routerLink",f(8,_e))("routerLinkActive","active"),m("aria-label",l(2,4,"menu.restart.title")),n(5),v(l(7,6,"menu.restart.title")))}function xe(s,M){if(s&1){let e=k();i(0,"div",10)(1,"div",20),d(2,"translate"),u("click",function(){b(e);let t=C();return x(t.reloadPage())})("keydown",function(t){b(e);let r=C();return x(r.handleKeydown(t))}),i(3,"div",12),p(4,"i",26),a(),i(5,"div",14),_(6),d(7,"translate"),a()()()}s&2&&(n(),m("aria-label",l(2,2,"menu.reload")),n(5),v(l(7,4,"menu.reload")))}function Ce(s,M){if(s&1){let e=k();i(0,"div",10)(1,"div",20),d(2,"translate"),u("click",function(){b(e);let t=C();return x(t.logout())})("keydown",function(t){b(e);let r=C();return x(r.handleKeydown(t))}),i(3,"div",12),p(4,"i",27),a(),i(5,"div",14),_(6),d(7,"translate"),a()()()}s&2&&(n(),m("aria-label",l(2,2,"menu.tooltip_logout")),n(5),v(l(7,4,"menu.tooltip_logout")))}var te=(()=>{class s{destroyRef=c(D);$auth=c(I);$authHelper=c(G);$settings=c(A);$modal=c(B);$notification=c(Z);$renderer=c(F);$router=c($);$translate=c(V);initialIsExpanded=K(!1,{});isExpanded=w(!1,{});formAuth=w(this.$settings.formAuth,{});isAdmin=this.$auth.user.admin;enableTerminalAccess=this.$settings.env.enableTerminalAccess;rPiCurrentlyUnderVoltage=w(!1,{});rPiWasUnderVoltage=w(!1,{});isMobile=!1;freezeMenu=w(!1,{});isPwa=Y();sidebarMouseEnterListener=()=>this.openSidebar();sidebarMouseLeaveListener=()=>this.closeSidebar();touchstartListener;clickListener;constructor(){this.isMobile=window.innerWidth<768;let e;window.addEventListener("resize",()=>{clearTimeout(e),e=setTimeout(()=>{this.updateListeners()},500)}),this.$router.events.pipe(O()).subscribe(o=>L(this,null,function*(){if(o instanceof q&&this.$settings.formAuth&&o.url!=="/login"&&!(yield this.$authHelper.isAuthenticated())){window.sessionStorage.setItem("target_route",o.url),yield this.$router.navigate(["/login"]);return}o instanceof R&&queueMicrotask(()=>{this.closeSidebar(),this.freezeMenu.set(!0),setTimeout(()=>{this.freezeMenu.set(!1)},750)})}))}ngOnInit(){this.isExpanded.set(this.initialIsExpanded()),this.$notification.raspberryPiThrottled.pipe(O(this.destroyRef)).subscribe(r=>{r["Under Voltage"]&&this.rPiCurrentlyUnderVoltage.set(!0),r["Under-voltage has occurred"]&&this.rPiWasUnderVoltage.set(!0)}),this.$notification.formAuthEnabled.pipe(O(this.destroyRef)).subscribe(r=>{this.formAuth.set(r)});let e=document.querySelector(".sidebar"),o=document.querySelector(".m-header"),t=document.querySelector(".content");this.isMobile?(this.touchstartListener=r=>{if(t.contains(r.target)&&this.isExpanded()){r.preventDefault(),this.toggleSidebar();return}!e.contains(r.target)&&!o.contains(r.target)&&this.isExpanded()&&(r.preventDefault(),this.closeSidebar())},document.addEventListener("touchstart",this.touchstartListener,{passive:!1})):(this.updateListeners(),o.addEventListener("mouseenter",this.sidebarMouseEnterListener,{passive:!1}),o.addEventListener("mouseleave",this.sidebarMouseLeaveListener,{passive:!1}),this.clickListener=r=>{e.contains(r.target)&&r.clientX>60&&this.closeSidebar()},document.addEventListener("click",this.clickListener,{passive:!1}))}toggleSidebar(){this.freezeMenu()||(this.isExpanded.set(!this.isExpanded()),this.updateContentStyles())}openUnderVoltageModal(){let e=this.$modal.open(ee,{size:"lg",backdrop:"static"});e.componentInstance.title=this.$translate.instant("rpi.throttled.undervoltage_title"),e.componentInstance.message=this.$translate.instant(this.rPiCurrentlyUnderVoltage()?"rpi.throttled.currently_message":"rpi.throttled.previously_message"),e.componentInstance.ctaButtonLabel=this.$translate.instant("form.button_more_info"),e.componentInstance.faIconClass="fas fa-bolt yellow-text",e.componentInstance.ctaButtonLink="https://pimylifeup.com/raspberry-pi-low-voltage-warning"}handleKeydown(e){if(e.key==="Enter"){let o=e.target;["menuitem","button"].includes(o.getAttribute("role"))&&o.click()}}reloadPage(){window.location.reload()}ngOnDestroy(){this.touchstartListener&&document.removeEventListener("touchstart",this.touchstartListener),this.clickListener&&document.removeEventListener("click",this.clickListener);let e=document.querySelector(".sidebar"),o=document.querySelector(".m-header");e&&(e.removeEventListener("mouseenter",this.sidebarMouseEnterListener),e.removeEventListener("mouseleave",this.sidebarMouseLeaveListener)),o&&(o.removeEventListener("mouseenter",this.sidebarMouseEnterListener),o.removeEventListener("mouseleave",this.sidebarMouseLeaveListener))}logout(){this.$auth.logout()}openSidebar(){this.freezeMenu()||(this.isExpanded.set(!0),this.updateContentStyles())}closeSidebar(){this.freezeMenu()||(this.isExpanded.set(!1),this.updateContentStyles())}updateContentStyles(){let e=document.querySelector(".content");this.isExpanded()?(this.$renderer.setStyle(e,"opacity","20%"),this.$renderer.setStyle(e,"pointer-events","none"),this.$renderer.setStyle(e,"overflow","hidden")):(this.$renderer.removeStyle(e,"opacity"),this.$renderer.removeStyle(e,"pointer-events"),this.$renderer.removeStyle(e,"overflow"))}updateListeners(){this.isMobile=window.innerWidth<768;let e=document.querySelector(".sidebar");e.removeEventListener("mouseenter",this.sidebarMouseEnterListener),e.removeEventListener("mouseleave",this.sidebarMouseLeaveListener),(this.isMobile||!this.isMobile&&this.$settings.menuMode!=="freeze")&&(e.addEventListener("mouseenter",this.sidebarMouseEnterListener,{passive:!1}),e.addEventListener("mouseleave",this.sidebarMouseLeaveListener,{passive:!1}))}static \u0275fac=function(o){return new(o||s)};static \u0275cmp=E({type:s,selectors:[["app-sidebar"]],inputs:{initialIsExpanded:[1,"initialIsExpanded"]},decls:68,vars:73,consts:[["tabindex","0","role","button",1,"m-header","text-end",3,"click","keydown"],[1,"me-2","d-block","d-lg-none",2,"font-size","0.9rem","color","#dddddd"],[3,"routerLink"],["ngSrc","assets/homebridge-logo.svg","alt","HB Logo","height","35","width","35",2,"height","35px","width","35px"],[1,"hb-logo-text-mobile"],[1,"hamburger-icon"],["role","navigation","id","sidebar",1,"sidebar"],["tabindex","0","role","button",1,"header",3,"click","keydown"],[1,"hb-logo-text"],[1,"link-wrapper"],[1,"link"],["role","menuitem","tabindex","0",1,"link-row",3,"keydown","routerLink","routerLinkActive","routerLinkActiveOptions"],[1,"icon"],[1,"fa","fa-house"],[1,"title"],["role","menuitem","tabindex","0",1,"link-row",3,"keydown","routerLink","routerLinkActive"],[1,"fa","fa-plug"],[1,"fa","fa-lightbulb"],[1,"fa","fa-wave-square"],[1,"fa","fa-question-circle-o"],["role","menuitem","tabindex","0",1,"link-row",3,"click","keydown"],[1,"fas","fa-bolt","fa-beat","yellow-text",2,"--fa-beat-scale","1.5"],[1,"fa","fa-terminal"],[1,"fa","fa-code"],[1,"fa","fa-cog"],[1,"fa","fa-power-off"],[1,"fa","fa-refresh"],[1,"fa","fa-right-from-bracket"]],template:function(o,t){o&1&&(i(0,"div",0),d(1,"translate"),u("click",function(){return t.toggleSidebar()})("keydown",function(h){return t.handleKeydown(h)}),p(2,"span",1),i(3,"a",2),d(4,"translate"),p(5,"img",3),i(6,"div",4),_(7,"Homebridge"),a()(),i(8,"div",5),p(9,"span")(10,"span")(11,"span")(12,"span"),a()(),i(13,"div",6)(14,"div",7),u("click",function(){return t.toggleSidebar()})("keydown",function(h){return t.handleKeydown(h)}),i(15,"a",2),d(16,"translate"),p(17,"img",3),i(18,"div",8),_(19,"Homebridge"),a()()(),i(20,"div",9)(21,"div",10)(22,"div",11),d(23,"translate"),u("keydown",function(h){return t.handleKeydown(h)}),i(24,"div",12),p(25,"i",13),a(),i(26,"div",14),_(27),d(28,"translate"),a()()(),y(29,ge,9,8,"div",10),i(30,"div",10)(31,"div",15),d(32,"translate"),u("keydown",function(h){return t.handleKeydown(h)}),i(33,"div",12),p(34,"i",16),a(),i(35,"div",14),_(36),d(37,"translate"),a()()(),i(38,"div",10)(39,"div",15),d(40,"translate"),u("keydown",function(h){return t.handleKeydown(h)}),i(41,"div",12),p(42,"i",17),a(),i(43,"div",14),_(44),d(45,"translate"),a()()(),i(46,"div",10)(47,"div",15),d(48,"translate"),u("keydown",function(h){return t.handleKeydown(h)}),i(49,"div",12),p(50,"i",18),a(),i(51,"div",14),_(52),d(53,"translate"),a()()(),y(54,he,8,9,"div",10),y(55,ve,8,9,"div",10),y(56,fe,8,9,"div",10),i(57,"div",10)(58,"div",15),d(59,"translate"),u("keydown",function(h){return t.handleKeydown(h)}),i(60,"div",12),p(61,"i",19),a(),i(62,"div",14),_(63),d(64,"translate"),a()()(),y(65,be,8,9,"div",10),y(66,xe,8,6,"div",10),y(67,Ce,8,6,"div",10),a()()),o&2&&(m("aria-expanded",t.isExpanded()?"true":"false")("aria-controls","sidebar")("aria-label",l(1,39,"menu.sidebar.aria_menu")),n(3),g("routerLink",f(65,z)),m("aria-label",l(4,41,"menu.label_status")),n(5),P("hamburger-icon-cross",t.isExpanded()),n(5),P("expanded",t.isExpanded()),n(2),g("routerLink",f(66,z)),m("aria-label",l(16,43,"menu.label_status")),n(7),g("routerLink",f(67,z))("routerLinkActive","active")("routerLinkActiveOptions",f(68,ae)),m("aria-label",l(23,45,"menu.label_status")),n(5),v(l(28,47,"menu.label_status")),n(2),S(t.rPiWasUnderVoltage()||t.rPiCurrentlyUnderVoltage()?29:-1),n(2),g("routerLink",f(69,se))("routerLinkActive","active"),m("aria-label",l(32,49,"menu.label_plugins")),n(5),v(l(37,51,"menu.label_plugins")),n(3),g("routerLink",f(70,de))("routerLinkActive","active"),m("aria-label",l(40,53,"menu.label_accessories")),n(5),v(l(45,55,"menu.label_accessories")),n(3),g("routerLink",f(71,le))("routerLinkActive","active"),m("aria-label",l(48,57,"menu.linux.label_logs")),n(5),v(l(53,59,"menu.linux.label_logs")),n(2),S(t.enableTerminalAccess&&t.isAdmin?54:-1),n(),S(t.isAdmin?55:-1),n(),S(t.isAdmin?56:-1),n(2),g("routerLink",f(72,pe))("routerLinkActive","active"),m("aria-label",l(59,61,"support.title")),n(5),v(l(64,63,"support.title")),n(2),S(t.isAdmin?65:-1),n(),S(t.isPwa?66:-1),n(),S(t.formAuth()?67:-1))},dependencies:[H,N,j,X],styles:[".m-header[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100%;height:65px;z-index:510;display:flex;align-items:center;padding-left:3px;padding-right:3px}.m-header[_ngcontent-%COMP%]:hover{cursor:pointer}@media(min-width:768px){.m-header[_ngcontent-%COMP%]{display:none}}.sidebar[_ngcontent-%COMP%]{position:fixed;left:0;top:0;height:100vh;transition:.3s;width:60px;z-index:500}.sidebar[_ngcontent-%COMP%] .header[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center;padding:15px 10px 15px 11px;font-size:.85rem}.sidebar[_ngcontent-%COMP%] .header[_ngcontent-%COMP%]:hover{cursor:pointer}.sidebar[_ngcontent-%COMP%] .link-wrapper[_ngcontent-%COMP%]{overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - 80px)!important;scrollbar-width:thin}@media(max-width:767px){.sidebar[_ngcontent-%COMP%] .link-wrapper[_ngcontent-%COMP%]{padding-bottom:60px}}.sidebar[_ngcontent-%COMP%] .link-wrapper[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] .link-row[_ngcontent-%COMP%]{display:flex;align-items:center;padding:15px 10px;cursor:pointer;transition:.2s;font-size:17px}.sidebar[_ngcontent-%COMP%] .link-wrapper[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] .link-row[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%]{flex:0 0 38px;display:flex;align-items:center;justify-content:center}.sidebar[_ngcontent-%COMP%] .link-wrapper[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] .link-row[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{flex:1;transition:.3s;max-width:0;overflow:hidden;white-space:nowrap}@media(max-width:767px){.sidebar[_ngcontent-%COMP%]{width:0}.sidebar[_ngcontent-%COMP%] .link-wrapper[_ngcontent-%COMP%]{display:none}}.sidebar.expanded[_ngcontent-%COMP%]{width:210px}@media(max-width:767px){.sidebar.expanded[_ngcontent-%COMP%]{width:210px}.sidebar.expanded[_ngcontent-%COMP%] .link-wrapper[_ngcontent-%COMP%]{display:block}}.sidebar.expanded[_ngcontent-%COMP%] .link-wrapper[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] .link-row[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{max-width:150px;padding-left:10px}.hamburger-icon[_ngcontent-%COMP%]{margin:-7px 0 0 25px}@media(min-width:768px){.hb-logo-text[_ngcontent-%COMP%]{color:#fff;position:absolute;top:17px;font-size:22px;padding-left:3px}.sidebar.expanded[_ngcontent-%COMP%] .hb-logo-text[_ngcontent-%COMP%]{opacity:1;left:55px;transition:.3s}.sidebar[_ngcontent-%COMP%]:not(.expanded) .hb-logo-text[_ngcontent-%COMP%]{opacity:0;left:40px;transition:.3s}.hb-logo-text-mobile[_ngcontent-%COMP%], .hamburger-icon[_ngcontent-%COMP%]{display:none!important}}@media(max-width:767px){.hb-logo-text[_ngcontent-%COMP%]{display:none!important}.hb-logo-text-mobile[_ngcontent-%COMP%]{color:#fff;position:absolute;top:17px;font-size:22px;padding-left:3px;opacity:1;left:55px}.hamburger-icon[_ngcontent-%COMP%]{position:absolute;right:10px;top:28px;width:30px;transform:rotate(0);transition:.5s ease-in-out;cursor:pointer}.hamburger-icon[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;position:absolute;height:2px;width:100%;background-color:#fff;border-radius:9px;opacity:1;left:0;transform:rotate(0);transition:.25s ease-in-out}.hamburger-icon[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(1){top:0}.hamburger-icon[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(2), .hamburger-icon[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(3){top:10px}.hamburger-icon[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(4){top:20px}.hamburger-icon-cross[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(1){top:10px;width:0;left:50%}.hamburger-icon-cross[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(2){transform:rotate(45deg)}.hamburger-icon-cross[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(3){transform:rotate(-45deg)}.hamburger-icon-cross[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(4){top:10px;width:0;left:50%}}"]})}return s})();var Ge=(()=>{class s{$auth=c(I);$modal=c(B);$router=c($);$settings=c(A);$translate=c(V);$ws=c(J);io;sidebarExpanded=w(!1,{});ngOnInit(){this.io=this.$ws.connectToNamespace("app"),this.io.socket.on("reconnect",()=>{this.$auth.checkToken()}),this.compareServerUiVersion()}compareServerUiVersion(){return L(this,null,function*(){if(this.$settings.settingsLoaded||(yield U(this.$settings.onSettingsLoaded)),!this.$router.url.endsWith("/restart")&&(0,ie.lt)(this.$settings.uiVersion,T.serverTarget)){console.log(`Server restart required. UI Version: ${T.serverTarget} - Server Version: ${this.$settings.uiVersion} `);let e=this.$modal.open(Q,{size:"lg",backdrop:"static"});e.componentInstance.title=this.$translate.instant("platform.version.service_restart_required"),e.componentInstance.message=this.$translate.instant("platform.version.restart_required",{serverVersion:this.$settings.uiVersion,uiVersion:T.serverTarget}),e.componentInstance.confirmButtonLabel=this.$translate.instant("menu.tooltip_restart"),e.componentInstance.faIconClass="fas fa-power-off orange-text",e.result.then(()=>this.$router.navigate(["/restart"])).catch(()=>{})}})}static \u0275fac=function(o){return new(o||s)};static \u0275cmp=E({type:s,selectors:[["app-layout"]],decls:3,vars:3,consts:[[3,"initialIsExpanded"],[1,"content","px-3","p-md-4"]],template:function(o,t){o&1&&(p(0,"app-sidebar",0),i(1,"div",1),p(2,"router-outlet"),a()),o&2&&(g("initialIsExpanded",t.sidebarExpanded()),n(),P("sidebarExpanded",t.sidebarExpanded()))},dependencies:[te,W],styles:[".content[_ngcontent-%COMP%]{margin-left:60px;transition:.3s;height:100%}@media(max-width:767px){.content[_ngcontent-%COMP%]{margin-left:0;padding-top:85px!important}}@media(min-width:768px){.content[_ngcontent-%COMP%]{height:100%}}a[_ngcontent-%COMP%]:hover{text-decoration:none!important}"]})}return s})();export{Ge as LayoutComponent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./chunk-RAG53DHZ.js";import"./chunk-B4AJQJMI.js";export default a();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./chunk-DEM3FH7C.js";import"./chunk-B4AJQJMI.js";export default a();
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import{a as ni}from"./chunk-5K3S6ZXB.js";import{a as nt,b as Ee,c as Ie,d as Te}from"./chunk-WX345PMX.js";import{a as pe,b as ii,c as un,d as ut}from"./chunk-GJ42U6LP.js";import{a as Kt}from"./chunk-H2D3SCVU.js";import{a as Zt}from"./chunk-LVBVUIJY.js";import{a as qt,b as Jt,c as Gt}from"./chunk-BMOLDRJ3.js";import{a as Wt}from"./chunk-QGLAR7UC.js";import{a as He}from"./chunk-H7F7H5MW.js";import{a as Yt}from"./chunk-XLJ6VVK3.js";import{a as sn}from"./chunk-KPSGNAPN.js";import{a as dn}from"./chunk-YM6RL7NW.js";import{a as cn}from"./chunk-FJB6YCFU.js";import{a as mn}from"./chunk-SVEGWVQJ.js";import{a as pn}from"./chunk-JUCPYKUR.js";import{a as gn}from"./chunk-2Y6QBPFY.js";import{a as Ce}from"./chunk-6ZOSTYPR.js";import{a as Zi}from"./chunk-DEM3FH7C.js";import{a as en}from"./chunk-LRB7FQNQ.js";import{a as tn}from"./chunk-XQXAVYM6.js";import{a as nn}from"./chunk-S4O5HRCM.js";import{a as on}from"./chunk-RAG53DHZ.js";import{a as an}from"./chunk-3YTNATAH.js";import{a as rn}from"./chunk-JNSPIONO.js";import{a as ln}from"./chunk-LOEOVQRM.js";import{a as Wi}from"./chunk-P3DOEH3R.js";import{a as qi}from"./chunk-HKOUIAFO.js";import{a as Ji}from"./chunk-LHXNE56J.js";import{a as Gi}from"./chunk-QK4CWVVD.js";import{a as Ki}from"./chunk-UDXPJS32.js";import{a as Qi}from"./chunk-WOXYSKNU.js";import{a as Xi}from"./chunk-YSJHLHJ6.js";import{a as Yi}from"./chunk-FKJY3Z2V.js";import{a as gt,b as ot,c as ei,d as ti}from"./chunk-MRPQNEON.js";import{a as pt,c as Qt,d as Xt}from"./chunk-ZCGZM7LU.js";import{a as oi}from"./chunk-IZHFI46L.js";import{a as Xe,b as Ye,c as Ze,d as et,e as tt,f as it,g as Ve,m as W,n as re,o as Rt,p as Ht,q as jt,r as Ot,s as zt,t as ve}from"./chunk-MS4K4KAK.js";import{e as ce}from"./chunk-TRDYZJYI.js";import{C as be,D as Ut,b as Me,c as Pt,e as fe,j as Nt,l as he,n as Dt,q as At,t as Ge,u as Ke,w as Qe,x as Ft,y as Lt}from"./chunk-UO7KCTHV.js";import{b as H}from"./chunk-T472BWYK.js";import{E as L,F as z,H as U,J as _e,K as D,q as Tt,w as $t}from"./chunk-2TQEV57U.js";import{Ab as _,Ac as ae,Bc as ke,Cb as Z,Cc as It,Db as ee,Eb as te,Ec as m,F as Be,Fb as x,Fc as g,Gb as l,Gc as O,Hb as r,Ib as v,Jb as I,Kb as T,Lb as J,Mb as Mt,Nb as Vt,Nc as qe,O as ct,Oc as ue,Pc as Je,R as Le,Rb as E,Sb as oe,Ua as se,Va as St,X as we,Xb as V,Ya as Bt,Yb as ie,Za as o,Zb as p,aa as C,d as de,ec as je,fc as Oe,ga as y,gc as ze,ha as S,hc as Ue,ic as Re,jc as q,kc as d,lc as w,mc as B,n as dt,nb as F,nc as ge,oc as We,pb as wt,qb as kt,rc as K,sa as b,sc as Q,tb as mt,tc as X,va as yt,vc as Et,xc as ne,yb as $,yc as le,zb as u,zc as Se}from"./chunk-MKV5RAJQ.js";import{a as Ui}from"./chunk-XPSIQPO4.js";import{a as Ri}from"./chunk-YLRX4V4V.js";import{a as Hi}from"./chunk-Q4PUZM2R.js";import{a as ji}from"./chunk-FRMRAPF2.js";import{a as Oi}from"./chunk-MPQEE6FH.js";import{a as zi}from"./chunk-WOMMYJV2.js";import{a as N,b as A,c as xt,g as Y,h as M}from"./chunk-B4AJQJMI.js";var Ne=Y(nt(),1);var ai=(()=>{class n{jsonSchemaForm=C(ot,{host:!0,self:!0,optional:!0});jsfPatch=ue(!1,{});constructor(){let e=this.jsonSchemaForm,i=e.jsf.buildLayout.bind(e.jsf);e.jsf.buildLayout=t=>{if(i(t),e.jsf.formValues&&this.jsfPatch())return this.fixNestedArrayLayout(e.jsf.layout,e.jsf.formValues)}}fixNestedArrayLayout(e,i){return this.fixArray(e,i,""),e}fixArray(e,i,t){if(Array.isArray(e)){let a=e.filter(f=>f.name!=="_bridge"),c=a.filter(f=>f.items&&Array.isArray(f.items)).flatMap(f=>f.items).filter(f=>f.dataType==="array"||f.arrayItem);a.concat(c).filter(f=>f.dataType==="array"||f.arrayItem).forEach(f=>{this.fixNestedArray(f,i,t)})}else this.fixNestedArray(e,i,t)}fixNestedArray(e,i,t){if(e.items&&Array.isArray(e.items)){let a=e.items.find(c=>c.type==="$ref");if(a){let c=e.items.filter(k=>k.type==="section"||k.type==="div"),h=c.length>0?c.reduce((k,P)=>k.id>P.id?k:P):this.getItemTemplateFromRef(a),f=this.getDataFromPointer(i,a.dataPointer.replace(t,""));if(f===null)return;if(Array.isArray(f)){for(;e.items.length-1<f.length;){let k=pt(h);k._id=Xt("new_"),e.items.unshift(k)}f.forEach((k,P)=>{this.fixArray(e.items[P],k,a.dataPointer)})}else this.fixArray(e.items,i,a.dataPointer)}else this.fixArray(e.items,i,t);e.items.filter(c=>c.items&&Array.isArray(c.items)).forEach(c=>{this.fixArray(c.items,i,t)})}}getDataFromPointer(e,i){let t=e;return i.substring(1).split(/\//).filter(a=>a!=="-").forEach(a=>{try{t=t[a]}catch{t=null}}),t}getItemTemplateFromRef(e){let i={type:"section",items:[]},t=pt(e);return Qt(t,i),t}static \u0275fac=function(i){return new(i||n)};static \u0275dir=wt({type:n,selectors:[["","jsfPatch",""]],inputs:{jsfPatch:[1,"jsfPatch"]}})}return n})();function _n(n,s){if(n&1){let e=E();l(0,"json-schema-form",1),V("onChanges",function(t){y(e);let a=p();return S(a.onChanges(t))})("isValid",function(t){y(e);let a=p();return S(a.validChange(t))}),r()}if(n&2){let e=p();x("jsfPatch",e.configSchema().fixArrays)("options",e.jsonFormOptions)("schema",e.configSchema().schema)("UISchema",e.configSchema().uiSchema)("layout",e.configSchema().layout)("form",e.configSchema().form)("data",e.currentData)("language",e.language)}}var at=(()=>{class n{$settings=C(H);availableLanguages=["de","en","es","fr","it","pt","zh"];configSchema=ue.required({});data=ue.required({});dataChange=qe();dataChanged=qe();isValid=qe();currentData;language="en";jsonFormOptions={addSubmit:!1,loadExternalAssets:!1,returnEmptyFields:!1,setSchemaDefaults:!0,autocomplete:!1};constructor(){yt(()=>{this.currentData=this.data()})}ngOnInit(){let e=this.$settings.env.lang.split("-")[0];this.availableLanguages.includes(e)&&(this.language=e)}onChanges(e){this.dataChange.emit(e),this.dataChanged.emit(e)}validChange(e){this.isValid.emit(e)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["app-schema-form"]],inputs:{configSchema:[1,"configSchema"],data:[1,"data"]},outputs:{dataChange:"dataChange",dataChanged:"dataChanged",isValid:"isValid"},decls:2,vars:1,consts:[["framework","bootstrap-5",1,"ng-bs5-validate",3,"jsfPatch","options","schema","UISchema","layout","form","data","language"],["framework","bootstrap-5",1,"ng-bs5-validate",3,"onChanges","isValid","jsfPatch","options","schema","UISchema","layout","form","data","language"]],template:function(i,t){i&1&&(Mt(0),u(1,_n,1,8,"json-schema-form",0),Vt()),i&2&&(o(),_(t.configSchema().schema?1:-1))},dependencies:[ei,ot,ai],encapsulation:2})}return n})();var $e=(()=>{class n{$api=C(D);$modal=C(re);$toastr=C(U);$translate=C(L);openCorrectRestartModalForPlugin(e){return M(this,null,function*(){let i=yield this.getChildBridgesForPlugin(e);if(i.length){let t=this.$modal.open(ii,{size:"lg",backdrop:"static"});t.componentInstance.bridges=i.map(a=>({name:a.name,username:a.username,matterSerialNumber:a.matterSerialNumber}))}else this.$modal.open(pe,{size:"lg",backdrop:"static"})})}getChildBridgesForPlugin(e){return M(this,null,function*(){try{return(yield this.$api.get("/status/homebridge/child-bridges")).filter(t=>e===t.plugin)}catch(i){return console.error(i),this.$toastr.error(i.message,this.$translate.instant("toast.title_error")),[]}})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=we({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var fn=xt({"../../../../i18n/bg.json":()=>Ui(),"../../../../i18n/ca.json":()=>Ri(),"../../../../i18n/cs.json":()=>Hi(),"../../../../i18n/de.json":()=>ji(),"../../../../i18n/en.json":()=>Oi(),"../../../../i18n/es.json":()=>zi(),"../../../../i18n/fi.json":()=>Wi(),"../../../../i18n/fr.json":()=>qi(),"../../../../i18n/he.json":()=>Ji(),"../../../../i18n/hu.json":()=>Gi(),"../../../../i18n/id.json":()=>Ki(),"../../../../i18n/it.json":()=>Qi(),"../../../../i18n/ja.json":()=>Xi(),"../../../../i18n/ko.json":()=>Yi(),"../../../../i18n/mk.json":()=>Zi(),"../../../../i18n/nl.json":()=>en(),"../../../../i18n/no.json":()=>tn(),"../../../../i18n/pl.json":()=>nn(),"../../../../i18n/pt-BR.json":()=>on(),"../../../../i18n/pt.json":()=>an(),"../../../../i18n/ru.json":()=>rn(),"../../../../i18n/sl.json":()=>ln(),"../../../../i18n/sv.json":()=>sn(),"../../../../i18n/th.json":()=>dn(),"../../../../i18n/tr.json":()=>cn(),"../../../../i18n/uk.json":()=>mn(),"../../../../i18n/zh-CN.json":()=>pn(),"../../../../i18n/zh-TW.json":()=>gn()});var hn=["custompluginui"];function bn(n,s){n&1&&(l(0,"div",6),v(1,"i",18),r())}function Cn(n,s){if(n&1){let e=E();l(0,"div",8)(1,"app-schema-form",19),V("dataChanged",function(t){y(e);let a=p();return S(a.schemaFormUpdatedSubject.next(t))})("isValid",function(t){y(e);let a=p();return S(a.onIsValid(t))}),r()()}if(n&2){let e=p();o(),x("configSchema",e.schemaSignal())("data",e.pluginConfigSignal()[0])}}function vn(n,s){if(n&1){let e=E();l(0,"button",24),V("click",function(){y(e);let t=p(2);return S(t.formActionSubject.next("cancel"))}),d(1),r()}if(n&2){let e=p(2);o(),B(" ",e.formCancelButtonLabel()," ")}}function xn(n,s){if(n&1){let e=E();l(0,"button",25),V("click",function(){y(e);let t=p(2);return S(t.formActionSubject.next("submit"))}),d(1),r()}if(n&2){let e=p(2);x("disabled",!e.formValid()),o(),B(" ",e.formSubmitButtonLabel()," ")}}function yn(n,s){if(n&1){let e=E();l(0,"div",8)(1,"app-schema-form",20),V("dataChange",function(t){y(e);let a=p();return S(a.formData.set(t))})("dataChanged",function(t){y(e);let a=p();return S(a.formUpdatedSubject.next(t))})("isValid",function(t){y(e);let a=p();return S(a.formValidEvent(t))}),r(),l(2,"div",21),u(3,vn,2,1,"button",22),u(4,xn,2,2,"button",23),r()()}if(n&2){let e=p();o(),x("configSchema",e.formSchema())("data",e.formData()),o(2),_(e.formCancelButtonLabel()?3:-1),o(),_(e.formSubmitButtonLabel()?4:-1)}}function Sn(n,s){n&1&&(l(0,"div",9),v(1,"i",18),r())}function Bn(n,s){if(n&1&&(v(0,"i",26),m(1,"translate")),n&2){let e=p();q(e.formIsValid()?"fa-circle-check green-text":e.strictValidation()?"fa-circle-exclamation red-text":"fa-circle-exclamation orange-text"),x("ngbTooltip",g(1,4,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function wn(n,s){n&1&&(d(0),m(1,"translate")),n&2&&B(" ",g(1,1,"form.button_save")," ")}function kn(n,s){n&1&&v(0,"i",17)}var ri=(()=>{class n{$activeModal=C(W);$api=C(D);$cb=C($e);$plugin=C(xe);$settings=C(H);$toastr=C(U);$translate=C(L);$ws=C(Ce);customPluginUiElementTarget=Je("custompluginui",{});_plugin=b(null,{});_schema=b(null,{});_pluginConfig=b([],{});set plugin(e){this._plugin.set(e)}get plugin(){return this._plugin()}set schema(e){this._schema.set(e)}get schema(){return this._schema()}set pluginConfig(e){this._pluginConfig.set(e)}get pluginConfig(){return this._pluginConfig()}pluginSignal=this._plugin.asReadonly();schemaSignal=this._schema.asReadonly();pluginConfigSignal=this._pluginConfig.asReadonly();pluginAlias=b("",{});pluginType=b("platform",{});loading=b(!0,{});saveInProgress=b(!1,{});pluginSpinner=b(!1,{});saveButtonDisabled=b(!1,{});uiLoaded=b(!1,{});showSchemaForm=b(!1,{});formId=b(void 0,{});formSchema=b(void 0,{});formData=b(void 0,{});formSubmitButtonLabel=b(void 0,{});formCancelButtonLabel=b(void 0,{});formValid=b(!0,{});isFirstSave=b(!1,{});formIsValid=b(!0,{});strictValidation=b(!1,{});io;basePath="";iframe;schemaFormRecentlyUpdated=!1;schemaFormRecentlyRefreshed=!1;destroy$=new de;schemaFormUpdatedSubject=new de;schemaFormRefreshSubject=new de;formUpdatedSubject=new de;formActionSubject=new de;ngOnInit(){let e=this._schema(),i=this._plugin();if(!e||!i){console.error("CustomPluginsComponent: schema or plugin not provided"),this.$activeModal.dismiss("Missing required data");return}this.pluginAlias.set(e.pluginAlias),this.pluginType.set(e.pluginType),this.strictValidation.set(e.strictValidation),this._pluginConfig().length===0&&this.isFirstSave.set(!0),this.io=this.$ws.connectToNamespace("plugins/settings-ui"),this.basePath=`/plugins/settings-ui/${encodeURIComponent(i.name)}`,this.initialize(),this.schemaFormRefreshSubject.pipe(Be(250),Le(this.destroy$)).subscribe(this.schemaFormRefresh.bind(this)),this.schemaFormUpdatedSubject.pipe(Be(250),ct(1),Le(this.destroy$)).subscribe(t=>{this.schemaFormUpdated(t)}),this.formUpdatedSubject.pipe(Be(100),ct(1),Le(this.destroy$)).subscribe(this.formUpdated.bind(this)),this.formActionSubject.pipe(Le(this.destroy$)).subscribe(this.formActionEvent.bind(this)),window.addEventListener("message",this.handleMessage,!1)}ngOnDestroy(){window.removeEventListener("message",this.handleMessage),this.destroy$.next(),this.destroy$.complete(),this.io&&this.io.end(),this.schemaFormRefreshSubject.complete(),this.schemaFormUpdatedSubject.complete(),this.formUpdatedSubject.complete(),this.formActionSubject.complete()}onIsValid(e){this.formIsValid.set(e)}formValidEvent(e){this.formValid.set(e)}savePluginConfig(e=!1){return M(this,null,function*(){let i=this._plugin();if(i){this.saveInProgress.set(!0);try{let t=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(i.name)}`,this._pluginConfig());if(this.saveInProgress.set(!1),e){if(this.isFirstSave()&&this.$settings.env.recommendChildBridges&&t[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(i,!0);return}this.$activeModal.close(),yield this.$cb.openCorrectRestartModalForPlugin(i.name)}}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1)}}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}initialize(){return M(this,null,function*(){let e=this._plugin();e&&(this.io.socket.emit("start",e.name),this.io.socket.on("response",i=>{i.action="response",this.iframe.contentWindow.postMessage(i,_e.api.origin)}),this.io.socket.on("stream",i=>{i.action="stream",this.iframe.contentWindow.postMessage(i,_e.api.origin)}),this.io.socket.on("ready",()=>{this.loading.set(!1),this.loadUi()}))})}loadUi(){let e=this._plugin();e&&(this.iframe=this.customPluginUiElementTarget()?.nativeElement,this.iframe&&(this.iframe.src=`${_e.api.base+this.basePath}/index.html?origin=${encodeURIComponent(location.origin)}&v=${encodeURIComponent(e.installedVersion)}`))}handleMessage=e=>{if(e.origin===_e.api.origin||e.origin===window.origin)switch(e.data.action){case"loaded":this.injectDefaultStyles(e),this.confirmReady(e);break;case"request":{this.handleRequest(e);break}case"scrollHeight":this.setiFrameHeight(e),this.uiLoaded.set(!0);break;case"config.get":{this.requestResponse(e,this.getConfigBlocks());break}case"config.save":{this.requestResponse(e,this.savePluginConfig());break}case"config.update":{this.handleUpdateConfig(e,e.data.pluginConfig);break}case"config.schema":{this.requestResponse(e,this._schema());break}case"cachedAccessories.get":{this.handleGetCachedAccessories(e);break}case"cachedMatterAccessories.get":{this.handleGetCachedMatterAccessories(e);break}case"schema.show":{this.formEnd(),this.showSchemaForm.set(!0);break}case"schema.hide":{this.showSchemaForm.set(!1);break}case"form.create":{this.showSchemaForm.set(!1),this.formCreate(e.data.formId,e.data.schema,e.data.data,e.data.submitButton,e.data.cancelButton);break}case"form.end":{this.formEnd();break}case"user.lightingMode":{this.requestResponse(e,this.$settings.actualLightingMode);break}case"i18n.lang":{this.requestResponse(e,this.$translate.getCurrentLang());break}case"i18n.translations":{this.requestResponse(e,fn(`../../../../i18n/${this.$translate.getCurrentLang()}.json`));break}case"close":{this.$activeModal.close();break}case"toast.success":this.$toastr.success(e.data.message,e.data.title);break;case"toast.error":this.$toastr.error(e.data.message,e.data.title);break;case"toast.warning":this.$toastr.warning(e.data.message,e.data.title);break;case"toast.info":this.$toastr.info(e.data.message,e.data.title);break;case"spinner.show":this.pluginSpinner.set(!0);break;case"spinner.hide":this.pluginSpinner.set(!1);break;case"button.save.disabled":this.saveButtonDisabled.set(!0);break;case"button.save.enabled":this.saveButtonDisabled.set(!1);break}};confirmReady(e){e.source.postMessage({action:"ready"},e.origin)}setiFrameHeight(e){this.iframe.style.height=`${e.data.scrollHeight+10}px`}handleRequest(e){this.io.socket.emit("request",e.data)}handleUpdateConfig(e,i){if(this.showSchemaForm()&&this.schemaFormRefreshSubject.next(void 0),!Array.isArray(i))return this.$toastr.error(this.$translate.instant("plugins.config.must_be_array"),this.$translate.instant("toast.title_error")),this.requestResponse(e,{message:this.$translate.instant("plugins.config.must_be_array")},!1);for(let t of i)if(typeof t!="object"||Array.isArray(t))return this.$toastr.error(this.$translate.instant("plugins.config.must_be_array_objects"),this.$translate.instant("toast.title_error")),this.requestResponse(e,{message:this.$translate.instant("plugins.config.must_be_array_objects")},!1);return this.updateConfigBlocks(i),this.requestResponse(e,this.getConfigBlocks())}requestResponse(e,i,t=!0){e.source.postMessage({action:"response",requestId:e.data.requestId,success:t,data:i},e.origin)}injectDefaultStyles(e){return M(this,null,function*(){let i=Array.from(window.document.body.classList).find(k=>k.startsWith("config-ui-x-")),t=window.document.body.classList.contains("dark-mode"),a=e.source;a.postMessage({action:"body-class",class:i},e.origin),a.postMessage({action:"body-class",class:"modal-content"},e.origin),t&&a.postMessage({action:"body-class",class:"dark-mode"},e.origin);let c=Array.from(document.querySelectorAll("link"));for(let k of c)if(k.getAttribute("rel")==="stylesheet"){let P=k.getAttribute("href"),me=document.baseURI+(P.startsWith("/")?P.substring(1):P);a.postMessage({action:"link-element",href:me,rel:"stylesheet"},e.origin)}let h=Array.from(document.querySelectorAll("style"));for(let k of h)a.postMessage({action:"inline-style",style:k.innerHTML},e.origin);let f=`
|
|
2
|
+
body {
|
|
3
|
+
height: unset !important;
|
|
4
|
+
background-color: ${t?"#242424":"#FFFFFF"} !important;
|
|
5
|
+
color: ${t?"#FFFFFF":"#000000"} !important;
|
|
6
|
+
}
|
|
7
|
+
`;a.postMessage({action:"inline-style",style:f},e.origin)})}getConfigBlocks(){return this._pluginConfig()}updateConfigBlocks(e){for(let i of e)i[this.pluginType()]=this.pluginAlias();this._pluginConfig.set(e)}schemaFormUpdated(e){if(!this.iframe||!this.iframe.contentWindow)return;if(this.schemaFormRecentlyRefreshed){this.schemaFormRecentlyRefreshed=!1;return}this.schemaFormRecentlyUpdated=!0;let i=this._pluginConfig();if(i.length>0){let t=[...i];t[0]=e,this._pluginConfig.set(t)}this.iframe.contentWindow.postMessage({action:"stream",event:"configChanged",data:this._pluginConfig()},_e.api.origin)}schemaFormRefresh(){if(this.schemaFormRecentlyUpdated){this.schemaFormRecentlyUpdated=!1;return}this.schemaFormRecentlyRefreshed=!0,this.showSchemaForm()&&(this.showSchemaForm.set(!1),queueMicrotask(()=>{this.showSchemaForm.set(!0)}))}formCreate(e,i,t,a,c){return M(this,null,function*(){yield this.formEnd(),this.formId.set(e),this.formSchema.set(i),this.formData.set(t),this.formSubmitButtonLabel.set(a),this.formCancelButtonLabel.set(c)})}formEnd(){return M(this,null,function*(){this.formId()&&(this.formId.set(void 0),this.formSchema.set(void 0),this.formData.set(void 0),this.formSubmitButtonLabel.set(void 0),this.formCancelButtonLabel.set(void 0),yield new Promise(e=>setTimeout(e)))})}formUpdated(e){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId(),data:{formEvent:"change",formData:e}},_e.api.origin)}formActionEvent(e){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId(),data:{formEvent:e,formData:this.formData()}},_e.api.origin)}handleGetCachedAccessories(e){return M(this,null,function*(){let i=this._plugin();if(i)try{let t=yield this.$api.get("/server/cached-accessories");return this.requestResponse(e,t.filter(a=>a.plugin===i.name))}catch(t){console.error("Failed to get cached accessories:",t),this.$toastr.error(this.$translate.instant("toast.title_error"))}})}handleGetCachedMatterAccessories(e){return M(this,null,function*(){let i=this._plugin();if(i)try{let t=yield this.$api.get("/server/matter-accessories");return this.requestResponse(e,t.filter(a=>a.plugin===i.name))}catch(t){console.error("Failed to get cached Matter accessories:",t),this.$toastr.error(this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],viewQuery:function(i,t){i&1&&je(t.customPluginUiElementTarget,hn,5),i&2&&Oe()},decls:24,vars:17,consts:[["custompluginui",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0",2,"min-height","110px"],[1,"text-center","primary-text"],["width","100%","height","1px;","sandbox","allow-same-origin allow-scripts allow-popups allow-popups-to-escape-sandbox allow-downloads allow-forms",2,"border","0"],[1,"card","card-body"],[1,"loading-overlay","text-center","primary-text","d-flex","align-items-center","justify-content-center"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"class","ngbTooltip","openDelay"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[3,"dataChanged","isValid","configSchema","data"],[3,"dataChange","dataChanged","isValid","configSchema","data"],[1,"text-end","custom-form-action-buttons"],[1,"btn","btn-elegant"],[1,"btn","btn-primary",3,"disabled"],[1,"btn","btn-elegant",3,"click"],[1,"btn","btn-primary",3,"click","disabled"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"ngbTooltip","openDelay"]],template:function(i,t){if(i&1){let a=E();l(0,"div",1)(1,"div",2)(2,"h5",3),d(3),r(),l(4,"button",4),m(5,"translate"),V("click",function(){return y(a),S(t.dismissModal())}),r()(),l(6,"div",5),u(7,bn,2,0,"div",6),v(8,"iframe",7,0),u(10,Cn,2,2,"div",8),u(11,yn,5,4,"div",8),u(12,Sn,2,0,"div",9),r(),l(13,"div",10)(14,"div",11)(15,"button",12),V("click",function(){return y(a),S(t.dismissModal())}),d(16),m(17,"translate"),r()(),v(18,"div",13),l(19,"div",14),u(20,Bn,2,6,"i",15),l(21,"button",16),V("click",function(){return y(a),S(t.savePluginConfig(!0))}),u(22,wn,2,3),u(23,kn,1,0,"i",17),r()()()()}i&2&&(o(3),w(t.pluginSignal().displayName||t.pluginSignal().name),o(),x("disabled",t.saveInProgress()),$("aria-label",g(5,13,"form.button_close")),o(3),_(t.loading()?7:-1),o(3),_(t.uiLoaded()&&t.pluginConfigSignal().length&&t.schemaSignal().singular&&t.showSchemaForm()?10:-1),o(),_(t.formId()?11:-1),o(),_(t.pluginSpinner()?12:-1),o(3),x("disabled",t.saveInProgress()),o(),B(" ",g(17,15,"form.button_close")," "),o(4),_(t.saveButtonDisabled()?-1:20),o(),x("disabled",t.saveInProgress()||t.saveButtonDisabled()),o(),_(t.saveInProgress()?-1:22),o(),_(t.saveInProgress()?23:-1))},dependencies:[at,ti,ve,z],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}.loading-overlay[_ngcontent-%COMP%]{position:absolute;inset:16px;background-color:#ffffffb3} body.dark-mode .loading-overlay{background-color:#242424b3}.custom-form-action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child{margin-right:2px}"]})}return n})();var li=(()=>{class n{$api=C(D);$modal=C(re);plugins={};openSettings(e,i){return M(this,null,function*(){let t=yield this.loadPluginConfig(e.name),a=this.$modal.open(this.plugins[e.name],{size:"lg",backdrop:"static"});return a.componentInstance.plugin=e,a.componentInstance.schema=i,a.componentInstance.pluginConfig=t,a.result.catch(()=>{})})}openCustomSettingsUi(e,i){return M(this,null,function*(){let t=yield this.loadPluginConfig(e.name),a=this.$modal.open(ri,{size:"lg",backdrop:"static"});return a.componentInstance.plugin=e,a.componentInstance.schema=i,a.componentInstance.pluginConfig=t,a.result.catch(()=>{})})}loadPluginConfig(e){return M(this,null,function*(){return this.$api.get(`/config-editor/plugin/${encodeURIComponent(e)}`)})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=we({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var gi=Y(qt(),1),ui=Y(Jt(),1),_i=Y(Gt(),1),fi=Y(He(),1);var si=Y(He(),1);var Mn=["pluginlogoutput"];function Vn(n,s){if(n&1){let e=E();l(0,"button",15),m(1,"translate"),m(2,"translate"),V("click",function(){y(e);let t=p();return S(t.restartChildBridges())}),v(3,"i",16),r()}if(n&2){let e=p();x("ngbTooltip",g(1,4,e.childBridgesSignal().length>1?"child_bridge.restart_plural":"child_bridge.restart"))("openDelay",150)("disabled",e.midAction()),$("aria-label",g(2,6,e.childBridgesSignal().length>1?"child_bridge.restart_plural":"child_bridge.restart"))}}var di=(()=>{class n{$activeModal=C(W);$api=C(D);$log=C(Zt);$modal=C(re);$toastr=C(U);$translate=C(L);termTarget=Je("pluginlogoutput",{});_plugin=b(null,{});_childBridges=b([],{});set plugin(e){this._plugin.set(e)}get plugin(){return this._plugin()}set childBridges(e){this._childBridges.set(e)}get childBridges(){return this._childBridges()}pluginSignal=this._plugin.asReadonly();childBridgesSignal=this._childBridges.asReadonly();midAction=b(!1,{});resizeEvent=new de;pluginAlias;ngOnInit(){this.getPluginLog()}ngOnDestroy(){this.$log.destroyTerminal()}onWindowResize(){this.resizeEvent.next(void 0)}restartChildBridges(){return M(this,null,function*(){this.midAction.set(!0);try{for(let e of this._childBridges())yield this.$api.put(`/server/restart/${e.username}`,{});this.$toastr.success(this.$translate.instant("plugins.manage.child_bridge_restart"),this.$translate.instant("toast.title_success")),this.midAction.set(!1)}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.manage.child_bridge_restart_failed"),this.$translate.instant("toast.title_error")),this.midAction.set(!1)}})}downloadLogFile(){return M(this,null,function*(){this.midAction.set(!0);let e=this.$modal.open(Wt,{size:"lg",backdrop:"static"});e.componentInstance.title=this.$translate.instant("logs.title_download_log_file"),e.componentInstance.message=this.$translate.instant("logs.download_warning"),e.componentInstance.confirmButtonLabel=this.$translate.instant("form.button_download"),e.componentInstance.faIconClass="fas fa-user-secret primary-text";try{yield e.result;try{let i=yield this.$api.get("/platform-tools/hb-service/log/download?colour=yes",{observe:"response",responseType:"text"});if(!i.body)return;let t=i.body.split(`
|
|
8
|
+
`),a="",c=!1;t.forEach(f=>{if(f){if(c)if(f.match(/36m\[.*?\]/))c=!1;else{a+=`${f.replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"")}\r
|
|
9
|
+
`;return}f.includes(`36m[${this.pluginAlias}]`)&&(a+=`${f.replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"")}\r
|
|
10
|
+
`,c=!0)}});let h=this._plugin();h&&(0,si.saveAs)(new Blob([a],{type:"text/plain;charset=utf-8"}),`${h.name}.log.txt`),this.midAction.set(!1)}catch(i){let t;try{i instanceof $t&&i.error?.text&&(t=JSON.parse(yield i.error.text()).message)}catch(a){console.error(a)}this.$toastr.error(t||this.$translate.instant("logs.download.error"),this.$translate.instant("toast.title_error")),this.midAction.set(!1)}}catch{this.midAction.set(!1)}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}getPluginLog(){return M(this,null,function*(){let e=this._plugin();if(e)try{let i=yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`),t=this._plugin();if(!t)return;this.pluginAlias=t.name==="homebridge-config-ui-x"?"Homebridge UI":i[0]?.name||t.name,this.$log.startTerminal(this.termTarget(),{},this.resizeEvent,this.pluginAlias)}catch(i){console.error(i);let t=i instanceof Error?i.error?.message||i.message:this.$translate.instant("toast.title_error");this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],viewQuery:function(i,t){i&1&&je(t.termTarget,Mn,5),i&2&&Oe()},hostBindings:function(i,t){i&1&&V("resize",function(){return t.onWindowResize()},Bt)},decls:22,vars:21,consts:[["pluginlogoutput",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","d-flex","flex-row","flex-grow-1","w-100","p-0"],[1,"w-100","bg-black","plugin-log-output","terminal","align-self-end","w-100","h-100","mb-0","p-2"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end"],["container","modal","placement","top","triggers","hover",1,"btn","btn-primary",3,"click","ngbTooltip","openDelay","disabled"],[1,"fas","fa-download"],["container","modal","placement","top","triggers","hover",1,"btn","btn-danger","ms-3",3,"ngbTooltip","openDelay","disabled"],["container","modal","placement","top","triggers","hover",1,"btn","btn-danger","ms-3",3,"click","ngbTooltip","openDelay","disabled"],[1,"fas","fa-power-off"]],template:function(i,t){if(i&1){let a=E();l(0,"div",1)(1,"div",2)(2,"h5",3),d(3),r(),l(4,"button",4),m(5,"translate"),V("click",function(){return y(a),S(t.dismissModal())}),r()(),l(6,"div",5),v(7,"div",6,0),r(),l(9,"div",7)(10,"div",8)(11,"button",9),m(12,"translate"),V("click",function(){return y(a),S(t.dismissModal())}),d(13),m(14,"translate"),r()(),v(15,"div",10),l(16,"div",11)(17,"button",12),m(18,"translate"),m(19,"translate"),V("click",function(){return y(a),S(t.downloadLogFile())}),v(20,"i",13),r(),u(21,Vn,4,8,"button",14),r()()()}if(i&2){let a;o(3),w(((a=t.pluginSignal())==null?null:a.displayName)||((a=t.pluginSignal())==null?null:a.name)),o(),x("disabled",t.midAction()),$("aria-label",g(5,11,"form.button_close")),o(7),x("disabled",t.midAction()),$("aria-label",g(12,13,"form.button_close")),o(2),B(" ",g(14,15,"form.button_close")," "),o(4),x("ngbTooltip",g(18,17,"logs.title_download_log_file"))("openDelay",150)("disabled",t.midAction()),$("aria-label",g(19,19,"logs.title_download_log_file")),o(4),_(t.childBridgesSignal().length?21:-1)}},dependencies:[ve,z],encapsulation:2})}return n})();var ci=Y(nt(),1);var _t=()=>({app:"Homebridge v2"});function En(n,s){n&1&&(l(0,"div",5),v(1,"i",12),r())}function In(n,s){n&1&&(l(0,"p",9),d(1,"All your plugins are marked as compatible with Homebridge v2."),r())}function Tn(n,s){n&1&&(l(0,"p",9),d(1,"To ignore this warning and continue with the update, click continue below."),r())}function $n(n,s){if(n&1&&(l(0,"p",9),d(1," Some of your plugins are not explicitly marked as compatible with Homebridge v2. This does "),l(2,"span",17),d(3,"not"),r(),d(4," necessarily mean that they won't work. We just can't guarantee that they will. "),r(),l(5,"p",9),d(6," For more information about this update, please see the "),l(7,"a",18),d(8,"wiki page"),r(),d(9,". "),r(),u(10,Tn,2,0,"p",9)),n&2){let e=p(2);o(10),_(e.isUpdating?10:-1)}}function Pn(n,s){n&1&&(l(0,"div",19),d(1," Node.js Version"),v(2,"br"),l(3,"span",20),d(4),m(5,"translate"),r()(),l(6,"div",21),v(7,"i",22),r()),n&2&&(o(4),w(O(5,1,"status.readiness.node_yes",ne(4,_t))))}function Nn(n,s){n&1&&(l(0,"div",19),d(1," Node.js Version"),v(2,"br"),l(3,"span",20),d(4),m(5,"translate"),r(),v(6,"br"),l(7,"a",23),d(8),m(9,"translate"),v(10,"i",24),r()(),l(11,"div",21),v(12,"i",25),r()),n&2&&(o(4),w(O(5,2,"status.readiness.node_no",ne(7,_t))),o(4),B(" ",g(9,5,"plugins.compat.node_link")," "))}function Dn(n,s){n&1&&v(0,"i",26)}function An(n,s){n&1&&v(0,"i",27)}function Fn(n,s){if(n&1&&(l(0,"li",16)(1,"div",19),d(2),r(),l(3,"div",21),u(4,Dn,1,0,"i",26),u(5,An,1,0,"i",27),r()()),n&2){let e=s.$implicit;o(2),w(e.displayName),o(2),_(e.hb2Ready==="supported"?4:-1),o(),_(e.hb2Ready==="unknown"?5:-1)}}function Ln(n,s){if(n&1&&(l(0,"div",13),v(1,"img",14),r(),u(2,In,2,0,"p",9),u(3,$n,11,1),l(4,"ul",15)(5,"li",16),u(6,Pn,8,5)(7,Nn,13,8),r(),ee(8,Fn,6,3,"li",16,Z),r()),n&2){let e=p();o(2),_(e.allPluginsSupported?2:-1),o(),_(e.allPluginsSupported?-1:3),o(3),_(e.nodeReady?6:7),o(2),te(e.installedPlugins)}}function Un(n,s){if(n&1){let e=E();l(0,"button",28),m(1,"translate"),V("click",function(){y(e);let t=p();return S(t.closeModal("Dismiss"))}),d(2),m(3,"translate"),r()}n&2&&($("aria-label",g(1,2,"form.button_close")),o(2),B(" ",g(3,4,"form.button_close")," "))}function Rn(n,s){if(n&1){let e=E();l(0,"button",28),m(1,"translate"),V("click",function(){y(e);let t=p();return S(t.closeModal("Dismiss"))}),d(2),m(3,"translate"),r()}n&2&&($("aria-label",g(1,2,"form.button_close")),o(2),B(" ",g(3,4,"form.button_close")," "))}function Hn(n,s){if(n&1){let e=E();l(0,"button",29),V("click",function(){y(e);let t=p();return S(t.closeModal("update"))}),d(1),m(2,"translate"),r()}if(n&2){let e=p();x("disabled",e.loading),o(),B(" ",g(2,2,"form.button_continue")," ")}}var mi=(()=>{class n{$activeModal=C(W);$api=C(D);$settings=C(H);$toastr=C(U);$translate=C(L);$ws=C(Ce);io;isUpdating=ue.required({});skipIfCompatible=ue.required({});loading=!0;installedPlugins=[];allPluginsSupported=!0;nodeReady=!1;ngOnInit(){return M(this,null,function*(){this.io=this.$ws.getExistingNamespace("status"),this.io.socket.connected&&(yield this.checkHomebridgeUiVersion()),yield this.loadInstalledPlugins(),this.loading=!1})}checkHomebridgeUiVersion(){return M(this,null,function*(){try{let{nodeVersion:e}=yield this.io.request("get-homebridge-server-info").toPromise();this.nodeReady=(0,ci.satisfies)(e,">=20")}catch(e){console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}loadInstalledPlugins(){return M(this,null,function*(){this.installedPlugins=[],this.loading=!0;let e=this.$settings.env.homebridgeVersion.split(".")[0];try{let i=yield this.$api.get("/plugins");this.installedPlugins=i.filter(t=>t.name!=="homebridge-config-ui-x").map(t=>{let a=t.engines?.homebridge?.split("||").map(h=>h.trim())||[],c=e==="2"?"hide":a.some(h=>h.startsWith("^2")||h.startsWith(">=2"))?"supported":"unknown";return c==="unknown"&&(this.allPluginsSupported=!1),A(N({},t),{hb2Ready:c})}).sort((t,a)=>t.name.localeCompare(a.name)),this.skipIfCompatible()&&this.installedPlugins.length===0&&this.$activeModal.close("update")}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugins"),this.$translate.instant("toast.title_error"))}})}closeModal(e){this.$activeModal.close(e)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],inputs:{isUpdating:[1,"isUpdating"],skipIfCompatible:[1,"skipIfCompatible"]},decls:17,vars:12,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"w-100","text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"disabled"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],["ngSrc","assets/hb-icon.png","alt","","height","100","width","100",1,"plugin-icon-card"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"fw-bold"],["href","https://github.com/homebridge/homebridge/wiki/Updating-To-Homebridge-v2.0","target","_blank"],[1,"text-start","flex-grow-1"],[1,"grey-text"],[1,"ms-3"],[1,"fas","fa-check-circle","green-text","fa-xl"],["href","https://github.com/homebridge/homebridge/wiki/How-To-Update-Node.js","target","_blank","rel","noopener noreferrer",1,"small"],[1,"fa","fa-external-link-alt"],[1,"fas","fa-exclamation-circle","orange-text","fa-xl"],["aria-label","The developer has specifically marked this plugin as compatible with Homebridge v2.",1,"fas","fa-check-circle","green-text","fa-xl"],["aria-label","The developer has not specifically marked this plugin as compatible with Homebridge v2, but it may still work.",1,"fas","fa-question-circle","orange-text","fa-xl"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"]],template:function(i,t){i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),d(3),m(4,"translate"),r(),l(5,"button",3),m(6,"translate"),V("click",function(){return t.closeModal("Dismiss")}),r()(),l(7,"div",4),u(8,En,2,0,"div",5)(9,Ln,10,3),r(),l(10,"div",6)(11,"div",7),u(12,Un,4,6,"button",8),r(),l(13,"div",9),u(14,Rn,4,6,"button",8),r(),l(15,"div",10),u(16,Hn,3,4,"button",11),r()()()),i&2&&(o(3),w(O(4,6,"status.readiness.title",ne(11,_t))),o(2),$("aria-label",g(6,9,"form.button_close")),o(3),_(t.loading?8:9),o(4),_(t.isUpdating?12:-1),o(2),_(t.isUpdating?-1:14),o(2),_(t.isUpdating?16:-1))},dependencies:[Tt,z],encapsulation:2})}return n})();var jn=(n,s)=>({iconStar:n,iconThumbsUp:s}),hi=(n,s,e,i)=>({"fa-arrow-alt-circle-down":n,"fa-code-compare":s,"fa-arrow-alt-circle-up":e,"fa-trash":i}),On=()=>["homebridge","homebridge-config-ui-x"],zn=n=>({pluginName:n});function Wn(n,s){n&1&&(l(0,"p",13),d(1),m(2,"translate"),r()),n&2&&(o(),w(g(2,1,"plugins.settings.restart_required")))}function qn(n,s){n&1&&(l(0,"p",13),d(1),m(2,"translate"),r()),n&2&&(o(),w(g(2,1,"restart.child_bridges")))}function Jn(n,s){if(n&1&&(v(0,"p",12),m(1,"translate"),u(2,Wn,3,3,"p",13),u(3,qn,3,3,"p",13)),n&2){let e=p(3);x("innerHTML",O(1,3,"plugins.manage.github_support",Se(6,jn,e.iconStar,e.iconThumbsUp)),se),o(2),_(e.childBridges().length===0?2:-1),o(),_(e.childBridges().length>0?3:-1)}}function Gn(n,s){if(n&1&&(l(0,"div",9),v(1,"i",10),r(),l(2,"h5",11),d(3),r(),u(4,Jn,4,9)),n&2){let e=p(2);o(3),We(" ",e.pastTenseVerb(),": ",e.pluginDisplayNameSignal()," (",e.targetVersionPretty(),") "),o(),_(e.isDisabledSignal()?-1:4)}}function Kn(n,s){if(n&1&&(l(0,"div",6),u(1,Gn,5,4),r()),n&2){let e=p();o(),_(e.justUpdatedPlugin()?1:-1)}}function Qn(n,s){if(n&1&&(l(0,"div",7)(1,"div",9),v(2,"i",14),r(),l(3,"ul",15)(4,"li"),d(5),m(6,"translate"),r(),l(7,"li"),d(8),m(9,"translate"),r()(),l(10,"pre",16),d(11),r()()),n&2){let e=p();o(2),q(ke(10,hi,e.actionSignal()==="Install",e.actionSignal()==="Update"&&e.installedVersionSignal(),e.actionSignal()==="Update"&&!e.installedVersionSignal(),e.actionSignal()==="Uninstall")),o(3),w(g(6,6,"plugins.manage.online_updates")),o(3),w(g(9,8,"plugins.manage.manual_update_command")),o(3),ge(`hb-service stop
|
|
11
|
+
npm install -g `,e.pluginNameSignal(),"@",e.targetVersionSignal(),`
|
|
12
|
+
hb-service start`)}}function Xn(n,s){if(n&1&&(l(0,"span"),d(1),r()),n&2){let e=p(3);o(),B("v",e.installedVersionSignal()," \u2192 ")}}function Yn(n,s){if(n&1&&(l(0,"h5",18),u(1,Xn,2,1,"span"),d(2),r()),n&2){let e=p(2);o(),_(e.installedVersionSignal()?1:-1),o(),B(" ",e.targetVersionPretty()," ")}}function Zn(n,s){n&1&&(l(0,"div",26),v(1,"i",27),r())}function eo(n,s){if(n&1&&v(0,"markdown",28),n&2){let e=p(4);x("data",e.versionNotes())}}function to(n,s){n&1&&(l(0,"div",29),d(1),m(2,"translate"),r()),n&2&&(o(),w(g(2,1,"plugins.manage.notes_none")))}function io(n,s){if(n&1&&(l(0,"div",29),d(1),m(2,"translate"),v(3,"br"),d(4),m(5,"translate"),v(6,"br"),d(7),m(8,"translate"),v(9,"br"),r()),n&2){let e=p(6);o(),B(" ",O(2,3,"plugins.manage.notes_beta_1",le(10,zn,e.pluginDisplayNameSignal()))),o(3),B(" ",g(5,6,"plugins.manage.notes_beta_2")),o(3),B(" ",g(8,8,"plugins.manage.notes_beta_3"))}}function no(n,s){n&1&&(l(0,"div",29),d(1),m(2,"translate"),r()),n&2&&(o(),w(g(2,1,"plugins.manage.notes_latest")))}function oo(n,s){if(n&1&&u(0,io,10,12,"div",29)(1,no,3,3,"div",29),n&2){let e=p(5);_(e.targetVersionSignal().includes("beta")||e.targetVersionSignal().includes("alpha")||e.targetVersionSignal().includes("next")?0:1)}}function ao(n,s){if(n&1&&u(0,to,3,3,"div",29)(1,oo,2,1),n&2){let e=p(4);_(e.versionNotesShow()?0:1)}}function ro(n,s){if(n&1&&u(0,eo,1,1,"markdown",28)(1,ao,2,1),n&2){let e=p(3);_(e.versionNotes()?0:1)}}function lo(n,s){if(n&1&&(l(0,"div",25),u(1,Zn,2,0,"div",26)(2,ro,2,1),r()),n&2){let e=p(2);o(),_(e.actionSignal()==="Update"&&!e.versionNotesLoaded()?1:2)}}function so(n,s){n&1&&(l(0,"div",26),v(1,"i",27),r())}function co(n,s){if(n&1&&v(0,"markdown",28),n&2){let e=p(4);x("data",e.fullChangelog())}}function mo(n,s){n&1&&(v(0,"div",31),m(1,"translate")),n&2&&x("innerHTML",g(1,1,"plugins.manage.changelog_none"),se)}function po(n,s){if(n&1&&u(0,co,1,1,"markdown",28)(1,mo,2,3,"div",31),n&2){let e=p(3);_(e.fullChangelog()?0:1)}}function go(n,s){if(n&1&&(l(0,"div",30),u(1,so,2,0,"div",26)(2,po,2,1),r()),n&2){let e=p(2);o(),_(e.actionSignal()==="Update"&&!e.fullChangelogLoaded()?1:2)}}function uo(n,s){if(n&1){let e=E();l(0,"div",24)(1,"p",32)(2,"span",33),d(3),m(4,"translate"),r(),l(5,"a",34),V("click",function(){y(e);let t=p(2);return S(t.downloadBackupFile())}),v(6,"i",35),r()(),l(7,"p",36),d(8),m(9,"translate"),r()()}n&2&&(o(3),w(g(4,2,"plugins.manage.backup")),o(5),w(g(9,4,"plugins.manage.hb_restart")))}function _o(n,s){if(n&1){let e=E();l(0,"div",6)(1,"div",9),v(2,"i",17),r(),u(3,Yn,3,2,"h5",18),l(4,"ul",19,0),X("activeIdChange",function(t){y(e);let a=p();return Q(a.releaseNotesTab,t)||(a.releaseNotesTab=t),S(t)}),l(6,"li",20)(7,"button",21),d(8),m(9,"translate"),r(),mt(10,lo,3,1,"ng-template",22),r(),l(11,"li",20)(12,"button",21),d(13),m(14,"translate"),r(),mt(15,go,3,1,"ng-template",22),r()(),v(16,"div",23),u(17,uo,10,6,"div",24),r()}if(n&2){let e=ze(5),i=p();o(2),q(ke(14,hi,i.actionSignal()==="Install"&&!i.installedVersionSignal(),i.actionSignal()==="Install"&&i.installedVersionSignal(),i.actionSignal()==="Update",i.actionSignal()==="Uninstall")),o(),_(i.latestVersionSignal()?3:-1),o(),K("activeId",i.releaseNotesTab),o(2),x("ngbNavItem",1),o(2),w(g(9,10,"plugins.manage.notes")),o(3),x("ngbNavItem",2),o(2),w(g(14,12,"plugins.manage.changelog")),o(3),x("ngbNavOutlet",e),o(),_(ne(19,On).includes(i.pluginNameSignal())?17:-1)}}function fo(n,s){if(n&1){let e=E();l(0,"button",43),m(1,"translate"),V("click",function(){y(e);let t=p(2);return S(t.dismissModal())}),d(2),m(3,"translate"),r()}n&2&&($("aria-label",g(1,2,"form.button_close")),o(2),B(" ",g(3,4,"form.button_close")," "))}function ho(n,s){if(n&1){let e=E();l(0,"button",43),m(1,"translate"),V("click",function(){y(e);let t=p(2);return S(t.dismissModal())}),d(2),m(3,"translate"),r()}n&2&&($("aria-label",g(1,2,"form.button_close")),o(2),B(" ",g(3,4,"form.button_close")," "))}function bo(n,s){if(n&1){let e=E();l(0,"button",44),V("click",function(){y(e);let t=p(2);return S(t.update())}),d(1),m(2,"translate"),r()}n&2&&(o(),w(g(2,1,"form.button_continue")))}function Co(n,s){if(n&1){let e=E();l(0,"button",44),V("click",function(){y(e);let t=p(2);return S(t.childBridges().length>0?t.onRestartChildBridgeClick():t.onRestartHomebridgeClick())}),d(1),m(2,"translate"),r()}n&2&&(o(),B(" ",g(2,1,"menu.tooltip_restart")," "))}function vo(n,s){if(n&1){let e=E();l(0,"button",45),V("click",function(){y(e);let t=p(2);return S(t.downloadLogFile())}),d(1),m(2,"translate"),r()}n&2&&(o(),w(g(2,1,"form.button_download")))}function xo(n,s){if(n&1&&(l(0,"div",8)(1,"div",37),u(2,fo,4,6,"button",38),r(),l(3,"div",39),u(4,ho,4,6,"button",38),r(),l(5,"div",40),u(6,bo,3,3,"button",41),u(7,Co,3,3,"button",41),u(8,vo,3,3,"button",42),r()()),n&2){let e=p();o(2),_(!e.justUpdatedPlugin()&&e.onlineUpdateOk()||e.justUpdatedPlugin()&&(!e.isDisabledSignal()||e.actionFailed())?2:-1),o(2),_(e.justUpdatedPlugin()&&e.isDisabledSignal()&&!e.actionFailed()||!e.onlineUpdateOk()?4:-1),o(2),_(e.onlineUpdateOk()&&e.releaseNotesShow()?6:-1),o(),_(e.justUpdatedPlugin()&&!e.isDisabledSignal()?7:-1),o(),_(e.actionFailed()?8:-1)}}var Pe=(()=>{class n{$activeModal=C(W);$api=C(D);$backup=C(ni);$modal=C(re);$router=C(ce);$settings=C(H);$toastr=C(U);$translate=C(L);$ws=C(Ce);_pluginName=b("",{});_pluginDisplayName=b("",{});_targetVersion=b("",{});_latestVersion=b("",{});_installedVersion=b("",{});_isDisabled=b(!1,{});_action=b("",{});_onRefreshPluginList=b(null,{});set pluginName(e){this._pluginName.set(e)}get pluginName(){return this._pluginName()}set pluginDisplayName(e){this._pluginDisplayName.set(e)}get pluginDisplayName(){return this._pluginDisplayName()}set targetVersion(e){this._targetVersion.set(e)}get targetVersion(){return this._targetVersion()}set latestVersion(e){this._latestVersion.set(e)}get latestVersion(){return this._latestVersion()}set installedVersion(e){this._installedVersion.set(e)}get installedVersion(){return this._installedVersion()}set isDisabled(e){this._isDisabled.set(e)}get isDisabled(){return this._isDisabled()}set action(e){this._action.set(e)}get action(){return this._action()}set onRefreshPluginList(e){this._onRefreshPluginList.set(e)}get onRefreshPluginList(){return this._onRefreshPluginList()}pluginNameSignal=this._pluginName.asReadonly();pluginDisplayNameSignal=this._pluginDisplayName.asReadonly();targetVersionSignal=this._targetVersion.asReadonly();latestVersionSignal=this._latestVersion.asReadonly();installedVersionSignal=this._installedVersion.asReadonly();isDisabledSignal=this._isDisabled.asReadonly();actionSignal=this._action.asReadonly();onRefreshPluginListSignal=this._onRefreshPluginList.asReadonly();targetVersionPretty=b("",{});actionComplete=b(!1,{});actionFailed=b(!1,{});justUpdatedPlugin=b(!1,{});updateToBeta=b(!1,{});childBridges=b([],{});pastTenseVerb=b("",{});onlineUpdateOk=b(!1,{});versionNotes=b("",{});versionNotesLoaded=b(!1,{});versionNotesShow=b(!1,{});fullChangelog=b("",{});fullChangelogLoaded=b(!1,{});releaseNotesShow=b(!1,{});io;toastSuccess;term=new _i.Terminal;termTarget;fitAddon=new gi.FitAddon;webLinksAddon=new ui.WebLinksAddon;errorLog="";presentTenseVerb;releaseNotesTab=1;iconStar='<i class="fas fa-star primary-text"></i>';iconThumbsUp='<i class="fas fa-thumbs-up primary-text"></i>';constructor(){this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon)}ngOnInit(){let e=this._targetVersion(),i=this._latestVersion();switch(this.targetVersionPretty.set(e==="latest"?`v${i}`:/^\d/.test(e)?`v${e}`:e),this.io=this.$ws.connectToNamespace("plugins"),this.termTarget=document.getElementById("plugin-log-output"),this.term.open(this.termTarget),this.fitAddon.fit(),this.io.socket.on("stdout",t=>{this.term.write(t);let a=t.toString().replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"").trimEnd();a&&(this.errorLog+=`${a}\r
|
|
13
|
+
`)}),this.toastSuccess=this.$translate.instant("toast.title_success"),this.onlineUpdateOk.set(!(["homebridge","homebridge-config-ui-x"].includes(this._pluginName())&&this.$settings.env.platform==="win32")),this._action()){case"Install":this.install(),this.presentTenseVerb=this.$translate.instant("plugins.manage.install"),this.pastTenseVerb.set(this.$translate.instant("plugins.manage.installed"));break;case"Uninstall":this.uninstall(),this.presentTenseVerb=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=this.$translate.instant("plugins.manage.update"),this.pastTenseVerb.set(this.$translate.instant("plugins.manage.updated")),this.getVersionNotes();break}}update(){if(this.releaseNotesShow.set(!1),this.versionNotes.set(""),this.fullChangelog.set(""),!!this.onlineUpdateOk()){if(this._pluginName()==="homebridge"){this.upgradeHomebridge();return}this.io.request("update",{name:this._pluginName(),version:this._targetVersion(),termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>M(this,null,function*(){if(this._pluginName()==="homebridge-config-ui-x")try{this.$settings.webroot&&this.$settings.webroot!=="/"&&(yield this.$api.put("/server/webroot",{webroot:this.$settings.webroot})),window.location.href="restart"}catch(e){console.error("Failed to update webroot:",e),window.location.href="restart"}else{try{yield this.getChildBridges()}catch(i){console.error(i)}let e=this._onRefreshPluginList();e&&e(),this.actionComplete.set(!0),this.justUpdatedPlugin.set(!0),this.$router.navigate(["/plugins"])}}),error:e=>{this.actionFailed.set(!0),console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}}onRestartHomebridgeClick(){this.$router.navigate(["/restart"]),this.$activeModal.close()}onRestartChildBridgeClick(){return M(this,null,function*(){try{for(let i of this.childBridges())yield this.$api.put(`/server/restart/${i.username}`,{});let e=this.$modal.open(di,{size:"xl",backdrop:"static"});e.componentInstance.plugin={name:this._pluginName(),displayName:this._pluginDisplayName()},e.componentInstance.childBridges=this.childBridges()}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,fi.saveAs)(e,`${this._pluginName()}-error.log`)}downloadBackupFile(){return M(this,null,function*(){try{yield this.$backup.downloadBackup()}catch(e){console.error(e);let i=e instanceof Error?e.message:this.$translate.instant("toast.title_error");this.$toastr.error(i,this.$translate.instant("toast.title_error"))}})}ngOnDestroy(){this.io.end()}dismissModal(){this.$activeModal.dismiss("Dismiss")}install(){if(this.onlineUpdateOk()){if(this._pluginName()==="homebridge"){this.upgradeHomebridge();return}this.io.request("install",{name:this._pluginName(),version:this._targetVersion(),termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>M(this,null,function*(){this.$toastr.success(`${this.pastTenseVerb()} ${this._pluginName()}`,this.toastSuccess);let e=this._onRefreshPluginList();e&&e();try{let t=(yield this.$api.get("/plugins")).find(a=>a.name===this._pluginName());this.$activeModal.close({action:"just-installed",plugin:t})}catch(i){console.error("Failed to fetch updated plugin data:",i),this.$activeModal.close({action:"just-installed",pluginName:this._pluginName()})}}),error:e=>{this.actionFailed.set(!0),console.error(e),this.$router.navigate(["/plugins"]),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}}uninstall(){this.io.request("uninstall",{name:this._pluginName(),termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{let e=this._onRefreshPluginList();e&&e(),this.$activeModal.close(),this.$router.navigate(["/plugins"]),this.$modal.open(pe,{size:"lg",backdrop:"static"})},error:e=>{this.actionFailed.set(!0),console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}upgradeHomebridge(){return M(this,null,function*(){let e="update";if(Number(this._installedVersion().split(".")[0])<2&&["2","alpha","beta"].includes(this._targetVersion().split(".")[0])){let i=this.$modal.open(mi,{size:"lg",backdrop:"static"});i.componentInstance.isUpdating=!0,e=yield i.result}e==="update"?this.io.request("homebridge-update",{version:this._targetVersion(),termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>M(this,null,function*(){this.$activeModal.close();try{yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}),this.$router.navigate(["/restart"])}catch(i){console.error(i),this.$router.navigate(["/restart"])}}),error:i=>{this.actionFailed.set(!0),console.error(i);let t=i instanceof Error?i.message:this.$translate.instant("toast.title_error");this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.close()}}):this.$activeModal.close()})}getVersionNotes(){return M(this,null,function*(){this.releaseNotesShow.set(!0);try{let e=yield this.$api.get(`/plugins/release/${encodeURIComponent(this._pluginName())}`);this.fullChangelog.set(e.changelog),e.latestVersion&&this.targetVersionPretty.set(e.latestVersion);let i=this._targetVersion(),t=this._latestVersion();i==="latest"||i===t?(this.versionNotesShow.set(!0),e.notes&&this.versionNotes.set(e.notes)):(this.versionNotesShow.set(!1),this.versionNotesLoaded.set(!0))}catch(e){console.error("Error loading release notes:",e)}this.fullChangelogLoaded.set(!0),this.versionNotesLoaded.set(!0)})}getChildBridges(){return M(this,null,function*(){let i=(yield this.$api.get("/status/homebridge/child-bridges")).filter(t=>this._pluginName()===t.plugin);this.childBridges.set(i)})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],decls:11,vars:9,consts:[["nav","ngbNav"],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],["id","plugin-log-output",1,"modal-body",3,"hidden"],[1,"modal-body","plugin-modal-body"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"mb-3","text-center"],[1,"far","fa-check-circle","primary-text",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"mb-3","text-center","grey-text",3,"innerHTML"],[1,"text-center","mb-0"],[1,"fas","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"p-2","mb-0"],[1,"far","primary-text",2,"font-size","75px"],[1,"mb-4","text-center"],["ngbNav","",1,"nav-tabs","px-0",3,"activeIdChange","activeId"],[1,"w-50","m-0",3,"ngbNavItem"],["ngbNavLink","",1,"w-100","release-tab"],["ngbNavContent",""],[1,"mt-2",3,"ngbNavOutlet"],[1,"mt-4","mb-0"],[1,"alert","release-notes","p-3","pb-1","my-0"],[1,"w-100","text-center","primary-text","mt-3","mb-4"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[1,"plugin-md",3,"data"],[1,"w-100","text-center","grey-text","mt-3","mb-4"],[1,"alert","release-notes","p-3","pb-1","my-0",2,"border-top-left-radius","0","border-top-right-radius","0"],[1,"w-100","text-center","grey-text","mt-3","mb-4",3,"innerHTML"],[1,"w-100","text-center","mb-1","small"],[1,"grey-text"],["href","javascript:void(0)",3,"click"],[1,"fa","fa-download","mx-1"],[1,"w-100","text-center","mb-0","small","grey-text"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button",1,"btn","btn-primary"],[1,"btn","btn-primary"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-primary",3,"click"],[1,"btn","btn-primary",3,"click"]],template:function(i,t){i&1&&(l(0,"div",1)(1,"div",2)(2,"h5",3),d(3),r(),l(4,"button",4),m(5,"translate"),V("click",function(){return t.dismissModal()}),r()(),v(6,"div",5),u(7,Kn,2,1,"div",6),u(8,Qn,12,15,"div",7),u(9,_o,18,20,"div",6),u(10,xo,9,5,"div",8),r()),i&2&&(o(3),w(t.pluginDisplayNameSignal()),o(),$("aria-label",g(5,7,"form.button_close")),o(2),x("hidden",!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()),o(),_(t.actionComplete()?7:-1),o(),_(t.onlineUpdateOk()?-1:8),o(),_(t.releaseNotesShow()&&!t.actionComplete()&&t.onlineUpdateOk()?9:-1),o(),_(!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()||t.actionFailed()?10:-1))},dependencies:[Ie,Ee,Te,zt,jt,Ht,Rt,Ot,z],styles:[".plugin-modal-body[_ngcontent-%COMP%] .release-notes[_ngcontent-%COMP%]{box-shadow:none;max-height:39vh;overflow:auto;border:0;border-top-left-radius:0;border-top-right-radius:0}.plugin-modal-body[_ngcontent-%COMP%] .release-tab[_ngcontent-%COMP%]{font-size:1rem;color:#d3d3d3}.plugin-modal-body[_ngcontent-%COMP%] .tab-content[_ngcontent-%COMP%]{border-radius:0 0 20px 20px} .nav-tabs{--bs-nav-tabs-border-width: 0} .plugin-md{text-align:left;font-size:.85rem;word-wrap:break-word} .plugin-md img{max-width:100%} .plugin-md h1{font-size:1.3rem;font-weight:300} .plugin-md h2{font-size:1.2rem;font-weight:300} .plugin-md h3{font-size:1.1rem;font-weight:300} .plugin-md h4{font-size:1rem;font-weight:300} .plugin-md h5{font-size:.9rem;font-weight:300} .plugin-md pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}"]})}return n})();var bi=Y(nt(),1);var yo=()=>["homebridge","homebridge-config-ui-x"];function So(n,s){n&1&&(l(0,"div",5),v(1,"i",12),r())}function Bo(n,s){if(n&1&&(v(0,"i",20),l(1,"h6",21),d(2),m(3,"translate"),r(),l(4,"p",21),d(5),m(6,"translate"),l(7,"span",22),d(8),r()()),n&2){let e,i=p(2);o(2),w(g(3,3,"plugins.manage.select_version")),o(3),B(" ",g(6,5,"plugins.status_installed"),": "),o(3),B("v",(e=i.pluginSignal())==null?null:e.installedVersion)}}function wo(n,s){n&1&&(v(0,"i",23),l(1,"h6",21),d(2),m(3,"translate"),r()),n&2&&(o(2),w(g(3,1,"plugins.manage.select_version")))}function ko(n,s){n&1&&v(0,"i",26)}function Mo(n,s){n&1&&v(0,"i",27)}function Vo(n,s){if(n&1){let e=E();l(0,"li",14)(1,"span",8),d(2),v(3,"br"),l(4,"small",24),d(5),r()(),l(6,"button",25),V("click",function(){let t=y(e).$implicit,a=p(2);return S(a.doInstall(t.version))}),u(7,ko,1,0,"i",26)(8,Mo,1,0,"i",27),r()()}if(n&2){let e,i=s.$implicit,t=p(2);o(2),B(" ",i.tag," "),o(3),B("v",i.version),o(2),_(((e=t.pluginSignal())==null?null:e.installedVersion)===i.version?7:8)}}function Eo(n,s){n&1&&d(0," \u2713 ")}function Io(n,s){if(n&1&&(l(0,"option",17),d(1),u(2,Eo,1,0),r()),n&2){let e,i=s.$implicit,t=p(2);x("value",i.version)("selected",t.versionSelect==i.version),o(),B(" v",i.version," "),o(),_(i.version==((e=t.pluginSignal())==null?null:e.installedVersion)?2:-1)}}function To(n,s){n&1&&v(0,"i",26)}function $o(n,s){n&1&&v(0,"i",27)}function Po(n,s){if(n&1){let e=E();l(0,"button",25),V("click",function(){y(e);let t=p(2);return S(t.doInstall(t.versionSelect))}),u(1,To,1,0,"i",26)(2,$o,1,0,"i",27),r()}if(n&2){let e,i=p(2);o(),_(((e=i.pluginSignal())==null?null:e.installedVersion)===i.versionSelect?1:2)}}function No(n,s){if(n&1&&(l(0,"ul",19)(1,"li",28)(2,"div",8),d(3),m(4,"translate"),v(5,"br"),l(6,"span",29),d(7),m(8,"translate"),r()(),l(9,"div",30),v(10,"input",31),m(11,"translate"),v(12,"label",32),r()()()),n&2){let e=p(2);o(3),B(" ",g(4,4,"plugins.manage.hide_updates")),o(4),w(g(8,6,"plugins.manage.hide_updates_desc")),o(3),x("formControl",e.hideUpdatesFormControl),$("aria-label",g(11,8,"plugins.manage.hide_updates"))}}function Do(n,s){if(n&1){let e=E();l(0,"div",6),u(1,Bo,9,7)(2,wo,4,3),l(3,"ul",13),ee(4,Vo,9,3,"li",14,Z),l(6,"li",14)(7,"div",15),d(8),m(9,"translate"),v(10,"br"),l(11,"select",16),X("ngModelChange",function(t){y(e);let a=p();return Q(a.versionSelect,t)||(a.versionSelect=t),S(t)}),ee(12,Io,3,4,"option",17,Z),r()(),u(14,Po,3,1,"button",18),r()(),u(15,No,13,10,"ul",19),r()}if(n&2){let e,i,t=p();o(),_((e=t.pluginSignal())!=null&&e.installedVersion?1:2),o(3),te(t.versionsWithTags()),o(4),B(" ",g(9,5,"plugins.manage.all_versions")," "),o(3),K("ngModel",t.versionSelect),o(),te(t.versions()),o(2),_(t.versionSelect?14:-1),o(),_((i=t.pluginSignal())!=null&&i.installedVersion&&!ne(7,yo).includes((i=t.pluginSignal())==null?null:i.name)?15:-1)}}var Ci=(()=>{class n{$activeModal=C(W);$api=C(D);$settings=C(H);$toastr=C(U);$translate=C(L);_plugin=b(null,{});_onRefreshPluginList=b(null,{});_versionSelect=b("",{});set plugin(e){this._plugin.set(e)}get plugin(){return this._plugin()}set onRefreshPluginList(e){this._onRefreshPluginList.set(e)}get onRefreshPluginList(){return this._onRefreshPluginList()}pluginSignal=this._plugin.asReadonly();loading=b(!0,{});versions=b([],{});versionsWithTags=b([],{});get versionSelect(){return this._versionSelect()}set versionSelect(e){this._versionSelect.set(e)}isUpdateHidden=!1;hideUpdatesFormControl=new Nt(!1);ngOnInit(){let e=this._plugin();e&&(this.versionSelect=e.installedVersion||e.latestVersion,this.lookupVersions(),this.isUpdateHidden=this.$settings.env.plugins.hideUpdatesFor&&this.$settings.env.plugins.hideUpdatesFor.includes(e.name),this.hideUpdatesFormControl.patchValue(this.isUpdateHidden),this.hideUpdatesFormControl.valueChanges.pipe(Be(750)).subscribe(i=>{i!==null&&this.toggleHideUpdates(i)}))}doInstall(e){let i=this._plugin();if(!i)return;let t=this.versions().find(a=>a.version===e);this.$activeModal.close({name:i.name,version:e,engines:t?.engines,action:i.installedVersion?"alternate":"install"})}toggleHideUpdates(e){return M(this,null,function*(){let i=this._plugin();if(!i)return;let t=this.$settings.env.plugins?.hideUpdatesFor||[];e?t.includes(i.name)||(t=[...t,i.name].sort((a,c)=>a.localeCompare(c))):t=t.filter(a=>a!==i.name);try{yield this.$api.put("/config-editor/ui/plugins/hide-updates-for",{body:t}),this.$settings.setEnvItem("plugins.hideUpdatesFor",t);let a=this._onRefreshPluginList();a&&a()}catch(a){this.hideUpdatesFormControl.patchValue(this.isUpdateHidden,{emitEvent:!1}),console.error(a);let c=a instanceof Error?a.message:this.$translate.instant("toast.title_error");this.$toastr.error(c,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}lookupVersions(){return M(this,null,function*(){let e=this._plugin();if(e)try{let i=yield this.$api.get(`/plugins/lookup/${encodeURIComponent(e.name)}/versions`),t=[],a=[];for(let[h,f]of Object.entries(i.versions))t.push({version:h,engines:f.engines||null}),Object.keys(i.tags).filter(k=>i.tags[k]===h).forEach(k=>{a.push({version:h,tag:k})});let c=this._plugin();c?.installedVersion&&!t.find(h=>h.version===c.installedVersion)&&t.push({version:c.installedVersion,engines:c.engines||null}),t.sort((h,f)=>(0,bi.rcompare)(h.version,f.version)),a.sort((h,f)=>{let k=["latest","next","beta","alpha"],P=k.includes(h.tag)?k.indexOf(h.tag):999,me=k.includes(f.tag)?k.indexOf(f.tag):999;return P-me}),this.versions.set(t),this.versionsWithTags.set(a),!t.find(h=>h.version===this.versionSelect)&&i.tags.latest&&(this.versionSelect=i.tags.latest),this.loading.set(!1)}catch(i){console.error(i);let t=i instanceof Error?i.error?.message||i.message:this.$translate.instant("toast.title_error");this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],decls:17,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body","d-flex","flex-row","flex-grow-1","w-100"],[1,"w-100","text-center","primary-text"],[1,"w-100","text-center"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-end"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"text-start",2,"min-width","50%"],[1,"custom-select","w-100","font-monospace",2,"font-size","0.875rem",3,"ngModelChange","ngModel"],[3,"value","selected"],[1,"btn","btn-primary","m-0","ms-3","py-1"],[1,"list-group","list-group-box","mt-3","mb-0"],[1,"fas","fa-code-compare","primary-text","mb-3",2,"font-size","75px"],[1,"mb-3"],[1,"font-monospace"],[1,"far","fa-arrow-alt-circle-down","primary-text","mb-3",2,"font-size","75px"],[1,"grey-text","font-monospace"],[1,"btn","btn-primary","m-0","ms-3","py-1",3,"click"],[1,"fas","fa-rotate-right"],[1,"fas","fa-arrow-alt-circle-down"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"grey-text","small"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox","id","hidePluginUpdates",1,"rendux-input",3,"formControl"],["for","hidePluginUpdates",1,"rendux-label","ms-3"]],template:function(i,t){if(i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),d(3),r(),l(4,"button",3),m(5,"translate"),V("click",function(){return t.dismissModal()}),r()(),l(6,"div",4),u(7,So,2,0,"div",5)(8,Do,16,8,"div",6),r(),l(9,"div",7),v(10,"div",8),l(11,"div",9)(12,"button",10),m(13,"translate"),V("click",function(){return t.dismissModal()}),d(14),m(15,"translate"),r()(),v(16,"div",11),r()()),i&2){let a;o(3),w(((a=t.pluginSignal())==null?null:a.displayName)||((a=t.pluginSignal())==null?null:a.name)),o(),$("aria-label",g(5,5,"form.button_close")),o(3),_(t.loading()?7:8),o(5),$("aria-label",g(13,7,"form.button_close")),o(2),B(" ",g(15,9,"form.button_close")," ")}},dependencies:[be,Ke,Qe,Me,Ge,fe,he,Ut,At,z],encapsulation:2})}return n})();var vi=Y(un(),1);var rt=(()=>{class n{transform(e){return e.replace(/\$\{\{HOSTNAME\}\}/g,location.hostname)}static \u0275fac=function(i){return new(i||n)};static \u0275pipe=kt({name:"interpolateMd",type:n,pure:!0})}return n})();var Ao=(n,s,e,i,t)=>({"fa-circle-check":n,"green-text":s,"fa-circle-exclamation":e,"red-text":i,"orange-text":t}),Fo=(n,s,e)=>({"fa-circle-check green-text":n,"fa-circle-exclamation red-text":s,"fa-circle-exclamation orange-text":e});function Lo(n,s){n&1&&(l(0,"div",5),v(1,"i",14),r())}function Uo(n,s){n&1&&(l(0,"div",6),d(1),m(2,"translate"),m(3,"translate"),r()),n&2&&(o(),ge(" ",g(2,2,"plugins.settings.message_manual_config_required")," ",g(3,4,"plugins.settings.message_consult_documentation")," "))}function Ro(n,s){if(n&1&&(v(0,"markdown",7),m(1,"interpolateMd")),n&2){let e,i=p();x("data",g(1,1,(e=i.schemaSignal())==null?null:e.headerDisplay))}}function Ho(n,s){if(n&1){let e=E();l(0,"button",28),m(1,"translate"),V("click",function(){y(e);let t=p(2).$index,a=p(2);return S(a.removeBlock(t))}),v(2,"i",29),r()}n&2&&x("ngbTooltip",g(1,2,"form.button_delete"))("openDelay",150)}function jo(n,s){if(n&1){let e=E();u(0,Ho,3,4,"button",25),l(1,"button",26),m(2,"translate"),V("click",function(){y(e);let t=p().$index,a=p(2);return S(a.editBlock(t))}),v(3,"i",27),r()}if(n&2){let e=p().$index,i=p(2);_(i.show()==="configBlock."+e?0:-1),o(),x("ngbTooltip",g(2,3,"form.button_edit"))("openDelay",150)}}function Oo(n,s){if(n&1&&(v(0,"i",30),m(1,"translate")),n&2){let e=p().$index,i=p(2);q(It(6,Ao,i.formBlocksValid()[e],i.formBlocksValid()[e],!i.formBlocksValid()[e],i.strictValidation()&&!i.formBlocksValid()[e],!i.strictValidation()&&!i.formBlocksValid()[e])),x("ngbTooltip",g(1,4,i.formBlocksValid()[e]?"form.label_valid":i.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function zo(n,s){if(n&1){let e=E();l(0,"div",16)(1,"div",18)(2,"div",19)(3,"h5",20),d(4),r(),l(5,"div"),u(6,jo,4,5),u(7,Oo,2,12,"i",21),r()()(),l(8,"div",22)(9,"div",23)(10,"ngx-monaco-editor",24),V("ngModelChange",function(t){y(e);let a=p(2);return S(a.currentBlock.set(t))})("onInit",function(t){y(e);let a=p(2);return S(a.onEditorInit(t))}),r()()()()}if(n&2){let e,i,t=s.$implicit,a=s.$index,c=p(2);x("ngbAccordionItem","configBlock."+a)("collapsed",c.show()!=="configBlock."+a)("id","configBlock."+a),o(4),w(t.name||c.pluginAlias()),o(2),_(!((e=c.schemaSignal())!=null&&e.singular)||c.pluginConfig().length>1?6:-1),o(),_((i=c.schemaSignal())!=null&&i.singular?-1:7),o(3),x("options",c.editorOptions)("ngModel",c.currentBlock())}}function Wo(n,s){if(n&1&&(l(0,"div",17),v(1,"markdown",7),m(2,"interpolateMd"),r()),n&2){let e,i=p(2);o(),x("data",g(2,1,(e=i.schemaSignal())==null?null:e.footerDisplay))}}function qo(n,s){if(n&1&&(l(0,"div",15),ee(1,zo,11,8,"div",16,Z),r(),u(3,Wo,3,3,"div",17)),n&2){let e,i=p();x("closeOthers",!0),o(),te(i.pluginConfig()),o(2),_((e=i.schemaSignal())!=null&&e.footerDisplay?3:-1)}}function Jo(n,s){if(n&1&&(v(0,"i",35),m(1,"translate")),n&2){let e=p(2);q(ae(6,Fo,e.formIsValid(),e.strictValidation()&&!e.formIsValid(),!e.strictValidation()&&!e.formIsValid())),x("ngbTooltip",g(1,4,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function Go(n,s){if(n&1){let e=E();l(0,"button",36),V("click",function(){y(e);let t=p(2);return S(t.addBlock())}),v(1,"i",37),r()}}function Ko(n,s){n&1&&(d(0),m(1,"translate")),n&2&&B(" ",g(1,1,"form.button_save")," ")}function Qo(n,s){n&1&&v(0,"i",34)}function Xo(n,s){if(n&1){let e=E();u(0,Jo,2,10,"i",31),u(1,Go,2,0,"button",32),l(2,"button",33),V("click",function(){y(e);let t=p();return S(t.save())}),u(3,Ko,2,3),u(4,Qo,1,0,"i",34),r()}if(n&2){let e,i,t=p();_((e=t.schemaSignal())!=null&&e.singular?0:-1),o(),_((i=t.schemaSignal())!=null&&i.singular?-1:1),o(),x("disabled",t.saveInProgress()||!t.formIsValid()&&t.strictValidation()),o(),_(t.saveInProgress()?-1:3),o(),_(t.saveInProgress()?4:-1)}}function Yo(n,s){if(n&1){let e=E();l(0,"button",38),V("click",function(){y(e);let t=p();return S(t.openFullConfigEditor())}),d(1),m(2,"translate"),r()}n&2&&(o(),B(" ",g(2,1,"plugins.settings.label_open_config_editor")," "))}var ht=(()=>{class n{$activeModal=C(W);$api=C(D);$cb=C($e);$md=C(Kt);$plugin=C(xe);$router=C(ce);$settings=C(H);$toastr=C(U);$translate=C(L);_plugin=b(null,{});_schema=b(null,{});set plugin(e){this._plugin.set(e)}get plugin(){return this._plugin()}set schema(e){this._schema.set(e)}get schema(){return this._schema()}pluginSignal=this._plugin.asReadonly();schemaSignal=this._schema.asReadonly();isDebugModeEnabled=this.$settings.isFeatureEnabled("childBridgeDebugMode");isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");pluginAlias=b("",{});pluginType=b(null,{});loading=b(!0,{});canConfigure=b(!1,{});show=b("",{});pluginConfig=b([],{});currentBlock=b(void 0,{});currentBlockIndex=b(null,{});saveInProgress=b(!1,{});isFirstSave=b(!1,{});monacoEditor;formBlocksValid=b({},{});formIsValid=b(!0,{});strictValidation=b(!1,{});editorOptions;get arrayKey(){return this.pluginType()==="accessory"?"accessories":"platforms"}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light"},this.strictValidation.set(this.schema?.strictValidation||!1),this.$md.detect.mobile()?(this.loading.set(!1),this.canConfigure.set(!1)):this.loadPluginAlias()}onEditorInit(e){return M(this,null,function*(){window.editor=e,this.monacoEditor=e,this.setupSchemaValidation(),this.monacoEditor.onDidChangeModelContent(()=>setTimeout(()=>this.onValidationChange(),300)),window.monaco.editor.onDidChangeMarkers(t=>{let a=this.monacoEditor.getModel()?.uri;a&&t.some(c=>c.toString()===a.toString())&&this.onValidationChange()}),yield this.monacoEditor.getModel().setValue(this.currentBlock()),yield this.monacoEditor.getAction("editor.action.formatDocument").run()})}ngOnDestroy(){try{if(window.editor&&window.editor.dispose&&(window.editor.dispose(),window.editor=void 0),window.monaco){let i=`http://plugin/${this.schema?.pluginAlias||this.pluginAlias}/config.json`,a=(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas||[]).filter(c=>c.uri!==i);window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:a})}this.monacoEditor&&this.monacoEditor.dispose()}catch{}}addBlock(){if(!this.saveCurrentBlock()){this.$toastr.error(this.$translate.instant("plugins.config.please_fix"),this.$translate.instant("toast.title_error"));return}this.pluginConfig.update(e=>[...e,{[this.pluginType()]:this.pluginAlias(),name:this.pluginAlias()}]),this.editBlock(this.pluginConfig().length-1)}editBlock(e){if(this.currentBlockIndex()!==null){if(!this.saveCurrentBlock())return;this.formBlocksValid.update(i=>A(N({},i),{[this.currentBlockIndex()]:this.isJsonValid()}))}this.show.set(`configBlock.${e}`),this.currentBlockIndex.set(e),this.currentBlock.set(JSON.stringify(this.pluginConfig()[e],null,4)),e in this.formBlocksValid()||this.formBlocksValid.update(i=>A(N({},i),{[e]:!0})),this.updateOverallValidation(),setTimeout(()=>this.onValidationChange(),150)}removeBlock(e){let i=this.pluginConfig()[e],t=this.pluginConfig().findIndex(a=>a===i);t>-1&&this.pluginConfig.update(a=>{let c=[...a];return c.splice(t,1),c}),this.currentBlockIndex.set(null),this.currentBlock.set(void 0),this.show.set("")}save(){return M(this,null,function*(){if(this.saveInProgress.set(!0),!this.saveCurrentBlock()){this.saveInProgress.set(!1);return}try{let e=this.plugin;if(!e)return;let i=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}`,this.pluginConfig());if(this.$activeModal.close(),this.isFirstSave()&&this.$settings.env.recommendChildBridges&&i[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(e,!0);return}this.$activeModal.close(),yield this.$cb.openCorrectRestartModalForPlugin(e.name)}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1)}})}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}closeModal(){this.$activeModal.close()}setupSchemaValidation(){let e=this.schema?.schema;e||(e=this.createBasicSchema());let t=`http://plugin/${this.schema?.pluginAlias||this.pluginAlias()}/config.json`,a=ut(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported,isPlatformPlugin:this.pluginType()==="platform"}),h=[...e.required||[]];this.pluginType()==="platform"?(h.includes("platform")||h.push("platform"),e.properties?.platform?e.properties.platform.const=this.pluginAlias():e.properties=A(N({},e.properties),{platform:{type:"string",title:"Platform Name",description:"This is used by Homebridge to identify which plugin this platform belongs to.",const:this.pluginAlias()}})):(h.includes("accessory")||h.push("accessory"),h.includes("name")||h.push("name"),e.properties?.accessory?e.properties.accessory.const=this.pluginAlias():e.properties=A(N({},e.properties),{accessory:{type:"string",title:this.$translate.instant("child_bridge.config.accessory"),description:"This is used by Homebridge to identify which plugin this accessory belongs to.",const:this.pluginAlias()}})),window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:[{uri:t,fileMatch:["*"],schema:A(N({},e),{required:h,properties:A(N({},e.properties),{_bridge:a})})}]})}createBasicSchema(){let e=ut(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported,isPlatformPlugin:this.pluginType()==="platform"});return this.pluginType()==="platform"?{type:"object",required:["platform"],title:this.$translate.instant("plugins.button_settings"),properties:{platform:{type:"string",title:"Platform Name",description:"This is used by Homebridge to identify which plugin this platform belongs to.",not:{enum:["config"]}},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the platform."},_bridge:e}}:{type:"object",required:["accessory","name"],title:this.$translate.instant("plugins.button_settings"),properties:{accessory:{type:"string",title:this.$translate.instant("child_bridge.config.accessory"),description:"This is used by Homebridge to identify which plugin this accessory belongs to."},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the accessory."},_bridge:e}}}isJsonValid(){if(!this.monacoEditor)return!0;let e=this.monacoEditor.getModel();if(!e)return!0;let i=window.monaco.editor.getModelMarkers({resource:e.uri}),t=window.monaco;return!i.filter(c=>c.severity===t.MarkerSeverity.Error||c.severity===t.MarkerSeverity.Warning).length}onValidationChange(){this.currentBlockIndex()!==null&&this.monacoEditor&&(this.formBlocksValid.update(e=>A(N({},e),{[this.currentBlockIndex()]:this.isJsonValid()})),this.updateOverallValidation())}updateOverallValidation(){this.formIsValid.set(Object.values(this.formBlocksValid()).every(e=>e))}loadPluginAlias(){let e=this.plugin;e&&this.$api.get(`/plugins/alias/${encodeURIComponent(e.name)}`).then(i=>{i.pluginAlias&&i.pluginType?(this.pluginAlias.set(i.pluginAlias),this.pluginType.set(i.pluginType),this.loadHomebridgeConfig()):this.loading.set(!1)}).catch(()=>this.loading.set(!1))}loadHomebridgeConfig(){let e=this.plugin;e&&this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`).then(i=>{this.pluginConfig.set(i),this.canConfigure.set(!0),this.loading.set(!1),this.initializeValidationState(),this.pluginConfig().length?this.editBlock(0):(this.isFirstSave.set(!0),this.addBlock())})}saveCurrentBlock(){if(this.currentBlockIndex()!==null&&this.monacoEditor){let e=this.monacoEditor.getModel().getValue().trim(),i;e.charAt(0)==='"'&&e.charAt(e.length-1)==="]"&&(e=`{${e}}`);try{i=vi.default.parse(e)}catch(a){return console.error(a),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error")),!1}if(Array.isArray(i)||typeof i!="object")return this.$toastr.error(this.$translate.instant("plugins.config.must_be_object"),this.$translate.instant("toast.title_error")),!1;if(!i[this.pluginType()]&&Array.isArray(i[this.arrayKey])&&i[this.arrayKey].length&&Object.keys(i).length===1&&(i=i[this.arrayKey][0]),this.pluginType()==="accessory"&&(!i.name||typeof i.name!="string"))return this.$toastr.error(this.$translate.instant("plugins.config.name_property"),this.$translate.instant("toast.title_error")),i.name="",this.monacoEditor.getModel().setValue(JSON.stringify(i,null,4)),!1;let t=this.pluginConfig()[this.currentBlockIndex()];Object.keys(t).forEach(a=>delete t[a]),Object.assign(t,i),t[this.pluginType()]=this.pluginAlias()}return!0}initializeValidationState(){let e={};for(let i=0;i<this.pluginConfig().length;i+=1)e[i]=!0;this.formBlocksValid.set(e),this.updateOverallValidation()}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],decls:20,vars:16,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0"],[1,"text-center","primary-text"],[1,"alert","alert-warning","mb-0"],[1,"plugin-md",3,"data"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],[1,"btn","btn-primary"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],["ngbAccordion","",3,"closeOthers"],[1,"card",3,"ngbAccordionItem","collapsed","id"],[1,"mt-3"],["ngbAccordionHeader","",1,"card-header"],[1,"d-flex","align-items-center","justify-content-between"],[1,"m-0","py-2","ps-1"],["container","modal","placement","left","triggers","hover",1,"fa","fa-xl",3,"class","ngbTooltip","openDelay"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body","p-0",2,"height","400px"],[1,"flex-grow-1","h-100","w-100","mb-0","pb-0",3,"ngModelChange","onInit","options","ngModel"],["container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"ngbTooltip","openDelay"],["ngbAccordionToggle","","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2","me-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-edit"],["container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-trash"],["container","modal","placement","left","triggers","hover",1,"fa","fa-xl",3,"ngbTooltip","openDelay"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"class","ngbTooltip","openDelay"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-2"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"ngbTooltip","openDelay"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-plus"],[1,"btn","btn-primary",3,"click"]],template:function(i,t){if(i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),d(3),r(),l(4,"button",3),m(5,"translate"),V("click",function(){return t.closeModal()}),r()(),l(6,"div",4),u(7,Lo,2,0,"div",5),u(8,Uo,4,6,"div",6),u(9,Ro,2,3,"markdown",7),u(10,qo,4,2),r(),l(11,"div",8)(12,"div",9)(13,"button",10),V("click",function(){return t.closeModal()}),d(14),m(15,"translate"),r()(),v(16,"div",11),l(17,"div",12),u(18,Xo,5,5),u(19,Yo,3,3,"button",13),r()()()),i&2){let a,c;o(3),ge("",((a=t.pluginSignal())==null?null:a.displayName)||((a=t.pluginSignal())==null?null:a.name)," - ",t.pluginType()),o(),x("disabled",t.saveInProgress()),$("aria-label",g(5,12,"form.button_close")),o(3),_(t.loading()?7:-1),o(),_(!t.loading()&&!t.canConfigure()?8:-1),o(),_((c=t.schemaSignal())!=null&&c.headerDisplay?9:-1),o(),_(!t.loading()&&t.canConfigure()?10:-1),o(3),x("disabled",t.saveInProgress()),o(),B(" ",g(15,14,"form.button_close")," "),o(4),_(t.canConfigure()?18:-1),o(),_(t.canConfigure()?-1:19)}},dependencies:[it,tt,et,ve,Ye,Xe,oi,be,fe,he,Ze,Ie,Ee,Te,z,rt],styles:[".no-padding-card-body .card-body{padding:0!important} body.dark-mode .no-padding-card-body .card-body{background-color:#1e1e1e}.manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return n})();var bt=n=>({link:n}),xi=(n,s)=>({"green-text":n,"grey-text":s});function Zo(n,s){if(n&1){let e=E();l(0,"button",14),m(1,"translate"),V("click",function(){y(e);let t=p();return S(t.closeModal())}),r()}if(n&2){let e=p();x("disabled",e.saveInProgress()),$("aria-label",g(1,2,"form.button_close"))}}function ea(n,s){n&1&&(l(0,"div",6),v(1,"i",15),r())}function ta(n,s){n&1&&(l(0,"li"),d(1),m(2,"translate"),r()),n&2&&(o(),w(g(2,1,"child_bridge.bridges_paired_2")))}function ia(n,s){if(n&1&&(l(0,"li"),d(1),m(2,"translate"),r(),u(3,ta,3,3,"li")),n&2){let e,i=p(2);o(),w(g(2,2,"child_bridge.bridges_paired")),o(2),_(i.configBlocks().length===1&&!i.deviceInfo().get((e=i.configBlocks()[0]._bridge)==null?null:e.username)&&i.originalBridges().length===0?3:-1)}}function na(n,s){if(n&1&&(l(0,"option",30),d(1),r()),n&2){let e=s.$implicit,i=s.$index;x("value",i),o(),w(e.name||e.platform||e.accessory)}}function oa(n,s){if(n&1){let e=E();l(0,"ul",22)(1,"li",26),d(2),m(3,"translate"),r(),l(4,"li",24)(5,"label",27),d(6),m(7,"translate"),r(),l(8,"div",28)(9,"select",29),V("ngModelChange",function(t){y(e);let a=p(3);return a.selectedBlock.set(t),S(a.onBlockChange(t))}),ee(10,na,2,2,"option",30,Z),r()()()()}if(n&2){let e=p(3);o(2),w(g(3,3,"form.label.changes_kept")),o(4),B(" ",g(7,5,"accessories.plugin")," "),o(3),x("ngModel",e.selectedBlock()),o(),te(e.configBlocks())}}function aa(n,s){if(n&1&&d(0),n&2){let e=p().$implicit;ge(" ",e.name," \xB7 ",e.username," ")}}function ra(n,s){if(n&1&&d(0),n&2){let e=p().$implicit;B(" ",e.username," ")}}function la(n,s){if(n&1&&(l(0,"option",30),u(1,aa,1,2)(2,ra,1,1),r()),n&2){let e=s.$implicit;x("value",e.username),o(),_(e.name?1:2)}}function sa(n,s){if(n&1){let e=E();l(0,"li",24)(1,"label",31),d(2),m(3,"translate"),r(),l(4,"div",28)(5,"select",32,0),V("change",function(){y(e);let t=ze(6),a=p(3);return S(a.onLinkBridgeChange(t.value))}),l(7,"option",30),d(8),m(9,"translate"),r(),ee(10,la,3,2,"option",30,Z),r()()()}if(n&2){let e=p(3);o(2),w(g(3,2,"child_bridge.config.or_link")),o(6),w(g(9,4,"child_bridge.config.select_existing")),o(2),te(e.bridgesAvailableForLink())}}function da(n,s){n&1&&(l(0,"li",24)(1,"label",33),d(2,"Child Bridge"),r(),l(3,"div",34),d(4),m(5,"translate"),r()()),n&2&&(o(4),B(" ",g(5,1,"child_bridge.config.prevent")," "))}function ca(n,s){if(n&1){let e=E();l(0,"li",25)(1,"span",8),d(2),m(3,"translate"),r(),l(4,"div",35)(5,"input",36),V("change",function(){y(e);let t=p(3);return S(t.toggleExternalBridge(t.configBlocks()[t.selectedBlock()],!t.enabledBlocks()[t.selectedBlock()],t.selectedBlock()))}),r(),v(6,"label",37),r()()}if(n&2){let e=p(3);o(2),B(" ",g(3,4,e.currentlySelectedLink()?"child_bridge.config.or_link":"child_bridge.config.use")," "),o(3),x("id","toggleExternalBridgeInput_"+e.selectedBlock())("checked",e.enabledBlocks()[e.selectedBlock()]),o(),x("for","toggleExternalBridgeInput_"+e.selectedBlock())}}function ma(n,s){if(n&1&&(l(0,"li",24)(1,"label",33),d(2),m(3,"translate"),r(),l(4,"div",38),d(5),r()()),n&2){let e=p(3);o(2),w(g(3,2,"child_bridge.config.name")),o(3),B(" ",e.currentlySelectedLink().name," ")}}function pa(n,s){if(n&1&&(l(0,"li",24)(1,"label",33),d(2),m(3,"translate"),r(),l(4,"div",38),d(5),r()()),n&2){let e,i=p(3);o(2),w(g(3,2,"users.label_username")),o(3),B(" ",((e=i.currentlySelectedLink())==null?null:e.username)||((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username)," ")}}function ga(n,s){if(n&1&&(l(0,"li",24)(1,"label",33),d(2),m(3,"translate"),r(),l(4,"div",38),d(5),r()()),n&2){let e=p(3);o(2),w(g(3,2,"child_bridge.config.port")),o(3),B(" ",e.currentlySelectedLink().port," ")}}function ua(n,s){if(n&1){let e=E();l(0,"li",25)(1,"span",8),d(2),m(3,"translate"),l(4,"code"),d(5,"-D"),r()(),l(6,"div",35)(7,"input",50),m(8,"translate"),X("ngModelChange",function(t){y(e);let a=p(5);return Q(a.configBlocks()[a.selectedBlock()]._bridge.debugModeEnabled,t)||(a.configBlocks()[a.selectedBlock()]._bridge.debugModeEnabled=t),S(t)}),r(),v(9,"label",37),r()()}if(n&2){let e=p(5);o(2),B("",g(3,5,"child_bridge.config.debug")," "),o(5),x("id","homebridgeDebugMode_"+e.selectedBlock()),K("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.debugModeEnabled),$("aria-label",g(8,7,"settings.startup.debug")),o(2),x("for","homebridgeDebugMode_"+e.selectedBlock())}}function _a(n,s){if(n&1){let e=E();l(0,"li",24)(1,"label",33),d(2),m(3,"translate"),l(4,"span",41),d(5),m(6,"translate"),r(),v(7,"br")(8,"small",42),m(9,"translate"),r(),l(10,"div",43)(11,"input",44),V("input",function(t){let a;y(e);let c=p(4);return S(c.onScheduledRestartCronChange(t.target.value,(a=c.configBlocks()[c.selectedBlock()]._bridge)==null?null:a.username))}),r()()(),u(12,ua,10,9,"li",25),l(13,"li",24)(14,"label",33)(15,"span",45),d(16,"DEBUG"),r(),v(17,"br")(18,"small",46),m(19,"translate"),r(),l(20,"div",28)(21,"input",47),X("ngModelChange",function(t){y(e);let a=p(4);return Q(a.configBlocks()[a.selectedBlock()]._bridge.env.DEBUG,t)||(a.configBlocks()[a.selectedBlock()]._bridge.env.DEBUG=t),S(t)}),r()()(),l(22,"li",24)(23,"label",33)(24,"span",45),d(25,"NODE_OPTIONS"),r(),v(26,"br"),l(27,"small",48),d(28),m(29,"translate"),r()(),l(30,"div",28)(31,"input",49),X("ngModelChange",function(t){y(e);let a=p(4);return Q(a.configBlocks()[a.selectedBlock()]._bridge.env.NODE_OPTIONS,t)||(a.configBlocks()[a.selectedBlock()]._bridge.env.NODE_OPTIONS=t),S(t)}),r()()()}if(n&2){let e,i=p(4);o(2),B(" ",g(3,13,"settings.startup.scheduled_restart")," "),o(3),w(g(6,15,"common.labels.beta")),o(3),x("innerHtml",O(9,17,"settings.startup.scheduled_restart_desc",le(25,bt,i.linkCron)),se),o(3),Ue("letter-spacing","0.15em")("text-align","center"),x("value",i.getScheduledRestartCron((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username)),o(),_(i.canShowBridgeDebug()?12:-1),o(6),x("innerHTML",O(19,20,"settings.service().debug_tooltip",le(27,bt,i.linkDebug)),se),o(3),K("ngModel",i.configBlocks()[i.selectedBlock()]._bridge.env.DEBUG),o(7),w(g(29,23,"settings.service().node_tooltip")),o(3),K("ngModel",i.configBlocks()[i.selectedBlock()]._bridge.env.NODE_OPTIONS)}}function fa(n,s){if(n&1){let e=E();l(0,"li",24)(1,"label",33),d(2),m(3,"translate"),r(),l(4,"div",28)(5,"input",39),X("ngModelChange",function(t){y(e);let a=p(3);return Q(a.configBlocks()[a.selectedBlock()]._bridge.name,t)||(a.configBlocks()[a.selectedBlock()]._bridge.name=t),S(t)}),r()()(),l(6,"li",24)(7,"label",33),d(8),m(9,"translate"),r(),l(10,"div",28)(11,"input",40),m(12,"translate"),X("ngModelChange",function(t){y(e);let a=p(3);return Q(a.configBlocks()[a.selectedBlock()]._bridge.manufacturer,t)||(a.configBlocks()[a.selectedBlock()]._bridge.manufacturer=t),S(t)}),r()()(),l(13,"li",24)(14,"label",33),d(15),m(16,"translate"),r(),l(17,"div",28)(18,"input",40),m(19,"translate"),X("ngModelChange",function(t){y(e);let a=p(3);return Q(a.configBlocks()[a.selectedBlock()]._bridge.model,t)||(a.configBlocks()[a.selectedBlock()]._bridge.model=t),S(t)}),r()()(),l(20,"li",24)(21,"label",33),d(22),m(23,"translate"),r(),l(24,"div",28)(25,"input",40),m(26,"translate"),X("ngModelChange",function(t){y(e);let a=p(3);return Q(a.configBlocks()[a.selectedBlock()]._bridge.firmwareRevision,t)||(a.configBlocks()[a.selectedBlock()]._bridge.firmwareRevision=t),S(t)}),r()()(),u(27,_a,32,29)}if(n&2){let e=p(3);o(2),w(g(3,16,"child_bridge.config.name")),o(3),Re("is-invalid",e.getHapNameValidationError(e.selectedBlock())),K("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.name),o(3),w(g(9,18,"child_bridge.config.manufacturer")),o(3),x("placeholder",g(12,20,"form.optional")),K("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.manufacturer),o(4),w(g(16,22,"child_bridge.config.model")),o(3),x("placeholder",g(19,24,"form.optional")),K("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.model),o(4),w(g(23,26,"child_bridge.config.firmware")),o(3),Re("font-monospace",e.configBlocks()[e.selectedBlock()]._bridge.firmwareRevision),x("placeholder",g(26,28,"form.optional")),K("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.firmwareRevision),o(2),_(e.justInstalledSignal()?-1:27)}}function ha(n,s){n&1&&(l(0,"li",55)(1,"div",57)(2,"div",58)(3,"div")(4,"div",59),v(5,"i",60),r(),l(6,"div",61),d(7),m(8,"translate"),r()()()()()),n&2&&(o(7),w(g(8,1,"child_bridge.return_to_pair")))}function ba(n,s){n&1&&(l(0,"span"),d(1),m(2,"translate"),r()),n&2&&(o(),B(" \xB7 ",g(2,1,"status.code_scan")," "))}function Ca(n,s){if(n&1){let e=E();l(0,"li",25)(1,"span",8),d(2),m(3,"translate"),r(),l(4,"div",35)(5,"input",36),m(6,"translate"),V("change",function(){let t;y(e);let a=p(5);return S(a.toggleHideUnpairing((t=a.configBlocks()[a.selectedBlock()]._bridge)==null?null:t.username,"hap"))}),r(),v(7,"label",37),r()()}if(n&2){let e,i=p(5);o(2),w(g(3,5,"child_bridge.config.hide_pairing_alert")),o(3),x("id","toggleHideHapUnpairing_"+i.selectedBlock())("checked",i.isUnpairingHidden((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username,"hap")),$("aria-label",g(6,7,"child_bridge.config.hide_pairing_alert")),o(2),x("for","toggleHideHapUnpairing_"+i.selectedBlock())}}function va(n,s){if(n&1&&(l(0,"li",55)(1,"div",57),v(2,"app-qrcode",62),l(3,"p",63),d(4),r(),l(5,"p",64),v(6,"i",65),d(7),m(8,"translate"),u(9,ba,3,3,"span"),r()()(),u(10,Ca,8,9,"li",25)),n&2){let e,i,t,a,c,h,f=p(4);o(2),x("data",(e=f.deviceInfo().get((e=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:e.username))==null?null:e._setupCode),o(2),B(" ",(i=f.deviceInfo().get((i=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:i.username))==null?null:i.pincode," "),o(2),q(Se(9,xi,(t=f.deviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))==null?null:t._isPaired,!((t=f.deviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))!=null&&t._isPaired))),o(),B(" ",g(8,7,(a=f.deviceInfo().get((a=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:a.username))!=null&&a._isPaired?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),o(2),_((c=f.deviceInfo().get((c=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:c.username))!=null&&c._isPaired?-1:9),o(),_((h=f.deviceInfo().get((h=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:h.username))!=null&&h._isPaired?-1:10)}}function xa(n,s){n&1&&(l(0,"span"),d(1),m(2,"translate"),r()),n&2&&(o(),B(" \xB7 ",g(2,1,"status.code_scan")," "))}function ya(n,s){if(n&1){let e=E();l(0,"li",25)(1,"span",8),d(2),m(3,"translate"),r(),l(4,"div",35)(5,"input",36),m(6,"translate"),V("change",function(){let t;y(e);let a=p(7);return S(a.toggleHideUnpairing((t=a.configBlocks()[a.selectedBlock()]._bridge)==null?null:t.username,"matter"))}),r(),v(7,"label",37),r()()}if(n&2){let e,i=p(7);o(2),w(g(3,5,"child_bridge.config.hide_pairing_alert")),o(3),x("id","toggleHideMatterUnpairing_"+i.selectedBlock())("checked",i.isUnpairingHidden((e=i.configBlocks()[i.selectedBlock()]._bridge)==null?null:e.username,"matter")),$("aria-label",g(6,7,"child_bridge.config.hide_pairing_alert")),o(2),x("for","toggleHideMatterUnpairing_"+i.selectedBlock())}}function Sa(n,s){if(n&1&&(l(0,"li",55)(1,"div",57),v(2,"app-qrcode",62),l(3,"p",63),d(4),r(),l(5,"p",64),v(6,"i",65),d(7),m(8,"translate"),u(9,xa,3,3,"span"),r()()(),u(10,ya,8,9,"li",25)),n&2){let e,i,t,a,c,h,f=p(6);o(2),x("data",(e=f.matterDeviceInfo().get((e=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:e.username))==null?null:e.setupUri),o(2),B(" ",(i=f.matterDeviceInfo().get((i=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:i.username))==null?null:i.pin," "),o(2),q(Se(9,xi,(t=f.matterDeviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))==null?null:t.commissioned,!((t=f.matterDeviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))!=null&&t.commissioned))),o(),B(" ",g(8,7,(a=f.matterDeviceInfo().get((a=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:a.username))!=null&&a.commissioned?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),o(2),_((c=f.matterDeviceInfo().get((c=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:c.username))!=null&&c.commissioned?-1:9),o(),_((h=f.matterDeviceInfo().get((h=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:h.username))!=null&&h.commissioned?-1:10)}}function Ba(n,s){n&1&&(l(0,"li",55)(1,"div",57)(2,"div",70)(3,"div")(4,"div",59),v(5,"i",60),r(),l(6,"div",61),d(7),m(8,"translate"),r()()()()()),n&2&&(o(7),w(g(8,1,"child_bridge.return_to_pair")))}function wa(n,s){if(n&1){let e=E();l(0,"li",67)(1,"ul",68)(2,"li"),d(3),m(4,"translate"),r(),l(5,"li"),d(6),m(7,"translate"),r()()(),u(8,Sa,11,12),u(9,Ba,9,3,"li",55),l(10,"li",24)(11,"label",33),d(12),m(13,"translate"),r(),l(14,"div",28)(15,"input",69),X("ngModelChange",function(t){y(e);let a=p(5);return Q(a.configBlocks()[a.selectedBlock()]._bridge.matter.port,t)||(a.configBlocks()[a.selectedBlock()]._bridge.matter.port=t),S(t)}),r()()()}if(n&2){let e,i,t=p(5);o(3),w(g(4,8,"child_bridge.config.matter_note_1")),o(3),w(g(7,10,"child_bridge.config.matter_note_2")),o(2),_((e=t.matterDeviceInfo().get((e=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:e.username))!=null&&e.setupUri?8:-1),o(),_(t.matterDeviceInfo().get((i=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:i.username)&&!((i=t.matterDeviceInfo().get((i=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:i.username))!=null&&i.setupUri)?9:-1),o(3),w(g(13,12,"child_bridge.config.port")),o(3),Re("is-invalid",t.getMatterPortValidationError(t.selectedBlock())),K("ngModel",t.configBlocks()[t.selectedBlock()]._bridge.matter.port)}}function ka(n,s){if(n&1){let e=E();l(0,"ul",23)(1,"li",25)(2,"label",33),v(3,"i",66),d(4),m(5,"translate"),l(6,"span",41),d(7),m(8,"translate"),r()(),l(9,"div",35)(10,"input",36),V("change",function(){y(e);let t=p(4);return S(t.toggleMatterBridge(t.configBlocks()[t.selectedBlock()],!t.matterEnabledBlocks()[t.selectedBlock()],t.selectedBlock()))}),r(),v(11,"label",37),r()(),u(12,wa,16,14),r()}if(n&2){let e,i=p(4);o(4),B(" ",g(5,6,"matter_bridge.config.use")," "),o(3),w(g(8,8,"common.labels.beta")),o(3),x("id","toggleMatterBridgeInput_"+i.selectedBlock())("checked",i.matterEnabledBlocks()[i.selectedBlock()]),o(),x("for","toggleMatterBridgeInput_"+i.selectedBlock()),o(),_(i.matterEnabledBlocks()[i.selectedBlock()]&&((e=i.configBlocks()[i.selectedBlock()]._bridge)!=null&&e.matter)&&((e=i.configBlocks()[i.selectedBlock()]._bridge)!=null&&e.username)?12:-1)}}function Ma(n,s){if(n&1){let e=E();l(0,"ul",23)(1,"li",25)(2,"span",8),v(3,"i",51),d(4),m(5,"translate"),r(),l(6,"div",52),v(7,"input",53)(8,"label",54),r()(),u(9,ha,9,3,"li",55),u(10,va,11,12),l(11,"li",24)(12,"label",33),d(13),m(14,"translate"),r(),l(15,"div",28)(16,"input",56),X("ngModelChange",function(t){y(e);let a=p(3);return Q(a.configBlocks()[a.selectedBlock()]._bridge.port,t)||(a.configBlocks()[a.selectedBlock()]._bridge.port=t),S(t)}),r()()()(),u(17,ka,13,10,"ul",23)}if(n&2){let e,i,t=p(3);o(4),B(" ",g(5,12,"child_bridge.config.enable_hap")," "),o(3),x("id","toggleHapInput_"+t.selectedBlock())("checked",!0)("disabled",!0),o(),x("for","toggleHapInput_"+t.selectedBlock()),o(),_((e=t.configBlocks()[t.selectedBlock()]._bridge)!=null&&e.username&&t.deviceInfo().get((e=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:e.username)===!1?9:-1),o(),_(t.deviceInfo().get((i=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:i.username)?10:-1),o(3),w(g(14,14,"child_bridge.config.port")),o(3),Re("is-invalid",t.getHapPortValidationError(t.selectedBlock())),K("ngModel",t.configBlocks()[t.selectedBlock()]._bridge.port),o(),_(t.isMatterSupported&&!t.configBlocks()[t.selectedBlock()].accessory?17:-1)}}function Va(n,s){if(n&1&&(u(0,oa,12,7,"ul",22),l(1,"ul",23),u(2,sa,12,6,"li",24),u(3,da,6,3,"li",24),u(4,ca,7,6,"li",25),u(5,ma,6,4,"li",24),u(6,pa,6,4,"li",24),u(7,ga,6,4,"li",24),u(8,fa,28,30),r(),u(9,Ma,18,16)),n&2){let e,i,t,a,c=p(2);_(c.configBlocks().length>1?0:-1),o(2),_(!((e=c.configBlocks()[c.selectedBlock()]._bridge)!=null&&e.username)&&c.bridgesAvailableForLink().length&&!c.currentBridgeHasLinks()?2:-1),o(),_(c.currentBridgeHasLinks()?3:-1),o(),_(c.currentBridgeHasLinks()?-1:4),o(),_(c.currentlySelectedLink()?5:-1),o(),_((c.currentlySelectedLink()||(i=c.configBlocks()[c.selectedBlock()]._bridge)!=null&&i.username)&&(c.currentlySelectedLink()||!c.currentBridgeHasLinks())?6:-1),o(),_(c.currentlySelectedLink()?7:-1),o(),_(!c.currentlySelectedLink()&&((t=c.configBlocks()[c.selectedBlock()]._bridge)!=null&&t.username)?8:-1),o(),_(!c.currentlySelectedLink()&&((a=c.configBlocks()[c.selectedBlock()]._bridge)!=null&&a.username)?9:-1)}}function Ea(n,s){n&1&&(d(0),m(1,"translate")),n&2&&B(" ",g(1,1,"child_bridge.confirm_delete_2")," ")}function Ia(n,s){if(n&1&&(l(0,"li"),v(1,"i",72),d(2),l(3,"span",48),d(4," \xB7 "),r(),l(5,"span",73),d(6),r()()),n&2){let e,i=s.$implicit,t=p(3);o(2),B(" ",i.bridgeName||((e=t.deviceInfo().get(i.id))==null?null:e.displayName)," "),o(4),w(i.id)}}function Ta(n,s){if(n&1&&(l(0,"li"),v(1,"i",74),d(2),l(3,"span",48),d(4," \xB7 "),r(),l(5,"span",73),d(6),r()()),n&2){let e=s.$implicit;o(2),B(" ",e.name," "),o(4),w(e.username)}}function $a(n,s){if(n&1&&(l(0,"ngb-alert",19)(1,"p"),d(2),m(3,"translate"),u(4,Ea,2,3),r(),l(5,"div",10)(6,"ul",71),ee(7,Ia,7,2,"li",null,Z),ee(9,Ta,7,2,"li",null,Z),r()()()),n&2){let e=p(2);x("dismissible",!1),o(2),B(" ",g(3,3,"child_bridge.confirm_delete_1")," "),o(2),_(e.deletingPairedBridge()?4:-1),o(3),te(e.deleteBridges()),o(2),te(e.deleteMatterBridges())}}function Pa(n,s){n&1&&(l(0,"ngb-alert",20),d(1),m(2,"translate"),r()),n&2&&(x("dismissible",!1),o(),w(g(2,2,"child_bridge.must_configure_plugin")))}function Na(n,s){if(n&1){let e=E();l(0,"ngb-alert",21)(1,"div",17),d(2),m(3,"translate"),m(4,"translate"),r(),l(5,"button",75),V("click",function(){y(e);let t=p(2);return S(t.openFullConfigEditor())}),d(6),m(7,"translate"),r()()}n&2&&(x("dismissible",!1),o(2),ge(" ",g(3,4,"plugins.settings.message_manual_config_required")," ",g(4,6,"plugins.settings.message_consult_documentation")," "),o(4),B(" ",g(7,8,"plugins.settings.label_open_config_editor")," "))}function Da(n,s){if(n&1){let e=E();l(0,"div",10)(1,"img",16),V("error",function(){y(e);let t=p();return S(t.handleIconError())}),r()(),l(2,"ul",17),v(3,"li",18),m(4,"translate"),u(5,ia,4,4),r(),u(6,Va,10,9),u(7,$a,11,5,"ngb-alert",19),u(8,Pa,3,4,"ngb-alert",20),u(9,Na,8,10,"ngb-alert",21)}if(n&2){let e=p();o(),x("src",e.plugin.icon,St),o(2),x("innerHTML",O(4,7,"child_bridge.about",le(10,bt,e.linkChildBridges)),se),o(2),_(e.configBlocks().length?5:-1),o(),_(e.canConfigure()&&e.configBlocks().length?6:-1),o(),_(e.deleteBridges().length||e.deleteMatterBridges().length?7:-1),o(),_(!e.configBlocks().length&&e.canConfigure?8:-1),o(),_(e.canConfigure()?-1:9)}}function Aa(n,s){if(n&1){let e=E();l(0,"button",76),V("click",function(){y(e);let t=p();return S(t.closeModal())}),d(1),m(2,"translate"),r()}if(n&2){let e=p();x("disabled",e.saveInProgress()),o(),B(" ",g(2,2,"form.button_close")," ")}}function Fa(n,s){n&1&&v(0,"i",78)}function La(n,s){if(n&1){let e=E();l(0,"button",77),V("click",function(){y(e);let t=p();return S(t.save())}),d(1),m(2,"translate"),u(3,Fa,1,0,"i",78),r()}if(n&2){let e=p();x("disabled",e.saveInProgress()||e.hasValidationErrors),o(),B(" ",g(2,3,"form.button_save")," "),o(2),_(e.saveInProgress()?3:-1)}}function Ua(n,s){if(n&1){let e=E();l(0,"button",79),V("click",function(){y(e);let t=p();return S(t.closeModal())}),d(1),m(2,"translate"),r()}n&2&&(o(),B(" ",g(2,1,"form.button_close")," "))}function Ra(n,s){n&1&&(d(0),m(1,"translate")),n&2&&B(" ",g(1,1,"form.button_save")," ")}function Ha(n,s){n&1&&v(0,"i",78)}function ja(n,s){if(n&1){let e=E();l(0,"button",77),V("click",function(){y(e);let t=p(2);return S(t.save())}),u(1,Ra,2,3),u(2,Ha,1,0,"i",78),r()}if(n&2){let e=p(2);x("disabled",e.saveInProgress()||e.loading()||e.hasValidationErrors),o(),_(e.saveInProgress()?-1:1),o(),_(e.saveInProgress()?2:-1)}}function Oa(n,s){if(n&1){let e=E();l(0,"button",81),V("click",function(){y(e);let t=p(2);return S(t.openPluginConfig())}),d(1),m(2,"translate"),r()}n&2&&(o(),B(" ",g(2,1,"plugins.button_settings")," "))}function za(n,s){if(n&1&&(u(0,ja,3,3,"button",11),u(1,Oa,3,3,"button",80)),n&2){let e=p();_(e.configBlocks().length?0:-1),o(),_(e.configBlocks().length?-1:1)}}var yi=(()=>{class n{$activeModal=C(W);$api=C(D);$modal=C(re);$plugin=C(xe);$router=C(ce);$settings=C(H);$toastr=C(U);$translate=C(L);_plugin=b(null,{});_schema=b(null,{});_justInstalled=b(!1,{});set plugin(e){this._plugin.set(e)}get plugin(){return this._plugin()}set schema(e){this._schema.set(e)}get schema(){return this._schema()}set justInstalled(e){this._justInstalled.set(e)}get justInstalled(){return this._justInstalled()}pluginSignal=this._plugin.asReadonly();schemaSignal=this._schema.asReadonly();justInstalledSignal=this._justInstalled.asReadonly();loading=b(!0,{});canConfigure=b(!0,{});saveInProgress=b(!1,{});configBlocks=b([],{});selectedBlock=b("0",{});isPlatform=b(!1,{});enabledBlocks=b({},{});matterEnabledBlocks=b({},{});matterExplicitlyDisabledBeforeChildBridge=new Set;bridgeConfigs=new Map;originalScheduledRestartCrons=new Map;originalHideAlerts=new Map;bridgeCache=b(new Map,{});originalBridges=b([],{});deviceInfo=b(new Map,{});matterBridgeCache=b(new Map,{});originalMatterBridges=b([],{});matterDeviceInfo=b(new Map,{});deleteMatterBridges=b([],{});canShowBridgeDebug=b(!1,{});deleteBridges=b([],{});deletingPairedBridge=b(!1,{});accessoryBridgeLinks=b([],{});bridgesAvailableForLink=b([],{});currentlySelectedLink=b(null,{});currentBridgeHasLinks=b(!1,{});isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");defaultIcon="assets/hb-icon.png";linkChildBridges='<a href="https://github.com/homebridge/homebridge/wiki/Child-Bridges" target="_blank"><i class="fas fa-external-link-alt primary-text"></i></a>';linkDebug='<a href="https://github.com/homebridge/homebridge-config-ui-x/wiki/Debug-Common-Values" target="_blank"><i class="fa fa-external-link-alt primary-text"></i></a>';linkCron='<a href="https://crontab.guru/" target="_blank" rel="noopener noreferrer"><i class="fa fa-external-link-alt primary-text"></i></a>';ngOnInit(){this.initialize()}handleIconError(){let e=this.pluginSignal();e&&(e.icon=this.defaultIcon)}onBlockChange(e){this.selectedBlock.set(e);let i=this.configBlocks(),t=this.enabledBlocks();this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(c=>c.index===e)||null),this.currentBridgeHasLinks.set(this.accessoryBridgeLinks().some(c=>c.usesIndex===e));let a=[];if(i[Number(e)].accessory)for(let[c,h]of Array.from(this.bridgeCache().entries()))t[c]&&!this.deleteBridges().some(f=>f.id===h.username)&&c<Number(e)&&a.push({index:c.toString(),usesIndex:e,name:h.name,port:h.port,username:h.username});this.bridgesAvailableForLink.set(a)}onLinkBridgeChange(e){if(e){let i=this.configBlocks(),t=this.selectedBlock(),a=i.findIndex(h=>h._bridge?.username===e);this.accessoryBridgeLinks.update(h=>[...h,{index:t,usesIndex:a.toString(),name:this.bridgeCache().get(a)?.name,port:this.bridgeCache().get(a)?.port,username:e}]),this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(h=>h.index===t)||null),this.enabledBlocks.update(h=>A(N({},h),{[Number(t)]:!0}));let c=i[Number(t)];c._bridge={username:e}}}initialize(){return M(this,null,function*(){try{yield Promise.all([this.getPluginType(),this.loadPluginConfig(),this.loadBridgeConfigs()]),this.canShowBridgeDebug.set(this.$settings.isFeatureEnabled("childBridgeDebugMode"))}catch(e){console.error("Failed to initialize:",e);let i=e instanceof Error?e.message:"Failed to initialize component";this.$toastr.error(i,this.$translate.instant("toast.title_error"))}finally{this.loading.set(!1)}})}getPluginType(){return M(this,null,function*(){let e=this.pluginSignal();if(e)try{let i=yield this.$api.get(`/plugins/alias/${encodeURIComponent(e.name)}`);this.isPlatform.set(i.pluginType==="platform")}catch(i){console.error(i);let t=i instanceof Error?i.message:"Failed to load plugin type";this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.close()}})}loadPluginConfig(){return M(this,null,function*(){let e=this.pluginSignal();if(e)try{let i=yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`);this.configBlocks.set(i);for(let[f,k]of i.entries()){if(k._bridge&&this.enabledBlocks.update(P=>A(N({},P),{[f]:!0})),k._bridge&&k._bridge.username){let P=Array.from(this.bridgeCache().entries()).find(([,R])=>R.username===k._bridge.username),me=P?P[0]:-1,j=P?P[1]:void 0;if(j)k._bridge.env={},this.accessoryBridgeLinks.update(R=>[...R,{index:f.toString(),usesIndex:me.toString(),name:j.name,port:j.port,username:k._bridge.username}]);else{if(k._bridge.env=k._bridge.env||{},this.bridgeCache.update(R=>new Map(R).set(f,k._bridge)),yield this.getDeviceInfo(k._bridge.username),!k._bridge.name){let R=this.deviceInfo().get(k._bridge.username);R&&(k._bridge.name=R.displayName)}this.originalBridges.update(R=>[...R,JSON.parse(JSON.stringify(k._bridge))])}}k._bridge&&k._bridge.matter&&(k.accessory?delete k._bridge.matter:(this.matterEnabledBlocks.update(P=>A(N({},P),{[f]:!0})),this.matterBridgeCache.update(P=>new Map(P).set(f,{port:k._bridge.matter.port})),this.originalMatterBridges.update(P=>[...P,{port:k._bridge.matter.port}]),k._bridge.username&&(yield this.getMatterCommissioningInfo(k._bridge.username))))}this.justInstalledSignal()&&this.bridgeCache().size===0&&i.forEach((f,k)=>{this.enabledBlocks.update(P=>A(N({},P),{[k]:!0})),this.toggleExternalBridge(f,!0,k.toString())}),this.accessoryBridgeLinks().find(f=>f.username===this.bridgeCache().get(Number(this.selectedBlock()))?.username)&&this.currentBridgeHasLinks.set(!0);let a=this.selectedBlock(),c=this.enabledBlocks();this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(f=>f.index===a)||null);let h=[];if(i[Number(a)]?.accessory)for(let[f,k]of Array.from(this.bridgeCache().entries()))c[f]&&!this.deleteBridges().some(P=>P.id===k.username)&&f<Number(a)&&h.push({index:f.toString(),usesIndex:a,name:k.name,port:k.port,username:k.username});this.bridgesAvailableForLink.set(h)}catch(i){this.canConfigure.set(!1),console.error(i)}})}toggleExternalBridge(e,i,t){return M(this,null,function*(){let a=this.pluginSignal();if(a){if(i){let c=this.bridgeCache().get(Number(t)),h=this.matterBridgeCache().get(Number(t));if(e._bridge={username:c?c.username:this.generateUsername(),port:yield this.getUnusedPort(),name:c?.name||this.sanitizeBridgeName(a.displayName||a.name),model:c?.model,manufacturer:c?.manufacturer,firmwareRevision:c?.firmwareRevision,debugModeEnabled:c?.debugModeEnabled,env:c?.env||{}},h&&!this.matterExplicitlyDisabledBeforeChildBridge.has(Number(t))&&(e._bridge.matter={port:h.port??(yield this.getUnusedMatterPort())},this.matterEnabledBlocks.update(f=>A(N({},f),{[Number(t)]:!0})),e._bridge.username&&(this.originalMatterBridges().some(k=>k.port===h.port)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update(k=>new Map(k).set(e._bridge.username,{port:h.port}))),e._bridge.username)){let f=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");this.deleteMatterBridges.update(k=>k.filter(P=>P.identifier!==f))}this.deleteBridges().some(f=>f.id===e._bridge.username)&&this.deleteBridges.update(f=>f.filter(k=>k.id!==e._bridge.username)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.bridgeCache.update(f=>new Map(f).set(Number(t),e._bridge)),yield this.getDeviceInfo(e._bridge.username),this.enabledBlocks.update(f=>A(N({},f),{[Number(t)]:!0}))}else{if(this.enabledBlocks.update(c=>A(N({},c),{[Number(t)]:!1})),e._bridge?.matter&&this.matterEnabledBlocks()[Number(t)]&&this.matterBridgeCache.update(c=>new Map(c).set(Number(t),{port:e._bridge.matter.port})),this.accessoryBridgeLinks().some(c=>c.index===t))this.accessoryBridgeLinks.update(c=>c.filter(h=>h.index!==t)),this.currentlySelectedLink.set(null);else{let c=this.originalBridges().find(h=>h.username===e._bridge.username);if(c&&!this.deleteBridges().some(h=>h.id===e._bridge.username)){let h=this.deviceInfo().get(e._bridge.username);this.deleteBridges.update(f=>[...f,{id:e._bridge.username,bridgeName:e._bridge.name||c.displayName,paired:h?h._isPaired:!1}])}if(e._bridge?.username){let h=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");this.deleteMatterBridges().some(k=>k.identifier===h)&&this.matterExplicitlyDisabledBeforeChildBridge.add(Number(t))}if(e._bridge?.matter&&e._bridge.username&&this.originalMatterBridges().some(f=>f.port===e._bridge.matter.port)){let f=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");if(!this.deleteMatterBridges().some(k=>k.identifier===f)){let k=e._bridge.name||a.displayName||a.name;this.deleteMatterBridges.update(P=>[...P,{username:e._bridge.username,identifier:f,name:k}])}}}this.matterEnabledBlocks.update(c=>A(N({},c),{[Number(t)]:!1})),delete e._bridge}this.deletingPairedBridge.set(this.deleteBridges().some(c=>c.paired))}})}get hasValidationErrors(){let e=this.configBlocks(),i=this.enabledBlocks();for(let[t,a]of e.entries())if(i[t]&&a._bridge?.username&&(this.getHapNameValidationError(t.toString())||this.getHapPortValidationError(t.toString())))return!0;return!1}getUnusedPort(){return M(this,null,function*(){try{return(yield this.$api.get("/server/port/new")).port}catch{return Math.floor(Math.random()*30001+3e4)}})}getUnusedMatterPort(){return M(this,null,function*(){try{return(yield this.$api.get("/server/port/new/matter")).port}catch{return Math.floor(Math.random()*12+5530)}})}getDeviceInfo(e){return M(this,null,function*(){try{let i=yield this.$api.get(`/server/pairings/${e.replace(/:/g,"")}`);this.deviceInfo.update(t=>new Map(t).set(e,i))}catch(i){console.error(i),this.deviceInfo.update(t=>new Map(t).set(e,!1))}})}sanitizeBridgeName(e){if(!e)return e;let i=e.replace(/[^\p{L}\p{N} ']/gu,"");return i=i.replace(/^[ ']+|[ ']+$/g,""),i=i.replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu,""),i}getMatterCommissioningInfo(e){return M(this,null,function*(){try{let t=(yield this.$api.get("/status/homebridge/child-bridges")).find(a=>a.username===e);t&&t.matterSetupUri?this.matterDeviceInfo.update(a=>new Map(a).set(e,{setupUri:t.matterSetupUri,pin:t.matterPin,serialNumber:t.matterSerialNumber,commissioned:t.matterCommissioned,deviceCount:t.matterDeviceCount,port:t.matterConfig?.port})):this.matterDeviceInfo.update(a=>new Map(a).set(e,{port:t?.matterConfig?.port}))}catch(i){console.error(i),this.matterDeviceInfo.update(t=>new Map(t).set(e,{}))}})}toggleMatterBridge(e,i,t){return M(this,null,function*(){let a=this.pluginSignal();if(a){if(e.accessory){this.matterEnabledBlocks.update(c=>A(N({},c),{[Number(t)]:!1}));return}if(i){let c=this.matterBridgeCache().get(Number(t));e._bridge||(e._bridge={env:{}});let h;if(c?.port?h=c.port:h=yield this.getUnusedMatterPort(),e._bridge.matter={port:h},this.matterBridgeCache.update(f=>new Map(f).set(Number(t),{port:h})),e._bridge.username){let f=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");this.deleteMatterBridges.update(P=>P.filter(me=>me.identifier!==f)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.originalMatterBridges().some(P=>P.port===h)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update(P=>new Map(P).set(e._bridge.username,{port:h}))}}else{this.matterEnabledBlocks.update(h=>A(N({},h),{[Number(t)]:!1}));let c=this.originalMatterBridges().some(h=>e._bridge?.matter&&h.port===e._bridge.matter.port);if(e._bridge&&e._bridge.matter&&(this.matterBridgeCache.update(h=>new Map(h).set(Number(t),{port:e._bridge.matter.port})),delete e._bridge.matter),e._bridge?.username&&(this.matterDeviceInfo.update(h=>new Map(h).set(e._bridge.username,null)),c)){let h=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),f=e._bridge.name||a.displayName||a.name;this.deleteMatterBridges.update(k=>[...k,{username:e._bridge.username,identifier:h,name:f}])}e._bridge&&Object.keys(e._bridge).length===0&&delete e._bridge}}})}getMatterPortValidationError(e){let i=this.configBlocks()[Number(e)],t=i._bridge?.matter?.port;if(!t&&t!==0)return!1;if(typeof t!="number"||!Number.isInteger(t)||t<1024||t>65535||[5353,8080,8443].includes(t))return!0;let a=i._bridge?.port;return a&&t===a}getHapNameValidationError(e){let i=this.configBlocks()[Number(e)];if(!i._bridge?.name)return!1;let t=i._bridge.name;return!/^[\p{L}\p{N}][\p{L}\p{N} ']*[\p{L}\p{N}]$/u.test(t)}getHapPortValidationError(e){let i=this.configBlocks(),t=this.enabledBlocks(),a=i[Number(e)],c=a._bridge?.port;if(!c&&c!==0)return!1;if(typeof c!="number"||!Number.isInteger(c)||c<1025||c>65533)return!0;for(let[f,k]of i.entries())if(f.toString()!==e&&t[f]&&k._bridge?.port===c)return!0;let h=a._bridge?.matter?.port;return h&&c===h}normalizeMatterConfig(e){e._bridge?.matter&&(!e._bridge.matter.port&&e._bridge.matter.port!==0&&(e._bridge.matter.port=void 0),e._bridge.matter.port===void 0&&delete e._bridge.matter)}save(){return M(this,null,function*(){let e=this.pluginSignal();if(e){this.saveInProgress.set(!0);try{let i=this.configBlocks(),t=this.matterEnabledBlocks();for(let[j,R]of i.entries()){if(R._bridge?.username){if(this.getHapNameValidationError(j.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(j.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[j]&&this.getMatterPortValidationError(j.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(R)}yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}`,i);for(let j of this.deleteBridges())try{yield this.$api.delete(`/server/pairings/${j.id.replace(/:/g,"")}`)}catch(R){console.error(R),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}let a=this.deleteMatterBridges().filter(j=>!this.deleteBridges().some(R=>R.id===j.username));for(let j of a)try{let R=j.username.replace(/:/g,"");yield this.$api.delete(`/server/pairings/${R}/matter`)}catch(R){console.error(R),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}let c=this.hasScheduledRestartCronChanged(),h=this.hasHideAlertsChanged(),f=this.hasBridgeConfigChanged(),k=this.deleteBridges().length>0||this.deleteMatterBridges().length>0,P=!c&&!h&&!f&&!k,me=h&&!c&&!f&&!k;for(let[j,R]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(st=>st.id===j))continue;let ye=this.originalHideAlerts.get(j),De=!!R.hideHapAlert,Ae=!!R.hideMatterAlert,vt=ye?!!ye.hideHapAlert:!1,Fe=ye?!!ye.hideMatterAlert:!1;try{De!==vt&&(yield this.saveHideAlert(j,"hap",De)),Ae!==Fe&&(yield this.saveHideAlert(j,"matter",Ae))}catch(st){console.error(st)}}for(let[j,R]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(Fe=>Fe.id===j))continue;let ye=R.scheduledRestartCron||null,De=this.originalScheduledRestartCrons.get(j)||null,Ae=ye===""?null:ye;if(Ae!==(De===""?null:De))try{yield this.saveScheduledRestartCron(j,Ae)}catch(Fe){console.error(Fe)}}if(c)try{yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{})}catch(j){console.error(j)}P?this.$activeModal.close():me?this.$activeModal.close("refresh"):(this.$activeModal.close(),this.$modal.open(pe,{size:"lg",backdrop:"static"}))}catch(i){console.error(i);let t=i instanceof Error?i.message:"Failed to save configuration";this.$toastr.error(t,this.$translate.instant("toast.title_error"))}finally{this.saveInProgress.set(!1)}}})}openPluginConfig(){let e=this.pluginSignal();e&&(this.$activeModal.close(),this.$plugin.settings({name:e.name,settingsSchema:!0,links:{}}))}generateUsername(){let e="0123456789ABCDEF",i="0E:";for(let t=0;t<5;t+=1)i+=e.charAt(Math.round(Math.random()*15)),i+=e.charAt(Math.round(Math.random()*15)),t!==4&&(i+=":");return i}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close("Dismiss")}getMatterBridgeName(e){let i=this.configBlocks().find(t=>t._bridge?.username===e);return i?._bridge?.name?i._bridge.name:i.name||i.platform||i.accessory}loadBridgeConfigs(){return M(this,null,function*(){let e=this.$settings.env.bridges||[];this.bridgeConfigs.clear(),this.originalScheduledRestartCrons.clear(),this.originalHideAlerts.clear();for(let i of e){let t=i.username.toUpperCase();this.bridgeConfigs.set(t,i),this.originalScheduledRestartCrons.set(t,i.scheduledRestartCron||null),this.originalHideAlerts.set(t,{hideHapAlert:i.hideHapAlert,hideMatterAlert:i.hideMatterAlert})}})}isUnpairingHidden(e,i){let t=this.bridgeConfigs.get(e.toUpperCase());return t?i==="hap"?!!t.hideHapAlert:!!t.hideMatterAlert:!1}toggleHideUnpairing(e,i){let t=e.toUpperCase(),c=!this.isUnpairingHidden(e,i),h=this.bridgeConfigs.get(t);h||(h={username:t},this.bridgeConfigs.set(t,h)),i==="hap"?c?h.hideHapAlert=!0:delete h.hideHapAlert:c?h.hideMatterAlert=!0:delete h.hideMatterAlert}getScheduledRestartCron(e){return e&&this.bridgeConfigs.get(e.toUpperCase())?.scheduledRestartCron||""}onScheduledRestartCronChange(e,i){if(!i)return;let t=i.toUpperCase(),a=this.bridgeConfigs.get(t);a||(a={username:t},this.bridgeConfigs.set(t,a));let c=e?.trim();c?a.scheduledRestartCron=c:delete a.scheduledRestartCron}hasScheduledRestartCronChanged(){for(let[e,i]of this.bridgeConfigs.entries()){let t=i.scheduledRestartCron||null,a=this.originalScheduledRestartCrons.get(e)||null;if((t===""?null:t)!==(a===""?null:a))return!0}return!1}hasBridgeConfigChanged(){let e=this.configBlocks();if(e.length!==this.originalBridges().length)return!0;for(let[,i]of e.entries()){if(!i._bridge)continue;let t=this.originalBridges().find(k=>k.username===i._bridge.username);if(!t||i._bridge.name!==t.name||i._bridge.port!==t.port||i._bridge.model!==t.model||i._bridge.manufacturer!==t.manufacturer||i._bridge.firmwareRevision!==t.firmwareRevision||i._bridge.debugModeEnabled!==t.debugModeEnabled)return!0;let a=i._bridge.env||{},c=t.env||{};if(a.DEBUG!==c.DEBUG||a.NODE_OPTIONS!==c.NODE_OPTIONS)return!0;let h=!!i._bridge.matter,f=!!t.matter;if(h!==f||h&&f&&i._bridge.matter.port!==t.matter.port)return!0}return!1}hasHideAlertsChanged(){for(let[e,i]of this.bridgeConfigs.entries()){let t=this.originalHideAlerts.get(e),a=!!i.hideHapAlert,c=!!i.hideMatterAlert,h=t?!!t.hideHapAlert:!1,f=t?!!t.hideMatterAlert:!1;if(a!==h||c!==f)return!0}return!1}updateLocalBridgeConfig(e,i){let t=e.toUpperCase(),a=this.$settings.env.bridges||[],c=a.findIndex(h=>h.username.toUpperCase()===t);c!==-1?Object.assign(a[c],i):a.push(N({username:t},i)),this.$settings.env.bridges=a}saveHideAlert(e,i,t){return M(this,null,function*(){let a=e.toUpperCase(),c=i==="hap"?`/config-editor/ui/bridges/${encodeURIComponent(a)}/hide-hap-alert`:`/config-editor/ui/bridges/${encodeURIComponent(a)}/hide-matter-alert`;try{yield this.$api.put(c,{value:t}),this.updateLocalBridgeConfig(a,{hideHapAlert:t})}catch(h){throw console.error(`Failed to update hide ${i} alert:`,h),h}})}saveScheduledRestartCron(e,i){return M(this,null,function*(){let t=e.toUpperCase();try{if(yield this.$api.put(`/config-editor/ui/bridges/${encodeURIComponent(t)}/scheduled-restart-cron`,{value:i||null}),i)this.updateLocalBridgeConfig(t,{scheduledRestartCron:i});else{let a=this.$settings.env.bridges||[],c=a.findIndex(h=>h.username.toUpperCase()===t);c!==-1&&(delete a[c].scheduledRestartCron,this.$settings.env.bridges=a)}}catch(a){throw console.error("Failed to update scheduled restart cron:",a),a}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],decls:16,vars:8,consts:[["bridgeLinkSelect",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"disabled"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-center"],["type","button",1,"btn","btn-primary",3,"disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],["alt","Plugin Icon",1,"mb-3","plugin-icon-card",3,"error","src"],[1,"mb-3"],[3,"innerHTML"],["type","error",1,"mt-3","mb-0",3,"dismissible"],["type","info",3,"dismissible"],["type","info",1,"mb-0",3,"dismissible"],[1,"list-group","list-group-box","mb-0"],[1,"list-group","list-group-box","mt-3","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"list-group-item","text-center","grey-text","small"],["for","bridgeSelect",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["id","bridgeSelect",1,"custom-select",3,"ngModelChange","ngModel"],[3,"value"],["for","bridgeLink",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridgeLink",1,"custom-select",3,"change"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox",1,"rendux-input",3,"change","id","checked"],[1,"rendux-label",3,"for"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text","font-monospace"],["type","text",1,"form-control","custom-input",3,"ngModelChange","ngModel"],["type","text",1,"form-control","custom-input",3,"ngModelChange","placeholder","ngModel"],[1,"badge","badge-primary","ms-1"],[1,"grey-text",3,"innerHtml"],[1,"text-start","text-md-end","w-100","w-md-50","d-flex","flex-column","align-items-end"],["type","text","placeholder","mm hh dd MM ww","maxlength","30",1,"form-control","custom-input","font-monospace",3,"input","value"],[1,"font-monospace"],[1,"grey-text",3,"innerHTML"],["type","text","placeholder","HAP-NodeJS:Advertiser,HAP-NodeJS:Service",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],[1,"grey-text"],["type","text","placeholder","--max-old-space-size=512 --max-http-header-size=8192",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],["type","checkbox",1,"rendux-input",3,"ngModelChange","id","ngModel"],[1,"fas","fa-xl","fa-hap","me-2","my-2"],[1,"text-end","grey-text","d-flex","align-items-center",2,"opacity","0.5","cursor","not-allowed"],["type","checkbox",1,"rendux-input",2,"pointer-events","none",3,"id","checked","disabled"],[1,"rendux-label",2,"cursor","not-allowed",3,"for"],[1,"list-group-item","text-center"],["type","number","min","1025","max","65533",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],[1,"w-100","d-flex","flex-column","text-center"],[1,"mx-auto","d-flex","align-items-center","justify-content-center","qr-code-placeholder","primary-text","p-3"],[1,"text-center","grey-text"],[1,"fas","fa-qrcode","fa-2x","mb-2","primary-text"],[1,"text-center","small","grey-text"],[1,"mx-auto",2,"width","175px","height","175px",3,"data"],[1,"mx-auto","mt-3","mb-1","font-monospace"],[1,"grey-text","mx-auto","small","mb-1",2,"max-width","400px"],[1,"fas","fa-link"],[1,"fas","fa-xl","fa-matter","me-2","my-2"],[1,"list-group-item"],[1,"grey-text","small"],["type","number","min","1024","max","65535","placeholder","e.g. 5540",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],[1,"mx-auto","d-flex","align-items-center","justify-content-center","qr-code-placeholder","primary-text"],[1,"d-inline-block","text-start","mb-0"],[1,"fas","fa-lg","fa-hap","me-1"],[1,"grey-text","font-monospace"],[1,"fas","fa-lg","fa-matter","me-1"],[1,"btn","btn-primary","mb-0",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click"]],template:function(i,t){i&1&&(l(0,"div",1)(1,"div",2)(2,"h5",3),d(3),r(),u(4,Zo,2,4,"button",4),r(),l(5,"div",5),u(6,ea,2,0,"div",6),u(7,Da,10,12),r(),l(8,"div",7)(9,"div",8),u(10,Aa,3,4,"button",9),r(),l(11,"div",10),u(12,La,4,5,"button",11),u(13,Ua,3,3,"button",12),r(),l(14,"div",13),u(15,za,2,2),r()()()),i&2&&(o(3),w(t.plugin.displayName||t.plugin.name),o(),_(t.justInstalledSignal()?-1:4),o(2),_(t.loading()?6:-1),o(),_(t.loading()?-1:7),o(3),_(t.canConfigure()&&!t.justInstalledSignal()?10:-1),o(2),_(t.justInstalledSignal()?12:-1),o(),_(t.canConfigure()?-1:13),o(2),_(t.canConfigure()&&!t.justInstalledSignal()?15:-1))},dependencies:[be,Ke,Qe,Pt,Dt,Me,Ge,fe,Lt,Ft,he,Ve,Yt,z],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}.qr-code-placeholder[_ngcontent-%COMP%]{width:175px;height:175px;border:2px solid currentColor;border-radius:8px;background-color:#f8f9fa;padding:20px} body.dark-mode .qr-code-placeholder, [class*=config-ui-x-dark-mode] .qr-code-placeholder{background-color:#1a1a1a}"]})}return n})();var Ct=Y(nt(),1);var lt=()=>["homebridge","homebridge-config-ui-x"],Si=(n,s,e)=>({pluginName:n,minVersion:s,installedVersion:e}),Wa=(n,s,e)=>({minVersion:n,installedVersion:s,latestVersion:e,packageName:"Homebridge"}),qa=()=>({packageName:"Homebridge"}),Ja=(n,s,e)=>({minVersion:n,installedVersion:s,latestVersion:e,packageName:"Homebridge UI"}),Ga=()=>({packageName:"Homebridge UI"});function Ka(n,s){if(n&1&&(l(0,"li",14)(1,"div",17),v(2,"i",18),r(),l(3,"div",19),d(4),m(5,"translate"),r()()),n&2){let e=p(2);o(4),B(" ",O(5,1,"plugins.compat.node_too_low",ae(4,Si,e.pluginSignal().displayName,e.nodeMinVersion,e.nodeInstalledVersion))," ")}}function Qa(n,s){if(n&1&&(l(0,"li",14)(1,"div",17),v(2,"i",18),r(),l(3,"div",19),d(4),m(5,"translate"),r()()),n&2){let e=p(2);o(4),B(" ",O(5,1,"plugins.compat.hb_too_low",ae(4,Si,e.pluginSignal().displayName,e.hbMinVersion,e.hbInstalledVersion))," ")}}function Xa(n,s){if(n&1&&(l(0,"div",11),v(1,"i",12),r(),l(2,"ul",13),u(3,Ka,6,8,"li",14),u(4,Qa,6,8,"li",14),r(),l(5,"ngb-alert",15)(6,"p",16),d(7),m(8,"translate"),r()()),n&2){let e=p();o(),q(Et("",e.actionSignal()==="install"?"far fa-arrow-alt-circle-down":e.actionSignal()==="update"?"far fa-arrow-alt-circle-up":"fas fa-code-compare"," primary-text")),o(2),_(e.isValidNodeSignal()?-1:3),o(),_(e.isValidHbSignal()?-1:4),o(),x("dismissible",!1),o(2),w(g(8,7,"common.phrases.are_you_sure"))}}function Ya(n,s){if(n&1&&(l(0,"div",11),v(1,"i",20),r(),l(2,"ul",13)(3,"li",14)(4,"div",17),v(5,"i",18),r(),l(6,"div",19),d(7),m(8,"translate"),r()()(),l(9,"ngb-alert",15)(10,"p",21),d(11),m(12,"translate"),r(),l(13,"p",16)(14,"a",22),d(15),m(16,"translate"),v(17,"i",23),r()()()),n&2){let e=p();o(7),B(" ",O(8,4,"plugins.compat.hb_node_too_low",ae(12,Wa,e.nodeMinVersion,e.nodeInstalledVersion,e.pluginSignal().latestVersion))," "),o(2),x("dismissible",!1),o(2),w(O(12,7,"plugins.compat.node_first",ne(16,qa))),o(4),B(" ",g(16,10,"plugins.compat.node_link")," ")}}function Za(n,s){if(n&1&&(l(0,"div",11),v(1,"i",20),r(),l(2,"ul",13)(3,"li",14)(4,"div",17),v(5,"i",18),r(),l(6,"div",19),d(7),m(8,"translate"),r()()(),l(9,"ngb-alert",15)(10,"p",21),d(11),m(12,"translate"),r(),l(13,"p",16)(14,"a",22),d(15),m(16,"translate"),v(17,"i",23),r()()()),n&2){let e=p();o(7),B(" ",O(8,4,"plugins.compat.hb_node_too_low",ae(12,Ja,e.nodeMinVersion,e.nodeInstalledVersion,e.pluginSignal().latestVersion))," "),o(2),x("dismissible",!1),o(2),w(O(12,7,"plugins.compat.node_first",ne(16,Ga))),o(4),B(" ",g(16,10,"plugins.compat.node_link")," ")}}function er(n,s){if(n&1){let e=E();l(0,"button",24),V("click",function(){y(e);let t=p();return S(t.dismissModal())}),d(1),m(2,"translate"),r()}n&2&&(o(),B(" ",g(2,1,"form.button_close")," "))}function tr(n,s){if(n&1){let e=E();l(0,"button",24),V("click",function(){y(e);let t=p();return S(t.dismissModal())}),d(1),m(2,"translate"),r()}n&2&&(o(),B(" ",g(2,1,"form.button_close")," "))}function ir(n,s){if(n&1){let e=E();l(0,"button",25),V("click",function(){y(e);let t=p();return S(t.closeModal())}),d(1),m(2,"translate"),r()}n&2&&(o(),B(" ",g(2,1,"form.button_continue")," "))}var Bi=(()=>{class n{$activeModal=C(W);$settings=C(H);_plugin=b(null,{});_isValidNode=b(!1,{});_isValidHb=b(!1,{});_action=b(null,{});set plugin(e){this._plugin.set(e)}get plugin(){return this._plugin()}set isValidNode(e){this._isValidNode.set(e)}get isValidNode(){return this._isValidNode()}set isValidHb(e){this._isValidHb.set(e)}get isValidHb(){return this._isValidHb()}set action(e){this._action.set(e)}get action(){return this._action()}pluginSignal=this._plugin.asReadonly();isValidNodeSignal=this._isValidNode.asReadonly();isValidHbSignal=this._isValidHb.asReadonly();actionSignal=this._action.asReadonly();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,Ct.minVersion)(e.updateEngines?.node),this.nodeInstalledVersion=this.$settings.env.nodeVersion,this.hbMinVersion=(0,Ct.minVersion)(e.updateEngines?.homebridge),this.hbInstalledVersion=this.$settings.env.homebridgeVersion}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close(!0)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],decls:18,vars:16,consts:[[1,"modal-content",2,"min-height","300px"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger"],[1,"text-center","mb-3"],[2,"font-size","75px"],[1,"list-group","list-group-box","mb-3","text-start"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],["type","warning",1,"mb-0",3,"dismissible"],[1,"text-center","mb-0"],[1,"me-3"],[1,"fas","fa-exclamation-circle","orange-text","fa-xl"],[1,"text-start","flex-grow-1"],[1,"fab","fa-node-js","primary-text",2,"font-size","75px"],[1,"text-center","mb-1"],["href","https://homebridge.io/w/JTKEF","target","_blank","rel","noopener noreferrer"],[1,"fa","fa-external-link-alt"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click"]],template:function(i,t){i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),d(3),m(4,"translate"),r(),l(5,"button",3),m(6,"translate"),V("click",function(){return t.dismissModal()}),r()(),l(7,"div",4),u(8,Xa,9,9),u(9,Ya,18,17),u(10,Za,18,17),r(),l(11,"div",5)(12,"div",6),u(13,er,3,3,"button",7),r(),l(14,"div",8),u(15,tr,3,3,"button",7),r(),l(16,"div",9),u(17,ir,3,3,"button",10),r()()()),i&2&&(o(3),w(g(4,8,"plugins.compat.title")),o(2),$("aria-label",g(6,10,"form.button_close")),o(3),_(t.pluginSignal()&&!ne(12,lt).includes(t.pluginSignal().name)?8:-1),o(),_(t.pluginSignal()&&t.pluginSignal().name==="homebridge"?9:-1),o(),_(t.pluginSignal()&&t.pluginSignal().name==="homebridge-config-ui-x"?10:-1),o(3),_(t.pluginSignal()&&!ne(13,lt).includes(t.pluginSignal().name)?13:-1),o(2),_(t.pluginSignal()&&ne(14,lt).includes(t.pluginSignal().name)?15:-1),o(2),_(t.pluginSignal()&&!ne(15,lt).includes(t.pluginSignal().name)?17:-1))},dependencies:[Ve,z],encapsulation:2})}return n})();var wi=Y(He(),1);var ki=(()=>{class n{$api=C(D);$toastr=C(U);$translate=C(L);downloadDumpFile(){this.$api.get("/plugins/custom-plugins/homebridge-deconz/dump-file",{observe:"response",responseType:"blob"}).then(e=>{(0,wi.saveAs)(e.body,"homebridge-deconz.json.gz")}).catch(e=>{console.error(e),this.$toastr.error(this.$translate.instant("plugins.settings.deconz.dump_no_exist"),this.$translate.instant("toast.title_error"))})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["app-homebridge-deconz"]],decls:3,vars:0,consts:[["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-download"]],template:function(i,t){i&1&&(I(0,"button",0),ie("click",function(){return t.downloadDumpFile()}),J(1,"i",1),d(2,` Download Dump File
|
|
14
|
+
`),T())},encapsulation:2})}return n})();var Mi=Y(He(),1);var Vi=(()=>{class n{$api=C(D);$translate=C(L);$toastr=C(U);downloadDumpFile(){this.$api.get("/plugins/custom-plugins/homebridge-hue/dump-file",{observe:"response",responseType:"blob"}).then(e=>{(0,Mi.saveAs)(e.body,"homebridge-hue.json.gz")}).catch(e=>{console.error(e),this.$toastr.error(this.$translate.instant("plugins.settings.hue.dump_no_exist"),this.$translate.instant("toast.title_error"))})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["app-homebridge-hue"]],decls:3,vars:0,consts:[["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-download"]],template:function(i,t){i&1&&(I(0,"button",0),ie("click",function(){return t.downloadDumpFile()}),J(1,"i",1),d(2,` Download Dump File
|
|
15
|
+
`),T())},encapsulation:2})}return n})();var Ei=(n,s,e)=>({"fa-circle-check green-text":n,"fa-circle-exclamation red-text":s,"fa-circle-exclamation orange-text":e});function nr(n,s){if(n&1&&(v(0,"markdown",5),m(1,"interpolateMd")),n&2){let e=p();x("data",g(1,1,e.schemaSignal().headerDisplay))}}function or(n,s){if(n&1){let e=E();l(0,"button",31),m(1,"translate"),V("click",function(){y(e);let t=p().$implicit,a=p(2);return S(a.removeBlock(t.__uuid__))}),v(2,"i",32),r()}n&2&&x("ngbTooltip",g(1,2,"form.button_delete"))("openDelay",150)}function ar(n,s){if(n&1){let e=E();l(0,"div",19)(1,"div",20)(2,"div",21)(3,"h5",22),d(4),r(),l(5,"div",23),u(6,or,3,4,"button",24),l(7,"button",25),m(8,"translate"),v(9,"i",26),r(),v(10,"i",27),m(11,"translate"),r()()(),l(12,"div",28)(13,"div",29)(14,"app-schema-form",30),X("dataChange",function(t){let a=y(e).$implicit;return Q(a.config,t)||(a.config=t),S(t)}),V("isValid",function(t){let a=y(e).$index,c=p(2);return S(c.onIsValid(t,a))}),r()()()()}if(n&2){let e=s.$implicit,i=s.$index,t=p(2);x("ngbAccordionItem",e.__uuid__)("collapsed",t.show()!==e.__uuid__)("id",e.__uuid__),o(4),w(e.name),o(2),_(t.pluginSignal().name!=="homebridge-config-ui-x"&&t.show()===e.__uuid__?6:-1),o(),x("ngbTooltip",g(8,13,"form.button_edit"))("openDelay",150),o(3),q(ae(17,Ei,t.formBlocksValid()[i],t.strictValidation()&&!t.formBlocksValid()[i],!t.strictValidation()&&!t.formBlocksValid()[i])),x("ngbTooltip",g(11,15,t.formBlocksValid()[i]?"form.label_valid":t.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150),o(4),x("configSchema",t.schemaSignal()),K("data",e.config)}}function rr(n,s){if(n&1){let e=E();l(0,"div",18),V("show",function(t){y(e);let a=p();return S(a.blockShown(t))})("hide",function(t){y(e);let a=p();return S(a.blockHidden(t))}),ee(1,ar,15,21,"div",19,Z),r()}if(n&2){let e=p();x("closeOthers",!0),o(),te(e.pluginConfig())}}function lr(n,s){n&1&&v(0,"app-homebridge-deconz")}function sr(n,s){n&1&&v(0,"app-homebridge-hue")}function dr(n,s){if(n&1){let e=E();l(0,"div",7)(1,"app-schema-form",30),X("dataChange",function(t){y(e);let a=p();return Q(a.pluginConfig()[0].config,t)||(a.pluginConfig()[0].config=t),S(t)}),V("isValid",function(t){y(e);let a=p();return S(a.onIsValid(t,0))}),r(),u(2,lr,1,0,"app-homebridge-deconz"),u(3,sr,1,0,"app-homebridge-hue"),r()}if(n&2){let e=p();o(),x("configSchema",e.schemaSignal()),K("data",e.pluginConfig()[0].config),o(),_(e.pluginSignal().name==="homebridge-deconz"?2:-1),o(),_(e.pluginSignal().name==="homebridge-hue"?3:-1)}}function cr(n,s){if(n&1&&(l(0,"div",8),v(1,"markdown",5),m(2,"interpolateMd"),r()),n&2){let e=p();o(),x("data",g(2,1,e.schemaSignal().footerDisplay))}}function mr(n,s){if(n&1&&(v(0,"i",33),m(1,"translate")),n&2){let e=p();q(ae(6,Ei,e.formIsValid(),e.strictValidation()&&!e.formIsValid(),!e.strictValidation()&&!e.formIsValid())),x("ngbTooltip",g(1,4,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function pr(n,s){if(n&1){let e=E();l(0,"button",34),V("click",function(){y(e);let t=p();return S(t.addBlock())}),v(1,"i",35),r()}}function gr(n,s){n&1&&(l(0,"span"),d(1),m(2,"translate"),r()),n&2&&(o(),w(g(2,1,"form.button_save")))}function ur(n,s){n&1&&v(0,"i",17)}var Ii=(()=>{class n{$activeModal=C(W);$api=C(D);$cb=C($e);$plugin=C(xe);$settings=C(H);$toastr=C(U);$translate=C(L);_plugin=b(null,{});_schema=b(null,{});set plugin(e){this._plugin.set(e)}get plugin(){return this._plugin()}set schema(e){this._schema.set(e)}get schema(){return this._schema()}pluginSignal=this._plugin.asReadonly();schemaSignal=this._schema.asReadonly();pluginConfig=b([],{});show=b("",{});saveInProgress=b(!1,{});formBlocksValid=b({},{});formIsValid=b(!0,{});strictValidation=b(!1,{});pluginAlias=b("",{});pluginType=b("platform",{});form={};isFirstSave=b(!1,{});ngOnInit(){let e=this._schema(),i=this._plugin();if(!e||!i){console.error("PluginConfigComponent: schema or plugin not provided"),this.$activeModal.dismiss("Missing required data");return}this.pluginAlias.set(e.pluginAlias),this.pluginType.set(e.pluginType),this.strictValidation.set(e.strictValidation),this.loadPluginConfig()}save(){return M(this,null,function*(){this.saveInProgress.set(!0);let e=this.pluginConfig().map(t=>t.config),i=this._plugin();if(!i){this.saveInProgress.set(!1);return}try{let t=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(i.name)}`,e);if(this.saveInProgress.set(!1),i.name==="homebridge-config-ui-x")this.$settings.getAppSettings().catch(()=>{});else if(this.isFirstSave()&&this.$settings.env.recommendChildBridges&&t[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(i,!0);return}this.$activeModal.close(),yield this.$cb.openCorrectRestartModalForPlugin(i.name)}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1)}})}blockShown(e){this.show.set(e);let i=this.pluginConfig();for(let t of i)t.name=t.config.name||t.name}blockHidden(e){this.show()===e&&this.show.set("")}addBlock(){let e=gt(),i=this._schema();this.pluginConfig.update(t=>[...t,{__uuid__:e,name:i.pluginAlias,config:{[this.pluginType()]:i.pluginAlias}}]),this.formBlocksValid.update(t=>A(N({},t),{[this.pluginConfig().length-1]:!1})),this.blockShown(e)}removeBlock(e){let i=this.pluginConfig().findIndex(t=>t.__uuid__===e);this.pluginConfig.update(t=>t.filter(a=>a.__uuid__!==e)),this.formBlocksValid.update(t=>{let a=N({},t);return delete a[i],a}),Object.keys(this.formBlocksValid()).length||this.formIsValid.set(!0)}onIsValid(e,i){this.formBlocksValid.update(t=>A(N({},t),{[i]:e})),this.formIsValid.set(Object.values(this.formBlocksValid()).every(t=>t))}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close()}loadPluginConfig(){return M(this,null,function*(){let e=this._plugin(),i=this._schema();if(!(!e||!i))try{let a=(yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`)).map(c=>({__uuid__:gt(),name:c.name||i.pluginAlias,config:c}));this.pluginConfig.set(a),this.pluginConfig().length?this.show.set(this.pluginConfig()[0].__uuid__):(this.isFirstSave.set(!0),this.addBlock()),e.name==="homebridge-hue"&&this.pluginConfig().length&&this.homebridgeHueFix(this.pluginConfig()[0].config)}catch(t){console.error(t);let a=t?.error?.message||this.$translate.instant("plugins.config.load_error");this.$toastr.error(a,this.$translate.instant("toast.title_error"))}})}homebridgeHueFix(e){let i=this._schema();if(i&&(i.schema.properties.users={type:"object",properties:{}},!(!e.users||typeof e.users!="object")))for(let t of Object.keys(e.users))i.schema.properties.users.properties[t]={type:"string"}}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],decls:23,vars:18,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0"],[1,"plugin-md",3,"data"],["ngbAccordion","",3,"closeOthers"],[1,"card","card-body"],[1,"mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"class","ngbTooltip","openDelay"],["type","button","data-dismiss","modal",1,"btn","btn-elegant","me-2"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],["ngbAccordion","",3,"show","hide","closeOthers"],[1,"card",3,"ngbAccordionItem","collapsed","id"],["ngbAccordionHeader","",1,"card-header"],[1,"d-flex","align-items-center","justify-content-between"],[1,"m-0"],[1,"d-flex","align-items-center"],["container","modal","placement","left","triggers","hover",1,"btn","btn-danger","ms-2",3,"ngbTooltip","openDelay"],["ngbAccordionToggle","","container","modal","placement","left","triggers","hover",1,"btn","btn-primary","ms-2","me-2",3,"ngbTooltip","openDelay"],[1,"fa","fa-edit"],["container","modal","placement","left","triggers","hover",1,"fa","fa-xl",3,"ngbTooltip","openDelay"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body"],[3,"dataChange","isValid","configSchema","data"],["container","modal","placement","left","triggers","hover",1,"btn","btn-danger","ms-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-trash"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"ngbTooltip","openDelay"],["type","button","data-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-plus"]],template:function(i,t){i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),d(3),r(),l(4,"button",3),m(5,"translate"),V("click",function(){return t.dismissModal()}),r()(),l(6,"div",4),u(7,nr,2,3,"markdown",5),u(8,rr,3,1,"div",6),u(9,dr,4,4,"div",7),u(10,cr,3,3,"div",8),r(),l(11,"div",9)(12,"div",10)(13,"button",11),V("click",function(){return t.closeModal()}),d(14),m(15,"translate"),r()(),v(16,"div",12),l(17,"div",13),u(18,mr,2,10,"i",14),u(19,pr,2,0,"button",15),l(20,"button",16),V("click",function(){return t.save()}),u(21,gr,3,3,"span"),u(22,ur,1,0,"i",17),r()()()()),i&2&&(o(3),w(t.pluginSignal().displayName||t.pluginSignal().name),o(),x("disabled",t.saveInProgress()),$("aria-label",g(5,14,"form.button_close")),o(3),_(t.schemaSignal().headerDisplay?7:-1),o(),_(t.pluginConfig().length&&!t.schemaSignal().singular?8:-1),o(),_(t.pluginConfig().length&&t.schemaSignal().singular?9:-1),o(),_(t.schemaSignal().footerDisplay?10:-1),o(3),x("disabled",t.saveInProgress()),o(),B(" ",g(15,16,"form.button_close")," "),o(4),_(t.schemaSignal().singular?18:-1),o(),_(t.schemaSignal().singular?-1:19),o(),x("disabled",t.saveInProgress()||!t.formIsValid()&&t.strictValidation()),o(),_(t.saveInProgress()?-1:21),o(),_(t.saveInProgress()?22:-1))},dependencies:[Ie,Ee,Te,it,tt,et,ve,Ye,Xe,at,ki,Vi,Ze,z,rt],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return n})();var _r=(n,s)=>({"btn-danger":n,"btn-elegant":s}),fr=(n,s,e)=>({"fa-broom":n,"fa-undo":s,"fa-spinner fa-pulse":e});function hr(n,s){n&1&&(I(0,"div",12),J(1,"i",13),T(),I(2,"p",14),d(3),m(4,"translate"),T()),n&2&&(o(3),w(g(4,1,"reset.bridge_accessories.empty")))}function br(n,s){if(n&1&&J(0,"i",26)(1,"i",27),n&2){let e=p().$implicit;Ue("opacity",e._protocol==="matter"&&e._matterOnly?"0.25":"1"),o(),Ue("opacity",e._protocol==="matter"?"1":"0.25")}}function Cr(n,s){n&1&&J(0,"i",20)}function vr(n,s){if(n&1){let e=E();I(0,"li",18)(1,"span",19),u(2,br,2,4)(3,Cr,1,0,"i",20),T(),I(4,"span",21),d(5),J(6,"br"),I(7,"small",22)(8,"span",23),d(9),T()()(),I(10,"button",24),m(11,"translate"),ie("click",function(){let t=y(e).$implicit,a=p(2);return S(a.toggleList(t._id,t._protocol))}),J(12,"i",25),T()()}if(n&2){let e=s.$implicit,i=p(2);o(2),_(i.isMatterSupported?2:3),o(3),B(" ",e.name," "),o(4),w(e._username),o(),q(Se(11,_r,!i.isInList(e._id,e._protocol),i.isInList(e._id,e._protocol))),oe("disabled",i.clicked()),$("aria-label",g(11,9,"form.button_delete")),o(2),q(ae(14,fr,!i.isInList(e._id,e._protocol),i.isInList(e._id,e._protocol)&&!i.clicked(),i.isInList(e._id,e._protocol)&&i.clicked()))}}function xr(n,s){if(n&1&&(I(0,"div",12),J(1,"i",15),T(),I(2,"ul",16)(3,"li"),d(4),m(5,"translate"),T(),I(6,"li"),d(7),m(8,"translate"),T()(),I(9,"ul",17),ee(10,vr,13,18,"li",18,Z),T()),n&2){let e=p();o(4),w(g(5,2,"reset.bridge_accessories.list_1")),o(3),w(g(8,4,"reset.clear_cache_single.list_3")),o(3),te(e.pairings())}}function yr(n,s){if(n&1){let e=E();I(0,"button",28),ie("click",function(){y(e);let t=p();return S(t.dismissModal())}),d(1),m(2,"translate"),T()}if(n&2){let e=p();oe("disabled",e.clicked()),o(),B(" ",g(2,2,"form.button_close")," ")}}function Sr(n,s){if(n&1){let e=E();I(0,"button",29),ie("click",function(){y(e);let t=p();return S(t.dismissModal())}),d(1),m(2,"translate"),T()}n&2&&(o(),B(" ",g(2,1,"form.button_close")," "))}function Br(n,s){if(n&1&&d(0),n&2){let e=p(3);B(" (",e.toDelete().length,") ")}}function wr(n,s){if(n&1&&(d(0),m(1,"translate"),u(2,Br,1,1)),n&2){let e=p(2);B(" ",g(1,2,"form.button_reset")," "),o(2),_(e.toDelete().length>0?2:-1)}}function kr(n,s){n&1&&J(0,"i",31)}function Mr(n,s){if(n&1){let e=E();I(0,"button",30),ie("click",function(){y(e);let t=p();return S(t.cleanBridges())}),u(1,wr,3,4),u(2,kr,1,0,"i",31),T()}if(n&2){let e=p();oe("disabled",!e.toDelete().length||e.clicked()),o(),_(e.clicked()?-1:1),o(),_(e.clicked()?2:-1)}}var Ti=(()=>{class n{$activeModal=C(W);$api=C(D);$router=C(ce);$settings=C(H);$toastr=C(U);$translate=C(L);_childBridges=b([],{});set childBridges(e){this._childBridges.set(e)}get childBridges(){return this._childBridges()}childBridgesSignal=this._childBridges.asReadonly();clicked=b(!1,{});pairings=b([],{});toDelete=b([],{});isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");ngOnInit(){this.loadPairings()}toggleList(e,i){let t=this.toDelete();t.some(a=>a.id===e&&a.protocol===i)?this.toDelete.set(t.filter(a=>a.id!==e||a.protocol!==i)):this.toDelete.update(a=>[...a,{id:e,protocol:i}])}isInList(e,i){return this.toDelete().some(t=>t.id===e&&t.protocol===i)}cleanBridges(){return M(this,null,function*(){this.clicked.set(!0);try{yield this.$api.delete("/server/pairings/accessories",{body:this.toDelete()}),this.$toastr.success(this.$translate.instant("reset.accessory_ind.done"),this.$translate.instant("toast.title_success")),this.$activeModal.close(),this.$router.navigate(["/restart"],{queryParams:{restarting:!0}})}catch(e){this.clicked.set(!1),console.error(e);let i=e instanceof Error?e.message:"Failed to clean bridges";this.$toastr.error(i,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}loadPairings(){return M(this,null,function*(){try{let e=yield this.$api.get("/server/pairings"),i=this.childBridgesSignal().length>0?this.childBridgesSignal()[0].plugin:null,t=e.filter(h=>h._category==="bridge"&&!h._main&&this.childBridgesSignal().find(f=>f.username===h._username)).sort((h,f)=>h.name.localeCompare(f.name)),a=e.filter(h=>h._matterOnly&&h._plugin===i).sort((h,f)=>h.name.localeCompare(f.name)),c=[];for(let h of t)c.push(A(N({},h),{_protocol:"hap",_displayName:h.name})),this.isMatterSupported&&h._matter&&c.push(A(N({},h),{_protocol:"matter",_displayName:h.name}));if(this.isMatterSupported)for(let h of a)c.push(A(N({},h),{_protocol:"matter",_displayName:h.name}));this.pairings.set(c)}catch(e){console.error(e);let i=e instanceof Error?e.message:"Failed to load pairings";this.$toastr.error(i,this.$translate.instant("toast.title_error")),this.$activeModal.close()}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],decls:17,vars:12,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"disabled"],[1,"text-center","mb-3"],[1,"fas","fa-circle-check","primary-text",2,"font-size","75px"],[1,"mb-0","text-center"],[1,"fas","fa-broom","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"me-3"],[1,"fas","fa-lg","fa-hap"],[1,"flex-grow-1"],[1,"grey-text"],[1,"font-monospace"],[1,"btn","btn-danger","m-0","ms-3",3,"click","disabled"],[1,"fas"],[1,"fas","fa-lg","fa-hap","me-2"],[1,"fas","fa-lg","fa-matter"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"]],template:function(i,t){i&1&&(I(0,"div",0)(1,"div",1)(2,"h5",2),d(3),m(4,"translate"),T(),I(5,"button",3),m(6,"translate"),ie("click",function(){return t.dismissModal()}),T()(),I(7,"div",4),u(8,hr,5,3),u(9,xr,12,6),T(),I(10,"div",5)(11,"div",6),u(12,yr,3,4,"button",7),T(),I(13,"div",8),u(14,Sr,3,3,"button",9),T(),I(15,"div",10),u(16,Mr,3,3,"button",11),T()()()),i&2&&(o(3),w(g(4,8,"child_bridge.reset_accessories")),o(2),oe("disabled",t.clicked()),$("aria-label",g(6,10,"form.button_close")),o(3),_(t.pairings().length===0?8:-1),o(),_(t.pairings().length>0?9:-1),o(3),_(t.pairings().length>0?12:-1),o(2),_(t.pairings().length===0?14:-1),o(2),_(t.pairings().length>0?16:-1))},dependencies:[z],encapsulation:2})}return n})();var Pi=Y(qt(),1),Ni=Y(Jt(),1),Di=Y(Gt(),1),Ai=Y(He(),1);var Vr=n=>({prefix:n}),Er=n=>({link:n}),$i=(n,s,e,i)=>({"fa-circle-o":n,"fa-spinner fa-pulse":s,"fa-check-circle green-text":e,"fa-times-circle red-text":i}),Ir=(n,s,e)=>({"fa-circle-o":n,"fa-spinner fa-pulse":s,"fa-times-circle red-text":e});function Tr(n,s){n&1&&(I(0,"li"),d(1),m(2,"translate"),T()),n&2&&(o(),w(g(2,1,"plugins.manage.scoped.process")))}function $r(n,s){n&1&&(J(0,"li",8),m(1,"translate"),I(2,"li"),d(3),m(4,"translate"),T()),n&2&&(oe("innerHTML",g(1,2,"plugins.manage.scoped.windows"),se),o(3),w(g(4,4,"plugins.manage.manual_update_command")))}function Pr(n,s){if(n&1&&(I(0,"pre",9),d(1),T()),n&2){let e=p();o(),We(`hb-service stop
|
|
16
|
+
npm install -g `,e.pluginSignal().newHbScope.to,"@",e.pluginSignal().newHbScope.switch,`
|
|
17
|
+
npm uninstall -g `,e.pluginSignal().newHbScope.from,`
|
|
18
|
+
hb-service start`)}}function Nr(n,s){if(n&1&&(I(0,"div",10)(1,"ul",18)(2,"li"),J(3,"i",19),d(4),m(5,"translate"),I(6,"span",20),d(7),T()(),I(8,"li"),J(9,"i",19),d(10),m(11,"translate"),I(12,"span",20),d(13),T()(),I(14,"li"),J(15,"i",19),d(16),m(17,"translate"),T()()()),n&2){let e=p();o(3),q(ke(17,$i,!e.installing()&&!e.installed()&&!e.failure(),e.installing(),e.installed()&&!e.failure(),!e.installed()&&e.failure())),o(),B(" ",g(5,11,"plugins.manage.install")," "),o(3),w(e.pluginSignal().newHbScope.to),o(2),q(ke(22,$i,!e.uninstalling()&&!e.uninstalled()&&!e.failure(),e.uninstalling(),e.uninstalled()&&!e.failure(),!e.uninstalled()&&e.failure())),o(),B(" ",g(11,13,"plugins.manage.uninstall")," "),o(3),w(e.pluginSignal().newHbScope.from),o(2),q(ae(27,Ir,!e.restarting()&&!e.failure(),e.restarting(),e.failure())),o(),B(" ",g(17,15,"menu.hbrestart.title")," ")}}function Dr(n,s){if(n&1){let e=E();I(0,"div",11)(1,"p"),d(2),m(3,"translate"),T(),I(4,"p",20),d(5),T(),I(6,"button",21),ie("click",function(){y(e);let t=p();return S(t.downloadLogFile())}),d(7),m(8,"translate"),T()()}if(n&2){let e=p();o(2),w(g(3,3,"plugins.manage.scoped.error")),o(3),w(e.failure()),o(2),w(g(8,5,"form.button_download"))}}function Ar(n,s){if(n&1){let e=E();I(0,"button",22),m(1,"translate"),ie("click",function(){y(e);let t=p();return S(t.dismissModal())}),d(2),m(3,"translate"),T()}if(n&2){let e=p();oe("disabled",e.installing()||e.uninstalling()||e.restarting()),$("aria-label",g(1,3,"form.button_close")),o(2),B(" ",g(3,5,"form.button_close")," ")}}function Fr(n,s){if(n&1){let e=E();I(0,"button",22),m(1,"translate"),ie("click",function(){y(e);let t=p();return S(t.dismissModal())}),d(2),m(3,"translate"),T()}if(n&2){let e=p();oe("disabled",e.installing()||e.uninstalling()||e.restarting()),$("aria-label",g(1,3,"form.button_close")),o(2),B(" ",g(3,5,"form.button_close")," ")}}function Lr(n,s){n&1&&(I(0,"span"),d(1),m(2,"translate"),T()),n&2&&(o(),w(g(2,1,"form.button_continue")))}function Ur(n,s){n&1&&J(0,"i",24)}function Rr(n,s){if(n&1){let e=E();I(0,"button",23),ie("click",function(){y(e);let t=p();return S(t.doSwitch())}),u(1,Lr,3,3,"span"),u(2,Ur,1,0,"i",24),T()}if(n&2){let e=p();oe("disabled",e.installing()||e.uninstalling()||e.restarting()||!e.onlineUpdateOk()||e.failure()),o(),_(!e.installing()&&!e.uninstalling()&&!e.restarting()?1:-1),o(),_((e.installing()||e.uninstalling()||e.restarting())&&!e.failure()?2:-1)}}var Fi=(()=>{class n{$activeModal=C(W);$api=C(D);$router=C(ce);$settings=C(H);$toastr=C(U);$translate=C(L);$ws=C(Ce);_plugin=b(null,{});set plugin(e){this._plugin.set(e)}get plugin(){return this._plugin()}pluginSignal=this._plugin.asReadonly();installing=b(!1,{});installed=b(!1,{});uninstalling=b(!1,{});uninstalled=b(!1,{});restarting=b(!1,{});failure=b("",{});onlineUpdateOk=b(!1,{});io;term;termTarget;fitAddon=new Pi.FitAddon;webLinksAddon=new Ni.WebLinksAddon;errorLog="";moreInfo='<a href="https://github.com/homebridge/plugins/wiki/Scoped-Plugins" target="_blank"><i class="fa fa-external-link-alt primary-text"></i></a>';prefix='<span class="font-monospace">@homebridge-plugins/</span>';constructor(){this.term=new Di.Terminal({theme:{background:"#00000000",foreground:this.$settings.actualLightingMode==="light"?"#333333":"#eeeeee",cursor:"#d2d2d2",selectionBackground:"#d2d2d2"},allowTransparency:!0,allowProposedApi:!0}),this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon)}ngOnInit(){this.onlineUpdateOk.set(this.$settings.env.platform!=="win32"),this.io=this.$ws.connectToNamespace("plugins"),this.termTarget=document.getElementById("plugin-output"),this.term.open(this.termTarget),this.fitAddon.fit(),this.io.socket.on("stdout",e=>{this.term.write(e);let i=e.toString().replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"").trimEnd();i&&(this.errorLog+=`${i}\r
|
|
19
|
+
`)})}doSwitch(){return M(this,null,function*(){let e=this._plugin();if(e)try{this.installing.set(!0),yield dt(this.io.request("install",{name:e.newHbScope.to,version:e.newHbScope.switch,termCols:this.term.cols,termRows:this.term.rows})),this.installing.set(!1),this.installed.set(!0),this.uninstalling.set(!0),yield dt(this.io.request("uninstall",{name:e.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(i){this.installing()&&this.installing.set(!1),this.uninstalling()&&this.uninstalling.set(!1),this.restarting()&&this.restarting.set(!1);let t=i instanceof Error?i.message:"An error occurred";this.failure.set(t),console.error(i),this.$toastr.error(t,this.$translate.instant("toast.title_error"))}})}downloadLogFile(){let e=this._plugin();if(!e)return;let i=new Blob([this.errorLog],{type:"text/plain;charset=utf-8"});(0,Ai.saveAs)(i,`${e.name}-error.log`)}ngOnDestroy(){this.io.end(),this.term.dispose()}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],decls:31,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"mb-3","text-center"],[1,"fas","fa-arrow-right-arrow-left","primary-text",2,"font-size","75px"],[1,"mb-0"],[3,"innerHTML"],[1,"mt-3","mb-0"],[1,"text-center"],[1,"alert","alert-error","mb-0"],["id","plugin-output",1,"mb-0",3,"hidden"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"disabled"],[1,"d-inline-block","text-start","mt-3","mb-3",2,"list-style-type","none"],[1,"fa"],[1,"font-monospace"],[1,"btn","btn-primary","mb-0",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"]],template:function(i,t){i&1&&(I(0,"div",0)(1,"div",1)(2,"h5",2),d(3),m(4,"translate"),T(),I(5,"button",3),m(6,"translate"),ie("click",function(){return t.dismissModal()}),T()(),I(7,"div",4)(8,"div",5),J(9,"i",6),T(),I(10,"ul",7),J(11,"li",8),m(12,"translate"),I(13,"li"),d(14),m(15,"translate"),T(),J(16,"li",8),m(17,"translate"),u(18,Tr,3,3,"li"),u(19,$r,5,6),T(),u(20,Pr,2,3,"pre",9),u(21,Nr,18,31,"div",10),u(22,Dr,9,7,"div",11),J(23,"div",12),T(),I(24,"div",13)(25,"div",14),u(26,Ar,4,7,"button",15),T(),I(27,"div",10),u(28,Fr,4,7,"button",15),T(),I(29,"div",16),u(30,Rr,3,3,"button",17),T()()()),i&2&&(o(3),w(g(4,15,"plugins.manage.scoped.switch")),o(2),oe("disabled",t.installing()||t.uninstalling()||t.restarting()),$("aria-label",g(6,17,"form.button_close")),o(6),oe("innerHTML",O(12,19,"plugins.manage.scoped.info_1",le(27,Vr,t.prefix)),se),o(3),w(g(15,22,"plugins.manage.scoped_message")),o(2),oe("innerHTML",O(17,24,"plugins.manage.scoped.info_2",le(29,Er,t.moreInfo)),se),o(2),_(t.onlineUpdateOk()?18:-1),o(),_(t.onlineUpdateOk()?-1:19),o(),_(t.pluginSignal()&&!t.onlineUpdateOk()?20:-1),o(),_(t.pluginSignal()&&t.onlineUpdateOk()?21:-1),o(),_(t.failure()?22:-1),o(),oe("hidden",!t.onlineUpdateOk()||t.failure()),o(3),_(t.onlineUpdateOk()?26:-1),o(2),_(t.onlineUpdateOk()?-1:28),o(2),_(t.onlineUpdateOk()?30:-1))},dependencies:[z],styles:["#plugin-output[_ngcontent-%COMP%]{height:150px;overflow-y:auto;overflow-x:hidden}"]})}return n})();var Hr=n=>({pluginName:n}),jr=n=>({count:n});function Or(n,s){n&1&&(l(0,"div",5),v(1,"i",13),r())}function zr(n,s){n&1&&(d(0),m(1,"translate")),n&2&&B(" ",g(1,1,"plugins.uninstall_remove_child_bridge")," ")}function Wr(n,s){if(n&1&&(d(0),m(1,"translate")),n&2){let e=p(4);B(" ",O(1,1,"plugins.uninstall_remove_child_bridges",le(4,jr,e.childBridgesSignal().length))," ")}}function qr(n,s){if(n&1){let e=E();l(0,"label",24)(1,"input",25),V("ngModelChange",function(t){y(e);let a=p(3);return S(a.removeChildBridges.set(t))}),r(),u(2,zr,2,3),u(3,Wr,2,6),v(4,"span",23),r()}if(n&2){let e=p(3);o(),x("ngModel",e.removeChildBridges()),o(),_(e.childBridgesSignal().length===1?2:-1),o(),_(e.childBridgesSignal().length>1?3:-1)}}function Jr(n,s){if(n&1){let e=E();l(0,"p",16)(1,"label",21)(2,"input",22),V("ngModelChange",function(t){y(e);let a=p(2);return S(a.removeConfig.set(t))}),r(),d(3),m(4,"translate"),v(5,"span",23),r(),u(6,qr,5,3,"label",24),r()}if(n&2){let e=p(2);o(2),x("ngModel",e.removeConfig()),o(),B(" ",g(4,3,"plugins.uninstall_remove_plugin_config")," "),o(3),_(e.hasChildBridges()?6:-1)}}function Gr(n,s){n&1&&(l(0,"ul",17)(1,"li"),d(2),m(3,"translate"),r(),l(4,"li"),d(5),m(6,"translate"),r()()),n&2&&(o(2),w(g(3,2,"plugins.uninstall_warn_1")),o(3),w(g(6,4,"plugins.uninstall_warn_2")))}function Kr(n,s){n&1&&(l(0,"ngb-alert",18),d(1),m(2,"translate"),r()),n&2&&(x("dismissible",!1),o(),B(" ",g(2,2,"plugins.uninstall_remove_config_required")," "))}function Qr(n,s){if(n&1&&(l(0,"div",14),v(1,"i",15),r(),l(2,"div",9),u(3,Jr,7,5,"p",16),r(),u(4,Gr,7,6,"ul",17),u(5,Kr,3,4,"ngb-alert",18),l(6,"ngb-alert",19)(7,"p",20),d(8),m(9,"translate"),r()()),n&2){let e,i=p();o(3),_(i.isConfigured()?3:-1),o(),_(i.hasChildBridges()&&i.removeChildBridges()?4:-1),o(),_(i.isConfigured()&&(!i.pluginAlias()||!i.pluginType())?5:-1),o(),x("dismissible",!1),o(2),B(" ",O(9,5,"plugins.uninstall_remove_confirmation",le(8,Hr,(e=i.pluginSignal())==null?null:e.displayName))," ")}}function Xr(n,s){n&1&&(d(0),m(1,"translate")),n&2&&B(" ",g(1,1,"plugins.manage.uninstall")," ")}function Yr(n,s){n&1&&v(0,"i",12)}var Li=(()=>{class n{$activeModal=C(W);$api=C(D);$modal=C(re);$settings=C(H);$toastr=C(U);$translate=C(L);_plugin=b(null,{});_childBridges=b([],{});_action=b("",{});set plugin(e){this._plugin.set(e)}get plugin(){return this._plugin()}set childBridges(e){this._childBridges.set(e)}get childBridges(){return this._childBridges()}set action(e){this._action.set(e)}get action(){return this._action()}pluginSignal=this._plugin.asReadonly();childBridgesSignal=this._childBridges.asReadonly();actionSignal=this._action.asReadonly();loading=b(!0,{});uninstalling=b(!1,{});removeConfig=b(!0,{});removeChildBridges=b(!0,{});hasChildBridges=b(!1,{});isConfigured=b(!1,{});pluginType=b(null,{});pluginAlias=b(null,{});ngOnInit(){this.initialize()}doUninstall(){return M(this,null,function*(){if(this.uninstalling.set(!0),this.removeConfig()&&this.isConfigured())try{yield this.removePluginConfig()}catch(t){console.error(t);let a=t instanceof Error?t.message:"Unknown error";this.$toastr.error(a,this.$translate.instant("toast.title_error"))}if(this.hasChildBridges()&&this.removeChildBridges())try{yield Promise.all(this.childBridgesSignal().map(t=>this.removeChildBridge(t.username.replace(/:/g,""))))}catch(t){console.error(t)}this.$activeModal.dismiss();let e=this.pluginSignal();if(!e)return;let i=this.$modal.open(Pe,{size:"lg",backdrop:"static"});i.componentInstance.action="Uninstall",i.componentInstance.pluginName=e.name,i.componentInstance.pluginDisplayName=e.displayName})}dismissModal(){this.$activeModal.dismiss("Dismiss")}initialize(){return M(this,null,function*(){let e=this.pluginSignal();if(e)try{this.childBridgesSignal().length&&this.hasChildBridges.set(!0);let i=yield this.getAlias();this.pluginType.set(i.pluginType),this.pluginAlias.set(i.pluginAlias),(yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`)).length&&this.isConfigured.set(!0)}catch(i){console.error("Failed to initialize:",i);let t=i instanceof Error?i.message:"Failed to load plugin information";this.$toastr.error(t,this.$translate.instant("toast.title_error"))}finally{this.loading.set(!1)}})}getAlias(){return M(this,null,function*(){let e=this.pluginSignal();if(!e)throw new Error("Plugin not set");return this.$api.get(`/plugins/alias/${encodeURIComponent(e.name)}`)})}removePluginConfig(){return M(this,null,function*(){let e=this.pluginSignal();e&&(yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}`,[]),yield this.$api.put(`/config-editor/plugin/${encodeURIComponent(e.name)}/enable`,{}),this.$toastr.success(this.$translate.instant("plugins.settings.plugin_config_saved"),this.$translate.instant("toast.title_success")))})}removeChildBridge(e){return M(this,null,function*(){try{yield this.$api.delete(`/server/pairings/${e}`)}catch(i){console.error(i);let t=i instanceof Error?i.message:"Failed to remove child bridge";this.$toastr.error(t,this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=F({type:n,selectors:[["ng-component"]],decls:20,vars:17,consts:[[1,"modal-content",2,"min-height","300px"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"fas","fa-trash","primary-text",2,"font-size","75px"],[1,"d-inline-block","text-start","mb-1"],[1,"mb-3","text-start"],["type","info",1,"mb-3",3,"dismissible"],["type","warning",1,"mb-0",3,"dismissible"],[1,"mb-0"],["for","remove-plugin-config",1,"hb-uix-switch","d-block"],["id","remove-plugin-config","type","checkbox",3,"ngModelChange","ngModel"],[1,"hb-uix-slider","hb-uix-round"],["for","remove-plugin-child-bridges",1,"hb-uix-switch","d-block"],["id","remove-plugin-child-bridges","type","checkbox",3,"ngModelChange","ngModel"]],template:function(i,t){if(i&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),d(3),r(),l(4,"button",3),m(5,"translate"),V("click",function(){return t.dismissModal()}),r()(),l(6,"div",4),u(7,Or,2,0,"div",5),u(8,Qr,10,10),r(),l(9,"div",6)(10,"div",7)(11,"button",8),m(12,"translate"),V("click",function(){return t.dismissModal()}),d(13),m(14,"translate"),r()(),v(15,"div",9),l(16,"div",10)(17,"button",11),V("click",function(){return t.doUninstall()}),u(18,Xr,2,3),u(19,Yr,1,0,"i",12),r()()()()),i&2){let a;o(3),w(((a=t.pluginSignal())==null?null:a.displayName)||((a=t.pluginSignal())==null?null:a.name)),o(),x("disabled",t.uninstalling()),$("aria-label",g(5,11,"form.button_close")),o(3),_(t.loading()?7:-1),o(),_(t.loading()?-1:8),o(3),x("disabled",t.uninstalling()),$("aria-label",g(12,13,"form.button_close")),o(2),B(" ",g(14,15,"form.button_close")," "),o(4),x("disabled",t.loading()||t.uninstalling()),o(),_(t.uninstalling()?-1:18),o(),_(t.uninstalling()?19:-1)}},dependencies:[be,Me,fe,he,Ve,z],encapsulation:2})}return n})();var xe=(()=>{class n{$api=C(D);$modal=C(re);$customPluginsService=C(li);$settings=C(H);$toastr=C(U);$translate=C(L);pluginListRefreshSubject=new de;onPluginListRefresh=this.pluginListRefreshSubject.asObservable();installPlugin(e,i){return M(this,null,function*(){let t=this.$modal.open(Pe,{size:"lg",backdrop:"static"});t.componentInstance.action="Install",t.componentInstance.pluginName=e.name,t.componentInstance.pluginDisplayName=e.displayName,t.componentInstance.targetVersion=i,t.componentInstance.onRefreshPluginList=()=>this.pluginListRefreshSubject.next();try{let a=yield t.result;a?.action==="just-installed"&&a?.plugin&&(a.plugin.isConfigured?this.$modal.open(pe,{size:"lg",backdrop:"static"}):yield this.settings(a.plugin))}catch{}})}uninstallPlugin(e,i){let t=this.$modal.open(Li,{size:"lg",backdrop:"static"});t.componentInstance.action="Uninstall",t.componentInstance.plugin=e,t.componentInstance.childBridges=i}checkAndUpdatePlugin(e,i){return M(this,null,function*(){(yield this.checkHbAndNodeVersion(e,"update"))&&(yield this.updatePlugin(e,i))})}updatePlugin(e,i){return M(this,null,function*(){let t=this.$modal.open(Pe,{size:"lg",backdrop:"static"});t.componentInstance.action="Update",t.componentInstance.pluginName=e.name,t.componentInstance.pluginDisplayName=e.displayName,t.componentInstance.targetVersion=i,t.componentInstance.latestVersion=e.latestVersion,t.componentInstance.installedVersion=e.installedVersion,t.componentInstance.isDisabled=e.disabled,t.componentInstance.onRefreshPluginList=()=>this.pluginListRefreshSubject.next();try{let a=yield t.result;a?.action==="just-installed"&&a?.plugin&&(a.plugin.isConfigured?this.$modal.open(pe,{size:"lg",backdrop:"static"}):yield this.settings(a.plugin))}catch{}})}upgradeHomebridge(e,i){return M(this,null,function*(){if(!(yield this.checkHbAndNodeVersion(e,"update")))return;let t=this.$modal.open(Pe,{size:"lg",backdrop:"static"});t.componentInstance.action="Update",t.componentInstance.pluginName=e.name,t.componentInstance.pluginDisplayName=e.displayName,t.componentInstance.targetVersion=i,t.componentInstance.latestVersion=e.latestVersion,t.componentInstance.installedVersion=e.installedVersion})}installAlternateVersion(e){return M(this,null,function*(){let i=this.$modal.open(Ci,{size:"lg",backdrop:"static"});i.componentInstance.plugin=e,i.componentInstance.onRefreshPluginList=()=>this.pluginListRefreshSubject.next();try{let{action:t,version:a,engines:c}=yield i.result;return(yield this.checkHbAndNodeVersion(A(N({},e),{updateEngines:c}),t))?e.name==="homebridge"?yield this.upgradeHomebridge(e,a):e.installedVersion?yield this.updatePlugin(e,a):this.installPlugin(e,a):void 0}catch{}})}bridgeSettings(e,i=!1){return M(this,null,function*(){let t;if(e.settingsSchema)try{t=yield this.loadConfigSchema(e.name)}catch(c){console.error(c),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}let a=this.$modal.open(yi,{size:"lg",backdrop:"static"});a.componentInstance.schema=t,a.componentInstance.plugin=e,a.componentInstance.justInstalled=i;try{(yield a.result)==="refresh"&&this.pluginListRefreshSubject.next()}catch{}})}settings(e){return M(this,null,function*(){let i;if(e.settingsSchema)try{i=yield this.loadConfigSchema(e.name)}catch(a){console.error(a),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}if(i&&i.customUi)return this.$customPluginsService.openCustomSettingsUi(e,i);if(this.$customPluginsService.plugins[e.name])return this.$customPluginsService.openSettings(e,i);let t=this.$modal.open(e.settingsSchema?Ii:ht,{size:"lg",backdrop:"static"});return t.componentInstance.schema=i,t.componentInstance.plugin=e,t.result.catch(()=>{})})}jsonEditor(e){return M(this,null,function*(){let i;if(e.settingsSchema)try{i=yield this.loadConfigSchema(e.name)}catch(a){console.error(a)}let t=this.$modal.open(ht,{size:"lg",backdrop:"static"});return t.componentInstance.schema=i,t.componentInstance.plugin=e,t.result.catch(a=>console.error(a))})}checkHbAndNodeVersion(e,i){return M(this,null,function*(){let t=!0,a=!0;try{e.updateEngines?.node&&(0,Ne.lt)(this.$settings.env.nodeVersion,(0,Ne.minVersion)(e.updateEngines.node))&&(t=!1),e.updateEngines?.homebridge&&(0,Ne.lt)(this.$settings.env.homebridgeVersion,(0,Ne.minVersion)(e.updateEngines.homebridge))&&(a=!1)}catch(c){return console.error(c),this.$toastr.error(c.message,this.$translate.instant("toast.title_error")),!1}if(!t||!a)try{let c=this.$modal.open(Bi,{size:"lg",backdrop:"static"});return c.componentInstance.plugin=e,c.componentInstance.isValidNode=t,c.componentInstance.isValidHb=a,c.componentInstance.action=i,yield c.result}catch{return!1}return!0})}loadConfigSchema(e){return M(this,null,function*(){return this.$api.get(`/plugins/config-schema/${encodeURIComponent(e)}`)})}resetChildBridges(e){return M(this,null,function*(){let i=this.$modal.open(Ti,{size:"lg",backdrop:"static"});i.componentInstance.childBridges=e})}switchToScoped(e){return M(this,null,function*(){let i=this.$modal.open(Fi,{size:"lg",backdrop:"static"});i.componentInstance.plugin=e})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=we({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();export{di as a,mi as b,xe as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./chunk-MPQEE6FH.js";import"./chunk-B4AJQJMI.js";export default a();
|