UNPKG

homebridge-config-ui-x

Version:

A web based management, configuration and control platform for Homebridge.

1 lines 34.1 kB
import{a as E,o as w,s as x}from"./chunk-D39XL-zh.js";import{$ as Le,Ct as Qo,E as Dy,Fr as se,G as Iy,Gr as uy,H as I,I as Ga,It as TT,Jn as gy,Jr as ve,K as J,Kr as v3,Kt as Uy,Ln as db,M as Fe,Pr as sc,Q as Ko,Rt as Te,Tn as ac,U as I_,Un as g,Wt as UT,X as Jt,Y as Je$1,Yr as vy,Yt as Va,Zr as w_,br as pb,c as A_,d as Ay,dr as m_,dt as Nf,fn as Z,gt as Pe,hn as _T,hr as nc,i as $y,jt as S_,kn as br,kt as ST,pt as Ot$1,qt as VS,ri as x_,rr as jd,sr as kt$1,u as An,ut as N_,vt as Py,wr as q,x as Cr,y as C_}from"./chunk-D96TCRAL.js";import"./chunk-DZYp0NQB.js";import{n as zt}from"./chunk-CdJ3i4Aq.js";import{B as Hn,G as Mt$1,H as Jn,I as $,K as Se,R as Cn,U as Kn,W as Ln,Y as Ye,Z as _n,a as Q,d as pr,ft as he,i as $$1,l as gr,lt as fe,o as U,ot as ve$1,r as Y,s as re,st as zn,u as oe,ut as si}from"./main-E3N63CH7.js";import{t as ds}from"./chunk-CiY-LsUw.js";import"./chunk-nWnpef0a.js";import"./chunk-BinBJ-zk2.js";import{t as N}from"./chunk-MQWddKEg2.js";import"./chunk-DJ26AmHP2.js";import{t as y}from"./chunk-BQyh1Wug.js";import{t as c}from"./chunk-C4clUPas.js";import"./chunk-EvMH-qNV.js";import{r as le,t as IM}from"./chunk-2Xtb3vZq.js";var ze=(()=>{class t{$activeModal=g(fe);dismissModal(){this.$activeModal.dismiss(`Dismiss`)}static ɵfac=function(i){return new(i||t)};static ɵcmp=nc({type:t,selectors:[[`app-accessory-support`]],decls:42,vars:30,consts:[[1,`modal-content`],[1,`modal-header`],[1,`modal-title`],[`type`,`button`,`data-bs-dismiss`,`modal`,1,`btn-close`,3,`click`],[1,`modal-body`],[1,`text-center`,`mb-4`],[1,`far`,`fa-circle-question`,`primary-text`,`icon-xl`],[1,`ms-2`],[1,`mb-4`],[1,`mb-0`],[1,`modal-footer`,`justify-content-between`],[1,`text-start`],[1,`text-center`],[`type`,`button`,`data-bs-dismiss`,`modal`,1,`btn`,`btn-elegant`,3,`click`],[1,`text-end`]],template:function(i,n){i&1&&(Va(0,`div`,0)(1,`form`)(2,`div`,1)(3,`h5`,2),Ot$1(4),S_(5,`translate`),jd(),Va(6,`button`,3),S_(7,`translate`),ac(`click`,function(){return n.dismissModal()}),jd()(),Va(8,`div`,4)(9,`div`,5),Dy(10,`i`,6),jd(),Va(11,`h5`,7),Ot$1(12),S_(13,`translate`),jd(),Va(14,`ul`,8)(15,`li`),Ot$1(16),S_(17,`translate`),jd(),Va(18,`li`),Ot$1(19),S_(20,`translate`),jd()(),Va(21,`h5`,7),Ot$1(22),S_(23,`translate`),jd(),Va(24,`ul`,9)(25,`li`),Ot$1(26),S_(27,`translate`),jd(),Va(28,`li`),Ot$1(29),S_(30,`translate`),jd(),Va(31,`li`),Ot$1(32),S_(33,`translate`),jd()(),Dy(34,`app-support-banner`),jd(),Va(35,`div`,10),Dy(36,`div`,11),Va(37,`div`,12)(38,`button`,13),ac(`click`,function(){return n.dismissModal()}),Ot$1(39),S_(40,`translate`),jd()(),Dy(41,`div`,14),jd()()()),i&2&&(se(4),Py(N_(5,10,`support.title`)),se(2),Cr(`aria-label`,N_(7,12,`form.button_close`)),se(6),Py(N_(13,14,`menu.label_accessories`)),se(4),Py(N_(17,16,`accessories.support.acc_1`)),se(3),Py(N_(20,18,`accessories.support.acc_2`)),se(3),Py(N_(23,20,`accessories.title_rooms`)),se(4),Py(N_(27,22,`accessories.support.rooms_1`)),se(3),Py(N_(30,24,`accessories.support.rooms_2`)),se(3),Py(N_(33,26,`accessories.support.rooms_3`)),se(7),kt$1(` `,N_(40,28,`form.button_close`),` `))},dependencies:[y,v3],encapsulation:2})}return t})();var ce=new I(`ADD_ROOM_MODAL_DATA`);var me=new I(`EDIT_ROOM_MODAL_DATA`);var Je=(()=>{class t{$activeModal=g(fe);data=g(ce);existingRooms=this.data.existingRooms;roomForm=new $({roomName:new Se(``,[ve$1.required]),isDefault:new Se(!1)});ngOnInit(){this.roomForm.controls.roomName.addValidators(this.duplicateRoomNameValidator.bind(this)),this.roomForm.controls.roomName.updateValueAndValidity(),this.existingRooms.length===0&&this.roomForm.patchValue({isDefault:!0})}get noExistingRooms(){return this.existingRooms.length===0}duplicateRoomNameValidator(e){if(!e.value)return null;let i=e.value.trim();return i&&this.existingRooms.some(d=>d.name.trim().toLowerCase()===i.toLowerCase())?{duplicateRoom:!0}:null}dismissModal(){this.$activeModal.dismiss(`Dismiss`)}closeModal(){this.roomForm.invalid||this.$activeModal.close({name:this.roomForm.value.roomName?.trim()||``,isDefault:this.roomForm.value.isDefault||!1})}static ɵfac=function(i){return new(i||t)};static ɵcmp=nc({type:t,selectors:[[`app-add-room`]],decls:38,vars:26,consts:[[1,`modal-content`],[3,`ngSubmit`,`formGroup`],[1,`modal-header`],[1,`modal-title`],[`type`,`button`,`data-bs-dismiss`,`modal`,`aria-hidden`,`true`,`tabindex`,`-1`,1,`btn-close`,3,`click`],[1,`modal-body`],[1,`text-center`,`mb-4`],[1,`fas`,`fa-folder-plus`,`primary-text`,`icon-xl`],[1,`list-group`,`list-group-box`,`mb-0`],[1,`list-group-item`,`d-flex`,`flex-column`,`flex-md-row`,`align-items-center`],[`aria-hidden`,`true`,1,`mb-2`,`mb-md-0`,`w-100`,`w-md-50`],[1,`text-start`,`text-md-end`,`w-100`,`w-md-50`],[`id`,`form-name`,`autocomplete`,`off`,`type`,`text`,`formControlName`,`roomName`,1,`form-control`,`custom-input`],[1,`list-group-item`,`d-flex`,`justify-content-between`,`align-items-center`,`flex-row`,`pb-2`],[1,`text-start`,`flex-grow-1`,`me-3`],[1,`text-end`,`grey-text`,`d-flex`,`align-items-center`],[`id`,`form-default`,`type`,`checkbox`,`formControlName`,`isDefault`,1,`rendux-input`,`mb-0`,3,`keyup.enter`,`disabled`],[`for`,`form-default`,1,`rendux-label`,`ms-3`],[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`,`submit`,`data-bs-dismiss`,`modal`,1,`btn`,`btn-primary`,3,`disabled`]],template:function(i,n){i&1&&(Va(0,`div`,0)(1,`form`,1),ac(`ngSubmit`,function(){return n.closeModal()}),Va(2,`div`,2)(3,`h5`,3),Ot$1(4),S_(5,`translate`),jd(),Va(6,`button`,4),ac(`click`,function(){return n.dismissModal()}),jd()(),Va(7,`div`,5)(8,`div`,6),Dy(9,`i`,7),jd(),Va(10,`ul`,8)(11,`li`,9)(12,`span`,10),Ot$1(13),S_(14,`translate`),Dy(15,`app-required-indicator`),jd(),Va(16,`div`,11),Dy(17,`input`,12),S_(18,`translate`),db(),jd()(),Va(19,`li`,13)(20,`span`,14),Ot$1(21),S_(22,`translate`),Dy(23,`app-required-indicator`),jd(),Va(24,`div`,15)(25,`input`,16),S_(26,`translate`),ac(`keyup.enter`,function(){return n.closeModal()}),jd(),db(),Dy(27,`label`,17),jd()()()(),Va(28,`div`,18)(29,`div`,19)(30,`button`,20),ac(`click`,function(){return n.dismissModal()}),Ot$1(31),S_(32,`translate`),jd()(),Dy(33,`div`,21),Va(34,`div`,22)(35,`button`,23),Ot$1(36),S_(37,`translate`),jd()()()()()),i&2&&(se(),vy(`formGroup`,n.roomForm),se(3),Py(N_(5,12,`accessories.button_add_room`)),se(9),kt$1(` `,N_(14,14,`accessories.room_name`)),se(4),Ay(`is-invalid`,n.roomForm.controls.roomName.touched&&n.roomForm.controls.roomName.invalid),Cr(`aria-label`,N_(18,16,`accessories.room_name`)),pb(),se(4),kt$1(` `,N_(22,18,`accessories.control.default_room`)),se(4),vy(`disabled`,n.noExistingRooms),Cr(`aria-label`,N_(26,20,`accessories.control.default_room`)),pb(),se(6),kt$1(` `,N_(32,22,`form.button_close`),` `),se(4),vy(`disabled`,n.roomForm.invalid),se(),kt$1(` `,N_(37,24,`form.button_save`),` `))},dependencies:[Jn,zn,Ye,Mt$1,Hn,Ln,Cn,_n,c,v3],encapsulation:2})}return t})();var Ke=(()=>{class t{static ɵfac=function(i){return new(i||t)};static ɵcmp=nc({type:t,selectors:[[`app-drag-here-placeholder`]],decls:5,vars:3,consts:[[1,`accessory-box`],[1,`fas`,`fa-arrow-alt-circle-down`,`accessory-icon`],[1,`accessory-label`]],template:function(i,n){i&1&&(Pe(0,`div`,0),br(1,`i`,1),Pe(2,`div`,2),Ot$1(3),S_(4,`translate`),Je$1()()),i&2&&(se(3),Py(N_(4,1,`accessories.control.drag_here`)))},dependencies:[v3],styles:[`.accessory-box[_ngcontent-%COMP%]{opacity:.2}`]})}return t})();var Qe=t=>({roomName:t});function Ze(t,c){if(t&1&&(Va(0,`li`),Ot$1(1),S_(2,`translate`),jd()),t&2){let e=ve(2);se(),Py(x_(2,1,`accessories.delete_room_move_accessories`,w_(4,Qe,e.targetRoomName())))}}function et(t,c){if(t&1&&(Va(0,`li`),Ot$1(1),S_(2,`translate`),jd()),t&2){let e=ve(2);se(),Py(x_(2,1,`accessories.delete_room_new_default`,w_(4,Qe,e.newDefaultRoomName())))}}function tt(t,c){if(t&1&&(Va(0,`div`,18)(1,`div`,22),Ot$1(2),S_(3,`translate`),Dy(4,`br`),Va(5,`ul`,26),Fe(6,Ze,3,6,`li`),Fe(7,et,3,6,`li`),jd()()()),t&2){let e=ve();se(2),kt$1(` `,N_(3,3,`common.phrases.are_you_sure`),` `),se(4),Le(e.targetRoomName()?6:-1),se(),Le(e.isDefault&&e.newDefaultRoomName()?7:-1)}}var Xe=(()=>{class t{$activeModal=g(fe);data=g(me);roomName=this.data.roomName;isDefault=this.data.isDefault;existingRooms=this.data.existingRooms;currentRoomIndex=this.data.currentRoomIndex;deleteMode=q(!1);formWasInvalid=q(!1);initialFormValue={roomName:null,isDefault:null};roomForm=new $({roomName:new Se(``,[ve$1.required]),isDefault:new Se(!1)});ngOnInit(){this.roomForm.patchValue({roomName:this.roomName,isDefault:this.isDefault}),this.initialFormValue=this.roomForm.getRawValue(),this.roomForm.controls.roomName.addValidators(this.duplicateRoomNameValidator.bind(this)),this.roomForm.controls.roomName.updateValueAndValidity(),(this.isOnlyRoom()||this.isDefault)&&this.roomForm.controls.isDefault.disable()}duplicateRoomNameValidator(e){if(!e.value)return null;let i=e.value.trim();return i&&this.existingRooms.some((d,C)=>C!==this.currentRoomIndex&&d.name.trim().toLowerCase()===i.toLowerCase())?{duplicateRoom:!0}:null}isOnlyRoom=J(()=>this.existingRooms.length===1);targetRoomName=J(()=>this.isDefault?this.existingRooms.filter((i,n)=>n!==this.currentRoomIndex)[0]?.name||``:this.existingRooms.find(i=>i.isDefault)?.name||this.existingRooms[0]?.name||``);newDefaultRoomName=J(()=>this.isDefault&&this.existingRooms.filter((i,n)=>n!==this.currentRoomIndex)[0]?.name||``);toggleDeleteMode(e){this.deleteMode.set(!this.deleteMode()),this.deleteMode()?(this.formWasInvalid.set(this.roomForm.invalid),this.roomForm.disable()):(this.roomForm.enable(),(this.isOnlyRoom()||this.isDefault)&&this.roomForm.controls.isDefault.disable()),e.target.blur()}isFormUnchanged(){return JSON.stringify(this.roomForm.getRawValue())===JSON.stringify(this.initialFormValue)}dismissModal(){this.$activeModal.dismiss(`Dismiss`)}closeModal(){if(!(!this.deleteMode()&&this.roomForm.invalid))if(this.deleteMode())this.$activeModal.close({delete:!0});else{let e=this.roomForm.getRawValue();this.$activeModal.close({name:e.roomName?.trim()||``,isDefault:e.isDefault||!1})}}static ɵfac=function(i){return new(i||t)};static ɵcmp=nc({type:t,selectors:[[`app-edit-room`]],decls:42,vars:41,consts:[[1,`modal-content`],[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-4`],[1,`fas`,`fa-pen`,`primary-text`,`icon-xl`],[1,`list-group`,`list-group-box`],[1,`list-group-item`,`d-flex`,`flex-column`,`flex-md-row`,`align-items-center`],[`for`,`form-name`,1,`mb-2`,`mb-md-0`,`w-100`,`w-md-50`],[1,`text-start`,`text-md-end`,`w-100`,`w-md-50`],[`autocomplete`,`off`,`type`,`text`,`id`,`form-name`,`formControlName`,`roomName`,1,`form-control`,`custom-input`],[1,`list-group-item`,`d-flex`,`justify-content-between`,`align-items-center`,`flex-row`,`pb-2`],[1,`text-start`,`flex-grow-1`,`me-3`],[1,`text-end`,`grey-text`,`d-flex`,`align-items-center`],[`type`,`checkbox`,`formControlName`,`isDefault`,`id`,`form-default`,1,`rendux-input`,`mb-0`,3,`disabled`],[`for`,`form-default`,1,`rendux-label`,`ms-3`],[1,`alert`,`alert-warning`,`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-elegant`,`me-2`,3,`click`,`disabled`],[`type`,`submit`,`data-bs-dismiss`,`modal`,3,`disabled`],[1,`d-inline-block`,`text-start`,`mb-0`]],template:function(i,n){i&1&&(Va(0,`div`,0)(1,`form`,1),ac(`ngSubmit`,function(){return n.closeModal()}),Va(2,`div`,2)(3,`h5`,3),Ot$1(4),S_(5,`translate`),jd(),Va(6,`button`,4),S_(7,`translate`),ac(`click`,function(){return n.dismissModal()}),jd()(),Va(8,`div`,5)(9,`div`,6),Dy(10,`i`,7),jd(),Va(11,`ul`,8)(12,`li`,9)(13,`label`,10),Ot$1(14),S_(15,`translate`),Dy(16,`app-required-indicator`),jd(),Va(17,`div`,11),Dy(18,`input`,12),db(),jd()(),Va(19,`li`,13)(20,`span`,14),Ot$1(21),S_(22,`translate`),Dy(23,`app-required-indicator`),jd(),Va(24,`div`,15),Dy(25,`input`,16),S_(26,`translate`),db(),Dy(27,`label`,17),jd()()(),Fe(28,tt,8,5,`div`,18),jd(),Va(29,`div`,19)(30,`div`,20)(31,`button`,21),ac(`click`,function(){return n.dismissModal()}),Ot$1(32),S_(33,`translate`),jd()(),Dy(34,`div`,22),Va(35,`div`,23)(36,`button`,24),S_(37,`translate`),ac(`click`,function(C){return n.toggleDeleteMode(C)}),Dy(38,`i`),jd(),Va(39,`button`,25),Ot$1(40),S_(41,`translate`),jd()()()()()),i&2&&(se(),vy(`formGroup`,n.roomForm),se(3),Py(N_(5,25,`accessories.button_edit_room`)),se(2),Cr(`aria-label`,N_(7,27,`form.button_close`)),se(5),Ay(`opacity-muted`,n.deleteMode())(`mb-0`,!n.deleteMode())(`mb-4`,n.deleteMode()),se(3),kt$1(` `,N_(15,29,`accessories.room_name`)),se(4),Ay(`is-invalid`,n.roomForm.controls.roomName.touched&&n.roomForm.controls.roomName.invalid),pb(),se(3),kt$1(` `,N_(22,31,`accessories.control.default_room`)),se(4),vy(`disabled`,n.isOnlyRoom()||n.isDefault),Cr(`aria-label`,N_(26,33,`accessories.control.default_room`)),pb(),se(3),Le(n.deleteMode()?28:-1),se(4),kt$1(` `,N_(33,35,`form.button_close`),` `),se(4),vy(`disabled`,n.isOnlyRoom()),Cr(`aria-label`,N_(37,37,`accessories.button_delete_room`)),se(2),Jt(n.deleteMode()?`fas fa-undo`:`fas fa-trash`),se(),Jt(`btn ${n.deleteMode()?`btn-danger`:`btn-primary`}`),vy(`disabled`,!n.deleteMode()&&(n.roomForm.invalid||n.isFormUnchanged())),se(),kt$1(` `,N_(41,39,n.deleteMode()?`form.button_delete`:`form.button_save`),` `))},dependencies:[Jn,zn,Ye,Mt$1,Hn,Ln,Cn,_n,c,v3],encapsulation:2})}return t})();var it=(t,c)=>({dropdown:t,showManageLayout:c});var nt=()=>({showManageLayout:!1,showTooltip:!1});var ot=()=>({showManageLayout:!0,showTooltip:!0});var at=t=>({link:t});var rt=(t,c)=>c.name;var st=(t,c)=>c.uniqueId;function lt(t,c){t&1&&Dy(0,`i`,8)}function dt(t,c){t&1&&Dy(0,`i`,8)}function ct(t,c){if(t&1){let e=sc();Va(0,`button`,13),ac(`click`,function(){let n=Ko(e).$implicit;return Qo(ve(2).toggleBridge(n))}),Va(1,`span`,7),Fe(2,dt,1,0,`i`,8),jd(),Ot$1(3),jd()}if(t&2){let e=c.$implicit,i=ve(2);Ay(`active`,i.isBridgeSelected(e)),se(2),Le(i.isBridgeSelected(e)?2:-1),se(),kt$1(` `,e,` `)}}function mt(t,c){t&1&&Dy(0,`div`,11)}function pt(t,c){t&1&&Dy(0,`i`,8)}function ut(t,c){if(t&1){let e=sc();Fe(0,mt,1,0,`div`,11),Va(1,`button`,13),ac(`click`,function(){Ko(e);return Qo(ve(2).toggleManageLayout())}),Va(2,`span`,7),Fe(3,pt,1,0,`i`,8),jd(),Ot$1(4),S_(5,`translate`),jd()}if(t&2){let e=ve(2);Le(e.availableBridges().length?0:-1),se(),Ay(`active`,e.manageLayoutMode),se(2),Le(e.manageLayoutMode?3:-1),se(),kt$1(` `,N_(5,5,`accessories.manage_layout`),` `)}}function _t(t,c){if(t&1){let e=sc();Va(0,`div`,5)(1,`button`,6),ac(`click`,function(){Ko(e);return Qo(ve().clearBridgeFilter())}),Va(2,`span`,7),Fe(3,lt,1,0,`i`,8),jd(),Ot$1(4),S_(5,`translate`),jd(),Va(6,`button`,9),S_(7,`translate`),ac(`click`,function(){let n=Ko(e).dropdown;return Qo(n.close())}),Dy(8,`i`,10),jd()(),Dy(9,`div`,11),_T(10,ct,4,4,`button`,12,TT),Fe(12,ut,6,7)}if(t&2){let e=c.showManageLayout,i=ve();se(),Ay(`active`,i.isShowingAllBridges),se(2),Le(i.isShowingAllBridges?3:-1),se(),kt$1(` `,N_(5,6,`accessories.filter_all_bridges`),` `),se(2),Cr(`aria-label`,N_(7,8,`form.button_close`)),se(4),ST(i.availableBridges()),se(2),Le(e?12:-1)}}function gt(t,c){t&1&&Iy(0)}function ft(t,c){if(t&1&&(Va(0,`div`,14,3)(2,`button`,15),S_(3,`translate`),S_(4,`translate`),Dy(5,`i`,16),jd(),Va(6,`div`,17),S_(7,`translate`),gy(8,gt,1,0,`ng-container`,18),jd()()),t&2){let e=c.showManageLayout,i=c.showTooltip,n=UT(1);ve();let d=UT(1);se(2),vy(`container`,i?`body`:``)(`placement`,i?`bottom`:``)(`openDelay`,i?150:0)(`triggers`,i?`hover`:``)(`ngbTooltip`,i?N_(3,9,`accessories.filter_by_bridge`):null),Cr(`aria-label`,N_(4,11,`accessories.filter_by_bridge`)),se(4),Cr(`aria-label`,N_(7,13,`accessories.filter_by_bridge`)),se(2),vy(`ngTemplateOutlet`,d)(`ngTemplateOutletContext`,C_(15,it,n,e))}}function ht(t,c){if(t&1){let e=sc();Va(0,`button`,19),S_(1,`translate`),ac(`click`,function(){Ko(e);return Qo(ve().openSupport())}),Dy(2,`i`,20),jd()}t&2&&Cr(`aria-label`,N_(1,1,`support.title`))}function bt(t,c){t&1&&Iy(0)}function Ct(t,c){if(t&1&&gy(0,bt,1,0,`ng-container`,18),t&2){ve(2);vy(`ngTemplateOutlet`,UT(3))(`ngTemplateOutletContext`,I_(2,nt))}}function vt(t,c){t&1&&Iy(0)}function xt(t,c){if(t&1){let e=sc();Va(0,`button`,29),S_(1,`translate`),S_(2,`translate`),ac(`click`,function(){Ko(e);return Qo(ve(2).addRoom())}),Dy(3,`i`,30),jd(),Va(4,`button`,29),S_(5,`translate`),S_(6,`translate`),S_(7,`translate`),S_(8,`translate`),ac(`click`,function(){Ko(e);let n=ve(2);return Qo(n.hideHidden.set(!n.hideHidden()))}),Dy(9,`i`,31),jd()}if(t&2){let e=ve(2);vy(`hidden`,e.isMobile())(`openDelay`,150)(`ngbTooltip`,N_(1,12,`accessories.button_add_room`)),Cr(`aria-label`,N_(2,14,`accessories.button_add_room`)),se(4),vy(`hidden`,e.isMobile())(`openDelay`,150)(`ngbTooltip`,e.hideHidden()?N_(5,16,`accessories.button_hidden_show`):N_(6,18,`accessories.button_hidden_hide`)),Cr(`aria-label`,e.hideHidden()?N_(7,20,`accessories.button_hidden_show`):N_(8,22,`accessories.button_hidden_hide`)),se(5),Ay(`fa-eye`,!e.hideHidden())(`fa-eye-slash`,e.hideHidden())}}function Mt(t,c){t&1&&Iy(0)}function yt(t,c){if(t&1&&gy(0,Mt,1,0,`ng-container`,18),t&2){ve(2);vy(`ngTemplateOutlet`,UT(3))(`ngTemplateOutletContext`,I_(2,ot))}}function wt(t,c){t&1&&Iy(0)}function St(t,c){if(t&1){let e=sc();Va(0,`div`,4)(1,`div`,36)(2,`h5`,37),Ot$1(3),jd(),Va(4,`button`,38),S_(5,`translate`),S_(6,`translate`),ac(`click`,function(){Ko(e);let n=ve().$index;return Qo(ve(3).editRoom(n))}),Dy(7,`i`,39),jd()()()}if(t&2){let e=ve().$implicit,i=ve(3);se(2),Ay(`cursor-move`,!i.isMobile()),se(),kt$1(` `,e.name,` `),se(),Ay(`edit-room-hidden`,i.isMobile()),vy(`openDelay`,150)(`ngbTooltip`,N_(5,8,`accessories.button_edit_room`)),Cr(`aria-label`,N_(6,10,`accessories.button_edit_room`))}}function Dt(t,c){if(t&1&&(Va(0,`div`,41),Dy(1,`app-accessory-tile`,42),jd()),t&2){let e=ve().$implicit;se(),vy(`service`,e)}}function Tt(t,c){if(t&1&&Fe(0,Dt,2,1,`div`,41),t&2){let e=c.$implicit;Le(ve(5).shouldDisplayService(e)?0:-1)}}function Bt(t,c){t&1&&Dy(0,`div`,43)(1,`div`,43)(2,`div`,43)(3,`div`,43)(4,`div`,43)(5,`div`,43)(6,`div`,43)(7,`div`,43)(8,`div`,43)(9,`div`,43)}function At(t,c){if(t&1){let e=sc();Va(0,`div`,40),ac(`dragulaModelChange`,function(n){Ko(e);let d=ve().$implicit;return Qo(ve(3).onServicesReorder(d,n))}),_T(1,Tt,1,1,null,null,st),Fe(3,Bt,10,0),jd()}if(t&2){let e=ve().$implicit,i=ve(3);vy(`dragulaModel`,e.services),se(),ST(e.services),se(2),Le(i.manageLayoutMode?-1:3)}}function Ot(t,c){if(t&1){let e=sc();Va(0,`div`,44),ac(`dragulaModelChange`,function(n){Ko(e);let d=ve().$implicit;return Qo(ve(3).onServicesReorder(d,n))}),Dy(1,`app-drag-here-placeholder`,45),jd()}if(t&2){let e=ve().$implicit;vy(`dragulaModel`,e.services)}}function Et(t,c){if(t&1&&(Va(0,`div`),Fe(1,St,8,12,`div`,4),Va(2,`div`,33),Fe(3,At,4,2,`div`,34),Fe(4,Ot,2,1,`div`,35),jd()()),t&2){let e=c.$implicit,i=ve(3);se(),Le(!i.isMobile()||e.services.length?1:-1),se(2),Le(e.services.length?3:-1),se(),Le(!e.services.length&&!i.isMobile()?4:-1)}}function Rt(t,c){if(t&1){let e=sc();Va(0,`div`,32),Uy(`dragulaModelChange`,function(n){Ko(e);let d=ve(2);return m_(d.rooms,n)||(d.rooms=n),Qo(n)}),_T(1,Et,5,3,`div`,null,rt),jd()}if(t&2){let e=ve(2);$y(`dragulaModel`,e.rooms),se(),ST(e.rooms)}}function kt(t,c){t&1&&(Va(0,`div`,28)(1,`div`,46)(2,`div`,47),Dy(3,`i`,48),jd(),Va(4,`h5`,49),Ot$1(5),S_(6,`translate`),jd(),Va(7,`p`,50),Ot$1(8),S_(9,`translate`),jd(),Va(10,`p`,51),Ot$1(11),S_(12,`translate`),jd()()()),t&2&&(se(5),Py(N_(6,3,`accessories.no_plugins.title`)),se(3),Py(N_(9,5,`accessories.no_plugins.message_1`)),se(3),Py(N_(12,7,`accessories.no_plugins.message_2`)))}function Nt(t,c){if(t&1&&(Va(0,`div`,21)(1,`div`,22)(2,`h3`,23),Ot$1(3),S_(4,`translate`),jd()(),Va(5,`div`,24),Fe(6,Ct,1,3,`ng-container`),gy(7,vt,1,0,`ng-container`,25),jd(),Va(8,`div`,26),Fe(9,xt,10,24),Fe(10,yt,1,3,`ng-container`),gy(11,wt,1,0,`ng-container`,25),jd()(),Fe(12,Rt,3,1,`div`,27)(13,kt,13,9,`div`,28)),t&2){let e=ve(),i=UT(5);se(3),Py(N_(4,7,`menu.label_accessories`)),se(3),Le(e.shouldShowFilters()?6:-1),se(),vy(`ngTemplateOutlet`,i),se(2),Le(e.hasPlugins()?9:-1),se(),Le(e.shouldShowFilters()?10:-1),se(),vy(`ngTemplateOutlet`,i),se(),Le(e.hasPlugins()?12:13)}}function Ft(t,c){t&1&&(Va(0,`p`,57),Ot$1(1),S_(2,`translate`),jd()),t&2&&(se(),Py(N_(2,1,`accessories.settings_link`)))}function Pt(t,c){if(t&1&&(Va(0,`div`,4)(1,`div`,52)(2,`h3`,53),Ot$1(3),S_(4,`translate`),jd()(),Va(5,`div`,28)(6,`div`,54)(7,`div`,47),Dy(8,`i`,55),jd(),Va(9,`h5`,49),Ot$1(10),S_(11,`translate`),jd(),Dy(12,`p`,56),S_(13,`translate`),Fe(14,Ft,3,3,`p`,57),jd()()()),t&2){let e=ve();se(3),Py(N_(4,4,`menu.label_accessories`)),se(7),Py(N_(11,6,`accessories.control_disabled`)),se(2),vy(`innerHTML`,x_(13,8,`accessories.message_must_use_insecure_mode`,w_(11,at,e.linkInsecure)),Ga),se(2),Le(e.isAdmin?14:-1)}}var Fi=(()=>{class t{$accessories=g(le);destroyRef=g(Z);$auth=g(he);dragulaService=g(oe);$md=g(N);injector=g(Te);$modal=g(si);$settings=g(zt);$translate=g(Nf);$ws=g(ds);ioStatus;ioChild;get bridgeUsernameToNameMap(){return this.$accessories.bridgeUsernameToNameMap}isAdmin=this.$auth.user.admin;enableAccessories=this.$settings.env.enableAccessories;isMobile=q(!1);hideHidden=q(!0);linkInsecure=`<a href="https://github.com/homebridge/homebridge-config-ui-x/wiki/Enabling-Accessory-Control" target="_blank"><i class="fas fa-up-right-from-square primary-text"></i></a>`;hasPlugins=q(this.$settings.env.hasInstalledPlugins??!0);manageLayoutMode=!1;previousBridgeSelection=null;availableBridges=this.$accessories.availableBridges;selectedBridges=this.$accessories.selectedBridges;shouldShowFilters=J(()=>this.hasPlugins()&&this.availableBridges().length>0);get rooms(){return this.$accessories.rooms()}set rooms(e){this.$accessories.rooms.set(e)}constructor(){let e=this.dragulaService;this.isMobile.set(this.$md.detect.mobile()||!1),e.createGroup(`rooms-bag`,{moves:(i,n,d)=>this.manageLayoutMode&&!!d?.classList.contains(`drag-handle`)}),e.createGroup(`services-bag`,{moves:i=>this.manageLayoutMode&&!i?.classList.contains(`no-drag`)}),e.drop().pipe(An()).subscribe(()=>{setTimeout(()=>{this.$accessories.saveLayout()})}),this.isMobile.set(!0)}ngOnInit(){let e=this.$translate.instant(`menu.label_accessories`);this.$settings.setPageTitle(e);let i=this.selectedBridges();(i===null||i.length===0)&&this.availableBridges().length>0&&this.selectedBridges.set([...this.availableBridges()]),this.$accessories.start(),this.setupBridgeNameMapping(),this.$accessories.accessoryData.pipe(An(this.destroyRef)).subscribe(()=>{this.updateAvailableBridges()})}addRoom(){return E(this,null,function*(){let e=uy([{provide:ce,useValue:{existingRooms:this.$accessories.rooms()}}],this.injector),i=this.$modal.open(Je,{size:`lg`,backdrop:`static`,injector:e});try{let n=yield i.result;if(!n?.name||!n.name.length)return;n.isDefault&&this.$accessories.rooms.update(d=>d.map(C=>x(w({},C),{isDefault:!1}))),this.$accessories.rooms.update(d=>[...d,{name:n.name,isDefault:n.isDefault,services:[]}]),this.$accessories.saveLayout(),this.isMobile()&&this.toggleLayoutLock()}catch(n){}})}editRoom(e){return E(this,null,function*(){let i=this.$accessories.rooms()[e];if(!i)return;let n=uy([{provide:me,useValue:{roomName:i.name,isDefault:i.isDefault||!1,existingRooms:this.$accessories.rooms(),currentRoomIndex:e}}],this.injector),d=this.$modal.open(Xe,{size:`lg`,backdrop:`static`,injector:n});try{let C=yield d.result;if(C?.delete){let w$1=this.$accessories.rooms()[e];if(!w$1)return;let x$1;if(w$1.isDefault)x$1=e===0?1:0;else{let B=this.$accessories.rooms().findIndex(R=>R.isDefault);x$1=B!==-1?B:0}w$1.isDefault&&this.$accessories.rooms.update(B=>B.map((R,U)=>U===x$1?x(w({},R),{isDefault:!0}):x(w({},R),{isDefault:!1})));let G=w$1.services;G.length>0&&this.$accessories.rooms.update(B=>B.map((R,U)=>U===x$1?x(w({},R),{services:[...R.services,...G]}):R)),this.$accessories.rooms.update(B=>B.filter((R,U)=>U!==e)),this.$accessories.saveLayout();return}if(!C?.name||!C.name.length)return;C.isDefault&&this.$accessories.rooms.update(w$2=>w$2.map(x$2=>x(w({},x$2),{isDefault:!1}))),this.$accessories.rooms.update(w$3=>w$3.map((x$3,G)=>G===e?x(w({},x$3),{name:C.name,isDefault:C.isDefault??!1}):x$3)),this.$accessories.saveLayout()}catch(C){}})}toggleLayoutLock(){this.isMobile.set(!this.isMobile())}openSupport(){this.$modal.open(ze,{size:`lg`,backdrop:`static`})}ngOnDestroy(){this.$accessories.stop(),this.dragulaService.destroy?.(`rooms-bag`),this.dragulaService.destroy?.(`services-bag`),this.ioStatus?.end?.(),this.ioChild?.end?.()}setupBridgeNameMapping(){this.ioStatus=this.$ws.connectToNamespace(`status`),this.ioStatus.connected.pipe(An(this.destroyRef)).subscribe(()=>{this.ioStatus.socket.emit(`monitor-server-status`)}),this.ioStatus.socket.on(`homebridge-status`,e=>{e.username&&this.bridgeUsernameToNameMap.set(e.username,`Homebridge`)}),this.ioChild=this.$ws.connectToNamespace(`child-bridges`),this.ioChild.connected.pipe(An(this.destroyRef)).subscribe(()=>{this.ioChild.socket.emit(`monitor-child-bridge-status`),this.fetchChildBridges()}),this.ioChild.socket.on(`child-bridge-status-update`,e=>{this.bridgeUsernameToNameMap.set(e.username,e.name)})}fetchChildBridges(){this.ioChild.request(`get-homebridge-child-bridge-status`).subscribe(e=>{e.forEach(i=>{this.bridgeUsernameToNameMap.set(i.username,i.name)})})}updateAvailableBridges(){let e=new Set;this.$accessories.rooms().forEach(w=>{w.services.forEach(x=>{if(x.instance?.username){let B=this.bridgeUsernameToNameMap.get(x.instance.username)||x.instance.name;B&&e.add(B)}})});let i=[...e].toSorted((w,x)=>w===`Homebridge`?-1:x===`Homebridge`?1:w.localeCompare(x)),n=this.availableBridges(),d=this.selectedBridges();JSON.stringify(i)!==JSON.stringify(n)&&i.length>=n.length&&(d===null||d.length===0?this.selectedBridges.set([...i]):d.length===n.length&&n.length>0?this.selectedBridges.set([...i]):this.selectedBridges.set(d.filter(x=>i.includes(x))),this.availableBridges.set(i))}onServicesReorder(e,i){this.$accessories.rooms.update(n=>n.map(d=>d===e?x(w({},d),{services:i}):d))}shouldDisplayService(e){if(this.manageLayoutMode)return!0;if(this.hideHidden()&&e.hidden)return!1;if(e.instance?.username){let n=this.bridgeUsernameToNameMap.get(e.instance.username)||e.instance.name,d=this.selectedBridges();if(d===null)return!0;if(d.length===0||n&&!d.includes(n))return!1}return!0}toggleBridge(e){if(this.manageLayoutMode){this.selectedBridges.set([e]),this.manageLayoutMode=!1,this.previousBridgeSelection=null,this.isMobile()||this.toggleLayoutLock();return}let i=this.selectedBridges()??[],n=i.indexOf(e);n===-1?this.selectedBridges.set([...i,e]):this.selectedBridges.set(i.filter((d,C)=>C!==n)),this.isMobile()||this.toggleLayoutLock()}isBridgeSelected(e){return this.manageLayoutMode?!1:this.selectedBridges()?.includes(e)??!1}clearBridgeFilter(){if(this.manageLayoutMode){this.selectedBridges.set([...this.availableBridges()]),this.manageLayoutMode=!1,this.previousBridgeSelection=null,this.isMobile()||this.toggleLayoutLock();return}this.isShowingAllBridges?this.selectedBridges.set([]):this.selectedBridges.set([...this.availableBridges()]),this.isMobile()||this.toggleLayoutLock()}get isShowingAllBridges(){let e=this.selectedBridges(),i=this.availableBridges();return e!==null&&e.length===i.length&&i.length>0&&!this.manageLayoutMode}toggleManageLayout(){if(this.manageLayoutMode=!this.manageLayoutMode,this.manageLayoutMode){let e=this.selectedBridges();this.previousBridgeSelection=e?[...e]:null,this.isMobile()&&this.toggleLayoutLock()}else this.selectedBridges.set(this.previousBridgeSelection?[...this.previousBridgeSelection]:null),this.previousBridgeSelection=null,this.isMobile()||this.toggleLayoutLock()}static ɵfac=function(i){return new(i||t)};static ɵcmp=nc({type:t,selectors:[[`app-accessories`]],decls:8,vars:1,consts:[[`bridgeFilterMenu`,``],[`bridgeFilterDropdown`,``],[`supportButton`,``],[`dropdown`,`ngbDropdown`],[1,`row`],[1,`dropdown-item`,`d-flex`,`justify-content-between`,`align-items-center`,`px-0`,`bridge-filter-header`],[`type`,`button`,`ngbDropdownItem`,``,1,`flex-grow-1`,`border-0`,3,`click`],[1,`bridge-filter-check`],[`aria-hidden`,`true`,1,`fas`,`fa-check`,`primary-text`],[`type`,`button`,1,`btn`,`btn-sm`,`btn-link`,`text-secondary`,`p-0`,`pe-2`,`bridge-close-btn`,3,`click`],[`aria-hidden`,`true`,1,`fas`,`fa-times`],[1,`dropdown-divider`],[`type`,`button`,`ngbDropdownItem`,``,3,`active`],[`type`,`button`,`ngbDropdownItem`,``,3,`click`],[`ngbDropdown`,``,`autoClose`,`outside`,`placement`,`bottom-end`,1,`d-inline-block`,`me-2`],[`type`,`button`,`ngbDropdownToggle`,``,1,`btn`,`btn-elegant`,`my-0`,3,`container`,`placement`,`openDelay`,`triggers`,`ngbTooltip`],[`aria-hidden`,`true`,1,`fas`,`fa-house`],[`ngbDropdownMenu`,``],[4,`ngTemplateOutlet`,`ngTemplateOutletContext`],[`type`,`button`,1,`btn`,`btn-elegant`,`my-0`,`me-0`,3,`click`],[`aria-hidden`,`true`,1,`far`,`fa-circle-question`],[1,`row`,`mb-3`],[1,`col-6`],[1,`primary-text`,`m-0`],[1,`col-6`,`text-end`,`d-inline-block`,`d-sm-none`],[4,`ngTemplateOutlet`],[1,`col-6`,`text-end`,`d-none`,`d-sm-inline-block`],[`dragula`,`rooms-bag`,3,`dragulaModel`],[1,`col-12`,`text-center`],[`type`,`button`,`container`,`body`,`placement`,`bottom`,`triggers`,`hover`,1,`btn`,`btn-elegant`,`my-0`,`me-2`,3,`click`,`hidden`,`openDelay`,`ngbTooltip`],[`aria-hidden`,`true`,1,`fas`,`fa-folder-plus`],[`aria-hidden`,`true`,1,`fas`],[`dragula`,`rooms-bag`,3,`dragulaModelChange`,`dragulaModel`],[1,`row`,`mb-4`],[`dragula`,`services-bag`,1,`col-md-12`,`d-flex`,`flex-wrap`,`noselect`,`services-bag`,3,`dragulaModel`],[`dragula`,`services-bag`,1,`col-md-12`,`d-flex`,`flex-wrap`,`noselect`,3,`dragulaModel`],[1,`col-md-12`,`d-flex`,`align-items-center`],[1,`primary-text`,`drag-handle`,`room-title`,`m-0`,`mb-1`,`mb-sm-0`,`flex-grow-1`],[`type`,`button`,`container`,`body`,`placement`,`bottom`,`triggers`,`hover`,1,`btn`,`btn-elegant`,`ms-2`,3,`click`,`openDelay`,`ngbTooltip`],[`aria-hidden`,`true`,1,`fas`,`fa-cog`],[`dragula`,`services-bag`,1,`col-md-12`,`d-flex`,`flex-wrap`,`noselect`,`services-bag`,3,`dragulaModelChange`,`dragulaModel`],[1,`accessory-item`,`accessory-tab`],[3,`service`],[1,`accessory-box`,`accessory-box-placeholder`,`no-drag`],[`dragula`,`services-bag`,1,`col-md-12`,`d-flex`,`flex-wrap`,`noselect`,3,`dragulaModelChange`,`dragulaModel`],[1,`no-drag`],[`role`,`alert`,1,`alert`,`alert-warning`,`p-5`],[1,`text-center`,`mb-3`],[`aria-hidden`,`true`,1,`fas`,`fa-plug`,`primary-text`,`icon-xl`],[1,`mb-3`,`mt-0`],[1,`mb-0`,`small`],[1,`mb-0`,`small`,`mt-2`],[1,`col-12`],[1,`primary-text`,`m-0`,`mb-3`],[`role`,`alert`,1,`alert`,`alert-warning`,`p-4`],[`aria-hidden`,`true`,1,`fas`,`fa-lightbulb`,`primary-text`,`icon-xl`],[1,`mb-0`,`small`,3,`innerHTML`],[1,`mt-2`,`mb-0`,`small`]],template:function(i,n){i&1&&(gy(0,_t,13,10,`ng-template`,null,0,A_)(2,ft,9,18,`ng-template`,null,1,A_)(4,ht,3,3,`ng-template`,null,2,A_),Fe(6,Nt,14,9)(7,Pt,15,13,`div`,4)),i&2&&(se(6),Le(n.enableAccessories?6:7))},dependencies:[VS,Y,U,re,$$1,Q,gr,pr,IM,Ke,Kn,v3],styles:[`.room-title[_ngcontent-%COMP%]{margin-left:10px}@media(max-width:575px){.room-title[_ngcontent-%COMP%]{margin-left:7px}}.services-bag[_ngcontent-%COMP%]{min-height:170px;justify-content:space-between}.services-bag[_ngcontent-%COMP%]:after{content:"";flex:auto}@media(max-width:575px){.services-bag[_ngcontent-%COMP%]{min-height:initial}}.cursor-move[_ngcontent-%COMP%]{cursor:move}.edit-room-hidden[_ngcontent-%COMP%]{visibility:hidden;pointer-events:none}a[_ngcontent-%COMP%]:hover{text-decoration:none!important}.bridge-filter-check[_ngcontent-%COMP%]{display:inline-block;width:1.25rem;margin-right:.5rem;text-align:center}[_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .dropdown-item.d-flex[_ngcontent-%COMP%]{padding:0}[_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .dropdown-item.d-flex[_ngcontent-%COMP%] button.dropdown-item[_ngcontent-%COMP%]{margin:0}[_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%]:hover{background-color:transparent!important}[_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%] button.dropdown-item[_ngcontent-%COMP%]:hover{background-color:#0000000d!important}[_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%] button.dropdown-item.active[_ngcontent-%COMP%]:hover{background-color:#0000000d!important}[_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%] .bridge-close-btn[_ngcontent-%COMP%]{background-color:transparent!important;opacity:.6;transition:opacity .2s;padding-left:.25rem!important}[_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%] .bridge-close-btn[_ngcontent-%COMP%]:hover{opacity:1;background-color:transparent!important}[_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%] .bridge-close-btn[_ngcontent-%COMP%]:focus{box-shadow:none!important}[class*=config-ui-x-dark-mode] [_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%] button.dropdown-item[_ngcontent-%COMP%]:hover{background-color:#444!important}[class*=config-ui-x-dark-mode] [_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%] button.dropdown-item.active[_ngcontent-%COMP%]:hover{background-color:#444!important}[class*=config-ui-x-dark-mode] [_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%] .bridge-close-btn[_ngcontent-%COMP%]{color:#9e9e9e!important}[class*=config-ui-x-dark-mode] [_nghost-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .bridge-filter-header[_ngcontent-%COMP%] .bridge-close-btn[_ngcontent-%COMP%]:hover{color:#eee!important}`]})}return t})();export{Fi as AccessoriesComponent};