homebridge-config-ui-x 5.2.1-beta.2 → 5.2.1-beta.3

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.
Files changed (79) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/config.schema.json +32 -0
  3. package/dist/core/auth/auth.controller.d.ts +5 -6
  4. package/dist/core/config/config.service.d.ts +10 -9
  5. package/dist/core/config/config.service.js +5 -3
  6. package/dist/core/config/config.service.js.map +1 -1
  7. package/dist/modules/platform-tools/terminal/terminal.controller.d.ts +11 -0
  8. package/dist/modules/platform-tools/terminal/terminal.controller.js +46 -0
  9. package/dist/modules/platform-tools/terminal/terminal.controller.js.map +1 -0
  10. package/dist/modules/platform-tools/terminal/terminal.gateway.d.ts +1 -0
  11. package/dist/modules/platform-tools/terminal/terminal.gateway.js +9 -0
  12. package/dist/modules/platform-tools/terminal/terminal.gateway.js.map +1 -1
  13. package/dist/modules/platform-tools/terminal/terminal.module.js +4 -0
  14. package/dist/modules/platform-tools/terminal/terminal.module.js.map +1 -1
  15. package/dist/modules/platform-tools/terminal/terminal.service.d.ts +1 -0
  16. package/dist/modules/platform-tools/terminal/terminal.service.js +7 -2
  17. package/dist/modules/platform-tools/terminal/terminal.service.js.map +1 -1
  18. package/package.json +1 -1
  19. package/public/chunk-2EA5UCBE.js +20 -0
  20. package/public/{chunk-AUWR5H2A.js → chunk-2G2G5D2C.js} +1 -1
  21. package/public/{chunk-E74SDSOB.js → chunk-2IJIUQHS.js} +1 -1
  22. package/public/chunk-2JQYF33Q.js +1 -0
  23. package/public/{chunk-MSF5I4U2.js → chunk-2OFCKVVD.js} +1 -1
  24. package/public/{chunk-LWX72DT2.js → chunk-2RKUDCJ6.js} +5 -5
  25. package/public/{chunk-BCK7KVRQ.js → chunk-2SPNEO5Z.js} +1 -1
  26. package/public/{chunk-YGYN2VIN.js → chunk-34CFUFM4.js} +1 -1
  27. package/public/{chunk-N5JWFVOK.js → chunk-5LVPMXW6.js} +1 -1
  28. package/public/chunk-63ZAX4W7.js +5 -0
  29. package/public/{chunk-2DZLV6J3.js → chunk-6BCYYWML.js} +1 -1
  30. package/public/{chunk-JQTSHXFE.js → chunk-6UTN7LNS.js} +1 -1
  31. package/public/{chunk-6P5CBUSK.js → chunk-AIQQGFRW.js} +1 -1
  32. package/public/{chunk-R6XXAITV.js → chunk-BXK2GHAW.js} +1 -1
  33. package/public/{chunk-XP3CHSCB.js → chunk-CBXKL2D4.js} +1 -1
  34. package/public/{chunk-7622KGTL.js → chunk-CP4425IM.js} +1 -1
  35. package/public/{chunk-4ZYGJMXW.js → chunk-CTPZNDZV.js} +1 -1
  36. package/public/{chunk-IOZZWAPL.js → chunk-D7ZJGJFL.js} +1 -1
  37. package/public/{chunk-2YY7HCF4.js → chunk-DYCIGMJH.js} +1 -1
  38. package/public/{chunk-7HCGM76M.js → chunk-DYJIASZY.js} +1 -1
  39. package/public/{chunk-RQRINXWC.js → chunk-ENGXYMKB.js} +1 -1
  40. package/public/chunk-F3RZH23D.js +1 -0
  41. package/public/{chunk-N5XBHM63.js → chunk-FBUXDF7O.js} +1 -1
  42. package/public/chunk-FBYHCCLN.js +1 -0
  43. package/public/{chunk-6RB567N4.js → chunk-FHKNGSN4.js} +2 -2
  44. package/public/{chunk-7ILRTIPC.js → chunk-G4N6TU5A.js} +1 -1
  45. package/public/{chunk-257Z3FEX.js → chunk-GPUZPTN4.js} +1 -1
  46. package/public/{chunk-LMME7DF7.js → chunk-IF2MY3JI.js} +1 -1
  47. package/public/{chunk-Q4VLAFNC.js → chunk-IMN7H4JK.js} +1 -1
  48. package/public/{chunk-X2DFA2MY.js → chunk-KBB4HBFD.js} +1 -1
  49. package/public/{chunk-NM63HVCD.js → chunk-MY2GNSS3.js} +1 -1
  50. package/public/{chunk-L2KN725U.js → chunk-P5U4CYHB.js} +1 -1
  51. package/public/chunk-PYSX24ZW.js +1 -0
  52. package/public/chunk-QLQG37MU.js +1 -0
  53. package/public/{chunk-XPNLZZEF.js → chunk-R3ZK4BA7.js} +1 -1
  54. package/public/{chunk-5ZKOITQZ.js → chunk-SQ2NNUW2.js} +1 -1
  55. package/public/{chunk-3HR7D3CJ.js → chunk-SUZY3J7O.js} +1 -1
  56. package/public/{chunk-LHPZ4GZG.js → chunk-UPXAGR47.js} +1 -1
  57. package/public/{chunk-Q5REQXYQ.js → chunk-VAL7FQ44.js} +1 -1
  58. package/public/{chunk-NXVXHA2V.js → chunk-VH7BMERV.js} +1 -1
  59. package/public/chunk-W6RS6NBX.js +1 -0
  60. package/public/chunk-WBYZSZSQ.js +1 -0
  61. package/public/{chunk-YEHVECR5.js → chunk-WGDEWOJU.js} +1 -1
  62. package/public/{chunk-53FPP2IJ.js → chunk-XDR6SZ6V.js} +1 -1
  63. package/public/{chunk-35OEX2R2.js → chunk-XP7YJNXR.js} +1 -1
  64. package/public/{chunk-WK6HLUOP.js → chunk-YCH3UKFR.js} +1 -1
  65. package/public/chunk-YXXZXBDD.js +1 -0
  66. package/public/chunk-ZM3OKI4W.js +1 -0
  67. package/public/index.html +1 -1
  68. package/public/main-ZXPYW5WY.js +1 -0
  69. package/public/chunk-A3SWYDYK.js +0 -1
  70. package/public/chunk-FAELDM7K.js +0 -1
  71. package/public/chunk-FM3OFRLV.js +0 -1
  72. package/public/chunk-GK4OAY7M.js +0 -1
  73. package/public/chunk-K46AA6SH.js +0 -1
  74. package/public/chunk-NGIL2WPB.js +0 -1
  75. package/public/chunk-NO3KHC6W.js +0 -20
  76. package/public/chunk-P7J6OX3V.js +0 -5
  77. package/public/chunk-QXJKMGDB.js +0 -1
  78. package/public/chunk-VH7ATYMN.js +0 -1
  79. package/public/main-AMBVFZVI.js +0 -1
@@ -1 +0,0 @@
1
- import{a as E}from"./chunk-NGIL2WPB.js";import{a as S}from"./chunk-P7J6OX3V.js";import"./chunk-BSZ6MHFZ.js";import"./chunk-K46AA6SH.js";import"./chunk-PSSVCFFV.js";import"./chunk-K2NEWUWG.js";import"./chunk-53FPP2IJ.js";import"./chunk-7HCGM76M.js";import{b as C}from"./chunk-FAELDM7K.js";import"./chunk-4ZYGJMXW.js";import{b as w}from"./chunk-ZG3HINDJ.js";import"./chunk-K7QEGT3E.js";import{$a as a,Hc as $,Ic as y,Sb as m,Sc as b,Tb as l,Ub as h,ab as c,bc as v,kc as f,la as s,lc as g,mb as u,n as d,qc as p,rc as T}from"./chunk-V7SOQAC5.js";var _=["terminaloutput"],L=(()=>{class r{$terminal=s(S);$settings=s(C);$navigationGuard=s(E);resizeEvent=new d;termTarget=b("terminaloutput");onWindowResize(){this.resizeEvent.next(void 0)}onBeforeUnload(n){return this.$navigationGuard.handleBeforeUnload(n)}onWindowFocus(){this.activateTerminal()}onClick(){this.activateTerminal()}activateTerminal(){this.$terminal.isTerminalReady()&&this.$terminal.term&&this.$terminal.term.focus()}ngOnInit(){if(window.document.querySelector("body").classList.add("bg-black"),this.$terminal.isTerminalReady()){!this.$settings.terminalPersistence&&this.$terminal.hasActiveSession()?(this.$terminal.destroyPersistentSession(),this.$terminal.startTerminal(this.termTarget(),{},this.resizeEvent)):this.$terminal.reconnectTerminal(this.termTarget(),{},this.resizeEvent),setTimeout(()=>{this.activateTerminal()},100);return}this.$settings.terminalPersistence&&this.$terminal.hasActiveSession()?this.$terminal.reconnectTerminal(this.termTarget(),{},this.resizeEvent):(!this.$settings.terminalPersistence&&this.$terminal.hasActiveSession()&&this.$terminal.destroyPersistentSession(),this.$terminal.startTerminal(this.termTarget(),{},this.resizeEvent)),setTimeout(()=>{this.activateTerminal()},100)}ngAfterViewInit(){document.addEventListener("visibilitychange",this.onVisibilityChange.bind(this))}onVisibilityChange(){!document.hidden&&this.$terminal.isTerminalReady()&&setTimeout(()=>{this.activateTerminal()},100)}canDeactivate(){return this.$navigationGuard.canDeactivate()}ngOnDestroy(){document.removeEventListener("visibilitychange",this.onVisibilityChange.bind(this)),window.document.querySelector("body").classList.remove("bg-black"),this.$settings.terminalPersistence?this.$terminal.detachTerminal():this.$terminal.destroyPersistentSession()}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=u({type:r,selectors:[["ng-component"]],viewQuery:function(e,i){e&1&&f(i.termTarget,_,5),e&2&&g()},hostBindings:function(e,i){e&1&&v("resize",function(t){return i.onWindowResize(t)},a)("beforeunload",function(t){return i.onBeforeUnload(t)},a)("focus",function(t){return i.onWindowFocus(t)},a)("click",function(t){return i.onClick(t)})},decls:8,vars:3,consts:[["terminaloutput",""],[1,"row","mb-3"],[1,"col-12"],[1,"primary-text","m-0"],[1,"flex-column","d-flex","align-items-stretch","adjust-for-mobile"],["id","docker-terminal",1,"align-self-end","w-100","h-100","mb-1"]],template:function(e,i){e&1&&(m(0,"div",1)(1,"div",2)(2,"h3",3),p(3),$(4,"translate"),l()()(),m(5,"div",4),h(6,"div",5,0),l()),e&2&&(c(3),T(y(4,1,"menu.linux.label_terminal")))},dependencies:[w],encapsulation:2})}return r})();export{L as TerminalComponent};
@@ -1 +0,0 @@
1
- import{k as et,n as it}from"./chunk-4ZYGJMXW.js";import{a as tt}from"./chunk-ZG3HINDJ.js";import{m as X}from"./chunk-K7QEGT3E.js";import{T as G,e as ut,g as ct,ga as R,h as K,la as W,n as Q,w as U}from"./chunk-V7SOQAC5.js";var st=ut((B,N)=>{(function(S,T){typeof B=="object"&&typeof N<"u"?N.exports=T():typeof define=="function"&&define.amd?define(T):(S=typeof globalThis<"u"?globalThis:S||self).dayjs=T()})(B,function(){"use strict";var S=1e3,T=6e4,n=36e5,h="millisecond",d="second",l="minute",p="hour",v="day",y="week",b="month",q="quarter",L="year",x="date",E="Invalid Date",nt=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,rt=/\[([^\]]+)]|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,at={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(r){var i=["th","st","nd","rd"],t=r%100;return"["+r+(i[(t-20)%10]||i[t]||i[0])+"]"}},C=function(r,i,t){var s=String(r);return!s||s.length>=i?r:""+Array(i+1-s.length).join(t)+r},ot={s:C,z:function(r){var i=-r.utcOffset(),t=Math.abs(i),s=Math.floor(t/60),e=t%60;return(i<=0?"+":"-")+C(s,2,"0")+":"+C(e,2,"0")},m:function r(i,t){if(i.date()<t.date())return-r(t,i);var s=12*(t.year()-i.year())+(t.month()-i.month()),e=i.clone().add(s,b),a=t-e<0,o=i.clone().add(s+(a?-1:1),b);return+(-(s+(t-e)/(a?e-o:o-e))||0)},a:function(r){return r<0?Math.ceil(r)||0:Math.floor(r)},p:function(r){return{M:b,y:L,w:y,d:v,D:x,h:p,m:l,s:d,ms:h,Q:q}[r]||String(r||"").toLowerCase().replace(/s$/,"")},u:function(r){return r===void 0}},A="en",k={};k[A]=at;var P="$isDayjsObject",F=function(r){return r instanceof V||!(!r||!r[P])},Y=function r(i,t,s){var e;if(!i)return A;if(typeof i=="string"){var a=i.toLowerCase();k[a]&&(e=a),t&&(k[a]=t,e=a);var o=i.split("-");if(!e&&o.length>1)return r(o[0])}else{var c=i.name;k[c]=i,e=c}return!s&&e&&(A=e),e||!s&&A},m=function(r,i){if(F(r))return r.clone();var t=typeof i=="object"?i:{};return t.date=r,t.args=arguments,new V(t)},u=ot;u.l=Y,u.i=F,u.w=function(r,i){return m(r,{locale:i.$L,utc:i.$u,x:i.$x,$offset:i.$offset})};var V=function(){function r(t){this.$L=Y(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[P]=!0}var i=r.prototype;return i.parse=function(t){this.$d=function(s){var e=s.date,a=s.utc;if(e===null)return new Date(NaN);if(u.u(e))return new Date;if(e instanceof Date)return new Date(e);if(typeof e=="string"&&!/Z$/i.test(e)){var o=e.match(nt);if(o){var c=o[2]-1||0,f=(o[7]||"0").substring(0,3);return a?new Date(Date.UTC(o[1],c,o[3]||1,o[4]||0,o[5]||0,o[6]||0,f)):new Date(o[1],c,o[3]||1,o[4]||0,o[5]||0,o[6]||0,f)}}return new Date(e)}(t),this.init()},i.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},i.$utils=function(){return u},i.isValid=function(){return this.$d.toString()!==E},i.isSame=function(t,s){var e=m(t);return this.startOf(s)<=e&&e<=this.endOf(s)},i.isAfter=function(t,s){return m(t)<this.startOf(s)},i.isBefore=function(t,s){return this.endOf(s)<m(t)},i.$g=function(t,s,e){return u.u(t)?this[s]:this.set(e,t)},i.unix=function(){return Math.floor(this.valueOf()/1e3)},i.valueOf=function(){return this.$d.getTime()},i.startOf=function(t,s){var e=this,a=!!u.u(s)||s,o=u.p(t),c=function(_,M){var D=u.w(e.$u?Date.UTC(e.$y,M,_):new Date(e.$y,M,_),e);return a?D:D.endOf(v)},f=function(_,M){return u.w(e.toDate()[_].apply(e.toDate("s"),(a?[0,0,0,0]:[23,59,59,999]).slice(M)),e)},g=this.$W,$=this.$M,w=this.$D,j="set"+(this.$u?"UTC":"");switch(o){case L:return a?c(1,0):c(31,11);case b:return a?c(1,$):c(0,$+1);case y:var O=this.$locale().weekStart||0,H=(g<O?g+7:g)-O;return c(a?w-H:w+(6-H),$);case v:case x:return f(j+"Hours",0);case p:return f(j+"Minutes",1);case l:return f(j+"Seconds",2);case d:return f(j+"Milliseconds",3);default:return this.clone()}},i.endOf=function(t){return this.startOf(t,!1)},i.$set=function(t,s){var e,a=u.p(t),o="set"+(this.$u?"UTC":""),c=(e={},e[v]=o+"Date",e[x]=o+"Date",e[b]=o+"Month",e[L]=o+"FullYear",e[p]=o+"Hours",e[l]=o+"Minutes",e[d]=o+"Seconds",e[h]=o+"Milliseconds",e)[a],f=a===v?this.$D+(s-this.$W):s;if(a===b||a===L){var g=this.clone().set(x,1);g.$d[c](f),g.init(),this.$d=g.set(x,Math.min(this.$D,g.daysInMonth())).$d}else c&&this.$d[c](f);return this.init(),this},i.set=function(t,s){return this.clone().$set(t,s)},i.get=function(t){return this[u.p(t)]()},i.add=function(t,s){var e,a=this;t=Number(t);var o=u.p(s),c=function($){var w=m(a);return u.w(w.date(w.date()+Math.round($*t)),a)};if(o===b)return this.set(b,this.$M+t);if(o===L)return this.set(L,this.$y+t);if(o===v)return c(1);if(o===y)return c(7);var f=(e={},e[l]=T,e[p]=n,e[d]=S,e)[o]||1,g=this.$d.getTime()+t*f;return u.w(g,this)},i.subtract=function(t,s){return this.add(-1*t,s)},i.format=function(t){var s=this,e=this.$locale();if(!this.isValid())return e.invalidDate||E;var a=t||"YYYY-MM-DDTHH:mm:ssZ",o=u.z(this),c=this.$H,f=this.$m,g=this.$M,$=e.weekdays,w=e.months,j=e.meridiem,O=function(M,D,I,z){return M&&(M[D]||M(s,a))||I[D].slice(0,z)},H=function(M){return u.s(c%12||12,M,"0")},_=j||function(M,D,I){var z=M<12?"AM":"PM";return I?z.toLowerCase():z};return a.replace(rt,function(M,D){return D||function(I){switch(I){case"YY":return String(s.$y).slice(-2);case"YYYY":return u.s(s.$y,4,"0");case"M":return g+1;case"MM":return u.s(g+1,2,"0");case"MMM":return O(e.monthsShort,g,w,3);case"MMMM":return O(w,g);case"D":return s.$D;case"DD":return u.s(s.$D,2,"0");case"d":return String(s.$W);case"dd":return O(e.weekdaysMin,s.$W,$,2);case"ddd":return O(e.weekdaysShort,s.$W,$,3);case"dddd":return $[s.$W];case"H":return String(c);case"HH":return u.s(c,2,"0");case"h":return H(1);case"hh":return H(2);case"a":return _(c,f,!0);case"A":return _(c,f,!1);case"m":return String(f);case"mm":return u.s(f,2,"0");case"s":return String(s.$s);case"ss":return u.s(s.$s,2,"0");case"SSS":return u.s(s.$ms,3,"0");case"Z":return o}return null}(M)||o.replace(":","")})},i.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},i.diff=function(t,s,e){var a,o=this,c=u.p(s),f=m(t),g=(f.utcOffset()-this.utcOffset())*T,$=this-f,w=function(){return u.m(o,f)};switch(c){case L:a=w()/12;break;case b:a=w();break;case q:a=w()/3;break;case y:a=($-g)/6048e5;break;case v:a=($-g)/864e5;break;case p:a=$/n;break;case l:a=$/T;break;case d:a=$/S;break;default:a=$}return e?a:u.a(a)},i.daysInMonth=function(){return this.endOf(b).$D},i.$locale=function(){return k[this.$L]},i.locale=function(t,s){if(!t)return this.$L;var e=this.clone(),a=Y(t,s,!0);return a&&(e.$L=a),e},i.clone=function(){return u.w(this.$d,this)},i.toDate=function(){return new Date(this.valueOf())},i.toJSON=function(){return this.isValid()?this.toISOString():null},i.toISOString=function(){return this.$d.toISOString()},i.toString=function(){return this.$d.toUTCString()},r}(),Z=V.prototype;return m.prototype=Z,[["$ms",h],["$s",d],["$m",l],["$H",p],["$W",v],["$M",b],["$y",L],["$D",x]].forEach(function(r){Z[r[1]]=function(i){return this.$g(i,r[0],r[1])}}),m.extend=function(r,i){return r.$i||(r(i,V,m),r.$i=!0),m},m.locale=Y,m.isDayjs=F,m.unix=function(r){return m(1e3*r)},m.en=k[A],m.Ls=k,m.p={},m})});var J=ct(st(),1);var vt=(()=>{class S{$api=W(it);$title=W(X);$toastr=W(et);$translate=W(tt);settingsLoadedSubject=new Q;defaultTheme="deep-purple";forbiddenKeys=["__proto__","constructor","prototype"];env={};formAuth=!0;sessionTimeout=28800;uiVersion;theme;lightingMode;currentLightingMode;actualLightingMode;browserLightingMode;menuMode;wallpaper;terminalPersistence=!1;terminalShowWarning=!1;terminalBufferSize=globalThis.terminal.bufferSize;serverTimeOffset=0;rtl=!1;onSettingsLoaded=this.settingsLoadedSubject.pipe(G());settingsLoaded=!1;themeList=["orange","red","pink","purple","deep-purple","indigo","blue","blue-grey","cyan","green","teal","grey","brown"];constructor(){this.getAppSettings()}getAppSettings(){return K(this,null,function*(){let n=yield U(this.$api.get("/auth/settings"));this.formAuth=n.formAuth,this.sessionTimeout=n.sessionTimeout,this.env=n.env,this.lightingMode=n.lightingMode,this.wallpaper=n.wallpaper,this.terminalPersistence=n.terminalPersistence===!0,this.terminalShowWarning=n.terminalShowWarning===!0,this.terminalBufferSize=n.terminalBufferSize||globalThis.terminal.bufferSize,this.setLightingMode(this.lightingMode,"user"),this.setTheme(n.theme),this.setMenuMode(n.menuMode),this.setTitle(this.env.homebridgeInstanceName),this.checkServerTime(n.serverTimestamp),this.setUiVersion(n.env.packageVersion),this.setLang(this.env.lang),this.settingsLoaded=!0,this.settingsLoadedSubject.next(void 0)})}setBrowserLightingMode(n){this.browserLightingMode=n,this.lightingMode==="auto"&&this.setLightingMode(n,"browser")}setLightingMode(n,h){h==="user"&&(this.lightingMode=n),this.currentLightingMode=n,this.actualLightingMode=this.currentLightingMode==="auto"?this.browserLightingMode:this.currentLightingMode,this.theme&&this.setTheme(this.theme)}setTheme(n){(!n||!this.themeList.includes(n))&&(n=this.defaultTheme,U(this.$api.put("/config-editor/ui",{key:"theme",value:n})).catch(l=>console.error("Error saving setTheme:",l)));let h=window.document.querySelector("body");h.classList.remove(`config-ui-x-${this.theme}`),h.classList.remove(`config-ui-x-dark-mode-${this.theme}`),this.theme=n,this.actualLightingMode==="dark"?(h.classList.add(`config-ui-x-dark-mode-${this.theme}`),h.classList.contains("dark-mode")||h.classList.add("dark-mode")):(h.classList.add(`config-ui-x-${this.theme}`),h.classList.contains("dark-mode")&&h.classList.remove("dark-mode")),window.document.querySelectorAll("iframe").forEach((l,p)=>{try{let v=l.contentDocument;if(v){let y=v.body;y.classList.remove(`config-ui-x-${this.theme}`),y.classList.remove(`config-ui-x-dark-mode-${this.theme}`),this.actualLightingMode==="dark"?(y.classList.add(`config-ui-x-dark-mode-${this.theme}`),y.classList.contains("dark-mode")||y.classList.add("dark-mode")):(y.classList.add(`config-ui-x-${this.theme}`),y.classList.contains("dark-mode")&&y.classList.remove("dark-mode")),l.contentWindow.postMessage({type:"theme-update",isDark:this.actualLightingMode==="dark",theme:n},window.location.origin)}}catch(v){console.warn(`Iframe ${p}: Access denied (cross-origin?)`,{error:v,src:l.src})}})}setMenuMode(n){this.menuMode=n}setLang(n){n?this.$translate.use(n):n="auto",this.env.lang=n}setItem(n,h){this[n]=h}setEnvItem(n,h){if(n.includes(".")){let d=n.split("."),l=this.env;for(let p=0;p<d.length-1;p++){if(this.forbiddenKeys.includes(d[p]))return;l[d[p]]||(l[d[p]]={}),l=l[d[p]]}this.forbiddenKeys.includes(d[d.length-1])||(l[d[d.length-1]]=h)}else this.env[n]=h}checkServerTime(n){let d=(0,J.default)(n).diff((0,J.default)(),"hour");this.serverTimeOffset=d*60*60,(d>=8||d<=-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")})}setUiVersion(n){this.uiVersion||(this.uiVersion=n)}setTitle(n){this.$title.setTitle(n||"Homebridge")}static \u0275fac=function(h){return new(h||S)};static \u0275prov=R({token:S,factory:S.\u0275fac,providedIn:"root"})}return S})();export{st as a,vt as b};
@@ -1 +0,0 @@
1
- import{a as ae}from"./chunk-ADNBR4EK.js";import{g as J,m as G,n as ne}from"./chunk-PSSVCFFV.js";import{A,b as P,c as D,d as C,e as I,f as z,g as V,j as w,m as q,o as R,p as O,q as L,x as ie,z as N}from"./chunk-K2NEWUWG.js";import{b as Q}from"./chunk-7HCGM76M.js";import{b as re}from"./chunk-QRQBCPWO.js";import{a as fe}from"./chunk-FAELDM7K.js";import{k as U,n as k}from"./chunk-4ZYGJMXW.js";import{a as E,b as $}from"./chunk-ZG3HINDJ.js";import"./chunk-K7QEGT3E.js";import{Dc as F,Ec as Z,Hb as u,Hc as o,Ib as g,Ic as s,Jb as y,Jc as ee,Lb as W,Mb as X,Nb as Y,Ob as f,Pb as n,Qb as i,Rb as d,Uc as te,_b as M,ab as e,bc as b,dc as v,g as ue,id as j,la as p,mb as S,qc as m,ra as B,rc as c,sa as T,sc as x}from"./chunk-V7SOQAC5.js";function be(r,h){r&1&&(n(0,"ngb-alert",13)(1,"p",20),m(2),o(3,"translate"),i()()),r&2&&(f("dismissible",!1),e(2),c(s(3,2,"login.invalid_password")))}var oe=(()=>{class r{$activeModal=p(G);$api=p(k);$toastr=p(U);$translate=p(E);invalidCredentials=!1;formGroup=new V({password:new w("",[C.required])});disable2fa(){this.invalidCredentials=!1,this.$api.post("/users/otp/deactivate",this.formGroup.value).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.setup_2fa_disable_success"),this.$translate.instant("toast.title_success"))},error:()=>{this.formGroup.setValue({password:""}),this.invalidCredentials=!0}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=S({type:r,selectors:[["ng-component"]],decls:34,vars:27,consts:[[1,"modal-content",2,"min-height","300px"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-key","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["type","password","autocomplete","current-password",1,"form-control","custom-input",3,"formControl","placeholder"],["type","error",1,"mt-3","mb-0",3,"dismissible"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"mb-0"]],template:function(a,l){a&1&&(n(0,"div",0)(1,"div",1)(2,"h5",2),m(3),o(4,"translate"),i(),n(5,"button",3),o(6,"translate"),b("click",function(){return l.dismissModal()}),i()(),n(7,"div",4)(8,"div",5),d(9,"i",6),i(),n(10,"ul",7)(11,"li"),m(12),o(13,"translate"),i()(),n(14,"ul",8)(15,"li",9)(16,"label",10),m(17),o(18,"translate"),i(),n(19,"div",11),d(20,"input",12),o(21,"translate"),i()()(),g(22,be,4,4,"ngb-alert",13),i(),n(23,"div",14)(24,"div",15)(25,"button",16),o(26,"translate"),b("click",function(){return l.dismissModal()}),m(27),o(28,"translate"),i()(),d(29,"div",17),n(30,"div",18)(31,"button",19),b("click",function(){return l.disable2fa()}),m(32),o(33,"translate"),i()()()()),a&2&&(e(3),c(s(4,11,"users.setup_2fa_disable")),e(2),u("aria-label",s(6,13,"form.button_close")),e(7),c(s(13,15,"users.setup_2fa_disable_current_password")),e(5),c(s(18,17,"users.label_password")),e(3),f("formControl",l.formGroup.controls.password)("placeholder",s(21,19,"users.label_password")),e(2),y(l.invalidCredentials&&!l.formGroup.controls.password.value?22:-1),e(3),u("aria-label",s(26,21,"form.button_close")),e(2),x(" ",s(28,23,"form.button_close")," "),e(4),f("disabled",l.formGroup.invalid),e(),x(" ",s(33,25,"form.button_disable")," "))},dependencies:[N,D,I,A,R,J,$],encapsulation:2})}return r})();var se=ue(fe(),1);var _e=r=>({timeDiffError:r});function ve(r,h){r&1&&(n(0,"li"),m(1),o(2,"translate"),i()),r&2&&(e(),c(s(2,1,"users.setup_2fa_scan_qr_code")))}function xe(r,h){if(r&1&&(n(0,"ngb-alert",8)(1,"p",16),m(2),o(3,"translate"),i(),n(4,"p",17),m(5),o(6,"translate"),i()()),r&2){let t=v();f("dismissible",!1),e(2),c(s(3,3,"users.setup_2fa_cannot_setup_2fa")),e(3),c(ee(6,5,"users.setup_2fa_server_time_out",F(8,_e,t.timeDiffError)))}}function Ce(r,h){if(r&1&&(n(0,"ul",9)(1,"li",18)(2,"div",19),d(3,"app-qrcode",20),i()(),n(4,"li",21)(5,"label",22),m(6),o(7,"translate"),i(),n(8,"div",23),d(9,"input",24),i()()()),r&2){let t=v();e(3),f("data",t.otpString),e(3),c(s(7,3,"users.setup_2fa_enter_code")),e(3),f("formControl",t.formGroup.controls.code)}}function we(r,h){if(r&1){let t=M();n(0,"button",25),o(1,"translate"),b("click",function(){B(t);let l=v();return T(l.dismissModal())}),m(2),o(3,"translate"),i()}r&2&&(u("aria-label",s(1,2,"form.button_close")),e(2),x(" ",s(3,4,"form.button_close")," "))}function he(r,h){if(r&1){let t=M();n(0,"button",25),o(1,"translate"),b("click",function(){B(t);let l=v();return T(l.dismissModal())}),m(2),o(3,"translate"),i()}r&2&&(u("aria-label",s(1,2,"form.button_close")),e(2),x(" ",s(3,4,"form.button_close")," "))}function ge(r,h){if(r&1){let t=M();n(0,"button",26),b("click",function(){B(t);let l=v();return T(l.enable2fa())}),m(1),o(2,"translate"),i()}if(r&2){let t=v();f("disabled",t.formGroup.invalid),e(),x(" ",s(2,2,"form.button_enable")," ")}}var le=(()=>{class r{$activeModal=p(G);$api=p(k);$toastr=p(U);$translate=p(E);user;timeDiffError=null;otpString;formGroup=new V({code:new w("",[C.required,C.minLength(6),C.maxLength(6)])});ngOnInit(){this.$api.post("/users/otp/setup",{}).subscribe({next:t=>{this.checkTimeDiff(t.timestamp),this.timeDiffError||(this.otpString=t.otpauth)},error:t=>{this.$activeModal.dismiss(),console.error(t),this.$toastr.error(this.$translate.instant("users.setup_2fa_enable_error"),this.$translate.instant("toast.title_error"))}})}enable2fa(){this.$api.post("/users/otp/activate",this.formGroup.value).subscribe({next:()=>{this.$toastr.success(this.$translate.instant("users.setup_2fa_enabled_success"),this.$translate.instant("toast.title_success")),this.$activeModal.close()},error:t=>{console.error(t),this.$toastr.error(this.$translate.instant("users.setup_2fa_activate_error"),this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}checkTimeDiff(t){let a=(0,se.default)(t).diff(new Date,"millisecond");a<-5e3||a>5e3?this.timeDiffError=a:this.timeDiffError=null}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=S({type:r,selectors:[["ng-component"]],inputs:{user:"user"},decls:24,vars:15,consts:[[1,"modal-content","setup2fa"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-key","primary-text",2,"font-size","75px"],[1,"mb-3"],["type","error",1,"mb-0",3,"dismissible"],[1,"list-group","list-group-box","mb-0"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"disabled"],[1,"fw-bold","mb-1"],[1,"mb-0"],[1,"list-group-item","text-center"],[1,"text-center","w-100","d-flex","justify-content-center"],[1,"mx-auto",2,"width","175px","height","175px",3,"data"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["type","text","placeholder","eg. 123456","autocomplete","one-time-code","autocapitalize","none","inputmode","numeric","pattern","[0-9]*",1,"form-control","custom-input",3,"formControl"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"]],template:function(a,l){a&1&&(n(0,"div",0)(1,"div",1)(2,"h5",2),m(3),o(4,"translate"),i(),n(5,"button",3),o(6,"translate"),b("click",function(){return l.dismissModal()}),i()(),n(7,"div",4)(8,"div",5),d(9,"i",6),i(),n(10,"ul",7)(11,"li"),m(12),o(13,"translate"),i(),g(14,ve,3,3,"li"),i(),g(15,xe,7,10,"ngb-alert",8),g(16,Ce,10,5,"ul",9),i(),n(17,"div",10)(18,"div",11),g(19,we,4,6,"button",12),i(),n(20,"div",13),g(21,he,4,6,"button",12),i(),n(22,"div",14),g(23,ge,3,4,"button",15),i()()()),a&2&&(e(3),c(s(4,9,"users.setup_2fa")),e(2),u("aria-label",s(6,11,"form.button_close")),e(7),c(s(13,13,"users.setup_2fa_warning")),e(2),y(l.timeDiffError?-1:14),e(),y(l.timeDiffError?15:-1),e(),y(l.timeDiffError?-1:16),e(3),y(l.timeDiffError?-1:19),e(2),y(l.timeDiffError?21:-1),e(2),y(l.timeDiffError?-1:23))},dependencies:[J,ae,N,D,I,ie,A,R,$],encapsulation:2})}return r})();var me=r=>({"is-invalid":r}),de=(()=>{class r{$activeModal=p(G);$api=p(k);$toastr=p(U);$translate=p(E);form=new V({username:new w("",[C.required]),name:new w("",[C.required]),password:new w("",[C.compose([C.required,C.minLength(4)])]),passwordConfirm:new w("",[C.required]),admin:new w(!0)},this.matchPassword);onSubmit({value:t}){this.$api.post("/users",t).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.toast_added_new_user"),this.$translate.instant("toast.title_success"))},error:a=>{this.$toastr.error(a.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}matchPassword(t){let a=t.get("password").value,l=t.get("passwordConfirm").value;if(a!==l)t.get("passwordConfirm").setErrors({matchPassword:!0});else return null}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=S({type:r,selectors:[["ng-component"]],decls:58,vars:50,consts:[[1,"modal-content"],["novalidate","",3,"ngSubmit","formGroup"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-user-plus","primary-text",2,"font-size","75px"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],["for","form-username",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["formControlName","username","type","text","id","form-username","autocomplete","username","autocapitalize","none",1,"form-control","custom-input"],["for","form-name",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","name","type","text","id","form-name","autocomplete","name",1,"form-control","custom-input"],["for","form-pass",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","password","type","password","autocomplete","new-password","id","form-pass",1,"form-control","custom-input",3,"ngClass"],["for","form-pass-confirm",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","passwordConfirm","type","password","autocomplete","new-password","id","form-pass-confirm",1,"form-control","custom-input",3,"ngClass"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"text-start"],[1,"text-end","grey-text","d-flex","align-items-center"],["formControlName","admin","type","checkbox","id","isAdmin",1,"rendux-input"],["for","isAdmin",1,"rendux-label","ms-3"],[1,"modal-footer","justify-content-between"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],["type","submit",1,"btn","btn-primary",3,"disabled"]],template:function(a,l){a&1&&(n(0,"div",0)(1,"form",1),b("ngSubmit",function(){return l.onSubmit(l.form)}),n(2,"div",2)(3,"h5",3),m(4),o(5,"translate"),i(),n(6,"button",4),o(7,"translate"),b("click",function(){return l.dismissModal()}),i()(),n(8,"div",5)(9,"div",6),d(10,"i",7),i(),n(11,"ul",8)(12,"li",9)(13,"label",10),m(14),o(15,"translate"),i(),n(16,"div",11),d(17,"input",12),o(18,"translate"),i()(),n(19,"li",9)(20,"label",13),m(21),o(22,"translate"),i(),n(23,"div",11),d(24,"input",14),o(25,"translate"),i()(),n(26,"li",9)(27,"label",15),m(28),o(29,"translate"),i(),n(30,"div",11),d(31,"input",16),o(32,"translate"),i()(),n(33,"li",9)(34,"label",17),m(35),o(36,"translate"),i(),n(37,"div",11),d(38,"input",18),o(39,"translate"),i()(),n(40,"li",19)(41,"span",20),m(42),o(43,"translate"),i(),n(44,"div",21),d(45,"input",22),o(46,"translate"),d(47,"label",23),i()()()(),n(48,"div",24)(49,"div",20)(50,"button",25),b("click",function(){return l.dismissModal()}),m(51),o(52,"translate"),i()(),d(53,"div",26),n(54,"div",27)(55,"button",28),m(56),o(57,"translate"),i()()()()()),a&2&&(e(),f("formGroup",l.form),e(3),c(s(5,18,"users.title_add_user")),e(2),u("aria-label",s(7,20,"form.button_close")),e(8),c(s(15,22,"users.label_username")),e(3),u("aria-label",s(18,24,"users.label_username")),e(4),c(s(22,26,"users.label_full_name")),e(3),u("aria-label",s(25,28,"users.label_full_name")),e(4),c(s(29,30,"users.label_password")),e(3),f("ngClass",F(46,me,l.form.controls.password.dirty&&l.form.controls.password.errors)),u("aria-label",s(32,32,"users.label_password")),e(4),c(s(36,34,"users.label_confirm_password")),e(3),f("ngClass",F(48,me,l.form.controls.passwordConfirm.dirty&&l.form.controls.passwordConfirm.errors)),u("aria-label",s(39,36,"users.label_confirm_password")),e(4),c(s(43,38,"users.label_admin_user")),e(3),u("aria-label",s(46,40,"users.label_admin_user")),e(6),x(" ",s(52,42,"form.button_close")," "),e(4),f("disabled",!l.form.valid),e(),x(" ",s(57,44,"form.button_save")," "))},dependencies:[N,q,D,P,I,z,A,O,L,j,$],encapsulation:2})}return r})();var pe=r=>({"is-invalid":r});function ye(r,h){if(r&1&&(n(0,"li",9)(1,"label",27),m(2),o(3,"translate"),i(),n(4,"div",11),d(5,"input",28),o(6,"translate"),i()()),r&2){let t=v();e(2),c(s(3,3,"users.label_confirm_password")),e(3),f("ngClass",F(7,pe,t.form.controls.passwordConfirm.dirty&&t.form.controls.passwordConfirm.errors)),u("aria-label",s(6,5,"users.label_confirm_password"))}}var ce=(()=>{class r{$activeModal=p(G);$api=p(k);$auth=p(Q);$cdr=p(te);$toastr=p(U);$translate=p(E);initialFormValue={};user;isCurrentUser=!1;form=new V({username:new w("",[C.required]),name:new w("",[C.required]),password:new w(""),passwordConfirm:new w(""),admin:new w(!0)},this.matchPassword);ngOnInit(){this.isCurrentUser=this.$auth.user.username===this.user.username,this.form.patchValue(this.user),this.initialFormValue=this.form.getRawValue(),this.form.valueChanges.subscribe(()=>this.$cdr.detectChanges())}onSubmit({value:t}){this.$api.patch(`/users/${this.user.id}`,t).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.toast_updated_user"),this.$translate.instant("toast.title_success")),this.isCurrentUser&&t.username!==this.$auth.user.username&&this.$auth.logout()},error:a=>{console.error(a),this.$toastr.error(a.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}isFormUnchanged(){return this.form.controls.password.value?!1:JSON.stringify(this.form.getRawValue())===JSON.stringify(this.initialFormValue)}dismissModal(){this.$activeModal.dismiss("Dismiss")}matchPassword(t){let a=t.get("password").value,l=t.get("passwordConfirm").value;if(a!==l)t.get("passwordConfirm").setErrors({matchPassword:!0});else return null}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=S({type:r,selectors:[["ng-component"]],inputs:{user:"user"},decls:52,vars:42,consts:[[1,"modal-content"],["novalidate","",3,"ngSubmit","formGroup"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-user-pen","primary-text",2,"font-size","75px"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],["for","form-username",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["formControlName","username","type","text","id","form-username","autocomplete","off","autocapitalize","none",1,"form-control","custom-input"],["for","form-name",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","name","type","text","id","form-name","autocomplete","name",1,"form-control","custom-input"],["for","form-pass",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","password","type","password","autocomplete","new-password","id","form-pass",1,"form-control","custom-input",3,"ngClass"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"text-start"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox","formControlName","admin","id","isAdmin",1,"rendux-input"],["for","isAdmin",1,"rendux-label","ms-3"],[1,"modal-footer","justify-content-between"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],["type","submit",1,"btn","btn-primary",3,"disabled"],["for","form-pass-confirm",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","passwordConfirm","type","password","autocomplete","new-password","id","form-pass-confirm",1,"form-control","custom-input",3,"ngClass"]],template:function(a,l){a&1&&(n(0,"div",0)(1,"form",1),b("ngSubmit",function(){return l.onSubmit(l.form)}),n(2,"div",2)(3,"h5",3),m(4),o(5,"translate"),i(),n(6,"button",4),o(7,"translate"),b("click",function(){return l.dismissModal()}),i()(),n(8,"div",5)(9,"div",6),d(10,"i",7),i(),n(11,"ul",8)(12,"li",9)(13,"label",10),m(14),o(15,"translate"),i(),n(16,"div",11),d(17,"input",12),o(18,"translate"),i()(),n(19,"li",9)(20,"label",13),m(21),o(22,"translate"),i(),n(23,"div",11),d(24,"input",14),o(25,"translate"),i()(),n(26,"li",9)(27,"label",15),m(28),o(29,"translate"),i(),n(30,"div",11),d(31,"input",16),o(32,"translate"),i()(),g(33,ye,7,9,"li",9),n(34,"li",17)(35,"span",18),m(36),o(37,"translate"),i(),n(38,"div",19),d(39,"input",20),o(40,"translate"),d(41,"label",21),i()()()(),n(42,"div",22)(43,"div",18)(44,"button",23),b("click",function(){return l.dismissModal()}),m(45),o(46,"translate"),i()(),d(47,"div",24),n(48,"div",25)(49,"button",26),m(50),o(51,"translate"),i()()()()()),a&2&&(e(),f("formGroup",l.form),e(3),c(s(5,16,"users.title_edit_user")),e(2),u("aria-label",s(7,18,"form.button_close")),e(8),c(s(15,20,"users.label_username")),e(3),u("aria-label",s(18,22,"users.label_username")),e(4),c(s(22,24,"users.label_full_name")),e(3),u("aria-label",s(25,26,"users.label_full_name")),e(4),c(s(29,28,"users.label_new_password")),e(3),f("ngClass",F(40,pe,l.form.controls.password.dirty&&l.form.controls.password.errors)),u("aria-label",s(32,30,"users.label_new_password")),e(2),y(l.form.controls.password.value?33:-1),e(3),c(s(37,32,"users.label_admin_user")),e(3),u("aria-label",s(40,34,"users.label_admin_user")),e(6),x(" ",s(46,36,"form.button_close")," "),e(4),f("disabled",!l.form.valid||l.isFormUnchanged()),e(),x(" ",s(51,38,"form.button_save")," "))},dependencies:[N,q,D,P,I,z,A,O,L,j,$],encapsulation:2})}return r})();var Se=(r,h)=>({"fa-user-secret":r,"fa-user":h});function Ee(r,h){if(r&1){let t=M();n(0,"button",15),b("click",function(){B(t);let l=v(2).$implicit,_=v();return T(_.disable2fa(l))}),m(1),o(2,"translate"),i()}r&2&&(e(),x(" ",s(2,1,"users.setup_2fa_disable")," "))}function $e(r,h){if(r&1){let t=M();n(0,"button",21),b("click",function(){B(t);let l=v(2).$implicit,_=v();return T(_.setup2fa(l))}),m(1),o(2,"translate"),i()}r&2&&(e(),c(s(2,1,"users.setup_2fa")))}function Ue(r,h){if(r&1&&g(0,Ee,3,3,"button",19)(1,$e,3,3,"button",20),r&2){let t=v().$implicit;y(t.otpActive?0:1)}}function ke(r,h){r&1&&d(0,"div")}function Be(r,h){if(r&1){let t=M();n(0,"div",7)(1,"div",8)(2,"div",9)(3,"div",10)(4,"span",11)(5,"h4"),d(6,"i",12),m(7),i(),d(8,"h5",13),i()(),n(9,"div",14),g(10,Ue,2,1)(11,ke,1,0,"div"),n(12,"div")(13,"button",15),o(14,"translate"),b("click",function(){let l=B(t).$implicit,_=v();return T(_.openEditUser(l))}),d(15,"i",16),i(),n(16,"button",17),o(17,"translate"),b("click",function(){let l=B(t).$implicit,_=v();return T(_.deleteUser(l.id))}),d(18,"i",18),i()()()()()()}if(r&2){let t=h.$implicit,a=v();e(6),f("ngClass",Z(11,Se,t.admin,!t.admin)),e(),x(" ",t.name," "),e(),f("innerText",t.username),e(2),y(a.username===t.username&&a.isAdmin?10:11),e(3),u("aria-label",s(14,7,"form.button_edit")),e(3),f("disabled",a.username===t.username),u("aria-label",s(17,9,"form.button_delete"))}}var Ut=(()=>{class r{$api=p(k);$auth=p(Q);$modal=p(ne);$route=p(re);$toastr=p(U);$translate=p(E);homebridgeUsers=[];username=this.$auth.user.username;isAdmin=this.$auth.user.admin;ngOnInit(){this.$route.data.subscribe(t=>{this.homebridgeUsers=t.homebridgeUsers})}reloadUsers(){return this.$api.get("/users").subscribe(t=>{this.homebridgeUsers=t})}openAddNewUser(){this.$modal.open(de,{size:"lg",backdrop:"static"}).result.finally(()=>{this.reloadUsers()})}openEditUser(t){let a=this.$modal.open(ce,{size:"lg",backdrop:"static"});a.componentInstance.user=t,a.result.finally(()=>{this.reloadUsers()})}deleteUser(t){this.$api.delete(`/users/${t}`).subscribe({next:()=>{this.$toastr.success(this.$translate.instant("users.toast_user_deleted"),this.$translate.instant("toast.title_success")),this.reloadUsers()},error:a=>{console.error(a),this.$toastr.error(a.error.message||this.$translate.instant("users.toast_failed_to_delete_user"),this.$translate.instant("toast.title_error"))}})}setup2fa(t){let a=this.$modal.open(le,{size:"lg",backdrop:"static"});a.componentInstance.user=t,a.result.finally(()=>{this.reloadUsers()})}disable2fa(t){let a=this.$modal.open(oe,{size:"lg",backdrop:"static"});a.componentInstance.user=t,a.result.finally(()=>{this.reloadUsers()})}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=S({type:r,selectors:[["app-users"]],decls:12,vars:6,consts:[[1,"row","mb-3"],[1,"col-9"],[1,"primary-text","m-0"],[1,"col-3","text-end"],[1,"btn","btn-elegant","waves-effect","m-0",3,"click"],[1,"fas","fa-fw","fa-user-plus"],[1,"row"],[1,"col-md-6","mb-4"],[1,"card","card-body"],[1,"d-flex","flex-column"],[1,"d-flex","flex-row","mb-3"],[1,"me-auto","my-0"],[1,"fas","fa-fw","grey-text",3,"ngClass"],[1,"small","text-truncate","primary-text",3,"innerText"],[1,"d-flex","flex-row","justify-content-between"],[1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-fw","fa-user-pen"],[1,"btn","btn-danger","m-0","ms-2",3,"click","disabled"],[1,"fas","fa-fw","fa-trash"],[1,"btn","btn-elegant","m-0"],[1,"btn","btn-primary","m-0"],[1,"btn","btn-primary","m-0",3,"click"]],template:function(a,l){a&1&&(n(0,"div",0)(1,"div",1)(2,"h3",2),m(3),o(4,"translate"),i()(),n(5,"div",3)(6,"button",4),o(7,"translate"),b("click",function(){return l.openAddNewUser()}),d(8,"i",5),i()()(),n(9,"div",6),X(10,Be,19,14,"div",7,W),i()),a&2&&(e(3),c(s(4,2,"users.title_users")),e(3),u("aria-label",s(7,4,"users.button_add_user")),e(4),Y(l.homebridgeUsers))},dependencies:[j,$],encapsulation:2})}return r})();export{Ut as UsersComponent};
@@ -1 +0,0 @@
1
- import{a as se}from"./chunk-257Z3FEX.js";import{a as te,b as ie,c as ne}from"./chunk-BYJZ4WBV.js";import{c as re}from"./chunk-N5XBHM63.js";import"./chunk-LMME7DF7.js";import{a as le}from"./chunk-P3TP4J62.js";import{m as V,n as Z,t as ee}from"./chunk-PSSVCFFV.js";import{c as G,e as J,f as K,i as Q,l as U,m as X,z as Y}from"./chunk-K2NEWUWG.js";import"./chunk-53FPP2IJ.js";import{b as ae}from"./chunk-7HCGM76M.js";import"./chunk-QRQBCPWO.js";import{b as oe}from"./chunk-FAELDM7K.js";import"./chunk-4ZYGJMXW.js";import{b as E}from"./chunk-ZG3HINDJ.js";import"./chunk-K7QEGT3E.js";import{Cc as R,Dc as $,Ec as j,Hb as C,Hc as a,Ib as w,Ic as r,Jb as S,Jc as z,Lb as P,Mb as L,Nb as N,Ob as _,Pb as s,Qb as l,Rb as f,Sb as u,Tb as b,Ub as A,Xa as W,_b as D,ab as o,bc as v,cc as H,dc as m,id as q,la as x,mb as M,qc as c,ra as y,rc as p,sa as h,sc as k,xc as T,yc as B,zc as I}from"./chunk-V7SOQAC5.js";var ce=(()=>{class t{$activeModal=x(V);dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=M({type:t,selectors:[["ng-component"]],decls:41,vars:30,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fa","fa-fw","fa-question-circle-o","primary-text",2,"font-size","75px"],[1,"ms-2"],[1,"mb-0"],[1,"ms-2","mt-2"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-end"]],template:function(i,n){i&1&&(u(0,"div",0)(1,"form")(2,"div",1)(3,"h5",2),c(4),a(5,"translate"),b(),u(6,"button",3),a(7,"translate"),H("click",function(){return n.dismissModal()}),b()(),u(8,"div",4)(9,"div",5),A(10,"i",6),b(),u(11,"h5",7),c(12),a(13,"translate"),b(),u(14,"ul",8)(15,"li"),c(16),a(17,"translate"),b(),u(18,"li"),c(19),a(20,"translate"),b()(),u(21,"h5",9),c(22),a(23,"translate"),b(),u(24,"ul",8)(25,"li"),c(26),a(27,"translate"),b(),u(28,"li"),c(29),a(30,"translate"),b(),u(31,"li"),c(32),a(33,"translate"),b()()(),u(34,"div",10),A(35,"div",11),u(36,"div",12)(37,"button",13),H("click",function(){return n.dismissModal()}),c(38),a(39,"translate"),b()(),A(40,"div",14),b()()()),i&2&&(o(4),p(r(5,10,"support.title")),o(2),C("aria-label",r(7,12,"form.button_close")),o(6),p(r(13,14,"accessories.title_accessories")),o(4),p(r(17,16,"accessories.support.acc_1")),o(3),p(r(20,18,"accessories.support.acc_2")),o(3),p(r(23,20,"accessories.title_rooms")),o(4),p(r(27,22,"accessories.support.rooms_1")),o(3),p(r(30,24,"accessories.support.rooms_2")),o(3),p(r(33,26,"accessories.support.rooms_3")),o(6),k(" ",r(39,28,"form.button_close")," "))},dependencies:[E],encapsulation:2})}return t})();var pe=()=>({standalone:!0}),de=(()=>{class t{$activeModal=x(V);roomName;dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(e){this.$activeModal.close(e)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=M({type:t,selectors:[["ng-component"]],inputs:{roomName:"roomName"},decls:28,vars:19,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-folder-plus","primary-text",2,"font-size","75px"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],["for","form-name",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["autocomplete","off","type","text","id","form-name","autofocus","",1,"form-control","custom-input",3,"ngModelChange","keyup.enter","ngModel","ngModelOptions"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"]],template:function(i,n){i&1&&(s(0,"div",0)(1,"form")(2,"div",1)(3,"h5",2),c(4),a(5,"translate"),l(),s(6,"button",3),a(7,"translate"),v("click",function(){return n.dismissModal()}),l()(),s(8,"div",4)(9,"div",5),f(10,"i",6),l(),s(11,"ul",7)(12,"li",8)(13,"label",9),c(14),a(15,"translate"),l(),s(16,"div",10)(17,"input",11),I("ngModelChange",function(F){return B(n.roomName,F)||(n.roomName=F),F}),v("keyup.enter",function(){return n.closeModal(n.roomName)}),l()()()()(),s(18,"div",12)(19,"div",13)(20,"button",14),v("click",function(){return n.dismissModal()}),c(21),a(22,"translate"),l()(),f(23,"div",15),s(24,"div",16)(25,"button",17),v("click",function(){return n.closeModal(n.roomName)}),c(26),a(27,"translate"),l()()()()()),i&2&&(o(4),p(r(5,8,"accessories.button_add_room")),o(2),C("aria-label",r(7,10,"form.button_close")),o(8),p(r(15,12,"accessories.room_name")),o(3),T("ngModel",n.roomName),_("ngModelOptions",R(18,pe)),o(4),k(" ",r(22,14,"form.button_close")," "),o(4),_("disabled",!n.roomName),o(),k(" ",r(27,16,"form.button_save")," "))},dependencies:[Y,X,G,J,K,U,Q,E],encapsulation:2})}return t})();var me=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=M({type:t,selectors:[["app-drag-here-placeholder"]],decls:5,vars:3,consts:[[1,"accessory-box"],[1,"fas","fa-fw","fa-arrow-alt-circle-down","accessory-icon"],[1,"accessory-label"]],template:function(i,n){i&1&&(u(0,"div",0),A(1,"i",1),u(2,"div",2),c(3),a(4,"translate"),b()()),i&2&&(o(3),p(r(4,1,"accessories.control.drag_here")))},dependencies:[E],styles:[".accessory-box[_ngcontent-%COMP%]{opacity:.2}"]})}return t})();var ue=(t,g)=>({"fa-eye":t,"fa-eye-slash":g}),_e=t=>({"cursor-move":t}),be=t=>({"justify-content-between":t}),fe=t=>({link:t});function ge(t,g){if(t&1&&(s(0,"div",0)(1,"div",19)(2,"h5",20),c(3),a(4,"translate"),l()()()),t&2){let e=m().$implicit,i=m(2);o(2),_("ngClass",$(4,_e,!i.isMobile)),o(),k(" ",e.name==="Default Room"?r(4,2,"accessories.control.default_room"):e.name," ")}}function ve(t,g){if(t&1&&(s(0,"div",23),f(1,"app-accessory-tile",24),l()),t&2){let e=m().$implicit;o(),_("service",e)}}function xe(t,g){if(t&1&&w(0,ve,2,1,"div",23),t&2){let e=g.$implicit,i=m(4);S(!i.hideHidden||!e.hidden?0:-1)}}function Ce(t,g){if(t&1){let e=D();s(0,"div",21),I("dragulaModelChange",function(n){y(e);let d=m().$implicit;return B(d.services,n)||(d.services=n),h(n)}),L(1,xe,1,1,null,null,P),f(3,"div",22)(4,"div",22)(5,"div",22)(6,"div",22)(7,"div",22)(8,"div",22)(9,"div",22)(10,"div",22)(11,"div",22)(12,"div",22),l()}if(t&2){let e=m().$implicit,i=m(2);_("ngClass",$(3,be,i.isMobile))("dragula","services-bag"),T("dragulaModel",e.services),o(),N(e.services)}}function ye(t,g){if(t&1){let e=D();s(0,"div",25),I("dragulaModelChange",function(n){y(e);let d=m().$implicit;return B(d.services,n)||(d.services=n),h(n)}),f(1,"app-drag-here-placeholder",26),l()}if(t&2){let e=m().$implicit;_("dragula","services-bag"),T("dragulaModel",e.services)}}function he(t,g){if(t&1&&(s(0,"div"),w(1,ge,5,6,"div",0),s(2,"div",16),w(3,Ce,13,5,"div",17),w(4,ye,2,2,"div",18),l()()),t&2){let e=g.$implicit,i=m(2);o(),S(!i.isMobile||e.services.length?1:-1),o(2),S(e.services.length?3:-1),o(),S(!e.services.length&&!i.isMobile?4:-1)}}function Me(t,g){if(t&1){let e=D();s(0,"div",1)(1,"div",2)(2,"h3",3),c(3),a(4,"translate"),l()(),s(5,"div",4)(6,"button",5),a(7,"translate"),v("click",function(){y(e);let n=m();return h(n.openSupport())}),f(8,"i",6),l()(),s(9,"div",7)(10,"button",8),a(11,"translate"),a(12,"translate"),v("click",function(){y(e);let n=m();return h(n.addRoom())}),f(13,"i",9),l(),s(14,"button",8),a(15,"translate"),a(16,"translate"),a(17,"translate"),a(18,"translate"),v("click",function(){y(e);let n=m();return h(n.hideHidden=!n.hideHidden)}),f(19,"i",10),l(),s(20,"div",11)(21,"button",12),a(22,"translate"),a(23,"translate"),v("click",function(){y(e);let n=m();return h(n.toggleLayoutLock())}),f(24,"i",13),l(),s(25,"button",12),a(26,"translate"),a(27,"translate"),v("click",function(){y(e);let n=m();return h(n.toggleLayoutLock())}),f(28,"i",14),l()(),s(29,"button",5),a(30,"translate"),v("click",function(){y(e);let n=m();return h(n.openSupport())}),f(31,"i",6),l()()(),s(32,"div",15),I("dragulaModelChange",function(n){y(e);let d=m();return B(d.$accessories.rooms,n)||(d.$accessories.rooms=n),h(n)}),L(33,he,5,3,"div",null,P),l()}if(t&2){let e=m();o(3),p(r(4,18,"accessories.title_accessories")),o(3),C("aria-label",r(7,20,"support.title")),o(4),_("hidden",e.isMobile)("ngbTooltip",r(11,22,"accessories.button_add_room")),C("aria-label",r(12,24,"accessories.button_add_room")),o(4),_("hidden",e.isMobile)("ngbTooltip",e.hideHidden?r(15,26,"accessories.button_hidden_show"):r(16,28,"accessories.button_hidden_hide")),C("aria-label",e.hideHidden?r(17,30,"accessories.button_hidden_show"):r(18,32,"accessories.button_hidden_hide")),o(5),_("ngClass",j(44,ue,!e.hideHidden,e.hideHidden)),o(2),_("disabled",!e.isMobile)("ngbTooltip",r(22,34,"form.button_unlock")),C("aria-label",r(23,36,"form.button_unlock")),o(4),_("disabled",e.isMobile)("ngbTooltip",r(26,38,"form.button_lock")),C("aria-label",r(27,40,"form.button_lock")),o(4),C("aria-label",r(30,42,"support.title")),o(3),_("dragula","rooms-bag"),T("dragulaModel",e.$accessories.rooms),o(),N(e.$accessories.rooms)}}function Ee(t,g){t&1&&(s(0,"p",33),c(1),a(2,"translate"),l()),t&2&&(o(),p(r(2,1,"accessories.settings_link")))}function we(t,g){if(t&1&&(s(0,"div",0)(1,"div",27)(2,"h3",28),c(3),a(4,"translate"),l()(),s(5,"div",29)(6,"div",30)(7,"h5",31),c(8),a(9,"translate"),l(),f(10,"p",32),a(11,"translate"),w(12,Ee,3,3,"p",33),l()()()),t&2){let e=m();o(3),p(r(4,4,"accessories.title_accessories")),o(5),p(r(9,6,"accessories.control_disabled")),o(2),_("innerHTML",z(11,8,"accessories.message_must_use_insecure_mode",$(11,fe,e.linkInsecure)),W),o(2),S(e.isAdmin?12:-1)}}var it=(()=>{class t{$accessories=x(re);$auth=x(ae);dragulaService=x(te);$modal=x(Z);$settings=x(oe);$md=x(le);orderSubscription;isAdmin=this.$auth.user.admin;enableAccessories=this.$settings.env.enableAccessories;isMobile=!1;hideHidden=!0;linkInsecure='<a href="https://github.com/homebridge/homebridge-config-ui-x/wiki/Enabling-Accessory-Control" target="_blank"><i class="fa fa-fw fa-external-link-alt primary-text"></i></a>';constructor(){let e=this.dragulaService;this.isMobile=this.$md.detect.mobile(),e.createGroup("rooms-bag",{moves:(i,n,d)=>!this.isMobile&&d.classList.contains("drag-handle")}),e.createGroup("services-bag",{moves:i=>!this.isMobile&&!i.classList.contains("no-drag")}),this.orderSubscription=e.drop().subscribe(()=>{setTimeout(()=>{this.$accessories.saveLayout()})}),this.isMobile=!0}ngOnInit(){this.$accessories.start()}addRoom(){this.$modal.open(de,{size:"lg",backdrop:"static"}).result.then(e=>{!e||!e.length||this.$accessories.rooms.find(i=>i.name===e)||(this.$accessories.rooms.push({name:e,services:[]}),this.isMobile&&this.toggleLayoutLock())}).catch(()=>{})}toggleLayoutLock(){this.isMobile=!this.isMobile,this.isMobile?document.querySelectorAll(".services-bag").forEach(i=>{for(let n=0;n<10;n++){let d=document.createElement("div");d.className="accessory-box invisible py-0 my-0",d.style.height="0",i.appendChild(d)}}):document.querySelectorAll(".invisible").forEach(i=>i.remove())}openSupport(){this.$modal.open(ce,{size:"lg",backdrop:"static"})}ngOnDestroy(){this.$accessories.stop(),this.orderSubscription.unsubscribe(),this.dragulaService.destroy("rooms-bag"),this.dragulaService.destroy("services-bag")}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=M({type:t,selectors:[["app-accessories"]],decls:2,vars:1,consts:[[1,"row"],[1,"row","mb-3"],[1,"col-9","col-sm-6"],[1,"primary-text","m-0"],[1,"col-3","col-sm-6","text-end","d-inline-block","d-sm-none"],["type","button",1,"btn","btn-elegant","my-0","me-0",3,"click"],[1,"fa","fa-fw","fa-question-circle-o"],[1,"col-3","col-sm-6","text-end","d-none","d-sm-inline-block"],["type","button","container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","my-0","me-2",3,"click","hidden","ngbTooltip"],[1,"fas","fa-fw","fa-folder-plus"],[1,"fas","fa-fw",3,"ngClass"],["role","group",1,"btn-group","me-2"],["type","button","container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","my-0",3,"click","disabled","ngbTooltip"],[1,"fas","fa-fw","fa-unlock"],[1,"fas","fa-fw","fa-lock"],[3,"dragulaModelChange","dragula","dragulaModel"],[1,"row","mb-4"],[1,"col-md-12","d-flex","flex-wrap","noselect","services-bag",3,"ngClass","dragula","dragulaModel"],[1,"col-md-12","d-flex","flex-wrap","noselect",3,"dragula","dragulaModel"],[1,"col-md-12"],[1,"primary-text","drag-handle","room-title","m-0","mb-1","mb-sm-0",3,"ngClass"],[1,"col-md-12","d-flex","flex-wrap","noselect","services-bag",3,"dragulaModelChange","ngClass","dragula","dragulaModel"],[1,"accessory-box","invisible","py-0","my-0",2,"height","0"],[1,"accessory-item","accessory-tab"],[3,"service"],[1,"col-md-12","d-flex","flex-wrap","noselect",3,"dragulaModelChange","dragula","dragulaModel"],[1,"no-drag"],[1,"col-12"],[1,"primary-text","m-0","mb-3"],[1,"col-12","text-center"],["role","alert",1,"alert","alert-warning","p-4"],[1,"mb-3","mt-0"],[1,"mb-0",3,"innerHTML"],[1,"mt-3","mb-0"]],template:function(i,n){i&1&&w(0,Me,35,47)(1,we,13,13,"div",0),i&2&&S(n.enableAccessories?0:1)},dependencies:[ee,q,ne,ie,se,me,E],styles:[".room-title[_ngcontent-%COMP%]{margin-left:10px}@media (max-width: 575px){.room-title[_ngcontent-%COMP%]{margin-left:7px}}.services-bag[_ngcontent-%COMP%]{min-height:170px}@media (max-width: 575px){.services-bag[_ngcontent-%COMP%]{min-height:initial}}.cursor-move[_ngcontent-%COMP%]{cursor:move}.gu-transit[_ngcontent-%COMP%] .manage-accessory-button[_ngcontent-%COMP%]{display:none}a[_ngcontent-%COMP%]:hover{text-decoration:none!important}"]})}return t})();export{it as AccessoriesComponent};
@@ -1 +0,0 @@
1
- import{m as I}from"./chunk-PSSVCFFV.js";import{b as T}from"./chunk-ZG3HINDJ.js";import{$b as g,Ac as v,Hb as f,Hc as r,Ib as u,Ic as p,Jb as b,Sb as o,Tb as a,Ub as s,Xa as L,_b as y,ab as n,cc as m,dc as c,la as E,mb as M,pc as C,qc as d,ra as x,rc as k,sa as B,sc as _}from"./chunk-V7SOQAC5.js";function h(t,w){if(t&1&&s(0,"i",13),t&2){let i=c();C(v("fas fa-fw ",i.faIconClass," mb-3"))}}function z(t,w){if(t&1){let i=y();o(0,"button",14),m("click",function(){x(i);let e=c();return B(e.closeModal())}),d(1),a()}if(t&2){let i=c();C(v("btn ",i.confirmButtonClass||"btn-primary")),n(),_(" ",i.confirmButtonLabel," ")}}var A=(()=>{class t{$activeModal=E(I);title;message;confirmButtonLabel;confirmButtonClass;faIconClass;cancelButtonLabel;dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close()}static \u0275fac=function(l){return new(l||t)};static \u0275cmp=M({type:t,selectors:[["ng-component"]],inputs:{title:"title",message:"message",confirmButtonLabel:"confirmButtonLabel",confirmButtonClass:"confirmButtonClass",faIconClass:"faIconClass",cancelButtonLabel:"cancelButtonLabel"},decls:18,vars:13,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body","text-center"],[2,"font-size","75px",3,"class"],[1,"mb-0","text-center",3,"innerHTML"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",3,"class"],[2,"font-size","75px"],["type","button","data-bs-dismiss","modal",3,"click"]],template:function(l,e){l&1&&(o(0,"div",0)(1,"div",1)(2,"h5",2),d(3),a(),o(4,"button",3),r(5,"translate"),m("click",function(){return e.dismissModal()}),a()(),o(6,"div",4),u(7,h,1,3,"i",5),s(8,"p",6),a(),o(9,"div",7)(10,"div",8)(11,"button",9),r(12,"translate"),m("click",function(){return e.dismissModal()}),d(13),r(14,"translate"),a()(),s(15,"div",10),o(16,"div",11),u(17,z,2,4,"button",12),a()()()),l&2&&(n(3),k(e.title),n(),f("aria-label",p(5,7,"form.button_close")),n(3),b(e.faIconClass?7:-1),n(),g("innerHTML",e.message,L),n(3),f("aria-label",e.cancelButtonLabel||p(12,9,"form.button_cancel")),n(2),_(" ",e.cancelButtonLabel||p(14,11,"form.button_cancel")," "),n(4),b(e.confirmButtonLabel?17:-1))},dependencies:[T],encapsulation:2})}return t})();export{A as a};
@@ -1 +0,0 @@
1
- import{a as l}from"./chunk-P7J6OX3V.js";import{a as m}from"./chunk-K46AA6SH.js";import{n as i}from"./chunk-PSSVCFFV.js";import{b as o}from"./chunk-FAELDM7K.js";import{a as s}from"./chunk-ZG3HINDJ.js";import{ga as r,la as e}from"./chunk-V7SOQAC5.js";var I=(()=>{class n{$terminal=e(l);$settings=e(o);$modal=e(i);$translate=e(s);handleBeforeUnload(t){if(!this.$settings.terminalPersistence&&this.$settings.terminalShowWarning&&this.$terminal.hasActiveSession()&&this.$terminal.hasUserTypedInSession()){let a=this.$translate.instant("platform.terminal.beforeunload_message");return t.preventDefault(),t.returnValue=a,a}}canDeactivate(){if(this.$settings.terminalPersistence||!this.$settings.terminalShowWarning||!this.$terminal.hasActiveSession()||!this.$terminal.hasUserTypedInSession())return!0;let t=this.$modal.open(m,{size:"lg",backdrop:"static"});return t.componentInstance.title=this.$translate.instant("platform.terminal.confirm_navigation_title"),t.componentInstance.message=this.$translate.instant("platform.terminal.confirm_navigation_message"),t.componentInstance.confirmButtonLabel=this.$translate.instant("platform.terminal.confirm_navigation_button"),t.componentInstance.cancelButtonLabel=this.$translate.instant("form.button_cancel"),t.componentInstance.confirmButtonClass="btn-warning",t.componentInstance.faIconClass="fas fa-exclamation-triangle text-warning",t.result.then(()=>!0).catch(()=>!1)}static \u0275fac=function(a){return new(a||n)};static \u0275prov=r({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();export{I as a};
@@ -1,20 +0,0 @@
1
- import{a as ne}from"./chunk-WAEIH452.js";import{a as oe,b as le}from"./chunk-PJDX7TKL.js";import{a as X,b as Z}from"./chunk-ZT56WXIZ.js";import{a as ie}from"./chunk-P3TP4J62.js";import{m as Y,n as G,t as Q}from"./chunk-PSSVCFFV.js";import{c as J,e as K,l as U,z as W}from"./chunk-K2NEWUWG.js";import{b as ee}from"./chunk-QRQBCPWO.js";import{b as te}from"./chunk-FAELDM7K.js";import{k as D,n as I}from"./chunk-4ZYGJMXW.js";import{a as S,b as A}from"./chunk-ZG3HINDJ.js";import"./chunk-K7QEGT3E.js";import{Hb as b,Hc as r,Ib as d,Ic as s,Jb as c,Jc as q,Lb as P,Mb as B,Nb as L,Ob as v,Pb as y,Qb as w,Rb as x,Sb as m,Tb as u,Ub as V,_b as _,ab as n,bc as E,cc as k,dc as a,fb as R,g as se,h as j,la as h,mb as M,pd as z,qc as C,ra as f,rc as $,sa as g,sc as T,w as H,xc as O,yc as N,zc as F}from"./chunk-V7SOQAC5.js";var ae=se(le(),1);function ce(o,p){o&1&&(m(0,"div",5),V(1,"i",12),u())}function me(o,p){if(o&1){let e=_();m(0,"li",17),C(1),r(2,"date"),m(3,"button",18),r(4,"translate"),k("click",function(){let t=f(e).$implicit,l=a(3);return g(l.restore(t.id))}),V(5,"i",19),u()()}if(o&2){let e=p.$implicit;n(),T(" ",q(2,2,e.timestamp,"medium")," "),n(2),b("aria-label",s(4,5,"config.restore.copy_to_editor"))}}function pe(o,p){if(o&1&&(m(0,"ul",15),B(1,me,6,7,"li",17,P),u()),o&2){let e=a(2);n(),L(e.backupList)}}function fe(o,p){o&1&&(m(0,"p",16),C(1),r(2,"translate"),u()),o&2&&(n(),$(s(2,1,"config.restore.no_backups")))}function ge(o,p){if(o&1&&(m(0,"div",13),V(1,"i",14),u(),m(2,"p",13),C(3),r(4,"translate"),u(),d(5,pe,3,0,"ul",15),d(6,fe,3,3,"p",16)),o&2){let e=a();n(3),$(s(4,3,"config.restore.title_restore_homebridge_backup")),n(2),c(e.backupList&&e.backupList.length?5:-1),n(),c(!e.backupList||!e.backupList.length?6:-1)}}function ue(o,p){if(o&1){let e=_();m(0,"button",20),r(1,"translate"),k("click",function(){f(e);let t=a();return g(t.dismissModal())}),C(2),r(3,"translate"),u()}o&2&&(b("aria-label",s(1,2,"form.button_close")),n(2),T(" ",s(3,4,"form.button_close")," "))}function he(o,p){if(o&1){let e=_();m(0,"button",20),r(1,"translate"),k("click",function(){f(e);let t=a();return g(t.dismissModal())}),C(2),r(3,"translate"),u()}o&2&&(b("aria-label",s(1,2,"form.button_close")),n(2),T(" ",s(3,4,"form.button_close")," "))}function _e(o,p){if(o&1){let e=_();m(0,"button",21),r(1,"translate"),k("click",function(){f(e);let t=a();return g(t.deleteAllBackups())}),C(2),r(3,"translate"),u()}o&2&&(b("aria-label",s(1,2,"form.button_remove")),n(2),T(" ",s(3,4,"form.button_remove")," "))}var re=(()=>{class o{$activeModal=h(Y);$api=h(I);$toastr=h(D);$translate=h(S);loading=!0;backupList=[];ngOnInit(){this.$api.get("/config-editor/backups").subscribe({next:e=>{this.loading=!1,this.backupList=e},error:e=>{this.loading=!1,console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error"))}})}restore(e){return this.$activeModal.close(e)}deleteAllBackups(){return this.$api.delete("/config-editor/backups").subscribe({next:()=>{this.$activeModal.dismiss(),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success"))},error:e=>{console.error(e),this.$toastr.error(e.error.message||e.message,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=M({type:o,selectors:[["ng-component"]],decls:17,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button",1,"btn","btn-danger","me-auto"],[1,"fa","fa-fw","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"fas","fa-fw","fa-history","primary-text",2,"font-size","75px"],[1,"list-group","list-group-box"],[1,"text-center","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"btn","btn-primary","m-0","ms-3",3,"click"],[1,"fas","fa-fw","fa-arrow-right"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-danger","me-auto",3,"click"]],template:function(i,t){i&1&&(m(0,"div",0)(1,"div",1)(2,"h5",2),C(3),r(4,"translate"),u(),m(5,"button",3),r(6,"translate"),k("click",function(){return t.dismissModal()}),u()(),m(7,"div",4),d(8,ce,2,0,"div",5),d(9,ge,7,5),u(),m(10,"div",6)(11,"div",7),d(12,ue,4,6,"button",8),u(),m(13,"div",9),d(14,he,4,6,"button",8),u(),m(15,"div",10),d(16,_e,4,6,"button",11),u()()()),i&2&&(n(3),$(s(4,7,"form.button_restore")),n(2),b("aria-label",s(6,9,"form.button_close")),n(3),c(t.loading?8:-1),n(),c(t.loading?-1:9),n(3),c(!t.loading&&t.backupList.length?12:-1),n(2),c(t.loading||!t.loading&&!t.backupList.length?14:-1),n(2),c(!t.loading&&t.backupList.length?16:-1))},dependencies:[z,A],encapsulation:2})}return o})();function be(o,p){if(o&1){let e=_();y(0,"button",13),r(1,"translate"),r(2,"translate"),E("click",function(){f(e);let t=a();return g(t.onExportConfig())}),x(3,"i",14),w()}o&2&&(v("ngbTooltip",s(1,2,"form.button_download")),b("aria-label",s(2,4,"form.button_download")))}function Ce(o,p){if(o&1){let e=_();y(0,"button",15),r(1,"translate"),r(2,"translate"),E("click",function(){f(e);let t=a();return g(t.onCancelRestore())}),x(3,"i",16),w()}if(o&2){let e=a();v("disabled",e.saveInProgress)("ngbTooltip",s(1,3,"form.button_cancel")),b("aria-label",s(2,5,"form.button_cancel"))}}function ye(o,p){if(o&1){let e=_();y(0,"button",13),r(1,"translate"),r(2,"translate"),E("click",function(){f(e);let t=a();return g(t.onRestore())}),x(3,"i",17),w()}o&2&&(v("ngbTooltip",s(1,2,"form.button_restore")),b("aria-label",s(2,4,"form.button_restore")))}function we(o,p){o&1&&x(0,"i",8)}function ve(o,p){o&1&&x(0,"i",9)}function Ee(o,p){if(o&1){let e=_();y(0,"ngx-monaco-editor",18),E("onInit",function(t){f(e);let l=a();return g(l.onEditorInit(t))})("keydown.control.s",function(t){f(e);let l=a();return t.preventDefault(),g(l.onSave())})("keydown.meta.s",function(t){f(e);let l=a();return t.preventDefault(),g(l.onSave())}),w()}if(o&2){let e=a();v("options",e.editorOptions)("model",e.monacoEditorModel)}}function xe(o,p){if(o&1){let e=_();y(0,"ngx-monaco-diff-editor",19),E("onInit",function(t){f(e);let l=a();return g(l.onInitDiffEditor(t))})("keydown.control.s",function(t){f(e);let l=a();return t.preventDefault(),g(l.onSave())})("keydown.meta.s",function(t){f(e);let l=a();return t.preventDefault(),g(l.onSave())}),w()}if(o&2){let e=a();v("options",e.editorOptions)("originalModel",e.monacoEditorModel)("modifiedModel",e.monacoEditorModel)}}function ke(o,p){if(o&1){let e=_();y(0,"textarea",20),F("ngModelChange",function(t){f(e);let l=a();return N(l.homebridgeConfig,t)||(l.homebridgeConfig=t),g(t)}),C(1," "),w()}if(o&2){let e=a();O("ngModel",e.homebridgeConfig)}}var Ge=(()=>{class o{$api=h(I);$md=h(ie);$modal=h(G);$monacoEditor=h(ne);$route=h(ee);$renderer=h(R);$settings=h(te);$toastr=h(D);$translate=h(S);editorDecorations=[];lastHeight;visualViewPortEventCallback;homebridgeConfig;originalConfig;saveInProgress;isMobile=!1;monacoEditor;editorOptions;monacoEditorModel;constructor(){this.isMobile=this.$md.detect.mobile()}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",automaticLayout:!0};let e=document.querySelector(".content");this.$renderer.setStyle(e,"height","100%"),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.visualViewPortEventCallback=()=>this.visualViewPortChanged(),this.lastHeight=window.innerHeight,window.visualViewport&&!this.isMobile&&(window.visualViewport.addEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.disableTouchMove()),this.$route.data.subscribe(i=>{this.homebridgeConfig=i.config}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},window.monaco?this.setMonacoEditorModel():this.$monacoEditor.readyEvent.subscribe({next:()=>{this.setMonacoEditorModel()}})}onEditorInit(e){window.editor=e,this.monacoEditor=e,this.monacoEditor.getModel().setValue(this.homebridgeConfig)}onInitDiffEditor(e){this.monacoEditor=e.modifiedEditor,e.getModel().original.setValue(this.originalConfig),e.getModel().modified.setValue(this.homebridgeConfig),window.editor=e}onSave(){return j(this,null,function*(){if(!this.saveInProgress){this.monacoEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[])),this.saveInProgress=!0;try{if(!this.isMobile){yield this.monacoEditor.getAction("editor.action.formatDocument").run();let i=window.monaco.editor.getModelMarkers({owner:"json"});for(let t of i)if(t.message==="Duplicate object key"){this.saveInProgress=!1,this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"));return}this.homebridgeConfig=this.monacoEditor.getModel().getValue()}let e=this.parseConfigFromEditor();this.homebridgeConfig=JSON.stringify(e,null,4),typeof e.bridge!="object"?this.$toastr.error(this.$translate.instant("config.config_bridge_missing"),this.$translate.instant("toast.title_error")):/^(?:[0-9A-F]{2}:){5}[0-9A-F]{2}$/i.test(e.bridge.username)?e.accessories&&!Array.isArray(e.accessories)?this.$toastr.error(this.$translate.instant("config.config_accessory_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&!Array.isArray(e.platforms)?this.$toastr.error(this.$translate.instant("config.config_platform_must_be_array"),this.$translate.instant("toast.title_error")):e.platforms&&Array.isArray(e.platforms)&&!this.validateSection(e.platforms,"platform")||e.accessories&&Array.isArray(e.accessories)&&!this.validateSection(e.accessories,"accessory")||e.plugins&&Array.isArray(e.plugins)&&!this.validatePlugins(e.plugins,"plugins")||e.disabledPlugins&&Array.isArray(e.disabledPlugins)&&!this.validatePlugins(e.disabledPlugins,"disabledPlugins")||(yield this.saveConfig(e),this.originalConfig=""):this.$toastr.error(this.$translate.instant("config.config_username_error"),this.$translate.instant("toast.title_error"))}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"))}this.saveInProgress=!1}})}onRestore(){this.$modal.open(re,{size:"lg",backdrop:"static"}).result.then(e=>{this.originalConfig||(this.originalConfig=this.homebridgeConfig),this.$api.get(`/config-editor/backups/${e}`).subscribe({next:i=>{this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig=JSON.stringify(i,null,4),this.monacoEditor&&window.editor.modifiedEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[]),this.monacoEditor.executeEdits("beautifier",[{identifier:"delete",range:new monaco.Range(1,1,this.monacoEditor.getModel().getLineCount()+10,1),text:"",forceMoveMarkers:!0}]),this.monacoEditor.executeEdits("beautifier",[{identifier:"insert",range:new monaco.Range(1,1,1,1),text:this.homebridgeConfig,forceMoveMarkers:!0}]))},error:i=>{console.error(i),this.$toastr.error(i.error.message||this.$translate.instant("backup.load_error"),this.$translate.instant("toast.title_error"))}})}).catch(()=>{})}onExportConfig(){let e=`data:text/json;charset=utf-8,${encodeURIComponent(this.homebridgeConfig)}`,i=document.createElement("a");i.setAttribute("href",e),i.setAttribute("download","config.json"),document.body.appendChild(i),i.click(),i.remove()}onCancelRestore(){this.homebridgeConfig=this.originalConfig,this.originalConfig=""}ngOnDestroy(){let e=document.querySelector(".content");this.$renderer.removeStyle(e,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove()),this.monacoEditor&&this.monacoEditor.dispose()}validateSection(e,i){for(let t of e){if(typeof t!="object"||Array.isArray(t))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:i}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(t),!1;if(!t[i])return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:i}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(t),!1;if(typeof t[i]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:i}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(t),!1}return!0}validatePlugins(e,i){for(let t of e)if(typeof t!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:i}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(e){this.monacoEditor&&(e=JSON.stringify(e,null,4).split(`
2
- `).map(i=>` ${i}`).join(`
3
- `),setTimeout(()=>{let i=this.monacoEditor.getModel().findMatches(e);if(i.length){let t=i[0].range,l=new monaco.Range(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn);this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[{range:l,options:{isWholeLine:!0,linesDecorationsClassName:"hb-monaco-editor-line-error"}}])}},200))}setMonacoEditorModel(){if(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.some(i=>i.uri==="http://homebridge/config.json"))return;let e=monaco.Uri.parse("a://homebridge/config.json");window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({allowComments:!1,validate:!0,schemas:[{uri:"http://homebridge/config.json",fileMatch:[e.toString()],schema:{type:"object",required:["bridge"],properties:{bridge:{type:"object",required:["name","username","port","pin"],properties:{name:{type:"string",description:`The Homebridge instance name.
4
- This should be unique if you are running multiple instances of Homebridge.`,default:"Homebridge"},username:{type:"string",description:`Homebridge username must be 6 pairs of colon-separated hexadecimal characters (A-F 0-9).
5
- You should change this pin if you need to re-pair your instance with HomeKit.
6
- Example: 0E:89:49:64:91:86`,default:"0E:89:49:64:91:86",pattern:"^([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}$"},port:{type:"number",description:`The port Homebridge listens on.
7
- If running more than one instance of Homebridge on the same server make sure each instance is given a unique port.`,default:51173,minimum:1025,maximum:65534},pin:{type:"string",description:`The Homebridge instance pin.
8
- This is used when pairing Homebridge to HomeKit.
9
- Example: 630-27-655`,default:"630-27-655",pattern:"^([0-9]{3}-[0-9]{2}-[0-9]{3})$"},manufacturer:{type:"string",description:"The bridge manufacturer to be displayed in HomeKit"},firmwareRevision:{type:"string",description:"The bridge firmware version to be displayed in HomeKit"},model:{type:"string",description:"The bridge model to be displayed in HomeKit"},bind:{description:`A string or an array of strings with the name(s) of the network interface(s) Homebridge should bind to.
10
-
11
- Requires Homebridge v1.3 or later.`,type:["string","array"],items:{type:"string",description:"Network Interface name that Homebridge should bind to."}}},default:{name:"Homebridge",username:"0E:89:49:64:91:86",port:51173,pin:"6302-7655"}},mdns:{type:"object",properties:{interface:{type:"string",description:`The interface or IP address of the interface you want Homebridge to listen on. This is useful if your server has multiple interfaces.
12
-
13
- Deprecated as of Homebridge v1.3.0 - use bridge.bind instead.`},legacyAdvertiser:{type:"boolean",description:"Set to `false` to use the new mdns library, ciao."}},default:{legacyAdvertiser:!1}},plugins:{type:"array",description:"An array of plugins that should be selectively enabled. Remove this array to enable all plugins.",items:{type:"string",description:`The full plugin npm package name.
14
- Example: homebridge-dummy`},default:["homebridge-config-ui-x"]},disabledPlugins:{type:"array",description:`An array of plugins that should be disabled.
15
-
16
- Requires Homebridge v1.3 or later.`,items:{type:"string",description:`The full plugin npm package name.
17
- Example: homebridge-dummy`},default:[]},ports:{type:"object",description:"The range of ports that should be used for certain accessories like cameras and TVs",required:["start","end"],properties:{start:{type:"number",default:52100,minimum:1025,maximum:65534},end:{type:"number",default:52150,minimum:1025,maximum:65534}},default:{start:52100,end:52150}},platforms:{type:"array",description:`Any plugin that exposes a platform should have its config entered in this array.
18
- Separate each plugin config block using a comma.`,items:{type:"object",required:["platform"],anyOf:[{type:"object",required:["platform"],properties:{platform:{type:"string",description:"This is used by Homebridge to identify which plugin this platform belongs to.",not:{enum:["config"]}},name:{type:"string",description:"The name of the platform."}}},{type:"object",properties:{platform:{type:"string",description:`Homebridge UI platform name must be set to "config".
19
- Do Not Change!`,oneOf:[{enum:"config"}]},name:{type:"string",description:"The name used in the Homebridge log."}}}]}},accessories:{type:"array",description:`Any plugin that exposes an accessory should have its config entered in this array.
20
- Separate each plugin config block using a comma.`,items:{type:"object",required:["accessory","name"],properties:{accessory:{type:"string",description:"This is used by Homebridge to identify which plugin this accessory belongs to."},name:{type:"string",description:"The name of the accessory."}}}}}}}]}),this.monacoEditorModel.uri=monaco.Uri.parse("a://homebridge/config.json")}visualViewPortChanged(){this.lastHeight<window.visualViewport.height&&document.activeElement.blur(),window.visualViewport.height<window.innerHeight?(this.$md.enableTouchMove(),this.lastHeight=window.visualViewport.height):window.visualViewport.height===window.innerHeight&&(this.$md.disableTouchMove(),this.lastHeight=window.visualViewport.height)}saveConfig(e){return j(this,null,function*(){try{let i=yield H(this.$api.post("/config-editor",e));this.homebridgeConfig=JSON.stringify(i,null,4),this.$modal.open(oe,{size:"lg",backdrop:"static"})}catch(i){console.error(i),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}parseConfigFromEditor(){try{return JSON.parse(this.homebridgeConfig)}catch{let i=ae.default.parse(this.homebridgeConfig);return this.homebridgeConfig=JSON.stringify(i,null,4),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig),i}}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=M({type:o,selectors:[["ng-component"]],decls:18,vars:18,consts:[[1,"flex-column","d-flex","align-items-stretch","h-100"],[1,"row"],[1,"col-6"],[1,"primary-text","m-0"],[1,"col-6","text-end"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"ngbTooltip"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"disabled","ngbTooltip"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-0",3,"click","disabled","ngbTooltip"],[1,"fas","fa-fw","fa-floppy-disk"],[1,"fas","fa-fw","fa-spinner","fa-pulse"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"options","model"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"options","originalModel","modifiedModel"],["wrap","off","autocomplete","off","autocorrect","off","autocapitalize","off","spellcheck","false",1,"hb-plain-text-editor","align-self-end","h-100","w-100","my-3",3,"ngModel"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"click","ngbTooltip"],[1,"fas","fa-fw","fa-download"],["container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"click","disabled","ngbTooltip"],[1,"fas","fa-fw","fa-times"],[1,"fas","fa-fw","fa-history"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"onInit","keydown.control.s","keydown.meta.s","options","model"],[1,"flex-grow-1","h-100","w-100","mt-3","mb-0",3,"onInit","keydown.control.s","keydown.meta.s","options","originalModel","modifiedModel"],["wrap","off","autocomplete","off","autocorrect","off","autocapitalize","off","spellcheck","false",1,"hb-plain-text-editor","align-self-end","h-100","w-100","my-3",3,"ngModelChange","ngModel"]],template:function(i,t){i&1&&(y(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3",3),C(4),r(5,"translate"),w()(),y(6,"div",4),d(7,be,4,6,"button",5),d(8,Ce,4,7,"button",6),d(9,ye,4,6,"button",5),y(10,"button",7),r(11,"translate"),r(12,"translate"),E("click",function(){return t.onSave()}),d(13,we,1,0,"i",8),d(14,ve,1,0,"i",9),w()()(),d(15,Ee,1,2,"ngx-monaco-editor",10),d(16,xe,1,3,"ngx-monaco-diff-editor",11),d(17,ke,2,1,"textarea",12),w()),i&2&&(n(4),$(s(5,12,"menu.config_json_editor")),n(3),c(t.originalConfig?-1:7),n(),c(t.originalConfig?8:-1),n(),c(t.originalConfig?-1:9),n(),v("disabled",t.saveInProgress)("ngbTooltip",s(11,14,"form.button_save")),b("aria-label",s(12,16,"form.button_save")),n(3),c(t.saveInProgress?-1:13),n(),c(t.saveInProgress?14:-1),n(),c(!t.isMobile&&!t.originalConfig?15:-1),n(),c(!t.isMobile&&t.originalConfig?16:-1),n(),c(t.isMobile?17:-1))},dependencies:[Q,X,Z,W,J,K,U,A],encapsulation:2})}return o})();export{Ge as ConfigEditorComponent};
@@ -1,5 +0,0 @@
1
- import{a as p,b as z,c as b}from"./chunk-BSZ6MHFZ.js";import{a as f}from"./chunk-53FPP2IJ.js";import{M as o,g as h,ga as l,la as c,n as r}from"./chunk-V7SOQAC5.js";var a=h(p(),1),d=h(z(),1),m=h(b(),1);var R=(()=>{class n{$ws=c(f);io;fitAddon;webLinksAddon;resize;elementResize;dataDisposable=null;isInitializing=!1;hasUserTyped=!1;term;destroyTerminal(){this.dataDisposable&&(this.dataDisposable.dispose(),this.dataDisposable=null),this.io.end(),this.term.dispose(),this.resize.complete(),this.elementResize&&this.elementResize.complete(),this.isInitializing=!1,this.hasUserTyped=!1}destroyPersistentSession(){this.destroyTerminal(),this.io&&this.io.socket&&this.io.socket.connected&&this.io.socket.emit("destroy-persistent-session")}detachTerminal(){this.dataDisposable&&(this.dataDisposable.dispose(),this.dataDisposable=null),this.term&&this.term.dispose(),this.resize&&this.resize.complete(),this.elementResize&&this.elementResize.complete(),this.isInitializing=!1}hasActiveSession(){return!!(this.io&&this.io.socket&&this.io.socket.connected)}hasUserTypedInSession(){return this.hasUserTyped}isTerminalReady(){return!!this.term&&!this.isInitializing}reattachToElement(t,s){!this.term||!this.io?.socket?.connected||(this.elementResize=s,this.dataDisposable&&this.dataDisposable.dispose(),this.term.open(t.nativeElement),this.dataDisposable=this.term.onData(e=>{this.io.socket.connected&&(this.hasUserTyped=!0,this.io.socket.emit("stdin",e))}),this.resize&&this.resize.complete(),this.resize=new r,this.term.onResize(e=>{this.resize.next(e)}),this.resize.pipe(o(500)).subscribe(e=>{this.io.socket.connected&&this.io.socket.emit("resize",e)}),this.elementResize&&this.elementResize.pipe(o(100)).subscribe({next:()=>{this.fitAddon&&this.fitAddon.fit()}}),setTimeout(()=>{this.fitAddon&&this.fitAddon.fit()},100),this.io.socket.emit("start-session",{cols:this.term.cols,rows:this.term.rows}))}reconnectTerminal(t,s={},e){if(this.isInitializing)return!1;this.isInitializing=!0,this.elementResize=e,this.io&&this.io.socket&&this.io.socket.connected?(this.term=new m.Terminal(s),this.fitAddon=new a.FitAddon,this.webLinksAddon=new d.WebLinksAddon,setTimeout(()=>{this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon)}),this.resize=new r,this.term.open(t.nativeElement),setTimeout(()=>{this.fitAddon.activate(this.term),this.fitAddon.fit()}),this.io.socket.removeAllListeners("stdout"),this.io.socket.removeAllListeners("process-exit"),this.io.socket.on("stdout",i=>{this.term.write(i)}),this.io.socket.on("process-exit",()=>{this.startSession()}),this.dataDisposable&&this.dataDisposable.dispose(),this.dataDisposable=this.term.onData(i=>{this.hasUserTyped=!0,this.io.socket.emit("stdin",i)}),this.term.onResize(i=>{this.resize.next(i)}),this.resize.pipe(o(500)).subscribe(i=>{this.io.socket.emit("resize",i)}),this.elementResize&&this.elementResize.pipe(o(100)).subscribe({next:()=>{this.fitAddon.fit()}}),this.io.socket.emit("start-session",{cols:this.term.cols,rows:this.term.rows}),this.isInitializing=!1):this.startTerminal(t,s,e)}startTerminal(t,s={},e){return this.isInitializing?!1:(this.isInitializing=!0,this.elementResize=e,this.io=this.$ws.connectToNamespace("platform-tools/terminal"),this.term=new m.Terminal(s),setTimeout(()=>{this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon)}),this.fitAddon=new a.FitAddon,this.webLinksAddon=new d.WebLinksAddon,this.resize=new r,this.term.open(t.nativeElement),setTimeout(()=>{this.fitAddon.activate(this.term),this.fitAddon.fit()}),this.io.connected.pipe(o(200)).subscribe(()=>{this.startSession()}),this.io.socket.on("disconnect",()=>{this.term.write(`
2
- \r
3
- \rTerminal disconnected. Is the server running?
4
- \r
5
- \r`)}),this.io.socket.on("process-exit",()=>{this.startSession()}),this.resize.pipe(o(500)).subscribe(i=>{this.io.socket.emit("resize",i)}),this.io.socket.on("stdout",i=>{this.term.write(i)}),this.dataDisposable=this.term.onData(i=>{this.hasUserTyped=!0,this.io.socket.emit("stdin",i)}),this.term.onResize(i=>{this.resize.next(i)}),this.elementResize&&this.elementResize.pipe(o(100)).subscribe({next:()=>{this.fitAddon.fit()}}),!0)}startSession(){this.term.reset(),this.hasUserTyped=!1,this.io.socket.emit("start-session",{cols:this.term.cols,rows:this.term.rows}),this.resize.next({cols:this.term.cols,rows:this.term.rows}),this.isInitializing=!1}static \u0275fac=function(s){return new(s||n)};static \u0275prov=l({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();export{R as a};
@@ -1 +0,0 @@
1
- import{a as Vi}from"./chunk-4ELFIE24.js";import{l as $i,n as Z}from"./chunk-LWX72DT2.js";import"./chunk-L2KN725U.js";import{a as z}from"./chunk-PJDX7TKL.js";import"./chunk-ZT56WXIZ.js";import{a as Mi}from"./chunk-P3TP4J62.js";import"./chunk-E74SDSOB.js";import"./chunk-YFQVSUDS.js";import"./chunk-BSZ6MHFZ.js";import"./chunk-ADNBR4EK.js";import"./chunk-7FO4RGTF.js";import"./chunk-2KOR6LRK.js";import{a as Ei}from"./chunk-K46AA6SH.js";import{g as wi,h as Pi,i as yi,j as Si,k as Bi,l as ki,m as D,n as R,t as G}from"./chunk-PSSVCFFV.js";import{A as vi,c as ui,e as mi,f as gi,g as _i,j as fi,m as Ci,p as hi,q as bi,z as xi}from"./chunk-K2NEWUWG.js";import{a as Y}from"./chunk-53FPP2IJ.js";import{b as X}from"./chunk-7HCGM76M.js";import{a as Ti,d as Ii}from"./chunk-QRQBCPWO.js";import{b as K}from"./chunk-FAELDM7K.js";import{k as Q,n as J}from"./chunk-4ZYGJMXW.js";import{a as W,b as B}from"./chunk-ZG3HINDJ.js";import"./chunk-K7QEGT3E.js";import{$b as F,Ac as ti,Dc as V,Ec as T,Fc as di,Hb as y,Hc as r,Ib as m,Ic as s,Jb as g,Jc as M,Lb as U,Mb as q,Nb as L,Ob as v,Pb as a,Qb as l,Rb as c,Sb as H,Tb as j,Ub as E,Xa as N,Ya as I,Za as ai,_b as w,ab as n,bc as f,cc as ii,dc as u,h as k,hc as li,ic as ri,id as $,jc as si,la as P,ld as pi,mb as S,pc as ei,pd as ci,qc as p,ra as b,rc as C,sa as x,sc as h,w as A}from"./chunk-V7SOQAC5.js";var Oi=e=>({pluginName:e});function Ui(e,d){e&1&&(a(0,"ul",7)(1,"li"),p(2),r(3,"translate"),l(),a(4,"li"),p(5),r(6,"translate"),l()()),e&2&&(n(2),C(s(3,2,"plugins.manage.confirm_disable_accessory_1")),n(3),C(s(6,4,"plugins.manage.confirm_disable_accessory_2")))}function qi(e,d){e&1&&(a(0,"ul",7)(1,"li"),p(2),r(3,"translate"),l(),a(4,"li"),p(5),r(6,"translate"),l()()),e&2&&(n(2),C(s(3,2,"plugins.manage.confirm_disable_platform_1")),n(3),C(s(6,4,"plugins.manage.confirm_disable_platform_2")))}var Di=(()=>{class e{$activeModal=P(D);pluginName;isConfigured=!1;isConfiguredDynamicPlatform=!1;dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close()}static \u0275fac=function(o){return new(o||e)};static \u0275cmp=S({type:e,selectors:[["ng-component"]],inputs:{pluginName:"pluginName",isConfigured:"isConfigured",isConfiguredDynamicPlatform:"isConfiguredDynamicPlatform"},decls:26,vars:22,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"mb-3","text-center"],[1,"fas","fa-fw","fa-circle-pause","primary-text",2,"font-size","75px"],[1,"mb-3"],["type","warning",1,"mb-0",3,"dismissible"],[1,"w-100","text-center","mb-0"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click"]],template:function(o,t){o&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),p(3),l(),a(4,"button",3),r(5,"translate"),f("click",function(){return t.dismissModal()}),l()(),a(6,"div",4)(7,"div",5),c(8,"i",6),l(),m(9,Ui,7,6,"ul",7),m(10,qi,7,6,"ul",7),a(11,"ngb-alert",8)(12,"p",9),p(13),r(14,"translate"),l()()(),a(15,"div",10)(16,"div",11)(17,"button",12),r(18,"translate"),f("click",function(){return t.dismissModal()}),p(19),r(20,"translate"),l()(),c(21,"div",13),a(22,"div",14)(23,"button",15),f("click",function(){return t.closeModal()}),p(24),r(25,"translate"),l()()()()),o&2&&(n(3),C(t.pluginName),n(),y("aria-label",s(5,9,"form.button_close")),n(5),g(t.isConfigured&&!t.isConfiguredDynamicPlatform?9:-1),n(),g(t.isConfigured&&t.isConfiguredDynamicPlatform?10:-1),n(),v("dismissible",!1),n(2),C(M(14,11,"plugins.manage.confirm_disable",V(20,Oi,t.pluginName))),n(4),y("aria-label",s(18,14,"form.button_close")),n(2),h(" ",s(20,16,"form.button_close")," "),n(5),h(" ",s(25,18,"plugins.manage.disable")," "))},dependencies:[wi,B],encapsulation:2})}return e})();var Li=e=>({author:e});function Ri(e,d){if(e&1&&(a(0,"li",9),c(1,"i",15),a(2,"a",16),p(3),l()()),e&2){let i=d.$implicit,o=u();n(),v("ngClass",o.getIconClass(i.type)),n(),v("href",i.url,I),n(),C(i.url)}}var Ai=(()=>{class e{$activeModal=P(D);plugin;fundingOptions;ngOnInit(){this.plugin.funding||this.$activeModal.close(),this.plugin.name==="homebridge-config-ui-x"&&(this.plugin.author="oznu"),Array.isArray(this.plugin.funding)?this.fundingOptions=this.plugin.funding.map(i=>{if(typeof i=="string")return{type:"other",url:i};if(typeof i=="object")return{type:i.type||"other",url:i.url}}):typeof this.plugin.funding=="string"?this.fundingOptions=[{type:"other",url:this.plugin.funding}]:typeof this.plugin.funding=="object"&&(this.fundingOptions=[{type:this.plugin.funding.type||"other",url:this.plugin.funding.url}])}getIconClass(i){switch(i.toLowerCase()){case"paypal":return"fab fa-fw fa-paypal";case"github":return"fab fa-fw fa-github";case"patreon":return"fab fa-fw fa-patreon";case"kofi":case"ko-fi":return"fas fa-fw fa-coffee";default:return"fas fa-fw fa-link"}}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(o){return new(o||e)};static \u0275cmp=S({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:28,vars:21,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","pink-text","mb-3"],[1,"fas","fa-fw","fa-heart",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box"],[1,"list-group-item"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-end"],[1,"me-2","primary-text","fa-fw","fa-xl",3,"ngClass"],["target","_blank","rel","noopener noreferrer",1,"text-break-all",3,"href"]],template:function(o,t){o&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),p(3),r(4,"translate"),l(),a(5,"button",3),r(6,"translate"),f("click",function(){return t.dismissModal()}),l()(),a(7,"div",4)(8,"div",5),c(9,"i",6),l(),a(10,"ul",7)(11,"li"),p(12),r(13,"translate"),l(),a(14,"li"),p(15),r(16,"translate"),l()(),a(17,"ul",8),q(18,Ri,4,3,"li",9,U),l()(),a(20,"div",10),c(21,"div",11),a(22,"div",12)(23,"button",13),r(24,"translate"),f("click",function(){return t.dismissModal()}),p(25),r(26,"translate"),l()(),c(27,"div",14),l()()),o&2&&(n(3),C(M(4,6,"plugins.donate.tile_donate_to",V(19,Li,"@"+t.plugin.author))),n(2),y("aria-label",s(6,9,"form.button_close")),n(7),C(s(13,11,"plugins.donate.message_1")),n(3),C(s(16,13,"plugins.donate.message_2")),n(3),L(t.fundingOptions),n(5),y("aria-label",s(24,15,"form.button_close")),n(2),h(" ",s(26,17,"form.button_close")," "))},dependencies:[$,B],styles:[".text-break-all[_ngcontent-%COMP%]{word-break:break-all}"]})}return e})();var Gi=(e,d)=>({"orange-text":e,"grey-text":d}),ni=e=>({opacity:e}),Wi=(e,d)=>({"green-text":e,"grey-text":d}),Qi=(e,d)=>({"purple-text":e,"grey-text":d}),Ji=(e,d)=>({scopedLink:e,verifiedLink:d});function Ki(e,d){e&1&&(a(0,"h6",18),p(1),r(2,"translate"),l(),a(3,"p",19),p(4),r(5,"translate"),l(),a(6,"p",19),p(7),r(8,"translate"),l()),e&2&&(n(),C(s(2,3,"plugins.manage.scoped_subtitle")),n(3),C(s(5,5,"plugins.manage.scoped_message")),n(3),C(s(8,7,"plugins.manage.verified_message")))}function Xi(e,d){e&1&&(a(0,"h6",18),p(1),r(2,"translate"),l(),a(3,"p",19),p(4),r(5,"translate"),l()),e&2&&(n(),C(s(2,2,"plugins.manage.verified_subtitle")),n(3),C(s(5,4,"plugins.manage.verified_message")))}function Yi(e,d){e&1&&(a(0,"h6",18),p(1),r(2,"translate"),l(),a(3,"p",19),p(4),r(5,"translate"),l()),e&2&&(n(),C(s(2,2,"plugins.manage.unverified_subtitle")),n(3),C(s(5,4,"plugins.manage.unverified_message")))}function Zi(e,d){if(e&1){let i=w();a(0,"button",20),f("click",function(){b(i);let t=u();return x(t.dismissModal())}),p(1),r(2,"translate"),l()}e&2&&(n(),h(" ",s(2,1,"form.button_close")," "))}function ie(e,d){if(e&1){let i=w();a(0,"button",20),f("click",function(){b(i);let t=u();return x(t.dismissModal())}),p(1),r(2,"translate"),l()}e&2&&(n(),h(" ",s(2,1,"form.button_close")," "))}function ee(e,d){if(e&1&&(a(0,"a",17),p(1),r(2,"translate"),c(3,"i",21),l()),e&2){let i=u();v("href",i.plugin.links.homepage||i.plugin.links.npm,I),n(),h(" ",s(2,2,"plugins.button_homepage")," ")}}var Ni=(()=>{class e{$activeModal=P(D);plugin;defaultIcon="assets/hb-icon.png";linkScoped='<a href="https://github.com/homebridge/plugins/wiki/Scoped-Plugins" target="_blank"><i class="fas fa-fw fa-external-link-alt primary-text"></i></a>';linkVerified='<a href="https://github.com/homebridge/plugins/wiki/Verified-Plugins" target="_blank"><i class="fas fa-fw fa-external-link-alt primary-text"></i></a>';ngOnInit(){this.plugin.icon||(this.plugin.icon=this.defaultIcon)}handleIconError(){this.plugin.icon=this.defaultIcon}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(o){return new(o||e)};static \u0275cmp=S({type:e,selectors:[["ng-component"]],inputs:{plugin:"plugin"},decls:32,vars:45,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body","text-center"],["alt","Plugin Icon",1,"mb-3","plugin-icon-card",3,"error","src"],[1,"mb-1"],[1,"grey-text","mb-0","font-monospace"],[1,"grey-text","mb-1","font-monospace"],[1,"mb-3"],[1,"fas","fa-fw","fa-shield-alt","mb-3",2,"font-size","48px",3,"ngClass","ngStyle"],[1,"mb-0","grey-text",3,"innerHTML"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["target","_blank","rel","noopener noreferrer",1,"btn","btn-primary","text-decoration-none",3,"href"],[1,"mb-2"],[1,"mb-1","grey-text"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"fas","fa-fw","fa-external-link-alt"]],template:function(o,t){o&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),p(3),r(4,"translate"),l(),a(5,"button",3),r(6,"translate"),f("click",function(){return t.dismissModal()}),l()(),a(7,"div",4)(8,"img",5),f("error",function(){return t.handleIconError()}),l(),a(9,"h4",6),p(10),l(),a(11,"p",7),p(12),l(),a(13,"p",8),p(14),l(),a(15,"p",9),p(16),l(),c(17,"i",10)(18,"i",10)(19,"i",10),m(20,Ki,9,9),m(21,Xi,6,6),m(22,Yi,6,6),c(23,"p",11),r(24,"translate"),l(),a(25,"div",12)(26,"div",13),m(27,Zi,3,3,"button",14),l(),a(28,"div",15),m(29,ie,3,3,"button",14),l(),a(30,"div",16),m(31,ee,4,4,"a",17),l()()()),o&2&&(n(3),C(s(4,20,"plugins.manage.information")),n(2),y("aria-label",s(6,22,"form.button_close")),n(3),v("src",t.plugin.icon,I),n(2),C(t.plugin.displayName),n(2),C(t.plugin.name),n(2),h("@",t.plugin.author),n(2),C(t.plugin.description),n(),v("ngClass",T(27,Gi,!t.plugin.verifiedPlugin&&!t.plugin.verifiedPlusPlugin,t.plugin.verifiedPlugin||t.plugin.verifiedPlusPlugin))("ngStyle",V(30,ni,!t.plugin.verifiedPlugin&&!t.plugin.verifiedPlusPlugin?1:.25)),n(),v("ngClass",T(32,Wi,!t.plugin.isHbScoped&&(t.plugin.verifiedPlugin||t.plugin.verifiedPlusPlugin),t.plugin.isHbScoped||!t.plugin.verifiedPlugin&&!t.plugin.verifiedPlusPlugin))("ngStyle",V(35,ni,!t.plugin.isHbScoped&&(t.plugin.verifiedPlugin||t.plugin.verifiedPlusPlugin)?1:.25)),n(),v("ngClass",T(37,Qi,t.plugin.isHbScoped,!t.plugin.isHbScoped))("ngStyle",V(40,ni,t.plugin.isHbScoped?1:.25)),n(),g(t.plugin.isHbScoped?20:-1),n(),g(!t.plugin.isHbScoped&&(t.plugin.verifiedPlugin||t.plugin.verifiedPlusPlugin)?21:-1),n(),g(!t.plugin.verifiedPlugin&&!t.plugin.verifiedPlusPlugin?22:-1),n(),v("innerHTML",M(24,24,"plugins.manage.more_info",T(42,Ji,t.linkScoped,t.linkVerified)),N),n(4),g(t.plugin.links.homepage||t.plugin.links.npm?27:-1),n(2),g(!t.plugin.links.homepage&&!t.plugin.links.npm?29:-1),n(2),g(t.plugin.links.homepage||t.plugin.links.npm?31:-1))},dependencies:[$,pi,B],styles:[".plugin-icon[_ngcontent-%COMP%]{height:75px;width:75px;border-radius:15px;border:1px solid #222222}"]})}return e})();var te=(e,d,i)=>({"purple-text":e,"green-text":d,"orange-text":i}),ne=(e,d)=>({"fa-bridge-circle-exclamation orange-text":e,"fa-bridge-circle-xmark red-text":d});function oe(e,d){if(e&1){let i=w();a(0,"a",20),r(1,"translate"),r(2,"translate"),f("click",function(){b(i);let t=u(2);return x(t.checkAndUpdatePlugin())}),c(3,"i",21),l()}e&2&&(v("ngbTooltip",s(1,2,"plugins.button_update")),y("aria-label",s(2,4,"plugins.button_update")))}function ae(e,d){if(e&1){let i=w();a(0,"a",20),r(1,"translate"),r(2,"translate"),f("click",function(){b(i);let t=u(2);return x(t.switchToScoped())}),c(3,"i",22),l()}e&2&&(v("ngbTooltip",s(1,2,"plugins.manage.scoped.switch")),y("aria-label",s(2,4,"plugins.manage.scoped.switch")))}function le(e,d){if(e&1){let i=w();a(0,"a",20),r(1,"translate"),r(2,"translate"),f("click",function(){b(i);let t=u(2);return x(t.openSettings())}),c(3,"i",23),l()}e&2&&(v("ngbTooltip",s(1,2,"plugins.button_set_up")),y("aria-label",s(2,4,"plugins.button_set_up")))}function re(e,d){if(e&1){let i=w();a(0,"a",20),r(1,"translate"),r(2,"translate"),f("click",function(){b(i);let t=u(2);return x(t.openBridgeSettings())}),c(3,"i",24),l()}e&2&&(v("ngbTooltip",s(1,2,"child_bridge.setup")),y("aria-label",s(2,4,"child_bridge.setup")))}function se(e,d){if(e&1){let i=w();a(0,"a",20),r(1,"translate"),r(2,"translate"),f("click",function(){b(i);let t=u(2);return x(t.openBridgeSettings())}),c(3,"i",25),l()}e&2&&(v("ngbTooltip",s(1,2,"child_bridge.bridge_connect")),y("aria-label",s(2,4,"child_bridge.bridge_connect")))}function de(e,d){if(e&1&&c(0,"i",19),e&2){let i=u(2);v("ngClass",T(1,ne,i.childBridgeStatus==="pending",i.childBridgeStatus==="down"))}}function pe(e,d){if(e&1&&(a(0,"div",9),m(1,oe,4,6,"a",17),m(2,ae,4,6,"a",17),m(3,le,4,6,"a",17),m(4,re,4,6,"a",17),m(5,se,4,6,"a",17),c(6,"i",18),m(7,de,1,4,"i",19),l()),e&2){let i=u();n(),g(i.plugin.installedVersion&&i.plugin.updateAvailable&&!i.childBridgeRestartInProgress?1:-1),n(),g(i.plugin.installedVersion&&(i.plugin.newHbScope==null?null:i.plugin.newHbScope.switch)===i.plugin.installedVersion&&!i.childBridgeRestartInProgress?2:-1),n(),g(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&!i.plugin.isConfigured&&!i.childBridgeRestartInProgress&&!i.plugin.disabled?3:-1),n(),g(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&i.plugin.isConfigured&&!i.plugin.hasChildBridges&&!i.plugin.disabled&&i.plugin.recommendChildBridge&&!i.childBridgeRestartInProgress?4:-1),n(),g(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&i.plugin.isConfigured&&i.plugin.hasChildBridges&&!i.childBridgeRestartInProgress&&i.hasUnpairedChildBridges&&i.childBridgeStatus==="ok"&&!i.plugin.disabled?5:-1),n(),v("hidden",!i.childBridgeRestartInProgress),n(),g(i.plugin.installedVersion&&(!i.plugin.newHbScope||i.plugin.newHbScope.switch!==i.plugin.installedVersion)&&!i.plugin.updateAvailable&&i.plugin.isConfigured&&i.plugin.hasChildBridges&&!i.childBridgeRestartInProgress&&!i.hasUnpairedChildBridges&&i.childBridgeStatus!=="ok"&&!i.plugin.disabled?7:-1)}}function ce(e,d){if(e&1){let i=w();a(0,"a",11),f("click",function(){b(i);let t=u();return x(t.openFundingModal(t.plugin))}),c(1,"i",26),a(2,"span",13),p(3),l()()}if(e&2){let i=u();n(3),h("@",i.plugin.author)}}function ue(e,d){if(e&1&&(a(0,"span",13),c(1,"i",27),p(2),l()),e&2){let i=u();n(2),h("@",i.plugin.author," ")}}function me(e,d){if(e&1&&(a(0,"span"),p(1),r(2,"date"),l()),e&2){let i=u(2);n(),h("(",M(2,1,i.plugin.lastUpdated,"yyyy-MM-dd"),")")}}function ge(e,d){if(e&1&&(a(0,"span"),c(1,"i",28),a(2,"span",13),p(3),m(4,me,3,4,"span"),l()()),e&2){let i=u();n(3),h("v",i.plugin.latestVersion," "),n(),g(i.plugin.lastUpdated?4:-1)}}function _e(e,d){if(e&1&&(c(0,"i",29),p(1)),e&2){let i=u();n(),h("v",i.plugin.installedVersion," ")}}function fe(e,d){if(e&1){let i=w();a(0,"a",20),r(1,"translate"),f("click",function(){b(i);let t=u(2);return x(t.doChildBridgeAction("restart"))}),c(2,"i",33),l()}if(e&2){let i=u(2);v("ngbTooltip",s(1,1,i.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))}}function Ce(e,d){if(e&1){let i=w();a(0,"a",34),f("click",function(){b(i);let t=u(2);return x(t.enablePlugin(t.plugin))}),c(1,"i",35),r(2,"translate"),l()}e&2&&(n(),v("ngbTooltip",s(2,1,"plugins.status_disabled")))}function he(e,d){if(e&1){let i=w();a(0,"a",36),f("click",function(){b(i);let t=u(2);return x(t.installAlternateVersion())}),c(1,"i",37),l()}}function be(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(3);return x(t.viewPluginLog())}),c(1,"i",46),p(2),r(3,"translate"),l()}e&2&&(n(2),h(" ",s(3,1,"plugins.manage.plugin_logs")," "))}function xe(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(3);return x(t.installAlternateVersion())}),c(1,"i",47),p(2),r(3,"translate"),l()}e&2&&(n(2),h(" ",s(3,1,"plugins.manage.manage_version")," "))}function ve(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(3);return x(t.openJsonEditor())}),c(1,"i",48),p(2),r(3,"translate"),l()}e&2&&(n(2),h(" ",s(3,1,"plugins.manage.json_config")," "))}function we(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(3);return x(t.disablePlugin(t.plugin))}),c(1,"i",49),p(2),r(3,"translate"),l()}e&2&&(n(2),h(" ",s(3,1,"plugins.manage.disable")," "))}function Pe(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(3);return x(t.enablePlugin(t.plugin))}),c(1,"i",50),p(2),r(3,"translate"),l()}e&2&&(n(2),h(" ",s(3,1,"plugins.manage.enable")," "))}function ye(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(3);return x(t.uninstallPlugin())}),c(1,"i",51),p(2),r(3,"translate"),l()}e&2&&(n(2),h(" ",s(3,1,"plugins.button_uninstall")," "))}function Se(e,d){e&1&&c(0,"div",44)}function Be(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(4);return x(t.doChildBridgeAction("restart"))}),c(1,"i",54),p(2),r(3,"translate"),l()}if(e&2){let i=u(4);n(2),h(" ",s(3,1,i.setChildBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart")," ")}}function ke(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(4);return x(t.doChildBridgeAction("stop"))}),c(1,"i",55),p(2),r(3,"translate"),l()}if(e&2){let i=u(4);n(2),h(" ",s(3,1,i.setChildBridges.length>1?"child_bridge.stop_plural":"child_bridge.stop")," ")}}function Te(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(4);return x(t.doChildBridgeAction("start"))}),c(1,"i",56),p(2),r(3,"translate"),l()}if(e&2){let i=u(4);n(2),h(" ",s(3,1,i.setChildBridges.length>1?"child_bridge.start_plural":"child_bridge.start")," ")}}function Ie(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(3);return x(t.openBridgeSettings())}),c(1,"i",52),p(2),r(3,"translate"),l(),m(4,Be,4,3,"button",43),m(5,ke,4,3,"button",43),m(6,Te,4,3,"button",43),a(7,"button",41),f("click",function(){b(i);let t=u(3);return x(t.resetChildBridges())}),c(8,"i",53),p(9),r(10,"translate"),l()}if(e&2){let i=u(3);n(2),h(" ",s(3,5,"child_bridge.bridge_settings")," "),n(2),g(i.childBridgeRestartInProgress?-1:4),n(),g(i.allChildBridgesStopped?-1:5),n(),g(i.allChildBridgesStopped?6:-1),n(3),h(" ",s(10,7,"child_bridge.reset_accessories")," ")}}function Ee(e,d){e&1&&c(0,"div",44)}function Ve(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(3);return x(t.openBridgeSettings())}),c(1,"i",57),p(2),r(3,"translate"),l()}e&2&&(n(2),h(" ",s(3,1,"child_bridge.setup")," "))}function Me(e,d){e&1&&c(0,"div",44)}function $e(e,d){if(e&1){let i=w();a(0,"button",41),f("click",function(){b(i);let t=u(3);return x(t.openBridgeSettings())}),c(1,"i",57),p(2),r(3,"translate"),l()}e&2&&(n(2),h(" ",s(3,1,"child_bridge.setup")," "))}function De(e,d){e&1&&c(0,"div",44)}function Ae(e,d){if(e&1&&(a(0,"a",45),c(1,"i",58),p(2),r(3,"translate"),l()),e&2){let i=u(3);v("href",i.plugin.links.bugs,I),n(2),h(" ",s(3,2,"support.links.issue")," ")}}function Ne(e,d){if(e&1){let i=w();a(0,"span",32)(1,"a",38),c(2,"i",39),l(),a(3,"div",40)(4,"button",41),f("click",function(){b(i);let t=u(2);return x(t.openSettings())}),c(5,"i",42),p(6),r(7,"translate"),l(),m(8,be,4,3,"button",43),m(9,xe,4,3,"button",43),m(10,ve,4,3,"button",43),m(11,we,4,3,"button",43),m(12,Pe,4,3,"button",43),m(13,ye,4,3,"button",43),m(14,Se,1,0,"div",44),m(15,Ie,11,9),m(16,Ee,1,0,"div",44),m(17,Ve,4,3,"button",43),m(18,Me,1,0,"div",44),m(19,$e,4,3,"button",43),m(20,De,1,0,"div",44),m(21,Ae,4,4,"a",45),l()()}if(e&2){let i=u(2);n(),y("aria-label","Plugin Actions Dropdown"),n(5),h(" ",s(7,16,"plugins.button_settings")," "),n(2),g(i.plugin.isConfigured&&!i.plugin.disabled?8:-1),n(),g(i.plugin.publicPackage?9:-1),n(),g(!i.isMobile&&i.plugin.name!=="homebridge-config-ui-x"?10:-1),n(),g(i.plugin.name!=="homebridge-config-ui-x"&&!i.plugin.disabled?11:-1),n(),g(i.plugin.name!=="homebridge-config-ui-x"&&i.plugin.disabled?12:-1),n(),g(i.plugin.name!=="homebridge-config-ui-x"?13:-1),n(),g(!i.plugin.disabled&&i.plugin.isConfigured&&i.plugin.hasChildBridges&&i.plugin.installedVersion&&i.plugin.name!=="homebridge-config-ui-x"?14:-1),n(),g(i.plugin.hasChildBridges&&!i.plugin.disabled?15:-1),n(),g(i.plugin.isConfigured&&!i.plugin.hasChildBridges&&!i.plugin.disabled&&!i.plugin.recommendChildBridge?16:-1),n(),g(i.plugin.isConfigured&&!i.plugin.hasChildBridges&&!i.plugin.disabled&&!i.plugin.recommendChildBridge?17:-1),n(),g(i.plugin.isConfigured&&!i.plugin.hasChildBridges&&!i.plugin.disabled&&i.plugin.recommendChildBridge&&i.plugin.updateAvailable?18:-1),n(),g(i.plugin.isConfigured&&!i.plugin.hasChildBridges&&!i.plugin.disabled&&i.plugin.recommendChildBridge&&i.plugin.updateAvailable?19:-1),n(),g(i.plugin.links!=null&&i.plugin.links.bugs?20:-1),n(),g(i.plugin.links!=null&&i.plugin.links.bugs?21:-1)}}function He(e,d){if(e&1&&(a(0,"div",9),m(1,fe,3,3,"a",17),m(2,Ce,3,3,"a",30),m(3,he,2,0,"a",31),m(4,Ne,22,18,"span",32),l()),e&2){let i=u();n(),g(!i.plugin.disabled&&i.plugin.hasChildBridges&&i.childBridgeStatus==="ok"?1:-1),n(),g(i.plugin.installedVersion&&i.plugin.disabled?2:-1),n(),g(i.plugin.publicPackage&&!i.plugin.installedVersion?3:-1),n(),g(i.plugin.installedVersion?4:-1)}}var Hi=(()=>{class e{$api=P(J);$auth=P(X);$md=P(Mi);$modal=P(R);$plugin=P(Z);$settings=P(K);$toastr=P(Q);$translate=P(W);$ws=P(Y);io;plugin;hasChildBridges=!1;hasUnpairedChildBridges=!1;allChildBridgesStopped=!1;childBridgeStatus="pending";childBridgeRestartInProgress=!1;defaultIcon="assets/hb-icon.png";isMobile;setChildBridges=[];hb2Status="unknown";isAdmin=this.$auth.user.admin;set childBridges(i){this.hasChildBridges=i.length>0,this.hasUnpairedChildBridges=i.filter(_=>_.paired===!1).length>0,this.allChildBridgesStopped=i.filter(_=>_.manuallyStopped===!0).length===i.length,this.hasChildBridges&&(i.some(_=>_.status==="down")?this.childBridgeStatus="down":i.some(_=>_.status==="pending")?this.childBridgeStatus="pending":i.some(_=>_.status==="ok")&&(this.childBridgeStatus="ok")),this.setChildBridges=i;let o=this.$settings.env.homebridgeVersion?.split(".")[0],t=this.plugin.engines?.homebridge?.split("||").map(_=>_.trim())||[];this.hb2Status=o==="2"?"hide":t.some(_=>_.startsWith("^2")||_.startsWith(">=2"))?"supported":this.hb2Status}ngOnInit(){this.isMobile=this.$md.detect.mobile(),this.io=this.$ws.getExistingNamespace("child-bridges"),this.isMobile&&this.plugin.displayName.toLowerCase().startsWith("homebridge ")&&(this.plugin.displayName=this.plugin.displayName.replace(/^homebridge /i,"")),this.plugin.icon||(this.plugin.icon=this.defaultIcon)}openFundingModal(i){let o=this.$modal.open(Ai,{size:"lg",backdrop:"static"});o.componentInstance.plugin=i}pluginInfoModal(i){let o=this.$modal.open(Ni,{size:"lg",backdrop:"static"});o.componentInstance.plugin=i}disablePlugin(i){let o=this.$modal.open(Di,{size:"lg",backdrop:"static"});o.componentInstance.pluginName=i.displayName,o.componentInstance.isConfigured=i.isConfigured,o.componentInstance.isConfiguredDynamicPlatform=i.isConfiguredDynamicPlatform,o.result.then(()=>k(this,null,function*(){try{yield A(this.$api.put(`/config-editor/plugin/${encodeURIComponent(i.name)}/disable`,{})),i.disabled=!0,this.hasChildBridges&&this.doChildBridgeAction("stop"),this.$modal.open(z,{size:"lg",backdrop:"static"})}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("plugins.disable.error"),this.$translate.instant("toast.title_error"))}}))}enablePlugin(i){let o=this.$modal.open(Ei,{size:"lg",backdrop:"static"});o.componentInstance.title=i.name,o.componentInstance.message=this.$translate.instant("plugins.manage.confirm_enable",{pluginName:i.displayName}),o.componentInstance.confirmButtonLabel=this.$translate.instant("plugins.manage.enable"),o.componentInstance.faIconClass="fa-circle-play primary-text",o.result.then(()=>k(this,null,function*(){try{yield A(this.$api.put(`/config-editor/plugin/${encodeURIComponent(i.name)}/enable`,{})),i.disabled=!1,this.hasChildBridges&&(yield this.doChildBridgeAction("start")),this.$modal.open(z,{size:"lg",backdrop:"static"})}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("plugins.enable.error"),this.$translate.instant("toast.title_error"))}}))}viewPluginLog(){let i=this.$modal.open($i,{size:"xl",backdrop:"static"});i.componentInstance.plugin=this.plugin}doChildBridgeAction(i){return k(this,null,function*(){this.childBridgeRestartInProgress=!0;try{for(let o of this.setChildBridges)yield A(this.io.request(`${i}-child-bridge`,o.username))}catch(o){console.error(o),this.$toastr.error(this.$translate.instant("plugins.bridge.action_error",{action:i}),this.$translate.instant("toast.title_error")),this.childBridgeRestartInProgress=!1}finally{setTimeout(()=>{this.childBridgeRestartInProgress=!1},i==="restart"?12e3:i==="stop"?6e3:1e3)}})}handleIconError(){this.plugin.icon=this.defaultIcon}checkAndUpdatePlugin(){this.$plugin.checkAndUpdatePlugin(this.plugin,this.plugin.latestVersion)}openSettings(){this.$plugin.settings(this.plugin)}openBridgeSettings(){this.$plugin.bridgeSettings(this.plugin)}switchToScoped(){this.$plugin.switchToScoped(this.plugin)}installAlternateVersion(){this.$plugin.installAlternateVersion(this.plugin)}openJsonEditor(){this.$plugin.jsonEditor(this.plugin)}uninstallPlugin(){this.$plugin.uninstallPlugin(this.plugin,this.setChildBridges)}resetChildBridges(){this.$plugin.resetChildBridges(this.setChildBridges)}static \u0275fac=function(o){return new(o||e)};static \u0275cmp=S({type:e,selectors:[["app-plugin-card"]],inputs:{plugin:"plugin",childBridges:"childBridges"},decls:24,vars:14,consts:[[1,"card","card-body","mb-3"],[1,"d-flex","flex-row","justify-content-between"],[1,"d-flex","flex-column","me-3","align-items-center","justify-content-between"],["alt","Plugin Icon",1,"plugin-icon-card","mb-3",3,"error","src"],[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,"ms-auto"],[1,"card-text","mb-2","text-truncate"],["href","javascript:void(0)",1,"card-link",3,"click"],[1,"fas","fa-fw","fa-shield-alt","fa-lg","me-1",3,"ngClass"],[1,"grey-text"],[1,"card-text","mb-2"],["href","javascript:void(0)",1,"card-link"],[1,"card-text","mb-0","grey-text"],["href","javascript:void(0)","container","body","openDelay","150","triggers","hover",1,"card-link",3,"ngbTooltip"],[1,"fas","fa-fw","fa-spinner","fa-pulse","fa-lg","grey-text","ms-3",3,"hidden"],[1,"fas","fa-fw","fa-lg","ms-3",3,"ngClass"],["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","ms-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-arrow-right-arrow-left","primary-text","fa-lg","fa-fade","ms-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-sliders","primary-text","fa-lg","fa-fade","ms-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-bridge","primary-text","fa-lg","fa-fade","ms-3",2,"--fa-animation-duration","2s"],[1,"icon-button","fas","fa-fw","fa-qrcode","primary-text","fa-lg","fa-fade","ms-3",2,"--fa-animation-duration","2s"],[1,"fas","fa-fw","fa-heart","fa-lg","me-1","pink-text"],[1,"fas","fa-fw","fa-heart","fa-lg","me-1",2,"opacity","0.5"],[1,"far","fa-fw","fa-circle-dot","fa-lg","me-1"],[1,"far","fa-fw","fa-circle-check","fa-lg","me-1"],["href","javascript:void(0)",1,"card-link","red-text"],["href","javascript:void(0)"],["ngbDropdown","","placement","left",1,"d-inline-block","ms-3","mt-auto"],[1,"fas","fa-fw","fa-lg","fa-power-off","ms-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"],["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",""],[1,"dropdown-divider"],["ngbDropdownItem","","rel","noopener noreferrer","target","_blank",3,"href"],[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,"fas","fa-fw","fa-bridge"],[1,"fas","fa-fw","fa-broom"],[1,"fa-fw","icon-button","fas","fa-fw","fa-power-off"],[1,"fas","fa-fw","fa-stop"],[1,"fas","fa-fw","fa-play"],[1,"icon-button","fas","fa-fw","fa-bridge"],[1,"icon-button","fa","fa-fw","fa-question-circle-o"]],template:function(o,t){o&1&&(a(0,"div",0)(1,"div",1)(2,"div",2)(3,"img",3),f("error",function(){return t.handleIconError()}),l()(),a(4,"div",4)(5,"div",5)(6,"div",6)(7,"div",7)(8,"h5",8),p(9),l(),m(10,pe,8,7,"div",9),l(),a(11,"p",10)(12,"a",11),f("click",function(){return t.pluginInfoModal(t.plugin)}),c(13,"i",12),a(14,"span",13),p(15),l()()(),a(16,"p",14),m(17,ce,4,1,"a",15),m(18,ue,3,1,"span",13),l(),a(19,"div",7)(20,"p",16),m(21,ge,5,2,"span"),m(22,_e,2,1),l(),m(23,He,5,4,"div",9),l()()()()()()),o&2&&(n(3),v("src",t.plugin.icon,I),n(6),C(t.plugin.displayName),n(),g(t.isAdmin?10:-1),n(3),v("ngClass",di(10,te,t.plugin.isHbScoped,!t.plugin.isHbScoped&&(t.plugin.verifiedPlugin||t.plugin.verifiedPlusPlugin),!t.plugin.isHbScoped&&!t.plugin.verifiedPlugin&&!t.plugin.verifiedPlusPlugin)),n(2),C(t.plugin.name),n(2),g((t.plugin.verifiedPlugin||t.plugin.verifiedPlusPlugin)&&t.plugin.funding?17:-1),n(),g((t.plugin.verifiedPlugin||t.plugin.verifiedPlusPlugin)&&t.plugin.funding?-1:18),n(3),g(t.plugin.publicPackage&&!t.plugin.installedVersion?21:-1),n(),g(t.plugin.installedVersion?22:-1),n(),g(t.isAdmin?23:-1))},dependencies:[G,$,ki,Bi,Si,yi,Pi,ci,B],encapsulation:2})}return e})();var ji=(()=>{class e{$activeModal=P(D);dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(o){return new(o||e)};static \u0275cmp=S({type:e,selectors:[["ng-component"]],decls:27,vars:21,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fa","fa-fw","fa-question-circle-o","primary-text",2,"font-size","75px"],[1,"mb-0"],[3,"innerHTML"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-end"]],template:function(o,t){o&1&&(H(0,"div",0)(1,"form")(2,"div",1)(3,"h5",2),p(4),r(5,"translate"),j(),H(6,"button",3),r(7,"translate"),ii("click",function(){return t.dismissModal()}),j()(),H(8,"div",4)(9,"div",5),E(10,"i",6),j(),H(11,"ul",7),E(12,"li",8),r(13,"translate"),E(14,"li",8),r(15,"translate"),E(16,"li",8),r(17,"translate"),E(18,"li",8),r(19,"translate"),j()(),H(20,"div",9),E(21,"div",10),H(22,"div",11)(23,"button",12),ii("click",function(){return t.dismissModal()}),p(24),r(25,"translate"),j()(),E(26,"div",13),j()()()),o&2&&(n(4),C(s(5,7,"support.title")),n(2),y("aria-label",s(7,9,"form.button_close")),n(6),F("innerHTML",s(13,11,"plugins.support.list_1"),N),n(2),F("innerHTML",s(15,13,"plugins.support.list_2"),N),n(2),F("innerHTML",s(17,15,"plugins.support.list_3"),N),n(2),F("innerHTML",s(19,17,"plugins.support.list_4"),N),n(6),h(" ",s(25,19,"form.button_close")," "))},dependencies:[B],encapsulation:2})}return e})();var je=["searchInput"],Fe=(e,d)=>({"fa-magnifying-glass":e,"fa-exclamation-circle":d});function ze(e,d){e&1&&c(0,"app-spinner")}function Oe(e,d){if(e&1){let i=w();a(0,"button",7),r(1,"translate"),r(2,"translate"),f("click",function(){b(i);let t=u();return x(t.showSearch())}),c(3,"i"),l(),a(4,"button",8),r(5,"translate"),r(6,"translate"),f("click",function(){b(i);let t=u();return x(t.showStats())}),c(7,"i"),l()}if(e&2){let i=u();v("ngbTooltip",s(1,10,"plugins.search")),y("aria-label",s(2,12,"plugins.search")),n(3),ei(ti("fas fa-fw",i.showSearchBar?" primary-text":""," fa-search")),n(),v("ngbTooltip",s(5,14,"plugins.stats")),y("aria-label",s(6,16,"plugins.stats")),n(3),ei(ti("fas fa-fw",i.tab==="stats"?" primary-text":""," fa-sliders"))}}function Ue(e,d){if(e&1){let i=w();a(0,"a",15),f("click",function(){b(i);let t=u(3);return x(t.onClearSearch())}),c(1,"i",16),l()}}function qe(e,d){if(e&1){let i=w();a(0,"div",9)(1,"div",11)(2,"form",12),f("ngSubmit",function(){b(i);let t=u(2);return x(t.onSubmit(t.form))}),c(3,"input",13,0),r(5,"translate"),m(6,Ue,2,0,"a",14),l()()()}if(e&2){let i=u(2);n(2),v("formGroup",i.form),n(),v("placeholder",s(5,3,"plugins.placeholder_search_plugin")),n(3),g(i.showExitButton?6:-1)}}function Le(e,d){if(e&1&&(a(0,"div",17),c(1,"app-plugin-card",19),l()),e&2){let i=d.$implicit,o=u(3);n(),v("plugin",i)("childBridges",o.getPluginChildBridges(i))}}function Re(e,d){if(e&1&&(a(0,"div",18),c(1,"i",20),a(2,"p"),p(3),r(4,"translate"),l()()),e&2){let i=u(3);n(),v("ngClass",T(4,Fe,!i.showExitButton,i.showExitButton)),n(2),C(s(4,2,i.showExitButton?"plugins.placeholder_search_none":"plugins.placeholder_search_first"))}}function Ge(e,d){if(e&1&&(a(0,"div",10),q(1,Le,2,2,"div",17,U),m(3,Re,5,7,"div",18),l()),e&2){let i=u(2);n(),L(i.installedPlugins),n(2),g(i.installedPlugins.length===0&&!i.loading&&!i.mainError?3:-1)}}function We(e,d){if(e&1&&(m(0,qe,7,5,"div",9),m(1,Ge,4,1,"div",10)),e&2){let i=u();g(i.showSearchBar?0:-1),n(),g(i.loading?-1:1)}}function Qe(e,d){e&1&&(a(0,"div",21)(1,"div",22)(2,"code"),p(3,"https://developers.homebridge.io/analytics "),a(4,"a",23),c(5,"i",24),l()()(),a(6,"div",25),p(7),r(8,"translate"),l()(),c(9,"iframe",26)),e&2&&(n(7),C(s(8,1,"plugins.stats_note")))}var dn=(()=>{class e{searchInput;$api=P(J);$auth=P(X);$modal=P(R);$plugin=P(Z);$router=P(Ii);$settings=P(K);$toastr=P(Q);$translate=P(W);$ws=P(Y);isSearchMode=!1;io;navigationSubscription;mainError=!1;loading=!0;tab="main";installedPlugins=[];childBridges=[];showSearchBar=!1;showExitButton=!1;isAdmin=this.$auth.user.admin;form=new _i({query:new fi("")});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(),this.installedPlugins.length||this.showSearch();let{action:i,plugin:o}=this.$router.parseUrl(this.$router.url).queryParams;if(i){let t=this.installedPlugins.find(_=>_.name===o);switch(i){case"just-installed":{t&&(t.isConfigured?this.$modal.open(z,{size:"lg",backdrop:"static"}):this.$plugin.settings(t));break}case"open-manage-version":{t&&this.$plugin.installAlternateVersion(t);break}}this.$router.navigate([],{queryParams:{},replaceUrl:!0,queryParamsHandling:""})}})),this.io.socket.on("child-bridge-status-update",i=>{let o=this.childBridges.find(t=>t.username===i.username);o?Object.assign(o,i):this.childBridges.push(i)}),this.navigationSubscription=this.$router.events.subscribe(i=>{i instanceof Ti&&this.loadInstalledPlugins()})})}search(){this.installedPlugins=[],this.loading=!0,this.showExitButton=!0,this.$api.get(`/plugins/search/${encodeURIComponent(this.form.value.query)}`).subscribe({next:i=>{let o=new Set;this.installedPlugins=i.reduce((t,_)=>{if(_.name==="homebridge-config-ui-x"||o.has(_.name))return t;if(_.newHbScope){let oi=_.newHbScope.to,Fi=i.some(zi=>zi.name===oi);(_.installedVersion||!Fi)&&(o.add(oi),t.push(_))}else t.push(_);return t},[]),this.appendMetaInfo(),this.loading=!1},error:i=>{this.loading=!1,this.isSearchMode=!1,console.error(i),this.$toastr.error(i.error.message||i.message,this.$translate.instant("toast.title_error")),this.loadInstalledPlugins()}})}onClearSearch(){this.loadInstalledPlugins()}onSubmit({value:i}){i.query.length?(this.isSearchMode=!0,this.search()):this.isSearchMode&&(this.isSearchMode=!1,this.loadInstalledPlugins())}showSearch(){this.showSearchBar?(this.showSearchBar=!1,this.isSearchMode&&(this.isSearchMode=!1,this.form.setValue({query:""}),this.loadInstalledPlugins())):(window.document.querySelector("body").classList.remove("bg-black"),this.tab="main",this.showSearchBar=!0,setTimeout(()=>this.searchInput.nativeElement.focus(),0))}showStats(){this.tab==="stats"?(window.document.querySelector("body").classList.remove("bg-black"),this.tab="main"):(window.document.querySelector("body").classList.add("bg-black"),this.tab="stats",this.showSearchBar=!1)}openSupport(){this.$modal.open(ji,{size:"lg",backdrop:"static"})}ngOnDestroy(){window.document.querySelector("body").classList.remove("bg-black"),this.navigationSubscription&&this.navigationSubscription.unsubscribe(),this.io.end()}getPluginChildBridges(i){return this.childBridges.filter(o=>o.plugin===i.name)}loadInstalledPlugins(){return k(this,null,function*(){this.form.setValue({query:""}),this.showExitButton=!1,this.installedPlugins=[],this.loading=!0,this.mainError=!1;try{let i=yield A(this.$api.get("/plugins"));this.installedPlugins=i.filter(t=>t.name!=="homebridge-config-ui-x"),yield this.appendMetaInfo();let o=this.installedPlugins.sort((t,_)=>t.updateAvailable!==_.updateAvailable?t.updateAvailable?-1:1:t.newHbScope&&!_.newHbScope?-1:t.disabled!==_.disabled?t.disabled?1:-1:t.isConfigured!==_.isConfigured?t.isConfigured?1:-1:t.hasChildBridgesUnpaired!==_.hasChildBridgesUnpaired?t.hasChildBridgesUnpaired?-1:1:t.hasChildBridges!==_.hasChildBridges&&this.$settings.env.recommendChildBridges?t.hasChildBridges?1:-1:t.name.localeCompare(_.name));return this.loading=!1,o}catch(i){console.error(i),this.loading=!1,this.mainError=!0,this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugins"),this.$translate.instant("toast.title_error"))}})}appendMetaInfo(){return k(this,null,function*(){this.isAdmin&&(yield Promise.all(this.installedPlugins.filter(i=>i.installedVersion).map(i=>k(this,null,function*(){try{let o=yield A(this.$api.get(`/config-editor/plugin/${encodeURIComponent(i.name)}`));i.isConfigured=o.length>0,i.isConfiguredDynamicPlatform=i.isConfigured&&Object.prototype.hasOwnProperty.call(o[0],"platform"),i.recommendChildBridge=i.isConfiguredDynamicPlatform&&this.$settings.env.recommendChildBridges&&!["homebridge","homebridge-config-ui-x"].includes(i.name),i.hasChildBridges=i.isConfigured&&o.some(_=>_._bridge&&_._bridge.username);let t=this.getPluginChildBridges(i);i.hasChildBridgesUnpaired=t.some(_=>!_.paired),this.$settings.env.plugins?.hideUpdatesFor?.includes(i.name)&&(i.updateAvailable=!1)}catch{i.isConfigured=!0,i.hasChildBridges=!0}}))))})}getChildBridgeMetadata(){this.io.request("get-homebridge-child-bridge-status").subscribe(i=>{this.childBridges=i})}static \u0275fac=function(o){return new(o||e)};static \u0275cmp=S({type:e,selectors:[["ng-component"]],viewQuery:function(o,t){if(o&1&&li(je,5),o&2){let _;ri(_=si())&&(t.searchInput=_.first)}},decls:13,vars:9,consts:[["searchInput",""],[1,"row","mb-3"],[1,"col-6"],[1,"primary-text","m-0"],[1,"col-6","text-end"],["type","button",1,"btn","btn-elegant","my-0","me-0",3,"click"],[1,"fa","fa-fw","fa-question-circle-o"],["type","button","container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","my-0","me-2",3,"click","ngbTooltip"],["type","button","container","body","placement","bottom","openDelay","150","triggers","hover",1,"btn","btn-elegant","my-0","me-2","d-none","d-md-inline-block",3,"click","ngbTooltip"],[1,"row"],[1,"d-flex","flex-wrap","justify-content-between"],[1,"col-md-12"],["novalidate","",3,"ngSubmit","formGroup"],["type","text","formControlName","query",1,"hb-npm-search",3,"placeholder"],["href","javascript:void(0)",1,"hb-npm-search-clear"],["href","javascript:void(0)",1,"hb-npm-search-clear",3,"click"],[1,"far","fa-fw","fa-times-circle"],[1,"hb-plugin-space-between"],[1,"alert","alert-info","mt-4","text-center","w-100"],[3,"plugin","childBridges"],[1,"fas","fa-fw","primary-text","my-3",2,"font-size","75px",3,"ngClass"],[1,"w-100","py-3","hb-stats-header","text-white","text-center"],[1,"mb-2"],["href","https://developers.homebridge.io/analytics","target","_blank"],[1,"fa","fa-fw","fa-external-link"],[1,"small","grey-text"],["src",ai`https://developers.homebridge.io/analytics/`,"sandbox","allow-scripts allow-same-origin allow-popups","referrerpolicy","no-referrer",1,"hb-stats"]],template:function(o,t){o&1&&(m(0,ze,1,0,"app-spinner"),a(1,"div",1)(2,"div",2)(3,"h3",3),p(4),r(5,"translate"),l()(),a(6,"div",4),m(7,Oe,8,18),a(8,"button",5),r(9,"translate"),f("click",function(){return t.openSupport()}),c(10,"i",6),l()()(),m(11,We,2,2)(12,Qe,10,3)),o&2&&(g(t.loading?0:-1),n(4),C(s(5,5,"menu.label_plugins")),n(3),g(t.isAdmin?7:-1),n(),y("aria-label",s(9,7,"support.title")),n(3),g(t.tab==="main"?11:t.tab==="stats"?12:-1))},dependencies:[Vi,xi,Ci,ui,mi,gi,vi,hi,bi,Hi,$,G,B],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%}}.hb-stats-header[_ngcontent-%COMP%]{background:#242424;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.hb-stats-header[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{border:1px solid grey;border-radius:5px;padding:5px;font-size:.8rem;color:#d3d3d3}.hb-stats[_ngcontent-%COMP%]{height:calc(100% - 121px);width:100%;overflow:hidden;border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}@media (max-width: 767px){.hb-stats[_ngcontent-%COMP%]{height:calc(100% - 60px)}}"]})}return e})();export{dn as PluginsComponent};
@@ -1 +0,0 @@
1
- import{a as n}from"./chunk-NXVXHA2V.js";import"./chunk-LWX72DT2.js";import"./chunk-L2KN725U.js";import"./chunk-PJDX7TKL.js";import"./chunk-ZT56WXIZ.js";import"./chunk-P3TP4J62.js";import"./chunk-E74SDSOB.js";import"./chunk-YFQVSUDS.js";import"./chunk-BSZ6MHFZ.js";import"./chunk-ADNBR4EK.js";import"./chunk-7FO4RGTF.js";import"./chunk-2KOR6LRK.js";import"./chunk-K46AA6SH.js";import"./chunk-PSSVCFFV.js";import"./chunk-K2NEWUWG.js";import"./chunk-53FPP2IJ.js";import"./chunk-7HCGM76M.js";import{g as r}from"./chunk-QRQBCPWO.js";import"./chunk-FAELDM7K.js";import"./chunk-4ZYGJMXW.js";import"./chunk-ZG3HINDJ.js";import"./chunk-K7QEGT3E.js";import{ha as t,nb as i}from"./chunk-V7SOQAC5.js";var l=[{path:"",loadComponent:()=>import("./chunk-QXJKMGDB.js").then(o=>o.PluginsComponent)}],u=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=i({type:o});static \u0275inj=t({imports:[r.forChild(l),r]})}return o})();var f=(()=>{class o{static \u0275fac=function(e){return new(e||o)};static \u0275mod=i({type:o});static \u0275inj=t({imports:[n,u]})}return o})();export{f as PluginsModule};