UNPKG

iobroker.lovelace

Version:

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

1 lines 13.8 kB
"use strict";(self.rspackChunkhome_assistant_frontend=self.rspackChunkhome_assistant_frontend||[]).push([[88815],{99939:function(e,t,a){a.d(t,{S_:function(){return o},Xd:function(){return d},lZ:function(){return c}});a(74423),a(18111),a(7588),a(17642),a(58004),a(33853),a(45876),a(32475),a(15024),a(31698),a(62953);const s=["zone","persistent_notification"],i=(e,t)=>{var a,s,i,r,n,o,d,c;if(!("call-service"===t.action&&(null!==(a=t.target)&&void 0!==a&&a.entity_id||null!==(s=t.service_data)&&void 0!==s&&s.entity_id||null!==(i=t.data)&&void 0!==i&&i.entity_id)))return;let l=null!==(r=null!==(n=null===(o=t.service_data)||void 0===o?void 0:o.entity_id)&&void 0!==n?n:null===(d=t.data)||void 0===d?void 0:d.entity_id)&&void 0!==r?r:null===(c=t.target)||void 0===c?void 0:c.entity_id;Array.isArray(l)||(l=[l]);for(const h of l)e.add(h)},r=(e,t)=>{t&&("string"!=typeof t?(t.entity&&e.add(t.entity),t.camera_image&&e.add(t.camera_image),t.tap_action&&i(e,t.tap_action),t.hold_action&&i(e,t.hold_action)):e.add(t))},n=(e,t)=>{t.entity&&r(e,t.entity),t.entities&&Array.isArray(t.entities)&&t.entities.forEach(t=>r(e,t)),t.card&&n(e,t.card),t.cards&&Array.isArray(t.cards)&&t.cards.forEach(t=>n(e,t)),t.elements&&Array.isArray(t.elements)&&t.elements.forEach(t=>n(e,t)),t.badges&&Array.isArray(t.badges)&&t.badges.forEach(t=>r(e,t)),t.sections&&Array.isArray(t.sections)&&t.sections.forEach(t=>n(e,t))},o=e=>{const t=new Set;return e.views.forEach(e=>{n(t,e)}),t},d=(e,t)=>{const a=new Set;for(const i of Object.keys(e.states))t.has(i)||s.includes(i.split(".",1)[0])||a.add(i);return a},c=(e,t)=>{const a=o(t);return d(e,a)}},81797:function(e,t,a){a.a(e,async function(e,t){try{a(89463),a(74423),a(26910),a(18111),a(22489),a(61701),a(3362),a(27495),a(62953);var s=a(40445),i=a(78648),r=a(5124),n=a(67576),o=a(6412),d=a(91450),c=a(22786),l=a(93905),h=a(1087),p=a(52220),u=(a(11382),a(65829)),y=a(36866),g=a(22675),m=a(45291),v=a(14503),f=a(99939),w=a(8349),_=a(43100),E=a(92708),b=e([u,y,w,_]);[u,y,w,_]=b.then?(await b)():b;let C,x,k,$,z,A,S,q,j,I,R,H=e=>e;class O extends r.WF{async focus(){var e,t;await this.updateComplete,await(null===(e=this._searchInput)||void 0===e?void 0:e.updateComplete),null===(t=this._searchInput)||void 0===t||t.focus()}render(){if(!(this.hass&&this.lovelace&&this._unusedEntities&&this._usedEntities))return r.s6;const e=this._suggestedCards(this._cards),t=this._otherCards(this._cards),a=this._energyCards(this._cards),s=this._customCards(this._cards);return(0,r.qy)(C||(C=H` <ha-input-search appearance="outlined" .value="${0}" @input="${0}" .placeholder="${0}"></ha-input-search> <div id="content" class="ha-scrollbar"> ${0} <div class="cards-container"> <div class="card manual" @click="${0}" .config="${0}"> <div class="card-header"> ${0} </div> <div class="preview description"> ${0} </div> <ha-ripple></ha-ripple> </div> </div> </div> `),this._filter,this._handleSearchChange,this.hass.localize("ui.panel.lovelace.editor.edit_card.search_cards"),this._filter?(0,r.qy)(x||(x=H`<div class="cards-container"> ${0} </div>`),this._filterCards(this._cards,this._filter).map(e=>e.element)):(0,r.qy)(k||(k=H` ${0} <ha-expansion-panel expanded> <div slot="header" class="cards-container-header"> ${0} </div> <div class="cards-container"> ${0} ${0} </div> </ha-expansion-panel> <ha-expansion-panel> <div slot="header" class="cards-container-header"> ${0} </div> <div class="cards-container"> ${0} </div> </ha-expansion-panel> ${0} `),e.length>0?(0,r.qy)($||($=H` <ha-expansion-panel expanded> <div slot="header" class="cards-container-header"> ${0} </div> <div class="cards-container"> ${0} ${0} </div> </ha-expansion-panel>`),this.hass.localize("ui.panel.lovelace.editor.card.generic.suggested_cards"),this._renderClipboardCard(),e.map(e=>e.element)):r.s6,this.hass.localize("ui.panel.lovelace.editor.card.generic.core_cards"),0===e.length?this._renderClipboardCard():r.s6,t.map(e=>e.element),this.hass.localize("ui.panel.lovelace.editor.card.generic.energy_cards"),a.map(e=>e.element),s.length>0?(0,r.qy)(z||(z=H` <ha-expansion-panel expanded> <div slot="header" class="cards-container-header"> ${0} </div> <div class="cards-container"> ${0} </div> </ha-expansion-panel> `),this.hass.localize("ui.panel.lovelace.editor.card.generic.custom_cards"),s.map(e=>e.element)):r.s6),this._cardPicked,{type:""},this.hass.localize("ui.panel.lovelace.editor.card.generic.manual"),this.hass.localize("ui.panel.lovelace.editor.card.generic.manual_description"))}shouldUpdate(e){const t=e.get("hass");return!t||t.locale!==this.hass.locale}firstUpdated(){if(!this.hass||!this.lovelace)return;const e=(0,f.S_)(this.lovelace),t=(0,f.Xd)(this.hass,e);this._usedEntities=[...e].filter(e=>this.hass.states[e]&&this.hass.states[e].state!==g.Hh&&this.hass.states[e].state!==g.HV),this._unusedEntities=[...t].filter(e=>this.hass.states[e]&&this.hass.states[e].state!==g.Hh&&this.hass.states[e].state!==g.HV),this._loadCards()}updated(e){if(super.updated(e),e.has("_filter")){const e=this.parentElement.shadowRoot.getElementById("content");e&&e.scrollTo({behavior:"auto",top:0})}}_loadCards(){let e=E.j.map(e=>{var t;return Object.assign({name:this.hass.localize(`ui.panel.lovelace.editor.card.${e.type}.name`),description:this.hass.localize(`ui.panel.lovelace.editor.card.${e.type}.description`),isSuggested:(null===(t=this.suggestedCards)||void 0===t?void 0:t.includes(e.type))||!1},e)});e=e.sort((e,t)=>{var a;return e.isSuggested&&!t.isSuggested?-1:!e.isSuggested&&t.isSuggested?1:(0,p.xL)(e.name||e.type,t.name||t.type,null===(a=this.hass)||void 0===a?void 0:a.language)}),e=e.concat(E.U.map(e=>Object.assign({name:this.hass.localize(`ui.panel.lovelace.editor.card.${e.type}.name`),description:this.hass.localize(`ui.panel.lovelace.editor.card.${e.type}.description`),isEnergy:!0},e))),m.J_.length>0&&(e=e.concat(m.J_.map(e=>({type:e.type,name:e.name,description:e.description,showElement:e.preview,isCustom:!0})).sort((e,t)=>{var a;return(0,p.xL)(e.name||e.type,t.name||t.type,null===(a=this.hass)||void 0===a?void 0:a.language)}))),this._cards=e.map(e=>({card:e,element:(0,r.qy)(A||(A=H`${0}`),(0,d.T)(this._renderCardElement(e),(0,r.qy)(S||(S=H` <div class="card spinner"> <ha-spinner></ha-spinner> </div> `))))}))}_renderClipboardCard(){return this._clipboard?(0,r.qy)(q||(q=H` ${0}`),(0,d.T)(this._renderCardElement({type:this._clipboard.type,showElement:!0,isCustom:!1,name:this.hass.localize("ui.panel.lovelace.editor.card.generic.paste"),description:`${this.hass.localize("ui.panel.lovelace.editor.card.generic.paste_description",{type:this._clipboard.type})}`},this._clipboard),(0,r.qy)(j||(j=H` <div class="card spinner"> <ha-spinner></ha-spinner> </div> `)))):r.s6}_handleSearchChange(e){var t;this._filter=null!==(t=e.target.value)&&void 0!==t?t:""}_cardPicked(e){const t=e.currentTarget.config;(0,h.r)(this,"config-changed",{config:t})}_tryCreateCardElement(e){const t=(0,w.MJ)(e);return t.hass=this.hass,t.addEventListener("ll-rebuild",a=>{a.stopPropagation(),this._rebuildCard(t,e)},{once:!0}),t}_rebuildCard(e,t){let a;try{a=this._tryCreateCardElement(t)}catch(s){return}e.parentElement&&e.parentElement.replaceChild(a,e)}async _renderCardElement(e,t){let{type:a}=e;const{showElement:s,isCustom:i,name:n,description:d}=e,c=i?(0,m.wi)(a):void 0;let l;i&&(a=`${m.IP}${a}`);let h=null!=t?t:{type:a};if(this.hass&&this.lovelace&&(t||(h=await(0,_.N)(this.hass,a,this._unusedEntities,this._usedEntities)),s))try{l=this._tryCreateCardElement(h)}catch(p){l=void 0}return l&&(l.tabIndex=-1),(0,r.qy)(I||(I=H` <div class="card" tabindex="0"> <div class="overlay" @click="${0}" .config="${0}"></div> <div class="card-header"> ${0} </div> <div class="preview ${0}"> ${0} </div> <ha-ripple></ha-ripple> </div> `),this._cardPicked,h,c?c.name||c.type:n,(0,o.H)({description:!l||"HUI-ERROR-CARD"===l.tagName}),l&&"HUI-ERROR-CARD"!==l.tagName?l:c?c.description||this.hass.localize("ui.panel.lovelace.editor.cardpicker.no_description"):d)}static get styles(){return[v.dp,(0,r.AH)(R||(R=H`:host{display:flex;flex-direction:column;min-height:0}#content{flex:1;min-height:0;overflow:auto}ha-input-search{padding:var(--ha-space-3) var(--ha-space-3) 0;position:sticky;top:0;z-index:10}.cards-container-header{font-size:var(--ha-font-size-l);font-weight:var(--ha-font-weight-medium);padding:var(--ha-space-3) var(--ha-space-2);margin:0;grid-column:1/-1;position:sticky;top:0;z-index:1;background:linear-gradient(90deg,var(--ha-dialog-surface-background,var(--mdc-theme-surface,#fff)) 0%,#ffffff00 80%)}.cards-container{display:grid;gap:var(--ha-space-2);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));padding:var(--ha-space-3)}.card{height:100%;max-width:500px;display:flex;flex-direction:column;border-radius:var(--ha-card-border-radius,var(--ha-border-radius-lg));background:var(--primary-background-color,#fafafa);cursor:pointer;position:relative;overflow:hidden;border:var(--ha-card-border-width,1px) solid var(--ha-card-border-color,var(--divider-color))}.card-header{color:var(--ha-card-header-color,var(--primary-text-color));font-family:var(--ha-card-header-font-family, inherit);font-size:var(--ha-font-size-l);font-weight:var(--ha-font-weight-bold);letter-spacing:-.012em;line-height:var(--ha-line-height-condensed);padding:var(--ha-space-3) var(--ha-space-4);display:block;text-align:center}.preview{pointer-events:none;margin:var(--ha-space-5);flex-grow:1;display:flex;align-items:center;justify-content:center}.preview>:first-child{display:block;width:100%}.description{text-align:center}.spinner{align-items:center;justify-content:center}.overlay{position:absolute;width:100%;height:100%;z-index:1;box-sizing:border-box;border-radius:var(--ha-card-border-radius,var(--ha-border-radius-lg))}.manual{max-width:none;grid-column:1/-1}.icon{position:absolute;top:var(--ha-space-2);right:var(--ha-space-2);inset-inline-start:var(--ha-space-2);inset-inline-end:var(--ha-space-2);border-radius:var(--ha-border-radius-circle);--mdc-icon-size:var(--ha-space-4);line-height:var(--ha-space-4);box-sizing:border-box;color:var(--text-primary-color);padding:var(--ha-space-1)}.icon.custom{background:var(--warning-color)}`))]}constructor(...e){super(...e),this._cards=[],this._filter="",this._filterCards=(0,c.A)((e,t)=>{if(!t)return e;let a=e.map(e=>e.card);const s={keys:["type","name","description"],isCaseSensitive:!1,minMatchCharLength:Math.min(t.length,2),threshold:.2,ignoreDiacritics:!0,ignoreLocation:!0},r=new i.A(a,s);return a=r.search(t).map(e=>e.item),e.filter(e=>a.includes(e.card))}),this._suggestedCards=(0,c.A)(e=>e.filter(e=>e.card.isSuggested)),this._customCards=(0,c.A)(e=>e.filter(e=>e.card.isCustom&&!e.card.isSuggested)),this._otherCards=(0,c.A)(e=>e.filter(e=>!e.card.isSuggested&&!e.card.isCustom&&!e.card.isEnergy)),this._energyCards=(0,c.A)(e=>e.filter(e=>e.card.isEnergy))}}(0,s.Cg)([(0,n.MZ)({attribute:!1})],O.prototype,"hass",void 0),(0,s.Cg)([(0,n.MZ)({attribute:!1})],O.prototype,"suggestedCards",void 0),(0,s.Cg)([(0,n.wk)(),(0,l.I)({key:"dashboardCardClipboard",state:!0,subscribe:!0,storage:"sessionStorage"})],O.prototype,"_clipboard",void 0),(0,s.Cg)([(0,n.wk)()],O.prototype,"_cards",void 0),(0,s.Cg)([(0,n.wk)()],O.prototype,"_filter",void 0),(0,s.Cg)([(0,n.P)("ha-input-search")],O.prototype,"_searchInput",void 0),O=(0,s.Cg)([(0,n.EM)("hui-card-picker")],O),t()}catch(C){t(C)}})},43100:function(e,t,a){a.a(e,async function(e,s){try{a.d(t,{N:function(){return n}});a(3362);var i=a(8349),r=e([i]);i=(r.then?(await r)():r)[0];const n=async(e,t,a,s)=>{let r={type:t};const n=await(0,i.dY)(t);if(n&&n.getStubConfig){const t=await n.getStubConfig(e,a,s);r=Object.assign(Object.assign({},r),t)}return r};s()}catch(n){s(n)}})},92708:function(e,t,a){a.d(t,{U:function(){return i},j:function(){return s}});const s=[{type:"alarm-panel",showElement:!0},{type:"button",showElement:!0},{type:"calendar",showElement:!0},{type:"clock",showElement:!0},{type:"entities",showElement:!0},{type:"entity",showElement:!0},{type:"gauge",showElement:!0},{type:"glance",showElement:!0},{type:"history-graph",showElement:!0},{type:"distribution",showElement:!0},{type:"statistics-graph",showElement:!1},{type:"statistic",showElement:!0},{type:"humidifier",showElement:!0},{type:"light",showElement:!0},{type:"map",showElement:!0},{type:"markdown",showElement:!0},{type:"media-control",showElement:!0},{type:"picture",showElement:!0},{type:"picture-elements",showElement:!0},{type:"picture-entity",showElement:!0},{type:"picture-glance",showElement:!0},{type:"plant-status",showElement:!0},{type:"sensor",showElement:!0},{type:"thermostat",showElement:!0},{type:"weather-forecast",showElement:!0},{type:"area",showElement:!0},{type:"tile",showElement:!0},{type:"conditional"},{type:"entity-filter"},{type:"grid"},{type:"horizontal-stack"},{type:"iframe"},{type:"logbook"},{type:"vertical-stack"},{type:"todo-list"},{type:"heading",showElement:!0},{type:"shortcut",showElement:!0}],i=[{type:"energy-date-selection",showElement:!0},{type:"energy-distribution",showElement:!1},{type:"energy-usage-graph",showElement:!1},{type:"energy-solar-graph",showElement:!1},{type:"energy-gas-graph",showElement:!1},{type:"energy-water-graph",showElement:!1},{type:"power-sources-graph",showElement:!1},{type:"energy-sources-table",showElement:!1},{type:"energy-devices-graph",showElement:!1},{type:"energy-devices-detail-graph",showElement:!1},{type:"energy-sankey",showElement:!1},{type:"power-sankey",showElement:!1},{type:"water-sankey",showElement:!1},{type:"water-flow-sankey",showElement:!1},{type:"energy-solar-consumed-gauge",showElement:!1},{type:"energy-self-sufficiency-gauge",showElement:!1},{type:"energy-grid-neutrality-gauge",showElement:!1},{type:"energy-grid-balance",showElement:!1},{type:"energy-carbon-consumed-gauge",showElement:!1},{type:"energy-compare",showElement:!1}]}}]);