homebridge-config-ui-x 5.11.2-beta.5 → 5.11.2-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/public/{chunk-P2U63MCR.js → chunk-2HDDFLX5.js} +1 -1
- package/public/{chunk-N74OZDD6.js → chunk-2KUGAT6L.js} +1 -1
- package/public/chunk-2QHT7UTY.js +1 -0
- package/public/{chunk-BHYS7LPU.js → chunk-3B6IFS6E.js} +1 -1
- package/public/chunk-4HJPJ6JO.js +1 -0
- package/public/chunk-4ZCBTPFQ.js +1 -0
- package/public/{chunk-D3NFARXL.js → chunk-5DKBUEKC.js} +1 -1
- package/public/{chunk-LKRXJ4NQ.js → chunk-6SPNUKCU.js} +1 -1
- package/public/{chunk-D3MUNCMG.js → chunk-6UOFHEOA.js} +1 -1
- package/public/chunk-73LLH6JC.js +1 -0
- package/public/chunk-7KQJO6II.js +1 -0
- package/public/{chunk-LQNKSANI.js → chunk-AK7DHUFI.js} +1 -1
- package/public/chunk-BQLUKGX4.js +1 -0
- package/public/chunk-CAKM6QQD.js +19 -0
- package/public/{chunk-QCD43BXL.js → chunk-CJ6ENU5Q.js} +1 -1
- package/public/chunk-EHWZNITX.js +16 -0
- package/public/chunk-FSIP765D.js +1 -0
- package/public/chunk-G5KKSLRH.js +1 -0
- package/public/{chunk-RMWS37MG.js → chunk-IPCY24VP.js} +1 -1
- package/public/chunk-K7P4YW6C.js +1 -0
- package/public/chunk-KXDUZHXM.js +1 -0
- package/public/{chunk-ZDIBPB2V.js → chunk-LPHPZZDD.js} +1 -1
- package/public/chunk-LSBNAQT7.js +1 -0
- package/public/{chunk-B6EPFA4V.js → chunk-M6KB66ZD.js} +1 -1
- package/public/{chunk-CYKWMDCC.js → chunk-MJD4YCIZ.js} +1 -1
- package/public/{chunk-72SK6LN3.js → chunk-MXLTCL2C.js} +1 -1
- package/public/chunk-Q5BDQ6UK.js +4 -0
- package/public/chunk-QD7ZQ5KN.js +1 -0
- package/public/{chunk-K3VXCKFJ.js → chunk-QZUDFUPG.js} +1 -1
- package/public/{chunk-5F6SGJZO.js → chunk-R7CS5PVV.js} +1 -1
- package/public/chunk-RP6CIVXA.js +1 -0
- package/public/chunk-SWHMQNYH.js +68 -0
- package/public/chunk-TO4NLBFG.js +3 -0
- package/public/{chunk-J6JCLCR6.js → chunk-TSNTAL5D.js} +1 -1
- package/public/{chunk-746K2W65.js → chunk-UCQTJGBG.js} +1 -1
- package/public/chunk-UIRBXR5P.js +19 -0
- package/public/chunk-VUOEARGI.js +1 -0
- package/public/{chunk-WPJDSHYO.js → chunk-YTCQIUDM.js} +1 -1
- package/public/{chunk-YAUW3QQV.js → chunk-Z62MEN4O.js} +1 -1
- package/public/{chunk-BQMRSELR.js → chunk-ZCXLNQRQ.js} +1 -1
- package/public/{chunk-IMR3XZ37.js → chunk-ZMZV3OZR.js} +1 -1
- package/public/{chunk-W3WJ3GLW.js → chunk-ZT2XJVT5.js} +1 -1
- package/public/index.html +1 -1
- package/public/{main-VBBHOBST.js → main-ORJXWFOK.js} +1 -1
- package/public/chunk-2YQMYSXT.js +0 -1
- package/public/chunk-3JBXVUFP.js +0 -19
- package/public/chunk-47LZZIPJ.js +0 -68
- package/public/chunk-5UTHYAO4.js +0 -16
- package/public/chunk-5V5T5YDK.js +0 -1
- package/public/chunk-CDVVVWKM.js +0 -1
- package/public/chunk-G7V2J2JO.js +0 -1
- package/public/chunk-GFM46DC6.js +0 -1
- package/public/chunk-H53NQXNF.js +0 -1
- package/public/chunk-HBNZXYWD.js +0 -4
- package/public/chunk-HQLIDFFL.js +0 -1
- package/public/chunk-IF2VXUU3.js +0 -3
- package/public/chunk-J24WFLH3.js +0 -1
- package/public/chunk-PK2CVZPI.js +0 -1
- package/public/chunk-S6MSUZ3J.js +0 -1
- package/public/chunk-TRA6X3HB.js +0 -1
- package/public/chunk-VQI4BA3M.js +0 -19
- package/public/chunk-XF7D4C2H.js +0 -1
- package/public/chunk-YDOFHXZH.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as p}from"./chunk-LPHPZZDD.js";import{a as u}from"./chunk-2QHT7UTY.js";import{a as f}from"./chunk-73LLH6JC.js";import{n as c}from"./chunk-QZUDFUPG.js";import{b as l}from"./chunk-MXLTCL2C.js";import{E as m}from"./chunk-M6KB66ZD.js";import{X as a,aa as e,ea as s,mb as o}from"./chunk-MKV5RAJQ.js";import{h as i}from"./chunk-B4AJQJMI.js";var S=(()=>{class n{injector=e(s);$terminal=e(p);$settings=e(l);$modal=e(c);$translate=e(m);handleBeforeUnload(r){if(!this.$settings.env.terminal?.persistence&&!this.$settings.env.terminal?.hideWarning&&this.$terminal.hasActiveSession()&&this.$terminal.hasUserTypedInSession()){let t=this.$translate.instant("platform.terminal.terminate_unload");return r.preventDefault(),r.returnValue=t,t}}canDeactivate(){return i(this,null,function*(){if(this.$settings.env.terminal?.persistence||this.$settings.env.terminal?.hideWarning||!this.$terminal.hasActiveSession()||!this.$terminal.hasUserTypedInSession())return!0;let r=o([{provide:f,useValue:{title:this.$translate.instant("platform.terminal.terminate_title"),message:this.$translate.instant("platform.terminal.terminate_message_1"),message2:this.$translate.instant("platform.terminal.terminate_message_2"),message3:this.$translate.instant("common.phrases.are_you_sure"),confirmButtonLabel:this.$translate.instant("form.button_continue"),confirmButtonClass:"btn-primary",faIconClass:"fas fa-exclamation-triangle text-warning"}}],this.injector),t=this.$modal.open(u,{size:"lg",backdrop:"static",injector:r});try{return yield t.result,!0}catch{return!1}})}static \u0275fac=function(t){return new(t||n)};static \u0275prov=a({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();export{S as a};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import{a as vt,b as $t,c as Ht,d as St}from"./chunk-EHWZNITX.js";import{a as Ct}from"./chunk-H2D3SCVU.js";import{a as Ot}from"./chunk-H7F7H5MW.js";import{t as q,w as wt}from"./chunk-73LLH6JC.js";import{a as Et}from"./chunk-TVEZZ2CK.js";import{b as B}from"./chunk-ZCGZM7LU.js";import{a as kt,b as xt}from"./chunk-ZT2XJVT5.js";import{m as _t,n as yt,t as U}from"./chunk-QZUDFUPG.js";import{c as pt,e as I}from"./chunk-2HDDFLX5.js";import"./chunk-BGCYR25X.js";import{C as ut,D as bt,c as mt,e as ft,l as ht}from"./chunk-Z62MEN4O.js";import{b as gt}from"./chunk-MXLTCL2C.js";import{E as O,F as H,H as N,K as F,j as ct}from"./chunk-M6KB66ZD.js";import{Ab as S,Cb as rt,Db as at,Eb as lt,Ec as r,Fb as _,Fc as l,Gb as a,Gc as X,Hb as d,Ib as m,Rb as E,Xb as y,Za as o,Zb as p,aa as g,ea as st,ga as u,ha as b,hb as ot,ic as dt,jc as Y,kc as C,lc as M,mb as G,mc as V,n as nt,nb as R,sa as k,yb as $,zb as x,zc as Q}from"./chunk-MKV5RAJQ.js";import{a as j,b as K,d as et,g as it,h as w}from"./chunk-B4AJQJMI.js";var Dt=it(Ht(),1);var Mt=it(Ot(),1);var Tt=(s,v)=>({"fa-trash":s,"fa-cog fa-spin":v});function Ft(s,v){s&1&&(a(0,"div",13),m(1,"i",20),d())}function Ut(s,v){if(s&1){let t=E();a(0,"li",9)(1,"span"),C(2),r(3,"date"),m(4,"br"),a(5,"span",21),C(6),r(7,"date"),d()(),a(8,"span",22)(9,"button",25),r(10,"translate"),r(11,"translate"),y("click",function(){let i=u(t).$implicit,n=p(2);return b(n.restore(i.id))}),m(12,"i",26),d(),a(13,"button",27),r(14,"translate"),r(15,"translate"),y("click",function(){let i=u(t).$implicit,n=p(2);return b(n.download(i.id))}),m(16,"i",28),d(),a(17,"button",23),r(18,"translate"),r(19,"translate"),y("click",function(){let i=u(t).$implicit,n=p(2);return b(n.delete(i.id))}),m(20,"i",24),d()()()}if(s&2){let t=v.$implicit,e=p(2);o(2),V(" ",X(3,16,t.timestamp,"mediumDate")),o(4),M(X(7,19,t.timestamp,"shortTime")),o(3),_("disabled",e.clicked()||e.deleting())("ngbTooltip",l(10,22,"config.restore.copy_to_editor"))("openDelay",150),$("aria-label",l(11,24,"config.restore.copy_to_editor")),o(4),_("disabled",e.clicked()||e.deleting())("ngbTooltip",l(14,26,"form.button_download"))("openDelay",150),$("aria-label",l(15,28,"form.button_download")),o(4),_("disabled",e.clicked()||e.deleting())("ngbTooltip",l(18,30,"form.button_delete"))("openDelay",150),$("aria-label",l(19,32,"form.button_delete")),o(3),Y(Q(34,Tt,t.id!==e.deleting(),t.id===e.deleting()))}}function qt(s,v){if(s&1){let t=E();a(0,"ul",14),at(1,Ut,21,37,"li",9,rt),a(3,"li",9)(4,"span"),C(5),r(6,"translate"),m(7,"br"),a(8,"span",21),C(9),r(10,"translate"),d()(),a(11,"span",22)(12,"button",23),r(13,"translate"),r(14,"translate"),y("click",function(){u(t);let i=p();return b(i.deleteAllBackups())}),m(15,"i",24),d()()()()}if(s&2){let t=p();o(),lt(t.backupList()),o(4),V(" ",l(6,8,"form.button_delete_all")),o(4),M(l(10,10,"common.labels.no_confirmation")),o(3),_("disabled",t.clicked()||t.deleting())("ngbTooltip",l(13,12,"form.button_delete_all"))("openDelay",150),$("aria-label",l(14,14,"form.button_delete")),o(3),Y(Q(16,Tt,t.deleting()!=="all",t.deleting()==="all"))}}var Bt=(()=>{class s{$activeModal=g(_t);$api=g(F);$router=g(I);$toastr=g(N);$translate=g(O);modalData=g(q);currentConfig=this.modalData.currentConfig;fromSettings=this.modalData.fromSettings??!1;loading=k(!0,{});backupList=k([],{});clicked=k(!1,{});deleting=k(null,{});ngOnInit(){this.getConfigBackups()}getConfigBackups(){return w(this,null,function*(){try{let t=yield this.$api.get("/config-editor/backups");this.loading.set(!1),this.backupList.set(t)}catch(t){this.loading.set(!1),console.error(t),this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),this.dismissModal()}})}restore(t){return this.$activeModal.close(t)}download(t){return w(this,null,function*(){this.clicked.set(!0);try{let e=yield this.$api.get(`/config-editor/backups/${t}`),i=JSON.stringify(e,null,4),n=new Blob([i],{type:"application/json"}),f=`config-backup-${t}.json`;(0,Mt.saveAs)(n,f),this.clicked.set(!1)}catch(e){this.clicked.set(!1),this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e)}})}downloadCurrentConfig(){let t=`data:text/json;charset=utf-8,${encodeURIComponent(this.currentConfig)}`,e=document.createElement("a");e.setAttribute("href",t),e.setAttribute("download","config.json"),document.body.appendChild(e),e.click(),e.remove()}delete(t){return w(this,null,function*(){this.deleting.set(t);try{yield this.$api.delete(`/config-editor/backups/${t}`),yield this.getConfigBackups(),this.deleting.set(null)}catch(e){this.deleting.set(null),this.$toastr.error(e.error?.message||e.message,this.$translate.instant("toast.title_error")),console.error(e)}})}deleteAllBackups(){return w(this,null,function*(){this.deleting.set("all");try{yield this.$api.delete("/config-editor/backups"),this.$toastr.success(this.$translate.instant("config.restore.toast_backups_deleted"),this.$translate.instant("toast.title_success")),this.backupList.set([]),this.deleting.set(null)}catch(t){this.$toastr.error(t.error?.message||t.message,this.$translate.instant("toast.title_error")),console.error(t),this.deleting.set(null)}})}dismissModal(){this.fromSettings&&this.$router.navigate(["/settings"]),this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=R({type:s,selectors:[["ng-component"]],decls:40,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-history","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"grey-text"],[1,"btn","btn-primary","m-0","ms-3","py-1",3,"click","disabled"],[1,"fas","fa-arrow-right"],[1,"text-center","primary-text"],[1,"list-group","list-group-box","mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-end"],[1,"fa","fa-cog","fa-spin","mt-3",2,"font-size","75px"],[1,"grey-text","small"],[2,"display","flex","flex-wrap","nowrap"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-3","py-1",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-history"],["placement","bottom","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2",3,"click","disabled","ngbTooltip","openDelay"],[1,"fas","fa-download"]],template:function(e,i){e&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),C(3),r(4,"translate"),d(),a(5,"button",3),r(6,"translate"),y("click",function(){return i.dismissModal()}),d()(),a(7,"div",4)(8,"div",5),m(9,"i",6),d(),a(10,"ul",7)(11,"li"),C(12),r(13,"translate"),d(),a(14,"li"),C(15),r(16,"translate"),d()(),a(17,"ul",8)(18,"li",9)(19,"div")(20,"span"),C(21),r(22,"translate"),d(),m(23,"br"),a(24,"small",10),C(25),r(26,"translate"),d()(),a(27,"button",11),r(28,"translate"),y("click",function(){return i.downloadCurrentConfig()}),m(29,"i",12),d()()(),x(30,Ft,2,0,"div",13)(31,qt,16,19,"ul",14),d(),a(32,"div",15),m(33,"div",16),a(34,"div",17)(35,"button",18),r(36,"translate"),y("click",function(){return i.dismissModal()}),C(37),r(38,"translate"),d()(),m(39,"div",19),d()()),e&2&&(o(3),M(l(4,13,"config.restore.title")),o(2),_("disabled",i.clicked()||i.deleting()),$("aria-label",l(6,15,"form.button_close")),o(7),M(l(13,17,"config.restore.help_1")),o(3),M(l(16,19,"config.restore.help_2")),o(6),M(l(22,21,"form.button_download")),o(4),M(l(26,23,"config.restore.download")),o(2),_("disabled",i.clicked()||i.deleting()),$("aria-label",l(28,25,"backup.backup_now")),o(3),S(i.loading()?30:i.backupList().length?31:-1),o(5),_("disabled",i.clicked()||i.deleting()),$("aria-label",l(36,27,"form.button_close")),o(2),V(" ",l(38,29,"form.button_close")," "))},dependencies:[U,bt,ct,H],encapsulation:2})}return s})();function zt(s,v){if(s&1){let t=E();a(0,"button",13),r(1,"translate"),r(2,"translate"),y("click",function(){u(t);let i=p();return b(i.onCancelRestore())}),m(3,"i",14),d()}if(s&2){let t=p();_("disabled",t.saveInProgress())("openDelay",150)("ngbTooltip",l(1,4,"form.button_cancel")),$("aria-label",l(2,6,"form.button_cancel"))}}function Lt(s,v){if(s&1){let t=E();a(0,"button",15),r(1,"translate"),r(2,"translate"),y("click",function(){u(t);let i=p();return b(i.onRestore())}),m(3,"i",16),d()}s&2&&(_("openDelay",150)("ngbTooltip",l(1,3,"form.button_restore")),$("aria-label",l(2,5,"form.button_restore")))}function Jt(s,v){if(s&1){let t=E();a(0,"button",15),r(1,"translate"),r(2,"translate"),y("click",function(){u(t);let i=p();return b(i.toggleSideBySide())}),m(3,"i",17),d()}if(s&2){let t=p();_("openDelay",150)("ngbTooltip",l(1,7,t.renderSideBySide()?"config.restore.view_inline":"config.restore.view_side_by_side")),$("aria-label",l(2,9,t.renderSideBySide()?"config.restore.view_inline":"config.restore.view_side_by_side")),o(3),dt("fa-columns",!t.renderSideBySide())("fa-bars",t.renderSideBySide())}}function Wt(s,v){s&1&&m(0,"i",8)}function Kt(s,v){s&1&&m(0,"i",9)}function Gt(s,v){if(s&1){let t=E();a(0,"ngx-monaco-editor",18),y("onInit",function(i){u(t);let n=p();return b(n.onEditorInit(i))})("keydown.control.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())})("keydown.meta.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())}),d()}if(s&2){let t=p();_("options",t.editorOptions)("model",t.monacoEditorModel)}}function Yt(s,v){if(s&1){let t=E();a(0,"ngx-monaco-diff-editor",19),y("onInit",function(i){u(t);let n=p();return b(n.onInitDiffEditor(i))})("keydown.control.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())})("keydown.meta.s",function(i){u(t);let n=p();return i.preventDefault(),b(n.onSave())}),d()}if(s&2){let t=p();_("options",t.editorOptions)("originalModel",t.diffOriginalModel)("modifiedModel",t.diffModifiedModel)}}function Qt(s,v){if(s&1){let t=E();a(0,"textarea",20),y("ngModelChange",function(i){u(t);let n=p();return b(n.homebridgeConfig.set(i))}),C(1," "),d()}if(s&2){let t=p();_("ngModel",t.homebridgeConfig())}}var De=(()=>{class s{injector=g(st);$api=g(F);$md=g(Ct);$modal=g(yt);$monacoEditor=g(Et);$renderer=g(ot);$route=g(pt);$router=g(I);$settings=g(gt);$toastr=g(N);$translate=g(O);editorDecorations=[];lastHeight;visualViewPortEventCallback;latestSavedConfig;childBridgesToRestart=[];hbPendingRestart=!1;isDebugModeEnabled=this.$settings.isFeatureEnabled("childBridgeDebugMode");isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");homebridgeConfig=k("",{});originalConfig=k("",{});saveInProgress=k(!1,{});isMobile=k(!1,{});monacoEditor;editorOptions;monacoEditorModel;diffOriginalModel;diffModifiedModel;renderSideBySide=k(!1,{});constructor(){this.isMobile.set(!!this.$md.detect.mobile())}ngOnInit(){let t=this.$translate.instant("menu.config_json_editor");this.$settings.setPageTitle(t),this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light",renderSideBySide:this.renderSideBySide(),renderIndicators:!0,ignoreTrimWhitespace:!1,glyphMargin:!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(n=>{this.homebridgeConfig.set(n.config),this.latestSavedConfig=JSON.parse(n.config),this.diffModifiedModel&&this.updateDiffModels()}),this.monacoEditorModel={value:"{}",language:"json",uri:window.monaco?window.monaco.Uri.parse("a://homebridge/config.json"):void 0},this.diffOriginalModel={code:"",language:"json"},this.diffModifiedModel={code:this.homebridgeConfig()||"{}",language:"json"},window.monaco?this.setMonacoEditorModel():this.waitForMonaco();let{action:i}=this.$router.parseUrl(this.$router.url).queryParams;if(i){switch(i){case"restore":{this.onRestore(!0);break}}this.$router.navigate([],{queryParams:{},replaceUrl:!0,queryParamsHandling:""})}}waitForMonaco(){return w(this,null,function*(){try{yield nt(this.$monacoEditor.readyEvent),this.setMonacoEditorModel()}catch(t){console.error("Failed to wait for monaco ready event:",t)}})}onEditorInit(t){window.editor=t,this.monacoEditor=t;let e=this.monacoEditor.getModel();e&&e.setValue(this.homebridgeConfig())}onInitDiffEditor(t){this.monacoEditor=t.getModifiedEditor(),this.updateDiffModels(),window.editor=t}updateDiffModels(){if(this.diffOriginalModel&&(this.diffOriginalModel.code=this.originalConfig()||""),this.diffModifiedModel&&(this.diffModifiedModel.code=this.homebridgeConfig()||"{}"),window.editor&&window.editor.getOriginalEditor){let t=window.editor.getOriginalEditor(),e=window.editor.getModifiedEditor();if(t&&e){let i=t.getModel(),n=e.getModel();i&&i.setValue(this.originalConfig()||""),n&&n.setValue(this.homebridgeConfig()||"{}")}}}onSave(){return w(this,null,function*(){if(!this.saveInProgress()){this.monacoEditor&&(this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[])),this.saveInProgress.set(!0);try{if(!this.isMobile()){yield this.monacoEditor.getAction("editor.action.formatDocument").run();let e=window.monaco.editor.getModelMarkers({owner:"json"});for(let i of e)if(i.message==="Duplicate object key"){this.saveInProgress.set(!1),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"));return}this.homebridgeConfig.set(this.monacoEditor.getModel().getValue())}let t=this.parseConfigFromEditor();this.homebridgeConfig.set(JSON.stringify(t,null,4)),typeof t.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(t.bridge.username)?t.accessories&&!Array.isArray(t.accessories)?this.$toastr.error(this.$translate.instant("config.config_accessory_must_be_array"),this.$translate.instant("toast.title_error")):t.platforms&&!Array.isArray(t.platforms)?this.$toastr.error(this.$translate.instant("config.config_platform_must_be_array"),this.$translate.instant("toast.title_error")):t.platforms&&Array.isArray(t.platforms)&&!this.validateSection(t.platforms,"platform")||t.accessories&&Array.isArray(t.accessories)&&!this.validateSection(t.accessories,"accessory")||t.plugins&&Array.isArray(t.plugins)&&!this.validatePlugins(t.plugins,"plugins")||t.disabledPlugins&&Array.isArray(t.disabledPlugins)&&!this.validatePlugins(t.disabledPlugins,"disabledPlugins")||(yield this.saveConfig(t),this.originalConfig.set("")):this.$toastr.error(this.$translate.instant("config.config_username_error"),this.$translate.instant("toast.title_error"))}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error"))}this.saveInProgress.set(!1)}})}onRestore(t=!1){return w(this,null,function*(){let e=G([{provide:q,useValue:{currentConfig:this.homebridgeConfig(),fromSettings:t}}],this.injector),i=this.$modal.open(Bt,{size:"lg",backdrop:"static",injector:e});try{let n=yield i.result;try{this.originalConfig()||(this.originalConfig.set(this.homebridgeConfig()),this.updateDiffModels());let f=yield this.$api.get(`/config-editor/backups/${n}`);this.$toastr.info(this.$translate.instant("config.restore.confirm"),this.$translate.instant("config.title_backup_loaded")),this.homebridgeConfig.set(JSON.stringify(f,null,4)),this.updateDiffModels(),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}]))}catch(f){console.error(f);let h=f?.error?.message||this.$translate.instant("backup.load_error");this.$toastr.error(h,this.$translate.instant("toast.title_error"))}}catch{}})}onCancelRestore(){if(window.editor&&window.editor.dispose)try{window.editor.dispose(),window.editor=void 0}catch{}this.homebridgeConfig.set(this.originalConfig()),this.originalConfig.set(""),this.renderSideBySide()&&this.toggleSideBySide(),this.updateDiffModels(),this.onRestore()}toggleSideBySide(){this.renderSideBySide.set(!this.renderSideBySide()),this.editorOptions=K(j({},this.editorOptions),{renderSideBySide:this.renderSideBySide()})}ngOnDestroy(){let t=document.querySelector(".content");this.$renderer.removeStyle(t,"height"),window.visualViewport&&(window.visualViewport.removeEventListener("resize",this.visualViewPortEventCallback,!0),this.$md.enableTouchMove());try{if(window.editor&&window.editor.dispose&&(window.editor.dispose(),window.editor=void 0),window.monaco){let e=window.monaco.Uri.parse("file:///original.json"),i=window.monaco.Uri.parse("file:///modified.json"),n=window.monaco.editor.getModel(e);n&&n.dispose();let f=window.monaco.editor.getModel(i);f&&f.dispose();let T=(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas||[]).filter(D=>D.uri!=="http://homebridge/config.json");window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:T})}this.monacoEditor&&this.monacoEditor.dispose()}catch{}}validateSection(t,e){for(let i of t){if(typeof i!="object"||i===null||Array.isArray(i))return this.$toastr.error(this.$translate.instant("config.error_blocks_objects",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(JSON.stringify(i)),!1;if(!(e in i))return this.$toastr.error(this.$translate.instant("config.error_blocks_type",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(JSON.stringify(i)),!1;if(typeof i[e]!="string")return this.$toastr.error(this.$translate.instant("config.error_string_type",{type:e}),this.$translate.instant("toast.title_error")),this.highlightOffendingArrayItem(JSON.stringify(i)),!1}return!0}validatePlugins(t,e){for(let i of t)if(typeof i!="string")return this.$toastr.error(this.$translate.instant("config.error_string_array",{key:e}),this.$translate.instant("toast.title_error")),!1;return!0}highlightOffendingArrayItem(t){this.monacoEditor&&(t=JSON.stringify(t,null,4).split(`
|
|
2
|
+
`).map(e=>` ${e}`).join(`
|
|
3
|
+
`),requestAnimationFrame(()=>{let e=this.monacoEditor.getModel().findMatches(t);if(e.length){let i=e[0].range,n=new monaco.Range(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn);this.editorDecorations=this.monacoEditor.deltaDecorations(this.editorDecorations,[{range:n,options:{isWholeLine:!0,linesDecorationsClassName:"hb-monaco-editor-line-error"}}])}}))}setMonacoEditorModel(){if(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas.some(i=>i.uri==="http://homebridge/config.json"))return;let t=monaco.Uri.parse("a://homebridge/config.json"),e=St(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported});window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({allowComments:!1,validate:!0,schemas:[{uri:"http://homebridge/config.json",fileMatch:[t.toString()],schema:{type:"object",additionalProperties:!1,required:["bridge"],properties:{bridge:{type:"object",additionalProperties:!1,required:["name","username","port","pin"],properties:j({name:{type:"string",title:this.$translate.instant("settings.name"),description:`The Homebridge instance name.
|
|
4
|
+
This should be unique if you are running multiple instances of Homebridge.`,default:"Homebridge"},username:{type:"string",title:this.$translate.instant("users.label_username"),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",title:this.$translate.instant("settings.network.port_hb"),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",title:this.$translate.instant("child_bridge.config.manufacturer"),description:"The bridge manufacturer to be displayed in HomeKit."},firmwareRevision:{type:"string",title:this.$translate.instant("child_bridge.config.firmware"),description:"The bridge firmware version to be displayed in HomeKit."},model:{type:"string",title:this.$translate.instant("child_bridge.config.model"),description:"The bridge model to be displayed in HomeKit."},advertiser:{type:"string",title:this.$translate.instant("settings.mdns_advertiser"),description:this.$translate.instant("settings.mdns_advertiser_help"),oneOf:[{title:"Avahi",enum:["avahi"]},{title:"Bonjour HAP",enum:["bonjour-hap"]},{title:"Ciao",enum:["ciao"]},{title:"Resolved",enum:["resolved"]}]},bind:{title:this.$translate.instant("settings.network.title_network_interfaces"),description:`A string or an array of strings with the name(s) of the network interface(s) Homebridge should bind to.
|
|
10
|
+
Requires Homebridge v1.3 or later.`,type:["string","array"],items:{type:"string",description:this.$translate.instant("status.widget.network.network_interface")}}},this.isMatterSupported?{matter:{type:"object",additionalProperties:!1,title:this.$translate.instant("settings.matter.title"),description:"Matter-specific configuration for the main bridge.",properties:{port:{type:"number",title:this.$translate.instant("settings.matter.port"),description:this.$translate.instant("settings.matter.port_desc"),minimum:1025,maximum:65534}}}}:{}),default:{name:"Homebridge",username:"0E:89:49:64:91:86",port:51173,pin:"6302-7655"}},mdns:{type:"object",additionalProperties:!1,properties:{interface:{type:"string",title:this.$translate.instant("status.widget.network.network_interface"),description:`The interface or IP address of the interface you want Homebridge to listen on.
|
|
11
|
+
This is useful if your server has multiple interfaces.
|
|
12
|
+
Deprecated as of Homebridge v1.3.0 - use bridge.bind instead.`},legacyAdvertiser:{type:"boolean",title:"Legacy mDNS Advertiser",description:"Set to false to use the new mdns library, ciao."}},default:{legacyAdvertiser:!1}},ports:{type:"object",additionalProperties:!1,title:"Port Range",description:"The range of ports that should be used for external accessories like cameras and TVs.",required:["start","end"],properties:{start:{type:"number",default:52100,minimum:1025,maximum:65534,title:this.$translate.instant("settings.network.port_start"),description:this.$translate.instant("settings.network.port_start_desc")},end:{type:"number",default:52150,minimum:1025,maximum:65534,title:this.$translate.instant("settings.network.port_end"),description:this.$translate.instant("settings.network.port_end_desc")}},default:{start:52100,end:52150}},platforms:{type:"array",title:"Platforms",description:`Any plugin that exposes a platform should have its config entered in this array.
|
|
13
|
+
Separate each plugin config block using a comma.`,items:{type:"object",required:["platform"],anyOf:[{type:"object",required:["platform"],title:this.$translate.instant("plugins.button_settings"),properties:{platform:{type:"string",title:"Platform Name",description:"This is used by Homebridge to identify which plugin this platform belongs to.",not:{enum:["config"]}},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the platform."},_bridge:e}},{type:"object",additionalProperties:!1,properties:K(j({platform:{type:"string",title:"Platform Name",description:`Homebridge UI platform name must be set to "config".
|
|
14
|
+
Do not change!`,const:"config"},name:{title:this.$translate.instant("accessories.name"),type:"string",default:"Homebridge UI",minLength:1,description:"The name of the Homebridge instance."},port:{title:this.$translate.instant("settings.network.port_ui"),type:"integer",default:8080,minimum:1025,maximum:65535,description:this.$translate.instant("settings.network.port_ui_desc")},auth:{type:"string",default:"form",title:this.$translate.instant("settings.security.auth"),description:this.$translate.instant("settings.security.auth_desc"),oneOf:[{title:"Require Authentication",enum:["form"]},{title:"None",enum:["none"]}]},theme:{title:this.$translate.instant("settings.display.theme"),description:"The theme used for the UI.",type:"string",default:"orange",oneOf:[{title:this.$translate.instant("settings.display.orange"),enum:["orange"]},{title:this.$translate.instant("settings.display.red"),enum:["red"]},{title:this.$translate.instant("settings.display.pink"),enum:["pink"]},{title:this.$translate.instant("settings.display.purple"),enum:["purple"]},{title:this.$translate.instant("settings.display.deep_purple"),enum:["deep-purple"]},{title:this.$translate.instant("settings.display.indigo"),enum:["indigo"]},{title:this.$translate.instant("settings.display.blue"),enum:["blue"]},{title:this.$translate.instant("settings.display.bluegrey"),enum:["blue-grey"]},{title:this.$translate.instant("settings.display.cyan"),enum:["cyan"]},{title:this.$translate.instant("settings.display.green"),enum:["green"]},{title:this.$translate.instant("settings.display.teal"),enum:["teal"]},{title:this.$translate.instant("settings.display.grey"),enum:["grey"]},{title:this.$translate.instant("settings.display.brown"),enum:["brown"]}]},lightingMode:{title:this.$translate.instant("settings.display.lighting_mode"),description:"The lighting mode used for the UI.",type:"string",default:"auto",oneOf:[{title:this.$translate.instant("accessories.control.auto"),enum:["auto"]},{title:this.$translate.instant("settings.display.light"),enum:["light"]},{title:this.$translate.instant("settings.display.dark"),enum:["dark"]}]},menuMode:{title:this.$translate.instant("settings.display.menu_mode"),description:"Modes for the UI side menu.",type:"string",default:"default",oneOf:[{title:this.$translate.instant("settings.display.menu_default"),enum:["default"]},{title:this.$translate.instant("settings.display.menu_freeze"),enum:["freeze"]}]},temp:{title:this.$translate.instant("settings.linux.temp"),type:"string",description:this.$translate.instant("settings.linux.temp_desc")},tempUnits:{title:this.$translate.instant("settings.display.temp_units"),description:"The units used to display the temperature.",type:"string",default:"c",oneOf:[{title:this.$translate.instant("settings.display.temp_units.c"),enum:["c"]},{title:this.$translate.instant("settings.display.temp_units.f"),enum:["f"]}]},lang:{title:this.$translate.instant("settings.display.lang"),type:"string",default:"auto",description:"The language used for the UI.",oneOf:[{title:this.$translate.instant("form.select.auto"),enum:["auto"]},{title:"Bulgarian (bg)",enum:["bg"]},{title:"Catalan (ca)",enum:["ca"]},{title:"Chinese - Simplified (zh-CN)",enum:["zh-CN"]},{title:"Chinese - Traditional (zh-TW)",enum:["zh-TW"]},{title:"Czech (cs)",enum:["cs"]},{title:"Dutch (nl)",enum:["nl"]},{title:"English (en)",enum:["en"]},{title:"Finnish (fi)",enum:["fi"]},{title:"French (fr)",enum:["fr"]},{title:"German (de)",enum:["de"]},{title:"Hebrew (he)",enum:["he"]},{title:"Hungarian (hu)",enum:["hu"]},{title:"Indonesian (id)",enum:["id"]},{title:"Italian (it)",enum:["it"]},{title:"Japanese (ja)",enum:["ja"]},{title:"Korean (ko)",enum:["ko"]},{title:"Macedonian (mk)",enum:["mk"]},{title:"Norwegian (no)",enum:["no"]},{title:"Polish (pl)",enum:["pl"]},{title:"Portuguese (Brazil)",enum:["pt-BR"]},{title:"Portuguese (Portugal)",enum:["pt"]},{title:"Russian (ru)",enum:["ru"]},{title:"Slovenian (sl)",enum:["sl"]},{title:"Spanish (es)",enum:["es"]},{title:"Swedish (sv)",enum:["sv"]},{title:"Thai (th)",enum:["th"]},{title:"Turkish (tr)",enum:["tr"]},{title:"Ukrainian (uk)",enum:["uk"]}]},wallpaper:{title:this.$translate.instant("settings.display.wallpaper"),description:"The full path to the .jpg file.",type:"string"},homebridgePackagePath:{title:this.$translate.instant("settings.network.hb_package"),type:"string",description:this.$translate.instant("settings.network.hb_package_desc")},host:{type:"string",pattern:"^[^{}/ :\\\\]+(?::\\d+)?$",title:this.$translate.instant("settings.network.host"),description:this.$translate.instant("settings.network.host_desc")},sessionTimeoutInactivityBased:{type:"boolean",title:this.$translate.instant("settings.startup.session_inactivity_based"),description:this.$translate.instant("settings.startup.session_inactivity_based_desc")},sessionTimeout:{type:"integer",minimum:600,maximum:864e5,title:this.$translate.instant("settings.startup.session"),description:this.$translate.instant("settings.startup.session_desc")},log:{type:"object",additionalProperties:!1,title:"Log Settings",description:"The log settings for the Homebridge UI.",properties:{maxSize:{type:"integer",title:this.$translate.instant("settings.terminal.log_max"),description:this.$translate.instant("settings.terminal.log_max_desc"),minimum:-1},truncateSize:{type:"integer",title:this.$translate.instant("settings.terminal.log_truncate"),description:this.$translate.instant("settings.terminal.log_truncate_desc"),minimum:0}}},ssl:{type:"object",additionalProperties:!1,title:this.$translate.instant("settings.security.https"),description:this.$translate.instant("settings.security.https_desc"),properties:{key:{type:"string",title:this.$translate.instant("settings.security.key"),description:"The full path to the private key file."},cert:{type:"string",title:this.$translate.instant("settings.security.cert"),description:"The full path to the certificate file."},pfx:{title:this.$translate.instant("settings.security.pfx"),type:"string",description:"The full path to the PKCS#12 certificate file."},passphrase:{title:this.$translate.instant("settings.security.pass"),type:"string",description:"The passphrase for the PKCS#12 certificate file."}}},accessoryControl:{title:"Accessory Control Setup",type:"object",additionalProperties:!1,description:"The accessory control settings for the Homebridge UI.",properties:{debug:{title:this.$translate.instant("settings.accessory.debug"),type:"boolean",description:this.$translate.instant("settings.accessory.debug_desc")},instanceBlacklist:{title:this.$translate.instant("settings.security.ui_control"),type:"array",description:this.$translate.instant("settings.security.ui_control_desc"),items:{title:this.$translate.instant("users.label_username"),type:"string",pattern:"^([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}$"}}}},linux:{title:"Linux Server Commands",type:"object",additionalProperties:!1,description:"The Linux server commands for the Homebridge UI.",properties:{shutdown:{title:this.$translate.instant("settings.linux.shutdown"),type:"string",description:this.$translate.instant("settings.linux.shutdown_desc")},restart:{title:this.$translate.instant("settings.linux.restart"),type:"string",description:this.$translate.instant("settings.linux.restart_desc")}}}},this.$settings.originalWebroot!==globalThis.webroot.errorCode?{webroot:{title:this.$translate.instant("settings.network.webroot"),type:"string",description:this.$translate.instant("settings.network.webroot_desc")}}:{}),{proxyHost:{title:this.$translate.instant("settings.network.proxy"),type:"string",pattern:"^[^{}/ :\\\\]+(?::\\d+)?$",description:this.$translate.instant("settings.network.proxy_desc")},scheduledBackupPath:{title:this.$translate.instant("backup.settings_path"),description:"The full path to where the service should save daily scheduled backups archives.",type:"string"},scheduledBackupDisable:{title:"Disable Scheduled Backups",type:"boolean",description:"When enabled, the Homebridge UI will not create daily scheduled backups."},scheduledRestartCron:{type:"string",title:this.$translate.instant("settings.startup.scheduled_restart"),description:this.$translate.instant("settings.startup.scheduled_restart_desc")},disableServerMetricsMonitoring:{title:"Disable Server Metrics Monitoring",type:"boolean",description:"When enabled, the Homebridge UI will not collect or report CPU or memory stats."},enableMdnsAdvertise:{title:this.$translate.instant("settings.network.mdns_advertise"),type:"boolean",description:this.$translate.instant("settings.network.mdns_advertise_help")},plugins:{title:this.$translate.instant("menu.label_plugins"),type:"object",additionalProperties:!1,description:"Settings surrounding plugins that are used by the Homebridge UI.",properties:{hideUpdatesFor:{type:"array",title:this.$translate.instant("config.hide_plugin_updates"),description:"A list of plugin names for which frontend update notifications will be hidden.",items:{type:"string",title:this.$translate.instant("accessories.plugin"),pattern:"^(?:@[\\w-]+(?:\\.[\\w-]+)*/)?homebridge-[\\w-]+$"}},alwaysShowBetas:{type:"boolean",title:this.$translate.instant("settings.display.show_betas"),description:"When enabled, beta releases will be shown as available for Homebridge, the UI and plugins."}}},bridges:{type:"array",title:this.$translate.instant("child_bridge.bridges"),description:"Settings surrounding bridges that are used by the Homebridge UI.",items:{type:"object",additionalProperties:!1,required:["username"],properties:{username:{type:"string",title:this.$translate.instant("users.label_username"),description:'The MAC address of the bridge (e.g., "0E:02:9A:9D:44:45").',pattern:"^[0-9A-F]{2}(?::[0-9A-F]{2}){5}$"},hideHapAlert:{type:"boolean",title:this.$translate.instant("config.hide_hap_pairing"),description:"Hide the HAP pairing alert for this bridge."},hideMatterAlert:{type:"boolean",title:this.$translate.instant("config.hide_matter_pairing"),description:"Hide the Matter pairing alert for this bridge."},scheduledRestartCron:{type:"string",title:this.$translate.instant("settings.startup.scheduled_restart"),description:this.$translate.instant("settings.startup.scheduled_restart_desc")}}}},terminal:{type:"object",additionalProperties:!1,title:"Terminal Settings",description:"The terminal settings for the Homebridge UI.",properties:{persistence:{title:this.$translate.instant("settings.terminal.persistence"),type:"boolean",description:this.$translate.instant("settings.terminal.persistence_help"),default:!1},hideWarning:{title:this.$translate.instant("settings.terminal.warning"),type:"boolean",description:this.$translate.instant("settings.terminal.warning_help"),default:!1},bufferSize:{title:this.$translate.instant("settings.terminal.buffer_size"),type:"integer",description:this.$translate.instant("settings.terminal.buffer_size_help"),default:5e4,minimum:0}}}})}]}},accessories:{type:"array",title:this.$translate.instant("menu.label_accessories"),description:`Any plugin that exposes an accessory should have its config entered in this array.
|
|
15
|
+
Separate each plugin config block using a comma.`,items:{type:"object",required:["accessory","name"],title:this.$translate.instant("plugins.button_settings"),properties:{accessory:{type:"string",title:this.$translate.instant("child_bridge.config.accessory"),description:"This is used by Homebridge to identify which plugin this accessory belongs to."},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the accessory."},_bridge:e}}},plugins:{type:"array",title:this.$translate.instant("menu.label_plugins"),description:`An array of plugins that should be selectively enabled.
|
|
16
|
+
Remove this array to enable all plugins.`,items:{type:"string",title:this.$translate.instant("accessories.plugin"),description:`The full plugin npm package name.
|
|
17
|
+
Example: homebridge-dummy.`},default:["homebridge-config-ui-x"]},disabledPlugins:{type:"array",description:`An array of plugins that should be disabled.
|
|
18
|
+
Requires Homebridge v1.3 or later.`,items:{type:"string",title:this.$translate.instant("accessories.plugin"),description:`The full plugin npm package name.
|
|
19
|
+
Example: homebridge-dummy.`},default:[]}}}}]}),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(t){return w(this,null,function*(){try{let e=yield this.$api.post("/config-editor",t);this.homebridgeConfig.set(JSON.stringify(e,null,4)),yield this.detectSavesChangesForRestart()}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error"))}})}validateArraysEqual(t,e){if(t.length!==e.length)return!1;let i=[...t].sort(),n=[...e].sort();return i.every((f,h)=>f===n[h])}removePlatformsAndAccessories(t){let f=t,{accessories:e,platforms:i}=f;return et(f,["accessories","platforms"])}removeEmptyBridges(t){return t.filter(e=>e._bridge&&Object.keys(e._bridge).length>0).map(e=>e._bridge)}validateBridgesEqual(t,e){return t.length!==e.length?!1:t.every(i=>e.some(n=>B(i,n)))}detectConfigPlatformChanges(){try{let t=this.latestSavedConfig,e=JSON.parse(this.homebridgeConfig()),i=(t.platforms||[]).find(T=>T.platform==="config"),n=(e.platforms||[]).find(T=>T.platform==="config"),f=i?.webroot||"",h=n?.webroot||"";return f!==h&&(h=h?`/${h}`.replace(/\/+/g,"/").replace(/\/$/,""):"",h==="/"&&(h=""),this.$settings.setItem("webroot",h),n&&(h&&this.$settings.originalWebroot!==globalThis.webroot.errorCode?n.webroot=h:delete n.webroot,this.homebridgeConfig.set(JSON.stringify(e,null,4)),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig()))),!i&&n||i&&!n?!0:!i&&!n?!1:!B(i,n)}catch(t){return console.error("Error detecting config platform changes:",t),!1}}detectSavesChangesForRestart(){return w(this,null,function*(){let t=yield this.determineRestartType();if(t==="full"){let e=this.detectConfigPlatformChanges();yield this.performFullRestart(e)}else t==="child"&&(yield this.performChildBridgeRestart());this.latestSavedConfig=JSON.parse(this.homebridgeConfig())})}determineRestartType(){return w(this,null,function*(){if(this.hbPendingRestart)return"full";let t=this.latestSavedConfig,e=JSON.stringify(t,null,4),i=JSON.parse(this.homebridgeConfig()),n=this.homebridgeConfig();if(e===n&&!this.childBridgesToRestart.length)return this.$toastr.info(this.$translate.instant("config.no_restart"),this.$translate.instant("config.config_saved")),"none";if(!this.validateArraysEqual(Object.keys(t),Object.keys(i))||[...i.platforms||[],...i.accessories||[]].every(c=>!c._bridge||!Object.keys(c._bridge).length))return"full";let h=this.removePlatformsAndAccessories(t),T=this.removePlatformsAndAccessories(i);if(!B(h,T))return"full";let D=t.platforms||[],z=i.platforms||[],At=D.map(c=>c.platform),Pt=z.map(c=>c.platform);if(!this.validateArraysEqual(At,Pt))return"full";let L=t.accessories||[],J=i.accessories||[],jt=L.map(c=>c.accessory),Rt=J.map(c=>c.accessory);if(!this.validateArraysEqual(jt,Rt)||!this.validateBridgesEqual(this.removeEmptyBridges(D),this.removeEmptyBridges(z))||!this.validateBridgesEqual(this.removeEmptyBridges(L),this.removeEmptyBridges(J)))return"full";let Z=D.filter(c=>!B(c,z.find(A=>A.platform===c.platform))),Vt=L.filter(c=>!B(c,J.find(A=>A.accessory===c.accessory))),tt=[...Z,...Vt];if(Z.some(c=>c.platform==="config")||tt.some(c=>c.platform==="config"?!1:!c._bridge||Object.keys(c._bridge).length===0))return"full";try{let c=yield this.$api.get("/status/homebridge/child-bridges");return tt.forEach(A=>{let It=A._bridge.username.toUpperCase(),P=c.find(({username:W})=>W===It);if(P)this.childBridgesToRestart.some(W=>W.username===P.username)||this.childBridgesToRestart.push({name:P.name,username:P.username,matterSerialNumber:P.matterSerialNumber});else return"full"}),"child"}catch(c){return console.error("Error fetching child bridges:",c),"full"}})}performChildBridgeRestart(){return w(this,null,function*(){if(!this.childBridgesToRestart.length){yield this.performFullRestart(!1);return}let t=G([{provide:wt,useValue:{bridges:this.childBridgesToRestart}}],this.injector),e=this.$modal.open($t,{size:"lg",backdrop:"static",injector:t});try{yield e.result,this.childBridgesToRestart=[]}catch{}})}performFullRestart(t){return w(this,null,function*(){t&&(yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}));let e=this.$modal.open(vt,{size:"lg",backdrop:"static"});try{yield e.result,this.hbPendingRestart=!1,this.childBridgesToRestart=[]}catch{this.hbPendingRestart=!0}})}parseConfigFromEditor(){try{return JSON.parse(this.homebridgeConfig())}catch{let e=Dt.default.parse(this.homebridgeConfig());return this.homebridgeConfig.set(JSON.stringify(e,null,4)),this.monacoEditor&&this.monacoEditor.getModel().setValue(this.homebridgeConfig()),e}}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=R({type:s,selectors:[["ng-component"]],decls:18,vars:19,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","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"disabled","openDelay","ngbTooltip"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"openDelay","ngbTooltip"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-0",3,"click","disabled","openDelay","ngbTooltip"],[1,"fas","fa-floppy-disk"],[1,"fas","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","triggers","hover",1,"btn","btn-danger","waves-effect","my-0","me-2",3,"click","disabled","openDelay","ngbTooltip"],[1,"fas","fa-times"],["container","body","placement","bottom","triggers","hover",1,"btn","btn-elegant","waves-effect","my-0","me-2",3,"click","openDelay","ngbTooltip"],[1,"fas","fa-history"],[1,"fas"],[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(e,i){e&1&&(a(0,"div",0)(1,"div",1)(2,"div",2)(3,"h3",3),C(4),r(5,"translate"),d()(),a(6,"div",4),x(7,zt,4,8,"button",5),x(8,Lt,4,7,"button",6),x(9,Jt,4,11,"button",6),a(10,"button",7),r(11,"translate"),r(12,"translate"),y("click",function(){return i.onSave()}),x(13,Wt,1,0,"i",8),x(14,Kt,1,0,"i",9),d()()(),x(15,Gt,1,2,"ngx-monaco-editor",10),x(16,Yt,1,3,"ngx-monaco-diff-editor",11),x(17,Qt,2,1,"textarea",12),d()),e&2&&(o(4),M(l(5,13,"menu.config_json_editor")),o(3),S(i.originalConfig()?7:-1),o(),S(i.originalConfig()?-1:8),o(),S(!i.isMobile()&&i.originalConfig()?9:-1),o(),_("disabled",i.saveInProgress())("openDelay",150)("ngbTooltip",l(11,15,"form.button_save")),$("aria-label",l(12,17,"form.button_save")),o(3),S(i.saveInProgress()?-1:13),o(),S(i.saveInProgress()?14:-1),o(),S(!i.isMobile()&&!i.originalConfig()?15:-1),o(),S(!i.isMobile()&&i.originalConfig()?16:-1),o(),S(i.isMobile()?17:-1))},dependencies:[U,kt,xt,ut,mt,ft,ht,H],encapsulation:2})}return s})();export{De as ConfigEditorComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as W}from"./chunk-
|
|
1
|
+
import{a as W}from"./chunk-IPCY24VP.js";import{e as T}from"./chunk-2HDDFLX5.js";import{a as C}from"./chunk-BGCYR25X.js";import"./chunk-5DKBUEKC.js";import{b as P}from"./chunk-MXLTCL2C.js";import{E as B,F as N,H as U,K as A}from"./chunk-M6KB66ZD.js";import{Ab as v,Ec as c,Fc as l,Jb as a,Kb as n,Lb as f,Lc as E,Rb as O,Rc as M,Yb as R,Za as e,Zb as u,aa as m,ga as y,ha as I,ic as D,jc as b,kc as o,lc as d,ma as S,mc as _,nb as k,sa as p,w as x,zb as h}from"./chunk-MKV5RAJQ.js";import{h as $}from"./chunk-B4AJQJMI.js";function j(i,g){if(i&1&&(a(0,"div",7),o(1),n()),i&2){let t=u();e(),d(t.error())}}function q(i,g){if(i&1&&(a(0,"p",9),o(1),c(2,"translate"),n(),a(3,"div",10)(4,"div",11)(5,"span"),f(6,"i"),o(7),c(8,"translate"),n()(),a(9,"div",11)(10,"span"),f(11,"i"),o(12),c(13,"translate"),n()()()),i&2){let t=u();e(),d(l(2,9,"restart.please_wait_while_server_restarts")),e(5),b(t.uiIcon()),e(),_(" ",l(8,11,"restart.ui_online")," "),e(3),D("grey-text",!t.uiOnline()),e(),b(t.serviceIcon()),e(),_(" ",l(13,13,"restart.service_ready")," ")}}function z(i,g){if(i&1){let t=O();a(0,"p",14)(1,"button",15),R("click",function(){y(t);let s=u(2);return I(s.viewLogs())}),o(2),c(3,"translate"),n()()}i&2&&(e(2),d(l(3,1,"menu.tooltip_view_logs")))}function L(i,g){if(i&1&&(a(0,"div",8)(1,"p"),o(2),c(3,"translate"),n(),a(4,"p",12),o(5),c(6,"translate"),a(7,"span",13),o(8),n()(),h(9,z,4,3,"p",14),n()),i&2){let t=u();e(2),d(l(3,4,"restart.server_is_taking_long_time_to_restart")),e(3),_(" ",l(6,6,"restart.label_restart_command_executed"),": "),e(3),d(t.resp().command||"End Process"),e(),v(t.uiOnline()?9:-1)}}var et=(()=>{class i{$api=m(A);$router=m(T);$settings=m(P);$toastr=m(U);$translate=m(B);$ws=m(W);destroyRef=m(S);uiOnline=p(!1,{});error=p(!1,{});resp=p({},{});timeout=p(!1,{});uiIcon=E(()=>this.uiOnline()?"far fa-check-circle":"fas fa-spinner fa-spin",{});serviceIcon=E(()=>this.uiOnline()?"fas fa-spinner fa-spin":"far fa-circle",{});io;webrootChanged=!1;statusCheckActive=p(!1,{});ngOnInit(){this.io=this.$ws.connectToNamespace("status"),this.io.connected.subscribe(()=>{this.io.socket.emit("monitor-server-status"),this.$settings.getAppSettings().catch(()=>{})}),this.io.socket.on("homebridge-status",s=>{if(this.statusCheckActive()&&(this.uiOnline.set(!0),s.status==="ok"||s.status==="pending"))if(this.$toastr.success(this.$translate.instant("restart.toast_server_restarted"),this.$translate.instant("toast.title_success")),this.webrootChanged&&!M()){let w=this.$settings.webroot?.replace(/^\/+|\/+$/g,"")||"";window.location.href=w?`/${w}/`:"/"}else this.$router.navigate(["/"])}),this.$router.parseUrl(this.$router.url).queryParams.restarting==="true"?(this.uiOnline.set(!0),this.checkIfServerUp()):this.performRestart()}ngOnDestroy(){this.io.end(),this.statusCheckActive.set(!1)}viewLogs(){this.$router.navigate(["/logs"])}performRestart(){return $(this,null,function*(){try{let t=this.$settings.originalWebroot||"",r=this.$settings.webroot||"";this.webrootChanged=t!==r&&t!==globalThis.webroot.errorCode,this.webrootChanged&&(yield this.$api.put("/server/webroot",{webroot:r}));try{let s=yield this.$api.put("/server/restart",{});this.resp.set(s),this.checkIfServerUp(),s.restartingUI||this.uiOnline.set(!0)}catch(s){console.error(s),this.error.set(this.$translate.instant("restart.toast_server_restart_error")),this.$toastr.error(this.$translate.instant("restart.toast_server_restart_error"),this.$translate.instant("toast.title_error"))}}catch(t){console.error("Failed to update webroot:",t);try{let r=yield this.$api.put("/server/restart",{});this.resp.set(r),this.checkIfServerUp(),r.restartingUI||this.uiOnline.set(!0)}catch(r){console.error(r),this.error.set(this.$translate.instant("restart.toast_server_restart_error")),this.$toastr.error(this.$translate.instant("restart.toast_server_restart_error"),this.$translate.instant("toast.title_error"))}}})}checkIfServerUp(){x(7e3).pipe(C(this.destroyRef)).subscribe(()=>{this.statusCheckActive.set(!0)}),x(4e4).pipe(C(this.destroyRef)).subscribe(()=>{this.$toastr.warning(this.$translate.instant("restart.toast_server_restart_timeout"),this.$translate.instant("toast.title_warning"),{timeOut:1e4}),this.timeout.set(!0)})}static \u0275fac=function(r){return new(r||i)};static \u0275cmp=k({type:i,selectors:[["ng-component"]],decls:14,vars:8,consts:[[1,"d-flex","justify-content-between"],[1,"primary-text","m-0"],[1,"my-4","align-items-center",2,"max-width","1000px","margin","auto"],[1,"w-100","text-center","primary-text","mb-5"],[1,"fas","fa-power-off",2,"font-size","75px"],[1,"text-center"],[1,"primary-text","mb-4"],[1,"alert","alert-error","my-4"],[1,"alert","alert-warning","my-4"],[1,"grey-text"],[1,"justify-content-center","my-4"],[1,"restart-progress-box","primary-text"],[1,"grey-text","mb-0"],[1,"font-monospace"],[1,"mt-2","mb-0"],[1,"btn","btn-primary","mb-0",3,"click"]],template:function(r,s){r&1&&(a(0,"div",0)(1,"h3",1),o(2),c(3,"translate"),n()(),a(4,"div",2)(5,"div",3),f(6,"i",4),n(),a(7,"div",5)(8,"h4",6),o(9),c(10,"translate"),n(),h(11,j,2,1,"div",7)(12,q,14,15),h(13,L,10,8,"div",8),n()()),r&2&&(e(2),d(l(3,4,"menu.restart.title")),e(7),d(l(10,6,"restart.title_restart")),e(2),v(s.error()?11:12),e(2),v(s.timeout()?13:-1))},dependencies:[N],styles:[".restart-progress-box[_ngcontent-%COMP%]{font-size:22px;font-weight:300;margin-top:15px}"]})}return i})();export{et as RestartComponent};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import{w as ue}from"./chunk-73LLH6JC.js";import{m as du}from"./chunk-QZUDFUPG.js";import{e as Zu}from"./chunk-2HDDFLX5.js";import{b as Yu}from"./chunk-MXLTCL2C.js";import{E as Qu,F as lu,H as Wu,K as Xu}from"./chunk-M6KB66ZD.js";import{Ab as Ju,Cb as qu,Db as Gu,Eb as Ku,Ec as T,Fc as M,Jb as g,Kb as N,Lb as q,Yb as Z,Za as p,Zb as wu,aa as V,hc as Uu,kc as j,lc as nu,mc as Q,nb as fu,yb as tu,zb as zu}from"./chunk-MKV5RAJQ.js";import{a as Su,b as ku,e as He,h as Hu}from"./chunk-B4AJQJMI.js";var Ke=He((Pu,Nu)=>{(function(F,B){typeof Pu=="object"&&typeof Nu<"u"?Nu.exports=B():typeof define=="function"&&define.amd?define(B):F.JSON5=B()})(Pu,function(){"use strict";function F(u,e){return e={exports:{}},u(e,e.exports),e.exports}var B=F(function(u){var e=u.exports=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")();typeof __g=="number"&&(__g=e)}),l=F(function(u){var e=u.exports={version:"2.6.5"};typeof __e=="number"&&(__e=e)}),I=l.version,b=function(u){return typeof u=="object"?u!==null:typeof u=="function"},G=function(u){if(!b(u))throw TypeError(u+" is not an object!");return u},Iu=function(u){try{return!!u()}catch{return!0}},Bu=!Iu(function(){return Object.defineProperty({},"a",{get:function(){return 7}}).a!=7}),mu=B.document,ee=b(mu)&&b(mu.createElement),te=function(u){return ee?mu.createElement(u):{}},De=!Bu&&!Iu(function(){return Object.defineProperty(te("div"),"a",{get:function(){return 7}}).a!=7}),re=function(u,e){if(!b(u))return u;var r,D;if(e&&typeof(r=u.toString)=="function"&&!b(D=r.call(u))||typeof(r=u.valueOf)=="function"&&!b(D=r.call(u))||!e&&typeof(r=u.toString)=="function"&&!b(D=r.call(u)))return D;throw TypeError("Can't convert object to primitive value")},ne=Object.defineProperty,ie=Bu?Object.defineProperty:function(e,r,D){if(G(e),r=re(r,!0),G(D),De)try{return ne(e,r,D)}catch{}if("get"in D||"set"in D)throw TypeError("Accessors not supported!");return"value"in D&&(e[r]=D.value),e},ae={f:ie},oe=function(u,e){return{enumerable:!(u&1),configurable:!(u&2),writable:!(u&4),value:e}},iu=Bu?function(u,e,r){return ae.f(u,e,oe(1,r))}:function(u,e,r){return u[e]=r,u},Ce={}.hasOwnProperty,Tu=function(u,e){return Ce.call(u,e)},Fe=0,se=Math.random(),Ae=function(u){return"Symbol(".concat(u===void 0?"":u,")_",(++Fe+se).toString(36))},Ee=!1,ce=F(function(u){var e="__core-js_shared__",r=B[e]||(B[e]={});(u.exports=function(D,n){return r[D]||(r[D]=n!==void 0?n:{})})("versions",[]).push({version:l.version,mode:Ee?"pure":"global",copyright:"\xA9 2019 Denis Pushkarev (zloirock.ru)"})}),pu=ce("native-function-to-string",Function.toString),fe=F(function(u){var e=Ae("src"),r="toString",D=(""+pu).split(r);l.inspectSource=function(n){return pu.call(n)},(u.exports=function(n,C,A,w){var m=typeof A=="function";m&&(Tu(A,"name")||iu(A,"name",C)),n[C]!==A&&(m&&(Tu(A,e)||iu(A,e,n[C]?""+n[C]:D.join(String(C)))),n===B?n[C]=A:w?n[C]?n[C]=A:iu(n,C,A):(delete n[C],iu(n,C,A)))})(Function.prototype,r,function(){return typeof this=="function"&&this[e]||pu.call(this)})}),le=function(u){if(typeof u!="function")throw TypeError(u+" is not a function!");return u},Mu=function(u,e,r){if(le(u),e===void 0)return u;switch(r){case 1:return function(D){return u.call(e,D)};case 2:return function(D,n){return u.call(e,D,n)};case 3:return function(D,n,C){return u.call(e,D,n,C)}}return function(){return u.apply(e,arguments)}},vu="prototype",x=function(u,e,r){var D=u&x.F,n=u&x.G,C=u&x.S,A=u&x.P,w=u&x.B,m=n?B:C?B[e]||(B[e]={}):(B[e]||{})[vu],Y=n?l:l[e]||(l[e]={}),Du=Y[vu]||(Y[vu]={}),O,R,P,ru;n&&(r=e);for(O in r)R=!D&&m&&m[O]!==void 0,P=(R?m:r)[O],ru=w&&R?Mu(P,B):A&&typeof P=="function"?Mu(Function.call,P):P,m&&fe(m,O,P,u&x.U),Y[O]!=P&&iu(Y,O,ru),A&&Du[O]!=P&&(Du[O]=P)};B.core=l,x.F=1,x.G=2,x.S=4,x.P=8,x.B=16,x.W=32,x.U=64,x.R=128;var au=x,de=Math.ceil,Be=Math.floor,ju=function(u){return isNaN(u=+u)?0:(u>0?Be:de)(u)},me=function(u){if(u==null)throw TypeError("Can't call method on "+u);return u},pe=function(u){return function(e,r){var D=String(me(e)),n=ju(r),C=D.length,A,w;return n<0||n>=C?u?"":void 0:(A=D.charCodeAt(n),A<55296||A>56319||n+1===C||(w=D.charCodeAt(n+1))<56320||w>57343?u?D.charAt(n):A:u?D.slice(n,n+2):(A-55296<<10)+(w-56320)+65536)}},ve=pe(!1);au(au.P,"String",{codePointAt:function(e){return ve(this,e)}});var Ue=l.String.codePointAt,ge=Math.max,he=Math.min,be=function(u,e){return u=ju(u),u<0?ge(u+e,0):he(u,e)},$u=String.fromCharCode,Ou=String.fromCodePoint;au(au.S+au.F*(!!Ou&&Ou.length!=1),"String",{fromCodePoint:function(e){for(var r=arguments,D=[],n=arguments.length,C=0,A;n>C;){if(A=+r[C++],be(A,1114111)!==A)throw RangeError(A+" is not a valid code point");D.push(A<65536?$u(A):$u(((A-=65536)>>10)+55296,A%1024+56320))}return D.join("")}});var Ze=l.String.fromCodePoint,ye=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,_e=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,xe=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/,gu={Space_Separator:ye,ID_Start:_e,ID_Continue:xe},d={isSpaceSeparator:function(e){return typeof e=="string"&&gu.Space_Separator.test(e)},isIdStartChar:function(e){return typeof e=="string"&&(e>="a"&&e<="z"||e>="A"&&e<="Z"||e==="$"||e==="_"||gu.ID_Start.test(e))},isIdContinueChar:function(e){return typeof e=="string"&&(e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||e==="$"||e==="_"||e==="\u200C"||e==="\u200D"||gu.ID_Continue.test(e))},isDigit:function(e){return typeof e=="string"&&/[0-9]/.test(e)},isHexDigit:function(e){return typeof e=="string"&&/[0-9A-Fa-f]/.test(e)}},hu,S,k,Fu,K,$,v,bu,ou,Se=function(e,r){hu=String(e),S="start",k=[],Fu=0,K=1,$=0,v=void 0,bu=void 0,ou=void 0;do v=we(),Ie[S]();while(v.type!=="eof");return typeof r=="function"?yu({"":ou},"",r):ou};function yu(u,e,r){var D=u[e];if(D!=null&&typeof D=="object")if(Array.isArray(D))for(var n=0;n<D.length;n++){var C=String(n),A=yu(D,C,r);A===void 0?delete D[C]:Object.defineProperty(D,C,{value:A,writable:!0,enumerable:!0,configurable:!0})}else for(var w in D){var m=yu(D,w,r);m===void 0?delete D[w]:Object.defineProperty(D,w,{value:m,writable:!0,enumerable:!0,configurable:!0})}return r.call(u,e,D)}var o,i,Cu,H,s;function we(){for(o="default",i="",Cu=!1,H=1;;){s=z();var u=Lu[o]();if(u)return u}}function z(){if(hu[Fu])return String.fromCodePoint(hu.codePointAt(Fu))}function t(){var u=z();return u===`
|
|
2
|
+
`?(K++,$=0):u?$+=u.length:$++,u&&(Fu+=u.length),u}var Lu={default:function(){switch(s){case" ":case"\v":case"\f":case" ":case"\xA0":case"\uFEFF":case`
|
|
3
|
+
`:case"\r":case"\u2028":case"\u2029":t();return;case"/":t(),o="comment";return;case void 0:return t(),c("eof")}if(d.isSpaceSeparator(s)){t();return}return Lu[S]()},comment:function(){switch(s){case"*":t(),o="multiLineComment";return;case"/":t(),o="singleLineComment";return}throw f(t())},multiLineComment:function(){switch(s){case"*":t(),o="multiLineCommentAsterisk";return;case void 0:throw f(t())}t()},multiLineCommentAsterisk:function(){switch(s){case"*":t();return;case"/":t(),o="default";return;case void 0:throw f(t())}t(),o="multiLineComment"},singleLineComment:function(){switch(s){case`
|
|
4
|
+
`:case"\r":case"\u2028":case"\u2029":t(),o="default";return;case void 0:return t(),c("eof")}t()},value:function(){switch(s){case"{":case"[":return c("punctuator",t());case"n":return t(),W("ull"),c("null",null);case"t":return t(),W("rue"),c("boolean",!0);case"f":return t(),W("alse"),c("boolean",!1);case"-":case"+":t()==="-"&&(H=-1),o="sign";return;case".":i=t(),o="decimalPointLeading";return;case"0":i=t(),o="zero";return;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":i=t(),o="decimalInteger";return;case"I":return t(),W("nfinity"),c("numeric",1/0);case"N":return t(),W("aN"),c("numeric",NaN);case'"':case"'":Cu=t()==='"',i="",o="string";return}throw f(t())},identifierNameStartEscape:function(){if(s!=="u")throw f(t());t();var e=_u();switch(e){case"$":case"_":break;default:if(!d.isIdStartChar(e))throw Ru();break}i+=e,o="identifierName"},identifierName:function(){switch(s){case"$":case"_":case"\u200C":case"\u200D":i+=t();return;case"\\":t(),o="identifierNameEscape";return}if(d.isIdContinueChar(s)){i+=t();return}return c("identifier",i)},identifierNameEscape:function(){if(s!=="u")throw f(t());t();var e=_u();switch(e){case"$":case"_":case"\u200C":case"\u200D":break;default:if(!d.isIdContinueChar(e))throw Ru();break}i+=e,o="identifierName"},sign:function(){switch(s){case".":i=t(),o="decimalPointLeading";return;case"0":i=t(),o="zero";return;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":i=t(),o="decimalInteger";return;case"I":return t(),W("nfinity"),c("numeric",H*(1/0));case"N":return t(),W("aN"),c("numeric",NaN)}throw f(t())},zero:function(){switch(s){case".":i+=t(),o="decimalPoint";return;case"e":case"E":i+=t(),o="decimalExponent";return;case"x":case"X":i+=t(),o="hexadecimal";return}return c("numeric",H*0)},decimalInteger:function(){switch(s){case".":i+=t(),o="decimalPoint";return;case"e":case"E":i+=t(),o="decimalExponent";return}if(d.isDigit(s)){i+=t();return}return c("numeric",H*Number(i))},decimalPointLeading:function(){if(d.isDigit(s)){i+=t(),o="decimalFraction";return}throw f(t())},decimalPoint:function(){switch(s){case"e":case"E":i+=t(),o="decimalExponent";return}if(d.isDigit(s)){i+=t(),o="decimalFraction";return}return c("numeric",H*Number(i))},decimalFraction:function(){switch(s){case"e":case"E":i+=t(),o="decimalExponent";return}if(d.isDigit(s)){i+=t();return}return c("numeric",H*Number(i))},decimalExponent:function(){switch(s){case"+":case"-":i+=t(),o="decimalExponentSign";return}if(d.isDigit(s)){i+=t(),o="decimalExponentInteger";return}throw f(t())},decimalExponentSign:function(){if(d.isDigit(s)){i+=t(),o="decimalExponentInteger";return}throw f(t())},decimalExponentInteger:function(){if(d.isDigit(s)){i+=t();return}return c("numeric",H*Number(i))},hexadecimal:function(){if(d.isHexDigit(s)){i+=t(),o="hexadecimalInteger";return}throw f(t())},hexadecimalInteger:function(){if(d.isHexDigit(s)){i+=t();return}return c("numeric",H*Number(i))},string:function(){switch(s){case"\\":t(),i+=Pe();return;case'"':if(Cu)return t(),c("string",i);i+=t();return;case"'":if(!Cu)return t(),c("string",i);i+=t();return;case`
|
|
5
|
+
`:case"\r":throw f(t());case"\u2028":case"\u2029":Te(s);break;case void 0:throw f(t())}i+=t()},start:function(){switch(s){case"{":case"[":return c("punctuator",t())}o="value"},beforePropertyName:function(){switch(s){case"$":case"_":i=t(),o="identifierName";return;case"\\":t(),o="identifierNameStartEscape";return;case"}":return c("punctuator",t());case'"':case"'":Cu=t()==='"',o="string";return}if(d.isIdStartChar(s)){i+=t(),o="identifierName";return}throw f(t())},afterPropertyName:function(){if(s===":")return c("punctuator",t());throw f(t())},beforePropertyValue:function(){o="value"},afterPropertyValue:function(){switch(s){case",":case"}":return c("punctuator",t())}throw f(t())},beforeArrayValue:function(){if(s==="]")return c("punctuator",t());o="value"},afterArrayValue:function(){switch(s){case",":case"]":return c("punctuator",t())}throw f(t())},end:function(){throw f(t())}};function c(u,e){return{type:u,value:e,line:K,column:$}}function W(u){for(var e=0,r=u;e<r.length;e+=1){var D=r[e],n=z();if(n!==D)throw f(t());t()}}function Pe(){var u=z();switch(u){case"b":return t(),"\b";case"f":return t(),"\f";case"n":return t(),`
|
|
6
|
+
`;case"r":return t(),"\r";case"t":return t()," ";case"v":return t(),"\v";case"0":if(t(),d.isDigit(z()))throw f(t());return"\0";case"x":return t(),Ne();case"u":return t(),_u();case`
|
|
7
|
+
`:case"\u2028":case"\u2029":return t(),"";case"\r":return t(),z()===`
|
|
8
|
+
`&&t(),"";case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":throw f(t());case void 0:throw f(t())}return t()}function Ne(){var u="",e=z();if(!d.isHexDigit(e)||(u+=t(),e=z(),!d.isHexDigit(e)))throw f(t());return u+=t(),String.fromCodePoint(parseInt(u,16))}function _u(){for(var u="",e=4;e-- >0;){var r=z();if(!d.isHexDigit(r))throw f(t());u+=t()}return String.fromCodePoint(parseInt(u,16))}var Ie={start:function(){if(v.type==="eof")throw X();xu()},beforePropertyName:function(){switch(v.type){case"identifier":case"string":bu=v.value,S="afterPropertyName";return;case"punctuator":su();return;case"eof":throw X()}},afterPropertyName:function(){if(v.type==="eof")throw X();S="beforePropertyValue"},beforePropertyValue:function(){if(v.type==="eof")throw X();xu()},beforeArrayValue:function(){if(v.type==="eof")throw X();if(v.type==="punctuator"&&v.value==="]"){su();return}xu()},afterPropertyValue:function(){if(v.type==="eof")throw X();switch(v.value){case",":S="beforePropertyName";return;case"}":su()}},afterArrayValue:function(){if(v.type==="eof")throw X();switch(v.value){case",":S="beforeArrayValue";return;case"]":su()}},end:function(){}};function xu(){var u;switch(v.type){case"punctuator":switch(v.value){case"{":u={};break;case"[":u=[];break}break;case"null":case"boolean":case"numeric":case"string":u=v.value;break}if(ou===void 0)ou=u;else{var e=k[k.length-1];Array.isArray(e)?e.push(u):Object.defineProperty(e,bu,{value:u,writable:!0,enumerable:!0,configurable:!0})}if(u!==null&&typeof u=="object")k.push(u),Array.isArray(u)?S="beforeArrayValue":S="beforePropertyName";else{var r=k[k.length-1];r==null?S="end":Array.isArray(r)?S="afterArrayValue":S="afterPropertyValue"}}function su(){k.pop();var u=k[k.length-1];u==null?S="end":Array.isArray(u)?S="afterArrayValue":S="afterPropertyValue"}function f(u){return Au(u===void 0?"JSON5: invalid end of input at "+K+":"+$:"JSON5: invalid character '"+Vu(u)+"' at "+K+":"+$)}function X(){return Au("JSON5: invalid end of input at "+K+":"+$)}function Ru(){return $-=5,Au("JSON5: invalid identifier character at "+K+":"+$)}function Te(u){console.warn("JSON5: '"+Vu(u)+"' in strings is not valid ECMAScript; consider escaping")}function Vu(u){var e={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(e[u])return e[u];if(u<" "){var r=u.charCodeAt(0).toString(16);return"\\x"+("00"+r).substring(r.length)}return u}function Au(u){var e=new SyntaxError(u);return e.lineNumber=K,e.columnNumber=$,e}var Me=function(e,r,D){var n=[],C="",A,w,m="",Y;if(r!=null&&typeof r=="object"&&!Array.isArray(r)&&(D=r.space,Y=r.quote,r=r.replacer),typeof r=="function")w=r;else if(Array.isArray(r)){A=[];for(var Du=0,O=r;Du<O.length;Du+=1){var R=O[Du],P=void 0;typeof R=="string"?P=R:(typeof R=="number"||R instanceof String||R instanceof Number)&&(P=String(R)),P!==void 0&&A.indexOf(P)<0&&A.push(P)}}return D instanceof Number?D=Number(D):D instanceof String&&(D=String(D)),typeof D=="number"?D>0&&(D=Math.min(10,Math.floor(D)),m=" ".substr(0,D)):typeof D=="string"&&(m=D.substr(0,10)),ru("",{"":e});function ru(E,y){var a=y[E];switch(a!=null&&(typeof a.toJSON5=="function"?a=a.toJSON5(E):typeof a.toJSON=="function"&&(a=a.toJSON(E))),w&&(a=w.call(y,E,a)),a instanceof Number?a=Number(a):a instanceof String?a=String(a):a instanceof Boolean&&(a=a.valueOf()),a){case null:return"null";case!0:return"true";case!1:return"false"}if(typeof a=="string")return Eu(a,!1);if(typeof a=="number")return String(a);if(typeof a=="object")return Array.isArray(a)?Ve(a):Le(a)}function Eu(E){for(var y={"'":.1,'"':.2},a={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"},h="",L=0;L<E.length;L++){var _=E[L];switch(_){case"'":case'"':y[_]++,h+=_;continue;case"\0":if(d.isDigit(E[L+1])){h+="\\x00";continue}}if(a[_]){h+=a[_];continue}if(_<" "){var uu=_.charCodeAt(0).toString(16);h+="\\x"+("00"+uu).substring(uu.length);continue}h+=_}var J=Y||Object.keys(y).reduce(function(U,eu){return y[U]<y[eu]?U:eu});return h=h.replace(new RegExp(J,"g"),a[J]),J+h+J}function Le(E){if(n.indexOf(E)>=0)throw TypeError("Converting circular structure to JSON5");n.push(E);var y=C;C=C+m;for(var a=A||Object.keys(E),h=[],L=0,_=a;L<_.length;L+=1){var uu=_[L],J=ru(uu,E);if(J!==void 0){var U=Re(uu)+":";m!==""&&(U+=" "),U+=J,h.push(U)}}var eu;if(h.length===0)eu="{}";else{var cu;if(m==="")cu=h.join(","),eu="{"+cu+"}";else{var ke=`,
|
|
9
|
+
`+C;cu=h.join(ke),eu=`{
|
|
10
|
+
`+C+cu+`,
|
|
11
|
+
`+y+"}"}}return n.pop(),C=y,eu}function Re(E){if(E.length===0)return Eu(E,!0);var y=String.fromCodePoint(E.codePointAt(0));if(!d.isIdStartChar(y))return Eu(E,!0);for(var a=y.length;a<E.length;a++)if(!d.isIdContinueChar(String.fromCodePoint(E.codePointAt(a))))return Eu(E,!0);return E}function Ve(E){if(n.indexOf(E)>=0)throw TypeError("Converting circular structure to JSON5");n.push(E);var y=C;C=C+m;for(var a=[],h=0;h<E.length;h++){var L=ru(String(h),E);a.push(L!==void 0?L:"null")}var _;if(a.length===0)_="[]";else if(m===""){var uu=a.join(",");_="["+uu+"]"}else{var J=`,
|
|
12
|
+
`+C,U=a.join(J);_=`[
|
|
13
|
+
`+C+U+`,
|
|
14
|
+
`+y+"]"}return n.pop(),C=y,_}},je={parse:Se,stringify:Me},$e=je,Oe=$e;return Oe})});var e0=(()=>{class F{$activeModal=V(du);$router=V(Zu);onRestartHomebridgeClick(){this.$router.navigate(["/restart"]),this.$activeModal.close()}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(I){return new(I||F)};static \u0275cmp=fu({type:F,selectors:[["ng-component"]],decls:23,vars:19,consts:[["role","dialog","aria-modal","true",1,"modal-content"],[1,"modal-header"],["id","restart-homebridge-modal-title",1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body","text-center"],[1,"fas","fa-power-off","primary-text","mb-3",2,"font-size","75px"],[1,"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",1,"btn","btn-primary",3,"click"]],template:function(I,b){I&1&&(g(0,"div",0)(1,"div",1)(2,"h5",2),j(3),T(4,"translate"),N(),g(5,"button",3),T(6,"translate"),Z("click",function(){return b.dismissModal()}),N()(),g(7,"div",4),q(8,"i",5),g(9,"p",6),j(10),T(11,"translate"),N()(),g(12,"div",7)(13,"div",8)(14,"button",9),T(15,"translate"),Z("click",function(){return b.dismissModal()}),j(16),T(17,"translate"),N()(),q(18,"div",10),g(19,"div",11)(20,"button",12),Z("click",function(){return b.onRestartHomebridgeClick()}),j(21),T(22,"translate"),N()()()()),I&2&&(tu("aria-labelledby","restart-homebridge-modal-title"),p(3),Q(" ",M(4,7,"platform.version.service_restart_required")," "),p(2),tu("aria-label",M(6,9,"form.button_close")),p(5),nu(M(11,11,"plugins.settings.restart_required")),p(4),tu("aria-label",M(15,13,"form.button_close")),p(2),Q(" ",M(17,15,"form.button_close")," "),p(5),Q(" ",M(22,17,"menu.tooltip_restart")," "))},dependencies:[lu],encapsulation:2})}return F})();function Je(F,B){if(F&1&&q(0,"i",19)(1,"i",20),F&2){let l=wu().$implicit;p(),Uu("opacity",l.matterSerialNumber?"1":"0.25")}}function qe(F,B){F&1&&q(0,"i",16)}function Ge(F,B){if(F&1&&(g(0,"li",9)(1,"span",15),zu(2,Je,2,2)(3,qe,1,0,"i",16),N(),g(4,"span",17),j(5),q(6,"br"),g(7,"small",18),j(8),N()()()),F&2){let l=B.$implicit,I=wu();p(2),Ju(I.isMatterSupported?2:3),p(3),Q(" ",l.name),p(3),nu(l.username)}}var s0=(()=>{class F{$activeModal=V(du);$api=V(Xu);$settings=V(Yu);$toastr=V(Wu);$translate=V(Qu);modalData=V(ue);bridges=this.modalData.bridges;isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");onRestartChildBridgeClick(){return Hu(this,null,function*(){if(this.bridges)try{for(let l of this.bridges)yield this.$api.put(`/server/restart/${l.username}`,{});this.$toastr.success(this.$translate.instant("plugins.manage.child_bridge_restart"),this.$translate.instant("toast.title_success"))}catch(l){console.error(l),this.$toastr.error(this.$translate.instant("plugins.manage.child_bridge_restart_failed"),this.$translate.instant("toast.title_error"))}finally{this.$activeModal.close()}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(I){return new(I||F)};static \u0275cmp=fu({type:F,selectors:[["ng-component"]],decls:27,vars:18,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"],[1,"fas","fa-power-off","primary-text","mb-3",2,"font-size","75px"],[1,"w-100"],[1,"text-center"],[1,"list-group","list-group-box","mb-0","w-75","mx-auto"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-end"],["type","button",1,"btn","btn-primary",3,"click"],[1,"me-3"],[1,"fas","fa-hap"],[1,"flex-grow-1","text-start"],[1,"grey-text","font-monospace"],[1,"fas","fa-lg","fa-hap","me-2"],[1,"fas","fa-lg","fa-matter"]],template:function(I,b){I&1&&(g(0,"div",0)(1,"div",1)(2,"h5",2),j(3),T(4,"translate"),N(),g(5,"button",3),T(6,"translate"),Z("click",function(){return b.dismissModal()}),N()(),g(7,"div",4),q(8,"i",5),g(9,"p",6),j(10),T(11,"translate"),N(),g(12,"div",7)(13,"ul",8),Gu(14,Ge,9,3,"li",9,qu),N()()(),g(16,"div",10)(17,"div",11)(18,"button",12),T(19,"translate"),Z("click",function(){return b.dismissModal()}),j(20),T(21,"translate"),N()(),q(22,"div",7),g(23,"div",13)(24,"button",14),Z("click",function(){return b.onRestartChildBridgeClick()}),j(25),T(26,"translate"),N()()()()),I&2&&(p(3),nu(M(4,6,"platform.version.service_restart_required")),p(2),tu("aria-label",M(6,8,"form.button_close")),p(5),nu(M(11,10,"restart.child_bridge_list")),p(4),Ku(b.bridges),p(4),tu("aria-label",M(19,12,"form.button_close")),p(2),Q(" ",M(21,14,"form.button_close")," "),p(5),Q(" ",M(26,16,"menu.tooltip_restart")," "))},dependencies:[lu],encapsulation:2})}return F})();function c0(F,{isDebugModeEnabled:B,isMatterSupported:l,isPlatformPlugin:I=!0}){return{type:"object",required:["username"],additionalProperties:!1,title:F.instant("child_bridge.bridge_settings"),properties:Su(ku(Su({username:{type:"string",title:F.instant("users.label_username"),description:`The child bridge username must be 6 pairs of colon-separated hexadecimal characters (A-F 0-9).
|
|
15
|
+
Example: 0E:89:49:64:91:86.`,pattern:"^([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}$"},port:{type:"number",title:F.instant("accessories.bridge_port"),description:"The port the child bridge listens on.",minimum:1025,maximum:65534},pin:{type:"string",title:"Bridge PIN",description:`The child bridge pin.
|
|
16
|
+
Example: 630-27-655.`,pattern:"^([0-9]{3}-[0-9]{2}-[0-9]{3})$"},name:{type:"string",title:F.instant("child_bridge.config.name"),description:"The name of the child bridge.",maxLength:64},manufacturer:{type:"string",title:F.instant("child_bridge.config.manufacturer"),description:"The child bridge manufacturer to be displayed in HomeKit.",maxLength:32},firmwareRevision:{type:"string",title:F.instant("child_bridge.config.firmware"),description:"The child bridge firmware version to be displayed in HomeKit.",maxLength:64},model:{type:"string",title:F.instant("child_bridge.config.model"),description:"The child bridge model to be displayed in HomeKit.",maxLength:32}},B?{debugModeEnabled:{type:"boolean",title:"Debug Mode",description:"Enable verbose logging for debugging."}}:{}),{env:{type:"object",additionalProperties:!1,title:"Environment Variables",description:"Environment variables to set for this child bridge.",properties:{DEBUG:{type:"string",title:"DEBUG",description:F.instant("settings.service.debug_tooltip")},NODE_OPTIONS:{type:"string",title:"NODE_OPTIONS",description:F.instant("settings.service.node_tooltip")}}}}),l&&I?{matter:{type:"object",additionalProperties:!1,title:F.instant("settings.matter.title"),description:"Matter-specific configuration for this child bridge.",properties:{port:{type:"number",title:F.instant("settings.matter.port"),description:F.instant("settings.matter.port_desc"),minimum:1025,maximum:65534}}}}:{})}}export{e0 as a,s0 as b,Ke as c,c0 as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as Ce}from"./chunk-XLJ6VVK3.js";import{a as we}from"./chunk-R7CS5PVV.js";import{n as z}from"./chunk-73LLH6JC.js";import{g as ne,m as F,n as xe}from"./chunk-QZUDFUPG.js";import{c as be}from"./chunk-2HDDFLX5.js";import{a as fe}from"./chunk-BGCYR25X.js";import{b as W}from"./chunk-5DKBUEKC.js";import{B as ve,C as G,D as R,b as X,c as N,d as g,e as j,f as Y,g as P,j as E,m as Z,q as ee,r as te,s as ie}from"./chunk-Z62MEN4O.js";import{a as Te,b as _e}from"./chunk-MXLTCL2C.js";import{E as D,F as U,H as I,K as V}from"./chunk-M6KB66ZD.js";import{Ab as h,Cb as oe,Db as se,Eb as le,Ec as o,Fb as y,Fc as s,Gb as a,Gc as ue,Hb as i,Ib as c,Jb as $,Kb as k,Lb as q,Rb as A,Sb as K,Xb as _,Yb as L,Za as e,Zb as f,aa as p,ea as re,ga as B,ha as M,ic as O,jc as me,kc as m,lc as d,ma as Q,mb as H,mc as v,nb as S,nc as de,sa as T,yb as u,yc as pe,zb as w,zc as ce}from"./chunk-MKV5RAJQ.js";import{g as Ue,h as C}from"./chunk-B4AJQJMI.js";function ke(n,x){n&1&&(a(0,"ngb-alert",13)(1,"p",20),m(2),o(3,"translate"),i()()),n&2&&(y("dismissible",!1),e(2),d(s(3,2,"login.invalid_password")))}var he=(()=>{class n{$activeModal=p(F);$api=p(V);$toastr=p(I);$translate=p(D);invalidCredentials=T(!1,{});formGroup=new P({password:new E("",[g.required])});disable2fa(){return C(this,null,function*(){this.invalidCredentials.set(!1);try{yield this.$api.post("/users/otp/deactivate",this.formGroup.value),this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.setup_2fa_disable_success"),this.$translate.instant("toast.title_success"))}catch{this.formGroup.setValue({password:""}),this.invalidCredentials.set(!0)}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=S({type:n,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-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(l,r){l&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),m(3),o(4,"translate"),i(),a(5,"button",3),o(6,"translate"),_("click",function(){return r.dismissModal()}),i()(),a(7,"div",4)(8,"div",5),c(9,"i",6),i(),a(10,"ul",7)(11,"li"),m(12),o(13,"translate"),i()(),a(14,"ul",8)(15,"li",9)(16,"label",10),m(17),o(18,"translate"),i(),a(19,"div",11),c(20,"input",12),o(21,"translate"),i()()(),w(22,ke,4,4,"ngb-alert",13),i(),a(23,"div",14)(24,"div",15)(25,"button",16),o(26,"translate"),_("click",function(){return r.dismissModal()}),m(27),o(28,"translate"),i()(),c(29,"div",17),a(30,"div",18)(31,"button",19),_("click",function(){return r.disable2fa()}),m(32),o(33,"translate"),i()()()()),l&2&&(e(3),d(s(4,11,"users.setup_2fa_disable")),e(2),u("aria-label",s(6,13,"form.button_close")),e(7),d(s(13,15,"users.setup_2fa_disable_current_password")),e(5),d(s(18,17,"users.label_password")),e(3),y("formControl",r.formGroup.controls.password)("placeholder",s(21,19,"users.label_password")),e(2),h(r.invalidCredentials()&&!r.formGroup.controls.password.value?22:-1),e(3),u("aria-label",s(26,21,"form.button_close")),e(2),v(" ",s(28,23,"form.button_close")," "),e(4),y("disabled",r.formGroup.invalid),e(),v(" ",s(33,25,"form.button_disable")," "))},dependencies:[G,N,j,R,ee,ne,U],encapsulation:2})}return n})();var ge=Ue(Te(),1);var Be=n=>({timeDiffError:n});function Me(n,x){n&1&&(a(0,"li"),m(1),o(2,"translate"),i()),n&2&&(e(),d(s(2,1,"users.setup_2fa_scan_qr_code")))}function De(n,x){if(n&1&&(a(0,"ngb-alert",8)(1,"p",16),m(2),o(3,"translate"),i(),a(4,"p",17),m(5),o(6,"translate"),i()()),n&2){let t=f();y("dismissible",!1),e(2),d(s(3,3,"users.setup_2fa_cannot_setup_2fa")),e(3),d(ue(6,5,"users.setup_2fa_server_time_out",pe(8,Be,t.timeDiffError())))}}function Ie(n,x){n&1&&c(0,"i",27)}function Ve(n,x){n&1&&c(0,"i",28)}function Fe(n,x){if(n&1){let t=A();a(0,"div",21),m(1),o(2,"translate"),c(3,"br"),m(4),a(5,"a",26),_("click",function(){B(t);let r=f(2);return M(r.copySecretToClipboard())}),w(6,Ie,1,0,"i",27)(7,Ve,1,0,"i",28),i()()}if(n&2){let t=f(2);e(),v(" ",s(2,3,"users.setup_2fa_scan_qr_manual")),e(3),v(" ",t.otpSecret()," "),e(2),h(t.secretCopied()?6:7)}}function Ae(n,x){if(n&1&&(a(0,"ul",9)(1,"li",18)(2,"div",19),c(3,"app-qrcode",20),i(),w(4,Fe,8,5,"div",21),i(),a(5,"li",22)(6,"label",23),m(7),o(8,"translate"),i(),a(9,"div",24),c(10,"input",25),i()()()),n&2){let t=f();e(3),y("data",t.otpString()),e(),h(t.otpSecret()?4:-1),e(3),d(s(8,4,"users.setup_2fa_enter_code")),e(3),y("formControl",t.formGroup.controls.code)}}function Ne(n,x){if(n&1){let t=A();a(0,"button",29),o(1,"translate"),_("click",function(){B(t);let r=f();return M(r.dismissModal())}),m(2),o(3,"translate"),i()}n&2&&(u("aria-label",s(1,2,"form.button_close")),e(2),v(" ",s(3,4,"form.button_close")," "))}function je(n,x){if(n&1){let t=A();a(0,"button",29),o(1,"translate"),_("click",function(){B(t);let r=f();return M(r.dismissModal())}),m(2),o(3,"translate"),i()}n&2&&(u("aria-label",s(1,2,"form.button_close")),e(2),v(" ",s(3,4,"form.button_close")," "))}function Pe(n,x){if(n&1){let t=A();a(0,"button",30),_("click",function(){B(t);let r=f();return M(r.enable2fa())}),m(1),o(2,"translate"),i()}if(n&2){let t=f();y("disabled",t.formGroup.invalid),e(),v(" ",s(2,2,"form.button_enable")," ")}}var Ee=(()=>{class n{$activeModal=p(F);$api=p(V);$toastr=p(I);$translate=p(D);modalData=p(z);user=this.modalData.user;timeDiffError=T(null,{});otpString=T(void 0,{});otpSecret=T(void 0,{});secretCopied=T(!1,{});copyTimeout=null;formGroup=new P({code:new E("",[g.required,g.minLength(6),g.maxLength(6)])});ngOnInit(){this.initialize()}initialize(){return C(this,null,function*(){try{let t=yield this.$api.post("/users/otp/setup",{});this.checkTimeDiff(t.timestamp),this.timeDiffError()||(this.otpString.set(t.otpauth),this.otpSecret.set(new URL(t.otpauth).searchParams.get("secret")||""))}catch(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(){return C(this,null,function*(){try{yield this.$api.post("/users/otp/activate",this.formGroup.value),this.$toastr.success(this.$translate.instant("users.setup_2fa_enabled_success"),this.$translate.instant("toast.title_success")),this.$activeModal.close()}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("users.setup_2fa_activate_error"),this.$translate.instant("toast.title_error"))}})}copySecretToClipboard(){return C(this,null,function*(){let t=this.otpSecret();t&&(yield navigator.clipboard.writeText(t),this.secretCopied.set(!0),this.copyTimeout&&clearTimeout(this.copyTimeout),this.copyTimeout=setTimeout(()=>{this.secretCopied.set(!1)},3e3))})}dismissModal(){this.$activeModal.dismiss("Dismiss")}checkTimeDiff(t){let l=(0,ge.default)(t).diff(new Date,"millisecond");l<-5e3||l>5e3?this.timeDiffError.set(l):this.timeDiffError.set(null)}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=S({type:n,selectors:[["ng-component"]],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-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","my-2"],[1,"mx-auto",2,"width","175px","height","175px",3,"data"],[1,"grey-text","small","mt-0","mb-1"],[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"],["href","javascript:void(0)",1,"ms-1","text-primary",3,"click"],[1,"fas","fa-check","green-text"],[1,"fas","fa-copy"],["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(l,r){l&1&&(a(0,"div",0)(1,"div",1)(2,"h5",2),m(3),o(4,"translate"),i(),a(5,"button",3),o(6,"translate"),_("click",function(){return r.dismissModal()}),i()(),a(7,"div",4)(8,"div",5),c(9,"i",6),i(),a(10,"ul",7)(11,"li"),m(12),o(13,"translate"),i(),w(14,Me,3,3,"li"),i(),w(15,De,7,10,"ngb-alert",8),w(16,Ae,11,6,"ul",9),i(),a(17,"div",10)(18,"div",11),w(19,Ne,4,6,"button",12),i(),a(20,"div",13),w(21,je,4,6,"button",12),i(),a(22,"div",14),w(23,Pe,3,4,"button",15),i()()()),l&2&&(e(3),d(s(4,9,"users.setup_2fa")),e(2),u("aria-label",s(6,11,"form.button_close")),e(7),d(s(13,13,"users.setup_2fa_warning")),e(2),h(r.timeDiffError()?-1:14),e(),h(r.timeDiffError()?15:-1),e(),h(r.timeDiffError()?-1:16),e(3),h(r.timeDiffError()?-1:19),e(2),h(r.timeDiffError()?21:-1),e(2),h(r.timeDiffError()?-1:23))},dependencies:[ne,Ce,G,N,j,ve,R,ee,U],encapsulation:2})}return n})();var ye=(()=>{class n{$activeModal=p(F);$api=p(V);$toastr=p(I);$translate=p(D);form=new P({username:new E("",[g.required]),name:new E("",[g.required]),password:new E("",[g.compose([g.required,g.minLength(4)])]),passwordConfirm:new E("",[g.required]),admin:new E(!0)},this.matchPassword);onSubmit(l){return C(this,arguments,function*({value:t}){try{yield this.$api.post("/users",t),this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.toast_added_new_user"),this.$translate.instant("toast.title_success"))}catch(r){this.$toastr.error(r.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 l=t.get("password")?.value,r=t.get("passwordConfirm")?.value;return l!==r?(t.get("passwordConfirm")?.setErrors({matchPassword:!0}),{matchPassword:!0}):null}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=S({type:n,selectors:[["ng-component"]],decls:58,vars:48,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-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"],["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"],[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(l,r){l&1&&(a(0,"div",0)(1,"form",1),_("ngSubmit",function(){return r.onSubmit(r.form)}),a(2,"div",2)(3,"h5",3),m(4),o(5,"translate"),i(),a(6,"button",4),o(7,"translate"),_("click",function(){return r.dismissModal()}),i()(),a(8,"div",5)(9,"div",6),c(10,"i",7),i(),a(11,"ul",8)(12,"li",9)(13,"label",10),m(14),o(15,"translate"),i(),a(16,"div",11),c(17,"input",12),o(18,"translate"),i()(),a(19,"li",9)(20,"label",13),m(21),o(22,"translate"),i(),a(23,"div",11),c(24,"input",14),o(25,"translate"),i()(),a(26,"li",9)(27,"label",15),m(28),o(29,"translate"),i(),a(30,"div",11),c(31,"input",16),o(32,"translate"),i()(),a(33,"li",9)(34,"label",17),m(35),o(36,"translate"),i(),a(37,"div",11),c(38,"input",18),o(39,"translate"),i()(),a(40,"li",19)(41,"span",20),m(42),o(43,"translate"),i(),a(44,"div",21),c(45,"input",22),o(46,"translate"),c(47,"label",23),i()()()(),a(48,"div",24)(49,"div",20)(50,"button",25),_("click",function(){return r.dismissModal()}),m(51),o(52,"translate"),i()(),c(53,"div",26),a(54,"div",27)(55,"button",28),m(56),o(57,"translate"),i()()()()()),l&2&&(e(),y("formGroup",r.form),e(3),d(s(5,20,"users.title_add_user")),e(2),u("aria-label",s(7,22,"form.button_close")),e(8),d(s(15,24,"users.label_username")),e(3),u("aria-label",s(18,26,"users.label_username")),e(4),d(s(22,28,"users.label_full_name")),e(3),u("aria-label",s(25,30,"users.label_full_name")),e(4),d(s(29,32,"users.label_password")),e(3),O("is-invalid",r.form.controls.password.dirty&&r.form.controls.password.errors),u("aria-label",s(32,34,"users.label_password")),e(4),d(s(36,36,"users.label_confirm_password")),e(3),O("is-invalid",r.form.controls.passwordConfirm.dirty&&r.form.controls.passwordConfirm.errors),u("aria-label",s(39,38,"users.label_confirm_password")),e(4),d(s(43,40,"users.label_admin_user")),e(3),u("aria-label",s(46,42,"users.label_admin_user")),e(6),v(" ",s(52,44,"form.button_close")," "),e(4),y("disabled",!r.form.valid),e(),v(" ",s(57,46,"form.button_save")," "))},dependencies:[G,Z,N,X,j,Y,R,ie,te,U],encapsulation:2})}return n})();function Ge(n,x){if(n&1&&(a(0,"li",9)(1,"label",27),m(2),o(3,"translate"),i(),a(4,"div",11),c(5,"input",28),o(6,"translate"),i()()),n&2){let t=f();e(2),d(s(3,4,"users.label_confirm_password")),e(3),O("is-invalid",t.form.controls.passwordConfirm.dirty&&t.form.controls.passwordConfirm.errors),u("aria-label",s(6,6,"users.label_confirm_password"))}}var Se=(()=>{class n{destroyRef=p(Q);$activeModal=p(F);$api=p(V);$auth=p(W);$toastr=p(I);$translate=p(D);modalData=p(z);user=this.modalData.user;isCurrentUser=T(!1,{});initialFormValue={};form=new P({username:new E("",[g.required]),name:new E("",[g.required]),password:new E(""),passwordConfirm:new E(""),admin:new E(!0)},this.matchPassword);ngOnInit(){this.user&&(this.isCurrentUser.set(this.$auth.user.username===this.user.username),this.form.patchValue(this.user),this.initialFormValue=this.form.getRawValue())}onSubmit(l){return C(this,arguments,function*({value:t}){if(this.user)try{yield this.$api.patch(`/users/${this.user.id}`,t),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()}catch(r){console.error(r),this.$toastr.error(r.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 l=t.get("password")?.value,r=t.get("passwordConfirm")?.value;return l!==r?(t.get("passwordConfirm")?.setErrors({matchPassword:!0}),{matchPassword:!0}):null}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=S({type:n,selectors:[["ng-component"]],decls:52,vars:41,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-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"],[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"]],template:function(l,r){l&1&&(a(0,"div",0)(1,"form",1),_("ngSubmit",function(){return r.onSubmit(r.form)}),a(2,"div",2)(3,"h5",3),m(4),o(5,"translate"),i(),a(6,"button",4),o(7,"translate"),_("click",function(){return r.dismissModal()}),i()(),a(8,"div",5)(9,"div",6),c(10,"i",7),i(),a(11,"ul",8)(12,"li",9)(13,"label",10),m(14),o(15,"translate"),i(),a(16,"div",11),c(17,"input",12),o(18,"translate"),i()(),a(19,"li",9)(20,"label",13),m(21),o(22,"translate"),i(),a(23,"div",11),c(24,"input",14),o(25,"translate"),i()(),a(26,"li",9)(27,"label",15),m(28),o(29,"translate"),i(),a(30,"div",11),c(31,"input",16),o(32,"translate"),i()(),w(33,Ge,7,8,"li",9),a(34,"li",17)(35,"span",18),m(36),o(37,"translate"),i(),a(38,"div",19),c(39,"input",20),o(40,"translate"),c(41,"label",21),i()()()(),a(42,"div",22)(43,"div",18)(44,"button",23),_("click",function(){return r.dismissModal()}),m(45),o(46,"translate"),i()(),c(47,"div",24),a(48,"div",25)(49,"button",26),m(50),o(51,"translate"),i()()()()()),l&2&&(e(),y("formGroup",r.form),e(3),d(s(5,17,"users.title_edit_user")),e(2),u("aria-label",s(7,19,"form.button_close")),e(8),d(s(15,21,"users.label_username")),e(3),u("aria-label",s(18,23,"users.label_username")),e(4),d(s(22,25,"users.label_full_name")),e(3),u("aria-label",s(25,27,"users.label_full_name")),e(4),d(s(29,29,"users.label_new_password")),e(3),O("is-invalid",r.form.controls.password.dirty&&r.form.controls.password.errors),u("aria-label",s(32,31,"users.label_new_password")),e(2),h(r.form.controls.password.value?33:-1),e(3),d(s(37,33,"users.label_admin_user")),e(3),u("aria-label",s(40,35,"users.label_admin_user")),e(6),v(" ",s(46,37,"form.button_close")," "),e(4),y("disabled",!r.form.valid||r.isFormUnchanged()),e(),v(" ",s(51,39,"form.button_save")," "))},dependencies:[G,Z,N,X,j,Y,R,ie,te,U],encapsulation:2})}return n})();var $e=(()=>{class n{$activeModal=p(F);dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=S({type:n,selectors:[["ng-component"]],decls:46,vars:36,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-question-circle-o","primary-text",2,"font-size","75px"],[1,"ms-2"],[1,"mb-0"],[1,"mb-2","grey-text"],[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(l,r){l&1&&(a(0,"div",0)(1,"form")(2,"div",1)(3,"h5",2),m(4),o(5,"translate"),i(),a(6,"button",3),o(7,"translate"),_("click",function(){return r.dismissModal()}),i()(),a(8,"div",4)(9,"div",5),c(10,"i",6),i(),a(11,"h5",7),m(12),o(13,"translate"),i(),a(14,"ul",8)(15,"li"),m(16),o(17,"translate"),i(),a(18,"ul",9)(19,"li"),m(20),o(21,"translate"),i(),a(22,"li"),m(23),o(24,"translate"),i(),a(25,"li"),m(26),o(27,"translate"),o(28,"translate"),i(),a(29,"li"),m(30),o(31,"translate"),i(),a(32,"li"),m(33),o(34,"translate"),i()(),a(35,"li"),m(36),o(37,"translate"),i()(),c(38,"app-support-banner"),i(),a(39,"div",10),c(40,"div",11),a(41,"div",12)(42,"button",13),_("click",function(){return r.dismissModal()}),m(43),o(44,"translate"),i()(),c(45,"div",14),i()()()),l&2&&(e(4),d(s(5,12,"support.title")),e(2),u("aria-label",s(7,14,"form.button_close")),e(6),d(s(13,16,"users.title_users")),e(4),d(s(17,18,"users.support.acc_1")),e(4),d(s(21,20,"menu.label_status")),e(3),d(s(24,22,"menu.label_plugins")),e(3),de("",s(27,24,"menu.label_accessories")," (",s(28,26,"users.support.control"),")"),e(4),d(s(31,28,"menu.linux.label_logs")),e(3),d(s(34,30,"support.title")),e(3),d(s(37,32,"users.support.acc_2")),e(7),v(" ",s(44,34,"form.button_close")," "))},dependencies:[we,U],encapsulation:2})}return n})();var Re=(n,x)=>({"fa-user-secret":n,"fa-user":x});function ze(n,x){if(n&1){let t=A();$(0,"button",23),L("click",function(){B(t);let r=f(2).$implicit,b=f();return M(b.disable2fa(r))}),m(1),o(2,"translate"),k()}if(n&2){let t=f(2).$implicit,l=f();K("disabled",t.username!==l.username),e(),v(" ",s(2,2,"users.setup_2fa_disable")," ")}}function qe(n,x){if(n&1){let t=A();$(0,"button",24),L("click",function(){B(t);let r=f(2).$implicit,b=f();return M(b.setup2fa(r))}),m(1),o(2,"translate"),k()}if(n&2){let t=f(2).$implicit,l=f();K("disabled",t.username!==l.username),e(),v(" ",s(2,2,"users.setup_2fa")," ")}}function Le(n,x){if(n&1&&w(0,ze,3,4,"button",21)(1,qe,3,4,"button",22),n&2){let t=f().$implicit;h(t.otpActive?0:1)}}function Oe(n,x){n&1&&q(0,"div")}function Je(n,x){if(n&1){let t=A();$(0,"div",9)(1,"div",10)(2,"div",11)(3,"div",12)(4,"span",13)(5,"h4"),m(6),k(),$(7,"h5",14),q(8,"i",15),m(9),k()()(),$(10,"div",16),w(11,Le,2,1)(12,Oe,1,0,"div"),$(13,"div")(14,"button",17),o(15,"translate"),L("click",function(){let r=B(t).$implicit,b=f();return M(b.openEditUser(r))}),q(16,"i",18),k(),$(17,"button",19),o(18,"translate"),L("click",function(){let r=B(t).$implicit,b=f();return M(b.deleteUser(r.id))}),q(19,"i",20),k()()()()()()}if(n&2){let t=x.$implicit,l=f();e(6),d(t.name),e(2),me(ce(12,Re,t.admin,!t.admin)),e(),v(" ",t.username," "),e(2),h(t.admin?11:12),e(3),u("aria-label",s(15,8,"form.button_edit")),e(3),K("disabled",l.username===t.username),u("aria-label",s(18,10,"form.button_delete"))}}var ti=(()=>{class n{injector=p(re);destroyRef=p(Q);$api=p(V);$auth=p(W);$modal=p(xe);$route=p(be);$settings=p(_e);$toastr=p(I);$translate=p(D);homebridgeUsers=T([],{});username=this.$auth.user.username;isAdmin=this.$auth.user.admin;ngOnInit(){let t=this.$translate.instant("users.title_users");this.$settings.setPageTitle(t),this.$route.data.pipe(fe(this.destroyRef)).subscribe(l=>{this.homebridgeUsers.set(l.homebridgeUsers)})}reloadUsers(){return C(this,null,function*(){let t=yield this.$api.get("/users");this.homebridgeUsers.set(t)})}openAddNewUser(){return C(this,null,function*(){let t=this.$modal.open(ye,{size:"lg",backdrop:"static"});try{yield t.result,this.reloadUsers()}catch{}})}openEditUser(t){return C(this,null,function*(){let l=H([{provide:z,useValue:{user:t}}],this.injector),r=this.$modal.open(Se,{size:"lg",backdrop:"static",injector:l});try{yield r.result,this.reloadUsers()}catch{}})}deleteUser(t){return C(this,null,function*(){try{yield this.$api.delete(`/users/${t}`),this.$toastr.success(this.$translate.instant("users.toast_user_deleted"),this.$translate.instant("toast.title_success")),this.reloadUsers()}catch(l){console.error(l),this.$toastr.error(l.error?.message||this.$translate.instant("users.toast_failed_to_delete_user"),this.$translate.instant("toast.title_error"))}})}setup2fa(t){return C(this,null,function*(){let l=H([{provide:z,useValue:{user:t}}],this.injector),r=this.$modal.open(Ee,{size:"lg",backdrop:"static",injector:l});try{yield r.result,this.reloadUsers()}catch{}})}disable2fa(t){return C(this,null,function*(){let l=H([{provide:z,useValue:{user:t}}],this.injector),r=this.$modal.open(he,{size:"lg",backdrop:"static",injector:l});try{yield r.result,this.reloadUsers()}catch{}})}openSupport(){this.$modal.open($e,{size:"lg",backdrop:"static"})}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=S({type:n,selectors:[["app-users"]],decls:15,vars:9,consts:[[1,"row","mb-3"],[1,"col-6"],[1,"primary-text","m-0"],[1,"col-6","text-end"],[1,"btn","btn-elegant","waves-effect","m-0","me-2",3,"click"],[1,"fas","fa-user-plus"],["type","button",1,"btn","btn-elegant","my-0","me-0",3,"click"],[1,"fa","fa-question-circle-o"],[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,"small","text-truncate","grey-text"],[1,"fas"],[1,"d-flex","flex-row","justify-content-between"],[1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-user-pen"],[1,"btn","btn-danger","m-0","ms-2",3,"click","disabled"],[1,"fas","fa-trash"],[1,"btn","btn-elegant","m-0",3,"disabled"],[1,"btn","btn-primary","m-0",3,"disabled"],[1,"btn","btn-elegant","m-0",3,"click","disabled"],[1,"btn","btn-primary","m-0",3,"click","disabled"]],template:function(l,r){l&1&&($(0,"div",0)(1,"div",1)(2,"h3",2),m(3),o(4,"translate"),k()(),$(5,"div",3)(6,"button",4),o(7,"translate"),L("click",function(){return r.openAddNewUser()}),q(8,"i",5),k(),$(9,"button",6),o(10,"translate"),L("click",function(){return r.openSupport()}),q(11,"i",7),k()()(),$(12,"div",8),se(13,Je,20,15,"div",9,oe),k()),l&2&&(e(3),d(s(4,3,"users.title_users")),e(3),u("aria-label",s(7,5,"users.button_add_user")),e(3),u("aria-label",s(10,7,"support.title")),e(4),le(r.homebridgeUsers()))},dependencies:[U],encapsulation:2})}return n})();export{ti as UsersComponent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as E}from"./chunk-BQLUKGX4.js";import{a as S}from"./chunk-LPHPZZDD.js";import"./chunk-BMOLDRJ3.js";import"./chunk-2QHT7UTY.js";import"./chunk-73LLH6JC.js";import"./chunk-IPCY24VP.js";import"./chunk-QZUDFUPG.js";import"./chunk-BGCYR25X.js";import"./chunk-5DKBUEKC.js";import"./chunk-Z62MEN4O.js";import{b as C}from"./chunk-MXLTCL2C.js";import{E as b,F as w}from"./chunk-M6KB66ZD.js";import{Ec as T,Fc as y,Jb as s,Kb as l,Lb as u,Pc as $,Xb as h,Ya as a,Za as d,aa as n,d as m,ec as v,fc as f,kc as g,lc as p,nb as c}from"./chunk-MKV5RAJQ.js";import"./chunk-B4AJQJMI.js";var B=["terminaloutput"],L=(()=>{class r{$terminal=n(S);$settings=n(C);$navigationGuard=n(E);$translate=n(b);resizeEvent=new m;termTarget=$("terminaloutput",{});onWindowResize(){this.resizeEvent.next(void 0)}onBeforeUnload(i){return this.$navigationGuard.handleBeforeUnload(i)}onWindowFocus(){this.activateTerminal()}onClick(){this.activateTerminal()}activateTerminal(){this.$terminal.isTerminalReady()&&this.$terminal.term&&this.$terminal.term.focus()}ngOnInit(){let i=this.$translate.instant("menu.linux.label_terminal");this.$settings.setPageTitle(i),window.document.querySelector("body").classList.add("bg-black"),this.$terminal.isTerminalReady()&&this.$terminal.destroyTerminal(),this.$settings.env.terminal?.persistence&&this.$terminal.hasActiveSession()?this.$terminal.reconnectTerminal(this.termTarget(),{},this.resizeEvent):(!this.$settings.env.terminal?.persistence&&this.$terminal.hasActiveSession()&&this.$terminal.destroyPersistentSession(),this.$terminal.startTerminal(this.termTarget(),{},this.resizeEvent)),requestAnimationFrame(()=>{this.activateTerminal()})}ngAfterViewInit(){document.addEventListener("visibilitychange",this.onVisibilityChange.bind(this))}onVisibilityChange(){!document.hidden&&this.$terminal.isTerminalReady()&&requestAnimationFrame(()=>{this.activateTerminal()})}canDeactivate(){return this.$navigationGuard.canDeactivate()}ngOnDestroy(){document.removeEventListener("visibilitychange",this.onVisibilityChange.bind(this)),window.document.querySelector("body").classList.remove("bg-black"),this.$settings.env.terminal?.persistence?this.$terminal.detachTerminal():this.$terminal.destroyPersistentSession()}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=c({type:r,selectors:[["ng-component"]],viewQuery:function(e,t){e&1&&v(t.termTarget,B,5),e&2&&f()},hostBindings:function(e,t){e&1&&h("resize",function(){return t.onWindowResize()},a)("beforeunload",function(_){return t.onBeforeUnload(_)},a)("focus",function(){return t.onWindowFocus()},a)("click",function(){return t.onClick()})},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,t){e&1&&(s(0,"div",1)(1,"div",2)(2,"h3",3),g(3),T(4,"translate"),l()()(),s(5,"div",4),u(6,"div",5,0),l()),e&2&&(d(3),p(y(4,1,"menu.linux.label_terminal")))},dependencies:[w],encapsulation:2})}return r})();export{L as TerminalComponent};
|