diff --git a/bubble/popup_accent_color_button.yaml b/bubble/popup_accent_color_button.yaml new file mode 100644 index 0000000..d914010 --- /dev/null +++ b/bubble/popup_accent_color_button.yaml @@ -0,0 +1,33 @@ +popup_accent_color_button: + name: Popup Accent Color Button + version: '1.0' + creator: Tony Stork + supported: + - button + description: Will turn the button to accent color variable if config entity is on, otherwise default style applies + code: |- + ${(() => { + const state = hass?.states[this.config?.entity]?.state || ''; + + let bg_color = 'var(--background-color-2)'; + let accent_color = 'var(--accent-color)'; + + // Main button background + const mainButton = card?.querySelector('.bubble-button-background'); + if (mainButton) { + mainButton.style.opacity = '1'; + mainButton.style.backgroundColor = state === 'on' ? accent_color : bg_color; + mainButton.style.transition = 'background-color 1s'; + } + + // Unavailable state + if (mainButton && state === 'unavailable') { + mainButton.classList.add('is-unavailable'); + } else if (mainButton) { + mainButton.classList.remove('is-unavailable'); + } + + // No CSS string needed + return ''; + })()} + editor: '' diff --git a/bubble/popup_security_button.yaml b/bubble/popup_security_button.yaml new file mode 100644 index 0000000..a0db37f --- /dev/null +++ b/bubble/popup_security_button.yaml @@ -0,0 +1,33 @@ +popup_security_button: + name: Popup Security Button + version: '1.0' + creator: Tony Stork + supported: + - button + description: Will turn the button red if there is a security fault, otherwise default style applies + code: |- + ${(() => { + const state = hass?.states[this.config?.entity]?.state || ''; + + let bg_color = 'var(--background-color-2)'; + let red_color = 'var(--error-color)'; + + // Main button background + const mainButton = card?.querySelector('.bubble-button-background'); + if (mainButton) { + mainButton.style.opacity = '1'; + mainButton.style.backgroundColor = state === 'on' ? red_color : bg_color; + mainButton.style.transition = 'background-color 1s'; + } + + // Unavailable state + if (mainButton && state === 'unavailable') { + mainButton.classList.add('is-unavailable'); + } else if (mainButton) { + mainButton.classList.remove('is-unavailable'); + } + + // No CSS string needed + return ''; + })()} + editor: '' diff --git a/bubble/popup_temperature_button.yaml b/bubble/popup_temperature_button.yaml new file mode 100644 index 0000000..ef405ed --- /dev/null +++ b/bubble/popup_temperature_button.yaml @@ -0,0 +1,55 @@ +popup_temperature_button: + name: Popup Temperature Button + version: '1.0' + creator: Tony Stork + supported: + - button + description: Will turn the button red if the room is too hot, cyan if too cold, otherwise default style applies + code: |- + ${(() => { + const hot = hass?.states[this.config?.popup_temperature_button?.hot_entity]?.state || ''; + const cold = hass?.states[this.config?.popup_temperature_button?.cold_entity]?.state || ''; + + let bg_color = 'var(--background-color-2)'; + let hot_color = 'var(--error-color)'; + let cold_color = 'var(--cyan-color)'; + + // Main button background + const mainButton = card?.querySelector('.bubble-button-background'); + if (mainButton) { + mainButton.style.opacity = '1'; + if (hot === 'on') { + mainButton.style.backgroundColor = hot_color; + } else if (cold === 'on') { + mainButton.style.backgroundColor = cold_color; + } else { + mainButton.style.backgroundColor = bg_color; + } + mainButton.style.transition = 'background-color 1s'; + } + + // Unavailable state + if (mainButton && state === 'unavailable') { + mainButton.classList.add('is-unavailable'); + } else if (mainButton) { + mainButton.classList.remove('is-unavailable'); + } + + // No CSS string needed + return ''; + })()} + editor: + - type: expandable + title: Entity Configuration + icon: mdi:format-list-bulleted + schema: + - name: hot_entity + label: Hot Entity + selector: + entity: + device_class: heat + - name: cold_entity + label: Cold Entity + selector: + entity: + device_class: cold