From 56acc99ca522b16c5fa24f9cfc26af63df34b612 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 24 Jan 2022 20:31:20 +0000
Subject: [PATCH 001/248] docs(README): update contributors
---
README.md | 283 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 283 insertions(+)
diff --git a/README.md b/README.md
index cf43dd181..3a6c8e768 100644
--- a/README.md
+++ b/README.md
@@ -76,6 +76,289 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
### Contributors
+
Date: Wed, 26 Jan 2022 11:16:27 +0100
Subject: [PATCH 002/248] Init version
---
.../card_templates/cards/card_thermostat.yaml | 411 ++++++++++++++++--
1 file changed, 380 insertions(+), 31 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
index 8184c9ec6..b09711c9d 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
@@ -2,42 +2,391 @@
### Card Thermostat ###
card_thermostat:
template:
- - "icon_info_bg"
- "ulm_language_variables"
- hold_action:
- action: "more-info"
- label: >-
- [[[
- if (entity.state =='off'){
- var etat = variables.ulm_off ;
- }else if (entity.state == 'heat'){
- var etat = variables.ulm_heat ;
- }else if (entity.state == 'cool'){
- var etat = variables.ulm_cool ;
- }else{
- var etat = variables.ulm_idle;
- }
- if(entity.attributes.temperature){
- return (entity.attributes.temperature ) + '°' + ' • ' + etat ;
- }else{
- return etat ;
- }
- ]]]
- icon: "mdi:thermometer"
+ variables:
+ ulm_card_thermostat_name: "[[[ return entity.attributes.friendly_name ]]]"
+ ulm_card_thermostat_icon: "[[[ return 'mdi:thermometer' ]]]"
+ ulm_card_thermostat_enable_collapse: false
+ ulm_card_thermostat_enable_controls: false
+ ulm_card_thermostat_enable_hvac_modes: false
+ ulm_card_thermostat_enable_background_color: false
+ # ulm_card_thermostat_enable_popup: false
+ show_icon: false
+ show_name: false
+ show_label: false
+ # hold_action:
+ # action: >
+ # [[[
+ # if (variables.ulm_card_thermostat_enable_popup){
+ # return 'fire-dom-event'
+ # }
+ # else{
+ # return 'more-info'
+ # }
+ # ]]]
+ # browser_mod:
+ # command: "popup"
+ # large: true
+ # hide_header: true
+ # card:
+ # type: "custom:button-card"
+ # template: "popup_light_brightness"
+ # variables:
+ # ulm_popup_light_entity: "[[[ return entity.entity_id ]]]"
state:
- operator: "template"
value: >
[[[
- return entity.state == 'heat'
+ return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
]]]
styles:
- icon:
- - color: "rgba(var(--color-red),1)"
- img_cell:
- - background-color: "rgba(var(--color-red),0.2)"
card:
- - background-color: "rgba(var(--color-background-red),var(--opacity-bg))"
- name:
- - color: "rgba(var(--color-red-text),1)"
- label:
- - color: "rgba(var(--color-red-text),1)"
+ - background-color: "rgba(var(--color-yellow),1)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-blue),1)"
+ - operator: "template"
+ value: >
+ [[[
+ return entity.state != 'off'
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-background-yellow),var(--opacity-bg))"
+ styles:
+ grid:
+ - grid-template-areas: >
+ [[[
+ var areas = [];
+ areas.push("item1");
+ if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || variables.ulm_card_thermostat_enable_controls) {
+ areas.push("item2");
+ }
+ if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || variables.ulm_card_thermostat_enable_hvac_modes) {
+ areas.push("item3");
+ }
+ return "\"" + areas.join("\" \"") + "\"";
+ ]]]
+ - grid-template-columns: "1fr"
+ - grid-template-rows: >
+ [[[
+ var rows = [];
+ rows.push("min-content");
+ if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || variables.ulm_card_thermostat_enable_controls) {
+ rows.push("min-content");
+ }
+ if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || variables.ulm_card_thermostat_enable_hvac_modes) {
+ rows.push("min-content");
+ }
+ return rows.join(" ");
+ ]]]
+ - row-gap: "12px"
+ card:
+ - border-radius: "var(--border-radius)"
+ - box-shadow: "var(--box-shadow)"
+ - padding: "12px"
+ custom_fields:
+ item2:
+ - display: >
+ [[[
+ if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || !variables.ulm_card_thermostat_enable_controls) {
+ return "none";
+ } else {
+ return "block";
+ }
+ ]]]
+ item3:
+ - display: >
+ [[[
+ if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || !variables.ulm_card_thermostat_enable_hvac_modes) {
+ return "none";
+ } else {
+ return "block";
+ }
+ ]]]
+ custom_fields:
+ item1:
+ card:
+ type: "custom:button-card"
+ # entity: "climate.netatmo_salon" #####
+ template:
+ - "icon_more_info"
+ custom_fields:
+ item1:
+ card:
+ type: "custom:button-card"
+ entity: "[[[ return entity.entity_id ]]]"
+ icon: "[[[ return variables.ulm_card_thermostat_icon ]]]"
+ # hold_action:
+ # action: >
+ # [[[
+ # if (variables.ulm_card_thermostat_enable_popup){
+ # return 'fire-dom-event'
+ # }
+ # else{
+ # return 'more-info'
+ # }
+ # ]]]
+ # browser_mod:
+ # command: "popup"
+ # large: true
+ # hide_header: true
+ # card:
+ # type: "custom:button-card"
+ # template: "popup_light_brightness"
+ # variables:
+ # ulm_popup_light_entity: "[[[ return entity.entity_id ]]]"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return entity.state != 'off'
+ ]]]
+ styles:
+ icon:
+ - color: "rgba(var(--color-red),1)"
+ img_cell:
+ - background-color: "rgba(var(--color-red),0.2)"
+ item2:
+ card:
+ type: "custom:button-card"
+ entity: "[[[ return entity.entity_id ]]]"
+ name: "[[[ return variables.ulm_card_thermostat_name ]]]"
+ # hold_action:
+ # action: >
+ # [[[
+ # if (variables.ulm_card_thermostat_enable_popup){
+ # return 'fire-dom-event'
+ # }
+ # else{
+ # return 'more-info'
+ # }
+ # ]]]
+ # browser_mod:
+ # command: "popup"
+ # large: true
+ # hide_header: true
+ # card:
+ # type: "custom:button-card"
+ # template: "popup_light_brightness"
+ # variables:
+ # ulm_popup_light_entity: "[[[ return entity.entity_id ]]]"
+ label: >- ##### A REVOIR
+ [[[
+ var label = variables.ulm_off ;
+ if (entity.state =='off'){
+ label = variables.ulm_off ;
+ }else if (entity.state == 'heat'){
+ label = variables.ulm_heat ;
+ }else if (entity.state == 'cool'){
+ label = variables.ulm_cool ;
+ }else{
+ label = variables.ulm_idle;
+ }
+ if(entity.attributes.temperature){
+ return (entity.attributes.current_temperature ) + '°' + ' • ' + label + ' (' + entity.attributes.hvac_action + ')';
+ }
+ return label;
+ ]]]
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
+ ]]]
+ styles:
+ name:
+ - color: "var(--card-background-color)"
+ label:
+ - color: "var(--card-background-color)"
+ item2:
+ card:
+ type: "custom:button-card"
+ template: "list_3_items"
+ styles:
+ card:
+ - background: "none"
+ custom_fields:
+ item1:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ entity: "[[[ return entity.entity_id ]]]"
+ icon: "mdi:minus"
+ tap_action:
+ action: "call-service"
+ service: "climate.set_temperature"
+ service_data:
+ temperature: "[[[ return (parseFloat(states[entity.entity_id].attributes.temperature) - 0.5) ]]]"
+ entity_id: "[[[ return entity.entity_id ]]]"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-theme),0.15)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(255, 255, 255, 0.15)" ###
+ icon:
+ - color: "rgba(var(--card-background-color),0.9)"
+ item2:
+ card:
+ type: "custom:button-card"
+ show_icon: false
+ show_name: false
+ show_label: true
+ entity: "[[[ return entity.entity_id ]]]"
+ label: |-
+ [[[
+ var temperature = entity.attributes.temperature;
+ if (temperature == null) {
+ var temperature = '-';
+ }
+ return temperature + '°C'
+ ]]]
+ styles:
+ card:
+ - background: "none"
+ - box-shadow: "none"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
+ ]]]
+ styles:
+ card:
+ - color: "var(--card-background-color)"
+ item3:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ entity: "[[[ return entity.entity_id ]]]"
+ icon: "mdi:plus"
+ tap_action:
+ action: "call-service"
+ service: "climate.set_temperature"
+ service_data:
+ temperature: "[[[ return (parseFloat(states[entity.entity_id].attributes.temperature) + 0.5) ]]]"
+ entity_id: "[[[ return entity.entity_id ]]]"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-theme),0.15)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(255, 255, 255, 0.15)" ###
+ icon:
+ - color: "rgba(var(--card-background-color),0.9)"
+ item3:
+ card:
+ type: "custom:vertical-stack-in-card" ##########
+ horizontal: true ##########
+ cards:
+ - type: "custom:button-card"
+ template: "widget_icon"
+ icon: "mdi:fire"
+ tap_action:
+ action: "call-service"
+ service: "climate.set_hvac_mode"
+ service_data:
+ entity_id: "[[[ return entity.entity_id ]]]"
+ hvac_mode: "heat"
+ styles:
+ icon:
+ - color: |
+ [[[
+ var color = 'rgba(var(--color-theme), 1)';
+ if (entity.state == "heat"){
+ var color = 'rgba(var(--color-red), 1)';
+ }
+ return color;
+ ]]]
+ card:
+ - background-color: |
+ [[[
+ var bc_color = 'rgba(var(--color-theme),0.05)';
+ if (entity.state == "heat"){
+ var bc_color = 'rgba(var(--color-red), 0.2)';
+ }
+ return bc_color;
+ ]]]
+ - display: >
+ [[[
+ if (states[entity.entity_id].attributes.hvac_modes.includes("heat")) {
+ return "block";
+ } else {
+ return "none";
+ }
+ ]]]
+ card_mod: ############
+ style: |
+ ha-card {
+ background: none;
+ box-shadow: none;
+ }
+
+ # template:
+ # - "icon_info_bg"
+ # - "ulm_language_variables"
+ # hold_action:
+ # action: "more-info"
+ # label: >-
+ # [[[
+ # if (entity.state =='off'){
+ # var etat = variables.ulm_off ;
+ # }else if (entity.state == 'heat'){
+ # var etat = variables.ulm_heat ;
+ # }else if (entity.state == 'cool'){
+ # var etat = variables.ulm_cool ;
+ # }else{
+ # var etat = variables.ulm_idle;
+ # }
+ # if(entity.attributes.temperature){
+ # return (entity.attributes.temperature ) + '°' + ' • ' + etat ;
+ # }else{
+ # return etat ;
+ # }
+ # ]]]
+ # icon: "mdi:thermometer"
+ # state:
+ # - operator: "template"
+ # value: >
+ # [[[
+ # return entity.state == 'heat'
+ # ]]]
+ # styles:
+ # icon:
+ # - color: "rgba(var(--color-red),1)"
+ # img_cell:
+ # - background-color: "rgba(var(--color-red),0.2)"
+ # card:
+ # - background-color: "rgba(var(--color-background-red),var(--opacity-bg))"
+ # name:
+ # - color: "rgba(var(--color-red-text),1)"
+ # label:
+ # - color: "rgba(var(--color-red-text),1)"
From 8ced4254266e6572dfe380321d649954a365987a Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 26 Jan 2022 11:18:09 +0000
Subject: [PATCH 003/248] docs(README): update contributors
---
README.md | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/README.md b/README.md
index 96a4896d3..ae61c0ed0 100644
--- a/README.md
+++ b/README.md
@@ -164,6 +164,8 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
juvenalandres
+
+
@@ -171,15 +173,6 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
Paddy0174
|
-
-
-
-
-
-
- tkwy-rick
-
- |
@@ -231,6 +224,13 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
telashton
|
+
+
+
+
+ willyp713
+
+ |
@@ -252,6 +252,8 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
Mathieu Desvé
|
+
+
@@ -259,8 +261,6 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
Todd Johnson
|
-
-
@@ -296,6 +296,8 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
raphael
|
+
+
@@ -303,8 +305,6 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
AndyVRD
|
-
-
@@ -340,6 +340,8 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
Martin Nöhrer
|
+
+
@@ -347,8 +349,6 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
Pedro Reis
|
-
-
From a2413feff57609f87ce5b1218c577ada98f19cd7 Mon Sep 17 00:00:00 2001
From: schumijo
Date: Wed, 26 Jan 2022 13:40:15 +0100
Subject: [PATCH 004/248] Add hvac modes
---
.../card_templates/cards/card_thermostat.yaml | 427 ++++++++++++++----
1 file changed, 346 insertions(+), 81 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
index b09711c9d..4d1670842 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
@@ -302,91 +302,356 @@ card_thermostat:
- background-color: "rgba(255, 255, 255, 0.15)" ###
icon:
- color: "rgba(var(--card-background-color),0.9)"
- item3:
+ item3: #off, auto, heat, cool, dry, fan_only, heat_cool
card:
- type: "custom:vertical-stack-in-card" ##########
- horizontal: true ##########
- cards:
- - type: "custom:button-card"
- template: "widget_icon"
- icon: "mdi:fire"
- tap_action:
- action: "call-service"
- service: "climate.set_hvac_mode"
- service_data:
- entity_id: "[[[ return entity.entity_id ]]]"
- hvac_mode: "heat"
- styles:
- icon:
- - color: |
- [[[
- var color = 'rgba(var(--color-theme), 1)';
- if (entity.state == "heat"){
- var color = 'rgba(var(--color-red), 1)';
+ type: "custom:button-card"
+ styles:
+ grid:
+ - grid-template-areas: >
+ [[[
+ var areas = [];
+ if (states[entity.entity_id].attributes.hvac_modes.includes("auto")) {
+ areas.push("auto");
+ }
+ if (states[entity.entity_id].attributes.hvac_modes.includes("heat")) {
+ areas.push("heat");
+ }
+ if (states[entity.entity_id].attributes.hvac_modes.includes("cool")) {
+ areas.push("cool");
+ }
+ if (states[entity.entity_id].attributes.hvac_modes.includes("dry")) {
+ areas.push("dry");
+ }
+ if (states[entity.entity_id].attributes.hvac_modes.includes("fan_only")) {
+ areas.push("fan_only");
+ }
+ if (states[entity.entity_id].attributes.hvac_modes.includes("heat_cool")) {
+ areas.push("heat_cool");
+ }
+ return "\"" + areas.join(" ") + "\"";
+ ]]]
+ - grid-template-columns: >
+ [[[
+ var columns = [];
+ if (states[entity.entity_id].attributes.hvac_modes.includes("auto")) {
+ columns.push("1fr");
+ }
+ if (states[entity.entity_id].attributes.hvac_modes.includes("heat")) {
+ columns.push("1fr");
}
- return color;
+ if (states[entity.entity_id].attributes.hvac_modes.includes("cool")) {
+ columns.push("1fr");
+ }
+ if (states[entity.entity_id].attributes.hvac_modes.includes("dry")) {
+ columns.push("1fr");
+ }
+ if (states[entity.entity_id].attributes.hvac_modes.includes("fan_only")) {
+ columns.push("1fr");
+ }
+ if (states[entity.entity_id].attributes.hvac_modes.includes("heat_cool")) {
+ columns.push("1fr");
+ }
+ return columns.join(" ");
+ ]]]
+ - grid-template-rows: "min-content"
+ - column-gap: "7px"
+ card:
+ - box-shadow: "none"
+ - padding: "0px"
+ - background: "none"
+ custom_fields:
+ auto:
+ - display: >
+ [[[
+ if (states[entity.entity_id].attributes.hvac_modes.includes("auto")) {
+ return "block";
+ } else {
+ return "none";
+ }
+ ]]]
+ heat:
+ - display: >
+ [[[
+ if (states[entity.entity_id].attributes.hvac_modes.includes("heat")) {
+ return "block";
+ } else {
+ return "none";
+ }
+ ]]]
+ cool:
+ - display: >
+ [[[
+ if (states[entity.entity_id].attributes.hvac_modes.includes("cool")) {
+ return "block";
+ } else {
+ return "none";
+ }
+ ]]]
+ dry:
+ - display: >
+ [[[
+ if (states[entity.entity_id].attributes.hvac_modes.includes("dry")) {
+ return "block";
+ } else {
+ return "none";
+ }
+ ]]]
+ fan_only:
+ - display: >
+ [[[
+ if (states[entity.entity_id].attributes.hvac_modes.includes("fan_only")) {
+ return "block";
+ } else {
+ return "none";
+ }
+ ]]]
+ heat_cool:
+ - display: >
+ [[[
+ if (states[entity.entity_id].attributes.hvac_modes.includes("heat_cool")) {
+ return "block";
+ } else {
+ return "none";
+ }
+ ]]]
+ custom_fields:
+ auto:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ icon: "mdi:autorenew"
+ tap_action:
+ action: "call-service"
+ service: "climate.set_hvac_mode"
+ service_data:
+ entity_id: "[[[ return entity.entity_id ]]]"
+ hvac_mode: "auto"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return entity.state == "auto"
]]]
- card:
- - background-color: |
+ styles:
+ card:
+ - background-color: "rgba(var(--color-green),0.5)"
+ icon:
+ - color: "rgba(var(--color-green),1)"
+ - operator: "template"
+ value: >
[[[
- var bc_color = 'rgba(var(--color-theme),0.05)';
- if (entity.state == "heat"){
- var bc_color = 'rgba(var(--color-red), 0.2)';
- }
- return bc_color;
+ return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
]]]
- - display: >
+ styles:
+ card:
+ - background-color: "rgba(var(--color-theme),0.15)"
+ - operator: "template"
+ value: >
[[[
- if (states[entity.entity_id].attributes.hvac_modes.includes("heat")) {
- return "block";
- } else {
- return "none";
- }
+ return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
]]]
- card_mod: ############
- style: |
- ha-card {
- background: none;
- box-shadow: none;
- }
-
- # template:
- # - "icon_info_bg"
- # - "ulm_language_variables"
- # hold_action:
- # action: "more-info"
- # label: >-
- # [[[
- # if (entity.state =='off'){
- # var etat = variables.ulm_off ;
- # }else if (entity.state == 'heat'){
- # var etat = variables.ulm_heat ;
- # }else if (entity.state == 'cool'){
- # var etat = variables.ulm_cool ;
- # }else{
- # var etat = variables.ulm_idle;
- # }
- # if(entity.attributes.temperature){
- # return (entity.attributes.temperature ) + '°' + ' • ' + etat ;
- # }else{
- # return etat ;
- # }
- # ]]]
- # icon: "mdi:thermometer"
- # state:
- # - operator: "template"
- # value: >
- # [[[
- # return entity.state == 'heat'
- # ]]]
- # styles:
- # icon:
- # - color: "rgba(var(--color-red),1)"
- # img_cell:
- # - background-color: "rgba(var(--color-red),0.2)"
- # card:
- # - background-color: "rgba(var(--color-background-red),var(--opacity-bg))"
- # name:
- # - color: "rgba(var(--color-red-text),1)"
- # label:
- # - color: "rgba(var(--color-red-text),1)"
+ styles:
+ card:
+ - background-color: "rgba(255, 255, 255, 0.15)" ###
+ icon:
+ - color: "rgba(var(--card-background-color),0.9)"
+ heat:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ icon: "mdi:fire"
+ tap_action:
+ action: "call-service"
+ service: "climate.set_hvac_mode"
+ service_data:
+ entity_id: "[[[ return entity.entity_id ]]]"
+ hvac_mode: "heat"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return entity.state == "heat"
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-red),0.5)"
+ icon:
+ - color: "rgba(var(--color-red),1)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-theme),0.15)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(255, 255, 255, 0.15)" ###
+ icon:
+ - color: "rgba(var(--card-background-color),0.9)"
+ cool:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ icon: "mdi:snowflake"
+ tap_action:
+ action: "call-service"
+ service: "climate.set_hvac_mode"
+ service_data:
+ entity_id: "[[[ return entity.entity_id ]]]"
+ hvac_mode: "cool"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return entity.state == "cool"
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-blue),0.5)"
+ icon:
+ - color: "rgba(var(--color-blue),1)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-theme),0.15)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(255, 255, 255, 0.15)" ###
+ icon:
+ - color: "rgba(var(--card-background-color),0.9)"
+ dry:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ icon: "mdi:water"
+ tap_action:
+ action: "call-service"
+ service: "climate.set_hvac_mode"
+ service_data:
+ entity_id: "[[[ return entity.entity_id ]]]"
+ hvac_mode: "dry"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return entity.state == "dry"
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-yellow),0.5)"
+ icon:
+ - color: "rgba(var(--color-yellow),1)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-theme),0.15)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(255, 255, 255, 0.15)" ###
+ icon:
+ - color: "rgba(var(--card-background-color),0.9)"
+ fan_only:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ icon: "mdi:fan"
+ tap_action:
+ action: "call-service"
+ service: "climate.set_hvac_mode"
+ service_data:
+ entity_id: "[[[ return entity.entity_id ]]]"
+ hvac_mode: "fan_only"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return entity.state == "fan_only"
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-theme),0.5)"
+ icon:
+ - color: "rgba(var(--color-theme),1)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-theme),0.15)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(255, 255, 255, 0.15)" ###
+ icon:
+ - color: "rgba(var(--card-background-color),0.9)"
+ heat_cool:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ icon: "mdi:sun-snowflake"
+ tap_action:
+ action: "call-service"
+ service: "climate.set_hvac_mode"
+ service_data:
+ entity_id: "[[[ return entity.entity_id ]]]"
+ hvac_mode: "heat_cool"
+ state:
+ - operator: "template"
+ value: >
+ [[[
+ return entity.state == "heat_cool"
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-purple),0.5)"
+ icon:
+ - color: "rgba(var(--color-purple),1)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(var(--color-theme),0.15)"
+ - operator: "template"
+ value: >
+ [[[
+ return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
+ ]]]
+ styles:
+ card:
+ - background-color: "rgba(255, 255, 255, 0.15)" ###
+ icon:
+ - color: "rgba(var(--card-background-color),0.9)"
From c780231e8df693ca55980cfa671ce68aafd292cf Mon Sep 17 00:00:00 2001
From: schumijo
Date: Wed, 26 Jan 2022 14:10:21 +0100
Subject: [PATCH 005/248] Update language
---
.../lovelace/translations/FR.yaml | 10 +++-
.../card_templates/cards/card_thermostat.yaml | 58 ++++++++++++++-----
2 files changed, 52 insertions(+), 16 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/FR.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/FR.yaml
index b20cda7a6..094a9eeaa 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/FR.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/FR.yaml
@@ -9,8 +9,14 @@ ulm_language_variables:
ulm_standby: "Veille"
ulm_idle: "Inactif"
ulm_currency: "€"
- ulm_heat: "Chauffe"
- ulm_cool: "Frais"
+ ulm_auto: "Auto"
+ ulm_heat: "Chauffage"
+ ulm_cool: "Fraicheur"
+ ulm_dry: "Sec"
+ ulm_fan_only: "Ventilation"
+ ulm_heat_cool: "Chauffage/Fraicheur"
+ ulm_heating: "Chauffe"
+ ulm_cooling: "Rafraichit"
ulm_person_state_home: "présent"
ulm_person_state_away: "absent"
ulm_popups_back: "Retour"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
index 4d1670842..6f9d3f104 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
@@ -64,10 +64,10 @@ card_thermostat:
[[[
var areas = [];
areas.push("item1");
- if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || variables.ulm_card_thermostat_enable_controls) {
+ if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_controls) {
areas.push("item2");
}
- if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || variables.ulm_card_thermostat_enable_hvac_modes) {
+ if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_hvac_modes) {
areas.push("item3");
}
return "\"" + areas.join("\" \"") + "\"";
@@ -77,10 +77,10 @@ card_thermostat:
[[[
var rows = [];
rows.push("min-content");
- if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || variables.ulm_card_thermostat_enable_controls) {
+ if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_controls) {
rows.push("min-content");
}
- if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || variables.ulm_card_thermostat_enable_hvac_modes) {
+ if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_hvac_modes) {
rows.push("min-content");
}
return rows.join(" ");
@@ -94,26 +94,25 @@ card_thermostat:
item2:
- display: >
[[[
- if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || !variables.ulm_card_thermostat_enable_controls) {
- return "none";
- } else {
+ if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_controls) {
return "block";
+ } else {
+ return "none";
}
]]]
item3:
- display: >
[[[
- if ((variables.ulm_card_thermostat_enable_collapse && entity.state == "off") || !variables.ulm_card_thermostat_enable_hvac_modes) {
- return "none";
- } else {
+ if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_hvac_modes) {
return "block";
+ } else {
+ return "none";
}
]]]
custom_fields:
item1:
card:
type: "custom:button-card"
- # entity: "climate.netatmo_salon" #####
template:
- "icon_more_info"
custom_fields:
@@ -157,6 +156,18 @@ card_thermostat:
type: "custom:button-card"
entity: "[[[ return entity.entity_id ]]]"
name: "[[[ return variables.ulm_card_thermostat_name ]]]"
+ tap_action:
+ action: "call-service"
+ service: >
+ [[[
+ if (entity.state =='off'){
+ return "climate.turn_on";
+ } else {
+ return "climate.turn_off";
+ }
+ ]]]
+ service_data:
+ entity_id: "[[[ return entity.entity_id ]]]"
# hold_action:
# action: >
# [[[
@@ -176,20 +187,39 @@ card_thermostat:
# template: "popup_light_brightness"
# variables:
# ulm_popup_light_entity: "[[[ return entity.entity_id ]]]"
- label: >- ##### A REVOIR
+ label: >-
[[[
var label = variables.ulm_off ;
if (entity.state =='off'){
label = variables.ulm_off ;
+ }else if (entity.state == 'auto'){
+ label = variables.ulm_auto ;
}else if (entity.state == 'heat'){
label = variables.ulm_heat ;
}else if (entity.state == 'cool'){
label = variables.ulm_cool ;
+ }else if (entity.state == 'dry'){
+ label = variables.ulm_dry ;
+ }else if (entity.state == 'fan_only'){
+ label = variables.ulm_fan_only ;
+ }else if (entity.state == 'heat_cool'){
+ label = variables.ulm_heat_cool ;
}else{
label = variables.ulm_idle;
}
+
+ if (entity.attributes.hvac_action == 'heating'){
+ var mode = variables.ulm_heating ;
+ }else if (entity.attributes.hvac_action == 'cooling'){
+ var mode = variables.ulm_cooling ;
+ }else if (entity.attributes.hvac_action == 'idle'){
+ var mode = variables.ulm_idle ;
+ }else{
+ var mode = variables.ulm_unavailable;
+ }
+
if(entity.attributes.temperature){
- return (entity.attributes.current_temperature ) + '°' + ' • ' + label + ' (' + entity.attributes.hvac_action + ')';
+ return (entity.attributes.current_temperature ) + '°' + ' • ' + label + ' (' + mode + ')';
}
return label;
]]]
@@ -302,7 +332,7 @@ card_thermostat:
- background-color: "rgba(255, 255, 255, 0.15)" ###
icon:
- color: "rgba(var(--card-background-color),0.9)"
- item3: #off, auto, heat, cool, dry, fan_only, heat_cool
+ item3:
card:
type: "custom:button-card"
styles:
From 338a699ad2f6036063adfe2b514aa32410ffced8 Mon Sep 17 00:00:00 2001
From: schumijo
Date: Wed, 26 Jan 2022 14:36:38 +0100
Subject: [PATCH 006/248] Updated colors
---
.../card_templates/cards/card_thermostat.yaml | 131 +++---------------
1 file changed, 21 insertions(+), 110 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
index 6f9d3f104..c954b2b01 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
@@ -41,7 +41,7 @@ card_thermostat:
]]]
styles:
card:
- - background-color: "rgba(var(--color-yellow),1)"
+ - background-color: "rgba(255,165,0,0.75)"
- operator: "template"
value: >
[[[
@@ -49,7 +49,7 @@ card_thermostat:
]]]
styles:
card:
- - background-color: "rgba(var(--color-blue),1)"
+ - background-color: "rgba(0,191,255,0.75)"
- operator: "template"
value: >
[[[
@@ -223,17 +223,17 @@ card_thermostat:
}
return label;
]]]
- state:
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
- ]]]
- styles:
- name:
- - color: "var(--card-background-color)"
- label:
- - color: "var(--card-background-color)"
+ # state:
+ # - operator: "template"
+ # value: >
+ # [[[
+ # return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color && hass.themes.darkMode
+ # ]]]
+ # styles:
+ # name:
+ # - color: "var(--card-background-color)"
+ # label:
+ # - color: "var(--card-background-color)"
item2:
card:
type: "custom:button-card"
@@ -258,21 +258,11 @@ card_thermostat:
- operator: "template"
value: >
[[[
- return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
]]]
styles:
card:
- background-color: "rgba(var(--color-theme),0.15)"
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
- ]]]
- styles:
- card:
- - background-color: "rgba(255, 255, 255, 0.15)" ###
- icon:
- - color: "rgba(var(--card-background-color),0.9)"
item2:
card:
type: "custom:button-card"
@@ -292,15 +282,6 @@ card_thermostat:
card:
- background: "none"
- box-shadow: "none"
- state:
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
- ]]]
- styles:
- card:
- - color: "var(--card-background-color)"
item3:
card:
type: "custom:button-card"
@@ -317,21 +298,11 @@ card_thermostat:
- operator: "template"
value: >
[[[
- return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
]]]
styles:
card:
- background-color: "rgba(var(--color-theme),0.15)"
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
- ]]]
- styles:
- card:
- - background-color: "rgba(255, 255, 255, 0.15)" ###
- icon:
- - color: "rgba(var(--card-background-color),0.9)"
item3:
card:
type: "custom:button-card"
@@ -470,21 +441,11 @@ card_thermostat:
- operator: "template"
value: >
[[[
- return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
]]]
styles:
card:
- background-color: "rgba(var(--color-theme),0.15)"
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
- ]]]
- styles:
- card:
- - background-color: "rgba(255, 255, 255, 0.15)" ###
- icon:
- - color: "rgba(var(--card-background-color),0.9)"
heat:
card:
type: "custom:button-card"
@@ -510,21 +471,11 @@ card_thermostat:
- operator: "template"
value: >
[[[
- return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
]]]
styles:
card:
- background-color: "rgba(var(--color-theme),0.15)"
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
- ]]]
- styles:
- card:
- - background-color: "rgba(255, 255, 255, 0.15)" ###
- icon:
- - color: "rgba(var(--card-background-color),0.9)"
cool:
card:
type: "custom:button-card"
@@ -550,21 +501,11 @@ card_thermostat:
- operator: "template"
value: >
[[[
- return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
]]]
styles:
card:
- background-color: "rgba(var(--color-theme),0.15)"
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
- ]]]
- styles:
- card:
- - background-color: "rgba(255, 255, 255, 0.15)" ###
- icon:
- - color: "rgba(var(--card-background-color),0.9)"
dry:
card:
type: "custom:button-card"
@@ -590,21 +531,11 @@ card_thermostat:
- operator: "template"
value: >
[[[
- return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
]]]
styles:
card:
- background-color: "rgba(var(--color-theme),0.15)"
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
- ]]]
- styles:
- card:
- - background-color: "rgba(255, 255, 255, 0.15)" ###
- icon:
- - color: "rgba(var(--card-background-color),0.9)"
fan_only:
card:
type: "custom:button-card"
@@ -630,21 +561,11 @@ card_thermostat:
- operator: "template"
value: >
[[[
- return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
]]]
styles:
card:
- background-color: "rgba(var(--color-theme),0.15)"
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
- ]]]
- styles:
- card:
- - background-color: "rgba(255, 255, 255, 0.15)" ###
- icon:
- - color: "rgba(var(--card-background-color),0.9)"
heat_cool:
card:
type: "custom:button-card"
@@ -670,18 +591,8 @@ card_thermostat:
- operator: "template"
value: >
[[[
- return (entity.attributes.hvac_action == 'heating' && variables.ulm_card_thermostat_enable_background_color)
+ return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color
]]]
styles:
card:
- background-color: "rgba(var(--color-theme),0.15)"
- - operator: "template"
- value: >
- [[[
- return (entity.attributes.hvac_action == 'cooling' && variables.ulm_card_thermostat_enable_background_color)
- ]]]
- styles:
- card:
- - background-color: "rgba(255, 255, 255, 0.15)" ###
- icon:
- - color: "rgba(var(--card-background-color),0.9)"
From 03c00bf030ac3c71a958c98ed1e4dbd83cc78303 Mon Sep 17 00:00:00 2001
From: schumijo
Date: Wed, 26 Jan 2022 14:47:04 +0100
Subject: [PATCH 007/248] Updated language
---
.../lovelace/translations/DA.yaml | 6 ++++++
.../lovelace/translations/DE.yaml | 8 +++++++-
.../lovelace/translations/EN.yaml | 10 ++++++++--
.../lovelace/translations/ES.yaml | 6 ++++++
.../lovelace/translations/IT.yaml | 10 ++++++++--
.../lovelace/translations/NL.yaml | 6 ++++++
.../lovelace/translations/PL.yaml | 6 ++++++
.../lovelace/translations/PT.yaml | 6 ++++++
.../lovelace/translations/SE.yaml | 6 ++++++
9 files changed, 59 insertions(+), 5 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/DA.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/DA.yaml
index ea08c6784..f8e4e0ca1 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/DA.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/DA.yaml
@@ -9,8 +9,14 @@ ulm_language_variables:
ulm_standby: "standby"
ulm_idle: "idle"
ulm_currency: "kr"
+ ulm_auto: "Auto"
ulm_heat: "Varmer"
ulm_cool: "Køler"
+ ulm_dry: "Tør"
+ ulm_fan_only: "Kun ventilator"
+ ulm_heat_cool: "Varmer/Køler"
+ ulm_heating: "Opvarmning"
+ ulm_cooling: "Køling"
ulm_person_state_home: "hjemme"
ulm_person_state_away: "fraværende"
ulm_popups_back: "Tilbage"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/DE.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/DE.yaml
index 9488b5638..bc9007aa9 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/DE.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/DE.yaml
@@ -9,8 +9,14 @@ ulm_language_variables:
ulm_standby: "Standby"
ulm_idle: "Im Leerlauf"
ulm_currency: "€"
- ulm_heat: "Wärmen"
+ ulm_auto: "Auto"
+ ulm_heat: "Wärme"
ulm_cool: "Kühlen"
+ ulm_dry: "Trocken"
+ ulm_fan_only: "Nur Lüfter"
+ ulm_heat_cool: "Wärme/Kühlen"
+ ulm_heating: "Wärmen"
+ ulm_cooling: "Kühlen"
ulm_person_state_home: "Zu Hause"
ulm_person_state_away: "Abwesend"
ulm_popups_back: "Zurück"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/EN.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/EN.yaml
index 93a85585f..9dc30d38e 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/EN.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/EN.yaml
@@ -9,8 +9,14 @@ ulm_language_variables:
ulm_standby: "standby"
ulm_idle: "idle"
ulm_currency: "$"
- ulm_heat: "Heating"
- ulm_cool: "Cooling"
+ ulm_auto: "Auto"
+ ulm_heat: "Heat"
+ ulm_cool: "Cool"
+ ulm_dry: "Dry"
+ ulm_fan_only: "Fan only"
+ ulm_heat_cool: "Heat/Cool"
+ ulm_heating: "Heating"
+ ulm_cooling: "Cooling"
ulm_person_state_home: "home"
ulm_person_state_away: "away"
ulm_popups_back: "Back"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/ES.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/ES.yaml
index 181acb59d..975b64379 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/ES.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/ES.yaml
@@ -9,8 +9,14 @@ ulm_language_variables:
ulm_standby: "En reposo"
ulm_idle: "Inactivo"
ulm_currency: "€"
+ ulm_auto: "Auto"
ulm_heat: "Calor"
ulm_cool: "Frío"
+ ulm_dry: "Seco"
+ ulm_fan_only: "Sólo ventilador"
+ ulm_heat_cool: "Calor/Frío"
+ ulm_heating: "Calefacción"
+ ulm_cooling: "Refrigeración"
ulm_person_state_home: "En casa"
ulm_person_state_away: "Fuera de casa"
ulm_popups_back: "Volver"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml
index 91ee1f4ed..a34e78911 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml
@@ -9,8 +9,14 @@ ulm_language_variables:
ulm_standby: "In pausa"
ulm_idle: "Inattivo"
ulm_currency: "€"
- ulm_heat: "Riscaldamento"
- ulm_cool: "Raffrescamento"
+ ulm_auto: "Auto"
+ ulm_heat: "Calore"
+ ulm_cool: "Raffreddare"
+ ulm_dry: "Asciugare"
+ ulm_fan_only: "Solo ventilatore"
+ ulm_heat_cool: "Calore/Raffreddare"
+ ulm_heating: "Riscaldamento"
+ ulm_cooling: "Raffrescamento"
ulm_person_state_home: "home"
ulm_person_state_away: "away"
ulm_popups_back: "Indietro"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/NL.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/NL.yaml
index 7ee531c5a..d67d00e82 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/NL.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/NL.yaml
@@ -10,8 +10,14 @@ ulm_language_variables:
ulm_standby: "Stand-by"
ulm_idle: "Inactief"
ulm_currency: "€"
+ ulm_auto: "Auto"
ulm_heat: "Verwarmen"
ulm_cool: "Koelen"
+ ulm_dry: "Droog"
+ ulm_fan_only: "Alleen ventilator"
+ ulm_heat_cool: "Verwarmen/Koelen"
+ ulm_heating: "Verwarming"
+ ulm_cooling: "Koeling"
ulm_person_state_home: "Thuis"
ulm_person_state_away: "Afwezig"
ulm_popups_back: "Terug"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/PL.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/PL.yaml
index d23152afc..98cf2c22b 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/PL.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/PL.yaml
@@ -9,8 +9,14 @@ ulm_language_variables:
ulm_standby: "czuwanie"
ulm_idle: "bezczynne"
ulm_currency: "PLN"
+ ulm_auto: "Auto"
ulm_heat: "Grzanie"
ulm_cool: "Chłodzenie"
+ ulm_dry: "Dry"
+ ulm_fan_only: "Tylko wentylator"
+ ulm_heat_cool: "Grzanie/Chłodzenie"
+ ulm_heating: "Grzanie"
+ ulm_cooling: "Chłodzenie"
ulm_person_state_home: "w domu"
ulm_person_state_away: "poza domem"
ulm_popups_back: "Wróć"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml
index 5de47046b..1cb8f6fed 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml
@@ -9,8 +9,14 @@ ulm_language_variables:
ulm_standby: "Em espera"
ulm_idle: "Inativo"
ulm_currency: "€"
+ ulm_auto: "Auto"
ulm_heat: "Quente"
ulm_cool: "Frio"
+ ulm_dry: "Seco"
+ ulm_fan_only: "Apenas ventilador"
+ ulm_heat_cool: "Quente/Frio"
+ ulm_heating: "Aquecimento"
+ ulm_cooling: "Refrigeração"
ulm_person_state_home: "home"
ulm_person_state_away: "away"
ulm_popups_back: "Voltar"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/SE.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/SE.yaml
index 7dda438f9..2f2447b7d 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/SE.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/SE.yaml
@@ -9,8 +9,14 @@ ulm_language_variables:
ulm_standby: "Standby"
ulm_idle: "Vilar"
ulm_currency: "kr"
+ ulm_auto: "Auto"
ulm_heat: "Värmer"
ulm_cool: "Kyler"
+ ulm_dry: "Torka"
+ ulm_fan_only: "Endast fläkt"
+ ulm_heat_cool: "Värmer/Kyler"
+ ulm_heating: "Uppvärmning"
+ ulm_cooling: "Kylning"
ulm_person_state_home: "Hemma"
ulm_person_state_away: "Hemifrån"
ulm_popups_back: "Tillbaka"
From fddf8d69464769301d17a45d84b51edb43499959 Mon Sep 17 00:00:00 2001
From: Bavo Mees
Date: Wed, 26 Jan 2022 17:20:12 +0100
Subject: [PATCH 008/248] Rewrite of the room card
---
.../card_templates/cards/card_room.yaml | 273 ++++++++++++++++++
docs/assets/img/room-card.png | Bin 0 -> 22704 bytes
docs/usage/cards/card_room.md | 82 ++++++
3 files changed, 355 insertions(+)
create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml
create mode 100644 docs/assets/img/room-card.png
create mode 100644 docs/usage/cards/card_room.md
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml
new file mode 100644
index 000000000..d328091a1
--- /dev/null
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml
@@ -0,0 +1,273 @@
+---
+card_room:
+ template:
+ - "ulm_language_variables"
+ variables:
+ label_use_temperature: true
+ label_use_brightness: false
+ color: "var(--google-grey-500)"
+ show_icon: true
+ show_name: true
+ show_label: true
+ size: "45%"
+ aspect_ratio: "1/1"
+ label: |-
+ [[[
+ if (variables.label_use_temperature) {
+ return (entity.attributes.current_temperature || entity.attributes.temperature || entity.state || '-') + '°C';
+ } else if (variables.label_use_brightness) {
+ if (entity.state){
+ if (entity.state == "off"){
+ return variables.ulm_off;
+ } else if (entity.state == "on"){
+ if (entity.attributes.brightness != null){
+ var bri = Math.round(entity.attributes.brightness / 2.55);
+ return (bri ? bri : "0") + "%";
+ } else {
+ return variables.ulm_on
+ }
+ }
+ } else {
+ return variables.ulm_unavailable;
+ }
+ }
+ ]]]
+ state:
+ - styles:
+ custom_fields:
+ notification:
+ - border-radius: "50%"
+ - border: "2px solid var(--card-background-color)"
+ - width: "24.5px"
+ - height: "24.5px"
+ - position: "absolute"
+ - left: "50%"
+ - top: "50%"
+ - transform: "translate(-50%,-50%)"
+ - margin-top: "35%"
+ - margin-left: "-35%"
+ - line-height: 0
+ - display: "grid"
+ - background-color: >
+ [[[
+ return "rgba(var(--color-red),1)";
+ ]]]
+ value: "unavailable"
+ styles:
+ card:
+ - border-radius: "20px"
+ - box-shadow: "var(--box-shadow)"
+ - padding: "5px"
+ grid:
+ - grid-template-areas: "'n n n i1' 'l l l i2' 'i i . i3' 'i i . i4'"
+ - grid-template-columns: "1fr 1fr 1fr 1fr"
+ - grid-template-rows: "1fr 1fr 1fr 1fr"
+ - justify-items: "center"
+ icon:
+ - color: "rgba(var(--color-theme),0.2)"
+ img_cell:
+ - background-color: "rgba(var(--color-theme),0.05)"
+ - border-radius: "50%"
+ - width: "75%"
+ - height: "75%"
+ - max-width: "none"
+ - max-height: "none"
+ - position: "absolute"
+ - left: "50%"
+ - top: "50%"
+ - transform: "translate(-50%,-50%)"
+ - margin-top: "25%"
+ - margin-left: "-25%"
+ name:
+ - justify-self: "start"
+ - align-self: "end"
+ - font-weight: "bold"
+ - font-size: "14px"
+ - margin-left: "12px"
+ - margin-bottom: "10%"
+ label:
+ - justify-self: "start"
+ - align-self: "start"
+ - font-weight: "bold"
+ - font-size: "12px"
+ - filter: "opacity(40%)"
+ - margin-left: "12px"
+ - margin-top: "-10%"
+ state:
+ - justify-self: "start"
+ - font-weight: "bold"
+ - font-size: "12px"
+ - filter: "opacity(40%)"
+ - margin-left: "6px"
+ custom_fields:
+ i1:
+ - border-radius: "50%"
+ - width: "80%"
+ - height: "80%"
+ - line-height: 0
+ - display: "grid"
+ i2:
+ - border-radius: "50%"
+ - width: "80%"
+ - height: "80%"
+ - line-height: 0
+ - display: "grid"
+ i3:
+ - border-radius: "50%"
+ - width: "80%"
+ - height: "80%"
+ - line-height: 0
+ - display: "grid"
+ i4:
+ - border-radius: "50%"
+ - width: "80%"
+ - height: "80%"
+ - line-height: 0
+ - display: "grid"
+ custom_fields:
+ notification: >
+ [[[
+ if (entity.state =='unavailable'){
+ return ``
+ }
+ ]]]
+ i1:
+ card:
+ type: "custom:button-card"
+ template: >
+ [[[
+ var templates = ['widget_icon_room'];
+ if (variables?.entity_1?.templates?.length) {
+ return ['widget_icon_room'].concat(variables.entity_1.templates);
+ }
+ return templates;
+ ]]]
+ variables: "[[[ return variables.entity_1; ]]]"
+ entity: >
+ [[[
+ if (variables.entity_1.entity_id) {
+ return variables.entity_1.entity_id;
+ }
+ ]]]
+ state:
+ - operator: "template"
+ value: "[[[ return !variables.entity_1; ]]]"
+ styles:
+ card:
+ - display: "none"
+
+ i2:
+ card:
+ type: "custom:button-card"
+ template: >
+ [[[
+ var templates = ['widget_icon_room'];
+ if (variables?.entity_2?.templates?.length) {
+ return ['widget_icon_room'].concat(variables.entity_2.templates);
+ }
+ return templates;
+ ]]]
+ variables: "[[[ return variables.entity_2; ]]]"
+ entity: >
+ [[[
+ if (variables?.entity_2?.entity_id) {
+ return variables.entity_2.entity_id;
+ }
+ ]]]
+ state:
+ - operator: "template"
+ value: "[[[ return !variables.entity_2; ]]]"
+ styles:
+ card:
+ - display: "none"
+
+ i3:
+ card:
+ type: "custom:button-card"
+ template: >
+ [[[
+ var templates = ['widget_icon_room'];
+ if (variables?.entity_3?.templates?.length) {
+ return ['widget_icon_room'].concat(variables.entity_3.templates);
+ }
+ return templates;
+ ]]]
+ variables: "[[[ return variables.entity_3; ]]]"
+ entity: >
+ [[[
+ if (variables?.entity_3?.entity_id) {
+ return variables.entity_3.entity_id;
+ }
+ ]]]
+ state:
+ - operator: "template"
+ value: "[[[ return !variables.entity_3; ]]]"
+ styles:
+ card:
+ - display: "none"
+ i4:
+ card:
+ type: "custom:button-card"
+ template: >
+ [[[
+ var templates = ['widget_icon_room'];
+ if (variables?.entity_4?.templates?.length) {
+ return ['widget_icon_room'].concat(variables.entity_4.templates);
+ }
+ return templates;
+ ]]]
+ variables: "[[[ return variables.entity_4; ]]]"
+ entity: >
+ [[[
+ if (variables?.entity_4?.entity_id) {
+ return variables.entity_4.entity_id;
+ }
+ ]]]
+ state:
+ - operator: "template"
+ value: "[[[ return !variables.entity_4; ]]]"
+ styles:
+ card:
+ - display: "none"
+
+widget_icon_room:
+ variables:
+ tap_action:
+ action: toggle
+ hold_action:
+ action: none
+ tap_action:
+ action: >
+ [[[ if (variables?.tap_action?.action) return variables.tap_action.action; else return 'none'; ]]]
+ entity: "[[[ return variables.tap_action.entity; ]]]"
+ navigation_path: "[[[ return variables.tap_action.navigation_path; ]]]"
+ url_path: "[[[ return variables.tap_action.url_path; ]]]"
+ service: "[[[ return variables.tap_action.service; ]]]"
+ service_data: "[[[ return variables.tap_action.service_data; ]]]"
+ hold_action:
+ action: >
+ [[[ if (variables?.hold_action?.action) return variables.hold_action.action; else return 'none'; ]]]
+ entity: "[[[ return variables.hold_action.entity; ]]]"
+ navigation_path: "[[[ return variables.hold_action.navigation_path; ]]]"
+ url_path: "[[[ return variables.hold_action.url_path; ]]]"
+ service: "[[[ return variables.hold_action.service; ]]]"
+ service_data: "[[[ return variables.hold_action.service_data; ]]]"
+ show_icon: true
+ show_name: false
+ styles:
+ grid:
+ - grid-template-areas: "'i'"
+ card:
+ - height: "100%"
+ - box-shadow: "none"
+ - padding: "0px"
+ icon:
+ - width: "50%"
+ - height: "50%"
+ - line-height: "0"
+ - color: "rgba(var(--color-theme),0.2)"
+ img_cell:
+ - border-radius: "50%"
+ - background-color: "rgba(var(--color-theme),0.05)"
+ size: "15px"
+ color: "var(--google-grey)"
\ No newline at end of file
diff --git a/docs/assets/img/room-card.png b/docs/assets/img/room-card.png
new file mode 100644
index 0000000000000000000000000000000000000000..39cdcf18fe183b5b4ddbdebdde2be1e8c3453055
GIT binary patch
literal 22704
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 {M`D&3<-0IN0#aLiaWxT83G?D9HE%mH
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
literal 0
HcmV?d00001
diff --git a/docs/usage/cards/card_room.md b/docs/usage/cards/card_room.md
new file mode 100644
index 000000000..a325c5942
--- /dev/null
+++ b/docs/usage/cards/card_room.md
@@ -0,0 +1,82 @@
+---
+title: card_room
+hide:
+ - toc
+---
+
+
+## Description
+
+![Image title](../../assets/img/ulm_cards/card_room.png){ width="500" }
+
+This is the `room-card`, used to show the state of single room in a quick glance.
+The card has support for 4 subicons at the right side of the card. These can be configured using custom colors and tap actions.
+
+## Variables
+
+| Variable | Default | Required | Notes | Requirement |
+|----------------------------------------|-----------------|------------------|----------------|-------------|
+| label_use_temperature | `true` | :material-close: | Define whether the label should show the current room temperature | The temperature should be provide by either a `temperature` or `current_temperature` attribute or by the entity state |
+| label_use_brightness | `false` | :material-close: | Define whether the label should show the current room brightness of the lights| requires `label_use_temperature` to be false |
+| entity_1 | | :material-close: | a `room_entity` object (see below) | |
+| entity_2 | | :material-close: | a `room_entity` object (see below) | |
+| entity_3 | | :material-close: | a `room_entity` object (see below) | |
+| entity_4 | | :material-close: | a `room_entity` object (see below) | |
+
+## Room entity
+
+| Variable | Default | Required | Notes | Requirement |
+|----------------------------------------|-----------------|------------------|----------------|-------------|
+| entity_id | | :material-check: | The entity_id of the status icon | |
+| templates | | :material-close: | List of the additional button card templates to apply to this icon | |
+| tap_action | | :material-close: | tap_action for the icon (see button card documentation for options) | |
+| hold_action | | :material-close: | tap_action for the icon (see button card documentation for options) | |
+
+## Usage
+
+```yaml
+ - type: 'custom:button-card'
+ template:
+ - card_room
+ - red
+ name: Bathroom
+ entity: light.bathroom
+ icon: mdi:shower-head
+ tap_action:
+ action: navigate
+ navigation_path: '/ui-lovelace-minimalist/bathroom'
+ variables:
+ label_use_temperature: false
+ label_use_brightness: true
+ entity_1:
+ entity_id: light.bathroom
+ templates:
+ - yellow_on
+ tap_action:
+ action: toggle
+ entity_2:
+ entity_id: binary_sensor.badkamer_motion_sensor
+ templates:
+ - blue_on
+ tap_action:
+ action: none
+ entity_3:
+ entity_id: input_boolean.badkamer_motionsensor_enabled
+ templates:
+ - green_on
+ - red_off
+ tap_action:
+ action: toggle
+ entity_4:
+ entity_id: input_boolean.bath_mode
+ templates:
+ - pink_on
+ tap_action:
+ action: toggle
+```
+
+??? note "Template Code"
+
+ ```yaml title="card_room.yaml"
+ --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml"
+ ```
From 9f046098635cddbb66b1123e8af5c41655810505 Mon Sep 17 00:00:00 2001
From: BasBruss <68892092+basbruss@users.noreply.github.com>
Date: Wed, 26 Jan 2022 17:29:56 +0100
Subject: [PATCH 009/248] Give a Glance of Minimalist-UI
Add some Minimalist-cards to fresh installers
UI/UX improvement
---
.../lovelace/ui-lovelace.yaml | 110 +++++++++++++++++-
1 file changed, 108 insertions(+), 2 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
index ed5c13e9a..85cbf7258 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
@@ -8,6 +8,112 @@ background: "var(--background-image)"
views:
- title: "Example View"
path: 0
+ icon: "mdi:flower"
cards:
- - type: "custom:button-card"
- entity: "sun.sun"
+ - type: "vertical-stack"
+ cards:
+ - type: "custom:button-card"
+ template: "card_title"
+ name: "You have succesfully installed the Minimalist-UI"
+ label: "Explore the wonderfull templates/cards we offer"
+ - type: "custom:auto-entities"
+ card:
+ type: "grid"
+ columns: 1
+ square: false
+ card_param: "cards"
+ sort:
+ count: 1
+ filter:
+ include:
+ - domain: "weather"
+ options:
+ type: "custom:button-card"
+ template: "custom_card_paddy_welcome_with_weather"
+ variables:
+ ulm_custom_card_paddy_welcome_time: "sensor.time"
+ ulm_custom_card_paddy_welcome_weather_provider: "this.entity_id"
+ - type: "custom:button-card"
+ template: "card_title"
+ name: "Lights"
+ label: "This is the Minimalist-lightcard"
+ - type: "custom:auto-entities"
+ card:
+ type: "grid"
+ columns: 2
+ square: false
+ card_param: "cards"
+ sort:
+ count: 4
+ filter:
+ include:
+ - domain: "light"
+ options:
+ type: "custom:button-card"
+ template: "card_light"
+ variables:
+ ulm_card_light_enable_slider: true
+ ulm_card_light_enable_color: true
+ ulm_card_light_enable_popup: true
+ - type: "custom:button-card"
+ template: "card_title"
+ name: "Binary Sensors"
+ label: "This is the Minimalist-binary_sensorcard"
+ - type: "custom:auto-entities"
+ card:
+ type: "grid"
+ columns: 2
+ square: false
+ card_param: 'cards'
+ sort:
+ count: 4
+ filter:
+ include:
+ - domain: "binary_sensor"
+ options:
+ type: "custom:button-card"
+ template: "card_binary_sensor_alert"
+ variables:
+ - ulm_card_binary_sensor_alert: true
+ show_last_changed: true
+ - type: "custom:button-card"
+ template: "card_title"
+ name: "Sensors"
+ label: "This is the Minimalist-sensorcard"
+ - type: "custom:auto-entities"
+ card:
+ type: "grid"
+ columns: 2
+ square: false
+ card_param: "cards"
+ sort:
+ count: 4
+ filter:
+ include:
+ - domain: "sensor"
+ options:
+ type: "custom:button-card"
+ template: "card_generic"
+ - type: "custom:button-card"
+ template: "card_title"
+ name: "Batteries"
+ label: "This is the Minimalist-batterycard"
+ - type: "custom:auto-entities"
+ card:
+ type: "grid"
+ columns: 2
+ square: false
+ card_param: "cards"
+ sort:
+ count: 4
+ filter:
+ include:
+ - attributes:
+ battery_level: "<= 100"
+ options:
+ type: "custom:button-card"
+ template: "card_battery"
+ variables:
+ ulm_card_battery_charger_type_entity_id: "this.entity_id"
+ ulm_card_battery_battery_level_danger: 30
+ ulm_card_battery_battery_level_warning: 80
From d067ceed55a9257db39e63d5d83526d37ba2ad0e Mon Sep 17 00:00:00 2001
From: BasBruss <68892092+basbruss@users.noreply.github.com>
Date: Wed, 26 Jan 2022 17:54:02 +0100
Subject: [PATCH 010/248] Optimize descriptions
---
.../ui_lovelace_minimalist/lovelace/ui-lovelace.yaml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
index 85cbf7258..827cbb1fb 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
@@ -15,7 +15,7 @@ views:
- type: "custom:button-card"
template: "card_title"
name: "You have succesfully installed the Minimalist-UI"
- label: "Explore the wonderfull templates/cards we offer"
+ label: "Explore the wonderfull 'Minimalistic' cards we offer"
- type: "custom:auto-entities"
card:
type: "grid"
@@ -36,7 +36,7 @@ views:
- type: "custom:button-card"
template: "card_title"
name: "Lights"
- label: "This is the Minimalist-lightcard"
+ label: "These are your 'Minimalist' light cards"
- type: "custom:auto-entities"
card:
type: "grid"
@@ -58,7 +58,7 @@ views:
- type: "custom:button-card"
template: "card_title"
name: "Binary Sensors"
- label: "This is the Minimalist-binary_sensorcard"
+ label: "These are your 'Minimalist' binary_sensor cards"
- type: "custom:auto-entities"
card:
type: "grid"
@@ -79,7 +79,7 @@ views:
- type: "custom:button-card"
template: "card_title"
name: "Sensors"
- label: "This is the Minimalist-sensorcard"
+ label: "These are your 'Minimalist' sensors card"
- type: "custom:auto-entities"
card:
type: "grid"
@@ -97,7 +97,7 @@ views:
- type: "custom:button-card"
template: "card_title"
name: "Batteries"
- label: "This is the Minimalist-batterycard"
+ label: "These are your 'Minimalist' battery cards"
- type: "custom:auto-entities"
card:
type: "grid"
From 9f067196db450a778a5b1671cf9465fdcab9183d Mon Sep 17 00:00:00 2001
From: BasBruss <68892092+basbruss@users.noreply.github.com>
Date: Wed, 26 Jan 2022 18:26:58 +0100
Subject: [PATCH 011/248] Optimize Header
---
.../ui_lovelace_minimalist/lovelace/ui-lovelace.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
index 827cbb1fb..c85c5725d 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
@@ -14,8 +14,8 @@ views:
cards:
- type: "custom:button-card"
template: "card_title"
- name: "You have succesfully installed the Minimalist-UI"
- label: "Explore the wonderfull 'Minimalistic' cards we offer"
+ name: "Congrats with your installation 🎉"
+ label: "Explore here some of the wonderfull 'Minimalistic-UI' cards we offer"
- type: "custom:auto-entities"
card:
type: "grid"
From f55f9e20a760bb655123f5cd7be7a4665a37a940 Mon Sep 17 00:00:00 2001
From: BasBruss <68892092+basbruss@users.noreply.github.com>
Date: Wed, 26 Jan 2022 18:42:27 +0100
Subject: [PATCH 012/248] Update battery section
---
.../ui_lovelace_minimalist/lovelace/ui-lovelace.yaml | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
index c85c5725d..3f60e6b10 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
@@ -70,7 +70,7 @@ views:
filter:
include:
- domain: "binary_sensor"
- options:
+ options:
type: "custom:button-card"
template: "card_binary_sensor_alert"
variables:
@@ -91,7 +91,7 @@ views:
filter:
include:
- domain: "sensor"
- options:
+ options:
type: "custom:button-card"
template: "card_generic"
- type: "custom:button-card"
@@ -109,11 +109,12 @@ views:
filter:
include:
- attributes:
- battery_level: "<= 100"
+ unit_of_measurement: "%"
+ device_class: "battery"
options:
type: "custom:button-card"
template: "card_battery"
variables:
- ulm_card_battery_charger_type_entity_id: "this.entity_id"
+ ulm_card_battery_battery_state_entity_id: "this.entity_id"
ulm_card_battery_battery_level_danger: 30
ulm_card_battery_battery_level_warning: 80
From f8867499bd348a3ee1fcd553dcac17ceb79dace4 Mon Sep 17 00:00:00 2001
From: BasBruss <68892092+basbruss@users.noreply.github.com>
Date: Wed, 26 Jan 2022 18:46:56 +0100
Subject: [PATCH 013/248] Update ui-lovelace.yaml
fix yaml-lint
---
.../ui_lovelace_minimalist/lovelace/ui-lovelace.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
index 3f60e6b10..24249d361 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
@@ -64,7 +64,7 @@ views:
type: "grid"
columns: 2
square: false
- card_param: 'cards'
+ card_param: "cards"
sort:
count: 4
filter:
From dae4cb92f3baaa72f84034af43c95ab25fc1ed15 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 26 Jan 2022 17:48:09 +0000
Subject: [PATCH 014/248] docs(README): update contributors
---
README.md | 34 ++++++++++++++++++++++++----------
1 file changed, 24 insertions(+), 10 deletions(-)
diff --git a/README.md b/README.md
index 21cadb524..dfb40af34 100644
--- a/README.md
+++ b/README.md
@@ -93,17 +93,17 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
|
-
-
+
+
- schumijo
+ BasBruss
|
-
-
+
+
- BasBruss
+ schumijo
|
@@ -282,6 +282,13 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
Pierre
|
+
+
+
+
+ Rick van Nieuwland
+
+ |
@@ -289,6 +296,8 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
raphael
|
+
+
@@ -296,8 +305,6 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
AndyVRD
|
-
-
@@ -319,6 +326,13 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
Emil Zackrisson
|
+
+
+
+
+ Filip
+
+ |
@@ -326,6 +340,8 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
JP2 Création
|
+
+
@@ -340,8 +356,6 @@ The same goes for our `custom_cards`. As the number grows, the list would be to
Pedro Reis
|
-
-
From 7b19a1556001361556f3869326a58ee1f1775928 Mon Sep 17 00:00:00 2001
From: Rick Stokkingreef
Date: Wed, 26 Jan 2022 18:02:27 +0000
Subject: [PATCH 015/248] added auto-entities card
---
.devcontainer/configuration.yaml | 87 ++++----
.../ui_lovelace_minimalist/__init__.py | 4 -
.../lovelace-auto-entities/auto-entities.js | 210 ++++++++++++++++++
.../ui_lovelace_minimalist/load_plugins.py | 3 +-
.../lovelace/ui-lovelace.yaml | 6 +-
5 files changed, 262 insertions(+), 48 deletions(-)
create mode 100644 custom_components/ui_lovelace_minimalist/cards/lovelace-auto-entities/auto-entities.js
diff --git a/.devcontainer/configuration.yaml b/.devcontainer/configuration.yaml
index 6192afbbe..17889d50f 100644
--- a/.devcontainer/configuration.yaml
+++ b/.devcontainer/configuration.yaml
@@ -1,49 +1,56 @@
---
default_config:
-frontend:
- themes: !include_dir_merge_named "themes"
+# frontend:
+# themes: !include_dir_merge_named "themes"
-# For some reason default_config is not picking it up.
-automation ui: !include "automations.yaml"
+# # For some reason default_config is not picking it up.
+# automation ui: !include "automations.yaml"
-# lovelace:
-# mode: "storage"
+# # lovelace:
+# # mode: "storage"
# sensor:
# - platform: "time_date"
-logger:
- default: "info"
- logs:
- custom_components.ui_lovelace_minimalist: "debug"
-# If you need to debug uncommment the line below (doc: https://www.home-assistant.io/integrations/debugpy/)
-# debugpy:
-
-#
-# Uncomment part below after installing dependencies
-#
-## Requirement for popups, install browser mod with hacs
-browser_mod:
-
-## Install virtual integration with hacs
-virtual:
-
-light:
- - platform: "virtual"
- name: "Livingroom"
- support_color: true
- support_color_temp: true
- support_white_value: true
-
-sensor:
- - platform: "virtual"
- name: "Livingroom Temperature"
- class: "temperature"
- initial_value: 20
- initial_availability: true
- - platform: "virtual"
- name: "Livingroom Humidity"
- class: "humidity"
- initial_value: 50
- initial_availability: true
+# logger:
+# default: "info"
+# logs:
+# custom_components.ui_lovelace_minimalist: "debug"
+# # If you need to debug uncommment the line below (doc: https://www.home-assistant.io/integrations/debugpy/)
+# # debugpy:
+
+# #
+# # Uncomment part below after installing dependencies
+# #
+# ## Requirement for popups, install browser mod with hacs
+# browser_mod:
+
+# weather:
+# - platform: "template"
+# name: "DummyTown"
+# condition_template: "cloudy"
+# temperature_template: "20"
+# humidity_template: "50"
+
+# ## Install virtual integration with hacs
+# virtual:
+
+# light:
+# - platform: "virtual"
+# name: "Livingroom"
+# support_color: true
+# support_color_temp: true
+# support_white_value: true
+
+# sensor:
+# - platform: "virtual"
+# name: "Livingroom Temperature"
+# class: "temperature"
+# initial_value: 20
+# initial_availability: true
+# - platform: "virtual"
+# name: "Livingroom Humidity"
+# class: "humidity"
+# initial_value: 50
+# initial_availability: true
diff --git a/custom_components/ui_lovelace_minimalist/__init__.py b/custom_components/ui_lovelace_minimalist/__init__.py
index 007f43ee7..d167c2d86 100644
--- a/custom_components/ui_lovelace_minimalist/__init__.py
+++ b/custom_components/ui_lovelace_minimalist/__init__.py
@@ -71,10 +71,6 @@ async def async_setup(hass: HomeAssistant, config: Config):
"""Set up this integration using UI."""
return await async_initialize_integration(hass=hass, config=config)
- # load_plugins(hass, DOMAIN)
-
- # return True
-
async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
"""Set up this integration using UI."""
diff --git a/custom_components/ui_lovelace_minimalist/cards/lovelace-auto-entities/auto-entities.js b/custom_components/ui_lovelace_minimalist/cards/lovelace-auto-entities/auto-entities.js
new file mode 100644
index 000000000..e34de1c5e
--- /dev/null
+++ b/custom_components/ui_lovelace_minimalist/cards/lovelace-auto-entities/auto-entities.js
@@ -0,0 +1,210 @@
+function t(t,e,i,s){var n,o=arguments.length,r=o<3?e:null===s?s=Object.getOwnPropertyDescriptor(e,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,i,s);else for(var a=t.length-1;a>=0;a--)(n=t[a])&&(r=(o<3?n(r):o>3?n(e,i,r):n(e,i))||r);return o>3&&r&&Object.defineProperty(e,i,r),r}const e="undefined"!=typeof window&&null!=window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,i=(t,e,i=null)=>{for(;e!==i;){const i=e.nextSibling;t.removeChild(e),e=i}},s=`{{lit-${String(Math.random()).slice(2)}}}`,n=`\x3c!--${s}--\x3e`,o=new RegExp(`${s}|${n}`);class r{constructor(t,e){this.parts=[],this.element=e;const i=[],n=[],r=document.createTreeWalker(e.content,133,null,!1);let l=0,h=-1,u=0;const{strings:p,values:{length:f}}=t;for(;u0;){const e=p[u],i=d.exec(e)[2],s=i.toLowerCase()+"$lit$",n=t.getAttribute(s);t.removeAttribute(s);const r=n.split(o);this.parts.push({type:"attribute",index:h,name:i,strings:r}),u+=r.length-1}}"TEMPLATE"===t.tagName&&(n.push(t),r.currentNode=t.content)}else if(3===t.nodeType){const e=t.data;if(e.indexOf(s)>=0){const s=t.parentNode,n=e.split(o),r=n.length-1;for(let e=0;e{const i=t.length-e.length;return i>=0&&t.slice(i)===e},l=t=>-1!==t.index,c=()=>document.createComment(""),d=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;function h(t,e){const{element:{content:i},parts:s}=t,n=document.createTreeWalker(i,133,null,!1);let o=p(s),r=s[o],a=-1,l=0;const c=[];let d=null;for(;n.nextNode();){a++;const t=n.currentNode;for(t.previousSibling===d&&(d=null),e.has(t)&&(c.push(t),null===d&&(d=t)),null!==d&&l++;void 0!==r&&r.index===a;)r.index=null!==d?-1:r.index-l,o=p(s,o),r=s[o]}c.forEach((t=>t.parentNode.removeChild(t)))}const u=t=>{let e=11===t.nodeType?0:1;const i=document.createTreeWalker(t,133,null,!1);for(;i.nextNode();)e++;return e},p=(t,e=-1)=>{for(let i=e+1;i"function"==typeof t&&f.has(t),_={},v={};class m{constructor(t,e,i){this.__parts=[],this.template=t,this.processor=e,this.options=i}update(t){let e=0;for(const i of this.__parts)void 0!==i&&i.setValue(t[e]),e++;for(const t of this.__parts)void 0!==t&&t.commit()}_clone(){const t=e?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),i=[],s=this.template.parts,n=document.createTreeWalker(t,133,null,!1);let o,r=0,a=0,c=n.nextNode();for(;rt}),b=` ${s} `;class w{constructor(t,e,i,s){this.strings=t,this.values=e,this.type=i,this.processor=s}getHTML(){const t=this.strings.length-1;let e="",i=!1;for(let o=0;o-1||i)&&-1===t.indexOf("--\x3e",r+1);const a=d.exec(t);e+=null===a?t+(i?b:n):t.substr(0,a.index)+a[1]+a[2]+"$lit$"+a[3]+s}return e+=this.strings[t],e}getTemplateElement(){const t=document.createElement("template");let e=this.getHTML();return void 0!==y&&(e=y.createHTML(e)),t.innerHTML=e,t}}const S=t=>null===t||!("object"==typeof t||"function"==typeof t),C=t=>Array.isArray(t)||!(!t||!t[Symbol.iterator]);class O{constructor(t,e,i){this.dirty=!0,this.element=t,this.name=e,this.strings=i,this.parts=[];for(let t=0;t{try{const t={get capture(){return N=!0,!1}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){}})();class T{constructor(t,e,i){this.value=void 0,this.__pendingValue=void 0,this.element=t,this.eventName=e,this.eventContext=i,this.__boundHandleEvent=t=>this.handleEvent(t)}setValue(t){this.__pendingValue=t}commit(){for(;g(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=_,t(this)}if(this.__pendingValue===_)return;const t=this.__pendingValue,e=this.value,i=null==t||null!=e&&(t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive),s=null!=t&&(null==e||i);i&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),s&&(this.__options=k(t),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=t,this.__pendingValue=_}handleEvent(t){"function"==typeof this.value?this.value.call(this.eventContext||this.element,t):this.value.handleEvent(t)}}const k=t=>t&&(N?{capture:t.capture,passive:t.passive,once:t.once}:t.capture);function A(t){let e=M.get(t.type);void 0===e&&(e={stringsArray:new WeakMap,keyString:new Map},M.set(t.type,e));let i=e.stringsArray.get(t.strings);if(void 0!==i)return i;const n=t.strings.join(s);return i=e.keyString.get(n),void 0===i&&(i=new r(t,t.getTemplateElement()),e.keyString.set(n,i)),e.stringsArray.set(t.strings,i),i}const M=new Map,U=new WeakMap;const F=new class{handleAttributeExpressions(t,e,i,s){const n=e[0];if("."===n){return new j(t,e.slice(1),i).parts}if("@"===n)return[new T(t,e.slice(1),s.eventContext)];if("?"===n)return[new P(t,e.slice(1),i)];return new O(t,e,i).parts}handleTextExpression(t){return new x(t)}};"undefined"!=typeof window&&(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.3.0");const V=(t,...e)=>new w(t,e,"html",F),I=(t,e)=>`${t}--${e}`;let R=!0;void 0===window.ShadyCSS?R=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn("Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1."),R=!1);const D=t=>e=>{const i=I(e.type,t);let n=M.get(i);void 0===n&&(n={stringsArray:new WeakMap,keyString:new Map},M.set(i,n));let o=n.stringsArray.get(e.strings);if(void 0!==o)return o;const a=e.strings.join(s);if(o=n.keyString.get(a),void 0===o){const i=e.getTemplateElement();R&&window.ShadyCSS.prepareTemplateDom(i,t),o=new r(e,i),n.keyString.set(a,o)}return n.stringsArray.set(e.strings,o),o},q=["html","svg"],W=new Set,G=(t,e,i)=>{W.add(t);const s=i?i.element:document.createElement("template"),n=e.querySelectorAll("style"),{length:o}=n;if(0===o)return void window.ShadyCSS.prepareTemplateStyles(s,t);const r=document.createElement("style");for(let t=0;t{q.forEach((e=>{const i=M.get(I(e,t));void 0!==i&&i.keyString.forEach((t=>{const{element:{content:e}}=t,i=new Set;Array.from(e.querySelectorAll("style")).forEach((t=>{i.add(t)})),h(t,i)}))}))})(t);const a=s.content;i?function(t,e,i=null){const{element:{content:s},parts:n}=t;if(null==i)return void s.appendChild(e);const o=document.createTreeWalker(s,133,null,!1);let r=p(n),a=0,l=-1;for(;o.nextNode();)for(l++,o.currentNode===i&&(a=u(e),i.parentNode.insertBefore(e,i));-1!==r&&n[r].index===l;){if(a>0){for(;-1!==r;)n[r].index+=a,r=p(n,r);return}r=p(n,r)}}(i,r,a.firstChild):a.insertBefore(r,a.firstChild),window.ShadyCSS.prepareTemplateStyles(s,t);const l=a.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==l)e.insertBefore(l.cloneNode(!0),e.firstChild);else if(i){a.insertBefore(r,a.firstChild);const t=new Set;t.add(r),h(i,t)}};window.JSCompiler_renameProperty=(t,e)=>t;const z={toAttribute(t,e){switch(e){case Boolean:return t?"":null;case Object:case Array:return null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){switch(e){case Boolean:return null!==t;case Number:return null===t?null:Number(t);case Object:case Array:return JSON.parse(t)}return t}},L=(t,e)=>e!==t&&(e==e||t==t),B={attribute:!0,type:String,converter:z,reflect:!1,hasChanged:L};class H extends HTMLElement{constructor(){super(),this.initialize()}static get observedAttributes(){this.finalize();const t=[];return this._classProperties.forEach(((e,i)=>{const s=this._attributeNameForProperty(i,e);void 0!==s&&(this._attributeToPropertyMap.set(s,i),t.push(s))})),t}static _ensureClassProperties(){if(!this.hasOwnProperty(JSCompiler_renameProperty("_classProperties",this))){this._classProperties=new Map;const t=Object.getPrototypeOf(this)._classProperties;void 0!==t&&t.forEach(((t,e)=>this._classProperties.set(e,t)))}}static createProperty(t,e=B){if(this._ensureClassProperties(),this._classProperties.set(t,e),e.noAccessor||this.prototype.hasOwnProperty(t))return;const i="symbol"==typeof t?Symbol():`__${t}`,s=this.getPropertyDescriptor(t,i,e);void 0!==s&&Object.defineProperty(this.prototype,t,s)}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(s){const n=this[t];this[e]=s,this.requestUpdateInternal(t,n,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this._classProperties&&this._classProperties.get(t)||B}static finalize(){const t=Object.getPrototypeOf(this);if(t.hasOwnProperty("finalized")||t.finalize(),this.finalized=!0,this._ensureClassProperties(),this._attributeToPropertyMap=new Map,this.hasOwnProperty(JSCompiler_renameProperty("properties",this))){const t=this.properties,e=[...Object.getOwnPropertyNames(t),..."function"==typeof Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t):[]];for(const i of e)this.createProperty(i,t[i])}}static _attributeNameForProperty(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}static _valueHasChanged(t,e,i=L){return i(t,e)}static _propertyValueFromAttribute(t,e){const i=e.type,s=e.converter||z,n="function"==typeof s?s:s.fromAttribute;return n?n(t,i):t}static _propertyValueToAttribute(t,e){if(void 0===e.reflect)return;const i=e.type,s=e.converter;return(s&&s.toAttribute||z.toAttribute)(t,i)}initialize(){this._updateState=0,this._updatePromise=new Promise((t=>this._enableUpdatingResolver=t)),this._changedProperties=new Map,this._saveInstanceProperties(),this.requestUpdateInternal()}_saveInstanceProperties(){this.constructor._classProperties.forEach(((t,e)=>{if(this.hasOwnProperty(e)){const t=this[e];delete this[e],this._instanceProperties||(this._instanceProperties=new Map),this._instanceProperties.set(e,t)}}))}_applyInstanceProperties(){this._instanceProperties.forEach(((t,e)=>this[e]=t)),this._instanceProperties=void 0}connectedCallback(){this.enableUpdating()}enableUpdating(){void 0!==this._enableUpdatingResolver&&(this._enableUpdatingResolver(),this._enableUpdatingResolver=void 0)}disconnectedCallback(){}attributeChangedCallback(t,e,i){e!==i&&this._attributeToProperty(t,i)}_propertyToAttribute(t,e,i=B){const s=this.constructor,n=s._attributeNameForProperty(t,i);if(void 0!==n){const t=s._propertyValueToAttribute(e,i);if(void 0===t)return;this._updateState=8|this._updateState,null==t?this.removeAttribute(n):this.setAttribute(n,t),this._updateState=-9&this._updateState}}_attributeToProperty(t,e){if(8&this._updateState)return;const i=this.constructor,s=i._attributeToPropertyMap.get(t);if(void 0!==s){const t=i.getPropertyOptions(s);this._updateState=16|this._updateState,this[s]=i._propertyValueFromAttribute(e,t),this._updateState=-17&this._updateState}}requestUpdateInternal(t,e,i){let s=!0;if(void 0!==t){const n=this.constructor;i=i||n.getPropertyOptions(t),n._valueHasChanged(this[t],e,i.hasChanged)?(this._changedProperties.has(t)||this._changedProperties.set(t,e),!0!==i.reflect||16&this._updateState||(void 0===this._reflectingProperties&&(this._reflectingProperties=new Map),this._reflectingProperties.set(t,i))):s=!1}!this._hasRequestedUpdate&&s&&(this._updatePromise=this._enqueueUpdate())}requestUpdate(t,e){return this.requestUpdateInternal(t,e),this.updateComplete}async _enqueueUpdate(){this._updateState=4|this._updateState;try{await this._updatePromise}catch(t){}const t=this.performUpdate();return null!=t&&await t,!this._hasRequestedUpdate}get _hasRequestedUpdate(){return 4&this._updateState}get hasUpdated(){return 1&this._updateState}performUpdate(){if(!this._hasRequestedUpdate)return;this._instanceProperties&&this._applyInstanceProperties();let t=!1;const e=this._changedProperties;try{t=this.shouldUpdate(e),t?this.update(e):this._markUpdated()}catch(e){throw t=!1,this._markUpdated(),e}t&&(1&this._updateState||(this._updateState=1|this._updateState,this.firstUpdated(e)),this.updated(e))}_markUpdated(){this._changedProperties=new Map,this._updateState=-5&this._updateState}get updateComplete(){return this._getUpdateComplete()}_getUpdateComplete(){return this._updatePromise}shouldUpdate(t){return!0}update(t){void 0!==this._reflectingProperties&&this._reflectingProperties.size>0&&(this._reflectingProperties.forEach(((t,e)=>this._propertyToAttribute(e,this[e],t))),this._reflectingProperties=void 0),this._markUpdated()}updated(t){}firstUpdated(t){}}H.finalized=!0;const J=(t,e)=>"method"===e.kind&&e.descriptor&&!("value"in e.descriptor)?Object.assign(Object.assign({},e),{finisher(i){i.createProperty(e.key,t)}}):{kind:"field",key:Symbol(),placement:"own",descriptor:{},initializer(){"function"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function K(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):J(t,e)}function Y(t){return K({attribute:!1,hasChanged:null==t?void 0:t.hasChanged})}const Q=(t,e,i)=>{Object.defineProperty(e,i,t)},X=(t,e)=>({kind:"method",placement:"prototype",key:e.key,descriptor:t}),Z=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,tt=Symbol();class et{constructor(t,e){if(e!==tt)throw new Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t}get styleSheet(){return void 0===this._styleSheet&&(Z?(this._styleSheet=new CSSStyleSheet,this._styleSheet.replaceSync(this.cssText)):this._styleSheet=null),this._styleSheet}toString(){return this.cssText}}const it=(t,...e)=>{const i=e.reduce(((e,i,s)=>e+(t=>{if(t instanceof et)return t.cssText;if("number"==typeof t)return t;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(i)+t[s+1]),t[0]);return new et(i,tt)};(window.litElementVersions||(window.litElementVersions=[])).push("2.4.0");const st={};class nt extends H{static getStyles(){return this.styles}static _getUniqueStyles(){if(this.hasOwnProperty(JSCompiler_renameProperty("_styles",this)))return;const t=this.getStyles();if(Array.isArray(t)){const e=(t,i)=>t.reduceRight(((t,i)=>Array.isArray(i)?e(i,t):(t.add(i),t)),i),i=e(t,new Set),s=[];i.forEach((t=>s.unshift(t))),this._styles=s}else this._styles=void 0===t?[]:[t];this._styles=this._styles.map((t=>{if(t instanceof CSSStyleSheet&&!Z){const e=Array.prototype.slice.call(t.cssRules).reduce(((t,e)=>t+e.cssText),"");return new et(String(e),tt)}return t}))}initialize(){super.initialize(),this.constructor._getUniqueStyles(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const t=this.constructor._styles;0!==t.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?Z?this.renderRoot.adoptedStyleSheets=t.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(t.map((t=>t.cssText)),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(t){const e=this.render();super.update(t),e!==st&&this.constructor.render(e,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach((t=>{const e=document.createElement("style");e.textContent=t.cssText,this.renderRoot.appendChild(e)})))}render(){return st}}function ot(){return document.querySelector("hc-main")?document.querySelector("hc-main").hass:document.querySelector("home-assistant")?document.querySelector("home-assistant").hass:void 0}nt.finalized=!0,nt.render=(t,e,s)=>{if(!s||"object"!=typeof s||!s.scopeName)throw new Error("The `scopeName` option is required.");const n=s.scopeName,o=U.has(e),r=R&&11===e.nodeType&&!!e.host,a=r&&!W.has(n),l=a?document.createDocumentFragment():e;if(((t,e,s)=>{let n=U.get(e);void 0===n&&(i(e,e.firstChild),U.set(e,n=new x(Object.assign({templateFactory:A},s))),n.appendInto(e)),n.setValue(t),n.commit()})(t,l,Object.assign({templateFactory:D(n)},s)),a){const t=U.get(l);U.delete(l);const s=t.value instanceof m?t.value.template:void 0;G(n,l,s),i(e,e.firstChild),e.appendChild(l),U.set(e,t)}!o&&r&&window.ShadyCSS.styleElement(e.host)};const rt="lovelace-player-device-id";function at(){if(!localStorage[rt]){const t=()=>Math.floor(1e5*(1+Math.random())).toString(16).substring(1);window.fully&&"function"==typeof fully.getDeviceId?localStorage[rt]=fully.getDeviceId():localStorage[rt]=`${t()}${t()}-${t()}${t()}`}return localStorage[rt]}let lt=at();const ct=new URLSearchParams(window.location.search);var dt;function ht(t){return!!String(t).includes("{%")||(!!String(t).includes("{{")||void 0)}ct.get("deviceID")&&null!==(dt=ct.get("deviceID"))&&("clear"===dt?localStorage.removeItem(rt):localStorage[rt]=dt,lt=at()),window.cardMod_template_cache=window.cardMod_template_cache||{};const ut=window.cardMod_template_cache;async function pt(t,e,i){const s=ot().connection,n=JSON.stringify([e,i]);let o=ut[n];o?(o.callbacks.has(t)||ft(t),t(o.value),o.callbacks.add(t)):(ft(t),t(""),i=Object.assign({user:ot().user.name,browser:lt,hash:location.hash.substr(1)||""},i),ut[n]=o={template:e,variables:i,value:"",callbacks:new Set([t]),unsubscribe:s.subscribeMessage((t=>function(t,e){const i=ut[t];i&&(i.value=e.result,i.callbacks.forEach((t=>t(e.result))))}(n,t)),{type:"render_template",template:e,variables:i})})}async function ft(t){let e;for(const[i,s]of Object.entries(ut))if(s.callbacks.has(t)){s.callbacks.delete(t),0==s.callbacks.size&&(e=s.unsubscribe,delete ut[i]);break}e&&await(await e)()}var gt;function _t(t,e){if("string"==typeof e&&"string"==typeof t&&(t.startsWith("/")&&t.endsWith("/")||-1!==t.indexOf("*"))){return t.startsWith("/")||(t=`/^${t=t.replace(/\./g,".").replace(/\*/g,".*")}$/`),new RegExp(t.slice(1,-1)).test(e)}if("string"==typeof t){if(t.startsWith("<="))return parseFloat(e)<=parseFloat(t.substr(2));if(t.startsWith(">="))return parseFloat(e)>=parseFloat(t.substr(2));if(t.startsWith("<"))return parseFloat(e)"))return parseFloat(e)>parseFloat(t.substr(1));if(t.startsWith("!"))return parseFloat(e)!=parseFloat(t.substr(1));if(t.startsWith("="))return parseFloat(e)==parseFloat(t.substr(1))}return t===e}window.autoEntities_cache=null!==(gt=window.autoEntities_cache)&&void 0!==gt?gt:{};const vt=window.autoEntities_cache;async function mt(t){var e;return vt.areas=null!==(e=vt.areas)&&void 0!==e?e:await t.callWS({type:"config/area_registry/list"}),vt.areas}async function yt(t){var e;return vt.devices=null!==(e=vt.devices)&&void 0!==e?e:await t.callWS({type:"config/device_registry/list"}),vt.devices}async function bt(t){var e;return vt.entities=null!==(e=vt.entities)&&void 0!==e?e:await t.callWS({type:"config/entity_registry/list"}),vt.entities}const wt={options:async()=>!0,sort:async()=>!0,domain:async(t,e,i)=>_t(e,i.entity_id.split(".")[0]),entity_id:async(t,e,i)=>_t(e,i.entity_id),state:async(t,e,i)=>_t(e,i.state),name:async(t,e,i)=>{var s;return _t(e,null===(s=i.attributes)||void 0===s?void 0:s.friendly_name)},group:async(t,e,i)=>{var s,n,o;return null===(o=null===(n=null===(s=t.states[e])||void 0===s?void 0:s.attributes)||void 0===n?void 0:n.entity_id)||void 0===o?void 0:o.includes(i.entity_id)},attributes:async(t,e,i)=>{for(const[t,s]of Object.entries(e)){let e=t.split(" ")[0],n=i.attributes;for(const t of e.split(":"))n=n?n[t]:void 0;if(void 0===n||!_t(s,n))return!1}return!0},not:async(t,e,i)=>!await St(t,e,i.entity_id),or:async(t,e,i)=>{for(const s of e)if(await St(t,s,i.entity_id))return!0;return!1},device:async(t,e,i)=>{const s=(await bt(t)).find((t=>t.entity_id===i.entity_id));if(!s)return!1;const n=(await yt(t)).find((t=>t.id===s.device_id));return!!n&&(_t(e,n.name_by_user)||_t(e,n.name))},area:async(t,e,i)=>{const s=(await bt(t)).find((t=>t.entity_id===i.entity_id));if(!s)return!1;let n=(await mt(t)).find((t=>t.area_id===s.area_id));if(n)return _t(e,n.name);const o=(await yt(t)).find((t=>t.id===s.device_id));return!!o&&(n=(await mt(t)).find((t=>t.area_id===o.area_id)),!!n&&_t(e,n.name))},last_changed:async(t,e,i)=>_t(e,((new Date).getTime()-new Date(i.last_changed).getTime())/6e4),last_updated:async(t,e,i)=>_t(e,((new Date).getTime()-new Date(i.last_updated).getTime())/6e4),last_triggered:async(t,e,i)=>{if(null==i.attributes.last_triggered)return!1;return _t(e,((new Date).getTime()-new Date(i.attributes.last_triggered).getTime())/6e4)}};async function St(t,e,i){var s;if(!t.states[i])return!1;for(let[n,o]of Object.entries(e))if(n=n.trim().split(" ")[0].trim(),!await(null===(s=wt[n])||void 0===s?void 0:s.call(wt,t,o,t.states[i])))return!1;return!0}function Ct(t,e,i){var s,n,o,r;const[a,l]=i.reverse?[-1,1]:[1,-1];return i.ignore_case&&(t=null!==(n=null===(s=null==t?void 0:t.toLowerCase)||void 0===s?void 0:s.call(t))&&void 0!==n?n:t,e=null!==(r=null===(o=null==e?void 0:e.toLowerCase)||void 0===o?void 0:o.call(e))&&void 0!==r?r:e),i.numeric&&(isNaN(parseFloat(t))&&isNaN(parseFloat(e))||(t=isNaN(parseFloat(t))?void 0:parseFloat(t),e=isNaN(parseFloat(e))?void 0:parseFloat(e))),void 0===t&&void 0===e?0:void 0===t?a:void 0===e?l:(i.reverse?-1:1)*String(t).localeCompare(String(e),void 0,i)}const Ot={none:()=>0,domain:(t,e,i)=>{var s,n;return Ct(null===(s=null==t?void 0:t.entity_id)||void 0===s?void 0:s.split(".")[0],null===(n=null==e?void 0:e.entity_id)||void 0===n?void 0:n.split(".")[0],i)},entity_id:(t,e,i)=>Ct(null==t?void 0:t.entity_id,null==e?void 0:e.entity_id,i),friendly_name:(t,e,i)=>{var s,n,o,r;return Ct((null===(s=null==t?void 0:t.attributes)||void 0===s?void 0:s.friendly_name)||(null===(n=null==t?void 0:t.entity_id)||void 0===n?void 0:n.split(".")[1]),(null===(o=null==e?void 0:e.attributes)||void 0===o?void 0:o.friendly_name)||(null===(r=null==e?void 0:e.entity_id)||void 0===r?void 0:r.split(".")[1]),i)},name:(t,e,i)=>{var s,n,o,r;return Ct((null===(s=null==t?void 0:t.attributes)||void 0===s?void 0:s.friendly_name)||(null===(n=null==t?void 0:t.entity_id)||void 0===n?void 0:n.split(".")[1]),(null===(o=null==e?void 0:e.attributes)||void 0===o?void 0:o.friendly_name)||(null===(r=null==e?void 0:e.entity_id)||void 0===r?void 0:r.split(".")[1]),i)},state:(t,e,i)=>Ct(null==t?void 0:t.state,null==e?void 0:e.state,i),attribute:(t,e,i)=>{var s;const[n,o]=(null==i?void 0:i.reverse)?[-1,1]:[1,-1];let r=null==t?void 0:t.attributes,a=null==e?void 0:e.attributes;for(const t of null===(s=null==i?void 0:i.attribute)||void 0===s?void 0:s.split(":")){if(void 0===r&&void 0===a)return 0;if(void 0===r)return n;if(void 0===a)return o;[r,a]=[r[t],a[t]]}return Ct(r,a,i)},last_changed:(t,e,i)=>{const[s,n]=(null==i?void 0:i.reverse)?[-1,1]:[1,-1];return null==(null==t?void 0:t.last_changed)&&null==(null==e?void 0:e.last_changed)?0:null==(null==t?void 0:t.last_changed)?s:null==(null==e?void 0:e.last_changed)?n:(i.numeric=!0,Ct(new Date(null==t?void 0:t.last_changed).getTime(),new Date(null==e?void 0:e.last_changed).getTime(),i))},last_updated:(t,e,i)=>{const[s,n]=(null==i?void 0:i.reverse)?[-1,1]:[1,-1];return null==(null==t?void 0:t.last_updated)&&null==(null==e?void 0:e.last_updated)?0:null==(null==t?void 0:t.last_updated)?s:null==(null==e?void 0:e.last_updated)?n:(i.numeric=!0,Ct(new Date(null==t?void 0:t.last_updated).getTime(),new Date(null==e?void 0:e.last_updated).getTime(),i))},last_triggered:(t,e,i)=>{var s,n,o,r,a,l;const[c,d]=(null==i?void 0:i.reverse)?[-1,1]:[1,-1];return null==(null===(s=null==t?void 0:t.attributes)||void 0===s?void 0:s.last_triggered)&&null==(null===(n=null==e?void 0:e.attributes)||void 0===n?void 0:n.last_triggered)?0:null==(null===(o=null==t?void 0:t.attributes)||void 0===o?void 0:o.last_triggered)?c:null==(null===(r=null==e?void 0:e.attributes)||void 0===r?void 0:r.last_triggered)?d:(i.numeric=!0,Ct(new Date(null===(a=null==t?void 0:t.attributes)||void 0===a?void 0:a.last_triggered).getTime(),new Date(null===(l=null==e?void 0:e.attributes)||void 0===l?void 0:l.last_triggered).getTime(),i))}};function Et(t,e){return function(i,s){var n,o;return null!==(o=null===(n=Ot[e.method])||void 0===n?void 0:n.call(Ot,t.states[i.entity],t.states[s.entity],e))&&void 0!==o?o:0}}var xt="1.9.1";const Pt=["domain","entity_id","state","name","group","device","area","last_changed","last_updated","last_triggered"],jt=["none","domain","entity_id","friendly_name","state","last_changed","last_updated","last_triggered"];class $t extends nt{constructor(){super(...arguments),this._selectedTab=0,this._cardGUIMode=!0,this._cardGUIModeAvailable=!0}setConfig(t){this._config=t}_handleSwitchTab(t){this._selectedTab=parseInt(t.detail.index,10)}_addFilterGroup(){var t;if(!this._config)return;const e=[...null===(t=this._config.filter)||void 0===t?void 0:t.include];e.push({domain:""});const i=Object.assign(Object.assign({},this._config.filter),{include:e});this._config=Object.assign(Object.assign({},this._config),{filter:i}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_deleteFilterGroup(t){var e;if(!this._config)return;const i=[...null===(e=this._config.filter)||void 0===e?void 0:e.include];i.splice(t,1);const s=Object.assign(Object.assign({},this._config.filter),{include:i});this._config=Object.assign(Object.assign({},this._config),{filter:s}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_moveFilterGroup(t,e){var i;if(!this._config)return;const s=[...null===(i=this._config.filter)||void 0===i?void 0:i.include];[s[t],s[t+e]]=[s[t+e],s[t]];const n=Object.assign(Object.assign({},this._config.filter),{include:s});this._config=Object.assign(Object.assign({},this._config),{filter:n}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_addSpecialEntry(){var t;if(!this._config)return;const e=[...null===(t=this._config.filter)||void 0===t?void 0:t.include];e.push({type:""});const i=Object.assign(Object.assign({},this._config.filter),{include:e});this._config=Object.assign(Object.assign({},this._config),{filter:i}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}async _changeSpecialEntry(t,e){var i;if(!this._config)return;const s=[...null===(i=this._config.filter)||void 0===i?void 0:i.include];s[t]=e.detail.value;const n=Object.assign(Object.assign({},this._config.filter),{include:s});this._config=Object.assign(Object.assign({},this._config),{filter:n}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}async _changeGroupOptions(t,e){var i;if(!this._config)return;const s=e.detail.value,n=[...null===(i=this._config.filter)||void 0===i?void 0:i.include];n[t]=Object.assign(Object.assign({},n[t]),{options:s});const o=Object.assign(Object.assign({},this._config.filter),{include:n});this._config=Object.assign(Object.assign({},this._config),{filter:o}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_addFilter(t){var e;if(!this._config)return;const i=Pt.find((e=>void 0===this._config.filter.include[t][e]));if(void 0===i)return;const s=[...null===(e=this._config.filter)||void 0===e?void 0:e.include];s[t]=Object.assign(Object.assign({},s[t]),{[i]:""});const n=Object.assign(Object.assign({},this._config.filter),{include:s});this._config=Object.assign(Object.assign({},this._config),{filter:n}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_removeFilter(t,e){var i;if(!this._config)return;const s=[...null===(i=this._config.filter)||void 0===i?void 0:i.include],n=Object.assign({},s[t]);if(delete n[e],0===Object.keys(n).length)return this._deleteFilterGroup(t);s[t]=n;const o=Object.assign(Object.assign({},this._config.filter),{include:s});this._config=Object.assign(Object.assign({},this._config),{filter:o}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_changeFilterKey(t,e,i){var s;if(!this._config)return;const n=Pt[i.target.selected];if(void 0===n||n===e)return;const o=[...null===(s=this._config.filter)||void 0===s?void 0:s.include],r=Object.assign({},o[t]);if(void 0===r[e])return;r[n]=r[e],delete r[e],o[t]=r;const a=Object.assign(Object.assign({},this._config.filter),{include:o});this._config=Object.assign(Object.assign({},this._config),{filter:a}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_changeFilterValue(t,e,i){var s;if(!this._config)return;const n=[...null===(s=this._config.filter)||void 0===s?void 0:s.include],o=Object.assign({},n[t]);o[e]=i.target.value,n[t]=o;const r=Object.assign(Object.assign({},this._config.filter),{include:n});this._config=Object.assign(Object.assign({},this._config),{filter:r}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_changeSortMethod(t){if(!this._config)return;const e=jt[t.target.selected],i=Object.assign(Object.assign({},this._config.sort),{method:e});this._config=Object.assign(Object.assign({},this._config),{sort:i}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_sortOptionToggle(t,e){if(!this._config)return;const i=Object.assign({},this._config.sort);i[t]=e.target.checked,this._config=Object.assign(Object.assign({},this._config),{sort:i}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_showEmptyToggle(){if(!this._config)return;const t=!1===this._config.show_empty;this._config=Object.assign(Object.assign({},this._config),{show_empty:t}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_changeCardParam(t){if(!this._config)return;const e=""===t.target.value||"entities"===t.target.value?void 0:t.target.value;this._config=Object.assign(Object.assign({},this._config),{card_param:e}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_getCardConfig(){const t=Object.assign({},this._config.card);return t[this._config.card_param||"entities"]=[],t}_handleCardPicked(t){if(t.stopPropagation(),!this._config)return;const e=Object.assign({},t.detail.config);delete e.entities,this._config=Object.assign(Object.assign({},this._config),{card:e}),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_handleCardConfigChanged(t){if(t.stopPropagation(),!this._config)return;const e=Object.assign({},t.detail.config);delete e[this._config.card_param||"entities"],this._config=Object.assign(Object.assign({},this._config),{card:e}),this._cardGUIModeAvailable=t.detail.guiModeAvailable,this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_deleteCard(t){this._config&&(this._config=Object.assign({},this._config),delete this._config.card,this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}})))}_toggleCardMode(t){var e;null===(e=this._cardEditorEl)||void 0===e||e.toggleMode()}_cardGUIModeChanged(t){t.stopPropagation(),this._cardGUIMode=t.detail.guiMode,this._cardGUIModeAvailable=t.detail.guiModeAvailable}render(){return this.hass&&this._config?V`
+
+
+
+
+
+
+
+
+
+ ${[this._renderFilterEditor,this._renderSortEditor,this._renderCardEditor][this._selectedTab].bind(this)()}
+
+
+ `:V``}_renderFilterEditor(){var t;return(null===(t=this._config.filter)||void 0===t?void 0:t.template)||this._config.entities?V`
+
+
+ Your filter method is not handled by the GUI editor.
+
+ Please switch to the CODE EDITOR to access all options.
+
+ `:V`
+ ${this._config.filter.include.map(((t,e)=>V`
+
+
+ this._moveFilterGroup(e,-1)}
+ >
+
+
+ this._moveFilterGroup(e,1)}
+ >
+
+
+ this._deleteFilterGroup(e)}
+ >
+
+
+
+ ${void 0===t.type?V`
+ ${Object.entries(t).map((([t,i],s)=>V`
+ ${Pt.includes(t)?V`
+
+
+ this._changeFilterKey(e,t,i)}
+ >
+ ${Pt.map((t=>V` ${t} `))}
+
+
+ this._changeFilterValue(e,t,i)}
+ >
+ this._removeFilter(e,t)}
+ >
+
+
+
+
+ `:"options"===t?V``:V` Some filters are not shown
+
+ Please switch to the CODE EDITOR to access all
+ options.
+ `}
+ `))}
+ this._addFilter(e)}>
+ Add filter
+
+ this._changeGroupOptions(e,t)}
+ >
+ `:V` this._changeSpecialEntry(e,t)}
+ >`}
+
+ `))}
+
+ Add filter group
+
+
+ Add non-filter entry
+
+ `}_renderSortEditor(){var t,e,i,s,n;return V`
+
+ ${(null===(t=this._config.sort)||void 0===t?void 0:t.method)&&!jt.includes(this._config.sort.method)?V`
+ Your sort method is not handled by the GUI editor.
+
+ Please switch to the CODE EDITOR to access all options. `:V`
+ Method:
+
+
+ ${jt.map((t=>V` ${t} `))}
+
+
+
+
+ this._sortOptionToggle("reverse",t)}
+ >
+
+
+
+
+ this._sortOptionToggle("numeric",t)}
+ >
+
+
+ `}
+
+ `}_renderCardEditor(){var t;return V`
+
+
+
+
+
+
+ ${this._config.card?V`
+
+
+ ${!this._cardEditorEl||this._cardGUIMode?"Show code editor":"Show Visual Editor"}
+
+
+
+
+
+
+ `:V`
+
+ `}
+
+ `}static get styles(){return[it`
+ mwc-tab-bar {
+ border-bottom: 1px solid var(--divider-color);
+ }
+
+ .filter,
+ .card {
+ margin-top: 8px;
+ border: 1px solid var(--divider-color);
+ padding: 12px;
+ }
+ .filter .option {
+ display: flex;
+ align-items: flex-end;
+ }
+ .filter .option paper-dropdown-menu {
+ margin-right: 16px;
+ width: 150px;
+ }
+ .filter .option paper-input {
+ flex-grow: 2;
+ }
+
+ .filter .toolbar,
+ .card .card-options {
+ display: flex;
+ justify-content: flex-end;
+ width: 100%;
+ }
+ .gui-mode-button {
+ margin-right: auto;
+ }
+ `]}}function Nt(t,e){if(t===e)return!0;if(typeof t!=typeof e)return!1;if(!(t instanceof Object&&e instanceof Object))return!1;for(const i in t)if(t.hasOwnProperty(i)){if(!e.hasOwnProperty(i))return!1;if(t[i]!==e[i]){if("object"!=typeof t[i])return!1;if(!Nt(t[i],e[i]))return!1}}for(const i in e)if(e.hasOwnProperty(i)&&!t.hasOwnProperty(i))return!1;return!0}t([Y()],$t.prototype,"_config",void 0),t([K()],$t.prototype,"lovelace",void 0),t([K()],$t.prototype,"hass",void 0),t([Y()],$t.prototype,"_selectedTab",void 0),t([Y()],$t.prototype,"_cardGUIMode",void 0),t([Y()],$t.prototype,"_cardGUIModeAvailable",void 0),t([function(t,e){return(i,s)=>{const n={get(){return this.renderRoot.querySelector(t)},enumerable:!0,configurable:!0};if(e){const e="symbol"==typeof s?Symbol():`__${s}`;n.get=function(){return void 0===this[e]&&(this[e]=this.renderRoot.querySelector(t)),this[e]}}return void 0!==s?Q(n,i,s):X(n,i)}}("hui-card-element-editor")],$t.prototype,"_cardEditorEl",void 0),customElements.define("auto-entities-editor",$t),window.customCards=window.customCards||[],window.customCards.push({type:"auto-entities",name:"Auto Entities",preview:!1,description:"Entity Filter on Steroids. Auto Entities allows you to fill other cards with entities automatically, based on a number of attributes."}),window.queueMicrotask=window.queueMicrotask||(t=>window.setTimeout(t,1));class Tt extends nt{constructor(){super(...arguments),this._updateCooldown={timer:void 0,rerun:!1},this._renderer=t=>{this._template="string"==typeof t?t.split(/[\s,]+/):t}}static getConfigElement(){return document.createElement("auto-entities-editor")}static getStubConfig(){return{card:{type:"entities"},filter:{include:[],exclude:[]}}}setConfig(t){var e,i;if(!t)throw new Error("No configuration.");if(!(null===(e=t.card)||void 0===e?void 0:e.type))throw new Error("No card type specified.");if(!t.filter&&!t.entities)throw new Error("No filters specified.");t=JSON.parse(JSON.stringify(t)),this._config=t,(null===(i=this._config.filter)||void 0===i?void 0:i.template)&&ht(this._config.filter.template)&&pt(this._renderer,this._config.filter.template,{config:t}),this._cardBuilt=new Promise((t=>this._cardBuiltResolve=t)),queueMicrotask((()=>this.update_all()))}connectedCallback(){var t,e;super.connectedCallback(),(null===(e=null===(t=this._config)||void 0===t?void 0:t.filter)||void 0===e?void 0:e.template)&&ht(this._config.filter.template)&&pt(this._renderer,this._config.filter.template,{config:this._config})}disconnectedCallback(){super.disconnectedCallback(),ft(this._renderer)}async update_all(){if(this.card&&(this.card.hass=this.hass),this._updateCooldown.timer)return void(this._updateCooldown.rerun=!0);this._updateCooldown.rerun=!1,this._updateCooldown.timer=window.setTimeout((()=>{this._updateCooldown.timer=void 0,this._updateCooldown.rerun&&this.update_all()}),500);const t=await this.update_entities();this.update_card(t)}async update_card(t){var e,i,s;if(this._entities&&Nt(t,this._entities)&&Nt(this._cardConfig,this._config.card))return;const n=(null===(e=this._cardConfig)||void 0===e?void 0:e.type)!==this._config.card.type;this._entities=t,this._cardConfig=JSON.parse(JSON.stringify(this._config.card));const o=Object.assign({[this._config.card_param||"entities"]:t},this._config.card);if(!this.card||n){const t=await window.loadCardHelpers(),e=console.error;let s=!1;if(console.error=(...t)=>{var i,n,o,r,a,l;3===t.length&&t[2].message&&((null===(n=(i=t[2].message).startsWith)||void 0===n?void 0:n.call(i,"Entities"))||(null===(r=(o=t[2].message).startsWith)||void 0===r?void 0:r.call(o,"Either entities"))||(null===(l=(a=t[2].message).endsWith)||void 0===l?void 0:l.call(a,"entity")))?s=!0:e(...t)},this.card=await t.createCardElement(o),console.error=e,s)return this.card=void 0,this._entities=void 0,this._cardConfig=void 0,void(null===(i=this._cardBuiltResolve)||void 0===i||i.call(this))}else this.card.setConfig(o);null===(s=this._cardBuiltResolve)||void 0===s||s.call(this),this.card.hass=this.hass;const r=0===t.length&&!1===this._config.show_empty;this.style.display=r?"none":null,this.style.margin=r?"0":null,this.card.requestUpdate&&(await this.updateComplete,this.card.requestUpdate())}async update_entities(){var t,e,i,s,n,o;const r=t=>t?"string"==typeof t?{entity:t.trim()}:t:null;let a=[...(null===(e=null===(t=this._config)||void 0===t?void 0:t.entities)||void 0===e?void 0:e.map(r))||[]];if(!this.hass)return a;if(this._template&&(a=a.concat(this._template.map(r))),a=a.filter(Boolean),null===(i=this._config.filter)||void 0===i?void 0:i.include){const t=Object.keys(this.hass.states).map(r);for(const e of this._config.filter.include){if(e.type){a.push(e);continue}let i=[];for(const s of t)await St(this.hass,e,s.entity)&&i.push(JSON.parse(JSON.stringify(Object.assign(Object.assign({},s),e.options)).replace(/this.entity_id/g,s.entity)));if(e.sort&&(i=i.sort(Et(this.hass,e.sort)),e.sort.count)){const t=null!==(s=e.sort.first)&&void 0!==s?s:0;i=i.slice(t,t+e.sort.count)}a=a.concat(i)}}if(null===(n=this._config.filter)||void 0===n?void 0:n.exclude)for(const t of this._config.filter.exclude){const e=[];for(const i of a)void 0!==i.entity&&await St(this.hass,t,i.entity)||e.push(i);a=e}if(this._config.sort&&(a=a.sort(Et(this.hass,this._config.sort)),this._config.sort.count)){const t=null!==(o=this._config.sort.first)&&void 0!==o?o:0;a=a.slice(t,t+this._config.sort.count)}if(this._config.unique){let t=[];for(const e of a)"entity"===this._config.unique&&e.entity&&t.some((t=>t.entity===e.entity))||t.some((t=>Nt(t,e)))||t.push(e);a=t}return a}async updated(t){(t.has("_template")||t.has("hass")&&this.hass)&&queueMicrotask((()=>this.update_all()))}createRenderRoot(){return this}render(){return V`${this.card}`}async getCardSize(){var t,e;let i=0;return await this._cardBuilt,this.card&&this.card.getCardSize&&(i=await this.card.getCardSize()),1===i&&(null===(t=this._entities)||void 0===t?void 0:t.length)&&(i=this._entities.length),0===i&&(null===(e=this._config.filter)||void 0===e?void 0:e.include)&&(i=Object.keys(this._config.filter.include).length),i||5}}t([K()],Tt.prototype,"_config",void 0),t([K()],Tt.prototype,"hass",void 0),t([K()],Tt.prototype,"card",void 0),t([K()],Tt.prototype,"_template",void 0),customElements.get("auto-entities")||(customElements.define("auto-entities",Tt),console.info(`%cAUTO-ENTITIES ${xt} IS INSTALLED`,"color: green; font-weight: bold",""));
diff --git a/custom_components/ui_lovelace_minimalist/load_plugins.py b/custom_components/ui_lovelace_minimalist/load_plugins.py
index ad2833786..49b5002a8 100644
--- a/custom_components/ui_lovelace_minimalist/load_plugins.py
+++ b/custom_components/ui_lovelace_minimalist/load_plugins.py
@@ -29,6 +29,7 @@ def load_plugins(hass: HomeAssistant, ulm: UlmBase):
"button-card",
"light-entity-card",
"lovelace-card-mod",
+ "lovelace-auto-entities",
"mini-graph-card",
"mini-media-player",
"my-cards",
@@ -56,7 +57,7 @@ def load_plugins(hass: HomeAssistant, ulm: UlmBase):
)
add_extra_js_url(
hass,
- "/ui_lovelace_minimalist/cards/lovelace-card-mod/rollup.config.js",
+ "/ui_lovelace_minimalist/cards/lovelace-auto-entities/auto-entities.js",
)
add_extra_js_url(
hass,
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
index 827cbb1fb..5803c546b 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
@@ -64,13 +64,13 @@ views:
type: "grid"
columns: 2
square: false
- card_param: 'cards'
+ card_param: "cards"
sort:
count: 4
filter:
include:
- domain: "binary_sensor"
- options:
+ options:
type: "custom:button-card"
template: "card_binary_sensor_alert"
variables:
@@ -91,7 +91,7 @@ views:
filter:
include:
- domain: "sensor"
- options:
+ options:
type: "custom:button-card"
template: "card_generic"
- type: "custom:button-card"
From d46a932a5910db6b275e4f8ff77b1b1062020b7b Mon Sep 17 00:00:00 2001
From: Bavo Mees
Date: Wed, 26 Jan 2022 19:26:32 +0100
Subject: [PATCH 016/248] Improved Room card documentation
---
docs/usage/cards/card_room.md | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/docs/usage/cards/card_room.md b/docs/usage/cards/card_room.md
index a325c5942..f5b438d85 100644
--- a/docs/usage/cards/card_room.md
+++ b/docs/usage/cards/card_room.md
@@ -32,6 +32,19 @@ The card has support for 4 subicons at the right side of the card. These can be
| tap_action | | :material-close: | tap_action for the icon (see button card documentation for options) | |
| hold_action | | :material-close: | tap_action for the icon (see button card documentation for options) | |
+# Default card options
+All the options from the button card are still available for the large room card.
+If you want to tweak this card a little bit more, below are some examples. The full list can be found here: [link](https://github.com/custom-cards/button-card#main-options)
+
+| Options | Default | Required | Notes | Requirement |
+|----------------------------------------|-----------------|------------------|----------------|-------------|
+| entity | | :material-close: | The entity_id for the large card | |
+| icon | | :material-close: | Icon to display. Defaults to the entity icon | |
+| tap_action | | :material-close: | Define the type of action on click, if undefined, toggle will be used.| see [Action](https://github.com/custom-cards/button-card#Action)|
+| hold_action | | :material-close: | Define the type of action on hold, if undefined, nothing happens | see [Action](https://github.com/custom-cards/button-card#Action)|
+| label | | :material-close: | Change the label text | |
+| title | | :material-close: | Change the title text | |
+
## Usage
```yaml
From a0ac5b03bc9994728246c310b3d7119dc1b7c426 Mon Sep 17 00:00:00 2001
From: Rick Stokkingreef
Date: Wed, 26 Jan 2022 18:56:51 +0000
Subject: [PATCH 017/248] Updated UI
---
.devcontainer/configuration.yaml | 92 ++++++++-----------
.../simple-weather-card-bundle.js | 2 +-
.../lovelace/ui-lovelace.yaml | 9 +-
requirements_dev.txt | 10 +-
4 files changed, 51 insertions(+), 62 deletions(-)
diff --git a/.devcontainer/configuration.yaml b/.devcontainer/configuration.yaml
index 17889d50f..26c1936b0 100644
--- a/.devcontainer/configuration.yaml
+++ b/.devcontainer/configuration.yaml
@@ -1,56 +1,42 @@
---
default_config:
-# frontend:
-# themes: !include_dir_merge_named "themes"
-
-# # For some reason default_config is not picking it up.
-# automation ui: !include "automations.yaml"
-
-# # lovelace:
-# # mode: "storage"
-
-# sensor:
-# - platform: "time_date"
-
-# logger:
-# default: "info"
-# logs:
-# custom_components.ui_lovelace_minimalist: "debug"
-# # If you need to debug uncommment the line below (doc: https://www.home-assistant.io/integrations/debugpy/)
-# # debugpy:
-
-# #
-# # Uncomment part below after installing dependencies
-# #
-# ## Requirement for popups, install browser mod with hacs
-# browser_mod:
-
-# weather:
-# - platform: "template"
-# name: "DummyTown"
-# condition_template: "cloudy"
-# temperature_template: "20"
-# humidity_template: "50"
-
-# ## Install virtual integration with hacs
-# virtual:
-
-# light:
-# - platform: "virtual"
-# name: "Livingroom"
-# support_color: true
-# support_color_temp: true
-# support_white_value: true
-
-# sensor:
-# - platform: "virtual"
-# name: "Livingroom Temperature"
-# class: "temperature"
-# initial_value: 20
-# initial_availability: true
-# - platform: "virtual"
-# name: "Livingroom Humidity"
-# class: "humidity"
-# initial_value: 50
-# initial_availability: true
+frontend:
+ themes: !include_dir_merge_named "themes"
+
+automation ui: !include "automations.yaml"
+
+logger:
+ default: "info"
+ logs:
+ custom_components.ui_lovelace_minimalist: "debug"
+
+browser_mod:
+virtual:
+
+weather:
+ - platform: "template"
+ name: "DummyTown"
+ condition_template: "cloudy"
+ temperature_template: "{{ '20' | float }}"
+ humidity_template: "{{ '50' | float }}"
+
+light:
+ - platform: "virtual"
+ name: "Livingroom"
+ support_color: true
+ support_color_temp: true
+ support_white_value: true
+
+sensor:
+ - platform: "time_date"
+ - platform: "virtual"
+ name: "Livingroom Temperature"
+ class: "temperature"
+ initial_value: 20
+ initial_availability: true
+ - platform: "virtual"
+ name: "Livingroom Humidity"
+ class: "humidity"
+ initial_value: 50
+ initial_availability: true
diff --git a/custom_components/ui_lovelace_minimalist/cards/simple-weather-card/simple-weather-card-bundle.js b/custom_components/ui_lovelace_minimalist/cards/simple-weather-card/simple-weather-card-bundle.js
index 56fe00fd8..3b6f014af 100644
--- a/custom_components/ui_lovelace_minimalist/cards/simple-weather-card/simple-weather-card-bundle.js
+++ b/custom_components/ui_lovelace_minimalist/cards/simple-weather-card/simple-weather-card-bundle.js
@@ -1 +1 @@
-!function (A) { var e = {}; function t(n) { if (e[n]) return e[n].exports; var i = e[n] = { i: n, l: !1, exports: {} }; return A[n].call(i.exports, i, i.exports, t), i.l = !0, i.exports } t.m = A, t.c = e, t.d = function (A, e, n) { t.o(A, e) || Object.defineProperty(A, e, { enumerable: !0, get: n }) }, t.r = function (A) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(A, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(A, "__esModule", { value: !0 }) }, t.t = function (A, e) { if (1 & e && (A = t(A)), 8 & e) return A; if (4 & e && "object" == typeof A && A && A.__esModule) return A; var n = Object.create(null); if (t.r(n), Object.defineProperty(n, "default", { enumerable: !0, value: A }), 2 & e && "string" != typeof A) for (var i in A) t.d(n, i, function (e) { return A[e] }.bind(null, i)); return n }, t.n = function (A) { var e = A && A.__esModule ? function () { return A.default } : function () { return A }; return t.d(e, "a", e), e }, t.o = function (A, e) { return Object.prototype.hasOwnProperty.call(A, e) }, t.p = "", t(t.s = 0) }([function (A, e, t) { "use strict"; var n, i, M, s, a, r, g = u(t(1)), o = u(t(18)), c = t(19); function u(A) { return A && A.__esModule ? A : { default: A } } function w(A, e) { return e || (e = A.slice(0)), Object.freeze(Object.defineProperties(A, { raw: { value: Object.freeze(e) } })) } const D = window.LitElement || Object.getPrototypeOf(customElements.get("ha-panel-lovelace") || customElements.get("hc-lovelace")), { html: f, css: E } = D.prototype, h = "°C", d = { precipitation: { icon: "rainy", unit: "length" }, precipitation_probability: { icon: "rainy", unit: "%" }, humidity: { icon: "humidity", unit: "%" }, wind_speed: { icon: "windy", unit: "speed" }, wind_bearing: { icon: "windy", unit: "" }, pressure: { icon: "pressure", unit: "hPa" } }; customElements.define("simple-weather-card", class extends D { constructor() { super(), this.custom = {} } static get properties() { return { _hass: { type: Object }, config: { type: Object }, entity: { type: Object }, weather: { type: Object }, custom: { type: Object } } } static get styles() { return (0, o.default)(E) } set hass(A) { const { custom: e, entity: t } = this.config; this._hass = A; const n = A.states[t]; n && this.entity !== n && (this.entity = n, this.weather = new g.default(A, n)); const i = {}; e.forEach(e => { const [t, n] = Object.entries(e)[0]; if (A.states[n]) { const e = A.states[n], { state: M } = this.custom[t] || {}; M !== e.state && (i[t] = { state: e.state, unit: e.attributes.unit_of_measurement }) } }), Object.entries(i).length > 0 && (this.custom = { ...this.custom, ...i }) } get hass() { return this._hass } get name() { return this.config.name || this.weather.name } setConfig(A) { if (!A.entity) throw new Error("Specify an entity."); this.config = { bg: !!A.backdrop, primary_info: ["extrema"], secondary_info: ["precipitation"], custom: [], tap_action: { action: "more-info" }, ...A, backdrop: { day: "#45aaf2", night: "#a55eea", text: "var(--text-dark-color)", fade: !1, ...A.backdrop } }, "string" == typeof A.primary_info && (this.config.primary_info = [A.primary_info]), "string" == typeof A.secondary_info && (this.config.secondary_info = [A.secondary_info]), this.config.primary_info || (this.config.primary_info = []), this.config.secondary_info || (this.config.secondary_info = []) } shouldUpdate(A) { return ["entity", "custom"].some(e => A.has(e)) } render() { return f(n || (n = w(["\n \n ", '\n \n \n ', "\n ", '\n \n \n ', '\n \n \n \n ', "\n ", "\n \n \n "])), this.config.bg, this.config.backdrop.fade, this.weather.isNight, this.config.backdrop.day, this.config.backdrop.night, this.config.backdrop.text, A => this.handleTap(A), this.renderIcon(), this.renderAttr("temp"), this.name, this.renderAttr("state", !1), this.renderInfoRow(this.config.primary_info), this.renderInfoRow(this.config.secondary_info)) } renderIcon() { const A = this.custom["icon-state"] ? this.weather.getIcon(this.custom["icon-state"].state) : this.weather.icon; return this.weather.hasState && A ? f(i || (i = w(['\n \n \n '])), A) : "" } renderExtrema() { const A = this.custom.high || this.weather.high, e = this.custom.low || this.weather.low; return A || e ? f(M || (M = w(['\n \n ', "\n ", "\n ", "\n \n "])), this.renderAttr("low"), A && e ? " / " : "", this.renderAttr("high")) : "" } renderInfoRow(A) { return f(s || (s = w(['\n \n ', "\n \n "])), A.map(A => this.renderInfo(A))) } renderInfo(A) { return "extrema" === A ? this.renderExtrema() : f(a || (a = w(['\n \n \n \n ', "\n \n "])), this.weather.getIcon(d[A].icon), this.renderAttr(A)) } renderAttr(A, e = !0) { const t = this.custom[A] ? this.custom[A].state : this.weather[A]; if (!t && 0 !== t) return; const { unit: n } = this.custom[A] && this.custom[A].unit ? this.custom[A] : d[A] || {}; return f(r || (r = w(["\n ", "\n ", "\n "])), t, e ? this.getUnit(n) : "") } handleTap() { (0, c.handleClick)(this, this._hass, this.config, this.config.tap_action) } getUnit(A = "temperature") { const e = "speed" === A ? "length" : A, t = this._hass.config.unit_system[e]; return "temperature" === A ? t || h : "length" === A ? "km" === t ? "mm" : "in" : "speed" === A ? t ? "".concat(t, "/h") : "km/h" : A } }) }, function (A, e, t) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.default = void 0; var n = l(t(2)), i = l(t(3)), M = l(t(4)), s = l(t(5)), a = l(t(6)), r = l(t(7)), g = l(t(8)), o = l(t(9)), c = l(t(10)), u = l(t(11)), w = l(t(12)), D = l(t(13)), f = l(t(14)), E = l(t(15)), h = l(t(16)), d = l(t(17)); function l(A) { return A && A.__esModule ? A : { default: A } } const y = { "clear-day": f.default, "clear-night": n.default, cloudy: i.default, overcast: i.default, fog: M.default, hail: D.default, lightning: s.default, "lightning-rainy": a.default, "partly-cloudy-day": g.default, "partly-cloudy-night": o.default, partlycloudy: g.default, pouring: c.default, rain: u.default, rainy: u.default, sleet: D.default, snow: w.default, snowy: w.default, "snowy-rainy": D.default, sunny: f.default, wind: E.default, windy: E.default, "windy-variant": E.default, humidity: h.default, pressure: d.default }, T = { ...y, sunny: n.default, partlycloudy: o.default, "lightning-rainy": r.default }, N = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"]; e.default = class { constructor(A, e) { this.hass = A, this.entity = e, this.attr = e.attributes, this.forecast = e.attributes.forecast || [[]] } get state() { return this.toLocale("component.weather.state._." + this.entity.state, this.entity.state) } get hasState() { return this.entity.state && "unknown" !== this.entity.state } get temp() { return this.attr.temperature } get name() { return this.attr.friendly_name } get high() { return this.forecast[0].temperature } get low() { return this.forecast[0].templow } get wind_speed() { return this.attr.wind_speed || 0 } get pressure() { return this.attr.pressure || 0 } get wind_bearing() { return this.attr.wind_bearing ? this.degToDirection(this.attr.wind_bearing) : this.toLocale("state.default.unknown") } get precipitation() { return Math.round(100 * (this.forecast[0].precipitation || 0)) / 100 } get precipitation_probability() { return this.forecast[0].precipitation_probability || 0 } get humidity() { return this.attr.humidity || 0 } get isNight() { return !!this.hass.states["sun.sun"] && "below_horizon" === this.hass.states["sun.sun"].state } get icon() { const A = this.entity.state.toLowerCase(); return this.isNight ? T[A] : y[A] } getIcon(A) { return y[A] } toLocale(A, e = "unknown") { const t = this.hass.selectedLanguage || this.hass.language, n = this.hass.resources[t]; return n && n[A] ? n[A] : e } degToDirection(A) { const e = Math.floor(A / 22.5 + .5); return N[e % 16] } } }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAHlBMVEUAAADL2/vK2/rH2fnI2vrG2PrJ2/vL3fzG2vzI3PwdWi7LAAAAB3RSTlMAFzNfjrze/OgtNAAAAdhJREFUeAHt17WC3EAMBuBZ3nIZOqcJVGGqwlSFqQpTFY6yVTiZrUJ3Z+tpj3ynBY3Hv6vDr5aGJMOYbetX49CtmsE1bxO9M7DcEVr02aDyt2nJvozxH+H1xPH01oAuUOyvwXRoxRUDKdCqAF9Qlj2XKAaX7TbF0EMqk3gNTiD+GECRBHaqR0lAnZSjMQG4ZVEDiybQFQm8ynjCrqwJzzIm5GkCvAU8oasSoL4QNXDPIgDLhjdfgSadBA9J3DcpKjTpFXiq4g3YSeIdWAbxAXx68ELcpkmDk9kSBvwnW2cw/zd+v6Ym4DkoQeIX7cOWJPGc0hx3SXBsJiWBQwmPhTXjc4kV/wv8uIoP/Wvaw0ro7Y4+a95ve5W1Od+2S6z4S1FgzdseOdYifuDJeMEOUQ0shHgLnCta7hI7RYnVy7PbbC25X12G0UwN6SYRWTsbZNmEXTS33126oXuCRb8eBUglJH5R+PiA3krZuSDBdD91TXaSmuOYP/6b/oXTGxh3MuXVYaf8SCmFnXbF2x6R9U2gd2G1hD6/qMNj341bYWjdEl/+HevkeRscs5qu2ZjcHav8qBmPvMr4Ic2NZeh4fbW0Yx7VkMvrRRl+P3w9vvn0yY0zO8y6tW0BcWLk3nu06KcAAAAASUVORK5CYII=" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAHlBMVEUAAADr6+vn5+fo6Ojo6Ojm5ubq6urp6enk5OTf399QNH53AAAACXRSTlMAIneu2P///z8+tLZ6AAACF0lEQVR4Ae2Wt5bUQBBFtfhwIgjxEOJdhHcRtigU4lohtvV2MiW4D1ijr11XpR76lKp3Y45uMq7uvPbq6j9mYmJi6fTD0Ly+PNtr/Zmg3Nvb3z8KiQ9eiFMf8HF343r4B+DDbvW/Qi5guVy/P2Q0QHuiKDwyAn6U6g8EK+BOOcAKH8sBVsDF4pBmYJv2vVd/JIwKCJ0jHHIEPPda5AnfnVUUPAEzZ4w8wZmKo8GOqvLVmTVPcDoRfKEdq99nBSRqakN4fbkzfXaFFd5JulmctgaJuQjAk/IgJeqeINxNwrlCixD7FShdYWFYIUZ8c6ehyYSe9R2GTf7GDRBhRRPSOdKWBPR9zVBFl6LfIkkgkvK0FP0ASVghloSobWrdAEmoiTThx2inAdMkYklANzKsMMIKEcWdBFy0E9cYYbueWBK+2KWBHMz7mraRhGWz+GAFIomIW8jqOOzUi7CyIsZOgggHvPbLBiKB4xbfsy2KMWoawGIiUGAlCbyFCjfgEhcCLU6dYwVhpy5F6B46AJc5cYIAFZYYHjLHKUGXq9+JSMh4rsJBV9CdoKSH3hF2hCHAnDTnSwHggdeL49URpB5Cdv14jDEYecKdqhwRkSfEWVWO0B6khLfZU4W9gJQQ8/vQX6c+xiHhZZVzDQ6sZlflLD3ECHFIoLv2QnCL/YT4ZPSiu2KrmcGM+qZ3lX7aj3D/VFdNTExYNgHAL10vmVlOfQAAAABJRU5ErkJggg==" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAOVBMVEUAAADHx8fKysrJycnIyMjHx8fGxsbDw8PBwcG/v7/CwsLCwsK+vr67u7u4uLi3t7e4uLi5ubm4uLhyXqCUAAAAE3RSTlMAFkaMtND6////CGT//7BAhezMkbzxVAAAAi9JREFUeAHtloeS2zAMRF0JrA60yv9/bBQagS2YpOj05PiS6zvYURk8Hv5vOp1Op9M5ns6XawjXy/l0bM80c7oGIr5D4XrKZ4ihgCzTwPARKMFsHR/DS4axxWdKHM+BFNZ/qeN83GTwFdZ/imWKDMfTJZDBilZcTsfhniFmgPEKp0yREHS6vwK7jLCivQDbv2eYqFjgxkNiFHAevQKJKyJ4RpoKcNMbMt5yHWm83MZ0Q9ZMfLNANo90EvYAiNMmE9sLeH59KWdfkMtISwFjGQ8ZxkXACqSUiVItmJfbNJYXwzjdlrmeGVLmoHS6D1gh+gU+MNn8Gh+kmelf2QdeB+0+SOPcFbD3AfCdPiAd76/A1JkiNl4voN0HOl0/Ia6g6AIGqw+i4IGI1ApsfMUHOt77oKGADZkqPgBQ9kFLQdYHcDeo5APZLZA9HwA1H1QLWnZ9uw863QfExq/wATt+gQ88OR94uN0HRskHWUT2fcBFsEKkPsgiiZoPeIOe/fFYcYaJRmJCtEBpKpDb+M0Hog5g+6fEjQ/knYLMrvdXAJ9pL0DWB+4Ykcs0FVR2PYz4q30wdB98Gh8M4w/5AErFB7aEwO/6AHf0a9YHbsk1+cCf/e0L4HxAMMRo9AFW/BWkTw8fMPx8BTs+sLO/vwLWDiKvA/GAyz6whfa07AUVzAdbagWMxObsn+9wPmgqKO96ZCj4IO4VFM/+G+S7fLC366FIOROrBaVd333Q6XQ6nc4Xua9QVFRZEEsAAAAASUVORK5CYII=" }, function (A, e) { A.exports = "data:image/png;base64,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" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAyVBMVEUAAADut0371Uv92kX920b+2kL92T/CyKz92j792Tvvs0jk1s3s4+Hl4d/r6ujp6Ojr6urn5eTk29ji19Po4tjq6urk2tb81jvp6en60z3r49P32Gnr6OHz1pbo6Ojr28Dj4uLm5ubn5+d/xLn8tl7d3d3/sk/k5OTa2tr3v3jh4eH/sErW1dTh4OD/r0f/rUXiwZr9sE/+slD0o0P9qkX1pEIP3/kL4f0q6P8H5f8A5f8n6P/6p0Mc6P8P5/8E4f0F5v8C2/sn6P8h4jSJAAAAQ3RSTlMAH1+bzey9Bf//SR1mpNHj8b5fNZP/T////////////////xH////////////l////0ayG+q0o7k/4/07PPNek3pNP7VonwQAAA8hJREFUeAHs0gWiwjAMgGFWDzBfmD/uf0rcgqV9bv8B8i3NJv/92CIhldZGiugjpluh3SFwWtj3nj/V7hwA6On7fr50jgLg5CuXmM3jJM2yJI+L2XGEVY4Cu1S4YMsqw8vi0pL5BAgXFhnelBV2Iuv7AMig8WWK92rSqm3b2tV3AAi4tM3xfk2DXX8WKKCt92lTfARsGs4CBUD4Pk+Gj4Ft41a4A2jP+YgMgESAc5HX+2Qs0Lz0FwKEvZFNkQe2d6hrAnj/qTn6AM1y+7feAMbnACxwPjQQwO/KqS8wbICNABAGLNj5ZIUaNtXnDH9hDiArbAmS5C/AAmQFWl0LDqhCACQN3XLsIw7ImPlMmK0pLa+FxUEgjLp7Y++9TRjSg255/5f7vwS7IOO55xyqZtD+/Ig/qkMBQDRZfQrMvHYCG4EfTNvfHgEGRopZkyxAo9gbmHr8hyRFgUkUQKH91TPekD5maZrmrIlEARqKL5H1R1lWFEUa3CW6sfoqkJcIgEoemLTFW7QhPmY2kCpxgAbSQ8YG7RIbSNMqJ6GfxsJrilFcwm/qQFUplgaoL3to8Ee135zqgFI5SwMz0U8FNkgl0DeBqg6gIPJ7bmp74jhhYwNpE8AaZIGp4BDsEzAPARS8ayAQPuX52xMwT4G8hqWBwF8mxuijeQl4C0SCLQKrx0F4Ao4A0OHAwhNonx/GcGkeAwoBX4FemXn/9u/z15HxBVAIBPotH8PrCDyB5wAKwFkg8pyxf5NI89G8BPxrkO8Q6E+sP8qeAk0BCYst+BfQ/vj1xXUAT+CB7E6pVPVcoDdWge+7Cv6jeeVPgznd3rT2BYatAP0z7zK3/+8/bFadQIDJ7Z+2WyHaw9KlB0kBbICZyeHfhP3gl1MPotN1BVxDb34ehv3gv0sPylMTUKoJAE1P6POqJeG3yw6yUx24LsBCd/LzrC3yxw65PWEEmgYqL5yni1n/p726QK4YBmIAqgwFrvEHC/kc5vvfqejOZjregrXlvgsoYFl4o0Pud4SN7DL3OsUwEZ9yr20GG8eTyFfOUMQxgq2e/7SBX1GWBR2w3aofqKqbpm6pgO29Dn5986APDtg6kVKZunlQbxBk+0SrwNA4AxdwivUP5PRUQAa/UQJGJkCtwCQBExGgVgC1BNQIoXwg40/UQVVIQBEeEEE3N86MIFIBRewS5hhBpAKqYizLsUAg5Q/bUSpgR6mAnW2m7JeVTtkvMxGeWWS/OMR+Mdj9EsR+Mbj9EsTlTKL3SzD79fWfiNgvGrFfgtgvBrFfX+/fLZ2VqOfdJyPAAAAAAElFTkSuQmCC" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAllBMVEUAAAC8y87X3OnY3+zU2OXN3/3J3Py5usLW3+7O3ffF2Pnd3eLl5efp6ern5+fl5ebq6urH2vvp6enj5ObC1Pfo6OjU3vLt0rDk5OT7uWfb29vh4eHxw4n/sk/p3c7W1tb/sEr/r0f/rET6qkfqokj3p0b0o0T9rEYR4PoL4f0i6P8H5f8A5f8K5v8J5v8A4v0C2/sC2fne7Ib2AAAAMnRSTlMAF0uOL77/B6Po/2HG6v/f////tf///////////////////9BMrIbrKu5E+f/bnqaTqTOwt04AAAN7SURBVHgB5JiHdqswDEBZwWQgUxM1zNL5/7/4HB+F+hAbqxlnvftG9721lB3918RJmj1Rn23yPI+fphdFfkY8bTrb3PA0/y5/akDQ73/3iLJ9cSgB5CHdx5FFQfq7liyytKwsoMjm7sscSG72J2S3KUm3yedCcateVi6UTMyGX6hw6xJEXblRqipElOysQnqDP5aVL6CRcXqkwo1rzqBaCyjcHu3C5s/+yo8yVK924eWPe45hLUDsTEEH/l4QsmIEcGcCdIR8E/MDdcUJKDhSgUgFewG8gHqlwoW8SGJORHIDaAUIztUu4fjtI1iNnSa0blHyA+qo2Rn0G3ovY2yAG0B9hCVpFCBl+YnlF+F1G9wye0JuqnK/nshW1eGAQiyTtcDea0eNYvg1tfjrCpTCUwMAyAug9BcOHn/Tdj2ngKGCdAYQhrHr+kYXkBXA2hcAt/9t1AHGGXDGt+nGGWhaHTAFdqAU7BEphNNIgZ4dwD1vyTQgzWQCDTL9WDIvpspseBzfKQDcAMa8KxoN6P0SaIAbcM8ou/Y3rdabQK8DVAj7sXAGROO4CrxbASowAofwEmjD77+BxgAcv2/L2dVV4N0OUIEVCN8hqPOG3x0BZwEX1J5AoixoQFaAgHAg9QSEtH4GhndHwFnAJfvIQ6YuAA3IMSIqrAXiyEdx+QmgDS8upgSs+yXZ/ENCoAHZAeeU+BMi4t74zYaXAYIKfn8ZeIKj1DwgYvxluCTA68ckWi/02n96X/JheH/rrYI7UISfBNKAln7N0M37BnT7D5yXaga3/rOdOo0JAAA6/SIKkzn1mtM0UQDO4JUfiojDl1v/OUznQE+BMwu9TFj+76WdGCfrANeFRu4jFsJhpwMQnYU+j/5f1vSKD4efpZn4115dHEYQA0EULZ0Ux7AY8g/ObLep56Aye18A/RendnyMVbl/WHwIe0zvW/Ex9llMz2xQWIthk5i1M857xwf0DyjElGLgA4t2P90JbGA2eJeJ6U40XGDe8b6cHmQiMM/zYfUP6EEYDMx3VryvSKBgxHxvgyJLIDMBC0WUQCQCKzRVAnU8sEDlJODGAwa6lh40DAd2nGnUfah/AeG6991hPLDiM8lf4NMC9pMD6+l+8Zbz/eIZZb94xH4x2P0SxH4x2P0SxH5RyP0SxH5xqP0SxH7RiP0SxH7RZL9+l4tr2oowXbK2IEgAAAAASUVORK5CYII=" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAsVBMVEUAAAD0z2L93U/93lL93Ev81D/93Ef+3Uz72k75zEP93Ej93Ej920X920P920L92kH70z/92j/92kP92j381EP92Tv92D7+2Tv92Tn70jf810L44Yv15afx6c3x7uTv7+/43G371Dzu7u792Dfp49zcxLbt7Ovm29Xs6+vp4t/x8fH70jXq5OL5zzT4yjP4yzPq05fyvzP4zTP2xjPvyWD0wjHo3L/2xjD4yjLm5eTkxIAPtip5AAAAO3RSTlMAF1V5o7zT5foJl///////R/9w/yT//+L/8v/////////////bL8tJ6Ib//6P/nP///9P//1f/deP/x8TGymgAAAPmSURBVHgB7JSFduswEESfGSSHE7Nkx4///wPrVVm0ktvDuaWDczOzOv3x4MEDZ4IwipM0y1eyNImjMPjG8CIsU0JoVe12u/0LFUnLsPiW+EOckwr4KDgCVR4fvvzho4zQFdlwfKHKTsXX480CIIs2K0KIf0G7EXA+H7NwU/wlIYQ6CFb2yWXDx88JEQZko7Mg9y1RlIT4CK7H0usSQUokAUUE11saeMyfEj8BGK7pxTk/I1sE1/rinr9JAAb3/X1vIHC5Q/Ga7/eKXg0FKijJZgFQYvkhIfaFEME1RA6cY4K9XdC09kMnUj66kCJoki0D+QhsIxWZnI+fQBE0dWEURJTK8WoBVNCczAWohPdCIDBXOJmy993685qPC4wV3guQfhgZ45yN49Dn3cpegC8kqPX5B/pM3o+Mf2QUjv07R0TQHLSCmAJkYFyBDa8KfCEg1p44h/yecS2sh6GwAq+CVnfmENYZuZFxAkOHLwSEGkFJu4lxC2yaRYsjshBQagRp1d+5nX4GBbYQkKr5Ae05gBpuN3yhZgnURzrdOc40zzcwIAWaRX2oEeMOsGcDJliWkyL4yZ0Y5xkUWIFFufIv7kgPAjCcrYJEFvx2FbBcGJACi/yM/nBnBhA8A/kGQS0J/roLWPdqMBUAQYtcALsCKK4A/FUKAJ8F/7gP/wHGxmGCMk2jFAA2LyT/GxcKuYA8UcA3cx9moZAL1E/tmYVuI0EMQKfcFa5OWG4nrInHy3D//2Fn3ST1MjnivID4PXkZGtuQgI9nQ4lV1c+bKa8CAZ9UMFxwgQdV5SgK6M9nMIakzu+wjd1YgNb6A6lQD/wRb0TsJwI0tJAoQX6HLw6wn/h8QbeQVmdu5IuI/cR76ApnIlXjKPXrzzAGDrROBwehn0iosOJE2jxYS/20jGJkf/PC60bs11kcIxesarCX+vUHBbjgqwYHqV9/xlQAMHykq7GR+V0AEU6FXLVYC/y8iMAVum6hdiI9kZ0nMMYNIBlBdxBwoPBUBxst0BMJBYAwBlLVyUGi1yX5T4EH1cN2oZ6XEIIB0/8w5Ga/QM/HOgp0LyBmU87X8wCngFUDbPaz7Ez2O0DkqSFu1vPtxEfoBiD/jRrGO+rJcvYnZ38x4bHmZq0nm3n5uAU06Gd2az2DMvj1R9P8xOawn2h3evJTgJf/pMbfICuHybIgYT1aT80jDYchN4ExEgAv6ZJXLORogW0AcNYrFiYtTk73h51yokjVQry8qGoBoYWBIuelvyiBVRthKgj0jG9j/C83TeDF+uoSeKmNECnAFQCMbOqpy3Hj5/YhKl4QX4roweb+jZrKlStX/gHY0DfPBrPHXQAAAABJRU5ErkJggg==" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAS1BMVEUAAADO1fHO1ejZ4fLR2ezd5vbB0vXDzufS4vzP4PzN3vvV3fDk5+/Ayerc5vfu7u7v7+/t7e7k5eavwOrT2OO4y/DAzOi2ye+/0vYf7YBFAAAAGHRSTlMAByNNhqbMO////2bRFP///+v/////9qxLSnpnAAACKklEQVR4Ae3U2YKzKgzA8QRBXECgdTnv/6RH+2V2LWLgzl/n+h8NOHDe7XZDUUlVY6G4Vk276voi9cps9U2HkJ1QW51UpfKkg8ws5Uu9QP+ZL3IC1rS/KMhJN+1vAjKS1C91xKr5O0BCNqianQE65/PvDcC8/abcEcjmpdglrf72s37Gdk1TvcxXYNoDFrLo2yOYa0FHIAvVlh0g/mS7f3INqFuyMyPnC3R7cp0A5YfB+Y1zw9C9ILAhxVuKf3JDngFV220TBr9j6CywmW43T3rgst3K+UMKgUd3XePfCQJY1PF6iNPAEe2vOBOw8XGOsSXt/AkB4SrjT1FwkfYnVSVfgLGkyvuyrxD8aQEuED6BhnTSJwtG9YK/oYjQ8zcUEap8d4jxb1x6DhOfoDyDc/EJhjfAKYgIrP6qKjfAvQQstSJH+kKH7D6EMtfUfbElPjRH4juyzH78pgZu35nsh+DIuVMWvH58ABhWP74i0Ix85JCJ4fVdDxHaMfIrATGSk/ePZy0rYRHhEJpLeTI+N9NqPpxhw6U8vcDnAAuHxCM9T+aP/KThDREu1GlBNEHCW9ak1cnjcz8LRKB0iXHqr2J9oo07Wybjn+ePj0jwmFOen2gZ0vLTpocUQo7j471xpPr6o/uZBJdnFMVXtYV0ejqtgktwmU5ZEK6yy/Tfron+1t8igGQdQabFAhfq+ihfa4QsUMvp77NTPRe0ul+Wep7rRfbaJsRvt9v/h4jJKdZPEXkAAAAASUVORK5CYII=" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAATlBMVEUAAADj4+Pp6enn5+fp6enp6enp6enq6urm5ubm5ubg4ODg4ODm5ubo6Ojc3Nww6v8Y6P8T5/8m6P8H5v8A5f8L5v8N4PoF4f0C4P0D2/uDNJb/AAAAGnRSTlMAE2SS0e7//7smT/////0a6ehI///bMaX0k6g43vIAAAKLSURBVHgB7JjpmuQgCEVjiBdTgu//trMPX5uuoLSzT5/6f09xyb6984eTdjoymBm57OmHpxO4A+VHOs6DXwHOjx/17ws/A+D8Q6Ygfg4+wWU9/2BHAOTVejL7AvC5tF2+Bz/AkNgBxtsNeU7AaXG/jmBp08SzAqYfvgDLXyipjAVLJZ0cEeCMbzgmyD94A4wrtYooM+dC+8w4FBXIF4PiM6w0dOSogJsJPsOUflBDRm0iYgJV7J7gERdIq51AlX7AWdwLai/QsngZ6tH2ydALnBlyXIBPAjPoN273oMF8E0gvQLoRhPNNIJ1AKS7AQCCdQM9oRRgKxPKdEXI8X7/ni7wUSOwwxT3SqhlURx1ROB9i8b1hn79UwKW+FMhoCQnBeMDyL4YytWUM0YvADPm5gBAItxtOhy9ICFJNYLgVbQeM6ACGe7FIigBcvwf2Bu+CWhDA4lRE7SfSn2g9STCN2u1Yr+TtFtLQADcC2u45fkC+pM0hBwpSyx8NEF+Dky9pczklkv9aII9tQGqT/YQLMg55e37ZZqDq1uP0Q9MfQ8T5/zrfv6M4quKCheJpvlAKfpDK1VvGJb1ZfMTxoNJaHdEmX6He+dheXR04DAQxGO7ANFrqv9DD1eyBSWH6Hv9wDLpB/TD0m2UcWWSTfZi2CsCimuzLtF4AgEXTW9WvFXxhkQSrwp8CtIKKRRDNxZ8Fn1hALIJkLrWCbywgFkEwF1hALCAWQTaXa4GbL0f/RXDz5eiDDDdfRMW+oXhBNV9kBcbXesFmUcSUc4pqebkfXCuxCLhWWhHMrNWEL/NF1tZKKYK2VkIRRLi4vwgSXNpfBAEu7C+CDJf3lNv7i85+kH2tzrloeC3ayx7vgDWcARqOBsEAAAAASUVORK5CYII=" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAARVBMVEUAAACy6fHl5eXq6uro6Ojm5ubp6enq6urm5ubi4uLj4+Pf39/o6Ojh4eES3/kP5/8k6f8M5/8G5v8A5f8G4f0C4P0E2/uRTESCAAAAF3RSTlMAEFuV5P///8EbLv//jCngQ/z//6X0kyzJZw0AAAJ0SURBVHgB7NYHlqQ6DIVhOejKLsv7X27ndj0KrELAm/zNSZPuTz5Nv7h/QkyZISLIJQa6WE2QBZR65XyWFUi+0TVCkS2A5EoXSLINAKTQaVmMAMCBTqksdgByoxNuMocLClUMGCodxfsCEs7fXzMAPv982gEkOiDs34dU8iuOAPL5J8gO4EZe2RfIl5/Ao9aYVURySX3P6SRvgD8KineiqdIT7A3ICHyQFMgSXPvjGvEIqCKSIfoD3NoioJpOvsXrQFsGtBx9y7BFVwHrHPhYYBT0S6QJde8D7R0vAwi07cA+f+wzLwKa/AHMfAV4EdDqvUSY4XYv6F068sPK/Cn6BL1j32MK7DgDZv2Pm+dFgx3gQe/i/k8FTK2tCsZNCHDOA2P+oVB2vcp4StukkGlTx2rcxo0f2IEKH2lfBeXBvERU4LKaf2d+LKrCQcfgqhDpilMYc8qs49fHH1WaCOw7AcU7fcQ01RV78TzQaa5csM+VDNlxgXS1bz5Drttg7HMg0409++sAR3oitP3XB+q5w0Ph4/uF9uhWgY197rRPKGwcv/qv/1otrJv777C5zz2QR+iNGXMP661Xcguxl9yeyqXH+tpeXWQxDMNAAG0OYBL4/jct+ikrOS+acvvXEzDO4SP95VIynvHVRtTqVoa51fj7t75Qic8o9IWl0VVbZhm+sswehYYyyfBQAhNEproZNvsnSciIm2EjgRkyZTJD8TlSMupm2Oj7TVEmk90MGzfj6zT0SYaHkYl8gfs0Y++PyKIqGc/8fV/HIay/YEB/AaD+WoH9BYD6ywNczsAM4XOE99d7ThHWXyu4vwDWX4Av7K+/E4vvci3LGOUMAAAAAElFTkSuQmCC" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAPFBMVEUAAADZ2dnl5eXn5+fo6Ojm5ubp6enq6urg4ODm5ubQ0NDBwcHo6OjExMS9vb2/v7/AwMC8vLy9vb23t7ftsDFCAAAAFHRSTlMAEVuR2P////67J0z///+q+4HR+IsFiaoAAAJsSURBVHgB7ZWHYusgDEUlY4lhsv//Xx+NGtrEhliJ3vbpXvdUAwwbfzg4uJHYe88hDmie7tjfwdHSkUa/QJjABox+CWY/mlTh/DJc8BHeZvRtQYHeLAKz7wvYp7em69uwgQF9B668bqB1Ao+m850LmGz3cy5gZzyAKnhr0HFdvjDabmgVvLNJo04Q9BPQCTgEouy9D9G5NeU4ZT7T1ZBl5vm5I2sF/iYQvEODHZ31iKqgqAboMOgF0qMqKDiDU3wvCPeCHPVL2hHkmaBXA2nzRVAN+ZPhpSXiZcIHdC9gbAheyKdrPlEVdJukz5cKKIghV5K2Rcz9CgqS3y8hKPPrkK+K7wLSrSm3oWu8kIVOj5w6Xw4azQ3D+quCu9zyhWdDQFbFi4AWDXHVUeanZKlgZmg9rh3z2nCBJH5uaAiQldwalKnSbRGMrOIhXuheFolYQa6BM8MADSIrIApEWQT59iKGBA2QdAVk+ewRgiYuKwpoChy0GQ3yCaFDUDQoS76mgNVj6OQTQpdEmvy5gAZ4Aob1/VE3SBjp9fwIa3A9A/X642AdGKnz/2d9/+fgSJnnSCgv5pND0IAuEHGbh/Qg8TpwcjE8Z4xuSLCx8YewK8DPZF/YBL9DgGlJkBCsOBwP+CjA8k0wIpXU3elecDqWzxLYcN5/cJy+BFOJL5zBiJMYzkkE6Sz5J8MpH0Rx/XCQeBmLGUn6VCnVWDNdpIp94TKBPTKK2vy/TlBXs66s8LcMGQ+fmy/vZGXRsPkS/3XQRGE2Csm7fL8qLqZXRaqbI4K6UWZzOOyXruv94U984Pz5z+RNcCnAxsYv5gcBJmV5WFk6DwAAAABJRU5ErkJggg==" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAYFBMVEUAAADT3t/h4eHq6urp6enn5+fp6enq6urm5ubG0NLLy8uds7bo6Ojj4+Pn5+fh4eHe3t4U5/8Y5P0B5f/ExMS+vr4K5v8D3vy+vr4A3/28vLy9vb29vb29vb3BwcG4uLjMVSTuAAAAH3RSTlMAD1uV0e7//7ohOgX///+M/+g6//3/252t9H3R8/+TcABA0AAAAzBJREFUeAHsmAe6rCAMhUWGBO8kwf1v9jbsSonM6+9fwPm/k1jpfnP+Y3r7cICI4HxvXp0+WMAd4IdXxj/wBKB7e9VsPF4BgO4lLSxeA5+gb45/PjAjAHDPxvEQ5gWATWN6wzQwGxp2bbAgiNzu8HR1AjQ3BQ+sE4Brvz7zArCtC0jnN1xKvihoG9KAGgG86TesE7gfXACAmYUQ0XkbaupYrUDGLwPFnZMtbl20AlwEEWtarlGEM+PIIouACPqcoNcLeGTeCD6xrXfxcQnjQUC++TG0hcZPw1aQ7eBuCmYDTST3QOp8gPHbsBeASQhu5Mt3PssiyA5JnR8b8GSglUF7nwFkG0QDUamCU+cDzfksW4HoLlOAXIMpn4WKM7LaeACO+ZGNoK9/VECVIDpKSzCgio8X0VyAZTslX7VlKELzBqJjNbhrQYDq8AgvG5gleYEBJXP+xpEdUfcAFbLJXzaRfVgMoi0QA2VL9oHqlQViHMnRMKQERlGBlrclHeEuSSBFAYkCOhFiWNueRZIFZMj+gCgGlChguxyG6wqk89kUfgK5LV/6roBxUIBivn7Dy4+4lOefyvddDYGz148k8yVUH4Zwej5CqXzuNcc5TJf5X8BlPgfTaTDBsUCaQ/oYhjtHasG7sYjz4aO9OtlyEASiMHwrO6xNBolYiL7/WzYcbKtP5tBmzpdxVb8zC4Ovh2HGTZnVyuB2eL2J1vinOsJBcf4cBRvhENqM6EaB7W9ge5vAejNZ3yTQaKDB9cgcChjaOULlx8jVjnYD5KzDpNVAi6tVcWot/DfAUsd/1UyHyNukqzRQdTbxM51klpDnmRwwuRiED5zlBiXI5USfv5LgCAo8FhpGGeNjQgVvsGPdtG2zRiE97no+ZsdiR8K4Be7tqL9JYFHrGagXmFvlp+mJ9QfOAhFKkcuz+xD1OeF2xxFzYYFlujRDlC7ZZOdcSxcJSuR56dLMgXTJhsRD9TZHUcCEEAZhaAAsQ/xnMJE4v7zgBkeABhJywWFCXRh1VL7gaGB3wSHWABOKaWAHQwPgGwTAGmDcIgAJI8FtApBZ5mOIoEputHKc3jfFjOf29QPQe5BuJum+4AAAAABJRU5ErkJggg==" }, function (A, e) { A.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAKlBMVEUAAAD81kP71UL71kD81kD81z/91z793Eb4yz/920L92kD92j792Tv92TcDye7yAAAACXRSTlMAH1Bzm8vn/wvXXbMnAAAC1klEQVR4Ae2XNdPbQBiEzeMujE2YmZmZmZm5CmhUhfMTojnXQbkNO12YmaP/El8u1r7S+uSvC31b76Pd907SzaWa9ccq3WPW6j3Hdq0c3rJJ9mLPNY6qyvfV0eknGvszc1z1UyXfL98+0rWR//QexwFQqZwf29gfASqXEomM9jtuDfArmkholV7jAFAa0LpoX6w+DgFa223+M0594OnchEIgADy/Xr9UO6cmFQOeL6sbsMcOPEQE1N4J5cWB59uSJkACgAf8Up11khKeryVgjgAUA/fppRB+l4Cq4i9Ih2SAxxYje64bvnwAHtgbidcbQLzTOVHIBBCwNwKMEY0sCe+kv7hHJGBmA9w1wEe5d1kR4AGoSCAYKoCCXFSvLvAi2Co/NQTUEkoEvJXvhRzBo5kN8F7MLAPQKAZ8w9SZqtHY9S7YgABbl3O1WUNhQIkWKQimhkBeua7ZYxeNGFiKV1V5nn44AtBIAG9CoJ9SntLtwwnQCCOIdR3n1aQQwADepnnVBBOBkdEoBLAR69QveRyAEYIPAjAR2o8ANCJgH54dBpRphOCjBKRK3CgGsJ8baUlA+hFgA/aRv0yNaAb2I4CA9T7WB4Wo0QcBQPCjEQHz4UUhaiRejfHsRwAAvHz9yY8ANBKvd2fuzwHyA8rf4cdzgPhEczBxAAD8BDJkRgAaid9MsWz3I+C7+H0vsBdCwPsUNCAxIFxVqMB+Coj87rPkR0BIyAOleID8FKCPLGhC3I+AGvIueuyyHwFG0WM384zXEwHYNmgD2xGArwdqD7f0I2BbDMjARksqG0EL2Q873gvobB3/dwBrCShuJL8cGbuGse0DyJGh9MGoPxDEx5bwQe2ifhmwDC6agualCaAz0i81N2VRb2M3daDt9ivNJmOP+j/QxFDmUCDaGH3smngtO0T+Rhe5Q8l+Vma29O/s2pTL66ZwXPvlla7Hhz7ietysP1A/ALZC9b117sbZAAAAAElFTkSuQmCC" }, function (A, e) { A.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDE5IDIwIj4KICA8cGF0aCBmaWxsPSIjRDhEOEQ4IiBkPSJNMSw4IEMwLjQ0NzcxNTI1LDggMCw3LjU1MjI4NDcgMCw3IEMwLDYuNDQ3NzE1MyAwLjQ0NzcxNTI1LDYgMSw2IEw5LDYgQzkuOTA1MzAxNjcsNi4wMDAxOTMzIDEwLjY5Nzg0MTMsNS4zOTIyNDg2IDEwLjkzMjIzMTEsNC41MTc4MTU5IEMxMS4xNjY2MjA4LDMuNjQzMzgzMiAxMC43ODQ0MDM2LDIuNzIwNTQ3NSAxMC4wMDAzNzYsMi4yNjc5MTk4IEM5LjIxNjM0ODQsMS44MTUyOTIgOC4yMjYwNDgzMSwxLjk0NTc1ODQgNy41ODYsMi41ODYgQzcuMTkzNjIxMTEsMi45NjQ5NzIyIDYuNTY5OTE1MjIsMi45NTk1NTI0IDYuMTg0MTgxNDIsMi41NzM4MTg2IEM1Ljc5ODQ0NzYzLDIuMTg4MDg0OCA1Ljc5MzAyNzc5LDEuNTY0Mzc4OSA2LjE3MiwxLjE3MiBDNy40NTIwOTY2MywtMC4xMDg0ODMyIDkuNDMyNjk2OCwtMC4zNjk0MTU5IDExLjAwMDc1MiwwLjUzNTgzOTUgQzEyLjU2ODgwNzIsMS40NDEwOTUgMTMuMzMzMjQxNywzLjI4Njc2NjQgMTIuODY0NDYyMSw1LjAzNTYzMTggQzEyLjM5NTY4MjUsNi43ODQ0OTczIDEwLjgxMDYwMzMsOC4wMDAzODY2IDksOCBMMSw4IFogTTE2LDEwIEMxNi40NTI2NTA4LDEwLjAwMDA5NjcgMTYuODQ4OTIwNiw5LjY5NjEyNDMgMTYuOTY2MTE1NSw5LjI1ODkwOCBDMTcuMDgzMzEwNCw4LjgyMTY5MTYgMTYuODkyMjAxOCw4LjM2MDI3MzggMTYuNTAwMTg4LDguMTMzOTU5OSBDMTYuMTA4MTc0Miw3LjkwNzY0NiAxNS42MTMwMjQyLDcuOTcyODc5MiAxNS4yOTMsOC4yOTMgQzE0LjkwMDYyMTEsOC42NzE5NzIyIDE0LjI3NjkxNTIsOC42NjY1NTI0IDEzLjg5MTE4MTQsOC4yODA4MTg2IEMxMy41MDU0NDc2LDcuODk1MDg0OCAxMy41MDAwMjc4LDcuMjcxMzc4OSAxMy44NzksNi44NzkgQzE0LjgzOTA3MjUsNS45MTg2Mzc2IDE2LjMyNDUyMjYsNS43MjI5MzggMTcuNTAwNTY0LDYuNDAxODc5NyBDMTguNjc2NjA1NCw3LjA4MDgyMTMgMTkuMjQ5OTMxMyw4LjQ2NTA3NDggMTguODk4MzQ2Niw5Ljc3NjcyMzkgQzE4LjU0Njc2MTksMTEuMDg4MzcyOSAxNy4zNTc5NTI1LDEyLjAwMDI5IDE2LDEyIEwyLDEyIEMxLjQ0NzcxNTI1LDEyIDEsMTEuNTUyMjg0NyAxLDExIEMxLDEwLjQ0NzcxNTMgMS40NDc3MTUyNSwxMCAyLDEwIEwxNiwxMCBaIE0xNSwxNiBMMSwxNiBDMC40NDc3MTUyNSwxNiAwLDE1LjU1MjI4NDcgMCwxNSBDMCwxNC40NDc3MTUzIDAuNDQ3NzE1MjUsMTQgMSwxNCBMMTUsMTQgQzE2LjM1Nzk1MjUsMTMuOTk5NzEgMTcuNTQ2NzYxOSwxNC45MTE2MjcxIDE3Ljg5ODM0NjYsMTYuMjIzMjc2MSBDMTguMjQ5OTMxMywxNy41MzQ5MjUyIDE3LjY3NjYwNTQsMTguOTE5MTc4NyAxNi41MDA1NjQsMTkuNTk4MTIwMyBDMTUuMzI0NTIyNiwyMC4yNzcwNjIgMTMuODM5MDcyNSwyMC4wODEzNjI0IDEyLjg3OSwxOS4xMjEgQzEyLjYxOTA0MzQsMTguODY5OTI1NSAxMi41MTQ3ODc0LDE4LjQ5ODEyMjEgMTIuNjA2MzAyOCwxOC4xNDg0OTI3IEMxMi42OTc4MTgzLDE3Ljc5ODg2MzIgMTIuOTcwODYzMiwxNy41MjU4MTgzIDEzLjMyMDQ5MjcsMTcuNDM0MzAyOCBDMTMuNjcwMTIyMSwxNy4zNDI3ODc0IDE0LjA0MTkyNTUsMTcuNDQ3MDQzNCAxNC4yOTMsMTcuNzA3IEMxNC42MTMwMjQyLDE4LjAyNzEyMDggMTUuMTA4MTc0MiwxOC4wOTIzNTQgMTUuNTAwMTg4LDE3Ljg2NjA0MDEgQzE1Ljg5MjIwMTgsMTcuNjM5NzI2MiAxNi4wODMzMTA0LDE3LjE3ODMwODQgMTUuOTY2MTE1NSwxNi43NDEwOTIgQzE1Ljg0ODkyMDYsMTYuMzAzODc1NyAxNS40NTI2NTA4LDE1Ljk5OTkwMzMgMTUsMTYgWiIvPgo8L3N2Zz4K" }, function (A, e) { A.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBmaWxsPSIjMDBFNUZGIiBkPSJNMTIsMSBDNy43Mzg3NSw3LjI5NzM3NSA1LDExLjIzNjYyNSA1LDE1LjA2NTYyNSBDNSwxOC44OTYzNzUgOC4xMzE2MjUsMjIgMTIsMjIgQzE1Ljg2ODM3NSwyMiAxOSwxOC44OTYzNzUgMTksMTUuMDY1NjI1IEMxOSwxMS4yMzY2MjUgMTYuMjYxMjUsNy4yOTczNzUgMTIsMSBaIi8+Cjwvc3ZnPgo=" }, function (A, e) { A.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBmaWxsPSIjRDhEOEQ4IiBkPSJNMTIsMkExMCwxMCAwIDAsMCAyLDEyQTEwLDEwIDAgMCwwIDEyLDIyQTEwLDEwIDAgMCwwIDIyLDEyQTEwLDEwIDAgMCwwIDEyLDJNMTIsNEE4LDggMCAwLDEgMjAsMTJDMjAsMTQuNCAxOSwxNi41IDE3LjMsMThDMTUuOSwxNi43IDE0LDE2IDEyLDE2QzEwLDE2IDguMiwxNi43IDYuNywxOEM1LDE2LjUgNCwxNC40IDQsMTJBOCw4IDAgMCwxIDEyLDRNMTQsNS44OUMxMy42Miw1LjkgMTMuMjYsNi4xNSAxMy4xLDYuNTRMMTEuODEsOS43N0wxMS43MSwxMEMxMSwxMC4xMyAxMC40MSwxMC42IDEwLjE0LDExLjI2QzkuNzMsMTIuMjkgMTAuMjMsMTMuNDUgMTEuMjYsMTMuODZDMTIuMjksMTQuMjcgMTMuNDUsMTMuNzcgMTMuODYsMTIuNzRDMTQuMTIsMTIuMDggMTQsMTEuMzIgMTMuNTcsMTAuNzZMMTMuNjcsMTAuNUwxNC45Niw3LjI5TDE0Ljk3LDcuMjZDMTUuMTcsNi43NSAxNC45Miw2LjE3IDE0LjQxLDUuOTZDMTQuMjgsNS45MSAxNC4xNSw1Ljg5IDE0LDUuODlNMTAsNkExLDEgMCAwLDAgOSw3QTEsMSAwIDAsMCAxMCw4QTEsMSAwIDAsMCAxMSw3QTEsMSAwIDAsMCAxMCw2TTcsOUExLDEgMCAwLDAgNiwxMEExLDEgMCAwLDAgNywxMUExLDEgMCAwLDAgOCwxMEExLDEgMCAwLDAgNyw5TTE3LDlBMSwxIDAgMCwwIDE2LDEwQTEsMSAwIDAsMCAxNywxMUExLDEgMCAwLDAgMTgsMTBBMSwxIDAgMCwwIDE3LDlaIj48L3BhdGg+Cjwvc3ZnPgo=" }, function (A, e, t) { "use strict"; var n; Object.defineProperty(e, "__esModule", { value: !0 }), e.default = void 0; var i = function (A) { return A(n || (e = ["\n ha-card {\n display: flex;\n flex-flow: row;\n align-items: center;\n padding: 16px;\n color: var(--primary-text-color, #000);\n font-weight: var(--swc-font-weight, 400);\n transition: background 1s;\n cursor: pointer;\n }\n ha-card[bg] {\n font-weight: var(--swc-font-weight, 500);\n background: var(--day-color);\n color: var(--text-color);\n }\n ha-card[bg][night] {\n background: var(--night-color);\n }\n ha-card[bg][fade] {\n background: linear-gradient(var(--day-color), transparent 250%);\n }\n ha-card[bg][fade][night] {\n background: linear-gradient(var(--night-color) 0%, transparent 300%);\n }\n .weather__icon {\n height: 40px;\n width: 40px;\n background-size: contain;\n background-repeat: no-repeat;\n flex: 0 0 40px;\n color: white;\n margin-right: 16px;\n }\n .weather__icon--small {\n display: inline-block;\n height: 1em;\n width: 1em;\n min-width: 1em;\n flex: initial;\n margin: 0 .2em;\n }\n .weather__info {\n display: flex;\n flex-flow: column;\n justify-content: space-between;\n min-height: 42px;\n min-width: 0;\n }\n .weather__info__row {\n display: flex;\n align-items: center;\n max-width: 100%;\n }\n .weather__info__item {\n padding-left: 8px;\n display: flex;\n align-items: center;\n }\n .weather__info--add {\n padding-left: 8px;\n margin-left: auto;\n align-items: flex-end;\n }\n .weather__info__state,\n .weather__info__title,\n .weather__info__row {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n "], t || (t = e.slice(0)), n = Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })))); var e, t }; e.default = i }, function (A, e, t) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.handleClick = void 0; e.handleClick = (A, e, t, n) => { let i; switch (n.action) { case "more-info": i = new Event("hass-more-info", { composed: !0 }), i.detail = { entityId: n.entity || t.entity }, A.dispatchEvent(i); break; case "navigate": if (!n.navigation_path) return; history.pushState(null, "", n.navigation_path), i = new Event("location-changed", { composed: !0 }), i.detail = { replace: !1 }, window.dispatchEvent(i); break; case "call-service": if (!n.service) return; const [M, s] = n.service.split(".", 2), a = { ...n.service_data }; e.callService(M, s, a) } } }]);
+!function(A){var e={};function t(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return A[n].call(i.exports,i,i.exports,t),i.l=!0,i.exports}t.m=A,t.c=e,t.d=function(A,e,n){t.o(A,e)||Object.defineProperty(A,e,{enumerable:!0,get:n})},t.r=function(A){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})},t.t=function(A,e){if(1&e&&(A=t(A)),8&e)return A;if(4&e&&"object"==typeof A&&A&&A.__esModule)return A;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:A}),2&e&&"string"!=typeof A)for(var i in A)t.d(n,i,function(e){return A[e]}.bind(null,i));return n},t.n=function(A){var e=A&&A.__esModule?function(){return A.default}:function(){return A};return t.d(e,"a",e),e},t.o=function(A,e){return Object.prototype.hasOwnProperty.call(A,e)},t.p="",t(t.s=0)}([function(A,e,t){"use strict";var n,i,M,s,a,r,g=u(t(1)),o=u(t(18)),c=t(19);function u(A){return A&&A.__esModule?A:{default:A}}function w(A,e){return e||(e=A.slice(0)),Object.freeze(Object.defineProperties(A,{raw:{value:Object.freeze(e)}}))}const D=window.LitElement||Object.getPrototypeOf(customElements.get("ha-panel-lovelace")||customElements.get("hc-lovelace")),{html:f,css:E}=D.prototype,h="°C",d={precipitation:{icon:"rainy",unit:"length"},precipitation_probability:{icon:"rainy",unit:"%"},humidity:{icon:"humidity",unit:"%"},wind_speed:{icon:"windy",unit:"speed"},wind_bearing:{icon:"windy",unit:""},pressure:{icon:"pressure",unit:"hPa"}};customElements.define("simple-weather-card",class extends D{constructor(){super(),this.custom={}}static get properties(){return{_hass:{type:Object},config:{type:Object},entity:{type:Object},weather:{type:Object},custom:{type:Object}}}static get styles(){return(0,o.default)(E)}set hass(A){const{custom:e,entity:t}=this.config;this._hass=A;const n=A.states[t];n&&this.entity!==n&&(this.entity=n,this.weather=new g.default(A,n));const i={};e.forEach(e=>{const[t,n]=Object.entries(e)[0];if(A.states[n]){const e=A.states[n],{state:M}=this.custom[t]||{};M!==e.state&&(i[t]={state:e.state,unit:e.attributes.unit_of_measurement})}}),Object.entries(i).length>0&&(this.custom={...this.custom,...i})}get hass(){return this._hass}get name(){return this.config.name||this.weather.name}setConfig(A){if(!A.entity)throw new Error("Specify an entity.");this.config={bg:!!A.backdrop,primary_info:["extrema"],secondary_info:["precipitation"],custom:[],tap_action:{action:"more-info"},...A,backdrop:{day:"#45aaf2",night:"#a55eea",text:"var(--text-dark-color)",fade:!1,...A.backdrop}},"string"==typeof A.primary_info&&(this.config.primary_info=[A.primary_info]),"string"==typeof A.secondary_info&&(this.config.secondary_info=[A.secondary_info]),this.config.primary_info||(this.config.primary_info=[]),this.config.secondary_info||(this.config.secondary_info=[])}shouldUpdate(A){return["entity","custom"].some(e=>A.has(e))}render(){return f(n||(n=w(["\n \n ",'\n \n \n ',"\n ",'\n \n \n ','\n \n \n \n ',"\n ","\n \n \n "])),this.config.bg,this.config.backdrop.fade,this.weather.isNight,this.config.backdrop.day,this.config.backdrop.night,this.config.backdrop.text,A=>this.handleTap(A),this.renderIcon(),this.renderAttr("temp"),this.name,this.renderAttr("state",!1),this.renderInfoRow(this.config.primary_info),this.renderInfoRow(this.config.secondary_info))}renderIcon(){const A=this.custom["icon-state"]?this.weather.getIcon(this.custom["icon-state"].state):this.weather.icon;return this.weather.hasState&&A?f(i||(i=w(['\n \n \n '])),A):""}renderExtrema(){const A=this.custom.high||this.weather.high,e=this.custom.low||this.weather.low;return A||e?f(M||(M=w(['\n \n ',"\n ","\n ","\n \n "])),this.renderAttr("low"),A&&e?" / ":"",this.renderAttr("high")):""}renderInfoRow(A){return f(s||(s=w(['\n \n ',"\n \n "])),A.map(A=>this.renderInfo(A)))}renderInfo(A){return"extrema"===A?this.renderExtrema():f(a||(a=w(['\n \n \n \n ',"\n \n "])),this.weather.getIcon(d[A].icon),this.renderAttr(A))}renderAttr(A,e=!0){const t=this.custom[A]?this.custom[A].state:this.weather[A];if(!t&&0!==t)return;const{unit:n}=this.custom[A]&&this.custom[A].unit?this.custom[A]:d[A]||{};return f(r||(r=w(["\n ","\n ","\n "])),t,e?this.getUnit(n):"")}handleTap(){(0,c.handleClick)(this,this._hass,this.config,this.config.tap_action)}getUnit(A="temperature"){const e="speed"===A?"length":A,t=this._hass.config.unit_system[e];return"temperature"===A?t||h:"length"===A?"km"===t?"mm":"in":"speed"===A?t?"".concat(t,"/h"):"km/h":A}})},function(A,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=l(t(2)),i=l(t(3)),M=l(t(4)),s=l(t(5)),a=l(t(6)),r=l(t(7)),g=l(t(8)),o=l(t(9)),c=l(t(10)),u=l(t(11)),w=l(t(12)),D=l(t(13)),f=l(t(14)),E=l(t(15)),h=l(t(16)),d=l(t(17));function l(A){return A&&A.__esModule?A:{default:A}}const y={"clear-day":f.default,"clear-night":n.default,cloudy:i.default,overcast:i.default,fog:M.default,hail:D.default,lightning:s.default,"lightning-rainy":a.default,"partly-cloudy-day":g.default,"partly-cloudy-night":o.default,partlycloudy:g.default,pouring:c.default,rain:u.default,rainy:u.default,sleet:D.default,snow:w.default,snowy:w.default,"snowy-rainy":D.default,sunny:f.default,wind:E.default,windy:E.default,"windy-variant":E.default,humidity:h.default,pressure:d.default},T={...y,sunny:n.default,partlycloudy:o.default,"lightning-rainy":r.default},N=["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"];e.default=class{constructor(A,e){this.hass=A,this.entity=e,this.attr=e.attributes,this.forecast=e.attributes.forecast||[[]]}get state(){return this.toLocale("component.weather.state._."+this.entity.state,this.entity.state)}get hasState(){return this.entity.state&&"unknown"!==this.entity.state}get temp(){return this.attr.temperature}get name(){return this.attr.friendly_name}get high(){return this.forecast[0].temperature}get low(){return this.forecast[0].templow}get wind_speed(){return this.attr.wind_speed||0}get pressure(){return this.attr.pressure||0}get wind_bearing(){return this.attr.wind_bearing?this.degToDirection(this.attr.wind_bearing):this.toLocale("state.default.unknown")}get precipitation(){return Math.round(100*(this.forecast[0].precipitation||0))/100}get precipitation_probability(){return this.forecast[0].precipitation_probability||0}get humidity(){return this.attr.humidity||0}get isNight(){return!!this.hass.states["sun.sun"]&&"below_horizon"===this.hass.states["sun.sun"].state}get icon(){const A=this.entity.state.toLowerCase();return this.isNight?T[A]:y[A]}getIcon(A){return y[A]}toLocale(A,e="unknown"){const t=this.hass.selectedLanguage||this.hass.language,n=this.hass.resources[t];return n&&n[A]?n[A]:e}degToDirection(A){const e=Math.floor(A/22.5+.5);return N[e%16]}}},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAHlBMVEUAAADL2/vK2/rH2fnI2vrG2PrJ2/vL3fzG2vzI3PwdWi7LAAAAB3RSTlMAFzNfjrze/OgtNAAAAdhJREFUeAHt17WC3EAMBuBZ3nIZOqcJVGGqwlSFqQpTFY6yVTiZrUJ3Z+tpj3ynBY3Hv6vDr5aGJMOYbetX49CtmsE1bxO9M7DcEVr02aDyt2nJvozxH+H1xPH01oAuUOyvwXRoxRUDKdCqAF9Qlj2XKAaX7TbF0EMqk3gNTiD+GECRBHaqR0lAnZSjMQG4ZVEDiybQFQm8ynjCrqwJzzIm5GkCvAU8oasSoL4QNXDPIgDLhjdfgSadBA9J3DcpKjTpFXiq4g3YSeIdWAbxAXx68ELcpkmDk9kSBvwnW2cw/zd+v6Ym4DkoQeIX7cOWJPGc0hx3SXBsJiWBQwmPhTXjc4kV/wv8uIoP/Wvaw0ro7Y4+a95ve5W1Od+2S6z4S1FgzdseOdYifuDJeMEOUQ0shHgLnCta7hI7RYnVy7PbbC25X12G0UwN6SYRWTsbZNmEXTS33126oXuCRb8eBUglJH5R+PiA3krZuSDBdD91TXaSmuOYP/6b/oXTGxh3MuXVYaf8SCmFnXbF2x6R9U2gd2G1hD6/qMNj341bYWjdEl/+HevkeRscs5qu2ZjcHav8qBmPvMr4Ic2NZeh4fbW0Yx7VkMvrRRl+P3w9vvn0yY0zO8y6tW0BcWLk3nu06KcAAAAASUVORK5CYII="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAHlBMVEUAAADr6+vn5+fo6Ojo6Ojm5ubq6urp6enk5OTf399QNH53AAAACXRSTlMAIneu2P///z8+tLZ6AAACF0lEQVR4Ae2Wt5bUQBBFtfhwIgjxEOJdhHcRtigU4lohtvV2MiW4D1ijr11XpR76lKp3Y45uMq7uvPbq6j9mYmJi6fTD0Ly+PNtr/Zmg3Nvb3z8KiQ9eiFMf8HF343r4B+DDbvW/Qi5guVy/P2Q0QHuiKDwyAn6U6g8EK+BOOcAKH8sBVsDF4pBmYJv2vVd/JIwKCJ0jHHIEPPda5AnfnVUUPAEzZ4w8wZmKo8GOqvLVmTVPcDoRfKEdq99nBSRqakN4fbkzfXaFFd5JulmctgaJuQjAk/IgJeqeINxNwrlCixD7FShdYWFYIUZ8c6ehyYSe9R2GTf7GDRBhRRPSOdKWBPR9zVBFl6LfIkkgkvK0FP0ASVghloSobWrdAEmoiTThx2inAdMkYklANzKsMMIKEcWdBFy0E9cYYbueWBK+2KWBHMz7mraRhGWz+GAFIomIW8jqOOzUi7CyIsZOgggHvPbLBiKB4xbfsy2KMWoawGIiUGAlCbyFCjfgEhcCLU6dYwVhpy5F6B46AJc5cYIAFZYYHjLHKUGXq9+JSMh4rsJBV9CdoKSH3hF2hCHAnDTnSwHggdeL49URpB5Cdv14jDEYecKdqhwRkSfEWVWO0B6khLfZU4W9gJQQ8/vQX6c+xiHhZZVzDQ6sZlflLD3ECHFIoLv2QnCL/YT4ZPSiu2KrmcGM+qZ3lX7aj3D/VFdNTExYNgHAL10vmVlOfQAAAABJRU5ErkJggg=="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAOVBMVEUAAADHx8fKysrJycnIyMjHx8fGxsbDw8PBwcG/v7/CwsLCwsK+vr67u7u4uLi3t7e4uLi5ubm4uLhyXqCUAAAAE3RSTlMAFkaMtND6////CGT//7BAhezMkbzxVAAAAi9JREFUeAHtloeS2zAMRF0JrA60yv9/bBQagS2YpOj05PiS6zvYURk8Hv5vOp1Op9M5ns6XawjXy/l0bM80c7oGIr5D4XrKZ4ihgCzTwPARKMFsHR/DS4axxWdKHM+BFNZ/qeN83GTwFdZ/imWKDMfTJZDBilZcTsfhniFmgPEKp0yREHS6vwK7jLCivQDbv2eYqFjgxkNiFHAevQKJKyJ4RpoKcNMbMt5yHWm83MZ0Q9ZMfLNANo90EvYAiNMmE9sLeH59KWdfkMtISwFjGQ8ZxkXACqSUiVItmJfbNJYXwzjdlrmeGVLmoHS6D1gh+gU+MNn8Gh+kmelf2QdeB+0+SOPcFbD3AfCdPiAd76/A1JkiNl4voN0HOl0/Ia6g6AIGqw+i4IGI1ApsfMUHOt77oKGADZkqPgBQ9kFLQdYHcDeo5APZLZA9HwA1H1QLWnZ9uw863QfExq/wATt+gQ88OR94uN0HRskHWUT2fcBFsEKkPsgiiZoPeIOe/fFYcYaJRmJCtEBpKpDb+M0Hog5g+6fEjQ/knYLMrvdXAJ9pL0DWB+4Ykcs0FVR2PYz4q30wdB98Gh8M4w/5AErFB7aEwO/6AHf0a9YHbsk1+cCf/e0L4HxAMMRo9AFW/BWkTw8fMPx8BTs+sLO/vwLWDiKvA/GAyz6whfa07AUVzAdbagWMxObsn+9wPmgqKO96ZCj4IO4VFM/+G+S7fLC366FIOROrBaVd333Q6XQ6nc4Xua9QVFRZEEsAAAAASUVORK5CYII="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAALe0lEQVR4nO2cW4wb1RnH/+fMjB1vdjfkssJbVtAmTTcNIJVeRFFVSF+qKg+tgsRbqcRDxRtVBVXSIiFBpUKkipa3XgKRiiLRUiWt2oaqElXghXBRVKhALJCFJJvdyTrJJnuxPfac8/XBnt1Zey5nbvYs9U8aOVmPZz5///N955zvnDEwYMCAAQMGDBjw/wjr5c0qlcpO27bvY4zdCWCvlHJS1/XV94kIQghwzqcAvEdEr+u6/uLY2Nh0L+3sJZkLMDc3d5Ax9gDnfDLJdaSUU0R0dHx8/HBatuWBTASoVCo7hRAnkzrdDynlCU3THvk0REaqAmTteKCVpgCAMQYp5ZSmafs3shA8rQuZpnmciM5m6Xw3RATG2CQRnTVN83gv7pkFiSNgZmbmnkKhcCq5KWo4EeBFs9ncNzEx8UqvbEmDRBFgmubxXjofaKUePwqFwqm5ubmDPTQnMbEjwDTN93uVbjoJioL2+1PlcnlPj8xJRKwI6KfzVWCMTZqm+X6/7VAhsgB5d74D53xDiBBJgI3ifGBtlJT3EZKyAKZpHs+D88PyvxvGGDjnB/LcMSt1wr0eagYRRQBgbdTUaDRyOUTVw09pDe+yNSM7HME456fQ4+KjCqEpKO85VBVN03L5XQJbRKVS2UlEZ3tljApRU1AnnPNdeaodBUaAEOJkrwzpFXn7Tr4R8Gls/Q55igLfCMhbS0kTIcQv+22Dg68AeRjzZwXn/EC/bXDwHIbmceKSVvpxrjU7O0uWZaFYLAJojZK8Kq22ba9boxZCnE5zPuHZB+Sx5JCmAAAghIBlWQCwTgQV2qtxJ2zbfiapGJ4CzM/Pp/ttE5K28x2q1SqA6AK4IaIp27YfjCtElwCf5tGPG3cEAMlEAFpCxFmf7uqEbdu+L5YFGZFV69c0bdXpANaJEQfG2KSU8uzMzMw9UT7XJUB709QABYQQ614BwDCMSMuiXsPQvYktS4msWr8flmWtc2YYTrpyXp3Pcs6fUhWhSwApZS5GP712vkMUETojwN1/cM6fUklHXQLE7YQ2Il7ftVgsKovgFwHOq2EYpyqVys6ga3j1AaE3zppetX4/Jzudc5gIfhHgFjaspJPazri0SOJ81lyGPv+G8vleEdA5GgoSISwChBBgjE0GpaIuAfqVe9O49+bZl6DXLiqf7+VcJwWFnef+u18EOK+6rv/Wz4YuAaKMAtIk8UJLvYKhCycgeTH85BDc8wMHL7+oRACAwCjoEqBdeOoZRJTY+UQSI9PPA7IBSrjsGzQh83NwWAQAgK7rP/K6plcf8F5Em2OTVrorXv0PigtnAF5Idp1i0bP1uxFC+DraTxgAYIx5lsC9+oDXI1seg9T6GruG0Y+fB5jSBo91dNaCVMsRcSIAaG3v6bxWlwC6rr+oZEVM0kg5boYu/gO8Pg8wDWBAkkuHtX43XpGgkKK+3nmdLgHGxsamsxgJpe14ANBqJoYv/g3QknW8UVq/G9UICJrces4DiCiVjthxeiZDWxIY+fAIQBJrVXX1+3SOaqK0/s7rqEaAV6HTT4CjsaxBxk53Ubz8OgqL77k6XnIdEa4T0/FuIkRAV6HTU4Dx8fHDbkdGOXpCcwWjHx9zOV8iquPd68FpENb6/fAtRRDRibSMS5uRC8fBmtcAxtByfjSymmwGDVHbdA3xfQXQNO2RdM1LB235HErmvwBuJLpOZ+vXNM3ziEpQBHgN8X0FaI+GejorDkXaGP3oWbTSTfwZb+eIR9O0QMeF5Xav4ajKCAgIqYZqmra/X7UhL0qXXoGx/CHA4rd+IYRn7vdyZlheD5qQeQkphDjded9AAcbGxqY557noC1jjOobPv5io3NDZqsPSjF9aCjucz7pfhRDw2roSuh5QLpfvzUMUjJz/E5i9BLAAkxVHoaq5PW4EeLV+v4astCAjpdzXTxH06x9g06VT/q1fwfFe67ZhRM39QSMg27af8bqHkgATExOvMMYOKVueJqKBLWePtIecLiLMu+I4P63WL4QAEU357ZxTXpJsT856Pioqmf+GVj3f6niVnO79ZtS0k1br1zQNtm0/6He/SGvC5XJ5Ty9F4NZVjJz7I8CLCk5vHZ0rYu4hoQqqdR3V16DWDyg+JemmXC7vMU3zfcZYtvuHiDA8fQyQVksA/xPX/sl0bKpOw756BpqoQhID5wHzBQKIcdR3rFWJHcHSaPlCCBiGsT/oayb6sY4sRTAW/out7z7Z7njdZoYlfdE632uBprNWRTYa+g5cu/NXXZHi/D/Jq5Qy9Nnk2NtSyuXyHinloUxGR3YdN5x9trXIAkC9xyWsfiWy1w7ZPqjjEBau726l587Uk7TlM8YOqWxZT7QvaHx8/LCUcp+zzz4thmZPgtVMlwBBeInD1o51mrn+Li2s7PgmxA1fWJe30+gDGGOHVH9cMLVtcKZpHpdSHohTwHJDi+dx47uPt1qop3mKZeeg0jhJEBjmvvwM9KFt696K2ml3flYl7bhJbWdcuVy+1zCMXUQ0FTctEUmMfvScj/MjLLaErUvIBi7f8gBQ2AIAiSPAGesbhrEr6pMyqW5NHBsbmy6Xy3vaQpyoVquRau/cPI1S85P2/wjquR8tpztHELIJa/Nu2ON3Q9f9C3CquZ5zPiWl3Fcul/fEefa4Zz/cWqvVJovFon94Nxax/cxPoMmaullxVuCkhUu3/RxydJfn6MUh6O+WZaFUKmX3kF5WdP50ca1WWx3Gjsz9HdvNv/iXmtNY7pQWrm37FhY+e7/yLvBSqbT6iCrQKiln+phqLzfnXvz9dwAGlAz27a2jdJIxaBGXdtVhBCnIPHfj9w8sbb/rtE6N1bf27r01o5t6mNEhfF+3p19Z1mBrQ6Wt24ynGCg754OAZg2V4TueWPzMV08zYwWi0Fw9+kn0/XwpUhi7GcOYfYjJxh3pZ0N3iQKo1vhr1+ylI2z2bUDU15/6+S+lfG91+puC3nzu1psuHHsTTC91lZv9CDWv4wQGkBDNTy7p91xvFl/TZPcOuNt//E+1e6dAZwrqawSMXHj5B8KSF8GkHXYutRyr60V9F9Y1nDBFJKpL9d/okr+2Vbdy95tl/U1BK3M/Jc4PEqnt7eEG2wFGF0DYFH42ASTQxOYL5me/94QEA8uuk4lNXwUgrktAhKd/ArjBoRU5V0pBRK1rSoEFy/jZ0t67LnPOEXX3XC/oqwBKEMB1Dq3A4f/4i/cMeHFFf/nSkjimvfprBKq8+w/p2BqDfAtAANcZtKLH7uewH/C2m9ZKlR7WySJeS7damyb5FcBxfsF56iJK+iAssvLTjdHi2yMs+t7RXpJPAQhgjvOjwgC7bn0w+8X7n2xs3Q0uwh+8mIhhYlrkTwACuBbT+Wg9rzG/tOlR8fEbS9z8EJAK1didt8e6VxrkSwBqLYKt5fyIMKC6LP56pT78Zzr3Frjvok4H+x+Od78UyI8AbefrxZjlKcZAtr20UhMHbzCWwHI35fImNwIkcj4A2HVc3nLn4crnvjGle5Qb8krfBSAAjDPocdMOADCgURfvLAwNP20P3wRh11KzL2v6K8Bq2knmfBJSzC6PHqpdf6fGP3kn+jVuuzv+/RPSVwEYT+h8ACCJ+krjBbLppc1MADJ/5YYg+ipAsRjzUaPVWTBB8KErlS23PcqGJWKOXPtKfyMAlKw+JptYYNsev/KVh85pFH9l6+YEJiSl751wbBihahlvXl5Z+Z3+xlHEeVx1lVt+kZpZUdm4AkiI5To90rBsS5t5q9/WxGZjCsCAap0fbUr26vZSHXms86uy8QRgpAvB5mcmf/hYs7gDjEJXM0O5KQWz4rLRBGAgpl9dxGP1WmMOrK6ynJxr+j4RiwTDZqsuTprV0SM48wKYs/SYlK99N4WLxKOvAiwsR6z9MCwIgUPDhi1oda//gAEDBgyIyf8A4n6spjurxDYAAAAASUVORK5CYII="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAyVBMVEUAAADut0371Uv92kX920b+2kL92T/CyKz92j792Tvvs0jk1s3s4+Hl4d/r6ujp6Ojr6urn5eTk29ji19Po4tjq6urk2tb81jvp6en60z3r49P32Gnr6OHz1pbo6Ojr28Dj4uLm5ubn5+d/xLn8tl7d3d3/sk/k5OTa2tr3v3jh4eH/sErW1dTh4OD/r0f/rUXiwZr9sE/+slD0o0P9qkX1pEIP3/kL4f0q6P8H5f8A5f8n6P/6p0Mc6P8P5/8E4f0F5v8C2/sn6P8h4jSJAAAAQ3RSTlMAH1+bzey9Bf//SR1mpNHj8b5fNZP/T////////////////xH////////////l////0ayG+q0o7k/4/07PPNek3pNP7VonwQAAA8hJREFUeAHs0gWiwjAMgGFWDzBfmD/uf0rcgqV9bv8B8i3NJv/92CIhldZGiugjpluh3SFwWtj3nj/V7hwA6On7fr50jgLg5CuXmM3jJM2yJI+L2XGEVY4Cu1S4YMsqw8vi0pL5BAgXFhnelBV2Iuv7AMig8WWK92rSqm3b2tV3AAi4tM3xfk2DXX8WKKCt92lTfARsGs4CBUD4Pk+Gj4Ft41a4A2jP+YgMgESAc5HX+2Qs0Lz0FwKEvZFNkQe2d6hrAnj/qTn6AM1y+7feAMbnACxwPjQQwO/KqS8wbICNABAGLNj5ZIUaNtXnDH9hDiArbAmS5C/AAmQFWl0LDqhCACQN3XLsIw7ImPlMmK0pLa+FxUEgjLp7Y++9TRjSg255/5f7vwS7IOO55xyqZtD+/Ig/qkMBQDRZfQrMvHYCG4EfTNvfHgEGRopZkyxAo9gbmHr8hyRFgUkUQKH91TPekD5maZrmrIlEARqKL5H1R1lWFEUa3CW6sfoqkJcIgEoemLTFW7QhPmY2kCpxgAbSQ8YG7RIbSNMqJ6GfxsJrilFcwm/qQFUplgaoL3to8Ee135zqgFI5SwMz0U8FNkgl0DeBqg6gIPJ7bmp74jhhYwNpE8AaZIGp4BDsEzAPARS8ayAQPuX52xMwT4G8hqWBwF8mxuijeQl4C0SCLQKrx0F4Ao4A0OHAwhNonx/GcGkeAwoBX4FemXn/9u/z15HxBVAIBPotH8PrCDyB5wAKwFkg8pyxf5NI89G8BPxrkO8Q6E+sP8qeAk0BCYst+BfQ/vj1xXUAT+CB7E6pVPVcoDdWge+7Cv6jeeVPgznd3rT2BYatAP0z7zK3/+8/bFadQIDJ7Z+2WyHaw9KlB0kBbICZyeHfhP3gl1MPotN1BVxDb34ehv3gv0sPylMTUKoJAE1P6POqJeG3yw6yUx24LsBCd/LzrC3yxw65PWEEmgYqL5yni1n/p726QK4YBmIAqgwFrvEHC/kc5vvfqejOZjregrXlvgsoYFl4o0Pud4SN7DL3OsUwEZ9yr20GG8eTyFfOUMQxgq2e/7SBX1GWBR2w3aofqKqbpm6pgO29Dn5986APDtg6kVKZunlQbxBk+0SrwNA4AxdwivUP5PRUQAa/UQJGJkCtwCQBExGgVgC1BNQIoXwg40/UQVVIQBEeEEE3N86MIFIBRewS5hhBpAKqYizLsUAg5Q/bUSpgR6mAnW2m7JeVTtkvMxGeWWS/OMR+Mdj9EsR+Mbj9EsTlTKL3SzD79fWfiNgvGrFfgtgvBrFfX+/fLZ2VqOfdJyPAAAAAAElFTkSuQmCC"},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAllBMVEUAAAC8y87X3OnY3+zU2OXN3/3J3Py5usLW3+7O3ffF2Pnd3eLl5efp6ern5+fl5ebq6urH2vvp6enj5ObC1Pfo6OjU3vLt0rDk5OT7uWfb29vh4eHxw4n/sk/p3c7W1tb/sEr/r0f/rET6qkfqokj3p0b0o0T9rEYR4PoL4f0i6P8H5f8A5f8K5v8J5v8A4v0C2/sC2fne7Ib2AAAAMnRSTlMAF0uOL77/B6Po/2HG6v/f////tf///////////////////9BMrIbrKu5E+f/bnqaTqTOwt04AAAN7SURBVHgB5JiHdqswDEBZwWQgUxM1zNL5/7/4HB+F+hAbqxlnvftG9721lB3918RJmj1Rn23yPI+fphdFfkY8bTrb3PA0/y5/akDQ73/3iLJ9cSgB5CHdx5FFQfq7liyytKwsoMjm7sscSG72J2S3KUm3yedCcateVi6UTMyGX6hw6xJEXblRqipElOysQnqDP5aVL6CRcXqkwo1rzqBaCyjcHu3C5s/+yo8yVK924eWPe45hLUDsTEEH/l4QsmIEcGcCdIR8E/MDdcUJKDhSgUgFewG8gHqlwoW8SGJORHIDaAUIztUu4fjtI1iNnSa0blHyA+qo2Rn0G3ovY2yAG0B9hCVpFCBl+YnlF+F1G9wye0JuqnK/nshW1eGAQiyTtcDea0eNYvg1tfjrCpTCUwMAyAug9BcOHn/Tdj2ngKGCdAYQhrHr+kYXkBXA2hcAt/9t1AHGGXDGt+nGGWhaHTAFdqAU7BEphNNIgZ4dwD1vyTQgzWQCDTL9WDIvpspseBzfKQDcAMa8KxoN6P0SaIAbcM8ou/Y3rdabQK8DVAj7sXAGROO4CrxbASowAofwEmjD77+BxgAcv2/L2dVV4N0OUIEVCN8hqPOG3x0BZwEX1J5AoixoQFaAgHAg9QSEtH4GhndHwFnAJfvIQ6YuAA3IMSIqrAXiyEdx+QmgDS8upgSs+yXZ/ENCoAHZAeeU+BMi4t74zYaXAYIKfn8ZeIKj1DwgYvxluCTA68ckWi/02n96X/JheH/rrYI7UISfBNKAln7N0M37BnT7D5yXaga3/rOdOo0JAAA6/SIKkzn1mtM0UQDO4JUfiojDl1v/OUznQE+BMwu9TFj+76WdGCfrANeFRu4jFsJhpwMQnYU+j/5f1vSKD4efpZn4115dHEYQA0EULZ0Ux7AY8g/ObLep56Aye18A/RendnyMVbl/WHwIe0zvW/Ex9llMz2xQWIthk5i1M857xwf0DyjElGLgA4t2P90JbGA2eJeJ6U40XGDe8b6cHmQiMM/zYfUP6EEYDMx3VryvSKBgxHxvgyJLIDMBC0WUQCQCKzRVAnU8sEDlJODGAwa6lh40DAd2nGnUfah/AeG6991hPLDiM8lf4NMC9pMD6+l+8Zbz/eIZZb94xH4x2P0SxH4x2P0SxH5RyP0SxH5xqP0SxH7RiP0SxH7RZL9+l4tr2oowXbK2IEgAAAAASUVORK5CYII="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAsVBMVEUAAAD0z2L93U/93lL93Ev81D/93Ef+3Uz72k75zEP93Ej93Ej920X920P920L92kH70z/92j/92kP92j381EP92Tv92D7+2Tv92Tn70jf810L44Yv15afx6c3x7uTv7+/43G371Dzu7u792Dfp49zcxLbt7Ovm29Xs6+vp4t/x8fH70jXq5OL5zzT4yjP4yzPq05fyvzP4zTP2xjPvyWD0wjHo3L/2xjD4yjLm5eTkxIAPtip5AAAAO3RSTlMAF1V5o7zT5foJl///////R/9w/yT//+L/8v/////////////bL8tJ6Ib//6P/nP///9P//1f/deP/x8TGymgAAAPmSURBVHgB7JSFduswEESfGSSHE7Nkx4///wPrVVm0ktvDuaWDczOzOv3x4MEDZ4IwipM0y1eyNImjMPjG8CIsU0JoVe12u/0LFUnLsPiW+EOckwr4KDgCVR4fvvzho4zQFdlwfKHKTsXX480CIIs2K0KIf0G7EXA+H7NwU/wlIYQ6CFb2yWXDx88JEQZko7Mg9y1RlIT4CK7H0usSQUokAUUE11saeMyfEj8BGK7pxTk/I1sE1/rinr9JAAb3/X1vIHC5Q/Ga7/eKXg0FKijJZgFQYvkhIfaFEME1RA6cY4K9XdC09kMnUj66kCJoki0D+QhsIxWZnI+fQBE0dWEURJTK8WoBVNCczAWohPdCIDBXOJmy993685qPC4wV3guQfhgZ45yN49Dn3cpegC8kqPX5B/pM3o+Mf2QUjv07R0TQHLSCmAJkYFyBDa8KfCEg1p44h/yecS2sh6GwAq+CVnfmENYZuZFxAkOHLwSEGkFJu4lxC2yaRYsjshBQagRp1d+5nX4GBbYQkKr5Ae05gBpuN3yhZgnURzrdOc40zzcwIAWaRX2oEeMOsGcDJliWkyL4yZ0Y5xkUWIFFufIv7kgPAjCcrYJEFvx2FbBcGJACi/yM/nBnBhA8A/kGQS0J/roLWPdqMBUAQYtcALsCKK4A/FUKAJ8F/7gP/wHGxmGCMk2jFAA2LyT/GxcKuYA8UcA3cx9moZAL1E/tmYVuI0EMQKfcFa5OWG4nrInHy3D//2Fn3ST1MjnivID4PXkZGtuQgI9nQ4lV1c+bKa8CAZ9UMFxwgQdV5SgK6M9nMIakzu+wjd1YgNb6A6lQD/wRb0TsJwI0tJAoQX6HLw6wn/h8QbeQVmdu5IuI/cR76ApnIlXjKPXrzzAGDrROBwehn0iosOJE2jxYS/20jGJkf/PC60bs11kcIxesarCX+vUHBbjgqwYHqV9/xlQAMHykq7GR+V0AEU6FXLVYC/y8iMAVum6hdiI9kZ0nMMYNIBlBdxBwoPBUBxst0BMJBYAwBlLVyUGi1yX5T4EH1cN2oZ6XEIIB0/8w5Ga/QM/HOgp0LyBmU87X8wCngFUDbPaz7Ez2O0DkqSFu1vPtxEfoBiD/jRrGO+rJcvYnZ38x4bHmZq0nm3n5uAU06Gd2az2DMvj1R9P8xOawn2h3evJTgJf/pMbfICuHybIgYT1aT80jDYchN4ExEgAv6ZJXLORogW0AcNYrFiYtTk73h51yokjVQry8qGoBoYWBIuelvyiBVRthKgj0jG9j/C83TeDF+uoSeKmNECnAFQCMbOqpy3Hj5/YhKl4QX4roweb+jZrKlStX/gHY0DfPBrPHXQAAAABJRU5ErkJggg=="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAS1BMVEUAAADO1fHO1ejZ4fLR2ezd5vbB0vXDzufS4vzP4PzN3vvV3fDk5+/Ayerc5vfu7u7v7+/t7e7k5eavwOrT2OO4y/DAzOi2ye+/0vYf7YBFAAAAGHRSTlMAByNNhqbMO////2bRFP///+v/////9qxLSnpnAAACKklEQVR4Ae3U2YKzKgzA8QRBXECgdTnv/6RH+2V2LWLgzl/n+h8NOHDe7XZDUUlVY6G4Vk276voi9cps9U2HkJ1QW51UpfKkg8ws5Uu9QP+ZL3IC1rS/KMhJN+1vAjKS1C91xKr5O0BCNqianQE65/PvDcC8/abcEcjmpdglrf72s37Gdk1TvcxXYNoDFrLo2yOYa0FHIAvVlh0g/mS7f3INqFuyMyPnC3R7cp0A5YfB+Y1zw9C9ILAhxVuKf3JDngFV220TBr9j6CywmW43T3rgst3K+UMKgUd3XePfCQJY1PF6iNPAEe2vOBOw8XGOsSXt/AkB4SrjT1FwkfYnVSVfgLGkyvuyrxD8aQEuED6BhnTSJwtG9YK/oYjQ8zcUEap8d4jxb1x6DhOfoDyDc/EJhjfAKYgIrP6qKjfAvQQstSJH+kKH7D6EMtfUfbElPjRH4juyzH78pgZu35nsh+DIuVMWvH58ABhWP74i0Ix85JCJ4fVdDxHaMfIrATGSk/ePZy0rYRHhEJpLeTI+N9NqPpxhw6U8vcDnAAuHxCM9T+aP/KThDREu1GlBNEHCW9ak1cnjcz8LRKB0iXHqr2J9oo07Wybjn+ePj0jwmFOen2gZ0vLTpocUQo7j471xpPr6o/uZBJdnFMVXtYV0ejqtgktwmU5ZEK6yy/Tfron+1t8igGQdQabFAhfq+ihfa4QsUMvp77NTPRe0ul+Wep7rRfbaJsRvt9v/h4jJKdZPEXkAAAAASUVORK5CYII="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAATlBMVEUAAADj4+Pp6enn5+fp6enp6enp6enq6urm5ubm5ubg4ODg4ODm5ubo6Ojc3Nww6v8Y6P8T5/8m6P8H5v8A5f8L5v8N4PoF4f0C4P0D2/uDNJb/AAAAGnRSTlMAE2SS0e7//7smT/////0a6ehI///bMaX0k6g43vIAAAKLSURBVHgB7JjpmuQgCEVjiBdTgu//trMPX5uuoLSzT5/6f09xyb6984eTdjoymBm57OmHpxO4A+VHOs6DXwHOjx/17ws/A+D8Q6Ygfg4+wWU9/2BHAOTVejL7AvC5tF2+Bz/AkNgBxtsNeU7AaXG/jmBp08SzAqYfvgDLXyipjAVLJZ0cEeCMbzgmyD94A4wrtYooM+dC+8w4FBXIF4PiM6w0dOSogJsJPsOUflBDRm0iYgJV7J7gERdIq51AlX7AWdwLai/QsngZ6tH2ydALnBlyXIBPAjPoN273oMF8E0gvQLoRhPNNIJ1AKS7AQCCdQM9oRRgKxPKdEXI8X7/ni7wUSOwwxT3SqhlURx1ROB9i8b1hn79UwKW+FMhoCQnBeMDyL4YytWUM0YvADPm5gBAItxtOhy9ICFJNYLgVbQeM6ACGe7FIigBcvwf2Bu+CWhDA4lRE7SfSn2g9STCN2u1Yr+TtFtLQADcC2u45fkC+pM0hBwpSyx8NEF+Dky9pczklkv9aII9tQGqT/YQLMg55e37ZZqDq1uP0Q9MfQ8T5/zrfv6M4quKCheJpvlAKfpDK1VvGJb1ZfMTxoNJaHdEmX6He+dheXR04DAQxGO7ANFrqv9DD1eyBSWH6Hv9wDLpB/TD0m2UcWWSTfZi2CsCimuzLtF4AgEXTW9WvFXxhkQSrwp8CtIKKRRDNxZ8Fn1hALIJkLrWCbywgFkEwF1hALCAWQTaXa4GbL0f/RXDz5eiDDDdfRMW+oXhBNV9kBcbXesFmUcSUc4pqebkfXCuxCLhWWhHMrNWEL/NF1tZKKYK2VkIRRLi4vwgSXNpfBAEu7C+CDJf3lNv7i85+kH2tzrloeC3ayx7vgDWcARqOBsEAAAAASUVORK5CYII="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAARVBMVEUAAACy6fHl5eXq6uro6Ojm5ubp6enq6urm5ubi4uLj4+Pf39/o6Ojh4eES3/kP5/8k6f8M5/8G5v8A5f8G4f0C4P0E2/uRTESCAAAAF3RSTlMAEFuV5P///8EbLv//jCngQ/z//6X0kyzJZw0AAAJ0SURBVHgB7NYHlqQ6DIVhOejKLsv7X27ndj0KrELAm/zNSZPuTz5Nv7h/QkyZISLIJQa6WE2QBZR65XyWFUi+0TVCkS2A5EoXSLINAKTQaVmMAMCBTqksdgByoxNuMocLClUMGCodxfsCEs7fXzMAPv982gEkOiDs34dU8iuOAPL5J8gO4EZe2RfIl5/Ao9aYVURySX3P6SRvgD8KineiqdIT7A3ICHyQFMgSXPvjGvEIqCKSIfoD3NoioJpOvsXrQFsGtBx9y7BFVwHrHPhYYBT0S6QJde8D7R0vAwi07cA+f+wzLwKa/AHMfAV4EdDqvUSY4XYv6F068sPK/Cn6BL1j32MK7DgDZv2Pm+dFgx3gQe/i/k8FTK2tCsZNCHDOA2P+oVB2vcp4StukkGlTx2rcxo0f2IEKH2lfBeXBvERU4LKaf2d+LKrCQcfgqhDpilMYc8qs49fHH1WaCOw7AcU7fcQ01RV78TzQaa5csM+VDNlxgXS1bz5Drttg7HMg0409++sAR3oitP3XB+q5w0Ph4/uF9uhWgY197rRPKGwcv/qv/1otrJv777C5zz2QR+iNGXMP661Xcguxl9yeyqXH+tpeXWQxDMNAAG0OYBL4/jct+ikrOS+acvvXEzDO4SP95VIynvHVRtTqVoa51fj7t75Qic8o9IWl0VVbZhm+sswehYYyyfBQAhNEproZNvsnSciIm2EjgRkyZTJD8TlSMupm2Oj7TVEmk90MGzfj6zT0SYaHkYl8gfs0Y++PyKIqGc/8fV/HIay/YEB/AaD+WoH9BYD6ywNczsAM4XOE99d7ThHWXyu4vwDWX4Av7K+/E4vvci3LGOUMAAAAAElFTkSuQmCC"},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAPFBMVEUAAADZ2dnl5eXn5+fo6Ojm5ubp6enq6urg4ODm5ubQ0NDBwcHo6OjExMS9vb2/v7/AwMC8vLy9vb23t7ftsDFCAAAAFHRSTlMAEVuR2P////67J0z///+q+4HR+IsFiaoAAAJsSURBVHgB7ZWHYusgDEUlY4lhsv//Xx+NGtrEhliJ3vbpXvdUAwwbfzg4uJHYe88hDmie7tjfwdHSkUa/QJjABox+CWY/mlTh/DJc8BHeZvRtQYHeLAKz7wvYp7em69uwgQF9B668bqB1Ao+m850LmGz3cy5gZzyAKnhr0HFdvjDabmgVvLNJo04Q9BPQCTgEouy9D9G5NeU4ZT7T1ZBl5vm5I2sF/iYQvEODHZ31iKqgqAboMOgF0qMqKDiDU3wvCPeCHPVL2hHkmaBXA2nzRVAN+ZPhpSXiZcIHdC9gbAheyKdrPlEVdJukz5cKKIghV5K2Rcz9CgqS3y8hKPPrkK+K7wLSrSm3oWu8kIVOj5w6Xw4azQ3D+quCu9zyhWdDQFbFi4AWDXHVUeanZKlgZmg9rh3z2nCBJH5uaAiQldwalKnSbRGMrOIhXuheFolYQa6BM8MADSIrIApEWQT59iKGBA2QdAVk+ewRgiYuKwpoChy0GQ3yCaFDUDQoS76mgNVj6OQTQpdEmvy5gAZ4Aob1/VE3SBjp9fwIa3A9A/X642AdGKnz/2d9/+fgSJnnSCgv5pND0IAuEHGbh/Qg8TpwcjE8Z4xuSLCx8YewK8DPZF/YBL9DgGlJkBCsOBwP+CjA8k0wIpXU3elecDqWzxLYcN5/cJy+BFOJL5zBiJMYzkkE6Sz5J8MpH0Rx/XCQeBmLGUn6VCnVWDNdpIp94TKBPTKK2vy/TlBXs66s8LcMGQ+fmy/vZGXRsPkS/3XQRGE2Csm7fL8qLqZXRaqbI4K6UWZzOOyXruv94U984Pz5z+RNcCnAxsYv5gcBJmV5WFk6DwAAAABJRU5ErkJggg=="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAYFBMVEUAAADT3t/h4eHq6urp6enn5+fp6enq6urm5ubG0NLLy8uds7bo6Ojj4+Pn5+fh4eHe3t4U5/8Y5P0B5f/ExMS+vr4K5v8D3vy+vr4A3/28vLy9vb29vb29vb3BwcG4uLjMVSTuAAAAH3RSTlMAD1uV0e7//7ohOgX///+M/+g6//3/252t9H3R8/+TcABA0AAAAzBJREFUeAHsmAe6rCAMhUWGBO8kwf1v9jbsSonM6+9fwPm/k1jpfnP+Y3r7cICI4HxvXp0+WMAd4IdXxj/wBKB7e9VsPF4BgO4lLSxeA5+gb45/PjAjAHDPxvEQ5gWATWN6wzQwGxp2bbAgiNzu8HR1AjQ3BQ+sE4Brvz7zArCtC0jnN1xKvihoG9KAGgG86TesE7gfXACAmYUQ0XkbaupYrUDGLwPFnZMtbl20AlwEEWtarlGEM+PIIouACPqcoNcLeGTeCD6xrXfxcQnjQUC++TG0hcZPw1aQ7eBuCmYDTST3QOp8gPHbsBeASQhu5Mt3PssiyA5JnR8b8GSglUF7nwFkG0QDUamCU+cDzfksW4HoLlOAXIMpn4WKM7LaeACO+ZGNoK9/VECVIDpKSzCgio8X0VyAZTslX7VlKELzBqJjNbhrQYDq8AgvG5gleYEBJXP+xpEdUfcAFbLJXzaRfVgMoi0QA2VL9oHqlQViHMnRMKQERlGBlrclHeEuSSBFAYkCOhFiWNueRZIFZMj+gCgGlChguxyG6wqk89kUfgK5LV/6roBxUIBivn7Dy4+4lOefyvddDYGz148k8yVUH4Zwej5CqXzuNcc5TJf5X8BlPgfTaTDBsUCaQ/oYhjtHasG7sYjz4aO9OtlyEASiMHwrO6xNBolYiL7/WzYcbKtP5tBmzpdxVb8zC4Ovh2HGTZnVyuB2eL2J1vinOsJBcf4cBRvhENqM6EaB7W9ge5vAejNZ3yTQaKDB9cgcChjaOULlx8jVjnYD5KzDpNVAi6tVcWot/DfAUsd/1UyHyNukqzRQdTbxM51klpDnmRwwuRiED5zlBiXI5USfv5LgCAo8FhpGGeNjQgVvsGPdtG2zRiE97no+ZsdiR8K4Be7tqL9JYFHrGagXmFvlp+mJ9QfOAhFKkcuz+xD1OeF2xxFzYYFlujRDlC7ZZOdcSxcJSuR56dLMgXTJhsRD9TZHUcCEEAZhaAAsQ/xnMJE4v7zgBkeABhJywWFCXRh1VL7gaGB3wSHWABOKaWAHQwPgGwTAGmDcIgAJI8FtApBZ5mOIoEputHKc3jfFjOf29QPQe5BuJum+4AAAAABJRU5ErkJggg=="},function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAKlBMVEUAAAD81kP71UL71kD81kD81z/91z793Eb4yz/920L92kD92j792Tv92TcDye7yAAAACXRSTlMAH1Bzm8vn/wvXXbMnAAAC1klEQVR4Ae2XNdPbQBiEzeMujE2YmZmZmZm5CmhUhfMTojnXQbkNO12YmaP/El8u1r7S+uSvC31b76Pd907SzaWa9ccq3WPW6j3Hdq0c3rJJ9mLPNY6qyvfV0eknGvszc1z1UyXfL98+0rWR//QexwFQqZwf29gfASqXEomM9jtuDfArmkholV7jAFAa0LpoX6w+DgFa223+M0594OnchEIgADy/Xr9UO6cmFQOeL6sbsMcOPEQE1N4J5cWB59uSJkACgAf8Up11khKeryVgjgAUA/fppRB+l4Cq4i9Ih2SAxxYje64bvnwAHtgbidcbQLzTOVHIBBCwNwKMEY0sCe+kv7hHJGBmA9w1wEe5d1kR4AGoSCAYKoCCXFSvLvAi2Co/NQTUEkoEvJXvhRzBo5kN8F7MLAPQKAZ8w9SZqtHY9S7YgABbl3O1WUNhQIkWKQimhkBeua7ZYxeNGFiKV1V5nn44AtBIAG9CoJ9SntLtwwnQCCOIdR3n1aQQwADepnnVBBOBkdEoBLAR69QveRyAEYIPAjAR2o8ANCJgH54dBpRphOCjBKRK3CgGsJ8baUlA+hFgA/aRv0yNaAb2I4CA9T7WB4Wo0QcBQPCjEQHz4UUhaiRejfHsRwAAvHz9yY8ANBKvd2fuzwHyA8rf4cdzgPhEczBxAAD8BDJkRgAaid9MsWz3I+C7+H0vsBdCwPsUNCAxIFxVqMB+Coj87rPkR0BIyAOleID8FKCPLGhC3I+AGvIueuyyHwFG0WM384zXEwHYNmgD2xGArwdqD7f0I2BbDMjARksqG0EL2Q873gvobB3/dwBrCShuJL8cGbuGse0DyJGh9MGoPxDEx5bwQe2ifhmwDC6agualCaAz0i81N2VRb2M3daDt9ivNJmOP+j/QxFDmUCDaGH3smngtO0T+Rhe5Q8l+Vma29O/s2pTL66ZwXPvlla7Hhz7ietysP1A/ALZC9b117sbZAAAAAElFTkSuQmCC"},function(A,e){A.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDE5IDIwIj4KICA8cGF0aCBmaWxsPSIjRDhEOEQ4IiBkPSJNMSw4IEMwLjQ0NzcxNTI1LDggMCw3LjU1MjI4NDcgMCw3IEMwLDYuNDQ3NzE1MyAwLjQ0NzcxNTI1LDYgMSw2IEw5LDYgQzkuOTA1MzAxNjcsNi4wMDAxOTMzIDEwLjY5Nzg0MTMsNS4zOTIyNDg2IDEwLjkzMjIzMTEsNC41MTc4MTU5IEMxMS4xNjY2MjA4LDMuNjQzMzgzMiAxMC43ODQ0MDM2LDIuNzIwNTQ3NSAxMC4wMDAzNzYsMi4yNjc5MTk4IEM5LjIxNjM0ODQsMS44MTUyOTIgOC4yMjYwNDgzMSwxLjk0NTc1ODQgNy41ODYsMi41ODYgQzcuMTkzNjIxMTEsMi45NjQ5NzIyIDYuNTY5OTE1MjIsMi45NTk1NTI0IDYuMTg0MTgxNDIsMi41NzM4MTg2IEM1Ljc5ODQ0NzYzLDIuMTg4MDg0OCA1Ljc5MzAyNzc5LDEuNTY0Mzc4OSA2LjE3MiwxLjE3MiBDNy40NTIwOTY2MywtMC4xMDg0ODMyIDkuNDMyNjk2OCwtMC4zNjk0MTU5IDExLjAwMDc1MiwwLjUzNTgzOTUgQzEyLjU2ODgwNzIsMS40NDEwOTUgMTMuMzMzMjQxNywzLjI4Njc2NjQgMTIuODY0NDYyMSw1LjAzNTYzMTggQzEyLjM5NTY4MjUsNi43ODQ0OTczIDEwLjgxMDYwMzMsOC4wMDAzODY2IDksOCBMMSw4IFogTTE2LDEwIEMxNi40NTI2NTA4LDEwLjAwMDA5NjcgMTYuODQ4OTIwNiw5LjY5NjEyNDMgMTYuOTY2MTE1NSw5LjI1ODkwOCBDMTcuMDgzMzEwNCw4LjgyMTY5MTYgMTYuODkyMjAxOCw4LjM2MDI3MzggMTYuNTAwMTg4LDguMTMzOTU5OSBDMTYuMTA4MTc0Miw3LjkwNzY0NiAxNS42MTMwMjQyLDcuOTcyODc5MiAxNS4yOTMsOC4yOTMgQzE0LjkwMDYyMTEsOC42NzE5NzIyIDE0LjI3NjkxNTIsOC42NjY1NTI0IDEzLjg5MTE4MTQsOC4yODA4MTg2IEMxMy41MDU0NDc2LDcuODk1MDg0OCAxMy41MDAwMjc4LDcuMjcxMzc4OSAxMy44NzksNi44NzkgQzE0LjgzOTA3MjUsNS45MTg2Mzc2IDE2LjMyNDUyMjYsNS43MjI5MzggMTcuNTAwNTY0LDYuNDAxODc5NyBDMTguNjc2NjA1NCw3LjA4MDgyMTMgMTkuMjQ5OTMxMyw4LjQ2NTA3NDggMTguODk4MzQ2Niw5Ljc3NjcyMzkgQzE4LjU0Njc2MTksMTEuMDg4MzcyOSAxNy4zNTc5NTI1LDEyLjAwMDI5IDE2LDEyIEwyLDEyIEMxLjQ0NzcxNTI1LDEyIDEsMTEuNTUyMjg0NyAxLDExIEMxLDEwLjQ0NzcxNTMgMS40NDc3MTUyNSwxMCAyLDEwIEwxNiwxMCBaIE0xNSwxNiBMMSwxNiBDMC40NDc3MTUyNSwxNiAwLDE1LjU1MjI4NDcgMCwxNSBDMCwxNC40NDc3MTUzIDAuNDQ3NzE1MjUsMTQgMSwxNCBMMTUsMTQgQzE2LjM1Nzk1MjUsMTMuOTk5NzEgMTcuNTQ2NzYxOSwxNC45MTE2MjcxIDE3Ljg5ODM0NjYsMTYuMjIzMjc2MSBDMTguMjQ5OTMxMywxNy41MzQ5MjUyIDE3LjY3NjYwNTQsMTguOTE5MTc4NyAxNi41MDA1NjQsMTkuNTk4MTIwMyBDMTUuMzI0NTIyNiwyMC4yNzcwNjIgMTMuODM5MDcyNSwyMC4wODEzNjI0IDEyLjg3OSwxOS4xMjEgQzEyLjYxOTA0MzQsMTguODY5OTI1NSAxMi41MTQ3ODc0LDE4LjQ5ODEyMjEgMTIuNjA2MzAyOCwxOC4xNDg0OTI3IEMxMi42OTc4MTgzLDE3Ljc5ODg2MzIgMTIuOTcwODYzMiwxNy41MjU4MTgzIDEzLjMyMDQ5MjcsMTcuNDM0MzAyOCBDMTMuNjcwMTIyMSwxNy4zNDI3ODc0IDE0LjA0MTkyNTUsMTcuNDQ3MDQzNCAxNC4yOTMsMTcuNzA3IEMxNC42MTMwMjQyLDE4LjAyNzEyMDggMTUuMTA4MTc0MiwxOC4wOTIzNTQgMTUuNTAwMTg4LDE3Ljg2NjA0MDEgQzE1Ljg5MjIwMTgsMTcuNjM5NzI2MiAxNi4wODMzMTA0LDE3LjE3ODMwODQgMTUuOTY2MTE1NSwxNi43NDEwOTIgQzE1Ljg0ODkyMDYsMTYuMzAzODc1NyAxNS40NTI2NTA4LDE1Ljk5OTkwMzMgMTUsMTYgWiIvPgo8L3N2Zz4K"},function(A,e){A.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBmaWxsPSIjMDBFNUZGIiBkPSJNMTIsMSBDNy43Mzg3NSw3LjI5NzM3NSA1LDExLjIzNjYyNSA1LDE1LjA2NTYyNSBDNSwxOC44OTYzNzUgOC4xMzE2MjUsMjIgMTIsMjIgQzE1Ljg2ODM3NSwyMiAxOSwxOC44OTYzNzUgMTksMTUuMDY1NjI1IEMxOSwxMS4yMzY2MjUgMTYuMjYxMjUsNy4yOTczNzUgMTIsMSBaIi8+Cjwvc3ZnPgo="},function(A,e){A.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBmaWxsPSIjRDhEOEQ4IiBkPSJNMTIsMkExMCwxMCAwIDAsMCAyLDEyQTEwLDEwIDAgMCwwIDEyLDIyQTEwLDEwIDAgMCwwIDIyLDEyQTEwLDEwIDAgMCwwIDEyLDJNMTIsNEE4LDggMCAwLDEgMjAsMTJDMjAsMTQuNCAxOSwxNi41IDE3LjMsMThDMTUuOSwxNi43IDE0LDE2IDEyLDE2QzEwLDE2IDguMiwxNi43IDYuNywxOEM1LDE2LjUgNCwxNC40IDQsMTJBOCw4IDAgMCwxIDEyLDRNMTQsNS44OUMxMy42Miw1LjkgMTMuMjYsNi4xNSAxMy4xLDYuNTRMMTEuODEsOS43N0wxMS43MSwxMEMxMSwxMC4xMyAxMC40MSwxMC42IDEwLjE0LDExLjI2QzkuNzMsMTIuMjkgMTAuMjMsMTMuNDUgMTEuMjYsMTMuODZDMTIuMjksMTQuMjcgMTMuNDUsMTMuNzcgMTMuODYsMTIuNzRDMTQuMTIsMTIuMDggMTQsMTEuMzIgMTMuNTcsMTAuNzZMMTMuNjcsMTAuNUwxNC45Niw3LjI5TDE0Ljk3LDcuMjZDMTUuMTcsNi43NSAxNC45Miw2LjE3IDE0LjQxLDUuOTZDMTQuMjgsNS45MSAxNC4xNSw1Ljg5IDE0LDUuODlNMTAsNkExLDEgMCAwLDAgOSw3QTEsMSAwIDAsMCAxMCw4QTEsMSAwIDAsMCAxMSw3QTEsMSAwIDAsMCAxMCw2TTcsOUExLDEgMCAwLDAgNiwxMEExLDEgMCAwLDAgNywxMUExLDEgMCAwLDAgOCwxMEExLDEgMCAwLDAgNyw5TTE3LDlBMSwxIDAgMCwwIDE2LDEwQTEsMSAwIDAsMCAxNywxMUExLDEgMCAwLDAgMTgsMTBBMSwxIDAgMCwwIDE3LDlaIj48L3BhdGg+Cjwvc3ZnPgo="},function(A,e,t){"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=function(A){return A(n||(e=["\n ha-card {\n display: flex;\n flex-flow: row;\n align-items: center;\n padding: 16px;\n color: var(--primary-text-color, #000);\n font-weight: var(--swc-font-weight, 400);\n transition: background 1s;\n cursor: pointer;\n }\n ha-card[bg] {\n font-weight: var(--swc-font-weight, 500);\n background: var(--day-color);\n color: var(--text-color);\n }\n ha-card[bg][night] {\n background: var(--night-color);\n }\n ha-card[bg][fade] {\n background: linear-gradient(var(--day-color), transparent 250%);\n }\n ha-card[bg][fade][night] {\n background: linear-gradient(var(--night-color) 0%, transparent 300%);\n }\n .weather__icon {\n height: 40px;\n width: 40px;\n background-size: contain;\n background-repeat: no-repeat;\n flex: 0 0 40px;\n color: white;\n margin-right: 16px;\n }\n .weather__icon--small {\n display: inline-block;\n height: 1em;\n width: 1em;\n min-width: 1em;\n flex: initial;\n margin: 0 .2em;\n }\n .weather__info {\n display: flex;\n flex-flow: column;\n justify-content: space-between;\n min-height: 42px;\n min-width: 0;\n }\n .weather__info__row {\n display: flex;\n align-items: center;\n max-width: 100%;\n }\n .weather__info__item {\n padding-left: 8px;\n display: flex;\n align-items: center;\n }\n .weather__info--add {\n padding-left: 8px;\n margin-left: auto;\n align-items: flex-end;\n }\n .weather__info__state,\n .weather__info__title,\n .weather__info__row {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n "],t||(t=e.slice(0)),n=Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))));var e,t};e.default=i},function(A,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.handleClick=void 0;e.handleClick=(A,e,t,n)=>{let i;switch(n.action){case"more-info":i=new Event("hass-more-info",{composed:!0}),i.detail={entityId:n.entity||t.entity},A.dispatchEvent(i);break;case"navigate":if(!n.navigation_path)return;history.pushState(null,"",n.navigation_path),i=new Event("location-changed",{composed:!0}),i.detail={replace:!1},window.dispatchEvent(i);break;case"call-service":if(!n.service)return;const[M,s]=n.service.split(".",2),a={...n.service_data};e.callService(M,s,a)}}}]);
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
index 24249d361..b532bc0b5 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
@@ -16,6 +16,9 @@ views:
template: "card_title"
name: "Congrats with your installation 🎉"
label: "Explore here some of the wonderfull 'Minimalistic-UI' cards we offer"
+ - type: "markdown"
+ content: >
+ # Welcome {{ user[0]|upper}}{{user[1:] }}
- type: "custom:auto-entities"
card:
type: "grid"
@@ -28,11 +31,7 @@ views:
include:
- domain: "weather"
options:
- type: "custom:button-card"
- template: "custom_card_paddy_welcome_with_weather"
- variables:
- ulm_custom_card_paddy_welcome_time: "sensor.time"
- ulm_custom_card_paddy_welcome_weather_provider: "this.entity_id"
+ type: "weather-forecast"
- type: "custom:button-card"
template: "card_title"
name: "Lights"
diff --git a/requirements_dev.txt b/requirements_dev.txt
index de96e5564..0ad91112c 100644
--- a/requirements_dev.txt
+++ b/requirements_dev.txt
@@ -1,9 +1,13 @@
-# git+git://github.com/home-assistant/home-assistant.git@dev
+#
+# If the dev version of homeassistant gives you problems:
+# pip install git+git://github.com/home-assistant/core.git@2021.12.10
+#
jinja2
mkdocs-awesome-pages-plugin
mkdocs-material
pre-commit
-# Causing some wierd Typguard error in devcontainer(typing-extensions-3.7.4.3)
-# typing-extensions>=4.0.0
+# Optional, if container start takes really long due to PyTurboJPEG==1.6.3
+# wheel
+# PyTurboJPEG==1.6.3
From bdb093705d283acd88b65a5dac2c345efb3a168c Mon Sep 17 00:00:00 2001
From: Rick Stokkingreef
Date: Wed, 26 Jan 2022 19:09:14 +0000
Subject: [PATCH 018/248] Revert to welcome card
---
.../ui_lovelace_minimalist/lovelace/ui-lovelace.yaml | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
index b532bc0b5..b64b79901 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
@@ -16,9 +16,6 @@ views:
template: "card_title"
name: "Congrats with your installation 🎉"
label: "Explore here some of the wonderfull 'Minimalistic-UI' cards we offer"
- - type: "markdown"
- content: >
- # Welcome {{ user[0]|upper}}{{user[1:] }}
- type: "custom:auto-entities"
card:
type: "grid"
@@ -31,7 +28,11 @@ views:
include:
- domain: "weather"
options:
- type: "weather-forecast"
+ type: "custom:button-card"
+ template: "welcome_with_weather"
+ variables:
+ ulm_custom_card_paddy_welcome_time: "sensor.time"
+ ulm_custom_card_paddy_welcome_weather_provider: "this.entity_id"
- type: "custom:button-card"
template: "card_title"
name: "Lights"
From c74081449c33862e43c771dc78ca50062dfd89c3 Mon Sep 17 00:00:00 2001
From: Rick Stokkingreef
Date: Wed, 26 Jan 2022 19:44:33 +0000
Subject: [PATCH 019/248] Fix warning about unknown panel when sidebar entry is
unchecked
---
custom_components/ui_lovelace_minimalist/load_dashboard.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/custom_components/ui_lovelace_minimalist/load_dashboard.py b/custom_components/ui_lovelace_minimalist/load_dashboard.py
index 3f4f7782f..2e2a5ad43 100644
--- a/custom_components/ui_lovelace_minimalist/load_dashboard.py
+++ b/custom_components/ui_lovelace_minimalist/load_dashboard.py
@@ -36,4 +36,5 @@ def load_dashboard(hass: HomeAssistant, ulm: UlmBase):
_register_panel(hass, dashboard_url, "yaml", dashboard_config, True)
else:
- async_remove_panel(hass, "ui-lovelace-minimalist")
+ if dashboard_url in hass.data["lovelace"]["dashboards"]:
+ async_remove_panel(hass, "ui-lovelace-minimalist")
From 6e725dc156002828b46c3193bc4086d18e4816a6 Mon Sep 17 00:00:00 2001
From: basbruss <68892092+basbruss@users.noreply.github.com>
Date: Wed, 26 Jan 2022 20:58:06 +0100
Subject: [PATCH 020/248] Add welcome_card
---
.../lovelace/translations/DA.yaml | 4 +
.../lovelace/translations/DE.yaml | 4 +
.../lovelace/translations/EN.yaml | 4 +
.../lovelace/translations/ES.yaml | 4 +
.../lovelace/translations/FR.yaml | 4 +
.../lovelace/translations/IT.yaml | 4 +
.../lovelace/translations/NL.yaml | 4 +
.../lovelace/translations/PL.yaml | 4 +
.../lovelace/translations/PT.yaml | 5 +
.../lovelace/translations/SE.yaml | 4 +
.../cards/card_paddy_welcome.yaml | 206 +++++++++
docs/usage/cards/card_paddy_welcome.md | 430 ++++++++++++++++++
12 files changed, 677 insertions(+)
create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_paddy_welcome.yaml
create mode 100644 docs/usage/cards/card_paddy_welcome.md
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/DA.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/DA.yaml
index ea08c6784..4df6ca2df 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/DA.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/DA.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "AKTIVERET"
ulm_playing: "Spiller"
ulm_paused: "Sat på pause"
+ ulm_morning: "Good morning"
+ ulm_afternoon: "Good afternoon"
+ ulm_evening: "Good evening"
+ ulm_hello: "Hello"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/DE.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/DE.yaml
index 9488b5638..86867d5ce 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/DE.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/DE.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "AUSGELÖST"
ulm_playing: "Spielt"
ulm_paused: "Pausiert"
+ ulm_morning: "Guten Morgen"
+ ulm_afternoon: "Guten Tag"
+ ulm_evening: "Guten Abend"
+ ulm_hello: "Hallo"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/EN.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/EN.yaml
index 93a85585f..389bbaa3c 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/EN.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/EN.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "TRIGGERED"
ulm_playing: "Playing"
ulm_paused: "Paused"
+ ulm_morning: "Good morning"
+ ulm_afternoon: "Good afternoon"
+ ulm_evening: "Good evening"
+ ulm_hello: "Hello"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/ES.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/ES.yaml
index 181acb59d..18b063e61 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/ES.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/ES.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "Alarma en curso"
ulm_playing: "Reproduciendo"
ulm_paused: "Pausa"
+ ulm_morning: "Buenos días"
+ ulm_afternoon: "Buenas tardes"
+ ulm_evening: "Buenas noches"
+ ulm_hello: "Hola"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/FR.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/FR.yaml
index b20cda7a6..a70d4ed8c 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/FR.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/FR.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "TRIGGERED"
ulm_playing: "Playing"
ulm_paused: "Paused"
+ ulm_morning: "Bonjour"
+ ulm_afternoon: "Bonne après-midi"
+ ulm_evening: "Bonsoir"
+ ulm_hello: "Bonjour"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml
index 91ee1f4ed..a39f54b2e 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "TRIGGERED"
ulm_playing: "Playing"
ulm_paused: "Paused"
+ ulm_morning: "Buon giorno"
+ ulm_afternoon: "Buon pomeriggio"
+ ulm_evening: "Buona serata"
+ ulm_hello: "Ciao
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/NL.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/NL.yaml
index 7ee531c5a..add381739 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/NL.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/NL.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "Gedetecteerd"
ulm_playing: "Speelt af"
ulm_paused: "Gepauzeerd"
+ ulm_morning: "Goede morgen"
+ ulm_afternoon: "Goede middag"
+ ulm_evening: "Goede avond"
+ ulm_hello: "Hallo"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/PL.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/PL.yaml
index d23152afc..005ccff09 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/PL.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/PL.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "Naruszony"
ulm_playing: "Odtwarzanie"
ulm_paused: "Wstrzymano"
+ ulm_morning: "Dzień dobry"
+ ulm_afternoon: "Dzień dobry"
+ ulm_evening: "Dobry wieczór"
+ ulm_hello: "Witaj"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml
index 5de47046b..39324adcf 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml
@@ -28,3 +28,8 @@ ulm_language_variables:
ulm_alarm_triggered: "TRIGGERED"
ulm_playing: "Playing"
ulm_paused: "Paused"
+ ulm_morning: "Bom dia"
+ ulm_afternoon: "Boa tarde"
+ ulm_evening: "Boa noite"
+ ulm_hello: "Olá"
+
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/SE.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/SE.yaml
index 7dda438f9..b5d6dddd3 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/SE.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/SE.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "LARM UTLÖST"
ulm_playing: "Spelar"
ulm_paused: "Pausad"
+ ulm_morning: "Good morning"
+ ulm_afternoon: "Good afternoon"
+ ulm_evening: "Good evening"
+ ulm_hello: "Hello"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_paddy_welcome.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_paddy_welcome.yaml
new file mode 100644
index 000000000..3a337a0de
--- /dev/null
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_paddy_welcome.yaml
@@ -0,0 +1,206 @@
+---
+##########################################
+# #
+# Design by Paddy #
+# #
+##########################################
+card_paddy_welcome:
+ template:
+ - "ulm_language_variables"
+ show_icon: false
+ show_name: false
+ show_label: false
+ styles:
+ grid:
+ - grid-template-areas: "'item1'"
+ - grid-template-columns: "1fr"
+ - grid-template-rows: "min-content"
+ - row-gap: "12px"
+ card:
+ - border-radius: "var(--border-radius)"
+ - box-shadow: "var(--box-shadow)"
+ - padding: "12px"
+ custom_fields:
+ item1:
+ card:
+ type: "markdown"
+ content: >
+ [[[
+ let time = states[variables.ulm_card_paddy_welcome_time].state;
+ let welcome = '';
+
+ if (time > '18:00'){
+ welcome = variables.ulm_evening;
+ } else if (time > '12:00'){
+ welcome = variables.ulm_afternoon;
+ } else if (time > '05:00'){
+ welcome = variables.ulm_morning;
+ } else {
+ welcome = variables.ulm_hello;
+ }
+
+ return welcome + ', ' + user.name + '!';
+ ]]]
+ card_mod:
+ style: |
+ ha-card {
+ border-radius: 14px;
+ box-shadow: none;
+ font-size: 30px;
+ text-align: left;
+ cursor: default;
+ }
+
+card_paddy_welcome_with_weather:
+ template:
+ - "ulm_language_variables"
+ show_icon: false
+ show_name: false
+ show_label: false
+ styles:
+ grid:
+ - grid-template-areas: "'item1' 'item2'"
+ - grid-template-columns: "1fr"
+ - grid-template-rows: "min-content min-content"
+ - row-gap: "12px"
+ card:
+ - border-radius: "var(--border-radius)"
+ - box-shadow: "var(--box-shadow)"
+ - padding: "12px"
+ custom_fields:
+ item1:
+ card:
+ type: "markdown"
+ content: >
+ [[[
+ let time = states[variables.ulm_card_paddy_welcome_time].state;
+ let welcome = '';
+
+ if (time > '18:00'){
+ welcome = variables.ulm_evening;
+ } else if (time > '12:00'){
+ welcome = variables.ulm_afternoon;
+ } else if (time > '05:00'){
+ welcome = variables.ulm_morning;
+ } else {
+ welcome = variables.ulm_hello;
+ }
+
+ return welcome + ', ' + user.name + '!';
+ ]]]
+ card_mod:
+ style: |
+ ha-card {
+ border-radius: 14px;
+ box-shadow: none;
+ font-size: 30px;
+ text-align: left;
+ cursor: default;
+ }
+ item2:
+ card:
+ type: "weather-forecast"
+ entity: "[[[ return variables.ulm_card_paddy_welcome_weather_provider; ]]]"
+ show_forecast: false
+ card_mod:
+ style: |
+ ha-card.type-weather-forecast {
+ border-radius: 14px;
+ box-shadow: none;
+ }
+ ha-card.type-weather-forecast .state {
+ text-align: left;
+ font-size: 14px;
+ font-weight: bolder;
+ }
+ ha-card.type-weather-forecast .name {
+ text-align: left;
+ font-size: 14px;
+ }
+ ha-card.type-weather-forecast .temp-attribute {
+ text-align: right;
+ }
+ ha-card.type-weather-forecast .temp {
+ text-align: right;
+ font-size: medium;
+ font-weight: bolder;
+ margin-right: 16px;
+ }
+ ha-card.type-weather-forecast .temp span {
+ text-align: right;
+ font-size: medium;
+ font-weight: bolder;
+ }
+ ha-card.type-weather-forecast .attribute {
+ text-align: right;
+ font-size: smaller;
+ }
+
+card_paddy_welcome_with_news:
+ template:
+ - "ulm_language_variables"
+ show_icon: false
+ show_name: false
+ show_label: false
+ styles:
+ grid:
+ - grid-template-areas: "'item1' 'item2'"
+ - grid-template-columns: "1fr"
+ - grid-template-rows: "min-content min-content"
+ - row-gap: "12px"
+ card:
+ - border-radius: "var(--border-radius)"
+ - box-shadow: "var(--box-shadow)"
+ - padding: "12px"
+ custom_fields:
+ item1:
+ card:
+ type: "markdown"
+ content: >
+ [[[
+ let time = states[variables.ulm_card_paddy_welcome_time].state;
+ let welcome = '';
+
+ if (time > '18:00'){
+ welcome = variables.ulm_evening;
+ } else if (time > '12:00'){
+ welcome = variables.ulm_afternoon;
+ } else if (time > '05:00'){
+ welcome = variables.ulm_morning;
+ } else {
+ welcome = variables.ulm_hello;
+ }
+
+ return welcome + ', ' + user.name + '!';
+ ]]]
+ card_mod:
+ style: |
+ ha-card {
+ border-radius: 14px;
+ box-shadow: none;
+ font-size: 30px;
+ text-align: left;
+ cursor: default;
+ }
+ item2:
+ card:
+ type: "custom:home-feed-card"
+ card_id: "main_feed"
+ show_empty: false
+ more_info_on_tap: true
+ state_color: false
+ compact_mode: true
+ max_item_count: 3
+ show_icons: true
+ entities: >
+ [[[
+ return variables.ulm_card_paddy_welcome_news_entities;
+ ]]]
+ card_mod:
+ style: |
+ ha-card {
+ border-radius: 14px;
+ box-shadow: none;
+ font-size: 14px;
+ text-align: left;
+ }
diff --git a/docs/usage/cards/card_paddy_welcome.md b/docs/usage/cards/card_paddy_welcome.md
new file mode 100644
index 000000000..574ac0b5f
--- /dev/null
+++ b/docs/usage/cards/card_paddy_welcome.md
@@ -0,0 +1,430 @@
+---
+title: card_paddy_welcome
+hide:
+ - toc
+---
+
+
+# "Welcome" card
+
+This is the `welcome-card` to show a welcome message to the user. It comes in four different versions:
+
+- welcome message (*card_paddy_welcome*)
+- welcome message + weather-forecast (*card_paddy_welcome_with_weather*)
+- welcome message + news (*card_paddy_welcome_with_news*) [based on home-feed-card]
+
+The card shows a time based message (good morning/afternoon/evening/hello) to the logged-in user with username. The second part of the card varies depending on what version you choose. *Note, that you have different requirements depending on the version!*
+
+## Credits
+
+Author: Paddy0174 - 2021
+Version: 1.0.0
+
+## Changelog
+
+
+1.0.0
+Initial release
+
+
+## Requirements
+
+This card needs the following to function correctly:
+
+
+
+## Usage
+
+```yaml
+- type: custom:button-card
+ template: card_paddy_welcome
+ variables:
+ ulm_card_paddy_welcome_time: sensor.time
+
+- type: custom:button-card
+ template: card_paddy_welcome_with_weather
+ variables:
+ ulm_card_paddy_welcome_time: sensor.time
+ ulm_card_paddy_welcome_weather_provider: weather.accu_weather
+
+- type: custom:button-card
+ template: paddy_welcome_with_news
+ variables:
+ ulm_card_paddy_welcome_time: sensor.time
+ ulm_card_paddy_welcome_news_entities:
+ - entity: sensor.waste_collection_paper
+ content_template: "{{display_name}} {{state}}"
+ - entity: sensor.waste_collection_waste
+ content_template: "{{display_name}} {{state}}"
+```
+
+## Variables
+
+
+
+Card type |
+Variable |
+Example |
+Required |
+Explanation |
+
+
+all |
+ulm_card_paddy_welcome_time |
+sensor.time |
+yes |
+This is your Home Assistant sensor.time |
+
+
+_welcome_with_weather |
+ulm_card_paddy_welcome_weather_provider |
+weather.accu_weather |
+yes |
+This is your weather provider |
+
+
+_welcome_with_news |
+ulm_card_paddy_welcome_news_entities |
+entity: sensor.waste_collection_paper content_template: "<b>{{display_name}}</b><br>{{state}}" |
+yes |
+A list of your entities to show in the news feed, see the note underneath. |
+
+
+
+> #### Note _welcome_with_news
+
+> This card is based on [home-feed-card](https://github.com/gadgetchnnel/lovelace-home-feed-card) and needs a little different configuration in the variables.
+> To allow almost all entites from HomeAssistant to show in the news, you're able to set all options that `home-feed-card` provides. This makes it necessary, that you set these entities in a list. Let me show you an example:
+>
+> ```yaml
+> # normally you do this
+> variables:
+> ulm_variable: your_variable_entity
+>
+> # here you need to do a list
+> variables:
+> ulm_variable:
+> - your_variable_entity_1
+> - your_variable_entity_2
+>
+> # to use an option from home-feed-card
+> variables:
+> ulm_variable:
+> - entity: your_variable_entity_1
+> content_template: "{{ display_name }} {{ state }}"
+> - your_variable_entity_2
+> ```
+>
+> You can find all available options and their description [here](https://github.com/gadgetchnnel/lovelace-home-feed-card#entity-object).
+>
+> I recommend to use a `content_template` to format the output for every news item, eg. like this:
+>
+> ```yaml
+> content_template: "{{ display_name }} {{ state }}"
+> ```
+
+## Example
+
+```yaml
+- type: custom:button-card
+ template: card_paddy_welcome_with_news
+ variables:
+ ulm_card_paddy_welcome_news_entities:
+ - entity: input_datetime.alarm_clock
+ content_template: "{{display_name}} {{state}}"
+ - entity: sensor.waste_collection_bio
+ content_template: "{{display_name}} {{state}}"
+ - entity: sensor.waste_collection_paper
+ content_template: "{{display_name}} {{state}}"
+ - entity: sensor.waste_collection_plastic
+ content_template: "{{display_name}} {{state}}"
+```
+
+## Template code
+
+```yaml
+card_paddy_welcome:
+ template:
+ - "ulm_language_variables"
+ show_icon: false
+ show_name: false
+ show_label: false
+ styles:
+ grid:
+ - grid-template-areas: "'item1'"
+ - grid-template-columns: "1fr"
+ - grid-template-rows: "min-content"
+ - row-gap: "12px"
+ card:
+ - border-radius: "var(--border-radius)"
+ - box-shadow: "var(--box-shadow)"
+ - padding: "12px"
+ custom_fields:
+ item1:
+ card:
+ type: "markdown"
+ content: >
+ [[[
+ let time = states[variables.ulm_card_paddy_welcome_time].state;
+ let welcome = '';
+
+ if (time > '18:00'){
+ welcome = variables.ulm_evening;
+ } else if (time > '12:00'){
+ welcome = variables.ulm_afternoon;
+ } else if (time > '05:00'){
+ welcome = variables.ulm_morning;
+ } else {
+ welcome = variables.ulm_hello;
+ }
+
+ return welcome + ', ' + user.name + '!';
+ ]]]
+ card_mod:
+ style: |
+ ha-card {
+ border-radius: 14px;
+ box-shadow: none;
+ font-size: 30px;
+ text-align: left;
+ cursor: default;
+ }
+
+card_paddy_welcome_with_weather:
+ template:
+ - "ulm_language_variables"
+ show_icon: false
+ show_name: false
+ show_label: false
+ styles:
+ grid:
+ - grid-template-areas: "'item1' 'item2'"
+ - grid-template-columns: "1fr"
+ - grid-template-rows: "min-content min-content"
+ - row-gap: "12px"
+ card:
+ - border-radius: "var(--border-radius)"
+ - box-shadow: "var(--box-shadow)"
+ - padding: "12px"
+ custom_fields:
+ item1:
+ card:
+ type: "markdown"
+ content: >
+ [[[
+ let time = states[variables.ulm_card_paddy_welcome_time].state;
+ let welcome = '';
+
+ if (time > '18:00'){
+ welcome = variables.ulm_evening;
+ } else if (time > '12:00'){
+ welcome = variables.ulm_afternoon;
+ } else if (time > '05:00'){
+ welcome = variables.ulm_morning;
+ } else {
+ welcome = variables.ulm_hello;
+ }
+
+ return welcome + ', ' + user.name + '!';
+ ]]]
+ card_mod:
+ style: |
+ ha-card {
+ border-radius: 14px;
+ box-shadow: none;
+ font-size: 30px;
+ text-align: left;
+ cursor: default;
+ }
+ item2:
+ card:
+ type: "weather-forecast"
+ entity: "[[[ return variables.ulm_card_paddy_welcome_weather_provider; ]]]"
+ show_forecast: false
+ card_mod:
+ style: |
+ ha-card.type-weather-forecast {
+ border-radius: 14px;
+ box-shadow: none;
+ }
+ ha-card.type-weather-forecast .state {
+ text-align: left;
+ font-size: 14px;
+ font-weight: bolder;
+ }
+ ha-card.type-weather-forecast .name {
+ text-align: left;
+ font-size: 14px;
+ }
+ ha-card.type-weather-forecast .temp-attribute {
+ text-align: right;
+ }
+ ha-card.type-weather-forecast .temp {
+ text-align: right;
+ font-size: medium;
+ font-weight: bolder;
+ margin-right: 16px;
+ }
+ ha-card.type-weather-forecast .temp span {
+ text-align: right;
+ font-size: medium;
+ font-weight: bolder;
+ }
+ ha-card.type-weather-forecast .attribute {
+ text-align: right;
+ font-size: smaller;
+ }
+
+card_paddy_welcome_with_news:
+ template:
+ - "ulm_language_variables"
+ show_icon: false
+ show_name: false
+ show_label: false
+ styles:
+ grid:
+ - grid-template-areas: "'item1' 'item2'"
+ - grid-template-columns: "1fr"
+ - grid-template-rows: "min-content min-content"
+ - row-gap: "12px"
+ card:
+ - border-radius: "var(--border-radius)"
+ - box-shadow: "var(--box-shadow)"
+ - padding: "12px"
+ custom_fields:
+ item1:
+ card:
+ type: "markdown"
+ content: >
+ [[[
+ let time = states[variables.ulm_card_paddy_welcome_time].state;
+ let welcome = '';
+
+ if (time > '18:00'){
+ welcome = variables.ulm_evening;
+ } else if (time > '12:00'){
+ welcome = variables.ulm_afternoon;
+ } else if (time > '05:00'){
+ welcome = variables.ulm_morning;
+ } else {
+ welcome = variables.ulm_hello;
+ }
+
+ return welcome + ', ' + user.name + '!';
+ ]]]
+ card_mod:
+ style: |
+ ha-card {
+ border-radius: 14px;
+ box-shadow: none;
+ font-size: 30px;
+ text-align: left;
+ cursor: default;
+ }
+ item2:
+ card:
+ type: "custom:home-feed-card"
+ card_id: "main_feed"
+ show_empty: false
+ more_info_on_tap: true
+ state_color: false
+ compact_mode: true
+ max_item_count: 3
+ show_icons: true
+ entities: >
+ [[[
+ return variables.ulm_card_paddy_welcome_news_entities;
+ ]]]
+ card_mod:
+ style: |
+ ha-card {
+ border-radius: 14px;
+ box-shadow: none;
+ font-size: 14px;
+ text-align: left;
+ }
+```
+
+## Custom configuration Example
+
+Here is one example, on how you can extend this (actually every) card. In the end we have the welcome card extended by four buttons to have something like a header with a navigation.
+
+```yaml
+- type: horizontal-stack
+ cards:
+ - type: custom:button-card
+ template: edge
+ - type: custom:button-card
+ template: card_paddy_welcome
+ # here we override the styles to extend the welcome card with a second item
+ styles:
+ grid:
+ - grid-template-areas: '"item1" "item2"'
+ - grid-template-rows: min-content min-content
+ - row-gap: 12px
+ custom_fields:
+ # here we set up the second item and its contents
+ item2:
+ card:
+ type: horizontal-stack
+ cards:
+ - type: custom:button-card
+ template: edge
+ - type: custom:button-card
+ template: vertical_buttons
+ tap_action:
+ action: navigate
+ navigation_path: /ui-lovelace-minimalist/living
+ icon: "mdi:sofa"
+ name: Living
+ label: Livingroom
+ - type: custom:button-card
+ template: vertical_buttons
+ tap_action:
+ action: navigate
+ navigation_path: /ui-lovelace-minimalist/working
+ icon: "mdi:factory"
+ name: Working
+ label: Office
+ - type: custom:button-card
+ template: vertical_buttons
+ tap_action:
+ action: navigate
+ navigation_path: /ui-lovelace-minimalist/sleeping
+ icon: "mdi:bed-king-outline"
+ name: Sleeping
+ label: Bedroom
+ - type: custom:button-card
+ template: vertical_buttons
+ tap_action:
+ action: navigate
+ navigation_path: /ui-lovelace-minimalist/climate
+ icon: "mdi:air-conditioner"
+ name: Air Conditioning
+ label: Livingroom
+ - type: custom:button-card
+ template: edge
+ - type: custom:button-card
+ template: edge
+```
From 1585d37af13e3ab6b6f9f8b9e7d6bcb7c61d483a Mon Sep 17 00:00:00 2001
From: basbruss <68892092+basbruss@users.noreply.github.com>
Date: Wed, 26 Jan 2022 21:05:04 +0100
Subject: [PATCH 021/248] Fix code quality
---
.../ui_lovelace_minimalist/lovelace/translations/PT.yaml | 1 -
docs/usage/cards/card_paddy_welcome.md | 3 +--
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml
index 39324adcf..9ca9dd920 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/PT.yaml
@@ -32,4 +32,3 @@ ulm_language_variables:
ulm_afternoon: "Boa tarde"
ulm_evening: "Boa noite"
ulm_hello: "Olá"
-
diff --git a/docs/usage/cards/card_paddy_welcome.md b/docs/usage/cards/card_paddy_welcome.md
index 574ac0b5f..0921b3b5e 100644
--- a/docs/usage/cards/card_paddy_welcome.md
+++ b/docs/usage/cards/card_paddy_welcome.md
@@ -5,7 +5,7 @@ hide:
---
-# "Welcome" card
+# "Welcome" card
This is the `welcome-card` to show a welcome message to the user. It comes in four different versions:
@@ -53,7 +53,6 @@ This card needs the following to function correctly:
|
-
## Usage
```yaml
From d37e73bfebb86069f173e7d6790da96b0c3c1dd6 Mon Sep 17 00:00:00 2001
From: basbruss <68892092+basbruss@users.noreply.github.com>
Date: Wed, 26 Jan 2022 21:08:23 +0100
Subject: [PATCH 022/248] Missing quote
---
.../ui_lovelace_minimalist/lovelace/translations/IT.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml
index a39f54b2e..eb1542376 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/IT.yaml
@@ -31,4 +31,4 @@ ulm_language_variables:
ulm_morning: "Buon giorno"
ulm_afternoon: "Buon pomeriggio"
ulm_evening: "Buona serata"
- ulm_hello: "Ciao
+ ulm_hello: "Ciao"
From 884306634ea7e65dcbcf9cbb203556f08b43d92b Mon Sep 17 00:00:00 2001
From: BasBruss <68892092+basbruss@users.noreply.github.com>
Date: Thu, 27 Jan 2022 01:49:02 +0100
Subject: [PATCH 023/248] Adapt to official welcome card
---
.../ui_lovelace_minimalist/lovelace/ui-lovelace.yaml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
index b64b79901..fce9b3f68 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ui-lovelace.yaml
@@ -29,10 +29,10 @@ views:
- domain: "weather"
options:
type: "custom:button-card"
- template: "welcome_with_weather"
+ template: "card_paddy_welcome_with_weather"
variables:
- ulm_custom_card_paddy_welcome_time: "sensor.time"
- ulm_custom_card_paddy_welcome_weather_provider: "this.entity_id"
+ ulm_card_paddy_welcome_time: "sensor.time"
+ ulm_card_paddy_welcome_weather_provider: "this.entity_id"
- type: "custom:button-card"
template: "card_title"
name: "Lights"
From cb3387e8893edd2ccf13231f6ed1536fce6650b1 Mon Sep 17 00:00:00 2001
From: Stokkie90
Date: Thu, 27 Jan 2022 09:04:31 +0100
Subject: [PATCH 024/248] Use icon if it's set on the device
If not specified should be using `mdi:lightbulb`.
Needs testing. or we should move it to a if/else statment
---
.../lovelace/ulm_templates/card_templates/cards/card_light.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml
index 917d08389..1d6840869 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml
@@ -5,7 +5,7 @@ card_light:
- "ulm_language_variables"
variables:
ulm_card_light_name: "[[[ return entity.attributes.friendly_name ]]]"
- ulm_card_light_icon: "[[[ return 'mdi:lightbulb' ]]]"
+ ulm_card_light_icon: "[[[ return entity.attributes.icon ]]]"
ulm_card_light_enable_collapse: false
ulm_card_light_enable_slider: false
ulm_card_light_enable_horizontal: false
From 174b4e65129d308fc9bbf8580e7c38ad973d3fd8 Mon Sep 17 00:00:00 2001
From: Sil de Hoop <34340385+sildehoop@users.noreply.github.com>
Date: Thu, 27 Jan 2022 11:56:24 +0100
Subject: [PATCH 025/248] Version: 1.0.1
---
.../custom_card_input_number/README.md | 160 +++++-------------
.../card_input_number.yaml | 16 +-
2 files changed, 52 insertions(+), 124 deletions(-)
diff --git a/custom_cards/custom_card_input_number/README.md b/custom_cards/custom_card_input_number/README.md
index 3a01de448..bfeb2b275 100644
--- a/custom_cards/custom_card_input_number/README.md
+++ b/custom_cards/custom_card_input_number/README.md
@@ -14,10 +14,42 @@ The `card_input_number` you can control a input_number entity
## Credits
Author: sildehoop - 2021
-Version: 1.0.0
+Version: 1.0.1
+
+Braking changes
+
+
+ 1.0.1
+
+```yaml
+#OLD
+- type: "custom:button-card"
+ template:
+ - card_input_number
+ variables:
+ ulm_card_input_number_name: "YOUR_NAME"
+ ulm_card_input_number_entity: "input_number.YOUR_INPUT_NUMBER"
+```
+
+```yaml
+#NEW
+- type: "custom:button-card"
+ template: card_input_number
+ entity: input_number.YOUR_INPUT_NUMBER_ENTITY
+ variables:
+ ulm_card_input_number_name: "YOUR_CARD_NAME"
+```
+
+
## Changelog
+
+1.0.1
+Added option to leave ulm_card_input_number_name empty (takes the friendly_name of the entity)
+Removed background from middle text (because it is not a button).
+Removed variables ulm_card_input_number_entity.
+
1.0.0
Initial release
@@ -27,11 +59,10 @@ Initial release
```yaml
- type: "custom:button-card"
- template:
- - card_input_number
+ template: card_input_number
+ entity: input_number.YOUR_INPUT_NUMBER
variables:
ulm_card_input_number_name: "YOUR_NAME"
- ulm_card_input_number_entity: "input_number.YOUR_INPUT_NUMBER"
```
## Requirements
@@ -48,122 +79,17 @@ n/a
Explanation |
- |
- |
- |
- |
+ulm_card_input_number_name |
+Bathroom Ceiling Fan Threshold |
+false |
+The name to display on your card |
## Template code
-```yaml
----
-card_input_number:
- variables:
- ulm_card_input_number_name: "n/a"
- triggers_update: "all"
- styles:
- grid:
- - grid-template-areas: "'item1' 'item2'"
- - grid-template-columns: "1fr"
- - grid-template-rows: "min-content min-content"
- - row-gap: "12px"
- card:
- - border-radius: "var(--border-radius)"
- - box-shadow: "var(--box-shadow)"
- - padding: "12px"
- custom_fields:
- item1:
- card:
- type: "custom:button-card"
- template:
- - "icon_info"
- - "ulm_language_variables"
- - "input_number"
- tap_action:
- action: "more-info"
- entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
- name: "[[[ return variables.ulm_card_input_number_name ]]]"
- item2:
- card:
- type: "custom:button-card"
- template: "list_3_items"
- custom_fields:
- item1:
- card:
- type: "custom:button-card"
- template: "widget_icon"
- tap_action:
- action: "call-service"
- service: "input_number.decrement"
- service_data:
- entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
- icon: "mdi:arrow-down"
- item2:
- card:
- type: "custom:button-card"
- template: "widget_text"
- entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
- tap_action:
- action: "call-service"
- service: "cover.stop_cover"
- service_data:
- entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
- item3:
- card:
- type: "custom:button-card"
- template: "widget_icon"
- tap_action:
- action: "call-service"
- service: "input_number.increment"
- service_data:
- entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
- icon: "mdi:arrow-up"
-
-input_number:
- tap_action:
- action: "more-info"
- show_last_changed: true
-
-widget_text:
- tap_action:
- action: "toggle"
- show_icon: false
- show_label: true
- show_name: false
- label: >-
- [[[
- var unit = entity.attributes.unit_of_measurement != null ? ' ' + entity.attributes.unit_of_measurement : ''
- if (entity.state == 'on') {
- return variables.ulm_on;
- } else if (entity.state == 'off') {
- return variables.ulm_off;
- } else if (entity.state == 'unavailable') {
- return variables.ulm_unavailable;
- } else if (entity.state == 'idle') {
- return variables.ulm_idle;
- } else if (entity.state == 'open') {
- return variables.ulm_open;
- } else if (entity.state == 'closed') {
- return variables.ulm_closed;
- } else {
- return entity.state + unit;
- }
- ]]]
- styles:
- grid:
- - grid-template-areas: "'l'"
- card:
- - box-shadow: "none"
- - padding: "0px"
- - background-color: "rgba(var(--color-theme),0.05)"
- - border-radius: "14px"
- - place-self: "center"
- - height: "42px"
- state:
- - color: "rgba(var(--color-theme),0.9)"
- size: "20px"
- color: "var(--google-grey)"
+??? note "Template Code"
-```
+ ```yaml title="custom_card_input_number.yaml"
+ --8<-- "custom_cards/custom_card_input_number/card_input_number.yaml"
+ ```
diff --git a/custom_cards/custom_card_input_number/card_input_number.yaml b/custom_cards/custom_card_input_number/card_input_number.yaml
index ac5320130..916c9e293 100644
--- a/custom_cards/custom_card_input_number/card_input_number.yaml
+++ b/custom_cards/custom_card_input_number/card_input_number.yaml
@@ -1,8 +1,11 @@
---
card_input_number:
variables:
- ulm_card_input_number_name: "n/a"
+ ulm_card_input_number_name: "[[[ return entity.attributes.friendly_name ]]]"
triggers_update: "all"
+ show_icon: false
+ show_label: false
+ show_name: false
styles:
grid:
- grid-template-areas: "'item1' 'item2'"
@@ -23,7 +26,7 @@ card_input_number:
- "input_number"
tap_action:
action: "more-info"
- entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ entity: "[[[ return entity.entity_id ]]]"
name: "[[[ return variables.ulm_card_input_number_name ]]]"
item2:
card:
@@ -38,18 +41,18 @@ card_input_number:
action: "call-service"
service: "input_number.decrement"
service_data:
- entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ entity_id: "[[[ return entity.entity_id ]]]"
icon: "mdi:arrow-down"
item2:
card:
type: "custom:button-card"
template: "widget_text"
- entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ entity: "[[[ return entity.entity_id ]]]"
tap_action:
action: "call-service"
service: "cover.stop_cover"
service_data:
- entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ entity_id: "[[[ return entity.entity_id ]]]"
item3:
card:
type: "custom:button-card"
@@ -58,7 +61,7 @@ card_input_number:
action: "call-service"
service: "input_number.increment"
service_data:
- entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ entity_id: "[[[ return entity.entity_id ]]]"
icon: "mdi:arrow-up"
input_number:
@@ -97,7 +100,6 @@ widget_text:
card:
- box-shadow: "none"
- padding: "0px"
- - background-color: "rgba(var(--color-theme),0.05)"
- border-radius: "14px"
- place-self: "center"
- height: "42px"
From d1c7408c6ef3fdd7882fa67223f337b8e1c16f06 Mon Sep 17 00:00:00 2001
From: Sil de Hoop <34340385+sildehoop@users.noreply.github.com>
Date: Thu, 27 Jan 2022 12:18:25 +0100
Subject: [PATCH 026/248] card_cover_with_buttons --> card_cover_buttons
---
.../2-line_cards/card_cover_with_buttons.yaml | 14 +++++++-------
.../card_templates/legacy_templates/cards.yaml | 6 +++---
docs/usage/cards/card_cover_with_buttons.md | 14 +++++++-------
3 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_with_buttons.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_with_buttons.yaml
index 6b740ff0d..5e770058e 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_with_buttons.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_with_buttons.yaml
@@ -1,8 +1,8 @@
---
### Card Cover With Buttons ###
-card_cover_with_buttons:
+card_cover_buttons:
variables:
- ulm_card_cover_with_buttons_name: "n/a"
+ ulm_card_cover_buttons_name: "n/a"
triggers_update: "all"
styles:
grid:
@@ -24,8 +24,8 @@ card_cover_with_buttons:
- "cover"
tap_action:
action: "more-info"
- entity: "[[[ return variables.ulm_card_cover_with_buttons_entity ]]]"
- name: "[[[ return variables.ulm_card_cover_with_buttons_name ]]]"
+ entity: "[[[ return variables.ulm_card_cover_buttons_entity ]]]"
+ name: "[[[ return variables.ulm_card_cover_buttons_name ]]]"
item2:
card:
type: "custom:button-card"
@@ -39,7 +39,7 @@ card_cover_with_buttons:
action: "call-service"
service: "cover.close_cover"
service_data:
- entity_id: "[[[ return variables.ulm_card_cover_with_buttons_entity ]]]"
+ entity_id: "[[[ return variables.ulm_card_cover_buttons_entity ]]]"
icon: "mdi:arrow-down"
item2:
card:
@@ -49,7 +49,7 @@ card_cover_with_buttons:
action: "call-service"
service: "cover.stop_cover"
service_data:
- entity_id: "[[[ return variables.ulm_card_cover_with_buttons_entity ]]]"
+ entity_id: "[[[ return variables.ulm_card_cover_buttons_entity ]]]"
icon: "mdi:pause"
item3:
card:
@@ -59,5 +59,5 @@ card_cover_with_buttons:
action: "call-service"
service: "cover.open_cover"
service_data:
- entity_id: "[[[ return variables.ulm_card_cover_with_buttons_entity ]]]"
+ entity_id: "[[[ return variables.ulm_card_cover_buttons_entity ]]]"
icon: "mdi:arrow-up"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/legacy_templates/cards.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/legacy_templates/cards.yaml
index 4369053b6..98e51eeef 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/legacy_templates/cards.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/legacy_templates/cards.yaml
@@ -21,10 +21,10 @@ outlet:
# template: card_thermostat
cover_buttons:
- template: "card_cover_with_buttons"
+ template: "card_cover_buttons"
variables:
- ulm_card_cover_with_buttons_name:
- ulm_card_cover_with_buttons_entity:
+ ulm_card_cover_buttons_name:
+ ulm_card_cover_buttons_entity:
graph:
template: "card_graph"
diff --git a/docs/usage/cards/card_cover_with_buttons.md b/docs/usage/cards/card_cover_with_buttons.md
index 21ab16f16..a137e9a1a 100644
--- a/docs/usage/cards/card_cover_with_buttons.md
+++ b/docs/usage/cards/card_cover_with_buttons.md
@@ -1,5 +1,5 @@
---
-title: card_cover_with_buttons
+title: card_cover_buttons
hide:
- toc
---
@@ -15,22 +15,22 @@ With the `cover-card` you have the state of your cover and on the second line UP
| Variable | Default | Required | Notes |
|----------|---------|------------------|-------------------|
-| ulm_card_cover_with_buttons_entity | | :material-check: | The entity_id of your cover |
-| ulm_card_cover_with_buttons_name | | :material-close: | The name of your cover entity |
+| ulm_card_cover_buttons_entity | | :material-check: | The entity_id of your cover |
+| ulm_card_cover_buttons_name | | :material-close: | The name of your cover entity |
## Usage
```yaml
- type: 'custom:button-card'
template:
- - card_cover_with_buttons
+ - card_cover_buttons
variables:
- ulm_card_cover_with_buttons_name: "Cover Livingroom Window"
- ulm_card_cover_with_buttons_entity: "cover.livingroom_window"
+ ulm_card_cover_buttons_name: "Cover Livingroom Window"
+ ulm_card_cover_buttons_entity: "cover.livingroom_window"
```
??? note "Template Code"
```yaml title="card_light.yaml"
- --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_with_buttons.yaml"
+ --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_buttons.yaml"
```
From 76ea4ad5134d1e1c974057d3a15adf1224ae0aa7 Mon Sep 17 00:00:00 2001
From: Sil de Hoop <34340385+sildehoop@users.noreply.github.com>
Date: Thu, 27 Jan 2022 12:18:56 +0100
Subject: [PATCH 027/248] card_media_player_with_control -->
card_media_player_art
---
.../cards/card_media_player_with_control.yaml | 2 +-
docs/usage/cards/card_media_player_with_control.md | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_control.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_control.yaml
index 379e5a0c0..fd6b9aa76 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_control.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_control.yaml
@@ -1,6 +1,6 @@
---
### Card Media Player With Control ###
-card_media_player_with_control:
+card_media_player_art:
template:
- "card_media_player"
styles:
diff --git a/docs/usage/cards/card_media_player_with_control.md b/docs/usage/cards/card_media_player_with_control.md
index 1158ed221..c41ad9b85 100644
--- a/docs/usage/cards/card_media_player_with_control.md
+++ b/docs/usage/cards/card_media_player_with_control.md
@@ -1,5 +1,5 @@
---
-title: card_media_player_with_control
+title: card_media_player_art
hide:
- toc
---
@@ -22,7 +22,7 @@ This is the second `media-player-card`, in contrast to the first one above, it s
```yaml
- type: 'custom:button-card'
- template: card_media_player_with_control
+ template: card_media_player_art
entity: media_player.livingroom_shield
name: Livingroom Nvidia Shield
```
@@ -30,5 +30,5 @@ This is the second `media-player-card`, in contrast to the first one above, it s
??? note "Template Code"
```yaml title="card_light.yaml"
- --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_control.yaml"
+ --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_art.yaml"
```
From 1fd8bff37e8bd738da3c31c2a57ccf8b8ef99c71 Mon Sep 17 00:00:00 2001
From: Sil de Hoop <34340385+sildehoop@users.noreply.github.com>
Date: Thu, 27 Jan 2022 12:22:11 +0100
Subject: [PATCH 028/248] card_media_player_with_controls -->
card_media_player_controls
---
.../cards/card_media_player_with_controls.yaml | 18 +++++++++---------
.../card_templates/legacy_templates/cards.yaml | 6 +++---
.../cards/card_media_player_with_controls.md | 16 ++++++++--------
3 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_controls.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_controls.yaml
index 69df95646..e486cd728 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_controls.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_controls.yaml
@@ -1,9 +1,9 @@
---
### Card Media Player With Controls ###
-card_media_player_with_controls:
+card_media_player_controls:
variables:
- ulm_card_media_player_with_controls_name: "No name set"
- ulm_card_media_player_with_controls_entity:
+ ulm_card_media_player_controls_name: "No name set"
+ ulm_card_media_player_controls_entity:
triggers_update: "all"
styles:
grid:
@@ -24,8 +24,8 @@ card_media_player_with_controls:
- "card_media_player"
tap_action:
action: "more-info"
- entity: "[[[ return variables.ulm_card_media_player_with_controls_entity ]]]"
- name: "[[[ return variables.ulm_card_media_player_with_controls_name ]]]"
+ entity: "[[[ return variables.ulm_card_media_player_controls_entity ]]]"
+ name: "[[[ return variables.ulm_card_media_player_controls_name ]]]"
styles:
card:
- box-shadow: "none"
@@ -43,18 +43,18 @@ card_media_player_with_controls:
action: "call-service"
service: "media_player.media_previous_track"
service_data:
- entity_id: "[[[ return variables.ulm_card_media_player_with_controls_entity ]]]"
+ entity_id: "[[[ return variables.ulm_card_media_player_controls_entity ]]]"
icon: "mdi:skip-previous"
item2:
card:
type: "custom:button-card"
template: "widget_icon"
- entity: "[[[ return variables.ulm_card_media_player_with_controls_entity ]]]"
+ entity: "[[[ return variables.ulm_card_media_player_controls_entity ]]]"
tap_action:
action: "call-service"
service: "media_player.media_play_pause"
service_data:
- entity_id: "[[[ return variables.ulm_card_media_player_with_controls_entity ]]]"
+ entity_id: "[[[ return variables.ulm_card_media_player_controls_entity ]]]"
icon: "mdi:pause"
state:
- value: "paused"
@@ -69,5 +69,5 @@ card_media_player_with_controls:
action: "call-service"
service: "media_player.media_next_track"
service_data:
- entity_id: "[[[ return variables.ulm_card_media_player_with_controls_entity ]]]"
+ entity_id: "[[[ return variables.ulm_card_media_player_controls_entity ]]]"
icon: "mdi:skip-next"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/legacy_templates/cards.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/legacy_templates/cards.yaml
index 98e51eeef..1b7fe62aa 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/legacy_templates/cards.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/legacy_templates/cards.yaml
@@ -45,10 +45,10 @@ media_mini_album:
template: "card_media_player_with_cover"
media_buttons:
- template: "card_media_player_with_controls"
+ template: "card_media_player_controls"
variables:
- ulm_card_media_player_with_controls_entity: "[[[ return variables.entity ]]]"
- ulm_card_media_player_with_controls_name: "[[[ return variables.name ]]]"
+ ulm_card_media_player_controls_entity: "[[[ return variables.entity ]]]"
+ ulm_card_media_player_controls_name: "[[[ return variables.name ]]]"
### NEW CARD_LIGHT ALL IN ONE ###
card_light_slider:
diff --git a/docs/usage/cards/card_media_player_with_controls.md b/docs/usage/cards/card_media_player_with_controls.md
index 10cdde36e..3668b387a 100644
--- a/docs/usage/cards/card_media_player_with_controls.md
+++ b/docs/usage/cards/card_media_player_with_controls.md
@@ -1,5 +1,5 @@
---
-title: card_media_player_with_controls
+title: card_media_player_controls
hide:
- toc
---
@@ -9,28 +9,28 @@ hide:
![example-image](../../assets/img/ulm_cards/card_media_player_art.png){ width="500" }
-With the `card_media_player_with_controls` you have the state of your media_player and on the second line PREVIOUS / PLAY-PAUSE / NEXT to control it
+With the `card_media_player_controls` you have the state of your media_player and on the second line PREVIOUS / PLAY-PAUSE / NEXT to control it
## Variables
| Variable | Default | Required | Notes |
|----------|---------|------------------|-------------------|
-| ulm_card_media_player_with_controls_entity | | :material-check: | The media-player entity |
-| ulm_card_media_player_with_controls_name | | :material-check: | Name to display for your media-player |
+| ulm_card_media_player_controls_entity | | :material-check: | The media-player entity |
+| ulm_card_media_player_controls_name | | :material-check: | Name to display for your media-player |
## Usage
```yaml
- type: 'custom:button-card'
template:
- - card_media_player_with_controls
+ - card_media_player_controls
variables:
- ulm_card_media_player_with_controls_name: "Livingroom Shield"
- ulm_card_media_player_with_controls_entity: media_player.livingroom_shield
+ ulm_card_media_player_controls_name: "Livingroom Shield"
+ ulm_card_media_player_controls_entity: media_player.livingroom_shield
```
??? note "Template Code"
```yaml title="card_light.yaml"
- --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_controls.yaml"
+ --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_controls.yaml"
```
From 8f941f834c828e11462431acd7358a3e67b0c5bf Mon Sep 17 00:00:00 2001
From: Sil de Hoop <34340385+sildehoop@users.noreply.github.com>
Date: Thu, 27 Jan 2022 12:24:19 +0100
Subject: [PATCH 029/248] rename files
---
.../{card_cover_with_buttons.yaml => card_cover_buttons.yaml} | 0
..._media_player_with_control.yaml => card_media_player_art.yaml} | 0
..._player_with_controls.yaml => card_media_player_controls.yaml} | 0
.../cards/{card_cover_with_buttons.md => card_cover_buttons.md} | 0
...card_media_player_with_control.md => card_media_player_art.md} | 0
...edia_player_with_controls.md => card_media_player_controls.md} | 0
6 files changed, 0 insertions(+), 0 deletions(-)
rename custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/{card_cover_with_buttons.yaml => card_cover_buttons.yaml} (100%)
rename custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/{card_media_player_with_control.yaml => card_media_player_art.yaml} (100%)
rename custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/{card_media_player_with_controls.yaml => card_media_player_controls.yaml} (100%)
rename docs/usage/cards/{card_cover_with_buttons.md => card_cover_buttons.md} (100%)
rename docs/usage/cards/{card_media_player_with_control.md => card_media_player_art.md} (100%)
rename docs/usage/cards/{card_media_player_with_controls.md => card_media_player_controls.md} (100%)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_with_buttons.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_buttons.yaml
similarity index 100%
rename from custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_with_buttons.yaml
rename to custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_buttons.yaml
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_control.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_art.yaml
similarity index 100%
rename from custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_control.yaml
rename to custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_art.yaml
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_controls.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_controls.yaml
similarity index 100%
rename from custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_controls.yaml
rename to custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_controls.yaml
diff --git a/docs/usage/cards/card_cover_with_buttons.md b/docs/usage/cards/card_cover_buttons.md
similarity index 100%
rename from docs/usage/cards/card_cover_with_buttons.md
rename to docs/usage/cards/card_cover_buttons.md
diff --git a/docs/usage/cards/card_media_player_with_control.md b/docs/usage/cards/card_media_player_art.md
similarity index 100%
rename from docs/usage/cards/card_media_player_with_control.md
rename to docs/usage/cards/card_media_player_art.md
diff --git a/docs/usage/cards/card_media_player_with_controls.md b/docs/usage/cards/card_media_player_controls.md
similarity index 100%
rename from docs/usage/cards/card_media_player_with_controls.md
rename to docs/usage/cards/card_media_player_controls.md
From 30d2d76bf7efb5e42357687c2fdeecd7ed1daed7 Mon Sep 17 00:00:00 2001
From: Jon Kristian Nilsen
Date: Thu, 27 Jan 2022 16:20:17 +0100
Subject: [PATCH 030/248] Adds norwegian translation.
---
.../ui_lovelace_minimalist/configure.py | 1 +
.../ui_lovelace_minimalist/const.py | 1 +
.../lovelace/translations/NO.yaml | 30 +++++++++++++++++++
3 files changed, 32 insertions(+)
create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
diff --git a/custom_components/ui_lovelace_minimalist/configure.py b/custom_components/ui_lovelace_minimalist/configure.py
index 466cc3d5e..e6cd16ec8 100644
--- a/custom_components/ui_lovelace_minimalist/configure.py
+++ b/custom_components/ui_lovelace_minimalist/configure.py
@@ -25,6 +25,7 @@
"Portuguese": "PT",
"Spanish": "ES",
"Swedish": "SE",
+ "Norwegian": "NO",
}
diff --git a/custom_components/ui_lovelace_minimalist/const.py b/custom_components/ui_lovelace_minimalist/const.py
index 5a96a3753..e48b6783e 100644
--- a/custom_components/ui_lovelace_minimalist/const.py
+++ b/custom_components/ui_lovelace_minimalist/const.py
@@ -21,6 +21,7 @@
"Portuguese",
"Spanish",
"Swedish",
+ "Norwegian",
]
CONF_SIDEPANEL_ENABLED = "sidepanel_enabled"
CONF_SIDEPANEL_TITLE = "sidepanel_title"
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
new file mode 100644
index 000000000..751f1527a
--- /dev/null
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
@@ -0,0 +1,30 @@
+---
+ulm_language_variables:
+ variables:
+ ulm_on: "På"
+ ulm_off: "Av"
+ ulm_open: "Åpent"
+ ulm_closed: "Stengt"
+ ulm_unavailable: "Utilgjengelig"
+ ulm_standby: "Klar"
+ ulm_idle: "Hviler"
+ ulm_currency: "NOK"
+ ulm_heat: "Varme"
+ ulm_cool: "Kjøling"
+ ulm_person_state_home: "Hjemme"
+ ulm_person_state_away: "Borte"
+ ulm_popups_back: "Tilbake"
+ ulm_popups_toggle: "Veksle"
+ ulm_popups_statistics: "Statistikk"
+ ulm_popups_history: "Historikk"
+ ulm_popups_brightness: "Lysstyrke"
+ ulm_popups_color_temp: "Fargetemperatur"
+ ulm_popups_color: "Farge"
+ ulm_unknown: "Ukjent"
+ ulm_alarm_armed_home: "Aktivert hjemme"
+ ulm_alarm_armed_away: "Aktivert borte"
+ ulm_alarm_disarmed: "Deaktivert"
+ ulm_alarm_arming: "Aktivert"
+ ulm_alarm_triggered: "UTLØST"
+ ulm_playing: "Spiller"
+ ulm_paused: "Pauset"
From c1b9a9dc552bb397ab029302df8bcb2576a6cbd4 Mon Sep 17 00:00:00 2001
From: GitHub Action
Date: Thu, 27 Jan 2022 20:35:34 +0000
Subject: [PATCH 031/248] Add changes for automatically custom_cards docs
---
.../custom_cards/custom_card_input_number.md | 160 +++++-------------
1 file changed, 43 insertions(+), 117 deletions(-)
diff --git a/docs/usage/custom_cards/custom_card_input_number.md b/docs/usage/custom_cards/custom_card_input_number.md
index 3827c7212..2630065b4 100644
--- a/docs/usage/custom_cards/custom_card_input_number.md
+++ b/docs/usage/custom_cards/custom_card_input_number.md
@@ -14,10 +14,42 @@ The `card_input_number` you can control a input_number entity
## Credits
Author: sildehoop - 2021
-Version: 1.0.0
+Version: 1.0.1
+
+Braking changes
+
+
+ 1.0.1
+
+```yaml
+#OLD
+- type: "custom:button-card"
+ template:
+ - card_input_number
+ variables:
+ ulm_card_input_number_name: "YOUR_NAME"
+ ulm_card_input_number_entity: "input_number.YOUR_INPUT_NUMBER"
+```
+
+```yaml
+#NEW
+- type: "custom:button-card"
+ template: card_input_number
+ entity: input_number.YOUR_INPUT_NUMBER_ENTITY
+ variables:
+ ulm_card_input_number_name: "YOUR_CARD_NAME"
+```
+
+
## Changelog
+
+1.0.1
+Added option to leave ulm_card_input_number_name empty (takes the friendly_name of the entity)
+Removed background from middle text (because it is not a button).
+Removed variables ulm_card_input_number_entity.
+
1.0.0
Initial release
@@ -27,11 +59,10 @@ Initial release
```yaml
- type: "custom:button-card"
- template:
- - card_input_number
+ template: card_input_number
+ entity: input_number.YOUR_INPUT_NUMBER
variables:
ulm_card_input_number_name: "YOUR_NAME"
- ulm_card_input_number_entity: "input_number.YOUR_INPUT_NUMBER"
```
## Requirements
@@ -48,122 +79,17 @@ n/a
Explanation |
- |
- |
- |
- |
+ulm_card_input_number_name |
+Bathroom Ceiling Fan Threshold |
+false |
+The name to display on your card |
## Template code
-```yaml
----
-card_input_number:
- variables:
- ulm_card_input_number_name: "n/a"
- triggers_update: "all"
- styles:
- grid:
- - grid-template-areas: "'item1' 'item2'"
- - grid-template-columns: "1fr"
- - grid-template-rows: "min-content min-content"
- - row-gap: "12px"
- card:
- - border-radius: "var(--border-radius)"
- - box-shadow: "var(--box-shadow)"
- - padding: "12px"
- custom_fields:
- item1:
- card:
- type: "custom:button-card"
- template:
- - "icon_info"
- - "ulm_language_variables"
- - "input_number"
- tap_action:
- action: "more-info"
- entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
- name: "[[[ return variables.ulm_card_input_number_name ]]]"
- item2:
- card:
- type: "custom:button-card"
- template: "list_3_items"
- custom_fields:
- item1:
- card:
- type: "custom:button-card"
- template: "widget_icon"
- tap_action:
- action: "call-service"
- service: "input_number.decrement"
- service_data:
- entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
- icon: "mdi:arrow-down"
- item2:
- card:
- type: "custom:button-card"
- template: "widget_text"
- entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
- tap_action:
- action: "call-service"
- service: "cover.stop_cover"
- service_data:
- entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
- item3:
- card:
- type: "custom:button-card"
- template: "widget_icon"
- tap_action:
- action: "call-service"
- service: "input_number.increment"
- service_data:
- entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
- icon: "mdi:arrow-up"
-
-input_number:
- tap_action:
- action: "more-info"
- show_last_changed: true
-
-widget_text:
- tap_action:
- action: "toggle"
- show_icon: false
- show_label: true
- show_name: false
- label: >-
- [[[
- var unit = entity.attributes.unit_of_measurement != null ? ' ' + entity.attributes.unit_of_measurement : ''
- if (entity.state == 'on') {
- return variables.ulm_on;
- } else if (entity.state == 'off') {
- return variables.ulm_off;
- } else if (entity.state == 'unavailable') {
- return variables.ulm_unavailable;
- } else if (entity.state == 'idle') {
- return variables.ulm_idle;
- } else if (entity.state == 'open') {
- return variables.ulm_open;
- } else if (entity.state == 'closed') {
- return variables.ulm_closed;
- } else {
- return entity.state + unit;
- }
- ]]]
- styles:
- grid:
- - grid-template-areas: "'l'"
- card:
- - box-shadow: "none"
- - padding: "0px"
- - background-color: "rgba(var(--color-theme),0.05)"
- - border-radius: "14px"
- - place-self: "center"
- - height: "42px"
- state:
- - color: "rgba(var(--color-theme),0.9)"
- size: "20px"
- color: "var(--google-grey)"
+??? note "Template Code"
-```
+ ```yaml title="custom_card_input_number.yaml"
+ --8<-- "custom_cards/custom_card_input_number/card_input_number.yaml"
+ ```
From c4d68c504b19ca5bbff5b3a5dd589f0e43763501 Mon Sep 17 00:00:00 2001
From: Jon Kristian Nilsen
Date: Fri, 28 Jan 2022 11:14:31 +0100
Subject: [PATCH 032/248] New norwegian strings from PR #338
---
.../ui_lovelace_minimalist/lovelace/translations/NO.yaml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
index 751f1527a..7e77f061e 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
@@ -28,3 +28,7 @@ ulm_language_variables:
ulm_alarm_triggered: "UTLØST"
ulm_playing: "Spiller"
ulm_paused: "Pauset"
+ ulm_morning: "God morgen"
+ ulm_afternoon: "God ettermiddag"
+ ulm_evening: "God kveld"
+ ulm_hello: "Hei"
\ No newline at end of file
From 1be07780b9f20532af0530be0dc8d6a122eb434a Mon Sep 17 00:00:00 2001
From: Jon Kristian Nilsen
Date: Fri, 28 Jan 2022 11:16:14 +0100
Subject: [PATCH 033/248] Validation fix.
---
.../ui_lovelace_minimalist/lovelace/translations/NO.yaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
index 7e77f061e..44715838d 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
@@ -31,4 +31,5 @@ ulm_language_variables:
ulm_morning: "God morgen"
ulm_afternoon: "God ettermiddag"
ulm_evening: "God kveld"
- ulm_hello: "Hei"
\ No newline at end of file
+ ulm_hello: "Hei"
+
\ No newline at end of file
From 0d5f37924de7ed836ec028f187296cc70f84a10d Mon Sep 17 00:00:00 2001
From: Sil de Hoop <34340385+sildehoop@users.noreply.github.com>
Date: Fri, 28 Jan 2022 12:58:05 +0100
Subject: [PATCH 034/248] Revert "Version: 1.0.1"
This reverts commit 174b4e65129d308fc9bbf8580e7c38ad973d3fd8.
---
.../custom_card_input_number/README.md | 160 +++++++++++++-----
.../card_input_number.yaml | 16 +-
2 files changed, 124 insertions(+), 52 deletions(-)
diff --git a/custom_cards/custom_card_input_number/README.md b/custom_cards/custom_card_input_number/README.md
index bfeb2b275..3a01de448 100644
--- a/custom_cards/custom_card_input_number/README.md
+++ b/custom_cards/custom_card_input_number/README.md
@@ -14,42 +14,10 @@ The `card_input_number` you can control a input_number entity
## Credits
Author: sildehoop - 2021
-Version: 1.0.1
-
-Braking changes
-
-
- 1.0.1
-
-```yaml
-#OLD
-- type: "custom:button-card"
- template:
- - card_input_number
- variables:
- ulm_card_input_number_name: "YOUR_NAME"
- ulm_card_input_number_entity: "input_number.YOUR_INPUT_NUMBER"
-```
-
-```yaml
-#NEW
-- type: "custom:button-card"
- template: card_input_number
- entity: input_number.YOUR_INPUT_NUMBER_ENTITY
- variables:
- ulm_card_input_number_name: "YOUR_CARD_NAME"
-```
-
-
+Version: 1.0.0
## Changelog
-
-1.0.1
-Added option to leave ulm_card_input_number_name empty (takes the friendly_name of the entity)
-Removed background from middle text (because it is not a button).
-Removed variables ulm_card_input_number_entity.
-
1.0.0
Initial release
@@ -59,10 +27,11 @@ Initial release
```yaml
- type: "custom:button-card"
- template: card_input_number
- entity: input_number.YOUR_INPUT_NUMBER
+ template:
+ - card_input_number
variables:
ulm_card_input_number_name: "YOUR_NAME"
+ ulm_card_input_number_entity: "input_number.YOUR_INPUT_NUMBER"
```
## Requirements
@@ -79,17 +48,122 @@ n/a
Explanation |
-ulm_card_input_number_name |
-Bathroom Ceiling Fan Threshold |
-false |
-The name to display on your card |
+ |
+ |
+ |
+ |
## Template code
-??? note "Template Code"
+```yaml
+---
+card_input_number:
+ variables:
+ ulm_card_input_number_name: "n/a"
+ triggers_update: "all"
+ styles:
+ grid:
+ - grid-template-areas: "'item1' 'item2'"
+ - grid-template-columns: "1fr"
+ - grid-template-rows: "min-content min-content"
+ - row-gap: "12px"
+ card:
+ - border-radius: "var(--border-radius)"
+ - box-shadow: "var(--box-shadow)"
+ - padding: "12px"
+ custom_fields:
+ item1:
+ card:
+ type: "custom:button-card"
+ template:
+ - "icon_info"
+ - "ulm_language_variables"
+ - "input_number"
+ tap_action:
+ action: "more-info"
+ entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ name: "[[[ return variables.ulm_card_input_number_name ]]]"
+ item2:
+ card:
+ type: "custom:button-card"
+ template: "list_3_items"
+ custom_fields:
+ item1:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ tap_action:
+ action: "call-service"
+ service: "input_number.decrement"
+ service_data:
+ entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ icon: "mdi:arrow-down"
+ item2:
+ card:
+ type: "custom:button-card"
+ template: "widget_text"
+ entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ tap_action:
+ action: "call-service"
+ service: "cover.stop_cover"
+ service_data:
+ entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ item3:
+ card:
+ type: "custom:button-card"
+ template: "widget_icon"
+ tap_action:
+ action: "call-service"
+ service: "input_number.increment"
+ service_data:
+ entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
+ icon: "mdi:arrow-up"
+
+input_number:
+ tap_action:
+ action: "more-info"
+ show_last_changed: true
+
+widget_text:
+ tap_action:
+ action: "toggle"
+ show_icon: false
+ show_label: true
+ show_name: false
+ label: >-
+ [[[
+ var unit = entity.attributes.unit_of_measurement != null ? ' ' + entity.attributes.unit_of_measurement : ''
+ if (entity.state == 'on') {
+ return variables.ulm_on;
+ } else if (entity.state == 'off') {
+ return variables.ulm_off;
+ } else if (entity.state == 'unavailable') {
+ return variables.ulm_unavailable;
+ } else if (entity.state == 'idle') {
+ return variables.ulm_idle;
+ } else if (entity.state == 'open') {
+ return variables.ulm_open;
+ } else if (entity.state == 'closed') {
+ return variables.ulm_closed;
+ } else {
+ return entity.state + unit;
+ }
+ ]]]
+ styles:
+ grid:
+ - grid-template-areas: "'l'"
+ card:
+ - box-shadow: "none"
+ - padding: "0px"
+ - background-color: "rgba(var(--color-theme),0.05)"
+ - border-radius: "14px"
+ - place-self: "center"
+ - height: "42px"
+ state:
+ - color: "rgba(var(--color-theme),0.9)"
+ size: "20px"
+ color: "var(--google-grey)"
- ```yaml title="custom_card_input_number.yaml"
- --8<-- "custom_cards/custom_card_input_number/card_input_number.yaml"
- ```
+```
diff --git a/custom_cards/custom_card_input_number/card_input_number.yaml b/custom_cards/custom_card_input_number/card_input_number.yaml
index 916c9e293..ac5320130 100644
--- a/custom_cards/custom_card_input_number/card_input_number.yaml
+++ b/custom_cards/custom_card_input_number/card_input_number.yaml
@@ -1,11 +1,8 @@
---
card_input_number:
variables:
- ulm_card_input_number_name: "[[[ return entity.attributes.friendly_name ]]]"
+ ulm_card_input_number_name: "n/a"
triggers_update: "all"
- show_icon: false
- show_label: false
- show_name: false
styles:
grid:
- grid-template-areas: "'item1' 'item2'"
@@ -26,7 +23,7 @@ card_input_number:
- "input_number"
tap_action:
action: "more-info"
- entity: "[[[ return entity.entity_id ]]]"
+ entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
name: "[[[ return variables.ulm_card_input_number_name ]]]"
item2:
card:
@@ -41,18 +38,18 @@ card_input_number:
action: "call-service"
service: "input_number.decrement"
service_data:
- entity_id: "[[[ return entity.entity_id ]]]"
+ entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
icon: "mdi:arrow-down"
item2:
card:
type: "custom:button-card"
template: "widget_text"
- entity: "[[[ return entity.entity_id ]]]"
+ entity: "[[[ return variables.ulm_card_input_number_entity ]]]"
tap_action:
action: "call-service"
service: "cover.stop_cover"
service_data:
- entity_id: "[[[ return entity.entity_id ]]]"
+ entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
item3:
card:
type: "custom:button-card"
@@ -61,7 +58,7 @@ card_input_number:
action: "call-service"
service: "input_number.increment"
service_data:
- entity_id: "[[[ return entity.entity_id ]]]"
+ entity_id: "[[[ return variables.ulm_card_input_number_entity ]]]"
icon: "mdi:arrow-up"
input_number:
@@ -100,6 +97,7 @@ widget_text:
card:
- box-shadow: "none"
- padding: "0px"
+ - background-color: "rgba(var(--color-theme),0.05)"
- border-radius: "14px"
- place-self: "center"
- height: "42px"
From 7d10a4f2297753a07651689f7a7f34de0d17be03 Mon Sep 17 00:00:00 2001
From: Stokkie90
Date: Fri, 28 Jan 2022 14:20:27 +0100
Subject: [PATCH 035/248] [LAYOUT-DOCS] Added some examples how to deal with
certain layouts
---
docs/assets/img/layout/chip_center.png | Bin 0 -> 8243 bytes
docs/assets/img/layout/chip_left_right.png | Bin 0 -> 9116 bytes
docs/assets/img/layout/chip_right.png | Bin 0 -> 8618 bytes
docs/usage/.pages | 7 +++
docs/usage/layout/index.md | 65 +++++++++++++++++++++
5 files changed, 72 insertions(+)
create mode 100644 docs/assets/img/layout/chip_center.png
create mode 100644 docs/assets/img/layout/chip_left_right.png
create mode 100644 docs/assets/img/layout/chip_right.png
create mode 100644 docs/usage/.pages
create mode 100644 docs/usage/layout/index.md
diff --git a/docs/assets/img/layout/chip_center.png b/docs/assets/img/layout/chip_center.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ea424dd22f16a86c502671d89d169585c44a1b2
GIT binary patch
literal 8243
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
literal 0
HcmV?d00001
diff --git a/docs/assets/img/layout/chip_left_right.png b/docs/assets/img/layout/chip_left_right.png
new file mode 100644
index 0000000000000000000000000000000000000000..67d99333ac1e404aaf6642a9267bbcc6a5f74953
GIT binary patch
literal 9116
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
a2jmdURq)3wz&8^R2t`>nnUD8PgZ~%IKRLnx
literal 0
HcmV?d00001
diff --git a/docs/assets/img/layout/chip_right.png b/docs/assets/img/layout/chip_right.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd74070cdfe456b4e5130dbedda91d06d92a0182
GIT binary patch
literal 8618
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
Date: Fri, 28 Jan 2022 14:23:09 +0100
Subject: [PATCH 036/248] [LAYOUT-DOCS] Fixed/add markdownlint disable on some
warnings can't seem to fix
---
docs/usage/.pages | 2 +-
docs/usage/layout/index.md | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/docs/usage/.pages b/docs/usage/.pages
index 86da97218..420c8cb22 100644
--- a/docs/usage/.pages
+++ b/docs/usage/.pages
@@ -4,4 +4,4 @@ arrange:
- chips
- popups
- custom_cards
- - ...
\ No newline at end of file
+ - ...
diff --git a/docs/usage/layout/index.md b/docs/usage/layout/index.md
index e96e1a491..dcbabda0d 100644
--- a/docs/usage/layout/index.md
+++ b/docs/usage/layout/index.md
@@ -8,6 +8,7 @@ hide:
If you want to alight cards to the center, right. Or only 1 card on the right it can be done using a `blank-card`.
+
??? note "Center"
![chip_center](../../assets/img/layout/chip_center.png){ align=right width=40% }
@@ -62,4 +63,4 @@ If you want to alight cards to the center, right. Or only 1 card on the right it
template: chip_icon_label
label: Your right card here
```
-
+
From 312181a1b59c7828ccbd00bbec245af1aebe0207 Mon Sep 17 00:00:00 2001
From: schumijo
Date: Fri, 28 Jan 2022 14:38:42 +0100
Subject: [PATCH 037/248] Add horizontal + current temp
---
.../card_templates/cards/card_thermostat.yaml | 82 ++++++++++++++-----
1 file changed, 62 insertions(+), 20 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
index c954b2b01..a77514ed4 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml
@@ -10,6 +10,8 @@ card_thermostat:
ulm_card_thermostat_enable_controls: false
ulm_card_thermostat_enable_hvac_modes: false
ulm_card_thermostat_enable_background_color: false
+ ulm_card_thermostat_enable_display_temperature: false
+ ulm_card_thermostat_enable_horizontal: false
# ulm_card_thermostat_enable_popup: false
show_icon: false
show_name: false
@@ -63,20 +65,37 @@ card_thermostat:
- grid-template-areas: >
[[[
var areas = [];
- areas.push("item1");
+ if (variables.ulm_card_thermostat_enable_horizontal) {
+ return "\"item1 item2\"";
+ }
+ if (variables.ulm_card_thermostat_enable_display_temperature) {
+ areas.push("item1 item4");
+ } else {
+ areas.push("item1 item1");
+ }
if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_controls) {
- areas.push("item2");
+ areas.push("item2 item2");
}
if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_hvac_modes) {
- areas.push("item3");
+ areas.push("item3 item3");
}
return "\"" + areas.join("\" \"") + "\"";
]]]
- - grid-template-columns: "1fr"
+ - grid-template-columns: >
+ [[[
+ if (variables.ulm_card_thermostat_enable_horizontal) {
+ return "1fr 1fr";
+ } else {
+ return "2fr 1fr";
+ }
+ ]]]
- grid-template-rows: >
[[[
var rows = [];
rows.push("min-content");
+ if (variables.ulm_card_thermostat_enable_horizontal) {
+ return "min-content";
+ }
if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_controls) {
rows.push("min-content");
}
@@ -103,11 +122,26 @@ card_thermostat:
item3:
- display: >
[[[
+ if (variables.ulm_card_thermostat_enable_horizontal) {
+ return "none";
+ }
if ( !(variables.ulm_card_thermostat_enable_collapse && entity.state == "off") && variables.ulm_card_thermostat_enable_hvac_modes) {
- return "block";
- } else {
- return "none";
- }
+ return "block";
+ } else {
+ return "none";
+ }
+ ]]]
+ item4:
+ - display: >
+ [[[
+ if (variables.ulm_card_thermostat_enable_horizontal) {
+ return "none";
+ }
+ if (variables.ulm_card_thermostat_enable_display_temperature) {
+ return "block";
+ } else {
+ return "none";
+ }
]]]
custom_fields:
item1:
@@ -218,22 +252,11 @@ card_thermostat:
var mode = variables.ulm_unavailable;
}
- if(entity.attributes.temperature){
+ if(entity.attributes.temperature && !variables.ulm_card_thermostat_enable_display_temperature){
return (entity.attributes.current_temperature ) + '°' + ' • ' + label + ' (' + mode + ')';
}
return label;
]]]
- # state:
- # - operator: "template"
- # value: >
- # [[[
- # return (entity.attributes.hvac_action == 'cooling' || entity.attributes.hvac_action == 'heating') && variables.ulm_card_thermostat_enable_background_color && hass.themes.darkMode
- # ]]]
- # styles:
- # name:
- # - color: "var(--card-background-color)"
- # label:
- # - color: "var(--card-background-color)"
item2:
card:
type: "custom:button-card"
@@ -596,3 +619,22 @@ card_thermostat:
styles:
card:
- background-color: "rgba(var(--color-theme),0.15)"
+ item4:
+ card:
+ type: "custom:button-card"
+ show_icon: false
+ show_name: false
+ show_label: true
+ entity: "[[[ return entity.entity_id ]]]"
+ label: |-
+ [[[
+ var temperature = entity.attributes.current_temperature;
+ if (temperature == null) {
+ var temperature = '-';
+ }
+ return temperature + '°C'
+ ]]]
+ styles:
+ card:
+ - background: "none"
+ - box-shadow: "none"
From 241d3ee2f373d13d1cbdca960644752d9dd274d3 Mon Sep 17 00:00:00 2001
From: Bavo Mees
Date: Fri, 28 Jan 2022 16:40:32 +0100
Subject: [PATCH 038/248] Fix trailing whitespaces
---
.../card_templates/cards/card_room.yaml | 10 ++---
docs/usage/cards/card_room.md | 37 +++++++++++++------
2 files changed, 30 insertions(+), 17 deletions(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml
index d328091a1..c8592f4ce 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml
@@ -92,7 +92,7 @@ card_room:
- font-size: "12px"
- filter: "opacity(40%)"
- margin-left: "12px"
- - margin-top: "-10%"
+ - margin-top: "-10%"
state:
- justify-self: "start"
- font-weight: "bold"
@@ -233,9 +233,9 @@ card_room:
widget_icon_room:
variables:
tap_action:
- action: toggle
+ action: "toggle"
hold_action:
- action: none
+ action: "none"
tap_action:
action: >
[[[ if (variables?.tap_action?.action) return variables.tap_action.action; else return 'none'; ]]]
@@ -245,7 +245,7 @@ widget_icon_room:
service: "[[[ return variables.tap_action.service; ]]]"
service_data: "[[[ return variables.tap_action.service_data; ]]]"
hold_action:
- action: >
+ action: >
[[[ if (variables?.hold_action?.action) return variables.hold_action.action; else return 'none'; ]]]
entity: "[[[ return variables.hold_action.entity; ]]]"
navigation_path: "[[[ return variables.hold_action.navigation_path; ]]]"
@@ -270,4 +270,4 @@ widget_icon_room:
- border-radius: "50%"
- background-color: "rgba(var(--color-theme),0.05)"
size: "15px"
- color: "var(--google-grey)"
\ No newline at end of file
+ color: "var(--google-grey)"
diff --git a/docs/usage/cards/card_room.md b/docs/usage/cards/card_room.md
index f5b438d85..272774a5b 100644
--- a/docs/usage/cards/card_room.md
+++ b/docs/usage/cards/card_room.md
@@ -9,15 +9,21 @@ hide:
![Image title](../../assets/img/ulm_cards/card_room.png){ width="500" }
-This is the `room-card`, used to show the state of single room in a quick glance.
+This is the `room-card`, used to show the state of single room in a quick glance.
The card has support for 4 subicons at the right side of the card. These can be configured using custom colors and tap actions.
## Variables
| Variable | Default | Required | Notes | Requirement |
|----------------------------------------|-----------------|------------------|----------------|-------------|
-| label_use_temperature | `true` | :material-close: | Define whether the label should show the current room temperature | The temperature should be provide by either a `temperature` or `current_temperature` attribute or by the entity state |
-| label_use_brightness | `false` | :material-close: | Define whether the label should show the current room brightness of the lights| requires `label_use_temperature` to be false |
+| label_use_temperature | `true` | :material-close:
+| Define whether the label should show the current room temperature
+| The temperature should be provide by either a `temperature` or `current_temperature` attribute or by the entity state
+|
+| label_use_brightness | `false` | :material-close:
+| Define whether the label should show the current room brightness of the lights
+| requires `label_use_temperature` to be false
+|
| entity_1 | | :material-close: | a `room_entity` object (see below) | |
| entity_2 | | :material-close: | a `room_entity` object (see below) | |
| entity_3 | | :material-close: | a `room_entity` object (see below) | |
@@ -32,16 +38,23 @@ The card has support for 4 subicons at the right side of the card. These can be
| tap_action | | :material-close: | tap_action for the icon (see button card documentation for options) | |
| hold_action | | :material-close: | tap_action for the icon (see button card documentation for options) | |
-# Default card options
-All the options from the button card are still available for the large room card.
+## Default card options
+
+All the options from the button card are still available for the large room card.
If you want to tweak this card a little bit more, below are some examples. The full list can be found here: [link](https://github.com/custom-cards/button-card#main-options)
| Options | Default | Required | Notes | Requirement |
|----------------------------------------|-----------------|------------------|----------------|-------------|
| entity | | :material-close: | The entity_id for the large card | |
| icon | | :material-close: | Icon to display. Defaults to the entity icon | |
-| tap_action | | :material-close: | Define the type of action on click, if undefined, toggle will be used.| see [Action](https://github.com/custom-cards/button-card#Action)|
-| hold_action | | :material-close: | Define the type of action on hold, if undefined, nothing happens | see [Action](https://github.com/custom-cards/button-card#Action)|
+| tap_action | | :material-close:
+| Define the type of action on click, if undefined, toggle will be used.
+| see [Action](https://github.com/custom-cards/button-card#Action)
+|
+| hold_action | | :material-close:
+| Define the type of action on hold, if undefined, nothing happens
+| see [Action](https://github.com/custom-cards/button-card#Action)
+|
| label | | :material-close: | Change the label text | |
| title | | :material-close: | Change the title text | |
@@ -49,7 +62,7 @@ If you want to tweak this card a little bit more, below are some examples. The f
```yaml
- type: 'custom:button-card'
- template:
+ template:
- card_room
- red
name: Bathroom
@@ -65,26 +78,26 @@ If you want to tweak this card a little bit more, below are some examples. The f
entity_id: light.bathroom
templates:
- yellow_on
- tap_action:
+ tap_action:
action: toggle
entity_2:
entity_id: binary_sensor.badkamer_motion_sensor
templates:
- blue_on
- tap_action:
+ tap_action:
action: none
entity_3:
entity_id: input_boolean.badkamer_motionsensor_enabled
templates:
- green_on
- red_off
- tap_action:
+ tap_action:
action: toggle
entity_4:
entity_id: input_boolean.bath_mode
templates:
- pink_on
- tap_action:
+ tap_action:
action: toggle
```
From 5d682d98185fa0b19b16ca96c7cccf394a5a2304 Mon Sep 17 00:00:00 2001
From: Bavo Mees
Date: Fri, 28 Jan 2022 17:05:01 +0100
Subject: [PATCH 039/248] added basic support for on/off translations to the
room card
---
.../ulm_templates/card_templates/cards/card_room.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml
index c8592f4ce..a31c47024 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_room.yaml
@@ -30,6 +30,12 @@ card_room:
} else {
return variables.ulm_unavailable;
}
+ } else if (entity.state == "on") {
+ return variables.ulm_on
+ } else if (entity.state == "off") {
+ return variables.ulm_off
+ } else {
+ return entity.state
}
]]]
state:
From 9b258b4097f01cd6f3a83fe2c7a77f605a771586 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:02:58 +0100
Subject: [PATCH 040/248] Update card_battery.md
Updating yaml title
---
docs/usage/cards/card_battery.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_battery.md b/docs/usage/cards/card_battery.md
index 12fe95841..5e906e027 100644
--- a/docs/usage/cards/card_battery.md
+++ b/docs/usage/cards/card_battery.md
@@ -40,6 +40,6 @@ The `battery-card` is a slightly enhanced `generic-card`, that can indicate whet
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_battery.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_battery.yaml"
```
From bd102192bc41b59536d3a3112611a7d5c308193f Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:07:17 +0100
Subject: [PATCH 041/248] Update card_binary_sensor.md
---
docs/usage/cards/card_binary_sensor.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_binary_sensor.md b/docs/usage/cards/card_binary_sensor.md
index 74c829925..13a48583c 100644
--- a/docs/usage/cards/card_binary_sensor.md
+++ b/docs/usage/cards/card_binary_sensor.md
@@ -31,6 +31,6 @@ The `binary-sensor-card` is to show the state (on/off, open/close, etc.) of a bi
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_binary_sensor.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml"
```
From 14ed41067b2020b7618179f9fb463e8ce3c31900 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:07:57 +0100
Subject: [PATCH 042/248] Update card_binary_sensor_alert.md
---
docs/usage/cards/card_binary_sensor_alert.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_binary_sensor_alert.md b/docs/usage/cards/card_binary_sensor_alert.md
index 14b9408b4..09d0145d5 100644
--- a/docs/usage/cards/card_binary_sensor_alert.md
+++ b/docs/usage/cards/card_binary_sensor_alert.md
@@ -31,6 +31,6 @@ The `binary-sensor-card` is to show the state (on/off, open/close, etc.) of a bi
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_binary_sensor_alert.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor_alert.yaml"
```
From 63c01db329596a9d399c5326f0ff73c4112580ec Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:08:49 +0100
Subject: [PATCH 043/248] Update card_cover_with_buttons.md
---
docs/usage/cards/card_cover_with_buttons.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_cover_with_buttons.md b/docs/usage/cards/card_cover_with_buttons.md
index 21ab16f16..554e41429 100644
--- a/docs/usage/cards/card_cover_with_buttons.md
+++ b/docs/usage/cards/card_cover_with_buttons.md
@@ -31,6 +31,6 @@ With the `cover-card` you have the state of your cover and on the second line UP
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_cover_with_buttons.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_cover_with_buttons.yaml"
```
From 2d9b95ebd15a7d16258079feb267c60f490b1cc6 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:09:15 +0100
Subject: [PATCH 044/248] Update card_generic.md
---
docs/usage/cards/card_generic.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_generic.md b/docs/usage/cards/card_generic.md
index b7e3715dc..4cafd90d4 100644
--- a/docs/usage/cards/card_generic.md
+++ b/docs/usage/cards/card_generic.md
@@ -27,6 +27,6 @@ This is the `generic-card` to display values from a sensor, eg. to show humidity
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_generic.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic.yaml"
```
From 1043d2f5b59e7e53c65a55cdafea668e3c992f4d Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:09:46 +0100
Subject: [PATCH 045/248] Update card_generic_swap.md
---
docs/usage/cards/card_generic_swap.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_generic_swap.md b/docs/usage/cards/card_generic_swap.md
index 08a47b9ed..e2ba5f9a5 100644
--- a/docs/usage/cards/card_generic_swap.md
+++ b/docs/usage/cards/card_generic_swap.md
@@ -27,6 +27,6 @@ This is a `generic-card` with swapped label and name.
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_generic_swap.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic_swap.yaml"
```
From a0e0e96a685976ee1c0db5ac1ff620cf822ed578 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:10:07 +0100
Subject: [PATCH 046/248] Update card_graph.md
---
docs/usage/cards/card_graph.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_graph.md b/docs/usage/cards/card_graph.md
index 55ca9f586..dc5971ced 100644
--- a/docs/usage/cards/card_graph.md
+++ b/docs/usage/cards/card_graph.md
@@ -40,6 +40,6 @@ The `card_graph` shows an entity with the actual state and a *min-graph-card* in
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_graph.md"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml"
```
From 16405b4acf1a4da30bbedc1dd7abffc15cdb7265 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:11:03 +0100
Subject: [PATCH 047/248] Update card_input_boolean.md
---
docs/usage/cards/card_input_boolean.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_input_boolean.md b/docs/usage/cards/card_input_boolean.md
index 2454f1a22..7ed6dd1ef 100644
--- a/docs/usage/cards/card_input_boolean.md
+++ b/docs/usage/cards/card_input_boolean.md
@@ -27,6 +27,6 @@ The `input-boolean-card` is to switch an `input_boolean` on or off.
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_input_boolean.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_input_boolean.yaml"
```
From 4247d225312c77ec1c3773cf6774a124f8fb2e8a Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:11:54 +0100
Subject: [PATCH 048/248] Update card_graph.md
---
docs/usage/cards/card_graph.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_graph.md b/docs/usage/cards/card_graph.md
index dc5971ced..68c001224 100644
--- a/docs/usage/cards/card_graph.md
+++ b/docs/usage/cards/card_graph.md
@@ -40,6 +40,6 @@ The `card_graph` shows an entity with the actual state and a *min-graph-card* in
??? note "Template Code"
- ```yaml title="card_graph.md"
+ ```yaml title="card_graph.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml"
```
From 57134bac69b93bc513e3f9475da5f06e98f0963a Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:12:38 +0100
Subject: [PATCH 049/248] Update card_media_player.md
---
docs/usage/cards/card_media_player.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_media_player.md b/docs/usage/cards/card_media_player.md
index bd8d82294..abddb9c87 100644
--- a/docs/usage/cards/card_media_player.md
+++ b/docs/usage/cards/card_media_player.md
@@ -29,6 +29,6 @@ The `card_media_player` shows you the *app*, the *title* and the *album name* pl
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_media_player.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml"
```
From c44e7c7ad55fb7fa71603de927508bb9f6bba71d Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:13:06 +0100
Subject: [PATCH 050/248] Update card_media_player_with_control.md
---
docs/usage/cards/card_media_player_with_control.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_media_player_with_control.md b/docs/usage/cards/card_media_player_with_control.md
index 1158ed221..268c0dfb4 100644
--- a/docs/usage/cards/card_media_player_with_control.md
+++ b/docs/usage/cards/card_media_player_with_control.md
@@ -29,6 +29,6 @@ This is the second `media-player-card`, in contrast to the first one above, it s
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_media_player_with_control.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_control.yaml"
```
From fd190da3adf8ab731d1ae4059ef572fd845fe4ee Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:14:11 +0100
Subject: [PATCH 051/248] Update card_media_player_with_controls.md
---
docs/usage/cards/card_media_player_with_controls.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_media_player_with_controls.md b/docs/usage/cards/card_media_player_with_controls.md
index 10cdde36e..4d1fae952 100644
--- a/docs/usage/cards/card_media_player_with_controls.md
+++ b/docs/usage/cards/card_media_player_with_controls.md
@@ -31,6 +31,6 @@ With the `card_media_player_with_controls` you have the state of your media_play
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_media_player_with_controls.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player_with_controls.yaml"
```
From f1d3ece3cc9a2f1a5ce20b3d0ed776e583b94e24 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:14:44 +0100
Subject: [PATCH 052/248] Update card_navigate.md
---
docs/usage/cards/card_navigate.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_navigate.md b/docs/usage/cards/card_navigate.md
index 7029424f9..e2aee9569 100644
--- a/docs/usage/cards/card_navigate.md
+++ b/docs/usage/cards/card_navigate.md
@@ -32,6 +32,6 @@ The `card_navigate` is for navigating inside your HA dashboard(s).
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_navigate.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_navigate.yaml"
```
From da4dcad5fbaaab8362921fa3e3935ae87e63d9ba Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:15:10 +0100
Subject: [PATCH 053/248] Update card_person.md
---
docs/usage/cards/card_person.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_person.md b/docs/usage/cards/card_person.md
index d63783326..998775afe 100644
--- a/docs/usage/cards/card_person.md
+++ b/docs/usage/cards/card_person.md
@@ -34,6 +34,6 @@ The `card_person` shows if a person is `home` or `not_home`. If you have setup o
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_person.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_person.yaml"
```
From d376d28109f41462e9ee5a59a1f75d49811ff28c Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:23:57 +0100
Subject: [PATCH 054/248] Update card_power_outlet.md
---
docs/usage/cards/card_power_outlet.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_power_outlet.md b/docs/usage/cards/card_power_outlet.md
index bfcfd8474..13edb08ad 100644
--- a/docs/usage/cards/card_power_outlet.md
+++ b/docs/usage/cards/card_power_outlet.md
@@ -32,6 +32,6 @@ This is the `power-outlet-card`. It shows you the state of a power outlet, and i
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_power_outlet.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_power_outlet.yaml"
```
From d3978ddd89abeb87a100a76984617b4bc4fff365 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:24:33 +0100
Subject: [PATCH 055/248] Update card_weather.md
---
docs/usage/cards/card_weather.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_weather.md b/docs/usage/cards/card_weather.md
index 022b765b6..5bc9594a3 100644
--- a/docs/usage/cards/card_weather.md
+++ b/docs/usage/cards/card_weather.md
@@ -40,6 +40,6 @@ This is a card based on simple-weather-card to show your weather.
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_weather.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_weather.yaml"
```
From ef60b3506ac7657dab934aeff10e39187f16c01f Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:24:59 +0100
Subject: [PATCH 056/248] Update card_vertical_button.md
---
docs/usage/cards/card_vertical_button.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_vertical_button.md b/docs/usage/cards/card_vertical_button.md
index 730c819e6..8d29dc148 100644
--- a/docs/usage/cards/card_vertical_button.md
+++ b/docs/usage/cards/card_vertical_button.md
@@ -33,6 +33,6 @@ Card description should be here.
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_vertical_button.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_vertical_button.yaml"
```
From 8ceb94a15d601ebe4739cff622d2c74fb30b1c8b Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:25:21 +0100
Subject: [PATCH 057/248] Update card_title.md
---
docs/usage/cards/card_title.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_title.md b/docs/usage/cards/card_title.md
index 375a16e9c..258f016f6 100644
--- a/docs/usage/cards/card_title.md
+++ b/docs/usage/cards/card_title.md
@@ -29,6 +29,6 @@ Titles (and optionally subtitles) are used to seperate different areas in your d
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_title.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/title/card_title.yaml"
```
From 879d907904333abdb2ea0cb0793e7884201980c1 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:25:56 +0100
Subject: [PATCH 058/248] Update card_thermostat.md
---
docs/usage/cards/card_thermostat.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_thermostat.md b/docs/usage/cards/card_thermostat.md
index 8dd494431..923bdcf85 100644
--- a/docs/usage/cards/card_thermostat.md
+++ b/docs/usage/cards/card_thermostat.md
@@ -31,6 +31,6 @@ The thermostat-card is used to switch a climate entity on/off and show the tempe
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_thermostat.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml"
```
From 0c8bdf81dc1592f9e72536619d2a7fb78a7e04cf Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:26:19 +0100
Subject: [PATCH 059/248] Update card_script.md
---
docs/usage/cards/card_script.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/cards/card_script.md b/docs/usage/cards/card_script.md
index afb3cbe61..7cafca966 100644
--- a/docs/usage/cards/card_script.md
+++ b/docs/usage/cards/card_script.md
@@ -38,6 +38,6 @@ This card starts/runs a script. You can configure icon and text.
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="card_script.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_script.yaml"
```
From 855599227f1f85c9f178fa5cd4ba9212a8de8eea Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:31:53 +0100
Subject: [PATCH 060/248] Update chip_alarm.md
---
docs/usage/chips/chip_alarm.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_alarm.md b/docs/usage/chips/chip_alarm.md
index 4b86a7e09..1bf85c102 100644
--- a/docs/usage/chips/chip_alarm.md
+++ b/docs/usage/chips/chip_alarm.md
@@ -27,6 +27,6 @@ Alarm `chip` that displays alarm armed and disarmed state with colored icon.
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_alarm.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_alarm.yaml"
```
From 78864d1dfeadf476128a017864b2738edfae6c3a Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:32:34 +0100
Subject: [PATCH 061/248] Update chip_temperature.md
---
docs/usage/chips/chip_temperature.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_temperature.md b/docs/usage/chips/chip_temperature.md
index 56bd019bc..44585c2e6 100644
--- a/docs/usage/chips/chip_temperature.md
+++ b/docs/usage/chips/chip_temperature.md
@@ -32,6 +32,6 @@ This `chip` is to display a weather icon together with the outside and inside te
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_temperature.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_temperature.yaml"
```
From a6b88916cc87842c02caf70566d3b31d6d735d8f Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:33:31 +0100
Subject: [PATCH 062/248] Update chip_presence_detection.md
---
docs/usage/chips/chip_presence_detection.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_presence_detection.md b/docs/usage/chips/chip_presence_detection.md
index 5800242d9..61d964d30 100644
--- a/docs/usage/chips/chip_presence_detection.md
+++ b/docs/usage/chips/chip_presence_detection.md
@@ -30,6 +30,6 @@ This `chip` shows you the actual presence in your home. Shows residents and gues
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_presence_detection.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_presence_detection.yaml"
```
From 6c60cf1df999b29f8a6cd9d42ba775b79ae0a40f Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:34:31 +0100
Subject: [PATCH 063/248] Update chip_power_consumption.md
---
docs/usage/chips/chip_power_consumption.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_power_consumption.md b/docs/usage/chips/chip_power_consumption.md
index 9e9695c10..aa18b3b93 100644
--- a/docs/usage/chips/chip_power_consumption.md
+++ b/docs/usage/chips/chip_power_consumption.md
@@ -30,6 +30,6 @@ This `chip` shows you the electric consumption from a sensor. Configurable to sh
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_power_consumption.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_power_consumption.yaml"
```
From fe9a6486cebe08f7895dc9d06e94bcfda0327157 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:36:35 +0100
Subject: [PATCH 064/248] Update chip_navigate.md
---
docs/usage/chips/chip_navigate.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_navigate.md b/docs/usage/chips/chip_navigate.md
index fa0e78e11..ef011846c 100644
--- a/docs/usage/chips/chip_navigate.md
+++ b/docs/usage/chips/chip_navigate.md
@@ -30,6 +30,6 @@ This `chip` is a menu button with an icon using [mdi](https://materialdesignicon
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_navigate.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_navigate.yaml"
```
From f48d65590fc9c37e28399e59a065f18723a23179 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:39:07 +0100
Subject: [PATCH 065/248] Update chip_mdi_icon_state.md
---
docs/usage/chips/chip_mdi_icon_state.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_mdi_icon_state.md b/docs/usage/chips/chip_mdi_icon_state.md
index 1331db779..8d230042c 100644
--- a/docs/usage/chips/chip_mdi_icon_state.md
+++ b/docs/usage/chips/chip_mdi_icon_state.md
@@ -30,6 +30,6 @@ This `chip` displays an icon using [mdi](https://materialdesignicons.com/) and `
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_mdi_icon_state.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_mdi_icon_state.yaml"
```
From e922d263b983c5de84b4fb7beda029c5c7ee80dd Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:39:49 +0100
Subject: [PATCH 066/248] Update chip_mdi_icon_only.md
---
docs/usage/chips/chip_mdi_icon_only.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_mdi_icon_only.md b/docs/usage/chips/chip_mdi_icon_only.md
index ee9ba25b6..cbd9d5c4c 100644
--- a/docs/usage/chips/chip_mdi_icon_only.md
+++ b/docs/usage/chips/chip_mdi_icon_only.md
@@ -30,6 +30,6 @@ This `chip` displays an icon using [mdi](https://materialdesignicons.com/).
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_mdi_icon_only.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_mdi_icon_only.yaml"
```
From 4d2d4c3c539f711c692a2e21a3db32ebc7f6f751 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:40:10 +0100
Subject: [PATCH 067/248] Update chip_icon_state.md
---
docs/usage/chips/chip_icon_state.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_icon_state.md b/docs/usage/chips/chip_icon_state.md
index 813b58154..d35ca813c 100644
--- a/docs/usage/chips/chip_icon_state.md
+++ b/docs/usage/chips/chip_icon_state.md
@@ -30,6 +30,6 @@ This `chip` displays an icon and a label, where the label can be any `state` of
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_icon_state.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_icon_state.yaml"
```
From b2cb6094dc5bc86b1c421787f8badd4278442936 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:41:13 +0100
Subject: [PATCH 068/248] Update chip_icon_only.md
---
docs/usage/chips/chip_icon_only.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_icon_only.md b/docs/usage/chips/chip_icon_only.md
index a8c08bb57..db7331528 100644
--- a/docs/usage/chips/chip_icon_only.md
+++ b/docs/usage/chips/chip_icon_only.md
@@ -28,6 +28,6 @@ This `chip` displays just an icon.
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_icon_only.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_icon_only.yaml"
```
From d5b420ba812f08a2ab542ef381bc05a1be8fbde8 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:41:36 +0100
Subject: [PATCH 069/248] Update chip_icon_label.md
---
docs/usage/chips/chip_icon_label.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_icon_label.md b/docs/usage/chips/chip_icon_label.md
index 692230d0c..6780679d2 100644
--- a/docs/usage/chips/chip_icon_label.md
+++ b/docs/usage/chips/chip_icon_label.md
@@ -29,6 +29,6 @@ This `chip` displays an icon using [mdi](https://materialdesignicons.com/) and a
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_icon_label.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_icon_label.yaml"
```
From 490f98b00de6aeb4cfe1af2614fecc04bcd6be15 Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:41:59 +0100
Subject: [PATCH 070/248] Update chip_icon_double_state.md
---
docs/usage/chips/chip_icon_double_state.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_icon_double_state.md b/docs/usage/chips/chip_icon_double_state.md
index cf2366382..dd9e018f1 100644
--- a/docs/usage/chips/chip_icon_double_state.md
+++ b/docs/usage/chips/chip_icon_double_state.md
@@ -32,6 +32,6 @@ This `chip` displays can display an icon and value of two entities.
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_icon_double_state.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_icon_double_state.yaml"
```
From e063838ceacd5dadd40825824e3818629a578fef Mon Sep 17 00:00:00 2001
From: Robin Jonsson <32449079+r0binj@users.noreply.github.com>
Date: Fri, 28 Jan 2022 21:42:19 +0100
Subject: [PATCH 071/248] Update chip_back.md
---
docs/usage/chips/chip_back.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/usage/chips/chip_back.md b/docs/usage/chips/chip_back.md
index 4b62dba51..14e8fd065 100644
--- a/docs/usage/chips/chip_back.md
+++ b/docs/usage/chips/chip_back.md
@@ -27,6 +27,6 @@ This is a `back-button`, primarly used if you switch between views and want a co
??? note "Template Code"
- ```yaml title="card_light.yaml"
+ ```yaml title="chip_back.yaml"
--8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_back.yaml"
```
From cc3a685a16293da419251ea86f32c49f0b2b4101 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simon=20H=C3=B6rrle?=
Date: Sat, 29 Jan 2022 13:56:53 +0100
Subject: [PATCH 072/248] Fix code quality
---
.../ui_lovelace_minimalist/lovelace/translations/NO.yaml | 1 -
1 file changed, 1 deletion(-)
diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
index 44715838d..19a4d170d 100644
--- a/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
+++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/NO.yaml
@@ -32,4 +32,3 @@ ulm_language_variables:
ulm_afternoon: "God ettermiddag"
ulm_evening: "God kveld"
ulm_hello: "Hei"
-
\ No newline at end of file
From 53c90d62ae40333e49d60f9ed9f1b5f349468b4f Mon Sep 17 00:00:00 2001
From: Sil de Hoop <34340385+sildehoop@users.noreply.github.com>
Date: Sat, 29 Jan 2022 15:14:32 +0100
Subject: [PATCH 073/248] fix readme and update image
---
custom_cards/custom_card_scenes/README.md | 203 +---------------------
docs/assets/img/card_scenes.png | Bin 0 -> 90417 bytes
docs/assets/img/ulm_cards/card_scenes.png | Bin 85205 -> 0 bytes
3 files changed, 6 insertions(+), 197 deletions(-)
create mode 100644 docs/assets/img/card_scenes.png
delete mode 100644 docs/assets/img/ulm_cards/card_scenes.png
diff --git a/custom_cards/custom_card_scenes/README.md b/custom_cards/custom_card_scenes/README.md
index c25a4c2da..b7f66722a 100644
--- a/custom_cards/custom_card_scenes/README.md
+++ b/custom_cards/custom_card_scenes/README.md
@@ -7,9 +7,9 @@ hide:
# Custom-card "Scenes Card"
-The `card_scenes` you can control a input_number entity
+With the `card_scenes` you can activate scenes.
-![Scenes Card](../../docs/assets/img/ulm_cards/card_scenes.png)
+![Scenes Card](../../docs/assets/img/card_scenes.png)
## Credits
@@ -108,199 +108,8 @@ n/a
## Template code
-```yaml
----
-card_scenes:
- show_icon: false
- show_name: false
- show_label: false
- variables:
- icon_1: "mdi:help-circle-outline"
- icon_2: "mdi:help-circle-outline"
- icon_3: "mdi:help-circle-outline"
- icon_4: "mdi:help-circle-outline"
- icon_5: "mdi:help-circle-outline"
- name_1: "n/a"
- name_2: "n/a"
- name_3: "n/a"
- name_4: "n/a"
- name_5: "n/a"
- color_icon_1: "gray"
- color_icon_2: "gray"
- color_icon_3: "gray"
- color_icon_4: "gray"
- color_icon_5: "gray"
- color_bg_1: "gray"
- color_bg_2: "gray"
- color_bg_3: "gray"
- color_bg_4: "gray"
- color_bg_5: "gray"
- styles:
- grid:
- - grid-template-areas: "'item1 item2 item3 item4 item5'"
- - grid-template-columns: "1fr 1fr 1fr 1fr 1fr"
- - grid-template-rows: "min-content"
- - justify-items: "center"
- - column-gap: "auto"
- card:
- - border-radius: "var(--border-radius)"
- - box-shadow: "var(--box-shadow)"
- - padding: "12px"
- custom_fields:
- item1:
- card:
- type: "custom:button-card"
- template: "card_scenes_pill"
- entity: "[[[ return variables.entity_1 ]]]"
- icon: "[[[ return variables.icon_1 ]]]"
- name: "[[[ return variables.name_1 ]]]"
- variables:
- color_icon: "[[[ return variables.color_icon_1 ]]]"
- color_bg: "[[[ return variables.color_bg_1 ]]]"
- tap_action:
- action: "call-service"
- service: "scene.turn_on"
- service_data:
- entity_id: "[[[ return variables.entity_1 ]]]"
- item2:
- card:
- type: "custom:button-card"
- template: "card_scenes_pill"
- entity: "[[[ return variables.entity_2 ]]]"
- icon: "[[[ return variables.icon_2 ]]]"
- name: "[[[ return variables.name_2 ]]]"
- variables:
- color_icon: "[[[ return variables.color_icon_2 ]]]"
- color_bg: "[[[ return variables.color_bg_2 ]]]"
- tap_action:
- action: "call-service"
- service: "scene.turn_on"
- service_data:
- entity_id: "[[[ return variables.entity_2 ]]]"
- item3:
- card:
- type: "custom:button-card"
- template: "card_scenes_pill"
- entity: "[[[ return variables.entity_3 ]]]"
- icon: "[[[ return variables.icon_3 ]]]"
- name: "[[[ return variables.name_3 ]]]"
- variables:
- color_icon: "[[[ return variables.color_icon_3 ]]]"
- color_bg: "[[[ return variables.color_bg_3 ]]]"
- tap_action:
- action: "call-service"
- service: "scene.turn_on"
- service_data:
- entity_id: "[[[ return variables.entity_3 ]]]"
- item4:
- card:
- type: "custom:button-card"
- template: "card_scenes_pill"
- entity: "[[[ return variables.entity_4 ]]]"
- icon: "[[[ return variables.icon_4 ]]]"
- name: "[[[ return variables.name_4 ]]]"
- variables:
- color_icon: "[[[ return variables.color_icon_4 ]]]"
- color_bg: "[[[ return variables.color_bg_4 ]]]"
- tap_action:
- action: "call-service"
- service: "scene.turn_on"
- service_data:
- entity_id: "[[[ return variables.entity_4 ]]]"
- item5:
- card:
- type: "custom:button-card"
- template: "card_scenes_pill"
- entity: "[[[ return variables.entity_5 ]]]"
- icon: "[[[ return variables.icon_5 ]]]"
- name: "[[[ return variables.name_5 ]]]"
- variables:
- color_icon: "[[[ return variables.color_icon_5 ]]]"
- color_bg: "[[[ return variables.color_bg_5 ]]]"
- tap_action:
- action: "call-service"
- service: "scene.turn_on"
- service_data:
- entity_id: "[[[ return variables.entity_5 ]]]"
+??? note "Template Code"
-card_scenes_pill:
- show_icon: true
- show_label: false
- show_name: true
- variables:
- color_icon: "gray"
- color_bg: "gray"
- styles:
- grid:
- - grid-template-areas: "'i' 'n'"
- - grid-template-columns: "min-content"
- - grid-template-rows: "1fr 1fr"
- - row-gap: "12px"
- - justify-items: "center"
- - column-gap: "auto"
- card:
- - box-shadow: "none"
- - padding: "5px"
- - box-shadow: >
- [[[
- if (hass.themes.darkMode){
- return "0px 2px 4px 0px rgba(0,0,0,0.80)";
- } else {
- return "var(--box-shadow)";
- }
- ]]]
- - border-radius: "50px"
- - place-self: "center"
- - width: "52px"
- - height: "84px"
- icon:
- - color: >
- [[[
- var color = [variables.color_icon];
- if (color == "gray"){
- var color = "rgba(var(--color-theme),0.20)";
- } else if(color == "yellow"){
- var color = "rgba(var(--color-yellow),1)";
- } else if(color == "blue"){
- var color = "rgba(var(--color-blue),1)";
- } else if(color == "purple"){
- var color = "rgba(var(--color-purple),1)";
- } else if(color == "green"){
- var color = "rgba(var(--color-green),1)";
- } else if(color == "red"){
- var color = "rgba(var(--color-red),1)";
- }
- return color;
- ]]]
- img_cell:
- - background-color: >
- [[[
- var color = [variables.color_bg];
- if (color == "gray"){
- var color = "rgba(var(--color-theme),0.05)";
- } else if(color == "yellow"){
- var color = "rgba(var(--color-yellow),0.20)";
- } else if(color == "blue"){
- var color = "rgba(var(--color-blue),0.20)";
- } else if(color == "purple"){
- var color = "rgba(var(--color-purple),0.20)";
- } else if(color == "green"){
- var color = "rgba(var(--color-green),0.20)";
- } else if(color == "red"){
- var color = "rgba(var(--color-red),0.20)";
- }
- return color;
- ]]]
- - border-radius: "50%"
- - width: "42px"
- - height: "42px"
- name:
- - font-weight: "bold"
- - font-size: "9.5px"
- - width: "33px"
- - padding-bottom: "7px"
- state:
- - color: "rgba(var(--color-theme),0.9)"
- color: "var(--google-grey)"
-
-```
+ ```yaml title="custom_card_scenes.yaml"
+ --8<-- "custom_cards/custom_card_scenes/card_scenes.yaml"
+ ```
diff --git a/docs/assets/img/card_scenes.png b/docs/assets/img/card_scenes.png
new file mode 100644
index 0000000000000000000000000000000000000000..dbfd9031a944a4b0fe95c7702a47a8f9a0062f98
GIT binary patch
literal 90417
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