homebridge-config-ui-x 4.65.2-beta.4 → 4.65.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/{chunk-MMD3BTBN.js → chunk-27WV6QLD.js} +1 -1
- package/public/{chunk-RJIS7VSV.js → chunk-2LST6AO4.js} +1 -1
- package/public/{chunk-XH3SS4HK.js → chunk-3IATHL24.js} +1 -1
- package/public/chunk-4RA4K6ON.js +1 -0
- package/public/{chunk-6SQRPJY4.js → chunk-5VZHGUIQ.js} +1 -1
- package/public/{chunk-F455HJD7.js → chunk-7FJ35J4F.js} +1 -1
- package/public/{chunk-TWCQHSLU.js → chunk-CJEDETKZ.js} +1 -1
- package/public/{chunk-TIQAXHSG.js → chunk-CWE7VNTW.js} +1 -1
- package/public/{chunk-KS5PTWL2.js → chunk-ECAKBOCP.js} +1 -1
- package/public/{chunk-6IF463YO.js → chunk-FMK4HTWU.js} +1 -1
- package/public/{chunk-S74JF453.js → chunk-H6LLKQWK.js} +1 -1
- package/public/{chunk-T55QBCST.js → chunk-HSXO4HUG.js} +1 -1
- package/public/{chunk-LHGWIUKR.js → chunk-HY5W3UBV.js} +1 -1
- package/public/{chunk-KK5OFXOV.js → chunk-I3NB5DUT.js} +1 -1
- package/public/{chunk-Q5JD6TV5.js → chunk-M3Z43IPJ.js} +1 -1
- package/public/{chunk-27YCU24C.js → chunk-OO2FSEBV.js} +1 -1
- package/public/{chunk-GWBJPDVQ.js → chunk-QW5USDXR.js} +1 -1
- package/public/{chunk-5XD2GEUR.js → chunk-RCX6SLJ6.js} +1 -1
- package/public/{chunk-OQ7GEQMS.js → chunk-RHT7XR7W.js} +1 -1
- package/public/{chunk-N5NUJXZU.js → chunk-SN3Y5G4H.js} +1 -1
- package/public/{chunk-3X7WRTIW.js → chunk-TI2F5WWJ.js} +1 -1
- package/public/{chunk-HU4FZ6CK.js → chunk-UFKG7YF2.js} +1 -1
- package/public/{chunk-IZ63C2YJ.js → chunk-URLYICQD.js} +1 -1
- package/public/{chunk-O7JGTYA5.js → chunk-VC6WR76F.js} +1 -1
- package/public/{chunk-75DKRPKZ.js → chunk-VMTEMUVR.js} +1 -1
- package/public/{chunk-JNTZ55B6.js → chunk-Y2LHEUUE.js} +1 -1
- package/public/index.html +1 -1
- package/public/{main-7I6WO3IC.js → main-XEDULFOQ.js} +2 -2
- package/public/chunk-7FKJ76S4.js +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-config-ui-x",
|
|
3
3
|
"displayName": "Homebridge UI",
|
|
4
|
-
"version": "4.65.2
|
|
4
|
+
"version": "4.65.2",
|
|
5
5
|
"description": "A web based management, configuration and control platform for Homebridge.",
|
|
6
6
|
"author": "oznu <dev@oz.nu>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{X as i,_b as m,aa as o,h as r,uc as a}from"./chunk-SR4W2G2S.js";var l=[{path:"",redirectTo:"/",pathMatch:"full"},{path:"docker",loadChildren:()=>import("./chunk-
|
|
1
|
+
import{X as i,_b as m,aa as o,h as r,uc as a}from"./chunk-SR4W2G2S.js";var l=[{path:"",redirectTo:"/",pathMatch:"full"},{path:"docker",loadChildren:()=>import("./chunk-VMTEMUVR.js").then(e=>e.DockerModule)},{path:"linux",loadChildren:()=>import("./chunk-RHT7XR7W.js").then(e=>e.LinuxModule)},{path:"terminal",loadChildren:()=>import("./chunk-OO2FSEBV.js").then(e=>e.TerminalModule)}],c=(()=>{let t=class t{};r(t,"\u0275fac",function(n){return new(n||t)}),r(t,"\u0275mod",o({type:t})),r(t,"\u0275inj",i({imports:[a.forChild(l),a]}));let e=t;return e})();var C=(()=>{let t=class t{};r(t,"\u0275fac",function(n){return new(n||t)}),r(t,"\u0275mod",o({type:t})),r(t,"\u0275inj",i({imports:[m,c]}));let e=t;return e})();export{C as PlatformToolsModule};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as h,b as H,c as $,m as S}from"./chunk-
|
|
1
|
+
import{a as h,b as H,c as $,m as S}from"./chunk-4RA4K6ON.js";import{Kb as I,W as p,X as j,Y as E,Z as a,aa as y,g as O,h as l,hc as x,i as d,p as f,t as u,u as T,v as w,x as v}from"./chunk-SR4W2G2S.js";var k=O(H(),1);var g=new E("JWT_OPTIONS"),m=(()=>{class o{constructor(e=null){this.tokenGetter=e&&e.tokenGetter||function(){}}urlBase64Decode(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:{t+="==";break}case 3:{t+="=";break}default:throw new Error("Illegal base64url string!")}return this.b64DecodeUnicode(t)}b64decode(e){let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r="";if(e=String(e).replace(/=+$/,""),e.length%4===1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(let i=0,c,s,b=0;s=e.charAt(b++);~s&&(c=i%4?c*64+s:s,i++%4)?r+=String.fromCharCode(255&c>>(-2*i&6)):0)s=t.indexOf(s);return r}b64DecodeUnicode(e){return decodeURIComponent(Array.prototype.map.call(this.b64decode(e),t=>"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)).join(""))}decodeToken(e=this.tokenGetter()){return e instanceof Promise?e.then(t=>this._decodeToken(t)):this._decodeToken(e)}_decodeToken(e){if(!e||e==="")return null;let t=e.split(".");if(t.length!==3)throw new Error("The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.");let r=this.urlBase64Decode(t[1]);if(!r)throw new Error("Cannot decode the token.");return JSON.parse(r)}getTokenExpirationDate(e=this.tokenGetter()){return e instanceof Promise?e.then(t=>this._getTokenExpirationDate(t)):this._getTokenExpirationDate(e)}_getTokenExpirationDate(e){let t;if(t=this.decodeToken(e),!t||!t.hasOwnProperty("exp"))return null;let r=new Date(0);return r.setUTCSeconds(t.exp),r}isTokenExpired(e=this.tokenGetter(),t){return e instanceof Promise?e.then(r=>this._isTokenExpired(r,t)):this._isTokenExpired(e,t)}_isTokenExpired(e,t){if(!e||e==="")return!0;let r=this.getTokenExpirationDate(e);return t=t||0,r===null?!1:!(r.valueOf()>new Date().valueOf()+t*1e3)}getAuthScheme(e,t){return typeof e=="function"?e(t):e}}return o.\u0275fac=function(e){return new(e||o)(a(g))},o.\u0275prov=p({token:o,factory:o.\u0275fac}),o})(),D=o=>o instanceof Promise?v(()=>o):f(o),J=(()=>{class o{constructor(e,t,r){this.jwtHelper=t,this.document=r,this.standardPorts=["80","443"],this.tokenGetter=e.tokenGetter,this.headerName=e.headerName||"Authorization",this.authScheme=e.authScheme||e.authScheme===""?e.authScheme:"Bearer ",this.allowedDomains=e.allowedDomains||[],this.disallowedRoutes=e.disallowedRoutes||[],this.throwNoTokenError=e.throwNoTokenError||!1,this.skipWhenExpired=e.skipWhenExpired}isAllowedDomain(e){let t=new URL(e.url,this.document.location.origin);if(t.host===this.document.location.host)return!0;let r=`${t.hostname}${t.port&&!this.standardPorts.includes(t.port)?":"+t.port:""}`;return this.allowedDomains.findIndex(i=>typeof i=="string"?i===r:i instanceof RegExp?i.test(r):!1)>-1}isDisallowedRoute(e){let t=new URL(e.url,this.document.location.origin);return this.disallowedRoutes.findIndex(r=>{if(typeof r=="string"){let i=new URL(r,this.document.location.origin);return i.hostname===t.hostname&&i.pathname===t.pathname}return r instanceof RegExp?r.test(e.url):!1})>-1}handleInterception(e,t,r){let i=this.jwtHelper.getAuthScheme(this.authScheme,t);if(!e&&this.throwNoTokenError)throw new Error("Could not get token from tokenGetter function.");let c=f(!1);return this.skipWhenExpired&&(c=e?D(this.jwtHelper.isTokenExpired(e)):f(!0)),e?c.pipe(T(s=>s&&this.skipWhenExpired?t.clone():t.clone({setHeaders:{[this.headerName]:`${i}${e}`}})),w(s=>r.handle(s))):r.handle(t)}intercept(e,t){if(!this.isAllowedDomain(e)||this.isDisallowedRoute(e))return t.handle(e);let r=this.tokenGetter(e);return D(r).pipe(w(i=>this.handleInterception(i,e,t)))}}return o.\u0275fac=function(e){return new(e||o)(a(g),a(m),a(I))},o.\u0275prov=p({token:o,factory:o.\u0275fac}),o})(),K=(()=>{class o{constructor(e){if(e)throw new Error("JwtModule is already loaded. It should only be imported in your application's main module.")}static forRoot(e){return{ngModule:o,providers:[{provide:x,useClass:J,multi:!0},e.jwtOptionsProvider||{provide:g,useValue:e.config},m]}}}return o.\u0275fac=function(e){return new(e||o)(a(o,12))},o.\u0275mod=y({type:o}),o.\u0275inj=j({}),o})();var X=(()=>{let n=class n{constructor(t,r,i){l(this,"$api");l(this,"$jwtHelper");l(this,"$settings");l(this,"token");l(this,"user",{});l(this,"logoutTimer");this.$api=t,this.$jwtHelper=r,this.$settings=i,this.loadToken()}login(t){return d(this,null,function*(){let r=yield u(this.$api.post("/auth/login",t));if(!this.validateToken(r.access_token))throw new Error("Invalid username or password.");window.localStorage.setItem(h.jwt.tokenKey,r.access_token),yield this.$settings.getAppSettings()})}noauth(){return d(this,null,function*(){let t=yield u(this.$api.post("/auth/noauth",{}));if(this.validateToken(t.access_token))window.localStorage.setItem(h.jwt.tokenKey,t.access_token),yield this.$settings.getAppSettings();else throw new Error("Invalid username or password.")})}logout(){this.user=null,this.token=null,window.localStorage.removeItem(h.jwt.tokenKey),window.location.reload()}loadToken(){return d(this,null,function*(){this.$settings.settingsLoaded||(yield u(this.$settings.onSettingsLoaded));let t=window.localStorage.getItem(h.jwt.tokenKey);t&&this.validateToken(t)})}validateToken(t){try{return this.$jwtHelper.isTokenExpired(t,this.$settings.serverTimeOffset)&&this.logout(),this.user=this.$jwtHelper.decodeToken(t),this.token=t,this.setLogoutTimer(),!0}catch{return window.localStorage.removeItem(h.jwt.tokenKey),this.token=null,!1}}checkToken(){return d(this,null,function*(){try{return yield u(this.$api.get("/auth/check"))}catch(t){t.status===401&&(console.error("Current token is not valid"),this.logout())}})}setLogoutTimer(){if(clearTimeout(this.logoutTimer),!this.$jwtHelper.isTokenExpired(this.token,this.$settings.serverTimeOffset)){let r=(0,k.default)(this.$jwtHelper.getTokenExpirationDate(this.token)).diff((0,k.default)().add(this.$settings.serverTimeOffset,"s"),"millisecond");r<=2147483647&&(this.logoutTimer=setTimeout(()=>d(this,null,function*(){this.$settings.formAuth===!1?(yield this.noauth(),window.location.reload()):this.logout()}),r))}}isLoggedIn(){return this.$settings.env.instanceId!==this.user.instanceId?(console.error("Token does not match instance"),!1):this.user&&this.token&&!this.$jwtHelper.isTokenExpired(this.token,this.$settings.serverTimeOffset)}};l(n,"\u0275fac",function(r){return new(r||n)(a($),a(m),a(S))}),l(n,"\u0275prov",p({token:n,factory:n.\u0275fac}));let o=n;return o})();export{m as a,K as b,X as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as O,b as G}from"./chunk-VCXNOPS6.js";import{a as j}from"./chunk-
|
|
1
|
+
import{a as O,b as G}from"./chunk-VCXNOPS6.js";import{a as j}from"./chunk-I3NB5DUT.js";import{M as H}from"./chunk-F5I4UBIU.js";import{c as A,k as z}from"./chunk-4RA4K6ON.js";import{a as V,b as D}from"./chunk-FPYOAMQR.js";import{$ as C,Ga as b,Ka as S,La as p,Qb as F,Ua as o,Va as a,Wa as h,Za as $,ab as x,bb as f,ec as E,fc as P,g as R,h as n,ha as I,i as g,ia as y,jb as d,kb as v,lb as k,rc as M,ub as B,wa as r,xa as _,xb as m,yb as u,zb as w}from"./chunk-SR4W2G2S.js";var W=R(O(),1),N=R(G(),1);var J=e=>({maxBackupSizeText:e});function K(e,c){if(e&1&&(o(0,"div"),h(1,"input",13),a()),e&2){let t=f(2);r(),p("value",t.selectedBackup.fileName)}}function L(e,c){if(e&1){let t=$();o(0,"div",14)(1,"input",15),x("change",function(i){I(t);let l=f(2);return y(l.handleRestoreFileInput(i.target.files))}),a(),o(2,"label",16),d(3),m(4,"translate"),a()()}if(e&2){let t=f(2);r(3),k(" ",u(4,1,(t.selectedFile==null?null:t.selectedFile.name)||"backup.label_choose_backup_file_to_restore")," ")}}function Q(e,c){if(e&1&&(o(0,"div",8)(1,"div",9),h(2,"i",10),a(),o(3,"p"),d(4),m(5,"translate"),a(),o(6,"ul")(7,"li"),d(8),m(9,"translate"),a(),o(10,"li"),d(11),m(12,"translate"),a(),o(13,"li"),d(14),m(15,"translate"),a()(),b(16,K,2,1,"div",11)(17,L,5,3,"div",12),a()),e&2){let t=f();r(4),v(u(5,6,"backup.restore_help_one")),r(4),v(u(9,8,"backup.restore_help_two")),r(3),v(w(12,10,"backup.restore_max_size",B(15,J,t.maxFileSizeText))),r(3),v(u(15,13,"backup.restore_warning")),r(2),p("ngIf",t.selectedBackup),r(),p("ngIf",!t.selectedBackup)}}function X(e,c){e&1&&h(0,"i",24)}function Y(e,c){if(e&1&&(o(0,"span"),d(1),a()),e&2){let t=f(3);r(),k("",t.uploadPercent,"% - ")}}function Z(e,c){e&1&&(o(0,"span"),d(1," Extracting Archive"),a())}function ee(e,c){e&1&&(o(0,"span"),d(1),m(2,"translate"),a()),e&2&&(r(),k(" ",u(2,1,"backup.label_uploading"),""))}function te(e,c){if(e&1&&(o(0,"span"),b(1,X,1,0,"i",23)(2,Y,2,1,"span",11)(3,Z,2,0,"span",11)(4,ee,3,3,"span",11),a()),e&2){let t=f(2);r(),p("ngIf",!t.uploadPercent||t.uploadPercent===100),r(),p("ngIf",t.uploadPercent&&t.uploadPercent!==100),r(),p("ngIf",t.uploadPercent===100),r(),p("ngIf",t.uploadPercent!==100)}}function ie(e,c){e&1&&(o(0,"span"),d(1),m(2,"translate"),a()),e&2&&(r(),v(u(2,1,"form.button_restore")))}function re(e,c){if(e&1){let t=$();o(0,"div",17)(1,"div",18)(2,"button",19),m(3,"translate"),x("click",function(){I(t);let i=f();return y(i.$activeModal.dismiss("Dismiss"))}),d(4),m(5,"translate"),a()(),h(6,"div",20),o(7,"div",21)(8,"button",22),x("click",function(){I(t);let i=f();return y(i.onRestoreBackupClick())}),b(9,te,5,4,"span",11)(10,ie,3,3,"span",11),a()()()}if(e&2){let t=f();r(2),p("disabled",t.clicked),S("aria-label",u(3,6,"form.button_close")),r(2),k(" ",u(5,8,"form.button_close")," "),r(4),p("disabled",!t.selectedBackup&&!t.selectedFile||t.clicked),r(),p("ngIf",t.clicked),r(),p("ngIf",!t.clicked)}}function se(e,c){if(e&1){let t=$();o(0,"div",17),h(1,"div",18),o(2,"div",20)(3,"button",25),x("click",function(){I(t);let i=f();return y(i.postBackupRestart())}),d(4),m(5,"translate"),a()(),h(6,"div",21),a()}e&2&&(r(4),k(" ",u(5,1,"menu.hbrestart.title")," "))}var fe=(()=>{let c=class c{constructor(s,i,l,T,U,q){n(this,"$activeModal");n(this,"$api");n(this,"$route");n(this,"$toastr");n(this,"$translate");n(this,"$ws");n(this,"setupWizardRestore",!1);n(this,"selectedBackup",null);n(this,"clicked",!1);n(this,"maxFileSizeText",globalThis.backup.maxBackupSizeText);n(this,"selectedFile");n(this,"restoreInProgress",!1);n(this,"restoreStarted",!1);n(this,"restoreFailed",!1);n(this,"restoreArchiveType","homebridge");n(this,"uploadPercent",0);n(this,"term",new W.Terminal);n(this,"termTarget");n(this,"fitAddon",new N.FitAddon);n(this,"io");this.$activeModal=s,this.$api=i,this.$route=l,this.$toastr=T,this.$translate=U,this.$ws=q}ngOnInit(){return g(this,null,function*(){this.io=this.$ws.connectToNamespace("backup"),this.termTarget=document.getElementById("plugin-log-output"),this.term.open(this.termTarget),this.fitAddon.fit(),this.io.socket.on("stdout",s=>{this.term.write(s)}),this.setupWizardRestore&&(this.restoreStarted=!0,this.restoreInProgress=!0,this.startRestore())})}onRestoreBackupClick(){this.selectedBackup?this.restoreScheduledBackup():this.restoreArchiveType==="homebridge"?this.uploadHomebridgeArchive():this.restoreArchiveType==="hbfx"&&this.uploadHbfxArchive()}uploadHomebridgeArchive(){this.term.reset(),this.clicked=!0;let s=new FormData;s.append("restoreArchive",this.selectedFile,this.selectedFile.name),this.$api.post("/backup/restore",s).subscribe({next:()=>{this.restoreStarted=!0,this.restoreInProgress=!0,setTimeout(()=>{this.startRestore()},500),this.clicked=!1},error:i=>{var l;console.error(i),this.$toastr.error(((l=i.error)==null?void 0:l.message)||this.$translate.instant("backup.restore_failed"),this.$translate.instant("toast.title_error")),this.clicked=!1}})}restoreScheduledBackup(){return g(this,null,function*(){this.term.reset(),this.clicked=!0,this.$api.post(`/backup/scheduled-backups/${this.selectedBackup.id}/restore`,{}).subscribe({next:()=>{this.restoreStarted=!0,this.restoreInProgress=!0,setTimeout(()=>{this.startRestore()},500),this.clicked=!1},error:s=>{var i;console.error(s),this.$toastr.error(((i=s.error)==null?void 0:i.message)||this.$translate.instant("backup.restore_failed"),this.$translate.instant("toast.title_error")),this.clicked=!1}})})}startRestore(){return g(this,null,function*(){this.io.request("do-restore").subscribe({next:()=>{this.restoreInProgress=!1,this.$toastr.success(this.$translate.instant("backup.backup_restored"),this.$translate.instant("toast.title_success")),this.setupWizardRestore&&this.postBackupRestart()},error:s=>{this.restoreFailed=!0,console.error(s),this.$toastr.error(this.$translate.instant("backup.restore_failed"),this.$translate.instant("toast.title_error"))}})})}uploadHbfxArchive(){this.term.reset(),this.clicked=!0;let s=new FormData;s.append("restoreArchive",this.selectedFile,this.selectedFile.name),this.$api.post("/backup/restore/hbfx",s,{reportProgress:!0,observe:"events"}).subscribe({next:i=>{i.type===E.UploadProgress?this.uploadPercent=Math.round(100*i.loaded/i.total):i instanceof P&&(this.restoreStarted=!0,this.restoreInProgress=!0,setTimeout(()=>{this.startHbfxRestore()},500),this.clicked=!1)},error:i=>{var l;this.clicked=!1,console.error(i),this.$toastr.error(((l=i.error)==null?void 0:l.message)||this.$translate.instant("backup.restore_failed"),this.$translate.instant("toast.title_error"))}})}startHbfxRestore(){return g(this,null,function*(){this.io.request("do-restore-hbfx").subscribe({next:()=>{this.restoreInProgress=!1,this.$toastr.success(this.$translate.instant("backup.backup_restored"),this.$translate.instant("toast.title_success"))},error:s=>{this.restoreFailed=!0,console.error(s),this.$toastr.error(this.$translate.instant("backup.restore_failed"),this.$translate.instant("toast.title_error"))}})})}handleRestoreFileInput(s){s.length?(this.selectedFile=s[0],this.selectedFile.name.endsWith(".hbfx")?this.restoreArchiveType="hbfx":this.restoreArchiveType="homebridge"):delete this.selectedFile}postBackupRestart(){this.$api.put("/backup/restart",{}).subscribe({next:()=>{this.$activeModal.close(!0),this.$route.navigate(["/"])},error:()=>{}})}ngOnDestroy(){this.io.end()}};n(c,"\u0275fac",function(i){return new(i||c)(_(H),_(A),_(M),_(z),_(V),_(j))}),n(c,"\u0275cmp",C({type:c,selectors:[["ng-component"]],inputs:{setupWizardRestore:"setupWizardRestore",selectedBackup:"selectedBackup"},decls:13,vars:11,consts:[[1,"modal-content","hb-backup-modal"],[1,"modal-header"],[1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"click","disabled"],["aria-hidden","true"],["class","modal-body",4,"ngIf"],["id","plugin-log-output",1,"modal-body",3,"hidden"],["class","modal-footer justify-content-between",4,"ngIf"],[1,"modal-body"],[1,"text-center","mt-2","mb-3"],[1,"fas","fa-fw","fa-hard-drive","primary-text",2,"font-size","75px"],[4,"ngIf"],["class","custom-file",4,"ngIf"],["type","text","disabled","",1,"form-control","custom-input",3,"value"],[1,"custom-file"],["type","file","id","restoreFileUpload","accept","application/gzip, .gz, .hbfx",1,"custom-file-input",3,"change"],["for","restoreFileUpload",1,"custom-file-label"],[1,"modal-footer","justify-content-between"],[1,"text-left"],["type","button","data-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-right"],["type","button","data-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],["class","fa fa-fw fa-circle-notch fa-spin",4,"ngIf"],[1,"fa","fa-fw","fa-circle-notch","fa-spin"],["type","button","data-dismiss","modal",1,"btn","btn-primary",3,"click"]],template:function(i,l){i&1&&(o(0,"div",0)(1,"div",1)(2,"h5",2),d(3),m(4,"translate"),a(),o(5,"button",3),m(6,"translate"),x("click",function(){return l.$activeModal.dismiss("Dismiss")}),o(7,"span",4),d(8,"\xD7"),a()()(),b(9,Q,18,17,"div",5),h(10,"div",6),b(11,re,11,10,"div",7)(12,se,7,3,"div",7),a()),i&2&&(r(3),v(u(4,7,"form.button_restore")),r(2),p("disabled",l.restoreInProgress),S("aria-label",u(6,9,"form.button_close")),r(4),p("ngIf",!l.restoreStarted&&!l.setupWizardRestore),r(),p("hidden",!l.restoreStarted),r(),p("ngIf",!l.restoreStarted||l.restoreFailed===!0),r(),p("ngIf",!l.restoreInProgress&&l.restoreStarted))},dependencies:[F,D],encapsulation:2}));let e=c;return e})();export{fe as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as ne}from"./chunk-FPYOAMQR.js";import{$ as Tt,$a as te,Cb as pt,Da as it,Ga as st,Ka as nt,Kb as Mt,La as C,M as Ut,Ma as ot,Oa as A,Qb as jt,Ua as F,Va as H,W as N,Wa as rt,X as Wt,Xa as xt,Y as Gt,Ya as It,Z as I,Za as St,_ as G,a as j,aa as Jt,ab as at,b as W,bb as S,da as Kt,e as Zt,g as ge,gc as ee,h as n,ha as wt,i as Yt,ia as Dt,jb as R,l as k,la as ft,lb as Y,mc as ie,nc as se,oa as Ct,sa as Qt,sb as Ot,t as qt,ta as $t,wa as _,xa as Z,za as Xt}from"./chunk-SR4W2G2S.js";var oe=Zt((Ne,ve)=>{ve.exports={name:"homebridge-config-ui-x",displayName:"Homebridge UI",version:"4.65.2",description:"A web based management, configuration and control platform for Homebridge.",author:"oznu <dev@oz.nu>",license:"MIT",funding:[{type:"github",url:"https://github.com/sponsors/oznu"},{type:"paypal",url:"https://paypal.me/oznu"}],repository:{type:"git",url:"git+https://github.com/homebridge/homebridge-config-ui-x.git"},bugs:{url:"https://github.com/homebridge/homebridge-config-ui-x/issues"},keywords:["homebridge-plugin","ui","gui","web","homebridge","homebridge-config-ui-x","ui-x","config-ui-x","homebridge-x","homebridge server","homebridge ui","homebridge-ui","homebridge gui","homebridge-gui","web interface","config ui","management","config editor","linux","macOS","osx","windows","raspberry pi","accessory control","smart home","hb-service"],main:"./dist/index.js",bin:{"homebridge-config-ui-x":"dist/bin/standalone.js","hb-service":"dist/bin/hb-service.js"},engines:{node:"^18 || ^20 || ^22",homebridge:"^1.8.0 || ^2.0.0-beta.0"},scripts:{build:"npm run build:server && npm run build:ui","build:server":"rimraf dist && tsc -p tsconfig.build.json","build:ui":"npm run build --prefix ui",check:"npm run check:server && npm run check:ui","check:server":"npm install && npm outdated","check:ui":"npm install --prefix ui && npm outdated --prefix ui","lang-sync":"ts-node scripts/lang-sync.ts",lint:"eslint . --max-warnings=0","lint:fix":"npm run lint -- --fix",prepublishOnly:"npm i --package-lock-only && npm run lint && npm run build",start:"ts-node -r tsconfig-paths/register src/main.ts",test:"vitest run","test-coverage":"npm run test -- --coverage","upgrade-install":"./scripts/upgrade-install.sh",watch:'concurrently "npm run watch:ui" "npm run watch:server"',"watch:server":"nodemon","watch:ui":"npm run start --prefix ui"},dependencies:{"@fastify/helmet":"11.1.1","@fastify/multipart":"8.3.0","@fastify/static":"7.0.4","@homebridge/hap-client":"1.10.2","@homebridge/node-pty-prebuilt-multiarch":"0.11.14","@nestjs/axios":"3.1.3","@nestjs/common":"10.4.15","@nestjs/core":"10.4.15","@nestjs/jwt":"10.2.0","@nestjs/passport":"10.0.3","@nestjs/platform-fastify":"10.4.15","@nestjs/platform-socket.io":"10.4.15","@nestjs/swagger":"8.1.0","@nestjs/websockets":"10.4.15",axios:"1.7.9","bash-color":"0.0.4","buffer-shims":"1.0.0","class-transformer":"0.5.1","class-validator":"0.14.1",commander:"12.1.0",dayjs:"1.11.13",fastify:"4.29.0","fs-extra":"11.2.0",jsonwebtoken:"9.0.2",lodash:"4.17.21","node-cache":"5.1.2","node-schedule":"2.1.1",ora:"5.4.1",otplib:"12.0.1","p-limit":"3.1.0",passport:"0.7.0","passport-jwt":"4.0.1","reflect-metadata":"0.2.2",rxjs:"7.8.1",semver:"7.6.3",systeminformation:"5.23.12",tail:"2.2.6",tar:"6.2.1","tcp-port-used":"1.0.2",unzipper:"0.12.3"},devDependencies:{"@antfu/eslint-config":"^3.12.0","@nestjs/testing":"^10.4.15","@types/fs-extra":"^11.0.4","@types/lodash":"^4.17.13","@types/node":"^22.10.2","@types/node-schedule":"^2.1.7","@types/passport-jwt":"^4.0.1","@types/semver":"^7.5.8","@types/tail":"^2.2.3","@types/tar":"^6.1.13","@types/tcp-port-used":"^1.0.4","@types/unzipper":"^0.10.10","@vitest/coverage-v8":"^2.1.8",concurrently:"^9.1.0",eslint:"^9.16.0","eslint-plugin-format":"^0.1.3","form-data":"^4.0.1",nodemon:"^3.1.7",rimraf:"^6.0.1","ts-loader":"^9.5.1","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0",typescript:"^5.6.3","unplugin-swc":"^1.5.1",vitest:"^2.1.8"},overrides:{"@homebridge/hap-client":{axios:"1.7.9"},"@nestjs/platform-fastify":{fastify:"4.29.0"}},maintainers:[{email:"bwp91@icloud.com",name:"bwp91"},{email:"dev@oz.nu",name:"oznu"},{email:"buyminivan-northern@yahoo.ca",name:"northernman"},{email:"mail@anderl-bauer.de",name:"supereg"},{email:"khaos.tian@gmail.com",name:"khaost"},{email:"erik.baauw@xs4all.nl",name:"ebaauw"},{email:"donavan.becker@icloud.com",name:"donavanbecker"},{email:"dustin.greif@gmail.com",name:"dustin.greif"},{email:"nfarina@gmail.com",name:"nfarina"}]}});var re=Zt((Ft,Et)=>{(function(s,t){typeof Ft=="object"&&typeof Et<"u"?Et.exports=t():typeof define=="function"&&define.amd?define(t):(s=typeof globalThis<"u"?globalThis:s||self).dayjs=t()})(Ft,function(){"use strict";var s=1e3,t=6e4,r=36e5,i="millisecond",e="second",o="minute",h="hour",y="day",O="week",w="month",Q="quarter",$="year",E="date",ct="Invalid Date",_t=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,yt=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,ut={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(d){var u=["th","st","nd","rd"],a=d%100;return"["+d+(u[(a-20)%10]||u[a]||u[0])+"]"}},P=function(d,u,a){var l=String(d);return!l||l.length>=u?d:""+Array(u+1-l.length).join(a)+d},me={s:P,z:function(d){var u=-d.utcOffset(),a=Math.abs(u),l=Math.floor(a/60),c=a%60;return(u<=0?"+":"-")+P(l,2,"0")+":"+P(c,2,"0")},m:function d(u,a){if(u.date()<a.date())return-d(a,u);var l=12*(a.year()-u.year())+(a.month()-u.month()),c=u.clone().add(l,w),f=a-c<0,p=u.clone().add(l+(f?-1:1),w);return+(-(l+(a-c)/(f?c-p:p-c))||0)},a:function(d){return d<0?Math.ceil(d)||0:Math.floor(d)},p:function(d){return{M:w,y:$,w:O,d:y,D:E,h,m:o,s:e,ms:i,Q}[d]||String(d||"").toLowerCase().replace(/s$/,"")},u:function(d){return d===void 0}},X="en",B={};B[X]=ut;var Vt="$isDayjsObject",bt=function(d){return d instanceof lt||!(!d||!d[Vt])},ht=function d(u,a,l){var c;if(!u)return X;if(typeof u=="string"){var f=u.toLowerCase();B[f]&&(c=f),a&&(B[f]=a,c=f);var p=u.split("-");if(!c&&p.length>1)return d(p[0])}else{var g=u.name;B[g]=u,c=g}return!l&&c&&(X=c),c||!l&&X},b=function(d,u){if(bt(d))return d.clone();var a=typeof u=="object"?u:{};return a.date=d,a.args=arguments,new lt(a)},m=me;m.l=ht,m.i=bt,m.w=function(d,u){return b(d,{locale:u.$L,utc:u.$u,x:u.$x,$offset:u.$offset})};var lt=function(){function d(a){this.$L=ht(a.locale,null,!0),this.parse(a),this.$x=this.$x||a.x||{},this[Vt]=!0}var u=d.prototype;return u.parse=function(a){this.$d=function(l){var c=l.date,f=l.utc;if(c===null)return new Date(NaN);if(m.u(c))return new Date;if(c instanceof Date)return new Date(c);if(typeof c=="string"&&!/Z$/i.test(c)){var p=c.match(_t);if(p){var g=p[2]-1||0,v=(p[7]||"0").substring(0,3);return f?new Date(Date.UTC(p[1],g,p[3]||1,p[4]||0,p[5]||0,p[6]||0,v)):new Date(p[1],g,p[3]||1,p[4]||0,p[5]||0,p[6]||0,v)}}return new Date(c)}(a),this.init()},u.init=function(){var a=this.$d;this.$y=a.getFullYear(),this.$M=a.getMonth(),this.$D=a.getDate(),this.$W=a.getDay(),this.$H=a.getHours(),this.$m=a.getMinutes(),this.$s=a.getSeconds(),this.$ms=a.getMilliseconds()},u.$utils=function(){return m},u.isValid=function(){return this.$d.toString()!==ct},u.isSame=function(a,l){var c=b(a);return this.startOf(l)<=c&&c<=this.endOf(l)},u.isAfter=function(a,l){return b(a)<this.startOf(l)},u.isBefore=function(a,l){return this.endOf(l)<b(a)},u.$g=function(a,l,c){return m.u(a)?this[l]:this.set(c,a)},u.unix=function(){return Math.floor(this.valueOf()/1e3)},u.valueOf=function(){return this.$d.getTime()},u.startOf=function(a,l){var c=this,f=!!m.u(l)||l,p=m.p(a),g=function(z,x){var L=m.w(c.$u?Date.UTC(c.$y,x,z):new Date(c.$y,x,z),c);return f?L:L.endOf(y)},v=function(z,x){return m.w(c.toDate()[z].apply(c.toDate("s"),(f?[0,0,0,0]:[23,59,59,999]).slice(x)),c)},T=this.$W,D=this.$M,M=this.$D,U="set"+(this.$u?"UTC":"");switch(p){case $:return f?g(1,0):g(31,11);case w:return f?g(1,D):g(0,D+1);case O:var V=this.$locale().weekStart||0,tt=(T<V?T+7:T)-V;return g(f?M-tt:M+(6-tt),D);case y:case E:return v(U+"Hours",0);case h:return v(U+"Minutes",1);case o:return v(U+"Seconds",2);case e:return v(U+"Milliseconds",3);default:return this.clone()}},u.endOf=function(a){return this.startOf(a,!1)},u.$set=function(a,l){var c,f=m.p(a),p="set"+(this.$u?"UTC":""),g=(c={},c[y]=p+"Date",c[E]=p+"Date",c[w]=p+"Month",c[$]=p+"FullYear",c[h]=p+"Hours",c[o]=p+"Minutes",c[e]=p+"Seconds",c[i]=p+"Milliseconds",c)[f],v=f===y?this.$D+(l-this.$W):l;if(f===w||f===$){var T=this.clone().set(E,1);T.$d[g](v),T.init(),this.$d=T.set(E,Math.min(this.$D,T.daysInMonth())).$d}else g&&this.$d[g](v);return this.init(),this},u.set=function(a,l){return this.clone().$set(a,l)},u.get=function(a){return this[m.p(a)]()},u.add=function(a,l){var c,f=this;a=Number(a);var p=m.p(l),g=function(D){var M=b(f);return m.w(M.date(M.date()+Math.round(D*a)),f)};if(p===w)return this.set(w,this.$M+a);if(p===$)return this.set($,this.$y+a);if(p===y)return g(1);if(p===O)return g(7);var v=(c={},c[o]=t,c[h]=r,c[e]=s,c)[p]||1,T=this.$d.getTime()+a*v;return m.w(T,this)},u.subtract=function(a,l){return this.add(-1*a,l)},u.format=function(a){var l=this,c=this.$locale();if(!this.isValid())return c.invalidDate||ct;var f=a||"YYYY-MM-DDTHH:mm:ssZ",p=m.z(this),g=this.$H,v=this.$m,T=this.$M,D=c.weekdays,M=c.months,U=c.meridiem,V=function(x,L,et,dt){return x&&(x[L]||x(l,f))||et[L].slice(0,dt)},tt=function(x){return m.s(g%12||12,x,"0")},z=U||function(x,L,et){var dt=x<12?"AM":"PM";return et?dt.toLowerCase():dt};return f.replace(yt,function(x,L){return L||function(et){switch(et){case"YY":return String(l.$y).slice(-2);case"YYYY":return m.s(l.$y,4,"0");case"M":return T+1;case"MM":return m.s(T+1,2,"0");case"MMM":return V(c.monthsShort,T,M,3);case"MMMM":return V(M,T);case"D":return l.$D;case"DD":return m.s(l.$D,2,"0");case"d":return String(l.$W);case"dd":return V(c.weekdaysMin,l.$W,D,2);case"ddd":return V(c.weekdaysShort,l.$W,D,3);case"dddd":return D[l.$W];case"H":return String(g);case"HH":return m.s(g,2,"0");case"h":return tt(1);case"hh":return tt(2);case"a":return z(g,v,!0);case"A":return z(g,v,!1);case"m":return String(v);case"mm":return m.s(v,2,"0");case"s":return String(l.$s);case"ss":return m.s(l.$s,2,"0");case"SSS":return m.s(l.$ms,3,"0");case"Z":return p}return null}(x)||p.replace(":","")})},u.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},u.diff=function(a,l,c){var f,p=this,g=m.p(l),v=b(a),T=(v.utcOffset()-this.utcOffset())*t,D=this-v,M=function(){return m.m(p,v)};switch(g){case $:f=M()/12;break;case w:f=M();break;case Q:f=M()/3;break;case O:f=(D-T)/6048e5;break;case y:f=(D-T)/864e5;break;case h:f=D/r;break;case o:f=D/t;break;case e:f=D/s;break;default:f=D}return c?f:m.a(f)},u.daysInMonth=function(){return this.endOf(w).$D},u.$locale=function(){return B[this.$L]},u.locale=function(a,l){if(!a)return this.$L;var c=this.clone(),f=ht(a,l,!0);return f&&(c.$L=f),c},u.clone=function(){return m.w(this.$d,this)},u.toDate=function(){return new Date(this.valueOf())},u.toJSON=function(){return this.isValid()?this.toISOString():null},u.toISOString=function(){return this.$d.toISOString()},u.toString=function(){return this.$d.toUTCString()},d}(),zt=lt.prototype;return b.prototype=zt,[["$ms",i],["$s",e],["$m",o],["$H",h],["$W",y],["$M",w],["$y",$],["$D",E]].forEach(function(d){zt[d[1]]=function(u){return this.$g(u,d[0],d[1])}}),b.extend=function(d,u){return d.$i||(d(u,lt,b),d.$i=!0),b},b.locale=ht,b.isDayjs=bt,b.unix=function(d){return b(1e3*d)},b.en=B[X],b.Ls=B,b.p={},b})});var J={serverTarget:oe().version,production:!0,socket:"",api:{base:"/api",socket:`${window.location.protocol==="http:"?"ws://":"wss://"}${window.location.host}`,origin:window.location.origin},jwt:{tokenKey:"access_token",allowedDomains:[document.location.host],disallowedRoutes:[`${window.location.protocol}//${document.location.host}/api/auth/login`]},apiHttpOptions:{},owm:{appid:"fec67b55f7f74deaa28df89ba6a60821"}};var ce=(()=>{let t=class t{constructor(i){n(this,"$http");this.$http=i}get(i,e){return this.$http.get(`${J.api.base}${i}`,e)}post(i,e,o){return this.$http.post(`${J.api.base}${i}`,e,o)}put(i,e,o){return this.$http.put(`${J.api.base}${i}`,e,o)}patch(i,e,o){return this.$http.patch(`${J.api.base}${i}`,e,o)}delete(i,e){return this.$http.delete(`${J.api.base}${i}`,e)}};n(t,"\u0275fac",function(e){return new(e||t)(I(ee))}),n(t,"\u0275prov",N({token:t,factory:t.\u0275fac,providedIn:"root"}));let s=t;return s})();var q=function(s){return s[s.State=0]="State",s[s.Transition=1]="Transition",s[s.Sequence=2]="Sequence",s[s.Group=3]="Group",s[s.Animate=4]="Animate",s[s.Keyframes=5]="Keyframes",s[s.Style=6]="Style",s[s.Trigger=7]="Trigger",s[s.Reference=8]="Reference",s[s.AnimateChild=9]="AnimateChild",s[s.AnimateRef=10]="AnimateRef",s[s.Query=11]="Query",s[s.Stagger=12]="Stagger",s}(q||{}),Ze="*";function le(s,t){return{type:q.Trigger,name:s,definitions:t,options:{}}}function kt(s,t=null){return{type:q.Animate,styles:t,timings:s}}function Ye(s,t=null){return{type:q.Sequence,steps:s,options:t}}function mt(s){return{type:q.Style,styles:s,offset:null}}function gt(s,t,r){return{type:q.State,name:s,styles:t,options:r}}function At(s,t,r=null){return{type:q.Transition,expr:s,animation:t,options:r}}var ue=class{constructor(t=0,r=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._originalOnDoneFns=[],this._originalOnStartFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=t+r}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}onStart(t){this._originalOnStartFns.push(t),this._onStartFns.push(t)}onDone(t){this._originalOnDoneFns.push(t),this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){queueMicrotask(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(t=>t()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(t){this._position=this.totalTime?t*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(t){let r=t=="start"?this._onStartFns:this._onDoneFns;r.forEach(i=>i()),r.length=0}},he=class{constructor(t){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=t;let r=0,i=0,e=0,o=this.players.length;o==0?queueMicrotask(()=>this._onFinish()):this.players.forEach(h=>{h.onDone(()=>{++r==o&&this._onFinish()}),h.onDestroy(()=>{++i==o&&this._onDestroy()}),h.onStart(()=>{++e==o&&this._onStart()})}),this.totalTime=this.players.reduce((h,y)=>Math.max(h,y.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this.players.forEach(t=>t.init())}onStart(t){this._onStartFns.push(t)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(t=>t()),this._onStartFns=[])}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(t=>t.play())}pause(){this.players.forEach(t=>t.pause())}restart(){this.players.forEach(t=>t.restart())}finish(){this._onFinish(),this.players.forEach(t=>t.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(t=>t.destroy()),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){this.players.forEach(t=>t.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(t){let r=t*this.totalTime;this.players.forEach(i=>{let e=i.totalTime?Math.min(1,r/i.totalTime):1;i.setPosition(e)})}getPosition(){let t=this.players.reduce((r,i)=>r===null||i.totalTime>r.totalTime?i:r,null);return t!=null?t.getPosition():0}beforeDestroy(){this.players.forEach(t=>{t.beforeDestroy&&t.beforeDestroy()})}triggerCallback(t){let r=t=="start"?this._onStartFns:this._onDoneFns;r.forEach(i=>i()),r.length=0}},qe="!";var de=["toast-component",""];function be(s,t){if(s&1){let r=St();F(0,"button",5),at("click",function(){wt(r);let e=S();return Dt(e.remove())}),F(1,"span",6),R(2,"\xD7"),H()()}}function Te(s,t){if(s&1&&(xt(0),R(1),It()),s&2){let r=S(2);_(),Y("[",r.duplicatesCount+1,"]")}}function we(s,t){if(s&1&&(F(0,"div"),R(1),st(2,Te,2,1,"ng-container",4),H()),s&2){let r=S();A(r.options.titleClass),nt("aria-label",r.title),_(),Y(" ",r.title," "),_(),C("ngIf",r.duplicatesCount)}}function De(s,t){if(s&1&&rt(0,"div",7),s&2){let r=S();A(r.options.messageClass),C("innerHTML",r.message,$t)}}function Ce(s,t){if(s&1&&(F(0,"div",8),R(1),H()),s&2){let r=S();A(r.options.messageClass),nt("aria-label",r.message),_(),Y(" ",r.message," ")}}function $e(s,t){if(s&1&&(F(0,"div"),rt(1,"div",9),H()),s&2){let r=S();_(),ot("width",r.width()+"%")}}function xe(s,t){if(s&1){let r=St();F(0,"button",5),at("click",function(){wt(r);let e=S();return Dt(e.remove())}),F(1,"span",6),R(2,"\xD7"),H()()}}function Ie(s,t){if(s&1&&(xt(0),R(1),It()),s&2){let r=S(2);_(),Y("[",r.duplicatesCount+1,"]")}}function Se(s,t){if(s&1&&(F(0,"div"),R(1),st(2,Ie,2,1,"ng-container",4),H()),s&2){let r=S();A(r.options.titleClass),nt("aria-label",r.title),_(),Y(" ",r.title," "),_(),C("ngIf",r.duplicatesCount)}}function Oe(s,t){if(s&1&&rt(0,"div",7),s&2){let r=S();A(r.options.messageClass),C("innerHTML",r.message,$t)}}function Me(s,t){if(s&1&&(F(0,"div",8),R(1),H()),s&2){let r=S();A(r.options.messageClass),nt("aria-label",r.message),_(),Y(" ",r.message," ")}}function je(s,t){if(s&1&&(F(0,"div"),rt(1,"div",9),H()),s&2){let r=S();_(),ot("width",r.width()+"%")}}var Ht=class{constructor(t,r){n(this,"_attachedHost");n(this,"component");n(this,"viewContainerRef");n(this,"injector");this.component=t,this.injector=r}attach(t,r){return this._attachedHost=t,t.attach(this,r)}detach(){let t=this._attachedHost;if(t)return this._attachedHost=void 0,t.detach()}get isAttached(){return this._attachedHost!=null}setAttachedHost(t){this._attachedHost=t}},Rt=class{constructor(){n(this,"_attachedPortal");n(this,"_disposeFn")}attach(t,r){return this._attachedPortal=t,this.attachComponentPortal(t,r)}detach(){this._attachedPortal&&this._attachedPortal.setAttachedHost(),this._attachedPortal=void 0,this._disposeFn&&(this._disposeFn(),this._disposeFn=void 0)}setDisposeFn(t){this._disposeFn=t}},Lt=class{constructor(t){n(this,"_overlayRef");n(this,"componentInstance");n(this,"duplicatesCount",0);n(this,"_afterClosed",new k);n(this,"_activate",new k);n(this,"_manualClose",new k);n(this,"_resetTimeout",new k);n(this,"_countDuplicate",new k);this._overlayRef=t}manualClose(){this._manualClose.next(),this._manualClose.complete()}manualClosed(){return this._manualClose.asObservable()}timeoutReset(){return this._resetTimeout.asObservable()}countDuplicate(){return this._countDuplicate.asObservable()}close(){this._overlayRef.detach(),this._afterClosed.next(),this._manualClose.next(),this._afterClosed.complete(),this._manualClose.complete(),this._activate.complete(),this._resetTimeout.complete(),this._countDuplicate.complete()}afterClosed(){return this._afterClosed.asObservable()}isInactive(){return this._activate.isStopped}activate(){this._activate.next(),this._activate.complete()}afterActivate(){return this._activate.asObservable()}onDuplicate(t,r){t&&this._resetTimeout.next(),r&&this._countDuplicate.next(++this.duplicatesCount)}},K=class{constructor(t,r,i,e,o,h){n(this,"toastId");n(this,"config");n(this,"message");n(this,"title");n(this,"toastType");n(this,"toastRef");n(this,"_onTap",new k);n(this,"_onAction",new k);this.toastId=t,this.config=r,this.message=i,this.title=e,this.toastType=o,this.toastRef=h,this.toastRef.afterClosed().subscribe(()=>{this._onAction.complete(),this._onTap.complete()})}triggerTap(){this._onTap.next(),this.config.tapToDismiss&&this._onTap.complete()}onTap(){return this._onTap.asObservable()}triggerAction(t){this._onAction.next(t)}onAction(){return this._onAction.asObservable()}},fe={maxOpened:0,autoDismiss:!1,newestOnTop:!0,preventDuplicates:!1,countDuplicates:!1,resetTimeoutOnDuplicate:!1,includeTitleDuplicates:!1,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},closeButton:!1,disableTimeOut:!1,timeOut:5e3,extendedTimeOut:1e3,enableHtml:!1,progressBar:!1,toastClass:"ngx-toastr",positionClass:"toast-top-right",titleClass:"toast-title",messageClass:"toast-message",easing:"ease-in",easeTime:300,tapToDismiss:!0,onActivateTick:!1,progressAnimation:"decreasing"},pe=new Gt("ToastConfig"),Nt=class extends Rt{constructor(r,i,e){super();n(this,"_hostDomElement");n(this,"_componentFactoryResolver");n(this,"_appRef");this._hostDomElement=r,this._componentFactoryResolver=i,this._appRef=e}attachComponentPortal(r,i){let e=this._componentFactoryResolver.resolveComponentFactory(r.component),o;return o=e.create(r.injector),this._appRef.attachView(o.hostView),this.setDisposeFn(()=>{this._appRef.detachView(o.hostView),o.destroy()}),i?this._hostDomElement.insertBefore(this._getComponentRootNode(o),this._hostDomElement.firstChild):this._hostDomElement.appendChild(this._getComponentRootNode(o)),o}_getComponentRootNode(r){return r.hostView.rootNodes[0]}},Fe=(()=>{let t=class t{constructor(){n(this,"_document",G(Mt));n(this,"_containerElement")}ngOnDestroy(){this._containerElement&&this._containerElement.parentNode&&this._containerElement.parentNode.removeChild(this._containerElement)}getContainerElement(){return this._containerElement||this._createContainer(),this._containerElement}_createContainer(){let i=this._document.createElement("div");i.classList.add("overlay-container"),i.setAttribute("aria-live","polite"),this._document.body.appendChild(i),this._containerElement=i}};n(t,"\u0275fac",function(e){return new(e||t)}),n(t,"\u0275prov",N({token:t,factory:t.\u0275fac,providedIn:"root"}));let s=t;return s})(),Pt=class{constructor(t){n(this,"_portalHost");this._portalHost=t}attach(t,r=!0){return this._portalHost.attach(t,r)}detach(){return this._portalHost.detach()}},Ee=(()=>{let t=class t{constructor(){n(this,"_overlayContainer",G(Fe));n(this,"_componentFactoryResolver",G(Xt));n(this,"_appRef",G(pt));n(this,"_document",G(Mt));n(this,"_paneElements",new Map)}create(i,e){return this._createOverlayRef(this.getPaneElement(i,e))}getPaneElement(i="",e){return this._paneElements.get(e)||this._paneElements.set(e,{}),this._paneElements.get(e)[i]||(this._paneElements.get(e)[i]=this._createPaneElement(i,e)),this._paneElements.get(e)[i]}_createPaneElement(i,e){let o=this._document.createElement("div");return o.id="toast-container",o.classList.add(i),o.classList.add("toast-container"),e?e.getContainerElement().appendChild(o):this._overlayContainer.getContainerElement().appendChild(o),o}_createPortalHost(i){return new Nt(i,this._componentFactoryResolver,this._appRef)}_createOverlayRef(i){return new Pt(this._createPortalHost(i))}};n(t,"\u0275fac",function(e){return new(e||t)}),n(t,"\u0275prov",N({token:t,factory:t.\u0275fac,providedIn:"root"}));let s=t;return s})(),vt=(()=>{let t=class t{constructor(i,e,o,h,y){n(this,"overlay");n(this,"_injector");n(this,"sanitizer");n(this,"ngZone");n(this,"toastrConfig");n(this,"currentlyActive",0);n(this,"toasts",[]);n(this,"overlayContainer");n(this,"previousToastMessage");n(this,"index",0);this.overlay=e,this._injector=o,this.sanitizer=h,this.ngZone=y,this.toastrConfig=j(j({},i.default),i.config),i.config.iconClasses&&(this.toastrConfig.iconClasses=j(j({},i.default.iconClasses),i.config.iconClasses))}show(i,e,o={},h=""){return this._preBuildNotification(h,i,e,this.applyConfig(o))}success(i,e,o={}){let h=this.toastrConfig.iconClasses.success||"";return this._preBuildNotification(h,i,e,this.applyConfig(o))}error(i,e,o={}){let h=this.toastrConfig.iconClasses.error||"";return this._preBuildNotification(h,i,e,this.applyConfig(o))}info(i,e,o={}){let h=this.toastrConfig.iconClasses.info||"";return this._preBuildNotification(h,i,e,this.applyConfig(o))}warning(i,e,o={}){let h=this.toastrConfig.iconClasses.warning||"";return this._preBuildNotification(h,i,e,this.applyConfig(o))}clear(i){for(let e of this.toasts)if(i!==void 0){if(e.toastId===i){e.toastRef.manualClose();return}}else e.toastRef.manualClose()}remove(i){let e=this._findToast(i);if(!e||(e.activeToast.toastRef.close(),this.toasts.splice(e.index,1),this.currentlyActive=this.currentlyActive-1,!this.toastrConfig.maxOpened||!this.toasts.length))return!1;if(this.currentlyActive<this.toastrConfig.maxOpened&&this.toasts[this.currentlyActive]){let o=this.toasts[this.currentlyActive].toastRef;o.isInactive()||(this.currentlyActive=this.currentlyActive+1,o.activate())}return!0}findDuplicate(i="",e="",o,h){let{includeTitleDuplicates:y}=this.toastrConfig;for(let O of this.toasts){let w=y&&O.title===i;if((!y||w)&&O.message===e)return O.toastRef.onDuplicate(o,h),O}return null}applyConfig(i={}){return j(j({},this.toastrConfig),i)}_findToast(i){for(let e=0;e<this.toasts.length;e++)if(this.toasts[e].toastId===i)return{index:e,activeToast:this.toasts[e]};return null}_preBuildNotification(i,e,o,h){return h.onActivateTick?this.ngZone.run(()=>this._buildNotification(i,e,o,h)):this._buildNotification(i,e,o,h)}_buildNotification(i,e,o,h){if(!h.toastComponent)throw new Error("toastComponent required");let y=this.findDuplicate(o,e,this.toastrConfig.resetTimeoutOnDuplicate&&h.timeOut>0,this.toastrConfig.countDuplicates);if((this.toastrConfig.includeTitleDuplicates&&o||e)&&this.toastrConfig.preventDuplicates&&y!==null)return y;this.previousToastMessage=e;let O=!1;this.toastrConfig.maxOpened&&this.currentlyActive>=this.toastrConfig.maxOpened&&(O=!0,this.toastrConfig.autoDismiss&&this.clear(this.toasts[0].toastId));let w=this.overlay.create(h.positionClass,this.overlayContainer);this.index=this.index+1;let Q=e;e&&h.enableHtml&&(Q=this.sanitizer.sanitize(Qt.HTML,e));let $=new Lt(w),E=new K(this.index,h,Q,o,i,$),ct=[{provide:K,useValue:E}],_t=ft.create({providers:ct,parent:this._injector}),yt=new Ht(h.toastComponent,_t),ut=w.attach(yt,h.newestOnTop);$.componentInstance=ut.instance;let P={toastId:this.index,title:o||"",message:e||"",toastRef:$,onShown:$.afterActivate(),onHidden:$.afterClosed(),onTap:E.onTap(),onAction:E.onAction(),portal:ut};return O||(this.currentlyActive=this.currentlyActive+1,setTimeout(()=>{P.toastRef.activate()})),this.toasts.push(P),P}};n(t,"\u0275fac",function(e){return new(e||t)(I(pe),I(Ee),I(ft),I(se),I(Ct))}),n(t,"\u0275prov",N({token:t,factory:t.\u0275fac,providedIn:"root"}));let s=t;return s})(),ke=(()=>{let t=class t{constructor(i,e,o){n(this,"toastrService");n(this,"toastPackage");n(this,"ngZone");n(this,"message");n(this,"title");n(this,"options");n(this,"duplicatesCount");n(this,"originalTimeout");n(this,"width",it(-1));n(this,"toastClasses","");n(this,"state");n(this,"timeout");n(this,"intervalId");n(this,"hideTime");n(this,"sub");n(this,"sub1");n(this,"sub2");n(this,"sub3");this.toastrService=i,this.toastPackage=e,this.ngZone=o,this.message=e.message,this.title=e.title,this.options=e.config,this.originalTimeout=e.config.timeOut,this.toastClasses=`${e.toastType} ${e.config.toastClass}`,this.sub=e.toastRef.afterActivate().subscribe(()=>{this.activateToast()}),this.sub1=e.toastRef.manualClosed().subscribe(()=>{this.remove()}),this.sub2=e.toastRef.timeoutReset().subscribe(()=>{this.resetTimeout()}),this.sub3=e.toastRef.countDuplicate().subscribe(h=>{this.duplicatesCount=h}),this.state=it({value:"inactive",params:{easeTime:this.toastPackage.config.easeTime,easing:"ease-in"}})}get _state(){return this.state()}get displayStyle(){if(this.state().value==="inactive")return"none"}ngOnDestroy(){this.sub.unsubscribe(),this.sub1.unsubscribe(),this.sub2.unsubscribe(),this.sub3.unsubscribe(),clearInterval(this.intervalId),clearTimeout(this.timeout)}activateToast(){this.state.update(i=>W(j({},i),{value:"active"})),!(this.options.disableTimeOut===!0||this.options.disableTimeOut==="timeOut")&&this.options.timeOut&&(this.outsideTimeout(()=>this.remove(),this.options.timeOut),this.hideTime=new Date().getTime()+this.options.timeOut,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}updateProgress(){if(this.width()===0||this.width()===100||!this.options.timeOut)return;let i=new Date().getTime(),e=this.hideTime-i;this.width.set(e/this.options.timeOut*100),this.options.progressAnimation==="increasing"&&this.width.update(o=>100-o),this.width()<=0&&this.width.set(0),this.width()>=100&&this.width.set(100)}resetTimeout(){clearTimeout(this.timeout),clearInterval(this.intervalId),this.state.update(i=>W(j({},i),{value:"active"})),this.outsideTimeout(()=>this.remove(),this.originalTimeout),this.options.timeOut=this.originalTimeout,this.hideTime=new Date().getTime()+(this.options.timeOut||0),this.width.set(-1),this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10)}remove(){this.state().value!=="removed"&&(clearTimeout(this.timeout),this.state.update(i=>W(j({},i),{value:"removed"})),this.outsideTimeout(()=>this.toastrService.remove(this.toastPackage.toastId),+this.toastPackage.config.easeTime))}tapToast(){this.state().value!=="removed"&&(this.toastPackage.triggerTap(),this.options.tapToDismiss&&this.remove())}stickAround(){this.state().value!=="removed"&&this.options.disableTimeOut!=="extendedTimeOut"&&(clearTimeout(this.timeout),this.options.timeOut=0,this.hideTime=0,clearInterval(this.intervalId),this.width.set(0))}delayedHideToast(){this.options.disableTimeOut===!0||this.options.disableTimeOut==="extendedTimeOut"||this.options.extendedTimeOut===0||this.state().value==="removed"||(this.outsideTimeout(()=>this.remove(),this.options.extendedTimeOut),this.options.timeOut=this.options.extendedTimeOut,this.hideTime=new Date().getTime()+(this.options.timeOut||0),this.width.set(-1),this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}outsideTimeout(i,e){this.ngZone?this.ngZone.runOutsideAngular(()=>this.timeout=setTimeout(()=>this.runInsideAngular(i),e)):this.timeout=setTimeout(()=>i(),e)}outsideInterval(i,e){this.ngZone?this.ngZone.runOutsideAngular(()=>this.intervalId=setInterval(()=>this.runInsideAngular(i),e)):this.intervalId=setInterval(()=>i(),e)}runInsideAngular(i){this.ngZone?this.ngZone.run(()=>i()):i()}};n(t,"\u0275fac",function(e){return new(e||t)(Z(vt),Z(K),Z(Ct))}),n(t,"\u0275cmp",Tt({type:t,selectors:[["","toast-component",""]],hostVars:5,hostBindings:function(e,o){e&1&&at("click",function(){return o.tapToast()})("mouseenter",function(){return o.stickAround()})("mouseleave",function(){return o.delayedHideToast()}),e&2&&(te("@flyInOut",o._state),A(o.toastClasses),ot("display",o.displayStyle))},standalone:!0,features:[Ot],attrs:de,decls:5,vars:5,consts:[["type","button","class","toast-close-button","aria-label","Close",3,"click",4,"ngIf"],[3,"class",4,"ngIf"],["role","alert",3,"class","innerHTML",4,"ngIf"],["role","alert",3,"class",4,"ngIf"],[4,"ngIf"],["type","button","aria-label","Close",1,"toast-close-button",3,"click"],["aria-hidden","true"],["role","alert",3,"innerHTML"],["role","alert"],[1,"toast-progress"]],template:function(e,o){e&1&&st(0,be,3,0,"button",0)(1,we,3,5,"div",1)(2,De,1,3,"div",2)(3,Ce,2,4,"div",3)(4,$e,2,2,"div",4),e&2&&(C("ngIf",o.options.closeButton),_(),C("ngIf",o.title),_(),C("ngIf",o.message&&o.options.enableHtml),_(),C("ngIf",o.message&&!o.options.enableHtml),_(),C("ngIf",o.options.progressBar))},dependencies:[jt],encapsulation:2,data:{animation:[le("flyInOut",[gt("inactive",mt({opacity:0})),gt("active",mt({opacity:1})),gt("removed",mt({opacity:0})),At("inactive => active",kt("{{ easeTime }}ms {{ easing }}")),At("active => removed",kt("{{ easeTime }}ms {{ easing }}"))])]},changeDetection:0}));let s=t;return s})(),Ae=W(j({},fe),{toastComponent:ke}),He=(s={})=>Kt([{provide:pe,useValue:{default:Ae,config:s}}]),ci=(()=>{let t=class t{static forRoot(i={}){return{ngModule:t,providers:[He(i)]}}};n(t,"\u0275fac",function(e){return new(e||t)}),n(t,"\u0275mod",Jt({type:t})),n(t,"\u0275inj",Wt({}));let s=t;return s})();var Re=(()=>{let t=class t{constructor(i,e,o){n(this,"toastrService");n(this,"toastPackage");n(this,"appRef");n(this,"message");n(this,"title");n(this,"options");n(this,"duplicatesCount");n(this,"originalTimeout");n(this,"width",it(-1));n(this,"toastClasses","");n(this,"state",it("inactive"));n(this,"timeout");n(this,"intervalId");n(this,"hideTime");n(this,"sub");n(this,"sub1");n(this,"sub2");n(this,"sub3");this.toastrService=i,this.toastPackage=e,this.appRef=o,this.message=e.message,this.title=e.title,this.options=e.config,this.originalTimeout=e.config.timeOut,this.toastClasses=`${e.toastType} ${e.config.toastClass}`,this.sub=e.toastRef.afterActivate().subscribe(()=>{this.activateToast()}),this.sub1=e.toastRef.manualClosed().subscribe(()=>{this.remove()}),this.sub2=e.toastRef.timeoutReset().subscribe(()=>{this.resetTimeout()}),this.sub3=e.toastRef.countDuplicate().subscribe(h=>{this.duplicatesCount=h})}get displayStyle(){return this.state()==="inactive"?"none":null}ngOnDestroy(){this.sub.unsubscribe(),this.sub1.unsubscribe(),this.sub2.unsubscribe(),this.sub3.unsubscribe(),clearInterval(this.intervalId),clearTimeout(this.timeout)}activateToast(){this.state.set("active"),!(this.options.disableTimeOut===!0||this.options.disableTimeOut==="timeOut")&&this.options.timeOut&&(this.timeout=setTimeout(()=>{this.remove()},this.options.timeOut),this.hideTime=new Date().getTime()+this.options.timeOut,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10))),this.options.onActivateTick&&this.appRef.tick()}updateProgress(){if(this.width()===0||this.width()===100||!this.options.timeOut)return;let i=new Date().getTime(),e=this.hideTime-i;this.width.set(e/this.options.timeOut*100),this.options.progressAnimation==="increasing"&&this.width.update(o=>100-o),this.width()<=0&&this.width.set(0),this.width()>=100&&this.width.set(100)}resetTimeout(){clearTimeout(this.timeout),clearInterval(this.intervalId),this.state.set("active"),this.options.timeOut=this.originalTimeout,this.timeout=setTimeout(()=>this.remove(),this.originalTimeout),this.hideTime=new Date().getTime()+(this.originalTimeout||0),this.width.set(-1),this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10))}remove(){this.state()!=="removed"&&(clearTimeout(this.timeout),this.state.set("removed"),this.timeout=setTimeout(()=>this.toastrService.remove(this.toastPackage.toastId)))}tapToast(){this.state()!=="removed"&&(this.toastPackage.triggerTap(),this.options.tapToDismiss&&this.remove())}stickAround(){this.state()!=="removed"&&(clearTimeout(this.timeout),this.options.timeOut=0,this.hideTime=0,clearInterval(this.intervalId),this.width.set(0))}delayedHideToast(){this.options.disableTimeOut===!0||this.options.disableTimeOut==="extendedTimeOut"||this.options.extendedTimeOut===0||this.state()==="removed"||(this.timeout=setTimeout(()=>this.remove(),this.options.extendedTimeOut),this.options.timeOut=this.options.extendedTimeOut,this.hideTime=new Date().getTime()+(this.options.timeOut||0),this.width.set(-1),this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10)))}};n(t,"\u0275fac",function(e){return new(e||t)(Z(vt),Z(K),Z(pt))}),n(t,"\u0275cmp",Tt({type:t,selectors:[["","toast-component",""]],hostVars:4,hostBindings:function(e,o){e&1&&at("click",function(){return o.tapToast()})("mouseenter",function(){return o.stickAround()})("mouseleave",function(){return o.delayedHideToast()}),e&2&&(A(o.toastClasses),ot("display",o.displayStyle))},standalone:!0,features:[Ot],attrs:de,decls:5,vars:5,consts:[["type","button","class","toast-close-button","aria-label","Close",3,"click",4,"ngIf"],[3,"class",4,"ngIf"],["role","alert",3,"class","innerHTML",4,"ngIf"],["role","alert",3,"class",4,"ngIf"],[4,"ngIf"],["type","button","aria-label","Close",1,"toast-close-button",3,"click"],["aria-hidden","true"],["role","alert",3,"innerHTML"],["role","alert"],[1,"toast-progress"]],template:function(e,o){e&1&&st(0,xe,3,0,"button",0)(1,Se,3,5,"div",1)(2,Oe,1,3,"div",2)(3,Me,2,4,"div",3)(4,je,2,2,"div",4),e&2&&(C("ngIf",o.options.closeButton),_(),C("ngIf",o.title),_(),C("ngIf",o.message&&o.options.enableHtml),_(),C("ngIf",o.message&&!o.options.enableHtml),_(),C("ngIf",o.options.progressBar))},dependencies:[jt],encapsulation:2,changeDetection:0}));let s=t;return s})(),ui=W(j({},fe),{toastComponent:Re});var Bt=ge(re(),1);var pi=(()=>{let t=class t{constructor(i,e,o,h){n(this,"$api");n(this,"$title");n(this,"$toastr");n(this,"$translate");n(this,"env",{});n(this,"formAuth",!0);n(this,"uiVersion");n(this,"theme");n(this,"lightingMode");n(this,"currentLightingMode");n(this,"actualLightingMode");n(this,"browserLightingMode");n(this,"loginWallpaper");n(this,"serverTimeOffset",0);n(this,"themeList",["orange","red","pink","purple","deep-purple","indigo","blue","blue-grey","cyan","green","teal","grey","brown"]);n(this,"rtl",!1);n(this,"settingsLoadedSubject",new k);n(this,"onSettingsLoaded",this.settingsLoadedSubject.pipe(Ut()));n(this,"settingsLoaded",!1);this.$api=i,this.$title=e,this.$toastr=o,this.$translate=h,this.getAppSettings()}getAppSettings(){return Yt(this,null,function*(){let i=yield qt(this.$api.get("/auth/settings"));this.formAuth=i.formAuth,this.env=i.env,this.lightingMode=i.lightingMode,this.loginWallpaper=i.loginWallpaper,this.setLightingMode(this.lightingMode,"user"),this.setTheme(i.theme),this.setTitle(this.env.homebridgeInstanceName),this.checkServerTime(i.serverTimestamp),this.setUiVersion(i.env.packageVersion),this.setLang(this.env.lang),this.settingsLoaded=!0,this.settingsLoadedSubject.next(void 0)})}setBrowserLightingMode(i){this.browserLightingMode=i,this.lightingMode==="auto"&&this.setLightingMode(i,"browser")}setLightingMode(i,e){e==="user"&&(this.lightingMode=i),this.currentLightingMode=i,this.actualLightingMode=this.currentLightingMode==="auto"?this.browserLightingMode:this.currentLightingMode,this.theme&&this.setTheme(this.theme)}setTheme(i){(!i||!this.themeList.includes(i))&&(i="orange");let e=window.document.querySelector("body");e.classList.remove(`config-ui-x-${this.theme}`),e.classList.remove(`config-ui-x-dark-mode-${this.theme}`),this.theme=i,this.actualLightingMode==="dark"?(e.classList.add(`config-ui-x-dark-mode-${this.theme}`),e.classList.contains("dark-mode")||e.classList.add("dark-mode")):(e.classList.add(`config-ui-x-${this.theme}`),e.classList.contains("dark-mode")&&e.classList.remove("dark-mode"))}setTitle(i){this.$title.setTitle(i||"Homebridge")}setUiVersion(i){this.uiVersion||(this.uiVersion=i)}setLang(i){i?this.$translate.use(i):i="auto",this.env.lang=i}setEnvItem(i,e){this.env[i]=e}checkServerTime(i){let o=(0,Bt.default)(i).diff((0,Bt.default)(),"hour");this.serverTimeOffset=o*60*60,(o>=8||o<=-8)&&this.$toastr.warning(this.$translate.instant("settings.datetime.incorrect"),this.$translate.instant("toast.title_warning"),{timeOut:2e4,tapToDismiss:!1}).onTap.subscribe(()=>{window.open("https://homebridge.io/w/JqTFs","_blank")})}};n(t,"\u0275fac",function(e){return new(e||t)(I(ce),I(ie),I(vt),I(ne))}),n(t,"\u0275prov",N({token:t,factory:t.\u0275fac,providedIn:"root"}));let s=t;return s})();export{J as a,re as b,ce as c,q as d,Ze as e,Ye as f,mt as g,ue as h,he as i,qe as j,vt as k,ci as l,pi as m};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as Te,b as Ve,c as $e}from"./chunk-JNTZ55B6.js";import{a as ye,d as G,f as Se}from"./chunk-TWCQHSLU.js";import{a as Be,d as z}from"./chunk-T55QBCST.js";import"./chunk-KI3WG4KR.js";import"./chunk-PHW6KH6T.js";import"./chunk-VGPTS3MR.js";import{a as Pe}from"./chunk-A4JZT5IP.js";import"./chunk-5XD2GEUR.js";import"./chunk-W2AFJCAF.js";import"./chunk-VCXNOPS6.js";import{a as F}from"./chunk-KK5OFXOV.js";import"./chunk-KS5PTWL2.js";import{a as L}from"./chunk-Q5JD6TV5.js";import{a as ke}from"./chunk-2YLP3FDB.js";import"./chunk-RJIS7VSV.js";import{H as fe,I as _e,J as he,K as be,L as Ce,M as ve,N as xe,O as we,Q as Ie,c as ae,d as re,e as oe,f as le,g as se,j as pe,m as de,p as ce,q as ge,y as ue,z as me}from"./chunk-F5I4UBIU.js";import{c as N,k as A,m as U}from"./chunk-7FKJ76S4.js";import{a as R,b as M,c as ie}from"./chunk-FPYOAMQR.js";import{$ as V,Ga as w,Ka as B,La as s,Ob as X,Pb as Y,Qb as E,Ua as l,Va as p,Wa as c,X as j,Xa as W,Ya as J,Yb as Z,Za as C,_b as ee,aa as D,ab as _,bb as g,h as d,ha as h,i as k,ia as b,jb as m,kb as P,lb as v,oc as te,rc as ne,t as S,ua as $,uc as H,vb as K,wa as r,xa as I,xb as u,yb as f,zb as Q}from"./chunk-SR4W2G2S.js";function Fe(i,o){if(i&1){let n=C();l(0,"button",15),_("click",function(){h(n);let t=g();return b(t.$activeModal.dismiss("Dismiss"))}),m(1),u(2,"translate"),p()}i&2&&(r(),v(" ",f(2,1,"form.button_close")," "))}function ze(i,o){if(i&1){let n=C();l(0,"button",15),_("click",function(){h(n);let t=g();return b(t.$activeModal.dismiss("Dismiss"))}),m(1),u(2,"translate"),p()}i&2&&(r(),v(" ",f(2,1,"form.button_close")," "))}function Oe(i,o){if(i&1&&(l(0,"a",16),m(1),u(2,"translate"),c(3,"i",17),p()),i&2){let n=g();s("href",n.plugin.links.homepage||n.plugin.links.npm,$),r(),v(" ",f(2,2,"plugins.button_homepage")," ")}}var je=(()=>{let o=class o{constructor(e){d(this,"$activeModal");d(this,"plugin");d(this,"defaultIcon","assets/hb-icon.png");this.$activeModal=e}ngOnInit(){this.plugin.icon||(this.plugin.icon=this.defaultIcon)}handleIconError(){this.plugin.icon=this.defaultIcon}};d(o,"\u0275fac",function(t){return new(t||o)(I(ve))}),d(o,"\u0275cmp",V({type:o,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:26,vars:14,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"click"],["aria-hidden","true"],[1,"modal-body","w-100","text-center"],["alt","Plugin Icon",1,"mb-3","plugin-icon",3,"error","src"],[1,"my-3"],[1,"m-0","grey-text"],[1,"modal-footer","justify-content-between"],[1,"text-left"],["type","button","class","btn btn-elegant","data-dismiss","modal",3,"click",4,"ngIf"],[1,"text-center"],[1,"text-right"],["class","btn btn-primary text-decoration-none","target","_blank","rel","noopener noreferrer",3,"href",4,"ngIf"],["type","button","data-dismiss","modal",1,"btn","btn-elegant",3,"click"],["target","_blank","rel","noopener noreferrer",1,"btn","btn-primary","text-decoration-none",3,"href"],[1,"fas","fa-fw","fa-external-link-alt"]],template:function(t,a){t&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),m(3),u(4,"translate"),p(),l(5,"button",3),u(6,"translate"),_("click",function(){return a.$activeModal.dismiss("Dismiss")}),l(7,"span",4),m(8,"\xD7"),p()()(),l(9,"div",5)(10,"img",6),_("error",function(){return a.handleIconError()}),p(),l(11,"h4"),m(12),p(),l(13,"p",7),m(14),p(),l(15,"p",8),m(16),p(),l(17,"p",8),m(18),p()(),l(19,"div",9)(20,"div",10),w(21,Fe,3,3,"button",11),p(),l(22,"div",12),w(23,ze,3,3,"button",11),p(),l(24,"div",13),w(25,Oe,4,4,"a",14),p()()()),t&2&&(r(3),P(f(4,10,"plugins.manage.information")),r(2),B("aria-label",f(6,12,"form.button_close")),r(5),s("src",a.plugin.icon,$),r(2),P(a.plugin.displayName||a.plugin.name),r(2),P(a.plugin.description),r(2),P(a.plugin.name),r(2),v("@",a.plugin.author,""),r(3),s("ngIf",a.plugin.links.homepage||a.plugin.links.npm),r(2),s("ngIf",!a.plugin.links.homepage&&!a.plugin.links.npm),r(2),s("ngIf",a.plugin.links.homepage||a.plugin.links.npm))},dependencies:[E,M],styles:[".plugin-icon[_ngcontent-%COMP%]{height:75px;width:75px;border-radius:15px;border:1px solid #222222}"]}));let i=o;return i})();var Je=(i,o)=>({"fa-bridge-circle-exclamation orange-text":i,"fa-bridge-circle-xmark red-text":o});function Ke(i,o){i&1&&c(0,"i",30)}function Qe(i,o){i&1&&c(0,"i",31)}function Xe(i,o){if(i&1){let n=C();l(0,"a",27),_("click",function(){h(n);let t=g();return b(t.openHb2InfoModal())}),w(1,Ke,1,0,"i",28)(2,Qe,1,0,"i",29),p()}if(i&2){let n=g();s("ngbTooltip","Homebridge v2.0 Readiness")("placement","right"),r(),s("ngIf",n.hb2Status==="supported"),r(),s("ngIf",n.hb2Status==="unknown")}}function Ye(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),u(2,"translate"),_("click",function(){h(n);let t=g();return b(t.$plugin.checkAndUpdatePlugin(t.plugin,t.plugin.updateTag||"latest"))}),c(3,"i",33),p()}i&2&&(s("ngbTooltip",f(1,2,"plugins.button_update")),B("aria-label",f(2,4,"plugins.button_update")))}function Ze(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),u(2,"translate"),_("click",function(){h(n);let t=g();return b(t.$plugin.settings(t.plugin))}),c(3,"i",34),p()}i&2&&(s("ngbTooltip",f(1,2,"plugins.button_set_up")),B("aria-label",f(2,4,"plugins.button_set_up")))}function ei(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),u(2,"translate"),_("click",function(){h(n);let t=g();return b(t.$plugin.bridgeSettings(t.plugin))}),c(3,"i",35),p()}i&2&&(s("ngbTooltip",f(1,2,"child_bridge.setup")),B("aria-label",f(2,4,"child_bridge.setup")))}function ii(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),u(2,"translate"),_("click",function(){h(n);let t=g();return b(t.$plugin.bridgeSettings(t.plugin))}),c(3,"i",36),p()}i&2&&(s("ngbTooltip",f(1,2,"child_bridge.bridge_connect")),B("aria-label",f(2,4,"child_bridge.bridge_connect")))}function ti(i,o){if(i&1&&c(0,"i",37),i&2){let n=g();s("ngClass",K(1,Je,n.childBridgeStatus==="pending",n.childBridgeStatus==="down"))}}function ni(i,o){if(i&1){let n=C();l(0,"p",19)(1,"a",38),_("click",function(){h(n);let t=g();return b(t.openVerifiedModal())}),c(2,"i",39),l(3,"span",17),m(4),u(5,"translate"),p()()()}i&2&&(r(4),P(f(5,1,"plugins.donate.button_verified")))}function ai(i,o){if(i&1){let n=C();l(0,"p",19)(1,"a",40),_("click",function(){h(n);let t=g();return b(t.openVerifiedModal())}),c(2,"i",41),l(3,"span",17),m(4),u(5,"translate"),p()()()}i&2&&(r(4),P(f(5,1,"plugins.donate.button_not_verified")))}function ri(i,o){if(i&1){let n=C();l(0,"a",42),_("click",function(){h(n);let t=g();return b(t.openFundingModal(t.plugin))}),c(1,"i",43),l(2,"span",17),m(3),p()()}if(i&2){let n=g();r(3),v("@",n.plugin.author,"")}}function oi(i,o){if(i&1&&(l(0,"span",17),c(1,"i",44),m(2),p()),i&2){let n=g();r(2),v("@",n.plugin.author," ")}}function li(i,o){if(i&1&&(l(0,"span"),m(1),u(2,"date"),p()),i&2){let n=g(2);r(),v("(",Q(2,1,n.plugin.lastUpdated,"yyyy-MM-dd"),")")}}function si(i,o){if(i&1&&(l(0,"span"),c(1,"i",45),l(2,"span",17),m(3),w(4,li,3,4,"span",23),p()()),i&2){let n=g();r(3),v("v",n.plugin.latestVersion," "),r(),s("ngIf",n.plugin.lastUpdated)}}function pi(i,o){if(i&1&&(l(0,"span"),c(1,"i",46),m(2),p()),i&2){let n=g();r(2),v("v",n.plugin.installedVersion," ")}}function di(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),_("click",function(){h(n);let t=g();return b(t.doChildBridgeAction("restart"))}),c(2,"i",47),p()}if(i&2){let n=g();s("ngbTooltip",f(1,1,n.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))}}function ci(i,o){if(i&1){let n=C();l(0,"a",48),_("click",function(){h(n);let t=g();return b(t.enablePlugin(t.plugin))}),c(1,"i",49),u(2,"translate"),p()}i&2&&(r(),s("ngbTooltip",f(2,1,"plugins.status_disabled")))}function gi(i,o){if(i&1){let n=C();l(0,"a",50),_("click",function(){h(n);let t=g();return b(t.$plugin.installAlternateVersion(t.plugin))}),c(1,"i",51),p()}}function ui(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.viewPluginLog(t.plugin))}),c(1,"i",61),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.plugin_logs")," "))}function mi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.installAlternateVersion(t.plugin))}),c(1,"i",62),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.manage_version")," "))}function fi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.jsonEditor(t.plugin))}),c(1,"i",63),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.json_config")," "))}function _i(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.disablePlugin(t.plugin))}),c(1,"i",64),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.disable")," "))}function hi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.enablePlugin(t.plugin))}),c(1,"i",65),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.enable")," "))}function bi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.uninstallPlugin(t.plugin,t.setChildBridges))}),c(1,"i",66),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.button_uninstall")," "))}function Ci(i,o){i&1&&c(0,"div",67)}function vi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(3);return b(t.doChildBridgeAction("restart"))}),c(1,"i",69),m(2),u(3,"translate"),p()}if(i&2){let n=g(3);r(2),v(" ",f(3,1,n.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart")," ")}}function xi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(3);return b(t.doChildBridgeAction("stop"))}),c(1,"i",70),m(2),u(3,"translate"),p()}if(i&2){let n=g(3);r(2),v(" ",f(3,1,n.setChildBridges.length>1?"child_bridge.stop_plural":"child_bridge.stop")," ")}}function wi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(3);return b(t.doChildBridgeAction("start"))}),c(1,"i",71),m(2),u(3,"translate"),p()}if(i&2){let n=g(3);r(2),v(" ",f(3,1,n.setChildBridges.length>1?"child_bridge.start_plural":"child_bridge.start")," ")}}function Ii(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(3);return b(t.$plugin.resetChildBridges(t.setChildBridges))}),c(1,"i",72),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"child_bridge.reset_accessories")," "))}function yi(i,o){if(i&1){let n=C();W(0),l(1,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.bridgeSettings(t.plugin))}),c(2,"i",68),m(3),u(4,"translate"),p(),w(5,vi,4,3,"button",58)(6,xi,4,3,"button",58)(7,wi,4,3,"button",58)(8,Ii,4,3,"button",58),J()}if(i&2){let n=g(2);r(3),v(" ",f(4,5,"child_bridge.bridge_settings")," "),r(2),s("ngIf",!n.childBridgeRestartInProgress),r(),s("ngIf",!n.allChildBridgesStopped),r(),s("ngIf",n.allChildBridgesStopped),r(),s("ngIf",n.$settings.env.serviceMode)}}function Pi(i,o){i&1&&c(0,"div",67)}function ki(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.bridgeSettings(t.plugin))}),c(1,"i",73),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"child_bridge.setup")," "))}function Bi(i,o){i&1&&c(0,"div",67)}function Si(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.bridgeSettings(t.plugin))}),c(1,"i",73),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"child_bridge.setup")," "))}function Ti(i,o){i&1&&c(0,"div",67)}function Vi(i,o){if(i&1&&(l(0,"a",74),c(1,"i",75),m(2),u(3,"translate"),p()),i&2){let n=g(2);s("href",n.plugin.links.bugs,$),r(2),v(" ",f(3,2,"support.links.issue")," ")}}function $i(i,o){if(i&1){let n=C();l(0,"span",52)(1,"a",53),c(2,"i",54),p(),l(3,"div",55)(4,"button",56),_("click",function(){h(n);let t=g();return b(t.$plugin.settings(t.plugin))}),c(5,"i",57),m(6),u(7,"translate"),p(),w(8,ui,4,3,"button",58)(9,mi,4,3,"button",58)(10,fi,4,3,"button",58)(11,_i,4,3,"button",58)(12,hi,4,3,"button",58)(13,bi,4,3,"button",58)(14,Ci,1,0,"div",59)(15,yi,9,7,"ng-container",23)(16,Pi,1,0,"div",59)(17,ki,4,3,"button",58)(18,Bi,1,0,"div",59)(19,Si,4,3,"button",58)(20,Ti,1,0,"div",59)(21,Vi,4,4,"a",60),p()()}if(i&2){let n=g();r(),B("aria-label","Plugin Actions Dropdown"),r(5),v(" ",f(7,16,"plugins.button_settings")," "),r(2),s("ngIf",n.plugin.isConfigured&&!n.plugin.disabled),r(),s("ngIf",n.plugin.publicPackage),r(),s("ngIf",!n.isMobile&&n.plugin.name!=="homebridge-config-ui-x"),r(),s("ngIf",n.plugin.name!=="homebridge-config-ui-x"&&!n.plugin.disabled),r(),s("ngIf",n.plugin.name!=="homebridge-config-ui-x"&&n.plugin.disabled),r(),s("ngIf",n.plugin.name!=="homebridge-config-ui-x"),r(),s("ngIf",!n.plugin.disabled&&n.plugin.isConfigured&&n.plugin.hasChildBridges&&n.plugin.installedVersion&&n.plugin.name!=="homebridge-config-ui-x"),r(),s("ngIf",n.plugin.hasChildBridges&&!n.plugin.disabled),r(),s("ngIf",n.plugin.isConfigured&&!n.plugin.hasChildBridges&&!n.plugin.disabled&&!n.plugin.recommendChildBridge),r(),s("ngIf",n.plugin.isConfigured&&!n.plugin.hasChildBridges&&!n.plugin.disabled&&!n.plugin.recommendChildBridge),r(),s("ngIf",n.plugin.isConfigured&&!n.plugin.hasChildBridges&&!n.plugin.disabled&&n.plugin.recommendChildBridge&&n.plugin.updateAvailable),r(),s("ngIf",n.plugin.isConfigured&&!n.plugin.hasChildBridges&&!n.plugin.disabled&&n.plugin.recommendChildBridge&&n.plugin.updateAvailable),r(),s("ngIf",n.plugin.links==null?null:n.plugin.links.bugs),r(),s("ngIf",n.plugin.links==null?null:n.plugin.links.bugs)}}var De=(()=>{let o=class o{constructor(e,t,a,x,T,y,q,Re){d(this,"$api");d(this,"$md");d(this,"$modal");d(this,"$plugin");d(this,"$settings");d(this,"$toastr");d(this,"$translate");d(this,"$ws");d(this,"plugin");d(this,"hasChildBridges",!1);d(this,"hasUnpairedChildBridges",!1);d(this,"allChildBridgesStopped",!1);d(this,"childBridgeStatus","pending");d(this,"childBridgeRestartInProgress",!1);d(this,"defaultIcon","assets/hb-icon.png");d(this,"isMobile");d(this,"setChildBridges",[]);d(this,"prettyDisplayName","");d(this,"hb2Status","unknown");d(this,"io");this.$api=e,this.$md=t,this.$modal=a,this.$plugin=x,this.$settings=T,this.$toastr=y,this.$translate=q,this.$ws=Re}set childBridges(e){var x,T;this.hasChildBridges=e.length>0,this.hasUnpairedChildBridges=e.filter(y=>y.paired===!1).length>0,this.allChildBridgesStopped=e.filter(y=>y.manuallyStopped===!0).length===e.length,this.hasChildBridges&&(e.some(y=>y.status==="down")?this.childBridgeStatus="down":e.some(y=>y.status==="pending")?this.childBridgeStatus="pending":e.some(y=>y.status==="ok")&&(this.childBridgeStatus="ok")),this.setChildBridges=e;let t=this.$settings.env.homebridgeVersion.split(".")[0],a=((T=(x=this.plugin.engines)==null?void 0:x.homebridge)==null?void 0:T.split("||").map(y=>y.trim()))||[];this.hb2Status=t==="2"?"hide":a.some(y=>y.startsWith("^2")||y.startsWith(">=2"))?"supported":this.hb2Status}ngOnInit(){this.isMobile=this.$md.detect.mobile(),this.prettyDisplayName=this.prettifyName(),this.io=this.$ws.getExistingNamespace("child-bridges"),this.plugin.icon||(this.plugin.icon=this.defaultIcon)}openFundingModal(e){let t=this.$modal.open(Ve,{size:"lg",backdrop:"static"});t.componentInstance.plugin=e}openVerifiedModal(){let e=this.$modal.open(G,{size:"lg",backdrop:"static"});this.plugin.verifiedPlugin||this.plugin.verifiedPlusPlugin?(e.componentInstance.title=this.$translate.instant("plugins.manage.verified_title"),e.componentInstance.subtitle=this.$translate.instant("plugins.manage.verified_subtitle",{pluginName:this.plugin.displayName||this.plugin.name}),e.componentInstance.message=this.$translate.instant("plugins.manage.verified_message"),e.componentInstance.faIconClass="fa-shield-alt green-text"):(e.componentInstance.title=this.$translate.instant("plugins.manage.unverified_title"),e.componentInstance.subtitle=this.$translate.instant("plugins.manage.unverified_subtitle",{pluginName:this.plugin.displayName||this.plugin.name}),e.componentInstance.message=this.$translate.instant("plugins.manage.unverified_message"),e.componentInstance.faIconClass="fa-shield-alt grey-text"),e.componentInstance.ctaButtonLabel=this.$translate.instant("form.button_more_info"),e.componentInstance.ctaButtonLink="https://github.com/homebridge/homebridge/wiki/verified-Plugins"}pluginInfoModal(e){let t=this.$modal.open(je,{size:"lg",backdrop:"static"});t.componentInstance.plugin=e}disablePlugin(e){let t=this.$modal.open(Te,{size:"lg",backdrop:"static"});t.componentInstance.pluginName=e.name,t.componentInstance.isConfigured=e.isConfigured,t.componentInstance.isConfiguredDynamicPlatform=e.isConfiguredDynamicPlatform,t.result.then(()=>k(this,null,function*(){try{yield S(this.$api.put(`/config-editor/plugin/${encodeURIComponent(e.name)}/disable`,{})),e.disabled=!0,this.hasChildBridges&&this.doChildBridgeAction("stop"),this.$modal.open(L,{size:"lg",backdrop:"static"})}catch(a){console.error(a),this.$toastr.error(this.$translate.instant("plugins.disable.error"),this.$translate.instant("toast.title_error"))}}))}enablePlugin(e){let t=this.$modal.open(ke,{size:"lg",backdrop:"static"});t.componentInstance.title=`${this.$translate.instant("plugins.manage.enable")}: ${e.name}`,t.componentInstance.message=this.$translate.instant("plugins.manage.confirm_enable",{pluginName:e.name}),t.componentInstance.confirmButtonLabel=this.$translate.instant("plugins.manage.enable"),t.componentInstance.faIconClass="fa-circle-play primary-text",t.result.then(()=>k(this,null,function*(){try{yield S(this.$api.put(`/config-editor/plugin/${encodeURIComponent(e.name)}/enable`,{})),e.disabled=!1,this.hasChildBridges&&(yield this.doChildBridgeAction("start")),this.$modal.open(L,{size:"lg",backdrop:"static"})}catch(a){console.error(a),this.$toastr.error(this.$translate.instant("plugins.enable.error"),this.$translate.instant("toast.title_error"))}}))}viewPluginLog(e){let t=this.$modal.open(Be,{size:"xl",backdrop:"static"});t.componentInstance.plugin=e}doChildBridgeAction(e){return k(this,null,function*(){this.childBridgeRestartInProgress=!0;try{for(let t of this.setChildBridges)yield S(this.io.request(`${e}-child-bridge`,t.username))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("plugins.bridge.action_error",{action:e}),this.$translate.instant("toast.title_error")),this.childBridgeRestartInProgress=!1}finally{setTimeout(()=>{this.childBridgeRestartInProgress=!1},e==="restart"?12e3:e==="stop"?6e3:1e3)}})}handleIconError(){this.plugin.icon=this.defaultIcon}prettifyName(){let e=this.plugin.displayName||(this.plugin.name.charAt(0)==="@"?this.plugin.name.split("/")[1]:this.plugin.name);return e=e.replace(/-/g," "),this.isMobile&&e.toLowerCase().startsWith("homebridge ")&&(e=e.replace(/^homebridge /i,"")),this.plugin.displayName||(e=e.replace(/\w\S*/g,t=>t.charAt(0).toUpperCase()+t.substring(1).toLowerCase())),e}openHb2InfoModal(){let e=this.$modal.open(G,{size:"lg",backdrop:"static"});e.componentInstance.title="Plugin Readiness",this.hb2Status==="supported"?(e.componentInstance.subtitle=`${this.plugin.displayName||this.plugin.name} is ready for Homebridge v2.0`,e.componentInstance.message="The developer has specifically marked your installed version of the plugin as compatible with Homebridge v2.0.",e.componentInstance.faIconClass="fa-check-circle green-text"):(e.componentInstance.subtitle=`${this.plugin.displayName||this.plugin.name} might not be ready for Homebridge v2.0`,e.componentInstance.message="The developer has not specifically marked your installed version of the plugin as compatible with Homebridge v2.0, but it may still work.",e.componentInstance.faIconClass="fa-question-circle orange-text"),e.componentInstance.ctaButtonLabel=this.$translate.instant("form.button_more_info"),e.componentInstance.ctaButtonLink="https://github.com/homebridge/homebridge/wiki/Updating-To-Homebridge-v2.0"}};d(o,"\u0275fac",function(t){return new(t||o)(I(N),I(Pe),I(xe),I(z),I(U),I(A),I(R),I(F))}),d(o,"\u0275cmp",V({type:o,selectors:[["app-plugin-card"]],inputs:{plugin:"plugin",childBridges:"childBridges"},decls:37,vars:20,consts:[[1,"card","card-body","mb-3"],[1,"d-flex","flex-row","justify-content-between"],[1,"d-flex","flex-column","mr-3","align-items-center","justify-content-between"],["alt","Plugin Icon",1,"plugin-icon-card","mb-3",3,"error","src"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover","aria-label","Homebridge v2.0 Readiness",3,"ngbTooltip","placement","click",4,"ngIf"],[1,"d-flex","flex-column","justify-content-between",2,"min-width","calc(100% - 80px)"],[1,"d-flex","flex-row","align-items-end"],[1,"d-flex","flex-column","w-100"],[1,"d-flex","flex-row"],[1,"card-title","mb-2","text-truncate"],[1,"ml-auto"],["href","javascript:void(0)","class","card-link","container","body","openDelay","150","triggers","hover",3,"ngbTooltip","click",4,"ngIf"],[1,"fas","fa-fw","fa-spinner","fa-pulse","fa-lg","grey-text","ml-3",3,"hidden"],["class","fas fa-fw fa-lg ml-3",3,"ngClass",4,"ngIf"],[1,"card-text","mb-2","text-truncate"],["href","javascript:void(0)",1,"card-link","grey-text",3,"click"],[1,"fas","fa-fw","fa-info-circle","fa-lg","mr-1"],[1,"grey-text"],["class","card-text mb-2",4,"ngIf"],[1,"card-text","mb-2"],["href","javascript:void(0)","class","card-link pink-text",3,"click",4,"ngIf"],["class","grey-text",4,"ngIf"],[1,"card-text","mb-0","grey-text"],[4,"ngIf"],["href","javascript:void(0)","class","card-link red-text",3,"click",4,"ngIf"],["href","javascript:void(0)",3,"click",4,"ngIf"],["ngbDropdown","","placement","left","class","d-inline-block ml-3 mt-auto",4,"ngIf"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover","aria-label","Homebridge v2.0 Readiness",3,"click","ngbTooltip","placement"],["class","fas fa-check-circle green-text fa-xl","aria-label","The developer has specifically marked this plugin as compatible with Homebridge v2.0",4,"ngIf"],["class","fas fa-question-circle orange-text fa-xl","aria-label","The developer has not specifically marked this plugin as compatible with Homebridge v2.0, but it may still work.",4,"ngIf"],["aria-label","The developer has specifically marked this plugin as compatible with Homebridge v2.0",1,"fas","fa-check-circle","green-text","fa-xl"],["aria-label","The developer has not specifically marked this plugin as compatible with Homebridge v2.0, but it may still work.",1,"fas","fa-question-circle","orange-text","fa-xl"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover",1,"card-link",3,"click","ngbTooltip"],[1,"far","fa-fw","fa-arrow-alt-circle-up","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-sliders","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-bridge","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-qrcode","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-lg","ml-3",3,"ngClass"],["href","javascript:void(0)",1,"card-link","green-text",3,"click"],[1,"fas","fa-fw","fa-shield-alt","fa-lg","mr-1"],["href","javascript:void(0)",1,"card-link",3,"click"],[1,"fas","fa-fw","fa-shield-alt","fa-lg","mr-1",2,"opacity","0.25"],["href","javascript:void(0)",1,"card-link","pink-text",3,"click"],[1,"fas","fa-fw","fa-heart","fa-lg","mr-1"],[1,"fas","fa-fw","fa-heart","fa-lg","mr-1",2,"opacity","0.5"],[1,"far","fa-fw","fa-circle-dot","fa-lg","mr-1"],[1,"far","fa-fw","fa-circle-check","fa-lg","mr-1"],[1,"fas","fa-fw","fa-lg","fa-power-off","ml-3"],["href","javascript:void(0)",1,"card-link","red-text",3,"click"],["container","body","openDelay","150","triggers","hover",1,"far","fa-fw","fa-pause-circle","fa-lg",3,"ngbTooltip"],["href","javascript:void(0)",3,"click"],[1,"far","fa-fw","fa-arrow-alt-circle-down","fa-lg"],["ngbDropdown","","placement","left",1,"d-inline-block","ml-3","mt-auto"],["href","javascript:void(0)","ngbDropdownToggle","",1,"card-link","text-decoration-none","mt-auto",2,"outline","none"],[1,"fa-solid","fa-fw","fa-ellipsis-v","fa-lg"],["ngbDropdownMenu","","aria-labelledby","Plugin Actions Dropdown"],["ngbDropdownItem","",3,"click"],[1,"fas","fa-fw","fa-sliders"],["ngbDropdownItem","",3,"click",4,"ngIf"],["class","dropdown-divider",4,"ngIf"],["ngbDropdownItem","","rel","noopener noreferrer","target","_blank",3,"href",4,"ngIf"],[1,"fas","fa-fw","fa-wave-square"],[1,"fas","fa-fw","fa-code-compare"],[1,"fas","fa-fw","fa-code"],[1,"far","fa-fw","fa-circle-pause"],[1,"far","fa-fw","fa-circle-play"],[1,"fas","fa-fw","fa-trash"],[1,"dropdown-divider"],[1,"fas","fa-fw","fa-bridge"],[1,"fa-fw","icon-button","fas","fa-fw","fa-power-off"],[1,"fas","fa-fw","fa-stop"],[1,"fas","fa-fw","fa-play"],[1,"fas","fa-fw","fa-broom"],[1,"icon-button","fas","fa-fw","fa-bridge"],["ngbDropdownItem","","rel","noopener noreferrer","target","_blank",3,"href"],[1,"icon-button","fa","fa-fw","fa-question-circle-o"]],template:function(t,a){t&1&&(l(0,"div",0)(1,"div",1)(2,"div",2)(3,"img",3),_("error",function(){return a.handleIconError()}),p(),w(4,Xe,3,4,"a",4),p(),l(5,"div",5)(6,"div",6)(7,"div",7)(8,"div",8)(9,"h5",9),m(10),p(),l(11,"div",10),w(12,Ye,4,6,"a",11)(13,Ze,4,6,"a",11)(14,ei,4,6,"a",11)(15,ii,4,6,"a",11),c(16,"i",12),w(17,ti,1,4,"i",13),p()(),l(18,"p",14)(19,"a",15),_("click",function(){return a.pluginInfoModal(a.plugin)}),c(20,"i",16),l(21,"span",17),m(22),p()()(),w(23,ni,6,3,"p",18)(24,ai,6,3,"p",18),l(25,"p",19),w(26,ri,4,1,"a",20)(27,oi,3,1,"span",21),p(),l(28,"div",8)(29,"p",22),w(30,si,5,2,"span",23)(31,pi,3,1,"span",23),p(),l(32,"div",10),w(33,di,3,3,"a",11)(34,ci,3,3,"a",24)(35,gi,2,0,"a",25)(36,$i,22,18,"span",26),p()()()()()()()),t&2&&(r(3),s("src",a.plugin.icon,$),r(),s("ngIf",a.plugin.installedVersion&&a.hb2Status!=="hide"),r(6),P(a.prettyDisplayName),r(2),s("ngIf",a.plugin.installedVersion&&a.plugin.updateAvailable&&!a.childBridgeRestartInProgress),r(),s("ngIf",a.plugin.installedVersion&&!a.plugin.updateAvailable&&!a.plugin.isConfigured&&!a.childBridgeRestartInProgress),r(),s("ngIf",a.plugin.installedVersion&&!a.plugin.updateAvailable&&a.plugin.isConfigured&&!a.plugin.hasChildBridges&&!a.plugin.disabled&&a.plugin.recommendChildBridge&&!a.childBridgeRestartInProgress),r(),s("ngIf",a.plugin.installedVersion&&!a.plugin.updateAvailable&&a.plugin.isConfigured&&a.plugin.hasChildBridges&&!a.childBridgeRestartInProgress&&a.hasUnpairedChildBridges&&a.childBridgeStatus==="ok"&&!a.plugin.disabled),r(),s("hidden",!a.childBridgeRestartInProgress),r(),s("ngIf",a.plugin.installedVersion&&!a.plugin.updateAvailable&&a.plugin.isConfigured&&a.plugin.hasChildBridges&&!a.childBridgeRestartInProgress&&!a.hasUnpairedChildBridges&&a.childBridgeStatus!=="ok"&&!a.plugin.disabled),r(5),P(a.plugin.name),r(),s("ngIf",a.plugin.verifiedPlugin||a.plugin.verifiedPlusPlugin),r(),s("ngIf",!a.plugin.verifiedPlugin&&!a.plugin.verifiedPlusPlugin),r(2),s("ngIf",(a.plugin.verifiedPlugin||a.plugin.verifiedPlusPlugin)&&a.plugin.funding),r(),s("ngIf",!((a.plugin.verifiedPlugin||a.plugin.verifiedPlusPlugin)&&a.plugin.funding)),r(3),s("ngIf",a.plugin.publicPackage&&!a.plugin.installedVersion),r(),s("ngIf",a.plugin.installedVersion),r(2),s("ngIf",!a.plugin.disabled&&a.plugin.hasChildBridges&&a.childBridgeStatus==="ok"),r(),s("ngIf",a.plugin.installedVersion&&a.plugin.disabled),r(),s("ngIf",a.plugin.publicPackage&&!a.plugin.installedVersion),r(),s("ngIf",a.plugin.installedVersion))},dependencies:[X,E,Ce,be,he,fe,_e,we,Z,M],encapsulation:2}));let i=o;return i})();function Mi(i,o){i&1&&c(0,"app-spinner")}function ji(i,o){if(i&1){let n=C();l(0,"a",12),_("click",function(){h(n);let t=g();return b(t.onClearSearch())}),c(1,"i",13),p()}}function Di(i,o){if(i&1&&(l(0,"div",14),c(1,"app-plugin-card",15),p()),i&2){let n=o.$implicit,e=g();r(),s("plugin",n)("childBridges",e.getPluginChildBridges(n))}}function Ni(i,o){i&1&&(l(0,"div",16),c(1,"i",17),l(2,"p"),m(3),u(4,"translate"),p()()),i&2&&(r(3),P(f(4,1,"plugins.placeholder_search_first")))}var Ne=(()=>{let o=class o{constructor(e,t,a,x,T,y,q){d(this,"$api");d(this,"$plugin");d(this,"$router");d(this,"$settings");d(this,"$toastr");d(this,"$translate");d(this,"$ws");d(this,"loading",!0);d(this,"installedPlugins",[]);d(this,"childBridges",[]);d(this,"showExitButton",!1);d(this,"form",new se({query:new pe("",[re.required])}));d(this,"io");d(this,"navigationSubscription");this.$api=e,this.$plugin=t,this.$router=a,this.$settings=x,this.$toastr=T,this.$translate=y,this.$ws=q}ngOnInit(){return k(this,null,function*(){this.io=this.$ws.connectToNamespace("child-bridges"),this.io.connected.subscribe(()=>k(this,null,function*(){this.getChildBridgeMetadata(),this.io.socket.emit("monitor-child-bridge-status"),yield this.loadInstalledPlugins();let e=this.$router.parseUrl(this.$router.url).queryParams.installed;if(e){let t=this.installedPlugins.find(a=>a.name===e);t&&!t.isConfigured&&this.$plugin.settings(t),this.$router.navigate(["/plugins"])}})),this.io.socket.on("child-bridge-status-update",e=>{let t=this.childBridges.find(a=>a.username===e.username);t?Object.assign(t,e):this.childBridges.push(e)}),this.navigationSubscription=this.$router.events.subscribe(e=>{e instanceof te&&this.loadInstalledPlugins()})})}loadInstalledPlugins(){return k(this,null,function*(){this.form.setValue({query:""}),this.showExitButton=!1,this.installedPlugins=[],this.loading=!0;try{let e=yield S(this.$api.get("/plugins"));this.installedPlugins=e.filter(a=>a.name!=="homebridge-config-ui-x"),yield this.appendMetaInfo();let t=this.installedPlugins.sort((a,x)=>a.updateAvailable!==x.updateAvailable?a.updateAvailable?-1:1:a.disabled!==x.disabled?a.disabled?1:-1:a.isConfigured!==x.isConfigured?a.isConfigured?1:-1:a.hasChildBridgesUnpaired!==x.hasChildBridgesUnpaired?a.hasChildBridgesUnpaired?-1:1:a.hasChildBridges!==x.hasChildBridges&&this.$settings.env.recommendChildBridges?a.hasChildBridges?1:-1:a.name.localeCompare(x.name));return this.loading=!1,t}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugins"),this.$translate.instant("toast.title_error"))}})}appendMetaInfo(){return k(this,null,function*(){yield Promise.all(this.installedPlugins.filter(e=>e.installedVersion).map(e=>k(this,null,function*(){try{let t=yield S(this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`));e.isConfigured=t.length>0,e.isConfiguredDynamicPlatform=e.isConfigured&&Object.prototype.hasOwnProperty.call(t[0],"platform"),e.recommendChildBridge=e.isConfiguredDynamicPlatform&&this.$settings.env.recommendChildBridges&&this.$settings.env.serviceMode&&!["homebridge","homebridge-config-ui-x"].includes(e.name),e.hasChildBridges=e.isConfigured&&t.some(x=>x._bridge&&x._bridge.username);let a=this.getPluginChildBridges(e);e.hasChildBridgesUnpaired=a.some(x=>!x.paired)}catch{e.isConfigured=!0,e.hasChildBridges=!0}})))})}search(){this.installedPlugins=[],this.loading=!0,this.showExitButton=!0,this.$api.get(`/plugins/search/${encodeURIComponent(this.form.value.query)}`).subscribe({next:e=>{this.installedPlugins=e.filter(t=>t.name!=="homebridge-config-ui-x"),this.appendMetaInfo(),this.loading=!1},error:e=>{this.loading=!1,console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error")),this.loadInstalledPlugins()}})}onClearSearch(){this.loadInstalledPlugins()}onSubmit({value:e}){e.query.length?this.search():this.loadInstalledPlugins()}getChildBridgeMetadata(){this.io.request("get-homebridge-child-bridge-status").subscribe(e=>{this.childBridges=e})}getPluginChildBridges(e){return this.childBridges.filter(t=>t.plugin===e.name)}ngOnDestroy(){this.navigationSubscription&&this.navigationSubscription.unsubscribe(),this.io.end()}};d(o,"\u0275fac",function(t){return new(t||o)(I(N),I(z),I(ne),I(U),I(A),I(R),I(F))}),d(o,"\u0275cmp",V({type:o,selectors:[["ng-component"]],decls:15,vars:11,consts:[[4,"ngIf"],[1,"row","mb-3"],[1,"col-12"],[1,"primary-text","m-0"],[1,"row"],[1,"col-md-12"],["novalidate","",3,"ngSubmit","formGroup"],["type","text","formControlName","query",1,"hb-npm-search",3,"placeholder"],["class","hb-npm-search-clear","href","javascript:void(0)",3,"click",4,"ngIf"],[1,"d-flex","flex-wrap","justify-content-between"],["class","hb-plugin-space-between",4,"ngFor","ngForOf"],["class","alert alert-info mt-4 text-center w-100",4,"ngIf"],["href","javascript:void(0)",1,"hb-npm-search-clear",3,"click"],[1,"far","fa-fw","fa-times-circle"],[1,"hb-plugin-space-between"],[3,"plugin","childBridges"],[1,"alert","alert-info","mt-4","text-center","w-100"],[1,"fas","fa-fw","fa-magnifying-glass","primary-text","my-3",2,"font-size","75px"]],template:function(t,a){t&1&&(w(0,Mi,1,0,"app-spinner",0),l(1,"div",1)(2,"div",2)(3,"h3",3),m(4),u(5,"translate"),p()()(),l(6,"div",4)(7,"div",5)(8,"form",6),_("ngSubmit",function(){return a.onSubmit(a.form)}),c(9,"input",7),u(10,"translate"),w(11,ji,2,0,"a",8),p()()(),l(12,"div",9),w(13,Di,2,2,"div",10)(14,Ni,5,3,"div",11),p()),t&2&&(s("ngIf",a.loading),r(4),P(f(5,7,"menu.label_plugins")),r(4),s("formGroup",a.form),r(),s("placeholder",f(10,9,"plugins.placeholder_search_plugin")),r(2),s("ngIf",a.showExitButton),r(2),s("ngForOf",a.installedPlugins),r(),s("ngIf",a.installedPlugins.length===0&&!a.loading))},dependencies:[Y,E,de,ae,oe,le,ce,ge,ye,De,M],styles:[".hb-npm-search[_ngcontent-%COMP%]{outline:none;box-sizing:inherit!important;background-color:inherit;height:50px!important;width:100%;border-width:.5px;padding:10px;margin-bottom:15px}@media (hover: hover){.hb-npm-search[_ngcontent-%COMP%]:hover{border:1px solid #000000}}.hb-npm-search[_ngcontent-%COMP%]:focus{border:1px solid #000000;box-shadow:0 1px #000}.hb-npm-search-clear[_ngcontent-%COMP%]{position:absolute;right:25px;font-size:35px;color:#d0d0d0;line-height:50px;cursor:pointer}.hb-plugin-space-between[_ngcontent-%COMP%]{box-sizing:border-box;width:calc(50% - 6.6666666667px)}@media only screen and (max-width: 991px){.hb-plugin-space-between[_ngcontent-%COMP%]{width:100%}}"]}));let i=o;return i})();var Ai=[{path:"",component:Ne}],Ae=(()=>{let o=class o{};d(o,"\u0275fac",function(t){return new(t||o)}),d(o,"\u0275mod",D({type:o})),d(o,"\u0275inj",j({imports:[H.forChild(Ai),H]}));let i=o;return i})();var xt=(()=>{let o=class o{};d(o,"\u0275fac",function(t){return new(t||o)}),d(o,"\u0275mod",D({type:o})),d(o,"\u0275inj",j({imports:[ee,ue,me,ie.forChild(),Ie,Se,$e,Ae]}));let i=o;return i})();export{xt as PluginsModule};
|
|
1
|
+
import{a as Te,b as Ve,c as $e}from"./chunk-Y2LHEUUE.js";import{a as ye,d as G,f as Se}from"./chunk-CJEDETKZ.js";import{a as Be,d as z}from"./chunk-HSXO4HUG.js";import"./chunk-KI3WG4KR.js";import"./chunk-PHW6KH6T.js";import"./chunk-VGPTS3MR.js";import{a as Pe}from"./chunk-A4JZT5IP.js";import"./chunk-RCX6SLJ6.js";import"./chunk-W2AFJCAF.js";import"./chunk-VCXNOPS6.js";import{a as F}from"./chunk-I3NB5DUT.js";import"./chunk-ECAKBOCP.js";import{a as L}from"./chunk-M3Z43IPJ.js";import{a as ke}from"./chunk-2YLP3FDB.js";import"./chunk-2LST6AO4.js";import{H as fe,I as _e,J as he,K as be,L as Ce,M as ve,N as xe,O as we,Q as Ie,c as ae,d as re,e as oe,f as le,g as se,j as pe,m as de,p as ce,q as ge,y as ue,z as me}from"./chunk-F5I4UBIU.js";import{c as N,k as A,m as U}from"./chunk-4RA4K6ON.js";import{a as R,b as M,c as ie}from"./chunk-FPYOAMQR.js";import{$ as V,Ga as w,Ka as B,La as s,Ob as X,Pb as Y,Qb as E,Ua as l,Va as p,Wa as c,X as j,Xa as W,Ya as J,Yb as Z,Za as C,_b as ee,aa as D,ab as _,bb as g,h as d,ha as h,i as k,ia as b,jb as m,kb as P,lb as v,oc as te,rc as ne,t as S,ua as $,uc as H,vb as K,wa as r,xa as I,xb as u,yb as f,zb as Q}from"./chunk-SR4W2G2S.js";function Fe(i,o){if(i&1){let n=C();l(0,"button",15),_("click",function(){h(n);let t=g();return b(t.$activeModal.dismiss("Dismiss"))}),m(1),u(2,"translate"),p()}i&2&&(r(),v(" ",f(2,1,"form.button_close")," "))}function ze(i,o){if(i&1){let n=C();l(0,"button",15),_("click",function(){h(n);let t=g();return b(t.$activeModal.dismiss("Dismiss"))}),m(1),u(2,"translate"),p()}i&2&&(r(),v(" ",f(2,1,"form.button_close")," "))}function Oe(i,o){if(i&1&&(l(0,"a",16),m(1),u(2,"translate"),c(3,"i",17),p()),i&2){let n=g();s("href",n.plugin.links.homepage||n.plugin.links.npm,$),r(),v(" ",f(2,2,"plugins.button_homepage")," ")}}var je=(()=>{let o=class o{constructor(e){d(this,"$activeModal");d(this,"plugin");d(this,"defaultIcon","assets/hb-icon.png");this.$activeModal=e}ngOnInit(){this.plugin.icon||(this.plugin.icon=this.defaultIcon)}handleIconError(){this.plugin.icon=this.defaultIcon}};d(o,"\u0275fac",function(t){return new(t||o)(I(ve))}),d(o,"\u0275cmp",V({type:o,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:26,vars:14,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-dismiss","modal",1,"close",3,"click"],["aria-hidden","true"],[1,"modal-body","w-100","text-center"],["alt","Plugin Icon",1,"mb-3","plugin-icon",3,"error","src"],[1,"my-3"],[1,"m-0","grey-text"],[1,"modal-footer","justify-content-between"],[1,"text-left"],["type","button","class","btn btn-elegant","data-dismiss","modal",3,"click",4,"ngIf"],[1,"text-center"],[1,"text-right"],["class","btn btn-primary text-decoration-none","target","_blank","rel","noopener noreferrer",3,"href",4,"ngIf"],["type","button","data-dismiss","modal",1,"btn","btn-elegant",3,"click"],["target","_blank","rel","noopener noreferrer",1,"btn","btn-primary","text-decoration-none",3,"href"],[1,"fas","fa-fw","fa-external-link-alt"]],template:function(t,a){t&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),m(3),u(4,"translate"),p(),l(5,"button",3),u(6,"translate"),_("click",function(){return a.$activeModal.dismiss("Dismiss")}),l(7,"span",4),m(8,"\xD7"),p()()(),l(9,"div",5)(10,"img",6),_("error",function(){return a.handleIconError()}),p(),l(11,"h4"),m(12),p(),l(13,"p",7),m(14),p(),l(15,"p",8),m(16),p(),l(17,"p",8),m(18),p()(),l(19,"div",9)(20,"div",10),w(21,Fe,3,3,"button",11),p(),l(22,"div",12),w(23,ze,3,3,"button",11),p(),l(24,"div",13),w(25,Oe,4,4,"a",14),p()()()),t&2&&(r(3),P(f(4,10,"plugins.manage.information")),r(2),B("aria-label",f(6,12,"form.button_close")),r(5),s("src",a.plugin.icon,$),r(2),P(a.plugin.displayName||a.plugin.name),r(2),P(a.plugin.description),r(2),P(a.plugin.name),r(2),v("@",a.plugin.author,""),r(3),s("ngIf",a.plugin.links.homepage||a.plugin.links.npm),r(2),s("ngIf",!a.plugin.links.homepage&&!a.plugin.links.npm),r(2),s("ngIf",a.plugin.links.homepage||a.plugin.links.npm))},dependencies:[E,M],styles:[".plugin-icon[_ngcontent-%COMP%]{height:75px;width:75px;border-radius:15px;border:1px solid #222222}"]}));let i=o;return i})();var Je=(i,o)=>({"fa-bridge-circle-exclamation orange-text":i,"fa-bridge-circle-xmark red-text":o});function Ke(i,o){i&1&&c(0,"i",30)}function Qe(i,o){i&1&&c(0,"i",31)}function Xe(i,o){if(i&1){let n=C();l(0,"a",27),_("click",function(){h(n);let t=g();return b(t.openHb2InfoModal())}),w(1,Ke,1,0,"i",28)(2,Qe,1,0,"i",29),p()}if(i&2){let n=g();s("ngbTooltip","Homebridge v2.0 Readiness")("placement","right"),r(),s("ngIf",n.hb2Status==="supported"),r(),s("ngIf",n.hb2Status==="unknown")}}function Ye(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),u(2,"translate"),_("click",function(){h(n);let t=g();return b(t.$plugin.checkAndUpdatePlugin(t.plugin,t.plugin.updateTag||"latest"))}),c(3,"i",33),p()}i&2&&(s("ngbTooltip",f(1,2,"plugins.button_update")),B("aria-label",f(2,4,"plugins.button_update")))}function Ze(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),u(2,"translate"),_("click",function(){h(n);let t=g();return b(t.$plugin.settings(t.plugin))}),c(3,"i",34),p()}i&2&&(s("ngbTooltip",f(1,2,"plugins.button_set_up")),B("aria-label",f(2,4,"plugins.button_set_up")))}function ei(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),u(2,"translate"),_("click",function(){h(n);let t=g();return b(t.$plugin.bridgeSettings(t.plugin))}),c(3,"i",35),p()}i&2&&(s("ngbTooltip",f(1,2,"child_bridge.setup")),B("aria-label",f(2,4,"child_bridge.setup")))}function ii(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),u(2,"translate"),_("click",function(){h(n);let t=g();return b(t.$plugin.bridgeSettings(t.plugin))}),c(3,"i",36),p()}i&2&&(s("ngbTooltip",f(1,2,"child_bridge.bridge_connect")),B("aria-label",f(2,4,"child_bridge.bridge_connect")))}function ti(i,o){if(i&1&&c(0,"i",37),i&2){let n=g();s("ngClass",K(1,Je,n.childBridgeStatus==="pending",n.childBridgeStatus==="down"))}}function ni(i,o){if(i&1){let n=C();l(0,"p",19)(1,"a",38),_("click",function(){h(n);let t=g();return b(t.openVerifiedModal())}),c(2,"i",39),l(3,"span",17),m(4),u(5,"translate"),p()()()}i&2&&(r(4),P(f(5,1,"plugins.donate.button_verified")))}function ai(i,o){if(i&1){let n=C();l(0,"p",19)(1,"a",40),_("click",function(){h(n);let t=g();return b(t.openVerifiedModal())}),c(2,"i",41),l(3,"span",17),m(4),u(5,"translate"),p()()()}i&2&&(r(4),P(f(5,1,"plugins.donate.button_not_verified")))}function ri(i,o){if(i&1){let n=C();l(0,"a",42),_("click",function(){h(n);let t=g();return b(t.openFundingModal(t.plugin))}),c(1,"i",43),l(2,"span",17),m(3),p()()}if(i&2){let n=g();r(3),v("@",n.plugin.author,"")}}function oi(i,o){if(i&1&&(l(0,"span",17),c(1,"i",44),m(2),p()),i&2){let n=g();r(2),v("@",n.plugin.author," ")}}function li(i,o){if(i&1&&(l(0,"span"),m(1),u(2,"date"),p()),i&2){let n=g(2);r(),v("(",Q(2,1,n.plugin.lastUpdated,"yyyy-MM-dd"),")")}}function si(i,o){if(i&1&&(l(0,"span"),c(1,"i",45),l(2,"span",17),m(3),w(4,li,3,4,"span",23),p()()),i&2){let n=g();r(3),v("v",n.plugin.latestVersion," "),r(),s("ngIf",n.plugin.lastUpdated)}}function pi(i,o){if(i&1&&(l(0,"span"),c(1,"i",46),m(2),p()),i&2){let n=g();r(2),v("v",n.plugin.installedVersion," ")}}function di(i,o){if(i&1){let n=C();l(0,"a",32),u(1,"translate"),_("click",function(){h(n);let t=g();return b(t.doChildBridgeAction("restart"))}),c(2,"i",47),p()}if(i&2){let n=g();s("ngbTooltip",f(1,1,n.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))}}function ci(i,o){if(i&1){let n=C();l(0,"a",48),_("click",function(){h(n);let t=g();return b(t.enablePlugin(t.plugin))}),c(1,"i",49),u(2,"translate"),p()}i&2&&(r(),s("ngbTooltip",f(2,1,"plugins.status_disabled")))}function gi(i,o){if(i&1){let n=C();l(0,"a",50),_("click",function(){h(n);let t=g();return b(t.$plugin.installAlternateVersion(t.plugin))}),c(1,"i",51),p()}}function ui(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.viewPluginLog(t.plugin))}),c(1,"i",61),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.plugin_logs")," "))}function mi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.installAlternateVersion(t.plugin))}),c(1,"i",62),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.manage_version")," "))}function fi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.jsonEditor(t.plugin))}),c(1,"i",63),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.json_config")," "))}function _i(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.disablePlugin(t.plugin))}),c(1,"i",64),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.disable")," "))}function hi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.enablePlugin(t.plugin))}),c(1,"i",65),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.manage.enable")," "))}function bi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.uninstallPlugin(t.plugin,t.setChildBridges))}),c(1,"i",66),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"plugins.button_uninstall")," "))}function Ci(i,o){i&1&&c(0,"div",67)}function vi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(3);return b(t.doChildBridgeAction("restart"))}),c(1,"i",69),m(2),u(3,"translate"),p()}if(i&2){let n=g(3);r(2),v(" ",f(3,1,n.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart")," ")}}function xi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(3);return b(t.doChildBridgeAction("stop"))}),c(1,"i",70),m(2),u(3,"translate"),p()}if(i&2){let n=g(3);r(2),v(" ",f(3,1,n.setChildBridges.length>1?"child_bridge.stop_plural":"child_bridge.stop")," ")}}function wi(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(3);return b(t.doChildBridgeAction("start"))}),c(1,"i",71),m(2),u(3,"translate"),p()}if(i&2){let n=g(3);r(2),v(" ",f(3,1,n.setChildBridges.length>1?"child_bridge.start_plural":"child_bridge.start")," ")}}function Ii(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(3);return b(t.$plugin.resetChildBridges(t.setChildBridges))}),c(1,"i",72),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"child_bridge.reset_accessories")," "))}function yi(i,o){if(i&1){let n=C();W(0),l(1,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.bridgeSettings(t.plugin))}),c(2,"i",68),m(3),u(4,"translate"),p(),w(5,vi,4,3,"button",58)(6,xi,4,3,"button",58)(7,wi,4,3,"button",58)(8,Ii,4,3,"button",58),J()}if(i&2){let n=g(2);r(3),v(" ",f(4,5,"child_bridge.bridge_settings")," "),r(2),s("ngIf",!n.childBridgeRestartInProgress),r(),s("ngIf",!n.allChildBridgesStopped),r(),s("ngIf",n.allChildBridgesStopped),r(),s("ngIf",n.$settings.env.serviceMode)}}function Pi(i,o){i&1&&c(0,"div",67)}function ki(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.bridgeSettings(t.plugin))}),c(1,"i",73),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"child_bridge.setup")," "))}function Bi(i,o){i&1&&c(0,"div",67)}function Si(i,o){if(i&1){let n=C();l(0,"button",56),_("click",function(){h(n);let t=g(2);return b(t.$plugin.bridgeSettings(t.plugin))}),c(1,"i",73),m(2),u(3,"translate"),p()}i&2&&(r(2),v(" ",f(3,1,"child_bridge.setup")," "))}function Ti(i,o){i&1&&c(0,"div",67)}function Vi(i,o){if(i&1&&(l(0,"a",74),c(1,"i",75),m(2),u(3,"translate"),p()),i&2){let n=g(2);s("href",n.plugin.links.bugs,$),r(2),v(" ",f(3,2,"support.links.issue")," ")}}function $i(i,o){if(i&1){let n=C();l(0,"span",52)(1,"a",53),c(2,"i",54),p(),l(3,"div",55)(4,"button",56),_("click",function(){h(n);let t=g();return b(t.$plugin.settings(t.plugin))}),c(5,"i",57),m(6),u(7,"translate"),p(),w(8,ui,4,3,"button",58)(9,mi,4,3,"button",58)(10,fi,4,3,"button",58)(11,_i,4,3,"button",58)(12,hi,4,3,"button",58)(13,bi,4,3,"button",58)(14,Ci,1,0,"div",59)(15,yi,9,7,"ng-container",23)(16,Pi,1,0,"div",59)(17,ki,4,3,"button",58)(18,Bi,1,0,"div",59)(19,Si,4,3,"button",58)(20,Ti,1,0,"div",59)(21,Vi,4,4,"a",60),p()()}if(i&2){let n=g();r(),B("aria-label","Plugin Actions Dropdown"),r(5),v(" ",f(7,16,"plugins.button_settings")," "),r(2),s("ngIf",n.plugin.isConfigured&&!n.plugin.disabled),r(),s("ngIf",n.plugin.publicPackage),r(),s("ngIf",!n.isMobile&&n.plugin.name!=="homebridge-config-ui-x"),r(),s("ngIf",n.plugin.name!=="homebridge-config-ui-x"&&!n.plugin.disabled),r(),s("ngIf",n.plugin.name!=="homebridge-config-ui-x"&&n.plugin.disabled),r(),s("ngIf",n.plugin.name!=="homebridge-config-ui-x"),r(),s("ngIf",!n.plugin.disabled&&n.plugin.isConfigured&&n.plugin.hasChildBridges&&n.plugin.installedVersion&&n.plugin.name!=="homebridge-config-ui-x"),r(),s("ngIf",n.plugin.hasChildBridges&&!n.plugin.disabled),r(),s("ngIf",n.plugin.isConfigured&&!n.plugin.hasChildBridges&&!n.plugin.disabled&&!n.plugin.recommendChildBridge),r(),s("ngIf",n.plugin.isConfigured&&!n.plugin.hasChildBridges&&!n.plugin.disabled&&!n.plugin.recommendChildBridge),r(),s("ngIf",n.plugin.isConfigured&&!n.plugin.hasChildBridges&&!n.plugin.disabled&&n.plugin.recommendChildBridge&&n.plugin.updateAvailable),r(),s("ngIf",n.plugin.isConfigured&&!n.plugin.hasChildBridges&&!n.plugin.disabled&&n.plugin.recommendChildBridge&&n.plugin.updateAvailable),r(),s("ngIf",n.plugin.links==null?null:n.plugin.links.bugs),r(),s("ngIf",n.plugin.links==null?null:n.plugin.links.bugs)}}var De=(()=>{let o=class o{constructor(e,t,a,x,T,y,q,Re){d(this,"$api");d(this,"$md");d(this,"$modal");d(this,"$plugin");d(this,"$settings");d(this,"$toastr");d(this,"$translate");d(this,"$ws");d(this,"plugin");d(this,"hasChildBridges",!1);d(this,"hasUnpairedChildBridges",!1);d(this,"allChildBridgesStopped",!1);d(this,"childBridgeStatus","pending");d(this,"childBridgeRestartInProgress",!1);d(this,"defaultIcon","assets/hb-icon.png");d(this,"isMobile");d(this,"setChildBridges",[]);d(this,"prettyDisplayName","");d(this,"hb2Status","unknown");d(this,"io");this.$api=e,this.$md=t,this.$modal=a,this.$plugin=x,this.$settings=T,this.$toastr=y,this.$translate=q,this.$ws=Re}set childBridges(e){var x,T;this.hasChildBridges=e.length>0,this.hasUnpairedChildBridges=e.filter(y=>y.paired===!1).length>0,this.allChildBridgesStopped=e.filter(y=>y.manuallyStopped===!0).length===e.length,this.hasChildBridges&&(e.some(y=>y.status==="down")?this.childBridgeStatus="down":e.some(y=>y.status==="pending")?this.childBridgeStatus="pending":e.some(y=>y.status==="ok")&&(this.childBridgeStatus="ok")),this.setChildBridges=e;let t=this.$settings.env.homebridgeVersion.split(".")[0],a=((T=(x=this.plugin.engines)==null?void 0:x.homebridge)==null?void 0:T.split("||").map(y=>y.trim()))||[];this.hb2Status=t==="2"?"hide":a.some(y=>y.startsWith("^2")||y.startsWith(">=2"))?"supported":this.hb2Status}ngOnInit(){this.isMobile=this.$md.detect.mobile(),this.prettyDisplayName=this.prettifyName(),this.io=this.$ws.getExistingNamespace("child-bridges"),this.plugin.icon||(this.plugin.icon=this.defaultIcon)}openFundingModal(e){let t=this.$modal.open(Ve,{size:"lg",backdrop:"static"});t.componentInstance.plugin=e}openVerifiedModal(){let e=this.$modal.open(G,{size:"lg",backdrop:"static"});this.plugin.verifiedPlugin||this.plugin.verifiedPlusPlugin?(e.componentInstance.title=this.$translate.instant("plugins.manage.verified_title"),e.componentInstance.subtitle=this.$translate.instant("plugins.manage.verified_subtitle",{pluginName:this.plugin.displayName||this.plugin.name}),e.componentInstance.message=this.$translate.instant("plugins.manage.verified_message"),e.componentInstance.faIconClass="fa-shield-alt green-text"):(e.componentInstance.title=this.$translate.instant("plugins.manage.unverified_title"),e.componentInstance.subtitle=this.$translate.instant("plugins.manage.unverified_subtitle",{pluginName:this.plugin.displayName||this.plugin.name}),e.componentInstance.message=this.$translate.instant("plugins.manage.unverified_message"),e.componentInstance.faIconClass="fa-shield-alt grey-text"),e.componentInstance.ctaButtonLabel=this.$translate.instant("form.button_more_info"),e.componentInstance.ctaButtonLink="https://github.com/homebridge/homebridge/wiki/verified-Plugins"}pluginInfoModal(e){let t=this.$modal.open(je,{size:"lg",backdrop:"static"});t.componentInstance.plugin=e}disablePlugin(e){let t=this.$modal.open(Te,{size:"lg",backdrop:"static"});t.componentInstance.pluginName=e.name,t.componentInstance.isConfigured=e.isConfigured,t.componentInstance.isConfiguredDynamicPlatform=e.isConfiguredDynamicPlatform,t.result.then(()=>k(this,null,function*(){try{yield S(this.$api.put(`/config-editor/plugin/${encodeURIComponent(e.name)}/disable`,{})),e.disabled=!0,this.hasChildBridges&&this.doChildBridgeAction("stop"),this.$modal.open(L,{size:"lg",backdrop:"static"})}catch(a){console.error(a),this.$toastr.error(this.$translate.instant("plugins.disable.error"),this.$translate.instant("toast.title_error"))}}))}enablePlugin(e){let t=this.$modal.open(ke,{size:"lg",backdrop:"static"});t.componentInstance.title=`${this.$translate.instant("plugins.manage.enable")}: ${e.name}`,t.componentInstance.message=this.$translate.instant("plugins.manage.confirm_enable",{pluginName:e.name}),t.componentInstance.confirmButtonLabel=this.$translate.instant("plugins.manage.enable"),t.componentInstance.faIconClass="fa-circle-play primary-text",t.result.then(()=>k(this,null,function*(){try{yield S(this.$api.put(`/config-editor/plugin/${encodeURIComponent(e.name)}/enable`,{})),e.disabled=!1,this.hasChildBridges&&(yield this.doChildBridgeAction("start")),this.$modal.open(L,{size:"lg",backdrop:"static"})}catch(a){console.error(a),this.$toastr.error(this.$translate.instant("plugins.enable.error"),this.$translate.instant("toast.title_error"))}}))}viewPluginLog(e){let t=this.$modal.open(Be,{size:"xl",backdrop:"static"});t.componentInstance.plugin=e}doChildBridgeAction(e){return k(this,null,function*(){this.childBridgeRestartInProgress=!0;try{for(let t of this.setChildBridges)yield S(this.io.request(`${e}-child-bridge`,t.username))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("plugins.bridge.action_error",{action:e}),this.$translate.instant("toast.title_error")),this.childBridgeRestartInProgress=!1}finally{setTimeout(()=>{this.childBridgeRestartInProgress=!1},e==="restart"?12e3:e==="stop"?6e3:1e3)}})}handleIconError(){this.plugin.icon=this.defaultIcon}prettifyName(){let e=this.plugin.displayName||(this.plugin.name.charAt(0)==="@"?this.plugin.name.split("/")[1]:this.plugin.name);return e=e.replace(/-/g," "),this.isMobile&&e.toLowerCase().startsWith("homebridge ")&&(e=e.replace(/^homebridge /i,"")),this.plugin.displayName||(e=e.replace(/\w\S*/g,t=>t.charAt(0).toUpperCase()+t.substring(1).toLowerCase())),e}openHb2InfoModal(){let e=this.$modal.open(G,{size:"lg",backdrop:"static"});e.componentInstance.title="Plugin Readiness",this.hb2Status==="supported"?(e.componentInstance.subtitle=`${this.plugin.displayName||this.plugin.name} is ready for Homebridge v2.0`,e.componentInstance.message="The developer has specifically marked your installed version of the plugin as compatible with Homebridge v2.0.",e.componentInstance.faIconClass="fa-check-circle green-text"):(e.componentInstance.subtitle=`${this.plugin.displayName||this.plugin.name} might not be ready for Homebridge v2.0`,e.componentInstance.message="The developer has not specifically marked your installed version of the plugin as compatible with Homebridge v2.0, but it may still work.",e.componentInstance.faIconClass="fa-question-circle orange-text"),e.componentInstance.ctaButtonLabel=this.$translate.instant("form.button_more_info"),e.componentInstance.ctaButtonLink="https://github.com/homebridge/homebridge/wiki/Updating-To-Homebridge-v2.0"}};d(o,"\u0275fac",function(t){return new(t||o)(I(N),I(Pe),I(xe),I(z),I(U),I(A),I(R),I(F))}),d(o,"\u0275cmp",V({type:o,selectors:[["app-plugin-card"]],inputs:{plugin:"plugin",childBridges:"childBridges"},decls:37,vars:20,consts:[[1,"card","card-body","mb-3"],[1,"d-flex","flex-row","justify-content-between"],[1,"d-flex","flex-column","mr-3","align-items-center","justify-content-between"],["alt","Plugin Icon",1,"plugin-icon-card","mb-3",3,"error","src"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover","aria-label","Homebridge v2.0 Readiness",3,"ngbTooltip","placement","click",4,"ngIf"],[1,"d-flex","flex-column","justify-content-between",2,"min-width","calc(100% - 80px)"],[1,"d-flex","flex-row","align-items-end"],[1,"d-flex","flex-column","w-100"],[1,"d-flex","flex-row"],[1,"card-title","mb-2","text-truncate"],[1,"ml-auto"],["href","javascript:void(0)","class","card-link","container","body","openDelay","150","triggers","hover",3,"ngbTooltip","click",4,"ngIf"],[1,"fas","fa-fw","fa-spinner","fa-pulse","fa-lg","grey-text","ml-3",3,"hidden"],["class","fas fa-fw fa-lg ml-3",3,"ngClass",4,"ngIf"],[1,"card-text","mb-2","text-truncate"],["href","javascript:void(0)",1,"card-link","grey-text",3,"click"],[1,"fas","fa-fw","fa-info-circle","fa-lg","mr-1"],[1,"grey-text"],["class","card-text mb-2",4,"ngIf"],[1,"card-text","mb-2"],["href","javascript:void(0)","class","card-link pink-text",3,"click",4,"ngIf"],["class","grey-text",4,"ngIf"],[1,"card-text","mb-0","grey-text"],[4,"ngIf"],["href","javascript:void(0)","class","card-link red-text",3,"click",4,"ngIf"],["href","javascript:void(0)",3,"click",4,"ngIf"],["ngbDropdown","","placement","left","class","d-inline-block ml-3 mt-auto",4,"ngIf"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover","aria-label","Homebridge v2.0 Readiness",3,"click","ngbTooltip","placement"],["class","fas fa-check-circle green-text fa-xl","aria-label","The developer has specifically marked this plugin as compatible with Homebridge v2.0",4,"ngIf"],["class","fas fa-question-circle orange-text fa-xl","aria-label","The developer has not specifically marked this plugin as compatible with Homebridge v2.0, but it may still work.",4,"ngIf"],["aria-label","The developer has specifically marked this plugin as compatible with Homebridge v2.0",1,"fas","fa-check-circle","green-text","fa-xl"],["aria-label","The developer has not specifically marked this plugin as compatible with Homebridge v2.0, but it may still work.",1,"fas","fa-question-circle","orange-text","fa-xl"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover",1,"card-link",3,"click","ngbTooltip"],[1,"far","fa-fw","fa-arrow-alt-circle-up","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-sliders","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-bridge","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-qrcode","primary-text","fa-lg","fa-fade","ml-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-lg","ml-3",3,"ngClass"],["href","javascript:void(0)",1,"card-link","green-text",3,"click"],[1,"fas","fa-fw","fa-shield-alt","fa-lg","mr-1"],["href","javascript:void(0)",1,"card-link",3,"click"],[1,"fas","fa-fw","fa-shield-alt","fa-lg","mr-1",2,"opacity","0.25"],["href","javascript:void(0)",1,"card-link","pink-text",3,"click"],[1,"fas","fa-fw","fa-heart","fa-lg","mr-1"],[1,"fas","fa-fw","fa-heart","fa-lg","mr-1",2,"opacity","0.5"],[1,"far","fa-fw","fa-circle-dot","fa-lg","mr-1"],[1,"far","fa-fw","fa-circle-check","fa-lg","mr-1"],[1,"fas","fa-fw","fa-lg","fa-power-off","ml-3"],["href","javascript:void(0)",1,"card-link","red-text",3,"click"],["container","body","openDelay","150","triggers","hover",1,"far","fa-fw","fa-pause-circle","fa-lg",3,"ngbTooltip"],["href","javascript:void(0)",3,"click"],[1,"far","fa-fw","fa-arrow-alt-circle-down","fa-lg"],["ngbDropdown","","placement","left",1,"d-inline-block","ml-3","mt-auto"],["href","javascript:void(0)","ngbDropdownToggle","",1,"card-link","text-decoration-none","mt-auto",2,"outline","none"],[1,"fa-solid","fa-fw","fa-ellipsis-v","fa-lg"],["ngbDropdownMenu","","aria-labelledby","Plugin Actions Dropdown"],["ngbDropdownItem","",3,"click"],[1,"fas","fa-fw","fa-sliders"],["ngbDropdownItem","",3,"click",4,"ngIf"],["class","dropdown-divider",4,"ngIf"],["ngbDropdownItem","","rel","noopener noreferrer","target","_blank",3,"href",4,"ngIf"],[1,"fas","fa-fw","fa-wave-square"],[1,"fas","fa-fw","fa-code-compare"],[1,"fas","fa-fw","fa-code"],[1,"far","fa-fw","fa-circle-pause"],[1,"far","fa-fw","fa-circle-play"],[1,"fas","fa-fw","fa-trash"],[1,"dropdown-divider"],[1,"fas","fa-fw","fa-bridge"],[1,"fa-fw","icon-button","fas","fa-fw","fa-power-off"],[1,"fas","fa-fw","fa-stop"],[1,"fas","fa-fw","fa-play"],[1,"fas","fa-fw","fa-broom"],[1,"icon-button","fas","fa-fw","fa-bridge"],["ngbDropdownItem","","rel","noopener noreferrer","target","_blank",3,"href"],[1,"icon-button","fa","fa-fw","fa-question-circle-o"]],template:function(t,a){t&1&&(l(0,"div",0)(1,"div",1)(2,"div",2)(3,"img",3),_("error",function(){return a.handleIconError()}),p(),w(4,Xe,3,4,"a",4),p(),l(5,"div",5)(6,"div",6)(7,"div",7)(8,"div",8)(9,"h5",9),m(10),p(),l(11,"div",10),w(12,Ye,4,6,"a",11)(13,Ze,4,6,"a",11)(14,ei,4,6,"a",11)(15,ii,4,6,"a",11),c(16,"i",12),w(17,ti,1,4,"i",13),p()(),l(18,"p",14)(19,"a",15),_("click",function(){return a.pluginInfoModal(a.plugin)}),c(20,"i",16),l(21,"span",17),m(22),p()()(),w(23,ni,6,3,"p",18)(24,ai,6,3,"p",18),l(25,"p",19),w(26,ri,4,1,"a",20)(27,oi,3,1,"span",21),p(),l(28,"div",8)(29,"p",22),w(30,si,5,2,"span",23)(31,pi,3,1,"span",23),p(),l(32,"div",10),w(33,di,3,3,"a",11)(34,ci,3,3,"a",24)(35,gi,2,0,"a",25)(36,$i,22,18,"span",26),p()()()()()()()),t&2&&(r(3),s("src",a.plugin.icon,$),r(),s("ngIf",a.plugin.installedVersion&&a.hb2Status!=="hide"),r(6),P(a.prettyDisplayName),r(2),s("ngIf",a.plugin.installedVersion&&a.plugin.updateAvailable&&!a.childBridgeRestartInProgress),r(),s("ngIf",a.plugin.installedVersion&&!a.plugin.updateAvailable&&!a.plugin.isConfigured&&!a.childBridgeRestartInProgress),r(),s("ngIf",a.plugin.installedVersion&&!a.plugin.updateAvailable&&a.plugin.isConfigured&&!a.plugin.hasChildBridges&&!a.plugin.disabled&&a.plugin.recommendChildBridge&&!a.childBridgeRestartInProgress),r(),s("ngIf",a.plugin.installedVersion&&!a.plugin.updateAvailable&&a.plugin.isConfigured&&a.plugin.hasChildBridges&&!a.childBridgeRestartInProgress&&a.hasUnpairedChildBridges&&a.childBridgeStatus==="ok"&&!a.plugin.disabled),r(),s("hidden",!a.childBridgeRestartInProgress),r(),s("ngIf",a.plugin.installedVersion&&!a.plugin.updateAvailable&&a.plugin.isConfigured&&a.plugin.hasChildBridges&&!a.childBridgeRestartInProgress&&!a.hasUnpairedChildBridges&&a.childBridgeStatus!=="ok"&&!a.plugin.disabled),r(5),P(a.plugin.name),r(),s("ngIf",a.plugin.verifiedPlugin||a.plugin.verifiedPlusPlugin),r(),s("ngIf",!a.plugin.verifiedPlugin&&!a.plugin.verifiedPlusPlugin),r(2),s("ngIf",(a.plugin.verifiedPlugin||a.plugin.verifiedPlusPlugin)&&a.plugin.funding),r(),s("ngIf",!((a.plugin.verifiedPlugin||a.plugin.verifiedPlusPlugin)&&a.plugin.funding)),r(3),s("ngIf",a.plugin.publicPackage&&!a.plugin.installedVersion),r(),s("ngIf",a.plugin.installedVersion),r(2),s("ngIf",!a.plugin.disabled&&a.plugin.hasChildBridges&&a.childBridgeStatus==="ok"),r(),s("ngIf",a.plugin.installedVersion&&a.plugin.disabled),r(),s("ngIf",a.plugin.publicPackage&&!a.plugin.installedVersion),r(),s("ngIf",a.plugin.installedVersion))},dependencies:[X,E,Ce,be,he,fe,_e,we,Z,M],encapsulation:2}));let i=o;return i})();function Mi(i,o){i&1&&c(0,"app-spinner")}function ji(i,o){if(i&1){let n=C();l(0,"a",12),_("click",function(){h(n);let t=g();return b(t.onClearSearch())}),c(1,"i",13),p()}}function Di(i,o){if(i&1&&(l(0,"div",14),c(1,"app-plugin-card",15),p()),i&2){let n=o.$implicit,e=g();r(),s("plugin",n)("childBridges",e.getPluginChildBridges(n))}}function Ni(i,o){i&1&&(l(0,"div",16),c(1,"i",17),l(2,"p"),m(3),u(4,"translate"),p()()),i&2&&(r(3),P(f(4,1,"plugins.placeholder_search_first")))}var Ne=(()=>{let o=class o{constructor(e,t,a,x,T,y,q){d(this,"$api");d(this,"$plugin");d(this,"$router");d(this,"$settings");d(this,"$toastr");d(this,"$translate");d(this,"$ws");d(this,"loading",!0);d(this,"installedPlugins",[]);d(this,"childBridges",[]);d(this,"showExitButton",!1);d(this,"form",new se({query:new pe("",[re.required])}));d(this,"io");d(this,"navigationSubscription");this.$api=e,this.$plugin=t,this.$router=a,this.$settings=x,this.$toastr=T,this.$translate=y,this.$ws=q}ngOnInit(){return k(this,null,function*(){this.io=this.$ws.connectToNamespace("child-bridges"),this.io.connected.subscribe(()=>k(this,null,function*(){this.getChildBridgeMetadata(),this.io.socket.emit("monitor-child-bridge-status"),yield this.loadInstalledPlugins();let e=this.$router.parseUrl(this.$router.url).queryParams.installed;if(e){let t=this.installedPlugins.find(a=>a.name===e);t&&!t.isConfigured&&this.$plugin.settings(t),this.$router.navigate(["/plugins"])}})),this.io.socket.on("child-bridge-status-update",e=>{let t=this.childBridges.find(a=>a.username===e.username);t?Object.assign(t,e):this.childBridges.push(e)}),this.navigationSubscription=this.$router.events.subscribe(e=>{e instanceof te&&this.loadInstalledPlugins()})})}loadInstalledPlugins(){return k(this,null,function*(){this.form.setValue({query:""}),this.showExitButton=!1,this.installedPlugins=[],this.loading=!0;try{let e=yield S(this.$api.get("/plugins"));this.installedPlugins=e.filter(a=>a.name!=="homebridge-config-ui-x"),yield this.appendMetaInfo();let t=this.installedPlugins.sort((a,x)=>a.updateAvailable!==x.updateAvailable?a.updateAvailable?-1:1:a.disabled!==x.disabled?a.disabled?1:-1:a.isConfigured!==x.isConfigured?a.isConfigured?1:-1:a.hasChildBridgesUnpaired!==x.hasChildBridgesUnpaired?a.hasChildBridgesUnpaired?-1:1:a.hasChildBridges!==x.hasChildBridges&&this.$settings.env.recommendChildBridges?a.hasChildBridges?1:-1:a.name.localeCompare(x.name));return this.loading=!1,t}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugins"),this.$translate.instant("toast.title_error"))}})}appendMetaInfo(){return k(this,null,function*(){yield Promise.all(this.installedPlugins.filter(e=>e.installedVersion).map(e=>k(this,null,function*(){try{let t=yield S(this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`));e.isConfigured=t.length>0,e.isConfiguredDynamicPlatform=e.isConfigured&&Object.prototype.hasOwnProperty.call(t[0],"platform"),e.recommendChildBridge=e.isConfiguredDynamicPlatform&&this.$settings.env.recommendChildBridges&&this.$settings.env.serviceMode&&!["homebridge","homebridge-config-ui-x"].includes(e.name),e.hasChildBridges=e.isConfigured&&t.some(x=>x._bridge&&x._bridge.username);let a=this.getPluginChildBridges(e);e.hasChildBridgesUnpaired=a.some(x=>!x.paired)}catch{e.isConfigured=!0,e.hasChildBridges=!0}})))})}search(){this.installedPlugins=[],this.loading=!0,this.showExitButton=!0,this.$api.get(`/plugins/search/${encodeURIComponent(this.form.value.query)}`).subscribe({next:e=>{this.installedPlugins=e.filter(t=>t.name!=="homebridge-config-ui-x"),this.appendMetaInfo(),this.loading=!1},error:e=>{this.loading=!1,console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error")),this.loadInstalledPlugins()}})}onClearSearch(){this.loadInstalledPlugins()}onSubmit({value:e}){e.query.length?this.search():this.loadInstalledPlugins()}getChildBridgeMetadata(){this.io.request("get-homebridge-child-bridge-status").subscribe(e=>{this.childBridges=e})}getPluginChildBridges(e){return this.childBridges.filter(t=>t.plugin===e.name)}ngOnDestroy(){this.navigationSubscription&&this.navigationSubscription.unsubscribe(),this.io.end()}};d(o,"\u0275fac",function(t){return new(t||o)(I(N),I(z),I(ne),I(U),I(A),I(R),I(F))}),d(o,"\u0275cmp",V({type:o,selectors:[["ng-component"]],decls:15,vars:11,consts:[[4,"ngIf"],[1,"row","mb-3"],[1,"col-12"],[1,"primary-text","m-0"],[1,"row"],[1,"col-md-12"],["novalidate","",3,"ngSubmit","formGroup"],["type","text","formControlName","query",1,"hb-npm-search",3,"placeholder"],["class","hb-npm-search-clear","href","javascript:void(0)",3,"click",4,"ngIf"],[1,"d-flex","flex-wrap","justify-content-between"],["class","hb-plugin-space-between",4,"ngFor","ngForOf"],["class","alert alert-info mt-4 text-center w-100",4,"ngIf"],["href","javascript:void(0)",1,"hb-npm-search-clear",3,"click"],[1,"far","fa-fw","fa-times-circle"],[1,"hb-plugin-space-between"],[3,"plugin","childBridges"],[1,"alert","alert-info","mt-4","text-center","w-100"],[1,"fas","fa-fw","fa-magnifying-glass","primary-text","my-3",2,"font-size","75px"]],template:function(t,a){t&1&&(w(0,Mi,1,0,"app-spinner",0),l(1,"div",1)(2,"div",2)(3,"h3",3),m(4),u(5,"translate"),p()()(),l(6,"div",4)(7,"div",5)(8,"form",6),_("ngSubmit",function(){return a.onSubmit(a.form)}),c(9,"input",7),u(10,"translate"),w(11,ji,2,0,"a",8),p()()(),l(12,"div",9),w(13,Di,2,2,"div",10)(14,Ni,5,3,"div",11),p()),t&2&&(s("ngIf",a.loading),r(4),P(f(5,7,"menu.label_plugins")),r(4),s("formGroup",a.form),r(),s("placeholder",f(10,9,"plugins.placeholder_search_plugin")),r(2),s("ngIf",a.showExitButton),r(2),s("ngForOf",a.installedPlugins),r(),s("ngIf",a.installedPlugins.length===0&&!a.loading))},dependencies:[Y,E,de,ae,oe,le,ce,ge,ye,De,M],styles:[".hb-npm-search[_ngcontent-%COMP%]{outline:none;box-sizing:inherit!important;background-color:inherit;height:50px!important;width:100%;border-width:.5px;padding:10px;margin-bottom:15px}@media (hover: hover){.hb-npm-search[_ngcontent-%COMP%]:hover{border:1px solid #000000}}.hb-npm-search[_ngcontent-%COMP%]:focus{border:1px solid #000000;box-shadow:0 1px #000}.hb-npm-search-clear[_ngcontent-%COMP%]{position:absolute;right:25px;font-size:35px;color:#d0d0d0;line-height:50px;cursor:pointer}.hb-plugin-space-between[_ngcontent-%COMP%]{box-sizing:border-box;width:calc(50% - 6.6666666667px)}@media only screen and (max-width: 991px){.hb-plugin-space-between[_ngcontent-%COMP%]{width:100%}}"]}));let i=o;return i})();var Ai=[{path:"",component:Ne}],Ae=(()=>{let o=class o{};d(o,"\u0275fac",function(t){return new(t||o)}),d(o,"\u0275mod",D({type:o})),d(o,"\u0275inj",j({imports:[H.forChild(Ai),H]}));let i=o;return i})();var xt=(()=>{let o=class o{};d(o,"\u0275fac",function(t){return new(t||o)}),d(o,"\u0275mod",D({type:o})),d(o,"\u0275inj",j({imports:[ee,ue,me,ie.forChild(),Ie,Se,$e,Ae]}));let i=o;return i})();export{xt as PluginsModule};
|