homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge.
2 lines (1 loc) • 5.56 kB
JavaScript
import{a as k}from"./chunk-7V3PGBCL.js";import{a as H}from"./chunk-LRDLQLG4.js";import"./chunk-YEMALHZS.js";import"./chunk-XTCYYJPD.js";import"./chunk-SMGTZ45N.js";import"./chunk-GAHGBZ7U.js";import"./chunk-2QHNXSQY.js";import"./chunk-LKBXKG4K.js";import{b as E}from"./chunk-RFCSHRPV.js";import"./chunk-3APJQTJL.js";import{Da as a,Ea as g,Gb as p,Hb as T,Mb as b,Nb as w,Ra as v,Yc as _,Zc as L,aa as r,d as h,dc as $,ec as C,mb as l,nb as m,ob as f,qc as S,xb as y}from"./chunk-LTGI3NYM.js";import{h as u}from"./chunk-B4AJQJMI.js";var q=["terminaloutput"],F=(()=>{class s{$terminal=r(H);$settings=r(E);$navigationGuard=r(k);$translate=r(_);resizeEvent=new h;termTarget=S("terminaloutput");visibilityChangeHandler=null;onWindowResize(){this.resizeEvent.next(void 0)}onBeforeUnload(t){return this.$navigationGuard.handleBeforeUnload(t)}onWindowFocus(){this.$terminal.activateTerminal()}onClick(){this.$terminal.activateTerminal()}onTouchStart(t){this.$terminal.onTouchStart(t)}onTouchEnd(t){this.$terminal.onTouchEnd(t)}patchXtermLiveRegion(){let t=this.termTarget()?.nativeElement;if(!t)return;let e=t.querySelector("[aria-live]");e&&(e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"))}ngOnInit(){let t=this.$translate.instant("menu.linux.label_terminal");this.$settings.setPageTitle(t);let e=this.$settings.getEffectiveTerminalLightingMode();if(e==="dark"?window.document.querySelector("body").classList.add("bg-black"):window.document.querySelector("body").classList.add("bg-white"),this.$settings.actualLightingMode==="light"&&e==="dark"){window.document.querySelector("body").classList.add("theme-transition");let n=this.termTarget()?.nativeElement;n&&n.classList.add("theme-transition")}this.$terminal.isTerminalReady()&&this.$terminal.destroyTerminal(),this.$settings.env.terminal?.persistence&&this.$terminal.hasActiveSession()?this.$terminal.reconnectTerminal(this.termTarget(),this.$settings.getTerminalOptions({screenReaderMode:!0}),this.resizeEvent):(!this.$settings.env.terminal?.persistence&&this.$terminal.hasActiveSession()&&this.$terminal.destroyPersistentSession(),this.$terminal.startTerminal(this.termTarget(),this.$settings.getTerminalOptions({screenReaderMode:!0}),this.resizeEvent)),requestAnimationFrame(()=>{this.patchXtermLiveRegion(),this.$terminal.activateTerminal()})}ngAfterViewInit(){this.visibilityChangeHandler=this.onVisibilityChange.bind(this),document.addEventListener("visibilitychange",this.visibilityChangeHandler),setTimeout(()=>this.patchXtermLiveRegion(),0)}onVisibilityChange(){!document.hidden&&this.$terminal.isTerminalReady()&&requestAnimationFrame(()=>{this.patchXtermLiveRegion(),this.$terminal.activateTerminal()})}canDeactivate(t){return u(this,null,function*(){let e=yield this.$navigationGuard.canDeactivate();if(e===!1)return e;let i=this.$settings.getEffectiveTerminalLightingMode();if(!(this.$settings.actualLightingMode==="light"&&i==="dark"))return window.document.querySelector("body").classList.remove("bg-black"),window.document.querySelector("body").classList.remove("bg-white"),Promise.resolve(!0);window.document.querySelector("body").classList.remove("theme-transition");let o=t&&(t.includes("/platform-tools/terminal")||t.includes("/logs"));return new Promise(d=>{let c=this.termTarget()?.nativeElement;c&&c.classList.add("fade-out"),o?setTimeout(()=>{d(!0)},250):(setTimeout(()=>{window.document.querySelector("body").classList.remove("bg-black"),window.document.querySelector("body").classList.remove("bg-white")},250),setTimeout(()=>{d(!0)},500))})})}ngOnDestroy(){this.visibilityChangeHandler&&(document.removeEventListener("visibilitychange",this.visibilityChangeHandler),this.visibilityChangeHandler=null),window.document.querySelector("body").classList.remove("theme-transition"),window.document.querySelector("body").classList.remove("light-mode"),window.document.querySelector("body").classList.remove("bg-black"),window.document.querySelector("body").classList.remove("bg-white"),this.$settings.env.terminal?.persistence?this.$terminal.detachTerminal():this.$terminal.destroyPersistentSession()}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=v({type:s,selectors:[["app-terminal"]],viewQuery:function(e,i){e&1&&p(i.termTarget,q,5),e&2&&T()},hostBindings:function(e,i){e&1&&y("resize",function(){return i.onWindowResize()},a)("beforeunload",function(o){return i.onBeforeUnload(o)},a)("focus",function(){return i.onWindowFocus()},a)("click",function(){return i.onClick()})("touchstart",function(o){return i.onTouchStart(o)})("touchend",function(o){return i.onTouchEnd(o)})},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&&(l(0,"div",1)(1,"div",2)(2,"h3",3),b(3),$(4,"translate"),m()()(),l(5,"div",4),f(6,"div",5,0),m()),e&2&&(g(3),w(C(4,1,"menu.linux.label_terminal")))},dependencies:[L],styles:["#docker-terminal.theme-transition[_ngcontent-%COMP%]{opacity:0;animation:_ngcontent-%COMP%_fadeIn .25s ease-in-out .25s forwards}#docker-terminal.theme-transition.fade-out[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_fadeOut .25s ease-in-out forwards!important;opacity:1}@keyframes _ngcontent-%COMP%_fadeIn{to{opacity:1}}@keyframes _ngcontent-%COMP%_fadeOut{to{opacity:0}}.adjust-for-mobile[_ngcontent-%COMP%]{height:calc(100% - 60px)}"],changeDetection:0})}return s})();export{F as TerminalComponent};