iobroker.lovelace
Version:
With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI
1 lines • 14.6 kB
JavaScript
export const __rspack_esm_id=43762;export const __rspack_esm_ids=[43762];export const __webpack_modules__={15090(e,t,i){i.d(t,{nP:()=>c,vB:()=>r});i(44114),i(18111),i(22489),i(61701),i(17642),i(58004),i(33853),i(45876),i(32475),i(15024),i(31698);var n=i(22675),s=i(52220),a=i(71727),o=i(69093);const r={alarm_control_panel:["armed_away","armed_custom_bypass","armed_home","armed_night","armed_vacation","arming","disarmed","disarming","pending","triggered"],alert:["on","off","idle"],assist_satellite:["idle","listening","responding","processing"],automation:["on","off"],binary_sensor:["on","off"],button:[],calendar:["on","off"],camera:["idle","recording","streaming"],cover:["closed","closing","open","opening"],device_tracker:["home","not_home"],fan:["on","off"],humidifier:["on","off"],infrared:[],input_boolean:["on","off"],input_button:[],lawn_mower:["error","paused","mowing","returning","docked"],light:["on","off"],lock:["jammed","locked","locking","unlocked","unlocking","opening","open"],media_player:["off","on","idle","playing","paused","standby","buffering"],person:["home","not_home"],plant:["ok","problem"],radio_frequency:[],remote:["on","off"],scene:[],schedule:["on","off"],script:["on","off"],siren:["on","off"],sun:["above_horizon","below_horizon"],switch:["on","off"],timer:["active","idle","paused"],update:["on","off"],vacuum:["cleaning","docked","error","idle","paused","returning"],valve:["closed","closing","open","opening"],weather:["clear-night","cloudy","exceptional","fog","hail","lightning-rainy","lightning","partlycloudy","pouring","rainy","snowy-rainy","snowy","sunny","windy-variant","windy"]},d={alarm_control_panel:{code_format:["number","text"]},binary_sensor:{device_class:["battery","battery_charging","co","cold","connectivity","door","garage_door","gas","heat","light","lock","moisture","motion","moving","occupancy","opening","plug","power","presence","problem","running","safety","smoke","sound","tamper","update","vibration","window"]},button:{device_class:["restart","update"]},camera:{frontend_stream_type:["hls","web_rtc"]},climate:{hvac_action:["off","idle","preheating","defrosting","heating","cooling","drying","fan"]},cover:{device_class:["awning","blind","curtain","damper","door","garage","gate","shade","shutter","window"]},device_tracker:{source_type:["bluetooth","bluetooth_le","gps","router"]},fan:{direction:["forward","reverse"]},humidifier:{device_class:["humidifier","dehumidifier"],action:["off","idle","humidifying","drying"]},media_player:{device_class:["tv","speaker","receiver"],media_content_type:["album","app","artist","channel","channels","composer","contributing_artist","episode","game","genre","image","movie","music","playlist","podcast","season","track","tvshow","url","video"],repeat:["off","one","all"]},number:{device_class:["temperature"]},sensor:{device_class:["apparent_power","aqi","battery","carbon_dioxide","carbon_monoxide","current","date","duration","energy","frequency","gas","humidity","illuminance","monetary","nitrogen_dioxide","nitrogen_monoxide","nitrous_oxide","ozone","ph","pm1","pm10","pm25","pm4","power_factor","power","pressure","reactive_power","signal_strength","sulphur_dioxide","temperature","timestamp","uptime","volatile_organic_compounds","volatile_organic_compounds_parts","voltage","volume_flow_rate"],state_class:["measurement","total","total_increasing"]},switch:{device_class:["outlet","switch"]},update:{device_class:["firmware"]},water_heater:{away_mode:["on","off"]}},c=(e,t,i=void 0)=>{const c=(0,o.t)(t),l=[];switch(l.push(...((e,t,i)=>{const o=[];switch(i||o.push(n.Hh,n.HV),!i&&t in r?o.push(...r[t]):i&&t in d&&i in d[t]&&o.push(...d[t][i]),t){case"device_tracker":case"person":i||o.push(...Object.entries(e.states).filter(([e,t])=>"zone"===(0,a.m)(e)&&"zone.home"!==e&&t.attributes.friendly_name).map(([e,t])=>t.attributes.friendly_name).sort((t,i)=>(0,s.xL)(t,i,e.locale.language)))}return o})(e,c,i)),c){case"climate":i?"fan_mode"===i?l.push(...t.attributes.fan_modes):"preset_mode"===i?l.push(...t.attributes.preset_modes):"swing_mode"===i?l.push(...t.attributes.swing_modes):"swing_horizontal_mode"===i&&l.push(...t.attributes.swing_horizontal_modes):l.push(...t.attributes.hvac_modes);break;case"event":"event_type"===i&&l.push(...t.attributes.event_types);break;case"fan":"preset_mode"===i&&l.push(...t.attributes.preset_modes);break;case"humidifier":"mode"===i&&l.push(...t.attributes.available_modes);break;case"input_select":case"select":i||l.push(...t.attributes.options);break;case"light":"effect"===i&&t.attributes.effect_list?l.push(...t.attributes.effect_list):"color_mode"===i&&t.attributes.supported_color_modes&&l.push(...t.attributes.supported_color_modes);break;case"media_player":"sound_mode"===i?l.push(...t.attributes.sound_mode_list):"source"===i&&l.push(...t.attributes.source_list);break;case"remote":"current_activity"===i&&l.push(...t.attributes.activity_list);break;case"sensor":i||"enum"!==t.attributes.device_class||l.push(...t.attributes.options);break;case"vacuum":"fan_speed"===i&&l.push(...t.attributes.fan_speed_list);break;case"water_heater":i&&"operation_mode"!==i||l.push(...t.attributes.operation_list)}return[...new Set(l)]}},58548(e,t,i){i.d(t,{A:()=>s});const n=e=>{const t=parseFloat(e);if(isNaN(t))throw new Error(`${e} is not a number`);return t};function s(e){if(!e)return null;try{if(e.endsWith("%"))return{w:100,h:n(e.slice(0,-1))};const t=e.replace(":","x").split("x");return 0===t.length?null:1===t.length?{w:n(t[0]),h:1}:{w:n(t[0]),h:n(t[1])}}catch(e){}return null}},17022(e,t,i){i.d(t,{A1:()=>n,CY:()=>o,Fn:()=>s,Jz:()=>d,St:()=>r,VA:()=>l,WI:()=>h,iY:()=>c,xw:()=>a});const n=(e,t)=>e.callWS({type:"media_source/resolve_media",media_content_id:t}),s=(e,t)=>e.callWS({type:"media_source/browse_media",media_content_id:t}),a="__MANUAL_ENTRY__",o=e=>e.startsWith(a),r=e=>e.startsWith("media-source://"),d=e=>e.startsWith("media-source://media_source"),c=e=>e.startsWith("media-source://image_upload"),l=async(e,t,i)=>{const n=new FormData;n.append("media_content_id",t),n.append("file",i);const s=await e.fetchWithAuth("/api/media_source/local_source/upload",{method:"POST",body:n});if(413===s.status)throw new Error(`Uploaded file is too large (${i.name})`);if(200!==s.status)throw new Error("Unknown error");return s.json()},h=async(e,t)=>e.callWS({type:"media_source/local_source/remove",media_content_id:t})},30592(e,t,i){i.a(e,async function(e,t){try{i(18111),i(61701),i(88454),i(29452);var n=i(62826),s=i(5124),a=i(22441),o=i(75751),r=i(1087),d=i(81816),c=i(15638),l=i(82474),h=i(26300),u=(i(85938),e([l,h]));[l,h]=u.then?(await u)():u;const m="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z",p="M21 11H3V9H21V11M21 13H3V15H21V13Z",_="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z";class g extends s.WF{_getKey(e){return this._entityKeys.has(e)||this._entityKeys.set(e,Math.random().toString()),this._entityKeys.get(e)}_renderItem(e,t){const i=this.hass.states[e.entity],n=i&&(0,d.es)(i,this.hass.entities,this.hass.devices),a=(0,c.qC)(this.hass.language,this.hass.translationMetadata.translations),o=i&&this.hass.formatEntityName(i,n?{type:"device"}:{type:"entity"})||e.entity,r=i&&this.hass.formatEntityName(i,n?[{type:"area"}]:[{type:"area"},{type:"device"}],{separator:a?" ◂ ":" ▸ "});return s.qy` <ha-md-list-item class="item"> <ha-svg-icon class="handle" .path="${p}" slot="start"></ha-svg-icon> <div slot="headline" class="label">${o}</div> ${r?s.qy`<div slot="supporting-text" class="description"> ${r} </div>`:s.s6} <ha-icon-button slot="end" .item="${e}" .index="${t}" .label="${this.hass.localize("ui.common.edit")}" .path="${_}" ="${this._editItem}"></ha-icon-button> <ha-icon-button slot="end" .index="${t}" .label="${this.hass.localize("ui.common.delete")}" .path="${m}" ="${this._deleteItem}"></ha-icon-button> </ha-md-list-item> `}_editItem(e){const t=e.currentTarget.index;(0,r.r)(this,"edit-detail-element",{subElementConfig:{index:t,type:"row",elementConfig:this.entities[t]}})}_deleteItem(e){const t=e.target.index,i=this.entities.slice(0,t).concat(this.entities.slice(t+1));(0,r.r)(this,"entities-changed",{entities:i})}render(){return this.entities?s.qy` <h3> ${this.label||`${this.hass.localize("ui.panel.lovelace.editor.card.generic.entities")}${this.required?` (${this.hass.localize("ui.panel.lovelace.editor.card.config.required")})`:""}`} </h3> ${this.canEdit?s.qy` <div class="items-container"> <ha-sortable handle-selector=".handle" draggable-selector=".item" -moved="${this._entityMoved}"> <ha-md-list> ${this.entities.map((e,t)=>this._renderItem(e,t))} </ha-md-list> </ha-sortable> </div> `:s.qy`<ha-sortable handle-selector=".handle" -moved="${this._entityMoved}"> <div class="entities"> ${(0,o.u)(this.entities,e=>this._getKey(e),(e,t)=>s.qy` <div class="entity" data-entity-id="${e.entity}"> <div class="handle"> <ha-svg-icon .path="${p}"></ha-svg-icon> </div> <ha-entity-picker .hass="${this.hass}" .value="${e.entity}" .index="${t}" .entityFilter="${this.entityFilter}" -changed="${this._valueChanged}"></ha-entity-picker> </div> `)} </div> </ha-sortable>`} <ha-entity-picker .hass="${this.hass}" .entityFilter="${this.entityFilter}" -changed="${this._addEntity}" add-button></ha-entity-picker> `:s.s6}async _addEntity(e){const t=e.detail.value;if(""===t)return;const i=this.entities.concat({entity:t});e.target.value="",(0,r.r)(this,"entities-changed",{entities:i})}_entityMoved(e){e.stopPropagation();const{oldIndex:t,newIndex:i}=e.detail,n=this.entities.concat();n.splice(i,0,n.splice(t,1)[0]),(0,r.r)(this,"entities-changed",{entities:n})}_valueChanged(e){const t=e.detail.value,i=e.target.index,n=this.entities.concat();""===t||void 0===t?n.splice(i,1):n[i]={...n[i],entity:t},(0,r.r)(this,"entities-changed",{entities:n})}constructor(...e){super(...e),this.required=!0,this._entityKeys=new WeakMap}}g.styles=s.AH`.entity{display:flex;align-items:center}.entity .handle{padding-right:8px;cursor:move;cursor:grab;padding-inline-end:8px;padding-inline-start:initial;direction:var(--direction)}.entity .handle>*{pointer-events:none}.entity ha-entity-picker{flex-grow:1}ha-md-list{gap:8px;padding-top:0;display:flex;flex-direction:column}ha-md-list:has(> *){margin-bottom:var(--ha-space-2)}ha-md-list-item{border:1px solid var(--divider-color);border-radius:8px;--ha-md-list-item-gap:0;--md-list-item-top-space:0;--md-list-item-bottom-space:0;--md-list-item-leading-space:12px;--md-list-item-trailing-space:4px;--md-list-item-two-line-container-height:48px;--md-list-item-one-line-container-height:48px}.handle{cursor:move;padding:8px;margin-inline-start:-8px}label{margin-bottom:8px;display:block}ha-md-list-item .description,ha-md-list-item .label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}`,(0,n.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"hass",void 0),(0,n.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"entities",void 0),(0,n.Cg)([(0,a.MZ)({attribute:!1})],g.prototype,"entityFilter",void 0),(0,n.Cg)([(0,a.MZ)()],g.prototype,"label",void 0),(0,n.Cg)([(0,a.MZ)({type:Boolean})],g.prototype,"required",void 0),(0,n.Cg)([(0,a.MZ)({attribute:"can-edit",type:Boolean})],g.prototype,"canEdit",void 0),g=(0,n.Cg)([(0,a.EM)("hui-entity-editor")],g),t()}catch(e){t(e)}})},35722(e,t,i){i.a(e,async function(e,n){try{i.r(t),i.d(t,{HuiDistributionCardEditor:()=>$});i(18111),i(61701),i(17642),i(58004),i(33853),i(45876),i(32475),i(15024),i(31698);var s=i(62826),a=i(5124),o=i(22441),r=i(22786),d=i(63533),c=i(1087),l=i(71727),h=i(52763),u=i(30592),m=i(81287),p=i(88170),_=i(84698),g=i(44155),y=e([h,u,m]);[h,u,m]=y.then?(await y)():y;const f=(0,d.Ik)({entity:(0,d.Yj)(),name:(0,d.lq)(g.q),color:(0,d.lq)((0,d.Yj)())}),b=(0,d.kp)(_.H,(0,d.Ik)({title:(0,d.lq)((0,d.Yj)()),entities:(0,d.YO)((0,d.KC)([(0,d.Yj)(),f]))})),v={schema:[{name:"entity",selector:{entity:{}},required:!0},{name:"name",selector:{entity_name:{}},context:{entity:"entity"}},{name:"color",selector:{ui_color:{}}}]},w=[{name:"title",selector:{text:{}}}];class $ extends a.WF{setConfig(e){(0,d.vA)(e,b),this._config=e,this._configEntities=(0,p._)(e.entities)}render(){if(!this.hass||!this._config)return a.s6;if(this._subElementEditorConfig)return a.qy` <hui-sub-element-editor .hass="${this.hass}" .config="${this._subElementEditorConfig}" .form="${v}" -back="${this._goBack}" -changed="${this._handleSubElementChanged}"> </hui-sub-element-editor> `;const e=this._schema(),t=this._entityFilter(this._configEntities,this.hass);return a.qy` <ha-form .hass="${this.hass}" .data="${this._config}" .schema="${e}" .computeLabel="${this._computeLabelCallback}" -changed="${this._valueChanged}"></ha-form> <hui-entity-editor .hass="${this.hass}" can-edit .entities="${this._configEntities}" .entityFilter="${t}" -changed="${this._entitiesChanged}" -detail-element="${this._editDetailElement}"></hui-entity-editor> `}_valueChanged(e){(0,c.r)(this,"config-changed",{config:e.detail.value})}_entitiesChanged(e){const t={...this._config,entities:e.detail.entities};this._configEntities=(0,p._)(t.entities),(0,c.r)(this,"config-changed",{config:t})}_editDetailElement(e){this._subElementEditorConfig=e.detail.subElementConfig}_goBack(){this._subElementEditorConfig=void 0}_handleSubElementChanged(e){e.stopPropagation();const t=this._subElementEditorConfig.index,i=this._configEntities.concat(),n=e.detail.config;this._subElementEditorConfig={...this._subElementEditorConfig,elementConfig:n},i[t]=n;let s=this._config;s={...s,entities:i},this._config=s,this._configEntities=(0,p._)(s.entities),(0,c.r)(this,"config-changed",{config:s})}constructor(...e){super(...e),this._schema=(0,r.A)(()=>w),this._entityFilter=(0,r.A)((e,t)=>{if(!e||0===e.length)return;const i=t.states[e[0].entity];if(!i)return;const n=(0,l.m)(e[0].entity),s=i.attributes.device_class||"none",a=new Set(e.map(e=>e.entity));return e=>{const t=(0,l.m)(e.entity_id),i=e.attributes.device_class||"none";return t===n&&i===s&&!a.has(e.entity_id)}}),this._computeLabelCallback=e=>"title"===e.name?`${this.hass.localize("ui.panel.lovelace.editor.card.generic.title")} (${this.hass.localize("ui.panel.lovelace.editor.card.config.optional")})`:""}}(0,s.Cg)([(0,o.MZ)({attribute:!1})],$.prototype,"hass",void 0),(0,s.Cg)([(0,o.wk)()],$.prototype,"_config",void 0),(0,s.Cg)([(0,o.wk)()],$.prototype,"_subElementEditorConfig",void 0),(0,s.Cg)([(0,o.wk)()],$.prototype,"_configEntities",void 0),$=(0,s.Cg)([(0,o.EM)("hui-distribution-card-editor")],$),n()}catch(e){n(e)}})}};