homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge.
1 lines • 5.44 kB
JavaScript
import {b}from'./chunk-C3ETAMH_.js';import {L}from'./chunk-MWxClZxO.js';import'./chunk-CCTcrEQI.js';import'./chunk-BtxeAJ3m.js';import'./chunk-BWu8OGjA.js';import'./chunk-KTYlT6lA.js';import {g,z as zt,a2 as bf,aF as $$1,B as BH,E,J as Ja,k as K8,az as ke,s as At,t as f_,aA as Je,aC as Dr,y as ie,N as Ny,G as h_,q as rc,bq as pw,M as Ey,P as ST}from'./main-ONDCASUV.js';var q=["terminaloutput"],F=(()=>{class s{$terminal=g(L);$settings=g(zt);$navigationGuard=g(b);$translate=g(bf);resizeEvent=new $$1;termTarget=BH("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:true}),this.resizeEvent):(!this.$settings.env.terminal?.persistence&&this.$terminal.hasActiveSession()&&this.$terminal.destroyPersistentSession(),this.$terminal.startTerminal(this.termTarget(),this.$settings.getTerminalOptions({screenReaderMode:true}),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 E(this,null,function*(){let e=yield this.$navigationGuard.canDeactivate();if(e===false)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(true);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(true);},250):(setTimeout(()=>{window.document.querySelector("body").classList.remove("bg-black"),window.document.querySelector("body").classList.remove("bg-white");},250),setTimeout(()=>{d(true);},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=Ja({type:s,selectors:[["app-terminal"]],viewQuery:function(e,i){e&1&&Ey(i.termTarget,q,5),e&2&&ST();},hostBindings:function(e,i){e&1&&rc("resize",function(){return i.onWindowResize()},pw)("beforeunload",function(o){return i.onBeforeUnload(o)},pw)("focus",function(){return i.onWindowFocus()},pw)("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&&(ke(0,"div",1)(1,"div",2)(2,"h3",3),At(3),f_(4,"translate"),Je()()(),ke(5,"div",4),Dr(6,"div",5,0),Je()),e&2&&(ie(3),Ny(h_(4,1,"menu.linux.label_terminal")));},dependencies:[K8],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)}"]})}return s})();export{F as TerminalComponent};