iobroker.lovelace
Version:
With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI
1 lines • 11.4 kB
JavaScript
export const __rspack_esm_id=67785;export const __rspack_esm_ids=[67785];export const __webpack_modules__={99939(t,e,i){i.d(e,{S_:()=>r,Xd:()=>c,lZ:()=>d});i(74423),i(18111),i(7588),i(17642),i(58004),i(33853),i(45876),i(32475),i(15024),i(31698);const s=["zone","persistent_notification"],n=(t,e)=>{if("call-service"!==e.action||!e.target?.entity_id&&!e.service_data?.entity_id&&!e.data?.entity_id)return;let i=e.service_data?.entity_id??e.data?.entity_id??e.target?.entity_id;Array.isArray(i)||(i=[i]);for(const e of i)t.add(e)},a=(t,e)=>{e&&("string"!=typeof e?(e.entity&&t.add(e.entity),e.camera_image&&t.add(e.camera_image),e.tap_action&&n(t,e.tap_action),e.hold_action&&n(t,e.hold_action)):t.add(e))},o=(t,e)=>{e.entity&&a(t,e.entity),e.entities&&Array.isArray(e.entities)&&e.entities.forEach(e=>a(t,e)),e.card&&o(t,e.card),e.cards&&Array.isArray(e.cards)&&e.cards.forEach(e=>o(t,e)),e.elements&&Array.isArray(e.elements)&&e.elements.forEach(e=>o(t,e)),e.badges&&Array.isArray(e.badges)&&e.badges.forEach(e=>a(t,e)),e.sections&&Array.isArray(e.sections)&&e.sections.forEach(e=>o(t,e))},r=t=>{const e=new Set;return t.views.forEach(t=>{o(e,t)}),e},c=(t,e)=>{const i=new Set;for(const n of Object.keys(t.states))e.has(n)||s.includes(n.split(".",1)[0])||i.add(n);return i},d=(t,e)=>{const i=r(e);return c(t,i)}},40747(t,e,i){i.d(e,{KT:()=>m,Bi:()=>_,ZI:()=>u,Yp:()=>f});i(74423),i(44114),i(18111),i(22489),i(20116),i(7588),i(61701),i(17642),i(58004),i(33853),i(45876),i(32475),i(15024),i(31698);var s=i(46190),n=i(71727),a=i(69093),o=i(28978);var r=i(79461),c=i(52220),d=i(95350),l=i(28669),h=i(24367);const y=new Set(["ai_task","automation","configurator","device_tracker","event","geo_location","notify","persistent_notification","script","sun","tag","todo","zone",...s.gt]),p=new Set(["backup","mobile_app"]),u=(t,e)=>({type:"grid",cards:t.map(t=>({type:"tile",entity:t,show_entity_picture:["camera","image","person"].includes((0,n.m)(t))||void 0})),...e}),_=(t,e,i,a=!0)=>{const d=[],l=t.states,h=[],y=i.title?i.title.toLowerCase():void 0,p=[];for(const t of e){const e=l[t],i=(0,n.m)(t);if("alarm_control_panel"===i){const e={type:"alarm-panel",entity:t};d.push(e)}else if("camera"===i){const e={type:"picture-entity",entity:t};d.push(e)}else if("image"===i){const e={type:"picture",image_entity:t};d.push(e)}else if("climate"===i){const e={type:"thermostat",entity:t,features:(l[t]?.attributes?.hvac_modes?.length??0)>1?[{type:"climate-hvac-modes",hvac_modes:l[t]?.attributes?.hvac_modes}]:void 0};d.push(e)}else if("humidifier"===i){const e={type:"humidifier",entity:t,features:[{type:"humidifier-toggle"}]};d.push(e)}else if("media_player"===i){const e={type:"media-control",entity:t};d.push(e)}else if("plant"===i){const e={type:"plant-status",entity:t};d.push(e)}else if("weather"===i){const e={type:"weather-forecast",entity:t,show_forecast:!1};d.push(e)}else if(!a||"scene"!==i&&"script"!==i){let i;const s=y&&e&&(i=(0,r.p)((0,o.u)(e),y))?{entity:t,name:i}:t;h.push(s)}else{const i={entity:t,show_icon:!0,show_name:!0};let s;y&&e&&(s=(0,r.p)((0,o.u)(e),y))&&(i.name=s),p.push(i)}}if(h.sort((e,i)=>{const a="string"==typeof e?e:e.entity,r="string"==typeof i?i:i.entity,d=s.JF.includes((0,n.m)(a))?"sensor":"control";return d!==(s.JF.includes((0,n.m)(r))?"sensor":"control")?"sensor"===d?1:-1:(0,c.xL)("string"==typeof e?l[e]?(0,o.u)(l[e]):"":l[e.entity]?t.formatEntityName(l[e.entity],e.name):"","string"==typeof i?l[i]?(0,o.u)(l[i]):"":l[i.entity]?t.formatEntityName(l[i.entity],i.name):"")}),0===h.length&&p.length>0)return _(t,e,i,!1);if(h.length>0||p.length>0){const t={type:"entities",entities:h,...i};p.length>0&&(t.footer={type:"buttons",entities:p}),d.unshift(t)}return d.length<2?d:[{type:"grid",square:!1,columns:1,cards:d}]},m=(t,e)=>{const i=[];for(const t of e){const e={type:"entity",entity:t};i.push(e)}return i},f=(t,e,i,s,r,u)=>{const m=t.states,f=t.areas,g=t.devices,v=t.entities,b=((t,e)=>{const i={},s=new Set(Object.values(e).filter(t=>t.entity_category||t.platform&&p.has(t.platform)||t.hidden).map(t=>t.entity_id));for(const e of Object.keys(t)){const n=t[e];y.has((0,a.t)(n))||s.has(n.entity_id)||(i[e]=t[e])}return i})(m,v),w={};for(const t of Object.keys(b)){const e=b[t];e.attributes.order&&(w[t]=e.attributes.order)}const E=((t,e,i,s)=>{const n={...s},a={},o={};for(const s of Object.values(i)){const i=s.area_id||s.device_id&&e[s.device_id]?.area_id;i&&i in t&&s.entity_id in n?(i in a||(a[i]=[]),a[i].push(n[s.entity_id]),delete n[s.entity_id]):s.device_id&&s.device_id in e&&s.entity_id in n&&(s.device_id in o||(o[s.device_id]=[]),o[s.device_id].push(n[s.entity_id]),delete n[s.entity_id])}for(const[t,e]of Object.entries(o))1===e.length&&(n[e[0].entity_id]=e[0],delete o[t]);return{areasWithEntities:a,devicesWithEntities:o,otherEntities:n}})(f,g,v,b);if(s?.hidden)for(const t of s.hidden)delete E.areasWithEntities[t];r&&(E.devicesWithEntities={},E.otherEntities={});const k=(t=>{const e=[],i={};return Object.keys(t).forEach(s=>{const a=t[s];"group"===(0,n.m)(s)?e.push(a):i[s]=a}),e.forEach(t=>t.attributes.entity_id.forEach(t=>{delete i[t]})),{groups:e,ungrouped:i}})(E.otherEntities);k.groups.sort((t,e)=>w[t.entity_id]-w[e.entity_id]);const $=[];for(const e of k.groups)$.push(..._(t,e.attributes.entity_id,{title:(0,o.u)(e),show_header_toggle:"hidden"!==e.attributes.control}));const x=((t,e,i,s,n,r)=>{const y={},{localize:p}=t;for(const t of Object.keys(r)){const e=r[t],i=(0,a.t)(e);i in y||(y[i]=[]),y[i].push(e.entity_id)}const u=[];if("person"in y){const t=[];if(1===y.person.length)u.push({type:"entities",entities:y.person});else{let e,i="";for(const s of y.person){const n=r[s];let a=n.attributes.entity_picture;if(!a){if(void 0===e){const t=getComputedStyle(document.body);e=encodeURIComponent(t.getPropertyValue("--light-primary-color").trim()),i=encodeURIComponent((t.getPropertyValue("--text-light-primary-color")||t.getPropertyValue("--primary-text-color")).trim())}a=`data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 50' width='50' height='50' style='background-color:${e}'%3E%3Cg%3E%3Ctext font-family='roboto' x='50%25' y='50%25' text-anchor='middle' stroke='${i}' font-size='1.3em' dy='.3em'%3E${(0,l._2)(n.attributes.friendly_name||"")}%3C/text%3E%3C/g%3E%3C/svg%3E`}t.push({type:"picture-entity",entity:s,aspect_ratio:"1",show_name:!1,image:a})}u.push({type:"grid",square:!0,columns:3,cards:t})}delete y.person}const m=[];for(const t of h.L)t in y&&(m.push(...y[t]),delete y[t]);const f={};for(const t of Object.keys(y))f[t]=(0,d.p$)(p,t);m.length&&(y._helpers=m,f._helpers=p("ui.panel.lovelace.strategy.original-states.helpers")),Object.keys(y).sort((t,e)=>(0,c.xL)(f[t],f[e])).forEach(e=>{u.push(..._(t,y[e].sort((t,e)=>(0,c.xL)((0,o.u)(r[t]),(0,o.u)(r[e]))),{title:f[e]}))});const g={path:e,title:i,cards:u};return s&&(g.icon=s),n&&(g.show_icon_and_title=n),g})(t,"default_view","Home",void 0,void 0,k.ungrouped),C=[],j=Object.keys(f);if(s?.order){const t=s.order;j.sort((0,c.u1)(t))}for(const e of j){if(!(e in E.areasWithEntities))continue;const i=E.areasWithEntities[e],s=f[e];C.push(..._(t,i.map(t=>t.entity_id),{title:s.name}))}const A=[],O=Object.entries(E.devicesWithEntities).sort((t,e)=>{const i=g[t[0]],s=g[e[0]];return(0,c.xL)(i.name_by_user||i.name||"",s.name_by_user||s.name||"")});for(const[i,s]of O){const n=g[i];A.push(..._(t,s.map(t=>t.entity_id),{title:n.name_by_user||n.name||e("ui.panel.config.devices.unnamed_device",{type:e(`ui.panel.config.devices.type.${n.entry_type||"device"}`)})}))}let z;if(i&&!u){const t=i.energy_sources.find(t=>"grid"===t.type);t&&t.stat_energy_from&&(z={title:e("ui.panel.lovelace.cards.energy.energy_distribution.title_today"),type:"energy-distribution",link_dashboard:!0})}return x.cards.unshift(...C,...$,...z?[z]:[]),x.cards.push(...A),x}},83824(t,e,i){i.a(t,async function(t,e){try{i(18111),i(61701);var s=i(62826),n=i(5124),a=i(22441),o=i(89784),r=i(22786),c=i(1087),d=i(71727),l=i(74705),h=i(15638),y=i(48091),p=i(74281),u=i(36158),_=i(95350),m=t([y,p,u]);[y,p,u]=m.then?(await m)():m;const f=(0,o.W)({fontFamily:"var(--ha-font-family-code)",fontSize:"var(--ha-font-size-xs)"});class g extends n.WF{firstUpdated(t){super.firstUpdated(t),this.hass.loadBackendTranslation("title")}render(){const t=this._data(this.hass.states,this.hass.localize,this.entities),e=Boolean(this.hass.userData?.showEntityIdPicker),i=this._columns(this.narrow,(0,h.qC)(this.hass.language,this.hass.translationMetadata.translations),e);return n.qy` <ha-data-table class="${e?"show-entity-id":""}" selectable .id="${"entity_id"}" .columns="${i}" .data="${t}" .searchLabel="${this.hass.localize("ui.panel.lovelace.unused_entities.search")}" .noDataText="${this.hass.localize("ui.panel.lovelace.unused_entities.no_data")}" @selection-changed="${this._handleSelectionChanged}"></ha-data-table> `}_handleSelectionChanged(t){const e=t.detail.value;(0,c.r)(this,"selected-changed",{selectedEntities:e})}_handleEntityClicked(t){const e=t.target.closest(".mdc-data-table__row").rowId;(0,c.r)(this,"hass-more-info",{entityId:e})}constructor(...t){super(...t),this.narrow=!1,this._data=(0,r.A)((t,e,i)=>(i||Object.keys(t)).map(t=>{const i=this.hass.states[t],[s,n,a]=(0,l.Cf)(i,[{type:"entity"},{type:"device"},{type:"area"}],this.hass.entities,this.hass.devices,this.hass.areas,this.hass.floors),o=[n,s].filter(Boolean).join(" "),r=(0,d.m)(t);return{icon:"",entity_id:t,stateObj:i,name:o,entity_name:s,device_name:n,area_name:a,domain_name:(0,_.p$)(e,r),last_changed:i.last_changed}})),this._columns=(0,r.A)((t,e,i)=>{const s={icon:{title:"",label:this.hass.localize("ui.panel.lovelace.unused_entities.state_icon"),type:"icon",template:t=>n.qy` <state-badge @click="${this._handleEntityClicked}" .hass="${this.hass}" .stateObj="${t.stateObj}"></state-badge> `},name:{title:this.hass.localize("ui.panel.lovelace.unused_entities.entity"),sortable:!0,filterable:!0,flex:2,main:!0,direction:"asc",template:s=>{const a=s.entity_name||s.device_name||s.entity_id,o=[s.area_name,s.entity_name?s.device_name:void 0].filter(Boolean).join(e?" ◂ ":" ▸ ");return n.qy` <div @click="${this._handleEntityClicked}" style="cursor:pointer"> ${a} ${o?n.qy`<div class="secondary">${o}</div>`:n.s6} ${t&&i?n.qy` <div class="secondary" style="${f}"> ${s.entity_id} </div> `:n.s6} </div> `}},entity_name:{title:"entity_name",filterable:!0,hidden:!0},device_name:{title:"device_name",filterable:!0,hidden:!0},area_name:{title:"area_name",filterable:!0,hidden:!0}};return s.entity_id={title:this.hass.localize("ui.panel.lovelace.unused_entities.entity_id"),sortable:!0,filterable:!0,hidden:t||!i},s.domain_name={title:this.hass.localize("ui.panel.lovelace.unused_entities.domain"),sortable:!0,filterable:!0,hidden:t||i},s.last_changed={title:this.hass.localize("ui.panel.lovelace.unused_entities.last_changed"),type:"numeric",sortable:!0,hidden:t,template:t=>n.qy` <ha-relative-time .hass="${this.hass}" .datetime="${t.last_changed}" capitalize></ha-relative-time> `},s})}}g.styles=n.AH`ha-data-table{--data-table-border-width:0;height:100%}ha-data-table.show-entity-id{--data-table-row-height:64px}`,(0,s.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"hass",void 0),(0,s.Cg)([(0,a.MZ)({type:Boolean})],g.prototype,"narrow",void 0),(0,s.Cg)([(0,a.MZ)({type:Array})],g.prototype,"entities",void 0),g=(0,s.Cg)([(0,a.EM)("hui-entity-picker-table")],g),e()}catch(t){e(t)}})}};