From 3a06aa498426d763d44a0edaa979b70d32e0614a Mon Sep 17 00:00:00 2001 From: Marco Kreeft Date: Wed, 12 Oct 2022 21:23:48 +0200 Subject: [PATCH] Content_alignment for entities row (#86) --- info.md | 4 ++++ package-lock.json | 4 ++-- package.json | 2 +- room-card.js | 16 ++++++++++++---- room-card.js.gz | Bin 19446 -> 19539 bytes src/entity.ts | 12 ++++++------ src/index.ts | 4 ++-- src/styles.ts | 10 +++++++++- src/types/room-card-types.ts | 9 ++++++++- src/util.ts | 6 +++++- tests/entity/renderEntitiesRow.test.ts | 16 +++++++++------- tests/index.test.ts | 18 +++++++++--------- tests/util/renderClasses.test.ts | 19 +++++++++++++++++++ 13 files changed, 86 insertions(+), 34 deletions(-) create mode 100644 tests/util/renderClasses.test.ts diff --git a/info.md b/info.md index cded655..17d948c 100644 --- a/info.md +++ b/info.md @@ -1,6 +1,10 @@ {% if installed %} ### Features +{% if version_installed.replace("v", "").replace(".","") | int < 10630 %} +- Added `content_alignment (left, center or right) for entities row` +{% endif %} + {% if version_installed.replace("v", "").replace(".","") | int < 10621 %} - Fixed `Cards not updating on every state change` {% endif %} diff --git a/package-lock.json b/package-lock.json index 0531ef1..8e193c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "room-card", - "version": "1.06.21", + "version": "1.06.30", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "room-card", - "version": "1.06.21", + "version": "1.06.30", "license": "MIT", "dependencies": { "babel-jest": "^29.0.3", diff --git a/package.json b/package.json index 74d3b60..b91fa8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "room-card", - "version": "1.06.21", + "version": "1.06.30", "description": "Show entities in Home Assistant's Lovelace UI", "keywords": [ "home-assistant", diff --git a/room-card.js b/room-card.js index 3277bef..2c45265 100644 --- a/room-card.js +++ b/room-card.js @@ -1,5 +1,5 @@ /*! For license information please see room-card.js.LICENSE.txt */ -(()=>{"use strict";var t={197:(t,e,i)=>{i.r(e),i.d(e,{DEFAULT_DOMAIN_ICON:()=>Z,DEFAULT_PANEL:()=>Q,DEFAULT_VIEW_ENTITY_ID:()=>st,DOMAINS_HIDE_MORE_INFO:()=>et,DOMAINS_MORE_INFO_NO_HISTORY:()=>it,DOMAINS_TOGGLE:()=>rt,DOMAINS_WITH_CARD:()=>X,DOMAINS_WITH_MORE_INFO:()=>tt,NumberFormat:()=>n,STATES_OFF:()=>nt,TimeFormat:()=>r,UNIT_C:()=>ot,UNIT_F:()=>at,applyThemesOnElement:()=>F,computeCardSize:()=>R,computeDomain:()=>H,computeEntity:()=>L,computeRTL:()=>V,computeRTLDirection:()=>z,computeStateDisplay:()=>J,computeStateDomain:()=>q,createThing:()=>dt,debounce:()=>mt,domainIcon:()=>pt,evaluateFilter:()=>ft,fireEvent:()=>lt,fixedIcons:()=>ht,formatDate:()=>c,formatDateMonth:()=>g,formatDateMonthYear:()=>v,formatDateNumeric:()=>m,formatDateShort:()=>p,formatDateTime:()=>A,formatDateTimeNumeric:()=>T,formatDateTimeWithSeconds:()=>E,formatDateWeekday:()=>l,formatDateYear:()=>b,formatNumber:()=>Y,formatTime:()=>N,formatTimeWeekday:()=>x,formatTimeWithSeconds:()=>D,forwardHaptic:()=>vt,getLovelace:()=>Tt,handleAction:()=>wt,handleActionConfig:()=>bt,handleClick:()=>$t,hasAction:()=>At,hasConfigOrEntityChanged:()=>St,hasDoubleClick:()=>Et,isNumericState:()=>W,navigate:()=>yt,numberFormatToLocale:()=>B,relativeTime:()=>M,round:()=>K,stateIcon:()=>Ct,timerTimeRemaining:()=>P,toggleEntity:()=>_t,turnOnOffEntities:()=>Ot,turnOnOffEntity:()=>gt});var n,r,o,a=function(){return a=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0)return{value:Math.round(m),unit:"year"};var h=12*m+c.getMonth()-d.getMonth();if(Math.round(Math.abs(h))>0)return{value:Math.round(h),unit:"month"};var p=r/604800;return{value:Math.round(p),unit:"week"}}(t,i);return n?function(t){return new Intl.RelativeTimeFormat(t.language,{numeric:"auto"})}(e).format(r.value,r.unit):Intl.NumberFormat(e.language,{style:"unit",unit:r.unit,unitDisplay:"long"}).format(Math.abs(r.value))};function P(t){var e,i=3600*(e=t.attributes.remaining.split(":").map(Number))[0]+60*e[1]+e[2];if("active"===t.state){var n=(new Date).getTime(),r=new Date(t.last_changed).getTime();i=Math.max(i-(n-r)/1e3,0)}return i}function U(){return(U=Object.assign||function(t){for(var e=1;e-1?t.split(".")[1].length:0;i.minimumFractionDigits=n,i.maximumFractionDigits=n}return i},J=function(t,e,i,n){var r=void 0!==n?n:e.state;if("unknown"===r||"unavailable"===r)return t("state.default."+r);if(W(e)){if("monetary"===e.attributes.device_class)try{return Y(r,i,{style:"currency",currency:e.attributes.unit_of_measurement})}catch(t){}return Y(r,i)+(e.attributes.unit_of_measurement?" "+e.attributes.unit_of_measurement:"")}var o=q(e);if("input_datetime"===o){var a;if(void 0===n)return e.attributes.has_date&&e.attributes.has_time?(a=new Date(e.attributes.year,e.attributes.month-1,e.attributes.day,e.attributes.hour,e.attributes.minute),A(a,i)):e.attributes.has_date?(a=new Date(e.attributes.year,e.attributes.month-1,e.attributes.day),c(a,i)):e.attributes.has_time?((a=new Date).setHours(e.attributes.hour,e.attributes.minute),N(a,i)):e.state;try{var s=n.split(" ");if(2===s.length)return A(new Date(s.join("T")),i);if(1===s.length){if(n.includes("-"))return c(new Date(n+"T00:00"),i);if(n.includes(":")){var l=new Date;return N(new Date(l.toISOString().split("T")[0]+"T"+n),i)}}return n}catch(t){return n}}return"humidifier"===o&&"on"===r&&e.attributes.humidity?e.attributes.humidity+" %":"counter"===o||"number"===o||"input_number"===o?Y(r,i):e.attributes.device_class&&t("component."+o+".state."+e.attributes.device_class+"."+r)||t("component."+o+".state._."+r)||r},Z="mdi:bookmark",Q="lovelace",X=["climate","cover","configurator","input_select","input_number","input_text","lock","media_player","scene","script","timer","vacuum","water_heater","weblink"],tt=["alarm_control_panel","automation","camera","climate","configurator","cover","fan","group","history_graph","input_datetime","light","lock","media_player","script","sun","updater","vacuum","water_heater","weather"],et=["input_number","input_select","input_text","scene","weblink"],it=["camera","configurator","history_graph","scene"],nt=["closed","locked","off"],rt=new Set(["fan","input_boolean","light","switch","group","automation"]),ot="°C",at="°F",st="group.default_view",lt=function(t,e,i,n){n=n||{},i=null==i?{}:i;var r=new Event(e,{bubbles:void 0===n.bubbles||n.bubbles,cancelable:Boolean(n.cancelable),composed:void 0===n.composed||n.composed});return r.detail=i,t.dispatchEvent(r),r},ut=new Set(["call-service","divider","section","weblink","cast","select"]),ct={alert:"toggle",automation:"toggle",climate:"climate",cover:"cover",fan:"toggle",group:"group",input_boolean:"toggle",input_number:"input-number",input_select:"input-select",input_text:"input-text",light:"toggle",lock:"lock",media_player:"media-player",remote:"toggle",scene:"scene",script:"script",sensor:"sensor",timer:"timer",switch:"toggle",vacuum:"toggle",water_heater:"climate",input_datetime:"input-datetime"},dt=function(t,e){void 0===e&&(e=!1);var i=function(t,e){return n("hui-error-card",{type:"error",error:t,config:e})},n=function(t,e){var n=window.document.createElement(t);try{if(!n.setConfig)return;n.setConfig(e)}catch(n){return console.error(t,n),i(n.message,e)}return n};if(!t||"object"!=typeof t||!e&&!t.type)return i("No type defined",t);var r=t.type;if(r&&r.startsWith("custom:"))r=r.substr("custom:".length);else if(e)if(ut.has(r))r="hui-"+r+"-row";else{if(!t.entity)return i("Invalid config given.",t);var o=t.entity.split(".",1)[0];r="hui-"+(ct[o]||"text")+"-entity-row"}else r="hui-"+r+"-card";if(customElements.get(r))return n(r,t);var a=i("Custom element doesn't exist: "+t.type+".",t);a.style.display="None";var s=setTimeout((function(){a.style.display=""}),2e3);return customElements.whenDefined(t.type).then((function(){clearTimeout(s),lt(a,"ll-rebuild",{},a)})),a},mt=function(t,e,i){var n;return void 0===i&&(i=!1),function(){var r=[].slice.call(arguments),o=this,a=function(){n=null,i||t.apply(o,r)},s=i&&!n;clearTimeout(n),n=setTimeout(a,e),s&&t.apply(o,r)}},ht={alert:"mdi:alert",automation:"mdi:playlist-play",calendar:"mdi:calendar",camera:"mdi:video",climate:"mdi:thermostat",configurator:"mdi:settings",conversation:"mdi:text-to-speech",device_tracker:"mdi:account",fan:"mdi:fan",group:"mdi:google-circles-communities",history_graph:"mdi:chart-line",homeassistant:"mdi:home-assistant",homekit:"mdi:home-automation",image_processing:"mdi:image-filter-frames",input_boolean:"mdi:drawing",input_datetime:"mdi:calendar-clock",input_number:"mdi:ray-vertex",input_select:"mdi:format-list-bulleted",input_text:"mdi:textbox",light:"mdi:lightbulb",mailbox:"mdi:mailbox",notify:"mdi:comment-alert",person:"mdi:account",plant:"mdi:flower",proximity:"mdi:apple-safari",remote:"mdi:remote",scene:"mdi:google-pages",script:"mdi:file-document",sensor:"mdi:eye",simple_alarm:"mdi:bell",sun:"mdi:white-balance-sunny",switch:"mdi:flash",timer:"mdi:timer",updater:"mdi:cloud-upload",vacuum:"mdi:robot-vacuum",water_heater:"mdi:thermometer",weblink:"mdi:open-in-new"};function pt(t,e){if(t in ht)return ht[t];switch(t){case"alarm_control_panel":switch(e){case"armed_home":return"mdi:bell-plus";case"armed_night":return"mdi:bell-sleep";case"disarmed":return"mdi:bell-outline";case"triggered":return"mdi:bell-ring";default:return"mdi:bell"}case"binary_sensor":return e&&"off"===e?"mdi:radiobox-blank":"mdi:checkbox-marked-circle";case"cover":return"closed"===e?"mdi:window-closed":"mdi:window-open";case"lock":return e&&"unlocked"===e?"mdi:lock-open":"mdi:lock";case"media_player":return e&&"off"!==e&&"idle"!==e?"mdi:cast-connected":"mdi:cast";case"zwave":switch(e){case"dead":return"mdi:emoticon-dead";case"sleeping":return"mdi:sleep";case"initializing":return"mdi:timer-sand";default:return"mdi:z-wave"}default:return console.warn("Unable to find icon for domain "+t+" ("+e+")"),"mdi:bookmark"}}var ft=function(t,e){var i=e.value||e,n=e.attribute?t.attributes[e.attribute]:t.state;switch(e.operator||"=="){case"==":return n===i;case"<=":return n<=i;case"<":return n=":return n>=i;case">":return n>i;case"!=":return n!==i;case"regex":return n.match(i);default:return!1}},vt=function(t){lt(window,"haptic",t)},yt=function(t,e,i){void 0===i&&(i=!1),i?history.replaceState(null,"",e):history.pushState(null,"",e),lt(window,"location-changed",{replace:i})},gt=function(t,e,i){void 0===i&&(i=!0);var n,r=H(e),o="group"===r?"homeassistant":r;switch(r){case"lock":n=i?"unlock":"lock";break;case"cover":n=i?"open_cover":"close_cover";break;default:n=i?"turn_on":"turn_off"}return t.callService(o,n,{entity_id:e})},_t=function(t,e){var i=nt.includes(t.states[e].state);return gt(t,e,i)},bt=function(t,e,i,n){if(n||(n={action:"more-info"}),!n.confirmation||n.confirmation.exemptions&&n.confirmation.exemptions.some((function(t){return t.user===e.user.id}))||(vt("warning"),confirm(n.confirmation.text||"Are you sure you want to "+n.action+"?")))switch(n.action){case"more-info":(i.entity||i.camera_image)&<(t,"hass-more-info",{entityId:i.entity?i.entity:i.camera_image});break;case"navigate":n.navigation_path&&yt(0,n.navigation_path);break;case"url":n.url_path&&window.open(n.url_path);break;case"toggle":i.entity&&(_t(e,i.entity),vt("success"));break;case"call-service":if(!n.service)return void vt("failure");var r=n.service.split(".",2);e.callService(r[0],r[1],n.service_data,n.target),vt("success");break;case"fire-dom-event":lt(t,"ll-custom",n)}},wt=function(t,e,i,n){var r;"double_tap"===n&&i.double_tap_action?r=i.double_tap_action:"hold"===n&&i.hold_action?r=i.hold_action:"tap"===n&&i.tap_action&&(r=i.tap_action),bt(t,e,i,r)},$t=function(t,e,i,n,r){var o;if(r&&i.double_tap_action?o=i.double_tap_action:n&&i.hold_action?o=i.hold_action:!n&&i.tap_action&&(o=i.tap_action),o||(o={action:"more-info"}),!o.confirmation||o.confirmation.exemptions&&o.confirmation.exemptions.some((function(t){return t.user===e.user.id}))||confirm(o.confirmation.text||"Are you sure you want to "+o.action+"?"))switch(o.action){case"more-info":(o.entity||i.entity||i.camera_image)&&(lt(t,"hass-more-info",{entityId:o.entity?o.entity:i.entity?i.entity:i.camera_image}),o.haptic&&vt(o.haptic));break;case"navigate":o.navigation_path&&(yt(0,o.navigation_path),o.haptic&&vt(o.haptic));break;case"url":o.url_path&&window.open(o.url_path),o.haptic&&vt(o.haptic);break;case"toggle":i.entity&&(_t(e,i.entity),o.haptic&&vt(o.haptic));break;case"call-service":if(!o.service)return;var a=o.service.split(".",2),s=a[0],l=a[1],u=U({},o.service_data);"entity"===u.entity_id&&(u.entity_id=i.entity),e.callService(s,l,u,o.target),o.haptic&&vt(o.haptic);break;case"fire-dom-event":lt(t,"ll-custom",o),o.haptic&&vt(o.haptic)}};function At(t){return void 0!==t&&"none"!==t.action}function St(t,e,i){if(e.has("config")||i)return!0;if(t.config.entity){var n=e.get("hass");return!n||n.states[t.config.entity]!==t.hass.states[t.config.entity]}return!1}function Et(t){return void 0!==t&&"none"!==t.action}var Ot=function(t,e,i){void 0===i&&(i=!0);var n={};e.forEach((function(e){if(nt.includes(t.states[e].state)===i){var r=H(e),o=["cover","lock"].includes(r)?r:"homeassistant";o in n||(n[o]=[]),n[o].push(e)}})),Object.keys(n).forEach((function(e){var r;switch(e){case"lock":r=i?"unlock":"lock";break;case"cover":r=i?"open_cover":"close_cover";break;default:r=i?"turn_on":"turn_off"}t.callService(e,r,{entity_id:n[e]})}))},Tt=function(){var t=document.querySelector("home-assistant");if(t=(t=(t=(t=(t=(t=(t=(t=t&&t.shadowRoot)&&t.querySelector("home-assistant-main"))&&t.shadowRoot)&&t.querySelector("app-drawer-layout partial-panel-resolver"))&&t.shadowRoot||t)&&t.querySelector("ha-panel-lovelace"))&&t.shadowRoot)&&t.querySelector("hui-root")){var e=t.lovelace;return e.current_view=t.___curView,e}return null},kt={humidity:"mdi:water-percent",illuminance:"mdi:brightness-5",temperature:"mdi:thermometer",pressure:"mdi:gauge",power:"mdi:flash",signal_strength:"mdi:wifi"},Nt={binary_sensor:function(t,e){var i="off"===t;switch(null==e?void 0:e.attributes.device_class){case"battery":return i?"mdi:battery":"mdi:battery-outline";case"battery_charging":return i?"mdi:battery":"mdi:battery-charging";case"cold":return i?"mdi:thermometer":"mdi:snowflake";case"connectivity":return i?"mdi:server-network-off":"mdi:server-network";case"door":return i?"mdi:door-closed":"mdi:door-open";case"garage_door":return i?"mdi:garage":"mdi:garage-open";case"power":case"plug":return i?"mdi:power-plug-off":"mdi:power-plug";case"gas":case"problem":case"safety":case"tamper":return i?"mdi:check-circle":"mdi:alert-circle";case"smoke":return i?"mdi:check-circle":"mdi:smoke";case"heat":return i?"mdi:thermometer":"mdi:fire";case"light":return i?"mdi:brightness-5":"mdi:brightness-7";case"lock":return i?"mdi:lock":"mdi:lock-open";case"moisture":return i?"mdi:water-off":"mdi:water";case"motion":return i?"mdi:walk":"mdi:run";case"occupancy":case"presence":return i?"mdi:home-outline":"mdi:home";case"opening":return i?"mdi:square":"mdi:square-outline";case"running":return i?"mdi:stop":"mdi:play";case"sound":return i?"mdi:music-note-off":"mdi:music-note";case"update":return i?"mdi:package":"mdi:package-up";case"vibration":return i?"mdi:crop-portrait":"mdi:vibrate";case"window":return i?"mdi:window-closed":"mdi:window-open";default:return i?"mdi:radiobox-blank":"mdi:checkbox-marked-circle"}},cover:function(t){var e="closed"!==t.state;switch(t.attributes.device_class){case"garage":return e?"mdi:garage-open":"mdi:garage";case"door":return e?"mdi:door-open":"mdi:door-closed";case"shutter":return e?"mdi:window-shutter-open":"mdi:window-shutter";case"blind":return e?"mdi:blinds-open":"mdi:blinds";case"window":return e?"mdi:window-open":"mdi:window-closed";default:return pt("cover",t.state)}},sensor:function(t){var e=t.attributes.device_class;if(e&&e in kt)return kt[e];if("battery"===e){var i=Number(t.state);if(isNaN(i))return"mdi:battery-unknown";var n=10*Math.round(i/10);return n>=100?"mdi:battery":n<=0?"mdi:battery-alert":"hass:battery-"+n}var r=t.attributes.unit_of_measurement;return"°C"===r||"°F"===r?"mdi:thermometer":pt("sensor")},input_datetime:function(t){return t.attributes.has_date?t.attributes.has_time?pt("input_datetime"):"mdi:calendar":"mdi:clock"}},Ct=function(t){if(!t)return"mdi:bookmark";if(t.attributes.icon)return t.attributes.icon;var e=H(t.entity_id);return e in Nt?Nt[e](t):pt(e,t.state)}},461:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.holdHandler=e.dblClickHandler=e.clickHandler=e.renderInfoEntity=e.renderTitle=e.renderMainEntity=e.renderValue=e.renderIcon=e.renderEntity=e.renderEntitiesRow=e.renderRows=e.entityStyles=e.entityStateDisplay=e.renderCustomStateIcon=e.renderConditionIcons=e.entityIcon=e.entityName=e.computeEntity=e.checkConfig=void 0;const n=i(230),r=i(759),o=i(578),a=i(882),s=i(197),l=i(897),u=i(623),c=i(704),d=i(846);e.checkConfig=t=>{if(null==t.entities&&null==t.entity&&void 0===t.info_entities&&void 0===t.rows&&void 0===t.cards)throw new Error("Please define entities.")},e.computeEntity=t=>t.substr(t.indexOf(".")+1),e.entityName=t=>t.name||(t.entity?t.stateObj.attributes.friendly_name||(0,e.computeEntity)(t.stateObj.entity_id):null)||null,e.entityIcon=(t,i,n)=>{var r;if("icon"in i&&(void 0===i.show_icon||!1===i.show_icon))throw new Error(`Entity: ${i.entity} => Icon defined but show_icon is set to false or not defined. Please set show_icon to true`);return"icon"in i?"string"==typeof i.icon?i.icon:i.icon.state_on?(0,e.renderCustomStateIcon)(t,i.icon):i.icon.conditions?(0,e.renderConditionIcons)(t,i,n):(null===(r=i.icon.template)||void 0===r?void 0:r.icon)?(0,a.evalTemplate)(n,t,i.icon.template.icon):void 0:t.attributes.icon||null},e.renderConditionIcons=(t,e,i)=>{const n=t.state;return e.icon.conditions.filter((e=>{let r=n;if(e.entity){const t=i.states[e.entity];r=e.attribute?t.attributes[e.attribute]:t.state}return e.attribute&&!e.entity&&(r=t.attributes[e.attribute]),(0,a.checkConditionalValue)(e,r)})).pop()},e.renderCustomStateIcon=(t,e)=>{switch((0,o.computeStateDomain)(t)){case"light":case"switch":case"binary_sensor":case"input_boolean":return"on"===t.state?e.state_on:e.state_off}},e.entityStateDisplay=(t,e)=>{if((0,a.isUnavailable)(e.stateObj))return t.localize(`state.default.${e.stateObj.state}`);let i=(0,a.getValue)(e),s=void 0!==e.attribute?e.unit:e.unit||e.stateObj.attributes.unit_of_measurement;if(e.format){if(e.format.startsWith("precision")){const n=parseInt(e.format.slice(-1),10);i=(0,r.formatNumber)(i,t.locale,{minimumFractionDigits:n,maximumFractionDigits:n})}else isNaN(parseFloat(i))||!isFinite(i)||("brightness"===e.format?(i=Math.round(i/255*100),s="%"):e.format.startsWith("duration")?(i=(0,n.secondsToDuration)("duration-m"===e.format?i/1e3:i),s=void 0):"kilo"===e.format?i=(0,r.formatNumber)(i/1e3,t.locale,{maximumFractionDigits:2}):"invert"===e.format?i=(0,r.formatNumber)(i-2*i,t.locale):"position"===e.format&&(i=(0,r.formatNumber)(100-i,t.locale)));return`${i}${s?` ${s}`:""}`}if(e.attribute)return`${isNaN(i)?i:(0,r.formatNumber)(i,t.locale)}${s?` ${s}`:""}`;const l=Object.assign(Object.assign({},e.stateObj),{attributes:Object.assign(Object.assign({},e.stateObj.attributes),{unit_of_measurement:s})});return(0,o.computeStateDisplay)(t.localize,l,t.locale)},e.entityStyles=t=>(0,a.isObject)(t)?Object.keys(t).map((e=>`${e}: ${t[e]};`)).join(""):"",e.renderRows=(t,i,n)=>{const r=t.filter((t=>!(0,d.hideIfRow)(t,i)));return l.html`${r.map((t=>(0,e.renderEntitiesRow)(t.entities,i,n)))}`},e.renderEntitiesRow=(t,i,n,r)=>void 0===t?null:l.html`
${t.map((t=>(0,e.renderEntity)(t,i,n)))}
`,e.renderEntity=(t,i,n)=>{if(null==t.stateObj||(0,d.hideIfEntity)(t,i))return null;const r=(0,e.clickHandler)(t.stateObj.entity_id,t.tap_action,i,n),o=(0,e.dblClickHandler)(t.stateObj.entity_id,t.double_tap_action,i,n),a=(0,e.holdHandler)(t.stateObj.entity_id,t.hold_action,i,n);let s,u,c;const m=()=>{s=!1,u=window.setTimeout((()=>{s=!0}),500)},h=e=>{e.preventDefault(),["touchend","touchcancel"].includes(e.type)&&void 0===u||(window.clearTimeout(u),u=void 0,s?a():void 0!==t.double_tap_action?"click"===e.type&&e.detail<2||!c?c=window.setTimeout((()=>{c=void 0,r()}),250):(window.clearTimeout(c),c=void 0,o()):r())};return l.html`
{"use strict";var t={197:(t,e,i)=>{i.r(e),i.d(e,{DEFAULT_DOMAIN_ICON:()=>Z,DEFAULT_PANEL:()=>Q,DEFAULT_VIEW_ENTITY_ID:()=>st,DOMAINS_HIDE_MORE_INFO:()=>et,DOMAINS_MORE_INFO_NO_HISTORY:()=>it,DOMAINS_TOGGLE:()=>rt,DOMAINS_WITH_CARD:()=>X,DOMAINS_WITH_MORE_INFO:()=>tt,NumberFormat:()=>n,STATES_OFF:()=>nt,TimeFormat:()=>r,UNIT_C:()=>ot,UNIT_F:()=>at,applyThemesOnElement:()=>F,computeCardSize:()=>R,computeDomain:()=>H,computeEntity:()=>L,computeRTL:()=>V,computeRTLDirection:()=>z,computeStateDisplay:()=>J,computeStateDomain:()=>q,createThing:()=>dt,debounce:()=>mt,domainIcon:()=>ft,evaluateFilter:()=>pt,fireEvent:()=>lt,fixedIcons:()=>ht,formatDate:()=>c,formatDateMonth:()=>g,formatDateMonthYear:()=>v,formatDateNumeric:()=>m,formatDateShort:()=>f,formatDateTime:()=>A,formatDateTimeNumeric:()=>T,formatDateTimeWithSeconds:()=>E,formatDateWeekday:()=>l,formatDateYear:()=>b,formatNumber:()=>Y,formatTime:()=>N,formatTimeWeekday:()=>x,formatTimeWithSeconds:()=>D,forwardHaptic:()=>vt,getLovelace:()=>Tt,handleAction:()=>wt,handleActionConfig:()=>bt,handleClick:()=>$t,hasAction:()=>At,hasConfigOrEntityChanged:()=>St,hasDoubleClick:()=>Et,isNumericState:()=>W,navigate:()=>yt,numberFormatToLocale:()=>B,relativeTime:()=>M,round:()=>K,stateIcon:()=>Ct,timerTimeRemaining:()=>P,toggleEntity:()=>_t,turnOnOffEntities:()=>Ot,turnOnOffEntity:()=>gt});var n,r,o,a=function(){return a=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0)return{value:Math.round(m),unit:"year"};var h=12*m+c.getMonth()-d.getMonth();if(Math.round(Math.abs(h))>0)return{value:Math.round(h),unit:"month"};var f=r/604800;return{value:Math.round(f),unit:"week"}}(t,i);return n?function(t){return new Intl.RelativeTimeFormat(t.language,{numeric:"auto"})}(e).format(r.value,r.unit):Intl.NumberFormat(e.language,{style:"unit",unit:r.unit,unitDisplay:"long"}).format(Math.abs(r.value))};function P(t){var e,i=3600*(e=t.attributes.remaining.split(":").map(Number))[0]+60*e[1]+e[2];if("active"===t.state){var n=(new Date).getTime(),r=new Date(t.last_changed).getTime();i=Math.max(i-(n-r)/1e3,0)}return i}function U(){return(U=Object.assign||function(t){for(var e=1;e-1?t.split(".")[1].length:0;i.minimumFractionDigits=n,i.maximumFractionDigits=n}return i},J=function(t,e,i,n){var r=void 0!==n?n:e.state;if("unknown"===r||"unavailable"===r)return t("state.default."+r);if(W(e)){if("monetary"===e.attributes.device_class)try{return Y(r,i,{style:"currency",currency:e.attributes.unit_of_measurement})}catch(t){}return Y(r,i)+(e.attributes.unit_of_measurement?" "+e.attributes.unit_of_measurement:"")}var o=q(e);if("input_datetime"===o){var a;if(void 0===n)return e.attributes.has_date&&e.attributes.has_time?(a=new Date(e.attributes.year,e.attributes.month-1,e.attributes.day,e.attributes.hour,e.attributes.minute),A(a,i)):e.attributes.has_date?(a=new Date(e.attributes.year,e.attributes.month-1,e.attributes.day),c(a,i)):e.attributes.has_time?((a=new Date).setHours(e.attributes.hour,e.attributes.minute),N(a,i)):e.state;try{var s=n.split(" ");if(2===s.length)return A(new Date(s.join("T")),i);if(1===s.length){if(n.includes("-"))return c(new Date(n+"T00:00"),i);if(n.includes(":")){var l=new Date;return N(new Date(l.toISOString().split("T")[0]+"T"+n),i)}}return n}catch(t){return n}}return"humidifier"===o&&"on"===r&&e.attributes.humidity?e.attributes.humidity+" %":"counter"===o||"number"===o||"input_number"===o?Y(r,i):e.attributes.device_class&&t("component."+o+".state."+e.attributes.device_class+"."+r)||t("component."+o+".state._."+r)||r},Z="mdi:bookmark",Q="lovelace",X=["climate","cover","configurator","input_select","input_number","input_text","lock","media_player","scene","script","timer","vacuum","water_heater","weblink"],tt=["alarm_control_panel","automation","camera","climate","configurator","cover","fan","group","history_graph","input_datetime","light","lock","media_player","script","sun","updater","vacuum","water_heater","weather"],et=["input_number","input_select","input_text","scene","weblink"],it=["camera","configurator","history_graph","scene"],nt=["closed","locked","off"],rt=new Set(["fan","input_boolean","light","switch","group","automation"]),ot="°C",at="°F",st="group.default_view",lt=function(t,e,i,n){n=n||{},i=null==i?{}:i;var r=new Event(e,{bubbles:void 0===n.bubbles||n.bubbles,cancelable:Boolean(n.cancelable),composed:void 0===n.composed||n.composed});return r.detail=i,t.dispatchEvent(r),r},ut=new Set(["call-service","divider","section","weblink","cast","select"]),ct={alert:"toggle",automation:"toggle",climate:"climate",cover:"cover",fan:"toggle",group:"group",input_boolean:"toggle",input_number:"input-number",input_select:"input-select",input_text:"input-text",light:"toggle",lock:"lock",media_player:"media-player",remote:"toggle",scene:"scene",script:"script",sensor:"sensor",timer:"timer",switch:"toggle",vacuum:"toggle",water_heater:"climate",input_datetime:"input-datetime"},dt=function(t,e){void 0===e&&(e=!1);var i=function(t,e){return n("hui-error-card",{type:"error",error:t,config:e})},n=function(t,e){var n=window.document.createElement(t);try{if(!n.setConfig)return;n.setConfig(e)}catch(n){return console.error(t,n),i(n.message,e)}return n};if(!t||"object"!=typeof t||!e&&!t.type)return i("No type defined",t);var r=t.type;if(r&&r.startsWith("custom:"))r=r.substr("custom:".length);else if(e)if(ut.has(r))r="hui-"+r+"-row";else{if(!t.entity)return i("Invalid config given.",t);var o=t.entity.split(".",1)[0];r="hui-"+(ct[o]||"text")+"-entity-row"}else r="hui-"+r+"-card";if(customElements.get(r))return n(r,t);var a=i("Custom element doesn't exist: "+t.type+".",t);a.style.display="None";var s=setTimeout((function(){a.style.display=""}),2e3);return customElements.whenDefined(t.type).then((function(){clearTimeout(s),lt(a,"ll-rebuild",{},a)})),a},mt=function(t,e,i){var n;return void 0===i&&(i=!1),function(){var r=[].slice.call(arguments),o=this,a=function(){n=null,i||t.apply(o,r)},s=i&&!n;clearTimeout(n),n=setTimeout(a,e),s&&t.apply(o,r)}},ht={alert:"mdi:alert",automation:"mdi:playlist-play",calendar:"mdi:calendar",camera:"mdi:video",climate:"mdi:thermostat",configurator:"mdi:settings",conversation:"mdi:text-to-speech",device_tracker:"mdi:account",fan:"mdi:fan",group:"mdi:google-circles-communities",history_graph:"mdi:chart-line",homeassistant:"mdi:home-assistant",homekit:"mdi:home-automation",image_processing:"mdi:image-filter-frames",input_boolean:"mdi:drawing",input_datetime:"mdi:calendar-clock",input_number:"mdi:ray-vertex",input_select:"mdi:format-list-bulleted",input_text:"mdi:textbox",light:"mdi:lightbulb",mailbox:"mdi:mailbox",notify:"mdi:comment-alert",person:"mdi:account",plant:"mdi:flower",proximity:"mdi:apple-safari",remote:"mdi:remote",scene:"mdi:google-pages",script:"mdi:file-document",sensor:"mdi:eye",simple_alarm:"mdi:bell",sun:"mdi:white-balance-sunny",switch:"mdi:flash",timer:"mdi:timer",updater:"mdi:cloud-upload",vacuum:"mdi:robot-vacuum",water_heater:"mdi:thermometer",weblink:"mdi:open-in-new"};function ft(t,e){if(t in ht)return ht[t];switch(t){case"alarm_control_panel":switch(e){case"armed_home":return"mdi:bell-plus";case"armed_night":return"mdi:bell-sleep";case"disarmed":return"mdi:bell-outline";case"triggered":return"mdi:bell-ring";default:return"mdi:bell"}case"binary_sensor":return e&&"off"===e?"mdi:radiobox-blank":"mdi:checkbox-marked-circle";case"cover":return"closed"===e?"mdi:window-closed":"mdi:window-open";case"lock":return e&&"unlocked"===e?"mdi:lock-open":"mdi:lock";case"media_player":return e&&"off"!==e&&"idle"!==e?"mdi:cast-connected":"mdi:cast";case"zwave":switch(e){case"dead":return"mdi:emoticon-dead";case"sleeping":return"mdi:sleep";case"initializing":return"mdi:timer-sand";default:return"mdi:z-wave"}default:return console.warn("Unable to find icon for domain "+t+" ("+e+")"),"mdi:bookmark"}}var pt=function(t,e){var i=e.value||e,n=e.attribute?t.attributes[e.attribute]:t.state;switch(e.operator||"=="){case"==":return n===i;case"<=":return n<=i;case"<":return n=":return n>=i;case">":return n>i;case"!=":return n!==i;case"regex":return n.match(i);default:return!1}},vt=function(t){lt(window,"haptic",t)},yt=function(t,e,i){void 0===i&&(i=!1),i?history.replaceState(null,"",e):history.pushState(null,"",e),lt(window,"location-changed",{replace:i})},gt=function(t,e,i){void 0===i&&(i=!0);var n,r=H(e),o="group"===r?"homeassistant":r;switch(r){case"lock":n=i?"unlock":"lock";break;case"cover":n=i?"open_cover":"close_cover";break;default:n=i?"turn_on":"turn_off"}return t.callService(o,n,{entity_id:e})},_t=function(t,e){var i=nt.includes(t.states[e].state);return gt(t,e,i)},bt=function(t,e,i,n){if(n||(n={action:"more-info"}),!n.confirmation||n.confirmation.exemptions&&n.confirmation.exemptions.some((function(t){return t.user===e.user.id}))||(vt("warning"),confirm(n.confirmation.text||"Are you sure you want to "+n.action+"?")))switch(n.action){case"more-info":(i.entity||i.camera_image)&<(t,"hass-more-info",{entityId:i.entity?i.entity:i.camera_image});break;case"navigate":n.navigation_path&&yt(0,n.navigation_path);break;case"url":n.url_path&&window.open(n.url_path);break;case"toggle":i.entity&&(_t(e,i.entity),vt("success"));break;case"call-service":if(!n.service)return void vt("failure");var r=n.service.split(".",2);e.callService(r[0],r[1],n.service_data,n.target),vt("success");break;case"fire-dom-event":lt(t,"ll-custom",n)}},wt=function(t,e,i,n){var r;"double_tap"===n&&i.double_tap_action?r=i.double_tap_action:"hold"===n&&i.hold_action?r=i.hold_action:"tap"===n&&i.tap_action&&(r=i.tap_action),bt(t,e,i,r)},$t=function(t,e,i,n,r){var o;if(r&&i.double_tap_action?o=i.double_tap_action:n&&i.hold_action?o=i.hold_action:!n&&i.tap_action&&(o=i.tap_action),o||(o={action:"more-info"}),!o.confirmation||o.confirmation.exemptions&&o.confirmation.exemptions.some((function(t){return t.user===e.user.id}))||confirm(o.confirmation.text||"Are you sure you want to "+o.action+"?"))switch(o.action){case"more-info":(o.entity||i.entity||i.camera_image)&&(lt(t,"hass-more-info",{entityId:o.entity?o.entity:i.entity?i.entity:i.camera_image}),o.haptic&&vt(o.haptic));break;case"navigate":o.navigation_path&&(yt(0,o.navigation_path),o.haptic&&vt(o.haptic));break;case"url":o.url_path&&window.open(o.url_path),o.haptic&&vt(o.haptic);break;case"toggle":i.entity&&(_t(e,i.entity),o.haptic&&vt(o.haptic));break;case"call-service":if(!o.service)return;var a=o.service.split(".",2),s=a[0],l=a[1],u=U({},o.service_data);"entity"===u.entity_id&&(u.entity_id=i.entity),e.callService(s,l,u,o.target),o.haptic&&vt(o.haptic);break;case"fire-dom-event":lt(t,"ll-custom",o),o.haptic&&vt(o.haptic)}};function At(t){return void 0!==t&&"none"!==t.action}function St(t,e,i){if(e.has("config")||i)return!0;if(t.config.entity){var n=e.get("hass");return!n||n.states[t.config.entity]!==t.hass.states[t.config.entity]}return!1}function Et(t){return void 0!==t&&"none"!==t.action}var Ot=function(t,e,i){void 0===i&&(i=!0);var n={};e.forEach((function(e){if(nt.includes(t.states[e].state)===i){var r=H(e),o=["cover","lock"].includes(r)?r:"homeassistant";o in n||(n[o]=[]),n[o].push(e)}})),Object.keys(n).forEach((function(e){var r;switch(e){case"lock":r=i?"unlock":"lock";break;case"cover":r=i?"open_cover":"close_cover";break;default:r=i?"turn_on":"turn_off"}t.callService(e,r,{entity_id:n[e]})}))},Tt=function(){var t=document.querySelector("home-assistant");if(t=(t=(t=(t=(t=(t=(t=(t=t&&t.shadowRoot)&&t.querySelector("home-assistant-main"))&&t.shadowRoot)&&t.querySelector("app-drawer-layout partial-panel-resolver"))&&t.shadowRoot||t)&&t.querySelector("ha-panel-lovelace"))&&t.shadowRoot)&&t.querySelector("hui-root")){var e=t.lovelace;return e.current_view=t.___curView,e}return null},kt={humidity:"mdi:water-percent",illuminance:"mdi:brightness-5",temperature:"mdi:thermometer",pressure:"mdi:gauge",power:"mdi:flash",signal_strength:"mdi:wifi"},Nt={binary_sensor:function(t,e){var i="off"===t;switch(null==e?void 0:e.attributes.device_class){case"battery":return i?"mdi:battery":"mdi:battery-outline";case"battery_charging":return i?"mdi:battery":"mdi:battery-charging";case"cold":return i?"mdi:thermometer":"mdi:snowflake";case"connectivity":return i?"mdi:server-network-off":"mdi:server-network";case"door":return i?"mdi:door-closed":"mdi:door-open";case"garage_door":return i?"mdi:garage":"mdi:garage-open";case"power":case"plug":return i?"mdi:power-plug-off":"mdi:power-plug";case"gas":case"problem":case"safety":case"tamper":return i?"mdi:check-circle":"mdi:alert-circle";case"smoke":return i?"mdi:check-circle":"mdi:smoke";case"heat":return i?"mdi:thermometer":"mdi:fire";case"light":return i?"mdi:brightness-5":"mdi:brightness-7";case"lock":return i?"mdi:lock":"mdi:lock-open";case"moisture":return i?"mdi:water-off":"mdi:water";case"motion":return i?"mdi:walk":"mdi:run";case"occupancy":case"presence":return i?"mdi:home-outline":"mdi:home";case"opening":return i?"mdi:square":"mdi:square-outline";case"running":return i?"mdi:stop":"mdi:play";case"sound":return i?"mdi:music-note-off":"mdi:music-note";case"update":return i?"mdi:package":"mdi:package-up";case"vibration":return i?"mdi:crop-portrait":"mdi:vibrate";case"window":return i?"mdi:window-closed":"mdi:window-open";default:return i?"mdi:radiobox-blank":"mdi:checkbox-marked-circle"}},cover:function(t){var e="closed"!==t.state;switch(t.attributes.device_class){case"garage":return e?"mdi:garage-open":"mdi:garage";case"door":return e?"mdi:door-open":"mdi:door-closed";case"shutter":return e?"mdi:window-shutter-open":"mdi:window-shutter";case"blind":return e?"mdi:blinds-open":"mdi:blinds";case"window":return e?"mdi:window-open":"mdi:window-closed";default:return ft("cover",t.state)}},sensor:function(t){var e=t.attributes.device_class;if(e&&e in kt)return kt[e];if("battery"===e){var i=Number(t.state);if(isNaN(i))return"mdi:battery-unknown";var n=10*Math.round(i/10);return n>=100?"mdi:battery":n<=0?"mdi:battery-alert":"hass:battery-"+n}var r=t.attributes.unit_of_measurement;return"°C"===r||"°F"===r?"mdi:thermometer":ft("sensor")},input_datetime:function(t){return t.attributes.has_date?t.attributes.has_time?ft("input_datetime"):"mdi:calendar":"mdi:clock"}},Ct=function(t){if(!t)return"mdi:bookmark";if(t.attributes.icon)return t.attributes.icon;var e=H(t.entity_id);return e in Nt?Nt[e](t):ft(e,t.state)}},461:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.holdHandler=e.dblClickHandler=e.clickHandler=e.renderInfoEntity=e.renderTitle=e.renderMainEntity=e.renderValue=e.renderIcon=e.renderEntity=e.renderEntitiesRow=e.renderRows=e.entityStyles=e.entityStateDisplay=e.renderCustomStateIcon=e.renderConditionIcons=e.entityIcon=e.entityName=e.computeEntity=e.checkConfig=void 0;const n=i(230),r=i(759),o=i(578),a=i(882),s=i(197),l=i(897),u=i(623),c=i(704),d=i(846);e.checkConfig=t=>{if(null==t.entities&&null==t.entity&&void 0===t.info_entities&&void 0===t.rows&&void 0===t.cards)throw new Error("Please define entities.")},e.computeEntity=t=>t.substr(t.indexOf(".")+1),e.entityName=t=>t.name||(t.entity?t.stateObj.attributes.friendly_name||(0,e.computeEntity)(t.stateObj.entity_id):null)||null,e.entityIcon=(t,i,n)=>{var r;if("icon"in i&&(void 0===i.show_icon||!1===i.show_icon))throw new Error(`Entity: ${i.entity} => Icon defined but show_icon is set to false or not defined. Please set show_icon to true`);return"icon"in i?"string"==typeof i.icon?i.icon:i.icon.state_on?(0,e.renderCustomStateIcon)(t,i.icon):i.icon.conditions?(0,e.renderConditionIcons)(t,i,n):(null===(r=i.icon.template)||void 0===r?void 0:r.icon)?(0,a.evalTemplate)(n,t,i.icon.template.icon):void 0:t.attributes.icon||null},e.renderConditionIcons=(t,e,i)=>{const n=t.state;return e.icon.conditions.filter((e=>{let r=n;if(e.entity){const t=i.states[e.entity];r=e.attribute?t.attributes[e.attribute]:t.state}return e.attribute&&!e.entity&&(r=t.attributes[e.attribute]),(0,a.checkConditionalValue)(e,r)})).pop()},e.renderCustomStateIcon=(t,e)=>{switch((0,o.computeStateDomain)(t)){case"light":case"switch":case"binary_sensor":case"input_boolean":return"on"===t.state?e.state_on:e.state_off}},e.entityStateDisplay=(t,e)=>{if((0,a.isUnavailable)(e.stateObj))return t.localize(`state.default.${e.stateObj.state}`);let i=(0,a.getValue)(e),s=void 0!==e.attribute?e.unit:e.unit||e.stateObj.attributes.unit_of_measurement;if(e.format){if(e.format.startsWith("precision")){const n=parseInt(e.format.slice(-1),10);i=(0,r.formatNumber)(i,t.locale,{minimumFractionDigits:n,maximumFractionDigits:n})}else isNaN(parseFloat(i))||!isFinite(i)||("brightness"===e.format?(i=Math.round(i/255*100),s="%"):e.format.startsWith("duration")?(i=(0,n.secondsToDuration)("duration-m"===e.format?i/1e3:i),s=void 0):"kilo"===e.format?i=(0,r.formatNumber)(i/1e3,t.locale,{maximumFractionDigits:2}):"invert"===e.format?i=(0,r.formatNumber)(i-2*i,t.locale):"position"===e.format&&(i=(0,r.formatNumber)(100-i,t.locale)));return`${i}${s?` ${s}`:""}`}if(e.attribute)return`${isNaN(i)?i:(0,r.formatNumber)(i,t.locale)}${s?` ${s}`:""}`;const l=Object.assign(Object.assign({},e.stateObj),{attributes:Object.assign(Object.assign({},e.stateObj.attributes),{unit_of_measurement:s})});return(0,o.computeStateDisplay)(t.localize,l,t.locale)},e.entityStyles=t=>(0,a.isObject)(t)?Object.keys(t).map((e=>`${e}: ${t[e]};`)).join(""):"",e.renderRows=(t,i,n,r)=>{const o=i.filter((t=>!(0,d.hideIfRow)(t,n)));return l.html`${o.map((i=>(0,e.renderEntitiesRow)(t,i.entities,n,r)))}`},e.renderEntitiesRow=(t,i,n,r,o)=>void 0===i?null:l.html`
${i.map((t=>(0,e.renderEntity)(t,n,r)))}
`,e.renderEntity=(t,i,n)=>{if(null==t.stateObj||(0,d.hideIfEntity)(t,i))return null;const r=(0,e.clickHandler)(t.stateObj.entity_id,t.tap_action,i,n),o=(0,e.dblClickHandler)(t.stateObj.entity_id,t.double_tap_action,i,n),a=(0,e.holdHandler)(t.stateObj.entity_id,t.hold_action,i,n);let s,u,c;const m=()=>{s=!1,u=window.setTimeout((()=>{s=!0}),500)},h=e=>{e.preventDefault(),["touchend","touchcancel"].includes(e.type)&&void 0===u||(window.clearTimeout(u),u=void 0,s?a():void 0!==t.double_tap_action?"click"===e.type&&e.detail<2||!c?c=window.setTimeout((()=>{c=void 0,r()}),250):(window.clearTimeout(c),c=void 0,o()):r())};return l.html`
${void 0===t.show_name||t.show_name?l.html`${(0,e.entityName)(t)}`:""}
${(0,e.renderIcon)(t.stateObj,t,i)}
@@ -31,7 +31,7 @@ ${this.info_entities.map((t=>(0,a.renderInfoEntity)(t,this._hass,this)))}
- ${void 0!==this.rows&&this.rows.length>0?(0,a.renderRows)(this.rows,this._hass,this):(0,a.renderEntitiesRow)(this.entities,this._hass,this)} + ${void 0!==this.rows&&this.rows.length>0?(0,a.renderRows)(this.config,this.rows,this._hass,this):(0,a.renderEntitiesRow)(this.config,this.entities,this._hass,this)} ${this._refCards} `}catch(t){return r.html`${t.toString()}`}}};n([(0,o.property)()],c.prototype,"_hass",void 0),n([(0,o.property)()],c.prototype,"config",void 0),c=n([(0,o.customElement)("room-card")],c),e.default=c},578:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.computeStateDisplay=e.computeStateDomain=void 0;const n=i(623),r=i(247),o=i(347),a=i(319),s=i(759);e.computeStateDomain=t=>t.entity_id.substr(0,t.entity_id.indexOf(".")),e.computeStateDisplay=(t,i,l,u)=>{const c=void 0!==u?u:i.state;if(c===n.UNKNOWN||c===n.UNAVAILABLE)return t(`state.default.${c}`);if((0,s.isNumericState)(i)){if("monetary"===i.attributes.device_class)try{return(0,s.formatNumber)(c,l,{style:"currency",currency:i.attributes.unit_of_measurement})}catch(t){}return`${(0,s.formatNumber)(c,l)}${i.attributes.unit_of_measurement?" "+i.attributes.unit_of_measurement:""}`}const d=(0,e.computeStateDomain)(i);if("input_datetime"===d){if(void 0===u){let t;return i.attributes.has_date&&i.attributes.has_time?(t=new Date(i.attributes.year,i.attributes.month-1,i.attributes.day,i.attributes.hour,i.attributes.minute),(0,o.formatDateTime)(t,l)):i.attributes.has_date?(t=new Date(i.attributes.year,i.attributes.month-1,i.attributes.day),(0,r.formatDate)(t,l)):i.attributes.has_time?(t=new Date,t.setHours(i.attributes.hour,i.attributes.minute),(0,a.formatTime)(t,l)):i.state}try{const t=u.split(" ");if(2===t.length)return(0,o.formatDateTime)(new Date(t.join("T")),l);if(1===t.length){if(u.includes("-"))return(0,r.formatDate)(new Date(`${u}T00:00`),l);if(u.includes(":")){const t=new Date;return(0,a.formatTime)(new Date(`${t.toISOString().split("T")[0]}T${u}`),l)}}return u}catch(t){return u}}return"humidifier"===d&&"on"===c&&i.attributes.humidity?`${i.attributes.humidity} %`:"counter"===d||"number"===d||"input_number"===d?(0,s.formatNumber)(c,l):"button"===d||"sensor"===d&&"timestamp"===i.attributes.device_class?(0,o.formatDateTime)(new Date(c),l):i.attributes.device_class&&t(`component.${d}.state.${i.attributes.device_class}.${c}`)||t(`component.${d}.state._.${c}`)||c}},623:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.TimeFormat=e.NumberFormat=e.SECONDARY_INFO_VALUES=e.TIMESTAMP_FORMATS=e.LAST_UPDATED=e.LAST_CHANGED=e.UNAVAILABLE_STATES=e.UNKNOWN=e.UNAVAILABLE=void 0,e.UNAVAILABLE="unavailable",e.UNKNOWN="unknown",e.UNAVAILABLE_STATES=[e.UNAVAILABLE,e.UNKNOWN],e.LAST_CHANGED="last-changed",e.LAST_UPDATED="last-updated",e.TIMESTAMP_FORMATS=["relative","total","date","time","datetime"],e.SECONDARY_INFO_VALUES=["entity-id","last-changed","last-updated","last-triggered","position","tilt-position","brightness"],e.NumberFormat={language:"language",system:"system",comma_decimal:"comma_decimal",decimal_comma:"decimal_comma",space_comma:"space_comma",none:"none"},e.TimeFormat={language:"language",system:"system",am_pm:"12",twenty_four:"24"}},247:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.formatDate=void 0,e.formatDate=(t,e)=>new Intl.DateTimeFormat(e.language,{year:"numeric",month:"long",day:"numeric"}).format(t)},347:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.formatDateTime=void 0;const n=i(269);e.formatDateTime=(t,e)=>new Intl.DateTimeFormat(e.language,{year:"numeric",month:"long",day:"numeric",hour:(0,n.useAmPm)(e)?"numeric":"2-digit",minute:"2-digit",hour12:(0,n.useAmPm)(e)}).format(t)},759:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.formatNumber=e.numberFormatToLocale=e.isNumericState=e.round=void 0;const n=i(623);e.round=(t,e=2)=>Math.round(t*Math.pow(10,e))/Math.pow(10,e),e.isNumericState=t=>!!t.attributes.unit_of_measurement||!!t.attributes.state_class,e.numberFormatToLocale=t=>{switch(t.number_format){case n.NumberFormat.comma_decimal:return["en-US","en"];case n.NumberFormat.decimal_comma:return["de","es","it"];case n.NumberFormat.space_comma:return["fr","sv","cs"];case n.NumberFormat.system:return;default:return t.language}},e.formatNumber=(t,i,o)=>{const a=i?(0,e.numberFormatToLocale)(i):void 0;if((null==i?void 0:i.number_format)!==n.NumberFormat.none&&!Number.isNaN(Number(t))&&Intl)try{return new Intl.NumberFormat(a,r(t,o)).format(Number(t))}catch(e){return console.error(e),new Intl.NumberFormat(void 0,r(t,o)).format(Number(t))}return"string"==typeof t?t:`${(0,e.round)(t,null==o?void 0:o.maximumFractionDigits).toString()}${"currency"===(null==o?void 0:o.style)?` ${o.currency}`:""}`};const r=(t,e)=>Object.assign({maximumFractionDigits:2},e)},319:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.formatTime=void 0;const n=i(269);e.formatTime=(t,e)=>new Intl.DateTimeFormat(e.language,{hour:"numeric",minute:"2-digit",hour12:(0,n.useAmPm)(e)}).format(t)},230:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.secondsToDuration=void 0;const i=t=>t<10?`0${t}`:t;e.secondsToDuration=function(t){const e=Math.floor(t/3600),n=Math.floor(t%3600/60),r=Math.floor(t%3600%60);return e>0?`${e}:${i(n)}:${i(r)}`:n>0?`${n}:${i(r)}`:r>0?""+r:null}},269:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.useAmPm=void 0;const n=i(623);e.useAmPm=t=>{if(t.time_format===n.TimeFormat.language||t.time_format===n.TimeFormat.system){const e=t.time_format===n.TimeFormat.language?t.language:void 0,i=(new Date).toLocaleString(e);return i.includes("AM")||i.includes("PM")}return t.time_format===n.TimeFormat.am_pm}},299:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.style=void 0;const n=i(897);e.style=n.css` @@ -56,7 +56,6 @@ flex-direction: row; flex-wrap: wrap; display: inline-flex; - justify-content: left; align-items: center; padding: 0 20px 10px 20px; } @@ -113,4 +112,13 @@ .clickable { cursor: pointer; } -`},704:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.mapTemplate=e.templateStyling=void 0;const n=i(882);e.templateStyling=(t,e,i)=>{var r;const o=e.icon;return void 0!==(null===(r=null==o?void 0:o.template)||void 0===r?void 0:r.styles)?(0,n.evalTemplate)(i,t,o.template.styles):null},e.mapTemplate=(t,e)=>{if(void 0!==t&&t.template){const i=e.templates.filter((e=>e.name===t.template));if(i.length>0){const e=i[0];return Object.assign(Object.assign({stateObj:t.stateObj},t),e.template)}}return t}},882:function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.evalTemplate=e.createCardElement=e.mapStateObject=e.checkConditionalValue=e.hasConfigOrEntitiesChanged=e.getEntity=e.getEntityIds=e.getValue=e.isUnavailable=e.isObject=void 0;const n=i(197),r=i(897),o=i(623),a=i(704),s=i(846);e.isObject=t=>"object"==typeof t&&!Array.isArray(t)&&!!t,e.isUnavailable=t=>!t||o.UNAVAILABLE_STATES.includes(t.state),e.getValue=t=>{if(t.attribute&&void 0===t.stateObj.attributes[t.attribute])throw new Error(`Entity: '${t.entity}' has no attribute named '${t.attribute}'`);return t.attribute?t.stateObj.attributes[t.attribute]:t.stateObj.state},e.getEntityIds=t=>{var i,n,r,o;return[t.entity].concat(null===(i=t.entities)||void 0===i?void 0:i.map((t=>(0,e.getEntity)(t)))).concat(null===(n=t.info_entities)||void 0===n?void 0:n.map((t=>(0,e.getEntity)(t)))).concat(null===(r=t.rows)||void 0===r?void 0:r.flatMap((t=>t.entities)).map((t=>(0,e.getEntity)(t)))).concat(null===(o=t.cards)||void 0===o?void 0:o.map((t=>(0,e.getEntity)(t.entity)))).filter((t=>t))},e.getEntity=t=>void 0===t?null:"string"==typeof t?t:t.entity,e.hasConfigOrEntitiesChanged=(t,e)=>{if(e.has("config"))return!0;const i=e.get("_hass");return!!i&&t.entityIds.some((e=>i.states[e]!==t.hass.states[e]))},e.checkConditionalValue=(t,e)=>{const i="boolean"==typeof t.value?String(t.value):t.value;return"equals"==t.condition&&e==i||"not_equals"==t.condition&&e!=i||"above"==t.condition&&e>i||"below"==t.condition&&e{let n="string"==typeof t?{entity:t}:t;return n=(0,a.mapTemplate)(n,i),Object.assign(Object.assign({},n),{stateObj:e.states[n.entity]})},e.createCardElement=(t,e)=>{if((0,s.hideIfCard)(t,e)||t.show_states&&!t.show_states.includes(e.states[t.entity].state))return;let i=t.type;i=i.startsWith("divider")?"hui-divider-row":i.startsWith("custom:")?i.substr("custom:".length):`hui-${i}-card`;const r=(0,n.createThing)(t);return r.hass=e,r.style.boxShadow="none",r.style.borderRadius="0",r},e.evalTemplate=(t,e,i)=>{try{return new Function("states","entity","user","hass","html",`'use strict'; ${i}`).call(this,null==t?void 0:t.states,e,null==t?void 0:t.user,t,r.html)}catch(t){const e=i.length<=100?i.trim():`${i.trim().substring(0,98)}...`;throw t.message=`${t.name}: ${t.message} in '${e}'`,t.name="RoomCardJSTemplateError",t}}},595:(t,e,i)=>{i.r(e),i.d(e,{customElement:()=>n,eventOptions:()=>l,property:()=>o,query:()=>u,queryAll:()=>c,queryAssignedElements:()=>p,queryAssignedNodes:()=>f,queryAsync:()=>d,state:()=>a});const n=t=>e=>"function"==typeof e?((t,e)=>(customElements.define(t,e),e))(t,e):((t,e)=>{const{kind:i,elements:n}=e;return{kind:i,elements:n,finisher(e){customElements.define(t,e)}}})(t,e),r=(t,e)=>"method"===e.kind&&e.descriptor&&!("value"in e.descriptor)?{...e,finisher(i){i.createProperty(e.key,t)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:e.key,initializer(){"function"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function o(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):r(t,e)}function a(t){return o({...t,state:!0})}const s=({finisher:t,descriptor:e})=>(i,n)=>{var r;if(void 0===n){const n=null!==(r=i.originalKey)&&void 0!==r?r:i.key,o=null!=e?{kind:"method",placement:"prototype",key:n,descriptor:e(i.key)}:{...i,key:n};return null!=t&&(o.finisher=function(e){t(e,n)}),o}{const r=i.constructor;void 0!==e&&Object.defineProperty(i,n,e(n)),null==t||t(r,n)}};function l(t){return s({finisher:(e,i)=>{Object.assign(e.prototype[i],t)}})}function u(t,e){return s({descriptor:i=>{const n={get(){var e,i;return null!==(i=null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t))&&void 0!==i?i:null},enumerable:!0,configurable:!0};if(e){const e="symbol"==typeof i?Symbol():"__"+i;n.get=function(){var i,n;return void 0===this[e]&&(this[e]=null!==(n=null===(i=this.renderRoot)||void 0===i?void 0:i.querySelector(t))&&void 0!==n?n:null),this[e]}}return n}})}function c(t){return s({descriptor:e=>({get(){var e,i;return null!==(i=null===(e=this.renderRoot)||void 0===e?void 0:e.querySelectorAll(t))&&void 0!==i?i:[]},enumerable:!0,configurable:!0})})}function d(t){return s({descriptor:e=>({async get(){var e;return await this.updateComplete,null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t)},enumerable:!0,configurable:!0})})}var m;const h=null!=(null===(m=window.HTMLSlotElement)||void 0===m?void 0:m.prototype.assignedElements)?(t,e)=>t.assignedElements(e):(t,e)=>t.assignedNodes(e).filter((t=>t.nodeType===Node.ELEMENT_NODE));function p(t){const{slot:e,selector:i}=null!=t?t:{};return s({descriptor:n=>({get(){var n;const r="slot"+(e?`[name=${e}]`:":not([name])"),o=null===(n=this.renderRoot)||void 0===n?void 0:n.querySelector(r),a=null!=o?h(o,t):[];return i?a.filter((t=>t.matches(i))):a},enumerable:!0,configurable:!0})})}function f(t,e,i){let n,r=t;return"object"==typeof t?(r=t.slot,n=t):n={flatten:e},i?p({slot:r,flatten:e,selector:i}):s({descriptor:t=>({get(){var t,e;const i="slot"+(r?`[name=${r}]`:":not([name])"),o=null===(t=this.renderRoot)||void 0===t?void 0:t.querySelector(i);return null!==(e=null==o?void 0:o.assignedNodes(n))&&void 0!==e?e:[]},enumerable:!0,configurable:!0})})}},897:(t,e,i)=>{i.r(e),i.d(e,{CSSResult:()=>s,LitElement:()=>ct,ReactiveElement:()=>b,UpdatingElement:()=>ut,_$LE:()=>mt,_$LH:()=>ot,adoptStyles:()=>c,css:()=>u,defaultConverter:()=>y,getCompatibleStyle:()=>d,html:()=>L,noChange:()=>z,notEqual:()=>g,nothing:()=>q,render:()=>B,supportsAdoptingStyleSheets:()=>r,svg:()=>V,unsafeCSS:()=>l});const n=window,r=n.ShadowRoot&&(void 0===n.ShadyCSS||n.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,o=Symbol(),a=new WeakMap;class s{constructor(t,e,i){if(this._$cssResult$=!0,i!==o)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const e=this.t;if(r&&void 0===t){const i=void 0!==e&&1===e.length;i&&(t=a.get(e)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),i&&a.set(e,t))}return t}toString(){return this.cssText}}const l=t=>new s("string"==typeof t?t:t+"",void 0,o),u=(t,...e)=>{const i=1===t.length?t[0]:e.reduce(((e,i,n)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[n+1]),t[0]);return new s(i,t,o)},c=(t,e)=>{r?t.adoptedStyleSheets=e.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):e.forEach((e=>{const i=document.createElement("style"),r=n.litNonce;void 0!==r&&i.setAttribute("nonce",r),i.textContent=e.cssText,t.appendChild(i)}))},d=r?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return l(e)})(t):t;var m;const h=window,p=h.trustedTypes,f=p?p.emptyScript:"",v=h.reactiveElementPolyfillSupport,y={toAttribute(t,e){switch(e){case Boolean:t=t?f:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},g=(t,e)=>e!==t&&(e==e||t==t),_={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:g};class b extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(t){var e;null!==(e=this.h)&&void 0!==e||(this.h=[]),this.h.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((e,i)=>{const n=this._$Ep(i,e);void 0!==n&&(this._$Ev.set(n,i),t.push(n))})),t}static createProperty(t,e=_){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const i="symbol"==typeof t?Symbol():"__"+t,n=this.getPropertyDescriptor(t,i,e);void 0!==n&&Object.defineProperty(this.prototype,t,n)}}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(n){const r=this[t];this[e]=n,this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||_}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const i of e)this.createProperty(i,t[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(d(t))}else void 0!==t&&e.push(d(t));return e}static _$Ep(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}u(){var t;this._$E_=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(t=this.constructor.h)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,i;(null!==(e=this._$ES)&&void 0!==e?e:this._$ES=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(i=t.hostConnected)||void 0===i||i.call(t))}removeController(t){var e;null===(e=this._$ES)||void 0===e||e.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this._$Ei.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t;const e=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return c(e,this.constructor.elementStyles),e}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)}))}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$EO(t,e,i=_){var n;const r=this.constructor._$Ep(t,i);if(void 0!==r&&!0===i.reflect){const o=(void 0!==(null===(n=i.converter)||void 0===n?void 0:n.toAttribute)?i.converter:y).toAttribute(e,i.type);this._$El=t,null==o?this.removeAttribute(r):this.setAttribute(r,o),this._$El=null}}_$AK(t,e){var i;const n=this.constructor,r=n._$Ev.get(t);if(void 0!==r&&this._$El!==r){const t=n.getPropertyOptions(r),o="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==(null===(i=t.converter)||void 0===i?void 0:i.fromAttribute)?t.converter:y;this._$El=r,this[r]=o.fromAttribute(e,t.type),this._$El=null}}requestUpdate(t,e,i){let n=!0;void 0!==t&&(((i=i||this.constructor.getPropertyOptions(t)).hasChanged||g)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),!0===i.reflect&&this._$El!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,i))):n=!1),!this.isUpdatePending&&n&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((t,e)=>this[e]=t)),this._$Ei=void 0);let e=!1;const i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(i)):this._$Ek()}catch(t){throw e=!1,this._$Ek(),t}e&&this._$AE(i)}willUpdate(t){}_$AE(t){var e;null===(e=this._$ES)||void 0===e||e.forEach((t=>{var e;return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,e)=>this._$EO(e,this[e],t))),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}}var w;b.finalized=!0,b.elementProperties=new Map,b.elementStyles=[],b.shadowRootOptions={mode:"open"},null==v||v({ReactiveElement:b}),(null!==(m=h.reactiveElementVersions)&&void 0!==m?m:h.reactiveElementVersions=[]).push("1.4.1");const $=window,A=$.trustedTypes,S=A?A.createPolicy("lit-html",{createHTML:t=>t}):void 0,E=`lit$${(Math.random()+"").slice(9)}$`,O="?"+E,T=`<${O}>`,k=document,N=(t="")=>k.createComment(t),C=t=>null===t||"object"!=typeof t&&"function"!=typeof t,D=Array.isArray,j=t=>D(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]),x=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,I=/-->/g,M=/>/g,P=RegExp(">|[ \t\n\f\r](?:([^\\s\"'>=/]+)([ \t\n\f\r]*=[ \t\n\f\r]*(?:[^ \t\n\f\r\"'`<>=]|(\"|')|))|$)","g"),U=/'/g,F=/"/g,R=/^(?:script|style|textarea|title)$/i,H=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),L=H(1),V=H(2),z=Symbol.for("lit-noChange"),q=Symbol.for("lit-nothing"),W=new WeakMap,B=(t,e,i)=>{var n,r;const o=null!==(n=null==i?void 0:i.renderBefore)&&void 0!==n?n:e;let a=o._$litPart$;if(void 0===a){const t=null!==(r=null==i?void 0:i.renderBefore)&&void 0!==r?r:null;o._$litPart$=a=new Q(e.insertBefore(N(),t),t,void 0,null!=i?i:{})}return a._$AI(t),a},K=k.createTreeWalker(k,129,null,!1),Y=(t,e)=>{const i=t.length-1,n=[];let r,o=2===e?"":"",a=x;for(let e=0;e"===l[0]?(a=null!=r?r:x,u=-1):void 0===l[1]?u=-2:(u=a.lastIndex-l[2].length,s=l[1],a=void 0===l[3]?P:'"'===l[3]?F:U):a===F||a===U?a=P:a===I||a===M?a=x:(a=P,r=void 0);const d=a===P&&t[e+1].startsWith("/>")?" ":"";o+=a===x?i+T:u>=0?(n.push(s),i.slice(0,u)+"$lit$"+i.slice(u)+E+d):i+E+(-2===u?(n.push(void 0),e):d)}const s=o+(t[i]||"")+(2===e?"":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return[void 0!==S?S.createHTML(s):s,n]};class G{constructor({strings:t,_$litType$:e},i){let n;this.parts=[];let r=0,o=0;const a=t.length-1,s=this.parts,[l,u]=Y(t,e);if(this.el=G.createElement(l,i),K.currentNode=this.el.content,2===e){const t=this.el.content,e=t.firstChild;e.remove(),t.append(...e.childNodes)}for(;null!==(n=K.nextNode())&&s.length0){n.textContent=A?A.emptyScript:"";for(let i=0;i2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=q}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,i,n){const r=this.strings;let o=!1;if(void 0===r)t=J(this,t,e,0),o=!C(t)||t!==this._$AH&&t!==z,o&&(this._$AH=t);else{const n=t;let a,s;for(t=r[0],a=0;a{t._$AK(e,i)},_$AL:t=>t._$AL};(null!==(lt=globalThis.litElementVersions)&&void 0!==lt?lt:globalThis.litElementVersions=[]).push("3.2.2")},147:t=>{t.exports=JSON.parse('{"name":"room-card","version":"1.06.21","description":"Show entities in Home Assistant\'s Lovelace UI","keywords":["home-assistant","homeassistant","lovelace","custom-cards","multiple","entity","row"],"module":"room-card.js","license":"MIT","dependencies":{"babel-jest":"^29.0.3","custom-card-helpers":"^1.8.0","jest-environment-jsdom":"^29.0.3","jest-ts-auto-mock":"^2.1.0","lit":"^2.0.2","ts-auto-mock":"^3.6.2","ttypescript":"^1.5.13","yarn":"^1.22.18"},"devDependencies":{"@babel/core":"^7.19.1","@babel/plugin-transform-runtime":"^7.19.1","@babel/preset-env":"^7.19.1","@types/jest":"^29.0.3","@typescript-eslint/eslint-plugin":"^5.38.0","@typescript-eslint/parser":"^5.38.0","babel-loader":"^8.2.3","compression-webpack-plugin":"^10.0.0","eslint":"^8.24.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^29.0.3","prettier":"^2.5.1","ts-jest":"^29.0.2","ts-loader":"^9.4.1","typescript":"^4.8.3","webpack":"^5.65.0","webpack-cli":"^4.9.1"},"scripts":{"lint":"eslint src/**/*.ts","dev":"webpack -c webpack.config.js","build":"yarn lint && webpack -c webpack.config.js","test":"jest","coverage":"jest --coverage","workflow":"jest --coverage --json --outputFile=/home/runner/work/room-card/room-card/jest.results.json"}}')}},e={};function i(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,i),o.exports}i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i(607)})(); \ No newline at end of file + .content-left { + justify-content: left; + } + .content-center { + justify-content: center; + } + .content-right { + justify-content: right; + } +`},704:(t,e,i)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.mapTemplate=e.templateStyling=void 0;const n=i(882);e.templateStyling=(t,e,i)=>{var r;const o=e.icon;return void 0!==(null===(r=null==o?void 0:o.template)||void 0===r?void 0:r.styles)?(0,n.evalTemplate)(i,t,o.template.styles):null},e.mapTemplate=(t,e)=>{if(void 0!==t&&t.template){const i=e.templates.filter((e=>e.name===t.template));if(i.length>0){const e=i[0];return Object.assign(Object.assign({stateObj:t.stateObj},t),e.template)}}return t}},882:function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.renderClasses=e.evalTemplate=e.createCardElement=e.mapStateObject=e.checkConditionalValue=e.hasConfigOrEntitiesChanged=e.getEntity=e.getEntityIds=e.getValue=e.isUnavailable=e.isObject=void 0;const n=i(197),r=i(897),o=i(623),a=i(704),s=i(846);e.isObject=t=>"object"==typeof t&&!Array.isArray(t)&&!!t,e.isUnavailable=t=>!t||o.UNAVAILABLE_STATES.includes(t.state),e.getValue=t=>{if(t.attribute&&void 0===t.stateObj.attributes[t.attribute])throw new Error(`Entity: '${t.entity}' has no attribute named '${t.attribute}'`);return t.attribute?t.stateObj.attributes[t.attribute]:t.stateObj.state},e.getEntityIds=t=>{var i,n,r,o;return[t.entity].concat(null===(i=t.entities)||void 0===i?void 0:i.map((t=>(0,e.getEntity)(t)))).concat(null===(n=t.info_entities)||void 0===n?void 0:n.map((t=>(0,e.getEntity)(t)))).concat(null===(r=t.rows)||void 0===r?void 0:r.flatMap((t=>t.entities)).map((t=>(0,e.getEntity)(t)))).concat(null===(o=t.cards)||void 0===o?void 0:o.map((t=>(0,e.getEntity)(t.entity)))).filter((t=>t))},e.getEntity=t=>void 0===t?null:"string"==typeof t?t:t.entity,e.hasConfigOrEntitiesChanged=(t,e)=>{if(e.has("config"))return!0;const i=e.get("_hass");return!!i&&t.entityIds.some((e=>i.states[e]!==t.hass.states[e]))},e.checkConditionalValue=(t,e)=>{const i="boolean"==typeof t.value?String(t.value):t.value;return"equals"==t.condition&&e==i||"not_equals"==t.condition&&e!=i||"above"==t.condition&&e>i||"below"==t.condition&&e{let n="string"==typeof t?{entity:t}:t;return n=(0,a.mapTemplate)(n,i),Object.assign(Object.assign({},n),{stateObj:e.states[n.entity]})},e.createCardElement=(t,e)=>{if((0,s.hideIfCard)(t,e)||t.show_states&&!t.show_states.includes(e.states[t.entity].state))return;let i=t.type;i=i.startsWith("divider")?"hui-divider-row":i.startsWith("custom:")?i.substr("custom:".length):`hui-${i}-card`;const r=(0,n.createThing)(t);return r.hass=e,r.style.boxShadow="none",r.style.borderRadius="0",r},e.evalTemplate=(t,e,i)=>{try{return new Function("states","entity","user","hass","html",`'use strict'; ${i}`).call(this,null==t?void 0:t.states,e,null==t?void 0:t.user,t,r.html)}catch(t){const e=i.length<=100?i.trim():`${i.trim().substring(0,98)}...`;throw t.message=`${t.name}: ${t.message} in '${e}'`,t.name="RoomCardJSTemplateError",t}},e.renderClasses=(t,e)=>`entities-row ${t.content_alignment?`content-${t.content_alignment}`:"content-left"}${void 0!==e?` ${e}`:""}`},595:(t,e,i)=>{i.r(e),i.d(e,{customElement:()=>n,eventOptions:()=>l,property:()=>o,query:()=>u,queryAll:()=>c,queryAssignedElements:()=>f,queryAssignedNodes:()=>p,queryAsync:()=>d,state:()=>a});const n=t=>e=>"function"==typeof e?((t,e)=>(customElements.define(t,e),e))(t,e):((t,e)=>{const{kind:i,elements:n}=e;return{kind:i,elements:n,finisher(e){customElements.define(t,e)}}})(t,e),r=(t,e)=>"method"===e.kind&&e.descriptor&&!("value"in e.descriptor)?{...e,finisher(i){i.createProperty(e.key,t)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:e.key,initializer(){"function"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function o(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):r(t,e)}function a(t){return o({...t,state:!0})}const s=({finisher:t,descriptor:e})=>(i,n)=>{var r;if(void 0===n){const n=null!==(r=i.originalKey)&&void 0!==r?r:i.key,o=null!=e?{kind:"method",placement:"prototype",key:n,descriptor:e(i.key)}:{...i,key:n};return null!=t&&(o.finisher=function(e){t(e,n)}),o}{const r=i.constructor;void 0!==e&&Object.defineProperty(i,n,e(n)),null==t||t(r,n)}};function l(t){return s({finisher:(e,i)=>{Object.assign(e.prototype[i],t)}})}function u(t,e){return s({descriptor:i=>{const n={get(){var e,i;return null!==(i=null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t))&&void 0!==i?i:null},enumerable:!0,configurable:!0};if(e){const e="symbol"==typeof i?Symbol():"__"+i;n.get=function(){var i,n;return void 0===this[e]&&(this[e]=null!==(n=null===(i=this.renderRoot)||void 0===i?void 0:i.querySelector(t))&&void 0!==n?n:null),this[e]}}return n}})}function c(t){return s({descriptor:e=>({get(){var e,i;return null!==(i=null===(e=this.renderRoot)||void 0===e?void 0:e.querySelectorAll(t))&&void 0!==i?i:[]},enumerable:!0,configurable:!0})})}function d(t){return s({descriptor:e=>({async get(){var e;return await this.updateComplete,null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t)},enumerable:!0,configurable:!0})})}var m;const h=null!=(null===(m=window.HTMLSlotElement)||void 0===m?void 0:m.prototype.assignedElements)?(t,e)=>t.assignedElements(e):(t,e)=>t.assignedNodes(e).filter((t=>t.nodeType===Node.ELEMENT_NODE));function f(t){const{slot:e,selector:i}=null!=t?t:{};return s({descriptor:n=>({get(){var n;const r="slot"+(e?`[name=${e}]`:":not([name])"),o=null===(n=this.renderRoot)||void 0===n?void 0:n.querySelector(r),a=null!=o?h(o,t):[];return i?a.filter((t=>t.matches(i))):a},enumerable:!0,configurable:!0})})}function p(t,e,i){let n,r=t;return"object"==typeof t?(r=t.slot,n=t):n={flatten:e},i?f({slot:r,flatten:e,selector:i}):s({descriptor:t=>({get(){var t,e;const i="slot"+(r?`[name=${r}]`:":not([name])"),o=null===(t=this.renderRoot)||void 0===t?void 0:t.querySelector(i);return null!==(e=null==o?void 0:o.assignedNodes(n))&&void 0!==e?e:[]},enumerable:!0,configurable:!0})})}},897:(t,e,i)=>{i.r(e),i.d(e,{CSSResult:()=>s,LitElement:()=>ct,ReactiveElement:()=>b,UpdatingElement:()=>ut,_$LE:()=>mt,_$LH:()=>ot,adoptStyles:()=>c,css:()=>u,defaultConverter:()=>y,getCompatibleStyle:()=>d,html:()=>L,noChange:()=>z,notEqual:()=>g,nothing:()=>q,render:()=>B,supportsAdoptingStyleSheets:()=>r,svg:()=>V,unsafeCSS:()=>l});const n=window,r=n.ShadowRoot&&(void 0===n.ShadyCSS||n.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,o=Symbol(),a=new WeakMap;class s{constructor(t,e,i){if(this._$cssResult$=!0,i!==o)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const e=this.t;if(r&&void 0===t){const i=void 0!==e&&1===e.length;i&&(t=a.get(e)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),i&&a.set(e,t))}return t}toString(){return this.cssText}}const l=t=>new s("string"==typeof t?t:t+"",void 0,o),u=(t,...e)=>{const i=1===t.length?t[0]:e.reduce(((e,i,n)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[n+1]),t[0]);return new s(i,t,o)},c=(t,e)=>{r?t.adoptedStyleSheets=e.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):e.forEach((e=>{const i=document.createElement("style"),r=n.litNonce;void 0!==r&&i.setAttribute("nonce",r),i.textContent=e.cssText,t.appendChild(i)}))},d=r?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return l(e)})(t):t;var m;const h=window,f=h.trustedTypes,p=f?f.emptyScript:"",v=h.reactiveElementPolyfillSupport,y={toAttribute(t,e){switch(e){case Boolean:t=t?p:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},g=(t,e)=>e!==t&&(e==e||t==t),_={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:g};class b extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(t){var e;null!==(e=this.h)&&void 0!==e||(this.h=[]),this.h.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((e,i)=>{const n=this._$Ep(i,e);void 0!==n&&(this._$Ev.set(n,i),t.push(n))})),t}static createProperty(t,e=_){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const i="symbol"==typeof t?Symbol():"__"+t,n=this.getPropertyDescriptor(t,i,e);void 0!==n&&Object.defineProperty(this.prototype,t,n)}}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(n){const r=this[t];this[e]=n,this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||_}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const i of e)this.createProperty(i,t[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(d(t))}else void 0!==t&&e.push(d(t));return e}static _$Ep(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}u(){var t;this._$E_=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(t=this.constructor.h)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,i;(null!==(e=this._$ES)&&void 0!==e?e:this._$ES=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(i=t.hostConnected)||void 0===i||i.call(t))}removeController(t){var e;null===(e=this._$ES)||void 0===e||e.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this._$Ei.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t;const e=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return c(e,this.constructor.elementStyles),e}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)}))}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$EO(t,e,i=_){var n;const r=this.constructor._$Ep(t,i);if(void 0!==r&&!0===i.reflect){const o=(void 0!==(null===(n=i.converter)||void 0===n?void 0:n.toAttribute)?i.converter:y).toAttribute(e,i.type);this._$El=t,null==o?this.removeAttribute(r):this.setAttribute(r,o),this._$El=null}}_$AK(t,e){var i;const n=this.constructor,r=n._$Ev.get(t);if(void 0!==r&&this._$El!==r){const t=n.getPropertyOptions(r),o="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==(null===(i=t.converter)||void 0===i?void 0:i.fromAttribute)?t.converter:y;this._$El=r,this[r]=o.fromAttribute(e,t.type),this._$El=null}}requestUpdate(t,e,i){let n=!0;void 0!==t&&(((i=i||this.constructor.getPropertyOptions(t)).hasChanged||g)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),!0===i.reflect&&this._$El!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,i))):n=!1),!this.isUpdatePending&&n&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((t,e)=>this[e]=t)),this._$Ei=void 0);let e=!1;const i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(i)):this._$Ek()}catch(t){throw e=!1,this._$Ek(),t}e&&this._$AE(i)}willUpdate(t){}_$AE(t){var e;null===(e=this._$ES)||void 0===e||e.forEach((t=>{var e;return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,e)=>this._$EO(e,this[e],t))),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}}var w;b.finalized=!0,b.elementProperties=new Map,b.elementStyles=[],b.shadowRootOptions={mode:"open"},null==v||v({ReactiveElement:b}),(null!==(m=h.reactiveElementVersions)&&void 0!==m?m:h.reactiveElementVersions=[]).push("1.4.1");const $=window,A=$.trustedTypes,S=A?A.createPolicy("lit-html",{createHTML:t=>t}):void 0,E=`lit$${(Math.random()+"").slice(9)}$`,O="?"+E,T=`<${O}>`,k=document,N=(t="")=>k.createComment(t),C=t=>null===t||"object"!=typeof t&&"function"!=typeof t,D=Array.isArray,j=t=>D(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]),x=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,I=/-->/g,M=/>/g,P=RegExp(">|[ \t\n\f\r](?:([^\\s\"'>=/]+)([ \t\n\f\r]*=[ \t\n\f\r]*(?:[^ \t\n\f\r\"'`<>=]|(\"|')|))|$)","g"),U=/'/g,F=/"/g,R=/^(?:script|style|textarea|title)$/i,H=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),L=H(1),V=H(2),z=Symbol.for("lit-noChange"),q=Symbol.for("lit-nothing"),W=new WeakMap,B=(t,e,i)=>{var n,r;const o=null!==(n=null==i?void 0:i.renderBefore)&&void 0!==n?n:e;let a=o._$litPart$;if(void 0===a){const t=null!==(r=null==i?void 0:i.renderBefore)&&void 0!==r?r:null;o._$litPart$=a=new Q(e.insertBefore(N(),t),t,void 0,null!=i?i:{})}return a._$AI(t),a},K=k.createTreeWalker(k,129,null,!1),Y=(t,e)=>{const i=t.length-1,n=[];let r,o=2===e?"":"",a=x;for(let e=0;e"===l[0]?(a=null!=r?r:x,u=-1):void 0===l[1]?u=-2:(u=a.lastIndex-l[2].length,s=l[1],a=void 0===l[3]?P:'"'===l[3]?F:U):a===F||a===U?a=P:a===I||a===M?a=x:(a=P,r=void 0);const d=a===P&&t[e+1].startsWith("/>")?" ":"";o+=a===x?i+T:u>=0?(n.push(s),i.slice(0,u)+"$lit$"+i.slice(u)+E+d):i+E+(-2===u?(n.push(void 0),e):d)}const s=o+(t[i]||"")+(2===e?"":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return[void 0!==S?S.createHTML(s):s,n]};class G{constructor({strings:t,_$litType$:e},i){let n;this.parts=[];let r=0,o=0;const a=t.length-1,s=this.parts,[l,u]=Y(t,e);if(this.el=G.createElement(l,i),K.currentNode=this.el.content,2===e){const t=this.el.content,e=t.firstChild;e.remove(),t.append(...e.childNodes)}for(;null!==(n=K.nextNode())&&s.length0){n.textContent=A?A.emptyScript:"";for(let i=0;i2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=q}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,i,n){const r=this.strings;let o=!1;if(void 0===r)t=J(this,t,e,0),o=!C(t)||t!==this._$AH&&t!==z,o&&(this._$AH=t);else{const n=t;let a,s;for(t=r[0],a=0;a{t._$AK(e,i)},_$AL:t=>t._$AL};(null!==(lt=globalThis.litElementVersions)&&void 0!==lt?lt:globalThis.litElementVersions=[]).push("3.2.2")},147:t=>{t.exports=JSON.parse('{"name":"room-card","version":"1.06.30","description":"Show entities in Home Assistant\'s Lovelace UI","keywords":["home-assistant","homeassistant","lovelace","custom-cards","multiple","entity","row"],"module":"room-card.js","license":"MIT","dependencies":{"babel-jest":"^29.0.3","custom-card-helpers":"^1.8.0","jest-environment-jsdom":"^29.0.3","jest-ts-auto-mock":"^2.1.0","lit":"^2.0.2","ts-auto-mock":"^3.6.2","ttypescript":"^1.5.13","yarn":"^1.22.18"},"devDependencies":{"@babel/core":"^7.19.1","@babel/plugin-transform-runtime":"^7.19.1","@babel/preset-env":"^7.19.1","@types/jest":"^29.0.3","@typescript-eslint/eslint-plugin":"^5.38.0","@typescript-eslint/parser":"^5.38.0","babel-loader":"^8.2.3","compression-webpack-plugin":"^10.0.0","eslint":"^8.24.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","jest":"^29.0.3","prettier":"^2.5.1","ts-jest":"^29.0.2","ts-loader":"^9.4.1","typescript":"^4.8.3","webpack":"^5.65.0","webpack-cli":"^4.9.1"},"scripts":{"lint":"eslint src/**/*.ts","dev":"webpack -c webpack.config.js","build":"yarn lint && webpack -c webpack.config.js","test":"jest","coverage":"jest --coverage","workflow":"jest --coverage --json --outputFile=/home/runner/work/room-card/room-card/jest.results.json"}}')}},e={};function i(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,i),o.exports}i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i(607)})(); \ No newline at end of file diff --git a/room-card.js.gz b/room-card.js.gz index acfd97370781594272930eae9d434aef7e4652d7..a2c0d77a99d8f78c7dec8428f42b2c36d6e86b37 100644 GIT binary patch delta 18474 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 delta 18364 zcmV(mK=Z%Tm;v^e0e>Hh2mk;80006C&3*q`+(xqK|K}+NeJqxOW(?SI5{>0K1moDd zHh2wAHcQw+%ru~&ktR|Pn1J5tKEr*oTUGsA(qNqAobT?JHKYDnU0q#WRb5^E_^XxP ztD@{>>4fDK>!tZwQO**c7I|-;u>_JT#(HH@%=(k0oDP1i1|)Ca?CkCx><;)R-uvqD zfBAk8zqs`lSd^FPgnPrQr0ntdcJq;>Dhz*zD(C(7-tJpU`=^oGPXS+(DglH7zq^yL z0U!{W1F>8s*#fG)N;A$%NyesRD6{;3$iu9g22 zW0zBj-poqZu%609L1~oqvrN*!>{$tRgP-j51`sbX?;1$ybu#A?@GBmkGyb-?Vp$^R z?U08TNj}Zkwjq#fH*KfL&r&h#rz&R$c+4dwtzuGT)!wEAQE9&vB)S8&&e@cI@((Eg zWwAK5o7v@IT1g}m^-=0iVV+#2=j!u@hq<*N4~w_OB*{eH_hAX6;^~!{!*^i`1S)#{ zM_6I2nmTuQ$e~<`g+DMPTt(UMLtdPpXZGS6L*Yf4@8|nxXOx^Wf#m&WhA4l|>wx%X z9+qJdCh-}p6GV_7+?EV$^pbdg|MXW_l!K(I()0Z8P8Z?9EzF#c)q&Z@n_(U&<@o~n zL^a4*e$Fq3>GOP;uCE8GUS;=n(fVm8q zcNwg$`TVFnjv4$D3?+QL4wC`#DxY7ZRj8W|>adD$E26aM>DS>b&4FQm;IE5fQAS%^ zAyVhpb(on^11Hb}U%&$t&a;79Vy|R{K?a1hNX}u?xt0sT z%ZmKm3unX^FXH!v3sU@rbzVDxtjo_RMs zXAOAH{wO?7hYFku`7d>Uf7RXnO{4ppKia)B87^+H`}6MZ$BpjCe?|A$-)VP$*Ny(J z|C-r{9*2Gr1B3DN__huLT{8C6FE19A2_0`i2W)dTob<1=7DvA6Zq ztNjwjThe%m53f4NOwRye$oKrspa5)P7+Su=wT{Rlw!3+dYo`#yIx>zZ-|#5|<9_uzO&a zje%YMZ*YAvHmmSwCS|W1_MHaoJAV}RF9hdhH#omG!1?u0f%DhR{HJbk-!#B|^ZyCB z?;LQ$G|YkX5jO*VlY_LF$159xua=FXRzU^@S&UEvx4-s(gCNvdDP*O{oP~@WCw}7J zf>;@Z>D?V9hh^-q^Zq&u9&fTILtxkM5`HmAPAk6*p63HGfIwjA7IjP(Q3(?Fp-i~Q zQw|~qmGf%qrijbO&o-RK3T#ZEXK7=FYD|=qjb+f-lV=-la~U>=xLn#;rW(UivZ)0$ z_3g8#jkXql*cL3=rA;kVQ&32@G>O$t0}~0Nto~vFh@6uFsD7^&S%#XYAM~g0x9(ju zuK}3_!HbQhP|Oq*$b2Li7xCuSSF?5MkJNJ2nfzGR)5X0#UFdnhR%BOmn$xG>0`ivC zo2z=LE_ihfbeigIHy_=%;yzgVWXGzLOD*z}1usy4&a#$sIUqp7a)6x&5w&OAl6+>h zRPh^7Vm&PC31~$<`mO9UN`O>dm?a_l3P8|Pqv^fJ@hA-v3H2)<<(7nl;Bg9MTn$R4 z^Mag~rQ8RO5e#O@+!s&=!O_O?`m>F%*wN4r#%c4C2_nRUH4HKt>eHf^+!k_R zrV(R*J}zTJkTBeek0-(oU=!a46{f`gQpX1FT zd*0HX8EDP~cWP|JIzdj2TGbXUQVtB5UY-@*AfJm??07S~d{1&?ErumT?+Le)tiYu5OjqrLMjL zlBK{=66+SqNt{cb=q&NZ$%}dak${PWIcZ}_x-`j35Z1${s%!0bE!w(%ogr|~#Dv*$i zGf*R-A7yABIbVJdJ+)ZLYl}6)qFTKc^%c~(N9>I(juR8~pSrDdU^r0+;ip_*GD z<$rXG%?$~2D+sOao_|FjbC5WHH#eYC@YwyX!=KwCt6-(0?}2$qwH+CO*a(3T_L9BW z{xEw@kNX-fPoUc@F#r#<>rfIkGX(6;4Di~VEFx=bD|SB;0+>@^+$cc=yu4{iDUMW8 zhCh&iqooAXL_JB6EDRp;yrsz4fR$xIhk4yiN;}5#cIEIZvT0ZxX2hd^fB0yy$HAv+ z@G0)}>1;83RVIYPm#BkOXd97MkzgH|+M+C3KDohd%x|?o93Pfn&s$Fis%YeSfa@O` zG$ZyR*y%cZjkaniL>r$3e?@~IDDeZcR~W27hPpz#5tuc$WKdE#a=G7&{w6S7DRsd& z2v|}uiGc39`-t;!3F6{^+{j7c-@Bv=qHcjZq_j~E1W4?I#=XcdK|RBrAufTPF7o6m zNwefMBPma*GC=4a)lu@sz*{c~aX$g&kVOpzb6}<=%^968;&;HPzCu zp7K!7DEkaotQAoMcdPA2frLI+m#F7+g@~qvu=JZR2_?TkMq!?5Up~j|vT?1)5w~VoUD5p56X(eCx4mUQUjSWvVV%GuPO3+BAN34XFJ<~=8 zJn+rIzG8!F7yuaRV(@o8$Hr?#>baqQouat$#bTCD)3cN|q_|jH^9r%Xo0Lc8_|2#@ zb=~Xz4S=7(*2-l|z$5fVM_*z+SZO1%1f!)q0QW^aPM8CK!^n}76ziUt#X)09+O?nz z@|?T7rIp9BKv{?Xj=kA5jZTZ=66EVkFZ^c=`m;Fp_QHR~N8Tg@*@mMmGlBGy{^E)C zqD(+VKy`qw{9?dzDNU ziy8d51^~)`@dY|oVEQ#X&C>kRI}SMq2$L)+XJZua%OV@klbmHx2#pQGr3XO<6{bw^ zhcy~!6l!p136?(xA!!bOK_P|goAG&>%rEq4G*5#OrRNv-jZBWHT41X}W4nK3AcVoM zsR6h=Ls+1Lf6`RUY(U0Qn3^GejtMY(x|41TA zzyRcvG5S{c5VEy}NozWegRtPS_kaJ-ju$5M;}xiZ@Po=~Mg1ye*PyKNj;%V!V>-~u z(^!c-w{?_CRUbhluNic>I$fN?4qZiNyBWwN(45rIaFXN`Mtgbmy%-8`C6gGCw-4gP zZbzkmVMFS7tu1CHjDv%K5T~F4PE!#30UrXaG6-SiEo@|>g`{7x5?3)GYnooAQ$az( z9m$$lB<6}xEa(8RIpOgwD1Ieu!@?s2@T$>m(j@IiW)Tq4M~e1gMonRwi%3nMGtH)u zO`nmVg}$Ozn^;wzB3(ndDo0Q;QIBaJ$uE+BOUqtakyvMawa!2WDR5k>9uae-mV{V@ zkzR}y1984Yqc{Hbgm+7%n2sP^)0SAN=G$Jd7A9TBphl$`MIBCgQ{Z;Bvz1L@??}6K zIoNkE7HOYU5OPWM!dn!;Baf22kp4tG6ze=t~)%+e=NfdEy3 z4=_P17rwVw^f09d{2|SeD{*Dq6GgE_*tJXCX3 z@uUY&)h@JM?SdciNOI?a*%HYjVGY2gM1*VZ) zHq#Vl;Zy$2F!x(GZ)1TOn!COQ!(xif#?%eLUC7fhTCdNC^;4{(hZYvDWNQS>jFr zF2EF;=~IrVO4EyTVi&aMJVg!+QqAwpLbP09rRUSm`TV_4K-G<73nd^dUMD3;v>$WS zu6n%a!PYNVT;figBeNRY0$v`$|gt-SKK-30$E8=GHCvE%K=5ZI=tb_ z-I9!4l#b-~J1E&44MTM8fKD4i4>XS;Qu*^mb$-C zXG7l?h+pGbOd-t%e`K>8d5$CixKh(u%J~zkH;>biT(_Q7Fo&n023hQG7VuE&7;n^(CM9@8`WPQB&hO+qznlM1*lb7Ixe@Vl957;L*o70i++S<~r zK?TUSM0Wdldr`5Hjyv$jAf1Ag4&YpY7KE$-nM)ALX8lG7DB8dp+%8$~rdagw$bo)b z!we(u@YeHz7}UBq0!1&7Q?63w%$xB>ekwIF^d1&s@t9=2U~Mf!M8YDes=leA=IYHf zQdLLlN8~n9e+M=tsY^LPOau8FAcFmxU#zX&aDO9gr91T(WrkJZkE|n=cce<+q&sz_ zr9wjr>t>9$F!ddTi1unRL0K2wENsfR?NE_20?=n*D^A$L8HkZE7oO6>bxBLV-2&Cx zA^Z~b-LO2`JPvhnl$R6u1g#zP)&_JoaCjXKq{3OBf1w%8i^Nm`z(Sh@c@}l1YrgDk zZ|F_wF4dSP#4hr+wRB*T#)4c%W!#a9o`~60*TN6Gy!8!h-)i2pAY6*9gaB5mgb?+_ z)i&Ir^eif*X`>6;q7&K{kVON?l{R!m1G)khXt9i66b*h+Eaw-+U&b#KgDAd~K@<*y zko=)of6gBYi$5&o6#nN}g=%F~7*_E)<`EVHu|cn`!8%YM!4jrYw3&)eT&0!qpoWRt z6ic{`Nnh61mocFSz|-bNMS~kjqgK($dcrDBklkeP2N=#m`0*7E-wB4E00>v?!uTKo zyw+E2z;@YL6=vZAnpC{&^N9H@6DyXrQd`>Me>S&Pi*{MypgYi2A^a_=+xS}@C=mgL z0rJuG<*5)|qmdY0A(tL5R@k{3wlp0xvMdtGdrI_JA!$L%C5?K=1PB&iR-o20tA=y; z;bTLn_8%@Y#NF7h_&T|#M<&p#M*M1SnJBOEG%t#HYc}LbX*M& zdEBt8@}=IU4VxW#2k^M_KaRH2>LLO5^r0wtfS>oa)<>1n3xdzrOXl-FTJ%7@1ueZ; z@ZLNrQ3>vonWbMcP+<{O&BpHTy5UG>TZ7(xO(PMJNX;tp7D= zi?C^0iFI-c*??xPM5n^SqLb~fhE+?ZqGx`2ZdpU_Z$p<>OE8-@E83Wp zw)VWZ29#YIyA|1f(ktAj8ntmVgL%vuzb?wlKH?|p$WSJ{!ZNAJ7BI~>;x7Fk|oeb_aL2E0i8&K51Ce^EXfBhM|!O``6} z`m6w+hpJhlidgan(e$nB&`C(EMy5I`7pnPUGFbpeo80J0VX$N;t?q~cf2&1g4qj9% z0B^@Ks(xD}rN%dXG!`NN(pixgbI%-zshLG*=VsB_qDm+Iyx`12hDnrF#YsSmVw1_G zp?LY#UnqO&ReD+`U6`Dd#k@Z+N?s-@_tYsI7FPWUVY@X0pEF7~EUf958^=Lu7LFjc zCMNbAWh7tG_n7oS#Ai6Ie_{-3s~WX9gv~R$*b^Hym{HVXS8|Ro7M!zIMTsSuYd7KM zDE+iIrVfq;yZ2+i|-?1$AS}=H#eHlBBvU22;}71&tiA1oJ2^p~Ec7nV0(b z=#t}&Ep*6LI~3~GYC~1->B^i4<%COps@w;h?MyjAOL=;8<16b*e?j_qbHm&id;z%| zjjb_%9=l2MxG^G?LMM9bLbNaA&t3PBy^$}Obj(I?GGPmDab!faJXQk9v~gJ5X@=cdVTC(5S0^1pA+tKggOZ>NM$8xrDsgYrXo(SN zV~>yakSL&6L8nt6IGQFnA zM|A1#G^5BxCS~G&f+RR)<(vGh5K)12(qYOoroY~S@ZKo!Blc=qfRXEuMoATj=tFU> z)8Kan9|A+-4xROBqJ8NK!fEC}g+?;zMGi7G%pry4(rw5xf8t{gFVL}p6N?PLksS+X zDtYZ-h;49KSgF7DWCQPorv5iye}~Fu>VN&sw?T*wJl}pxwvE)^{O+3|%rFIiEa1np zttUY^!CD(n@n$n*J$*(tSgS9NVd>7)4Ke{Epl5B(Nx4~D(|R;&#%IOYl(ce6z@(Fa zPDxe3FCc?1f8XqqGnn^Y#MKkD)Kg6ja3wZT0{||+5EnXFrJ{I2k?ws;>zbrzpk8}% zoRuleSavg(#W$M$2EJ9%tepta5{Qd-p)~l>{PkG^O&HMKfeqcXt}WrBVP((G@nF3^1zRp(^d?p@Kv=A>opBTdY*fdA$V0 z*zifUe{7YEr1kU0cn89l$oCmk%3vO-Sbo_-cHO>KLl>~L zJ=Wb_oi>7y@TZuDfIi8Hw&ntAu%vwnm{A{^X#myf5T2rui%CGpwXw*M{~yuMy+{6VD?_R zaf?@hPuxpitGA}OoDNuJIOAzdjh{2Fu!+1}n>p<%W+d@M;?Lb3>*Q)(LJ?7vy3J~R zIG(YfwN26rHI*RH1Uyg5ioHSCd0hn^ApJh@T@>yJ`f^|gVhnura2HpP!`seFc~KsA zf8Q$1>p*z53Yn97f0Y#pNAVLlWm>&L2NVXMz_2}|8H=lP0*sL_BO@p&bnEM{zXI74 z@#_7}!}~QI!=Emso)%zzI*1ifP^!b?rOXRVvHr~IGR4pfQEH|RWWCEYE8Iez$fBSP z7Q&WXw+zsS9K8Y`&}4t>D>DaBab8rZ7QDr-tCA(WqcR|>Z&eP|UT^|?PrZ7Re;syz zH8O`l9CC5Bt3aPC(CKt=kxtp0GbkU3%g9>(&juHKmO+1|=v+YAAt(pF5e%urAb{!b zDk&j?Jt2N!q`(pGoRRGA`82)ik%}67s!?=lU%l0QuOy-<1yOh}02NCCyiu|Nfb{$^ zH2vbFQNTiyCFd$aAkk0Z$ZFB}%R_~Kp~9{Z6D_5sTS~;(div~~ItQ7Z>NZrMrPW)9 z_@b3Wv|_1MOIxtc_o*)JH&wU@Cvr5in1WVU@yaG>3-WN+cHvjqsLFi}927%qqNu_K zuv_4HPWy-sRmbS% zHo>9{u9j^BGzo+d-Ihb)a^o~y29IP7wF8RHtZwx!^c6=R11Y(wp|u%|1_DNGYz?e8~6s-tq6%Hjq1AP~X zx*;X<8@SP5usFyKfd&Yx;`!rd%@-#_(^+%oKS$6F3*Fk<(PHp+``~cA^Ll&lhuxQ< z{QUU-<@Vw3%VXQoz(`XagHw^Z`)E*f){7Vpj>b(^*2fr!uiGZ)78@elMq&ql9E+Oi z;uK`+_A*K4DJL07CkvE1@CuZ2Er2cthi~5P9vp7Jdp~})|KZ*C;em|^sjw(zgf$f< zj(4W4P<`6c+)Hyj;-8?I;w8n5SP}AQZlb3Jnxo*sIzm_Bfni_XPXTe zu`PZ+2vc1!0RK`-`~B=L?68V|Hce5@TW)QEtjTUr8Sm5F_vB92Ui$a%XojJ$-foz9 zG{SVF91BZ@$}TKv&vw;+B-lWH>J~Ru zZ^^@YOH_8^^wyS6snbbp?Vu)8wMWUVs`toHgvZs}$;j&w&M3SN?HnlHP!iH%g6<2eW=ato&bBA?`txy-;Cb&3$VmqzAc>NvC?~ zDz?yEHnFN#jF#aDht8RQj&`~R%`G794NuARQy6H6O_i@$#6!zznbjdECM#s(Zyp?d zVXJMAXxaEi^Ni{X8@7F@vB?dDw+_F3`s`00n^~k3Go!%k-xzdIepqJ7_PG%r4h`Go z=$wRDl@+*ZZH??+4MV5J7ec3ZWgw-K?iHpjep1W;@aCTDJ8i8;i1yq}t+6-t=k9;;z9-EsJ})%;KKjV{uO%i+gHY z+}mSb)+m|a^JOOZRG8qEu}WaZV%>5(eX&8tZbMDZ6#kJ3EUgLr+$>mAXj!PlqXI7W zyNJOU;+A58ht`~bj8Yqw+@7CQpKmu&)|NmVlv!JXbIK=7GVT(igACh;`b$yEEE|=i z`Qp#fd?{(Zh(&OW<)=)g#(IGdC3Mq#c@NE(4$YT_=8L%VG}dYCep)ZXqD||TP-IP9 z9X{LmChCm)KoJ|(*6`oK7^8X?=z3*GLw4>80qUF4kbwh#70;iHSS05pALYtu4QhrJ z@AxGXciAymB*yomBR&=9L?5VrU}xy-ySCO5bXMjK6qrF0H-VINmZ3^!Oa&tiMhOO_u6W$G*Prng$@d`0|B={$PoAf^H z@4xHgJ9Rzy08wy&(JAnDzzIgZ%8D}TO>UBW*gH)om*?W4tKMk_A45P}&imJlVkY!X zVQ(LLy3#Z$FHZqvw<1Lr=&Tro%8W<{p}1vMaXaaM?(XQgqolY8AY=OIhX=h7ZE}(K z0TOy50WGm9yN*DbnMy*V`&kDd`}JmvjHmNVONL^3hds0KdWpPgU7;&b(!*#MP#)XH zgxAH4^|qDM{G+O;-azYpeB;%^q&$g92<@>?9Hhbu*8ba+%UCXgwUi5TVh?Vs1<-;& z7!0g`;3>2O9edw9}D56B6c01;P;gq(wJj?B09i`E1z{i2?n5>X2wLmj12ivSf& zM&8NWsA+(cD{%5Z15P(5_^FHL&|&d=?4XSWXs}R19D;!f6;({ zLMf|6Oi3*$d)dQGMoH9O*b1V|8KLkfvjEE!V3`Y;2xW#%Np?iAAv|_-Vs*hvgfXO( z-Z`FnzQ z{0w4m%hlAAhNiAC#A9pu+PHD-J1xt9T=TR>*%J_o{sl`g>R@+iVb>#wEaRADZvu?a zVRaf$^fRcJw%U0-jEkPao-Kz)9vih7ihXjNvu6iAWXa9( zrX@z@qAz66U(%qjI6TmQN7K&9*B5}IKA}RrO2R?B%oC8*hq-@5P8M@1F9v>a98Sz5A|O4|JyZD_QV@Q=g1pVDYfNHQ$B8!= z_?Cc$ZIHo9oNULFI{f;ZZ~vSzr^9a~W*xq7ZR-vB@1k71^;F8mPw)rI#ZNZB6LK*+ z1P?o#BO{NtC)!U?m_+9>iY2grk_j{m7skuPvhyxR3#Cv~vkLQ)90C(FDeFPw@2g%Y&z% z5F_m92mPDUhXhnlKOa!NhLuLhpT@SYvg13ME(^6j4IK0JA|OKmAGS?@RCcWOv^)Md zH^**iE5v!)72-T?##&EX!OGLFVCA$}-8Z9=UuQuOrQPAz|2%BeYiaemw8thk@ZyAu z#{TdDCIj;pwdqP&Q;?38ac0pGo}Ihl**no?JtbuYY|nJSc5Vl3Uvvg+Zy`jtd4gvx zB7pmeYIM;I;I2l{2;ts;8oS*pzb~eHeTdyshdQYHqO}h#mIQU5>Y(nECW)({?kA09 zt1{}|-%gyc?o%hM`?Mph`*gH~HAEh?%>^J>QMxlr0QGV3y^L;j|BO!%Ls5EPJoyt7 z5`Oh|TFZ#=jp5ssYRRcFo_u%Zu`V$|3*6R|NST@cz}{)zkb^CM(|%tCJ`Z+x_V-?H zfB1R)X7APh_{Z(HA9oKRz2#N_X|}(G`joy8@M&#OW2kvZ&B#s6%~md8Zld%2M`)_* zS3<(hK8~DJQ|~xzKPu%1i;8W}-p}wF#uq)p z+^p>43Pkk30#{;P#OfI=G2}z}G&Ur=GBaLDL>qOtRxwn$2v@uXaDBmJU}38-bT$7| zkFkYIM#asIp=A%V+3eyAUTJfxeaVw;PQ{16-{w|(@MCU`$tPW`Fq#;sg2Fkf3wx*# zSP!$c9|Y@vcu&m%^RIbaEeT6{U-GYiTy1%~_dKq4qI_78)&u?0nqw#Z%u8#a)^$C# zW;G$7TEklmg??&HU7InkK!Te!Z0Pqqxdwc9^Dp5g58%09%5NX|7Ww_Ga_h;)pV<~$ zcedOyreqU&zPT|v*+5_ElZX$yD%ltD)oDDjz_YA>z?UrO4Qup2wG;n_iI1PrJ?&Qd z-=3LR2<*kiNZj!OIorQAhvp-1y68B5@1(mOzGf*m& zJc7(QX8!f;7gGMxhI`lkiQ_fL8o^G|l|fpz7e1DG_&C_MdB3}E3@ zlZVZw3OxvsWWd}2NQSzz83gb~jBC=H7pcjAa2vwg99C;|)?TH*v#7V(gxJ1LW>;xo z3UV80ye^Y@)Wd&=OGoNr|JOx@&n2iAhNE7_&bY~@;r3G?`>H)?iFm+xZwrP%z;;QAU_uOoG9Lg_`W(9U$;wtDeM#!2%PkGyI)kXF^^B0kdiOFjUedYLb^0P z{kBn9yW?9Gmay^@P=Gg{{<$r5mdsV;4!q;(UZz{>_1r9HKoG8*$_ZHn<`_0(%vu*# zTJrs8qK?R;_7MrYZrqVH=mYd!!hgp^8L=|Ba3`g95m{WB` zR4;wxY^1W39v>4(xYxNoGM$P-I zA5=b50L;|{WoidDhovAQnRW6X1(fR8Q-O=j0L6<%BdOfV&mfXNRD>?}+ak#@{0%qP z0M^!k;iq^oS@7|a0xML1AUQ3rSS#-ZW}ULExNc=VPt}~ut;%M$W_Ly3f;{e+G<|WZ zjV;`Z-aU;7@Q2n9>>)? zwlTRY;07jw_Neq49q1pSo$t{}C+C5mFd=`n?dpw}G91;^#zu(t2WQd5Bi#Zr)x2 z^iCOPD&r=fP{K4M^waM|-{c_IGhmP%S6SG|mn*RONUe|rDHD&J=ttx`obvWE&8JZs zG6ig2$BGrU^FnAZtu9ze&mt`C4Dc>G3$;Don=yV-h!^|@*scgDqptA)Pw+ir!x$XV z&Iv}hKq1V3^o*}-$n|GrTnzYxuK#r;fcDN(hVRuva&&MrJ1sIl2 z>P8PXeK(}pFaaew7jbw(*-vd=WVfej;!e4LO|-C*{zoTg8+lR31)a~$PGG}7y&wJr z_p_cg3N?o0I!SqtpcbA@I|aTp%$2b5#|iEs;3FtAxusr63ealUOx-1XefaL}K~|_6 zcXt0X)&I;aLb)!@jvtKVuE$$hKJLKHOp*p5$I;;iIiwy!^Uy0680@~?eYd-JINsZT zf4Lh3*1N`90K2UK=!k`tL`sy_a*U|l-D<|?&R6czTdpNt51aGWeKtBdB2fzkuj7-* zi$D$XDd`wrjV+otxVop#Qo-G+D+3vNUx42GppJ9!H6b7kZQx@P$zqqvVT- z_Dq?|NSy-dM2EL;*@Z@=`XdHH7*zm&Sh_`JpEHU|k&foRz;+qxWE<~68out}ExS$NRe{jK=R1wOsx)K$C3>P`RyaR|5Du|^9$cKLM zG0+43yp(_1(&{NA+iQx!DC`(@ zT{nkRH|Tu?{q{uT>;z-8pWxv?#VupWbl?Tz-Y+B`vQIpg7u0ynYJE9>k;df9YaC*Q z6+`V_LB-`Op=Pa_(*j!(+$1eWXu?AbQ_o`xvj%G*2u)?k5Ev+8;mPk{H_&fE!%phk z(8EGnTTAd_gt&WY&IOD+m40Bus#n)45-=C;N0r}g1zh*k4KI8vae+D<>R`5c&A#R^ z;zt|D5k@eYE+)+PeHHG1hpnq{Br~ z{YTKqqn>8;GtfvJWGfKgD#LMS`a2{#Gd4w%tn?PfEKTClzBw3Ht(ki6q0C;jq zH~HyFb(YgZsPp6;!~RbeC7z6WsAQ$VIzP(SH;+LI1l$)>)W|Vvne2ho++GyUWX%z?jH_O3@$+s z|Ggmw-H-$5kqH-n>1Tnbdu$z5F-bYF8AhuwrY$9eFddTcL#c3WH%s$WCwzWhd1#pFAPpd<8mL2?0qln&oEp*IwO_9 zdMQ#K22!B?9-TWuIc06*(ccgD_Xc8Vre}C0WtMn&Ru;2=M$ghLI$Q!ls#G0rLm)gm zBdtrwa{=w}`59=-o7*%dI4Pz)!luub4SZp|tD<~tj5h;!gp zEHL~aS1~dm?~1k{I#}QWRFD_(kyWk$ZkV9ZFMce4-%F4YB<*1LF$Sh<3?*CwIQC2y z#uWyN(l)(iPG&?ZZ&WjwI4f?DZ-SquZR-MWSQkk0$L0X<9g&C7ZM=b+ZWE9TQb^G- zttstnnj|D?h81dqHIZml2nqKlXc(pQkSbw`fd!i~yDQOm!6psj z_RC#=-SdL5qB=5GjhLy_0$*cJJXK_B4iGno4jsU%+t5U9B0{}aINcX5%P7I0r5?5B z@c^}%XIR6P%Nm+c&vh01LZ+H)nFR!Y1fo-C5GxG!jTjA=6%f>jMUI;rAq#|H*D~=Q zrN?Houm-Q*Ot7&k(p1PB@|g)?`Wq9cN*S|%+z~x?*Yuh&3k%V9fOJ5|K-`J7>j)SJguQPCC zQae)Eh`pgL5i$Ztip~T0qAtUC-kpGkMa6ZVV_!v|a&b;VD$T68VjWNq8)iZR*)|Z; zGd^>AQ%4ujF&TL9;>C-Na5Ja{%5PhLIK6L=l+t<^JHR&>bbqPR%>*wF!YM-wr{dit z4~wPyK_gBRm0D$LYUI2-Z&@4cqxg^6K=A;hQ1AWLpiE`S$n`RsNHDu_AOqrrte&U| z+kyGPSZx|w$G+~+f!|1pEskXmTQO;8vG^E9wn6#LnQjrhYiPFUWI54U=445KdN?-? zSTHKZG_95+;jabsrPbBvVb!coio+T>DMKiZ^A8bI7+~8MStyCQ_TCm9NY*MsVAv|5 z49qR%aT9vhZ##PC;>1kI@Jr0WmMVoV8J5T&*m)?UiuX>2Mgli?%_O}c-!N6mK!!=P zRalI7*%0FETH;8(+d6b4VGApNq$rd0D`cG}Zgji&X+>%nbcjZMRIJ@#Fyc1CEzFjJf0f5^;Z~vdOlclkNNkFm#@LP$oV};}7%&)k zev9ZjrOser6u!H=a}kgU#9f%Kk*_yZaz;bx)1(+Z!68|9njHJ7%Gj}g82XOduFZ&d zWYcsCk(27O(xpPKt=THmSU3MGzI7u`$;8)fw*tCBQO>MWGi=4E+EVC%aiIW7TDUEV zR+9^ce!ohZXdQjahPz>}o7ElRAEpRzd8xd*@!bsQ)@WO~bT!m#qnJDUX>$)&T8<@C z?J66r2%(AEq`9J~=z)-b$<&T&1)BsNmPtywPP5FU{*rC`HyxllS&6n%}Gu;a*0`UnEa`=>Vq>9HE(aZT_$fEgQ-hQ0jJl?ji>h zYBBEHC9-wfq(dfu_wczv+ECzQBfsuQbL!B#><(ZGO4ULqxsr2#lhJfi`ha$AEl*nU z7Kt~hU~D##81&rM4FulSbPRqyJazQz@N~JNZ1SWYd2|d(EvYiTofT6SdGs!OEtk#} zkb-~PJkdL?gHUT9v$nzYM-gGTvW4B*XcjFkXtWb=bMSPq=_xDNsxtm=$E&XK_aNRL zZ7UtR0F42(`Yh#tec?5ED>BfONG59&V0AY>fnuwxx4sDQkU;Y@KUnv?KtAUAT~M!{ zg!{2K^4535!}#R+>g|60;v~G(X83Rqc?wjCUtB7m+G0i~c~Gx*=!ixdX7BFQ@$`yy zZNZ2QCN+E+J8F6OE4K5J_QbZB;WynokA%fxKnEYN7lY=1@+p4&+#f~$O22>i%j2W} zB>msF`~N-;?)+aKkB;Qm(SKh2QXPLK5?6!Z@phOO{Y46s_+n8MM!u{z!~=#02Cx8q@ov!^V(3Pls%M-I$Z`$x!*wV-_xA zXmA3>u*z`qTsb^r+;@7;>yu|cBw&w6N&Lo$^)lt1ow9X2@;?kXNZCGq1oY~KT3pW` zd+V4=>j2N<-v@TxC&v_@9ul$V_apCx=ywC!R4zC;o1bW$s;UAF(zYUhVUM7XovG;k z6%~U{t!ht>NAIIY-XoLiKOcWl8VPC;ZjRXc=CR|_|M&&^{r7N2hsAm<5Sy+aMvE8m z#>mgb)==S@rC`w;;Q}}|lItqQiWG^Ew7WhHq7?r4eI%8IuB&!g7DQ9y5L>MKXmbVj z`g{Z+tow?-9xDPP1+jI>EIVx4 zFf|x$J$234is)4U$Xy`m__2R982$G#DAR+lg2#$+4V^a=HbZ~1qDG~7F@YhQF$6?@ zZ{C0${E=C39)a|uzEb%5Z~X=G-@nwmlUCli4>?mea?m{Y!bPmFk}MZ9$GVPS_+-fZOPHC zufzC;R#hgd*0q0ps{PFW)}=TiIFR3wt?dV$jbf8nTe>g7z=+2Co5F@Hs%ty=Zpha+ z1K5w8w!SfKL4LfekyMxK>$Q8RtJbe`@^aa9E>UdDb0W#)tVHG%^DwQAbLQWrU6NZ* z#Dqy$(G0=Be^;(RLY&EBTgI{8K^(8{WZl;_k8*se2=adyl6@`W9SlpS^;6=4FGV1U zE4J!Bh+~Dsx0on~_*z(J9Lh`6Dh;yCzH_q^ZxNF!EQA*mLwKYH75N#7PYaZRsD(rI zBzI^H+cz&4_!Y1KG4{qA02QU8egxx>Gl>C^Modc?Ib`4jP+tc)6XI4R?3fw#%4)HL z{JZJOCl!D1EAxoR>h@l2zeNEFFO|m~{C+2$?qHvg9KWSWZ@(LuTq+D{AG?ZSdObJR z4B-dOvglR??nvv9b|k#nq`|?9Nlh=uWnh6ja4X*D@EK+~51GC{4CE@ZMF)2|OVL=Taq^B5z zfe?#6)0@qrK&UuL1@br)MU}4dOjjWaz)B@Y4{VVyZ3wuuTPE+w6bN{=SxEAs_+Xgj|h?8R=vPC~t&O$$q=L z)7P;)kC38|5ncnZzZnba2jeY{EeC9;@{np%!a^2?vZp`+q;LF<|uEUKS>#L1NA^@6ScKv-urQq}EC-yWR#u=nr} z=&RFQ*004C{4jSocPRyQ%k6z6eRfj0XGxmc)93xx@5W3-DQF4#aVWWW2~)GaKFpsp zV`?!lrs$uH>%rL(a}2;DO2;`K5I{+raoJ_{fiI4yaT5>8LiG>u8ndEVvu}eP4IfN2%2Y++waVnVe8;wn@Hcc&TI^rxRB+>_ph#vFD&I6 zr%iA30h^vY3{d+X-CDBuz1-dR@TCSB8)*yqEpFu?1L>cj5?VAUOeCpRKImFpMo}t- zPq3sQN#7v$Mi#`hKS)i`@AOtwdgAAQvH zNcVLd3-Fcrr0&zOPIG~PB>kh1Je80L@@U{}2`(6K;A}Z=6{hlK@L9Y;0BRB}D8FvX zTl(2!pIfgEI_sc$@%XpEQtpR;4F~k?*LX`aCgRIiNN~egNpmR6D7d!#jmdZ~h0^c` zCg4>b(Bmmh{)R=UNI4gBU0z2>v5arK8T7F9gVl-pkdDn!El zAHsiHC)(Ghe%DF%_2@c(Y89|fu(t+JtP|`7k545#nV98z`cQTvj_vdjJ^@_ zWg+KesZ*+TTba7)aN}&Mp}cXCUpbyGJw*gG`pn6VQ_HR&gsJ63;mD=x3CZCSpArWE zTf2^%zRE!;hNnBSQ1rd>lr=7`9rz9I@s*XRYv;F}j9wNkCnHCHR9x8z?srKQeRUW4 z1Kn)~=AlkG(Z9o*{U%6RvMYPnWdcT)qOHDYQN1{*tz4z(vp<)VjgWg%2&G>oe$NL_Q(pZd4mL z`fLdhT|6M;ql`y?_ZGJ}!jr+)U<(ACaP#Rm*fmCe{6yEu?Mrx%Zav&@Jm-CDPrlX- zshfk1XM?Rxe45BSZ0*UHtyT2G_9NB5G+wC=y-Rj;U6j+xi;lbtDBDj|S&TYX;0q<@ zJCjxM^$v;|MSx*^GWD3Y9l;FawH-s2h*xTjWbi9i!E@SwyuyrkZw_f7c!&&haGI!MhQJ}g z_OIFL95|NM$>s(?v_VhEV8gQFQ!A-2?zZ)z5zbS8)%Fv+ghZ5G;;C%5HFCSq7EYI# zU8kI!aWj_h$N>!!o!Nd0w1!Q}Q3-53`OE#!Ij0NQMxhuITaOx9TkCzM4j1F3;o{r?E5V1kL`tvU z*C{Z6grdAW!w8qHO!)b0RpjueSn&CRze+O}KSnO`7)TT(<;Pg}v0mubFKlTb?(A0s zY{aYUM;Kp(#kW@cEPV1qSntVn@@-6ULuloPI93A_|Jtts7Sbgy0B4#HgE4z45Tk zvKy|_>=RP7m6BredW&52HZ`7t!WnICO**BixDkiR`Em%`WmPa~PX?E+b%fDY .join('') : ''; -export const renderRows = (rows: RoomCardRow[], hass: HomeAssistant, element: LitElement) : HTMLTemplateResult => { +export const renderRows = (config: RoomCardConfig, rows: RoomCardRow[], hass: HomeAssistant, element: LitElement) : HTMLTemplateResult => { const filteredRows = rows.filter(row => { return !hideIfRow(row, hass); }); return html`${filteredRows.map((row) => { - return renderEntitiesRow(row.entities, hass, element); + return renderEntitiesRow(config, row.entities, hass, element); })}`; } -export const renderEntitiesRow = (entities: RoomCardEntity[], hass: HomeAssistant, element: LitElement, classes?: string) : HTMLTemplateResult => { +export const renderEntitiesRow = (config: RoomCardConfig, entities: RoomCardEntity[], hass: HomeAssistant, element: LitElement, classes?: string) : HTMLTemplateResult => { if(entities === undefined) { return null; - } + } - return html`
${entities.map((entity) => renderEntity(entity, hass, element))}
`; + return html`
${entities.map((entity) => renderEntity(entity, hass, element))}
`; } export const renderEntity = (entity: RoomCardEntity, hass: HomeAssistant, element: LitElement) : HTMLTemplateResult => { diff --git a/src/index.ts b/src/index.ts index 4d499a9..eef1650 100644 --- a/src/index.ts +++ b/src/index.ts @@ -86,8 +86,8 @@ export default class RoomCard extends LitElement { ${this.rows !== undefined && this.rows.length > 0 ? - renderRows(this.rows, this._hass, this) : - renderEntitiesRow(this.entities, this._hass, this)} + renderRows(this.config, this.rows, this._hass, this) : + renderEntitiesRow(this.config, this.entities, this._hass, this)} ${this._refCards} `; diff --git a/src/styles.ts b/src/styles.ts index 81dbad4..fc592a4 100644 --- a/src/styles.ts +++ b/src/styles.ts @@ -22,7 +22,6 @@ export const style = css` flex-direction: row; flex-wrap: wrap; display: inline-flex; - justify-content: left; align-items: center; padding: 0 20px 10px 20px; } @@ -79,4 +78,13 @@ export const style = css` .clickable { cursor: pointer; } + .content-left { + justify-content: left; + } + .content-center { + justify-content: center; + } + .content-right { + justify-content: right; + } `; diff --git a/src/types/room-card-types.ts b/src/types/room-card-types.ts index f07ff63..86790ab 100644 --- a/src/types/room-card-types.ts +++ b/src/types/room-card-types.ts @@ -42,7 +42,14 @@ export interface RoomCardConfig extends LovelaceCardConfig { title?: string; name?: string; styles?: EntityStyles; - templates?: RoomCardTemplateContainer[] + templates?: RoomCardTemplateContainer[]; + content_alignment?: RoomCardAlignment +} + +export enum RoomCardAlignment { + Left = 'left', + Center = 'center', + Right = 'right' } export interface RoomCardRow { diff --git a/src/util.ts b/src/util.ts index a100b4c..17443da 100644 --- a/src/util.ts +++ b/src/util.ts @@ -105,4 +105,8 @@ export const evalTemplate = (hass: HomeAssistant | undefined, state: HassEntity, e.name = 'RoomCardJSTemplateError'; throw e; } - } \ No newline at end of file + } + +export const renderClasses = (config: RoomCardConfig, classes?: string): string => { + return `entities-row ${config.content_alignment ? `content-${config.content_alignment}` : 'content-left'}${classes !== undefined ? ` ${classes}` : '' }`; +} \ No newline at end of file diff --git a/tests/entity/renderEntitiesRow.test.ts b/tests/entity/renderEntitiesRow.test.ts index 63b5e12..1b628d0 100644 --- a/tests/entity/renderEntitiesRow.test.ts +++ b/tests/entity/renderEntitiesRow.test.ts @@ -2,21 +2,23 @@ import { HomeAssistant } from 'custom-card-helpers'; import { createMock } from 'ts-auto-mock'; import { LitElement } from 'lit'; import { renderEntitiesRow } from '../../src/entity'; -import { HomeAssistantEntity, RoomCardEntity } from '../../src/types/room-card-types'; +import { HomeAssistantEntity, RoomCardConfig, RoomCardEntity } from '../../src/types/room-card-types'; import { getRenderString } from '../utils'; describe('Testing entity file function renderEntitiesRow', () => { const hass = createMock(); const stateObj = createMock(); + const config = createMock(); + test('Passing empty entities should return entities-row withouth children', () => { const entities: RoomCardEntity[] = []; const element: LitElement = createMock(); - const result = renderEntitiesRow(entities, hass, element); + const result = renderEntitiesRow(config, entities, hass, element); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
'); + expect(htmlResult).toMatch('
'); }), test('Passing entities should return entities-row with one child element', () => { @@ -30,10 +32,10 @@ describe('Testing entity file function renderEntitiesRow', () => { }]; const element: LitElement = createMock(); - const result = renderEntitiesRow(entities, hass, element); + const result = renderEntitiesRow(config, entities, hass, element); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
Test Entity
'); + expect(htmlResult).toMatch('
Test Entity
'); }), test('Passing entities and classes should return entities-row with one child element', () => { @@ -47,9 +49,9 @@ describe('Testing entity file function renderEntitiesRow', () => { }]; const element: LitElement = createMock(); - const result = renderEntitiesRow(entities, hass, element, 'test-class'); + const result = renderEntitiesRow(config, entities, hass, element, 'test-class'); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
Test Entity
'); + expect(htmlResult).toMatch('
Test Entity
'); }) }) \ No newline at end of file diff --git a/tests/index.test.ts b/tests/index.test.ts index f811a12..39fe3f1 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -43,7 +43,7 @@ describe('Testing index file class RoomCard', () => { const result = roomcard.render(); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
test_entity2
'); + expect(htmlResult).toMatch('
test_entity2
'); }), test('Calling setconfig should set config', () => { @@ -137,7 +137,7 @@ describe('Testing index file class RoomCard', () => { const result = roomcard.render(); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
on
'); + expect(htmlResult).toMatch('
on
'); }), test('Calling render without entities, info_entities and rows but with styles should return expected html', () => { @@ -156,7 +156,7 @@ describe('Testing index file class RoomCard', () => { const result = roomcard.render(); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
on
'); + expect(htmlResult).toMatch('
on
'); }), test('Calling render without only entities should return expected html', () => { @@ -174,7 +174,7 @@ describe('Testing index file class RoomCard', () => { const result = roomcard.render(); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
test_entity2
'); + expect(htmlResult).toMatch('
test_entity2
'); }), test('Calling render with only entities and title should return expected html', () => { @@ -193,7 +193,7 @@ describe('Testing index file class RoomCard', () => { const result = roomcard.render(); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
Test title
test_entity2
'); + expect(htmlResult).toMatch('
Test title
test_entity2
'); }), test('Calling render with only info_entities and title should return expected html', () => { @@ -212,7 +212,7 @@ describe('Testing index file class RoomCard', () => { const result = roomcard.render(); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
Test title
on
'); + expect(htmlResult).toMatch('
Test title
on
'); }), test('Calling render with only rows and title should return expected html', () => { @@ -236,7 +236,7 @@ describe('Testing index file class RoomCard', () => { const result = roomcard.render(); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
Test title
test_entity2
test_entity3
'); + expect(htmlResult).toMatch('
Test title
test_entity2
test_entity3
'); }), test('Calling render with only rows without entities and title should return expected html', () => { @@ -304,7 +304,7 @@ describe('Testing index file class RoomCard', () => { const result = roomcard.render(); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
Test title
on
on
test_entity2
test_entity3
'); + expect(htmlResult).toMatch('
Test title
on
on
test_entity2
test_entity3
'); }), test('Calling render with entities, info_entities and rows title, rows should override and should return expected html', () => { @@ -332,7 +332,7 @@ describe('Testing index file class RoomCard', () => { const result = roomcard.render(); const htmlResult = getRenderString(result); - expect(htmlResult).toMatch('
Test title
on
on
row_test_entity2
row_test_entity3
'); + expect(htmlResult).toMatch('
Test title
on
on
row_test_entity2
row_test_entity3
'); }) }) diff --git a/tests/util/renderClasses.test.ts b/tests/util/renderClasses.test.ts new file mode 100644 index 0000000..1a6aed7 --- /dev/null +++ b/tests/util/renderClasses.test.ts @@ -0,0 +1,19 @@ +import { RoomCardAlignment, RoomCardConfig } from "../../src/types/room-card-types"; +import { renderClasses } from "../../src/util"; + +describe('Testing util file function renderClasses', () => { + test.each` + content_alignment | expected + ${RoomCardAlignment.Left} ${'entities-row content-left'} + ${RoomCardAlignment.Center} ${'entities-row content-center'} + ${RoomCardAlignment.Right} ${'entities-row content-right'} + ${undefined} ${'entities-row content-left'} + `('Passing content_alignment return expected classes', ({ content_alignment, expected }) => { + const config: RoomCardConfig = { + entityIds: [], + type: "", + content_alignment: content_alignment + } + expect(renderClasses(config)).toBe(expected); + }) +}); \ No newline at end of file