UNPKG

iobroker.lovelace

Version:

With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI

1 lines 11.3 kB
export const __rspack_esm_id=2721;export const __rspack_esm_ids=[2721];export const __webpack_modules__={66639(e,a,t){t.d(a,{Vu:()=>o,Xz:()=>i,cs:()=>r});t(44114),t(18111),t(61701),t(45367),t(92731);const r=(e,a)=>{const t=new Map,r=[];for(const e of a)e.floor_id?(t.has(e.floor_id)||t.set(e.floor_id,[]),t.get(e.floor_id).push(e.area_id)):r.push(e.area_id);return{floors:e.map(e=>({id:e.floor_id,areas:t.get(e.floor_id)||[]})),areas:r}},i=e=>{const a=[];for(const t of e.floors)a.push(...t.areas);return a.push(...e.areas),a},o=e=>e.floors.map(e=>e.id)},18198(e,a,t){t.d(a,{Dc:()=>n,Si:()=>s});var r=t(62826),i=t(5124),o=t(22441);t(47680),t(67094);const s=e=>{switch(e.level){case 0:return"M11,10H13V16H11V10M22,12H19V20H5V12H2L12,3L22,12M15,10A2,2 0 0,0 13,8H11A2,2 0 0,0 9,10V16A2,2 0 0,0 11,18H13A2,2 0 0,0 15,16V10Z";case 1:return"M12,3L2,12H5V20H19V12H22L12,3M10,8H14V18H12V10H10V8Z";case 2:return"M12,3L2,12H5V20H19V12H22L12,3M9,8H13A2,2 0 0,1 15,10V12A2,2 0 0,1 13,14H11V16H15V18H9V14A2,2 0 0,1 11,12H13V10H9V8Z";case 3:return"M12,3L22,12H19V20H5V12H2L12,3M15,11.5V10C15,8.89 14.1,8 13,8H9V10H13V12H11V14H13V16H9V18H13A2,2 0 0,0 15,16V14.5A1.5,1.5 0 0,0 13.5,13A1.5,1.5 0 0,0 15,11.5Z";case-1:return"M12,3L2,12H5V20H19V12H22L12,3M11,15H7V13H11V15M15,18H13V10H11V8H15V18Z"}return"M10,20V14H14V20H19V12H22L12,3L2,12H5V20H10Z"},n=e=>{switch(e.level){case 0:return"mdi:home-floor-0";case 1:return"mdi:home-floor-1";case 2:return"mdi:home-floor-2";case 3:return"mdi:home-floor-3";case-1:return"mdi:home-floor-negative-1"}return"mdi:home"};class c extends i.WF{render(){if(!this.floor)return i.s6;if(this.floor.icon)return i.qy`<ha-icon .icon="${this.floor.icon}"></ha-icon>`;const e=s(this.floor);return i.qy`<ha-svg-icon .path="${e}"></ha-svg-icon>`}}(0,r.Cg)([(0,o.MZ)({attribute:!1})],c.prototype,"floor",void 0),(0,r.Cg)([(0,o.MZ)()],c.prototype,"icon",void 0),c=(0,r.Cg)([(0,o.EM)("ha-floor-icon")],c)},11736(e,a,t){t.a(e,async function(e,r){try{t.r(a),t.d(a,{HaMoreInfoViewVacuumCleanAreas:()=>y});t(44114),t(18111),t(22489),t(61701),t(17642),t(58004),t(33853),t(45876),t(32475),t(15024),t(31698);var i=t(62826),o=t(5124),s=t(22441),n=t(66639),c=t(1087),l=t(65522),d=t(55931),h=t(38962),p=t(18350),m=(t(18198),t(47680),t(65829)),u=(t(67094),t(59241)),g=t(18047),v=e([h,p,m]);[h,p,m]=v.then?(await v)():v;const f="M12,8A4,4 0 0,1 16,12A4,4 0 0,1 12,16A4,4 0 0,1 8,12A4,4 0 0,1 12,8M12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12A2,2 0 0,0 12,10M10,22C9.75,22 9.54,21.82 9.5,21.58L9.13,18.93C8.5,18.68 7.96,18.34 7.44,17.94L4.95,18.95C4.73,19.03 4.46,18.95 4.34,18.73L2.34,15.27C2.21,15.05 2.27,14.78 2.46,14.63L4.57,12.97L4.5,12L4.57,11L2.46,9.37C2.27,9.22 2.21,8.95 2.34,8.73L4.34,5.27C4.46,5.05 4.73,4.96 4.95,5.05L7.44,6.05C7.96,5.66 8.5,5.32 9.13,5.07L9.5,2.42C9.54,2.18 9.75,2 10,2H14C14.25,2 14.46,2.18 14.5,2.42L14.87,5.07C15.5,5.32 16.04,5.66 16.56,6.05L19.05,5.05C19.27,4.96 19.54,5.05 19.66,5.27L21.66,8.73C21.79,8.95 21.73,9.22 21.54,9.37L19.43,11L19.5,12L19.43,13L21.54,14.63C21.73,14.78 21.79,15.05 21.66,15.27L19.66,18.73C19.54,18.95 19.27,19.04 19.05,18.95L16.56,17.95C16.04,18.34 15.5,18.68 14.87,18.93L14.5,21.58C14.46,21.82 14.25,22 14,22H10M11.25,4L10.88,6.61C9.68,6.86 8.62,7.5 7.85,8.39L5.44,7.35L4.69,8.65L6.8,10.2C6.4,11.37 6.4,12.64 6.8,13.8L4.68,15.36L5.43,16.66L7.86,15.62C8.63,16.5 9.68,17.14 10.87,17.38L11.24,20H12.76L13.13,17.39C14.32,17.14 15.37,16.5 16.14,15.62L18.57,16.66L19.32,15.36L17.2,13.81C17.6,12.64 17.6,11.37 17.2,10.2L19.31,8.65L18.56,7.35L16.15,8.39C15.38,7.5 14.32,6.86 13.12,6.62L12.75,4H11.25Z",_="M20 2H4C2.9 2 2 2.9 2 4V20C2 21.11 2.9 22 4 22H20C21.11 22 22 21.11 22 20V4C22 2.9 21.11 2 20 2M4 6L6 4H10.9L4 10.9V6M4 13.7L13.7 4H18.6L4 18.6V13.7M20 18L18 20H13.1L20 13.1V18M20 10.3L10.3 20H5.4L20 5.4V10.3Z";class y extends o.WF{firstUpdated(){this._loadAreas()}async _loadAreas(){if(this.params.entityId){this._loading=!0,this._error=void 0;try{const e=await(0,u.v)(this.hass,this.params.entityId),a=e?.options?.vacuum?.area_mapping||{},t=new Set(Object.keys(a)),r=Object.values(this.hass.areas).filter(e=>t.has(e.area_id));this._mappedHierarchy=(0,n.cs)(Object.values(this.hass.floors),r)}catch(e){this._error=e.message||"Failed to load areas"}finally{this._loading=!1}}}_toggleArea(e){const a=e.currentTarget.dataset.areaId,t=this._selectedAreaIds.indexOf(a);this._selectedAreaIds=t>=0?this._selectedAreaIds.filter(e=>e!==a):[...this._selectedAreaIds,a]}async _startCleaning(){if(this.params.entityId&&0!==this._selectedAreaIds.length){this._submitting=!0;try{await this.hass.callService("vacuum","clean_area",{entity_id:this.params.entityId,cleaning_area_id:this._selectedAreaIds}),this._selectedAreaIds=[],(0,c.r)(this,"close-child-view")}catch(e){this._error=e.message||"Failed to start cleaning"}finally{this._submitting=!1}}}_openSegmentMapping(){(0,g.b)(this,this.hass.localize,this.params.entityId)}_getMappedSections(){if(!this._mappedHierarchy)return[];const e=this._mappedHierarchy.floors.filter(e=>e.areas.length>0).map(e=>({floorId:e.id,areaIds:e.areas}));return this._mappedHierarchy.areas.length>0&&e.push({floorId:null,areaIds:this._mappedHierarchy.areas}),e}_renderSection(e,a){const t=e.floorId?this.hass.floors[e.floorId]:null,r=a?t?(0,d.X)(t):this.hass.localize("ui.dialogs.more_info_control.vacuum.other_areas"):null;return o.qy` <div class="section"> ${r?o.qy`<div class="section-header"> ${t?o.qy`<ha-floor-icon .floor="${t}"></ha-floor-icon>`:o.s6} <span class="section-name">${r}</span> </div>`:o.s6} <div class="area-grid"> ${e.areaIds.map(e=>this._renderAreaCard(e))} </div> </div> `}_renderAreaCard(e){const a=this.hass.areas[e];if(!a)return o.s6;const t=this._selectedAreaIds.indexOf(e),r=t>=0;return o.qy` <div class="area-card ${r?"selected":""}" data-area-id="${e}" @click="${this._toggleArea}"> ${r?o.qy`<span class="badge">${t+1}</span>`:o.s6} <div class="area-icon"> ${a.icon?o.qy`<ha-icon .icon="${a.icon}"></ha-icon>`:o.qy`<ha-svg-icon .path="${_}"></ha-svg-icon>`} </div> <div class="area-name">${(0,l.A)(a)}</div> </div> `}render(){if(this._loading)return o.qy` <div class="center"> <ha-spinner></ha-spinner> </div> `;if(this._error)return o.qy` <div class="content"> <ha-alert alert-type="error">${this._error}</ha-alert> </div> `;const e=this._getMappedSections();if(0===e.length)return o.qy` <div class="content empty-content"> <div class="empty"> <ha-svg-icon .path="${_}"></ha-svg-icon> <p class="empty-title"> ${this.hass.localize("ui.dialogs.more_info_control.vacuum.no_areas_header")} </p> <p> ${this.hass.localize(this.hass.user?.is_admin?"ui.dialogs.more_info_control.vacuum.no_areas_text":"ui.dialogs.more_info_control.vacuum.no_areas_text_non_admin")} </p> ${this.hass.user?.is_admin?o.qy` <ha-button appearance="plain" size="small" @click="${this._openSegmentMapping}"> <ha-svg-icon slot="start" .path="${f}"></ha-svg-icon> ${this.hass.localize("ui.dialogs.more_info_control.vacuum.configure")} </ha-button> `:o.s6} </div> </div> `;const a=e.length>1;return o.qy` <div class="content"> ${e.map(e=>this._renderSection(e,a))} <p class="hint"> ${this.hass.localize("ui.dialogs.more_info_control.vacuum.clean_areas_order_hint")} </p> </div> <div class="footer"> <ha-button @click="${this._startCleaning}" .disabled="${0===this._selectedAreaIds.length||this._submitting}"> ${this.hass.localize("ui.dialogs.more_info_control.vacuum.start_cleaning_areas")} ${this._selectedAreaIds.length>0?` (${this._selectedAreaIds.length})`:o.s6} </ha-button> </div> `}constructor(...e){super(...e),this._selectedAreaIds=[],this._loading=!0,this._submitting=!1}}y.styles=o.AH`:host{display:flex;flex-direction:column;height:100%}.center{display:flex;align-items:center;justify-content:center;padding:var(--ha-space-8)}.content{flex:1;overflow-y:auto;padding:var(--ha-space-4);display:flex;flex-direction:column;gap:var(--ha-space-4)}.empty-content{display:flex;align-items:center;justify-content:center}.empty{--mdc-icon-size:48px;display:flex;flex-direction:column;align-items:center;text-align:center;color:var(--secondary-text-color);padding:var(--ha-space-8) var(--ha-space-4);max-width:420px}.empty ha-button{--mdc-icon-size:18px}.empty .empty-title{font-size:var(--ha-font-size-l);font-weight:var(--ha-font-weight-medium);color:var(--primary-text-color);margin:var(--ha-space-3) 0 var(--ha-space-2)}.empty p{margin:0 0 var(--ha-space-4)}.section-header{display:flex;align-items:center;gap:var(--ha-space-2);margin-bottom:var(--ha-space-2);color:var(--secondary-text-color);--mdc-icon-size:20px}.section-name{font-size:var(--ha-font-size-m);font-weight:var(--ha-font-weight-medium)}.area-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--ha-space-3)}.area-card{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--ha-space-2);padding:12px;border-radius:var(--ha-card-border-radius,var(--ha-border-radius-lg));background:var(--card-background-color,#fff);border:1px solid var(--divider-color);cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;overflow:hidden;min-height:80px;color:var(--primary-text-color)}.area-card::before{content:"";display:block;inset:0;position:absolute;background-color:transparent;pointer-events:none;opacity:.2;transition:background-color 180ms ease-in-out,opacity 180ms ease-in-out}.area-card:hover::before{background-color:var(--divider-color)}.area-card.selected::before{background-color:var(--primary-color)}.area-card .badge{position:absolute;top:6px;inset-inline-end:6px;display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background-color:var(--primary-color);color:var(--text-primary-color);font-size:var(--ha-font-size-xs);font-weight:var(--ha-font-weight-medium);z-index:1}.area-icon{--mdc-icon-size:28px;color:var(--secondary-text-color)}.area-card.selected .area-icon{color:var(--primary-color)}.area-name{display:flex;align-items:center;justify-content:center;min-height:var(--ha-space-8);font-size:var(--ha-font-size-m);font-weight:var(--ha-font-weight-normal);text-align:center;line-height:var(--ha-line-height-condensed);word-break:break-word}.hint{margin:0;text-align:center;font-size:var(--ha-font-size-s);color:var(--secondary-text-color)}.footer{display:flex;justify-content:flex-end;padding:var(--ha-space-4);border-top:1px solid var(--divider-color);background:var(--ha-dialog-surface-background,var(--mdc-theme-surface,#fff));position:sticky;bottom:0;z-index:10}`,(0,i.Cg)([(0,s.MZ)({attribute:!1})],y.prototype,"hass",void 0),(0,i.Cg)([(0,s.MZ)({attribute:!1})],y.prototype,"params",void 0),(0,i.Cg)([(0,s.wk)()],y.prototype,"_mappedHierarchy",void 0),(0,i.Cg)([(0,s.wk)()],y.prototype,"_selectedAreaIds",void 0),(0,i.Cg)([(0,s.wk)()],y.prototype,"_loading",void 0),(0,i.Cg)([(0,s.wk)()],y.prototype,"_error",void 0),(0,i.Cg)([(0,s.wk)()],y.prototype,"_submitting",void 0),y=(0,i.Cg)([(0,s.EM)("ha-more-info-view-vacuum-clean-areas")],y),r()}catch(e){r(e)}})},18047(e,a,t){t.d(a,{b:()=>o});var r=t(1087);const i=()=>t.e(34617).then(t.bind(t,64480)),o=(e,a,t)=>{(0,r.r)(e,"show-child-view",{viewTag:"ha-more-info-view-vacuum-segment-mapping",viewImport:i,viewTitle:a("ui.dialogs.vacuum_segment_mapping.title"),viewParams:{entityId:t}})}}};