import { html, LitElement, TemplateResult, customElement, property, css, CSSResult, PropertyValues, } from "lit-element"; import { ifDefined } from "lit-html/directives/if-defined"; import "../../../components/entity/state-badge"; import "../components/hui-warning-element"; import { computeTooltip } from "../common/compute-tooltip"; import { LovelaceElement, StateIconElementConfig } from "./types"; import { HomeAssistant } from "../../../types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; import { actionHandler } from "../common/directives/action-handler-directive"; import { hasAction } from "../common/has-action"; import { ActionHandlerEvent } from "../../../data/lovelace"; import { handleAction } from "../common/handle-action"; @customElement("hui-state-icon-element") export class HuiStateIconElement extends LitElement implements LovelaceElement { @property() public hass?: HomeAssistant; @property() private _config?: StateIconElementConfig; public setConfig(config: StateIconElementConfig): void { if (!config.entity) { throw Error("Invalid Configuration: 'entity' required"); } this._config = config; } protected shouldUpdate(changedProps: PropertyValues): boolean { return hasConfigOrEntityChanged(this, changedProps); } protected render(): TemplateResult | void { if (!this._config || !this.hass) { return html``; } const stateObj = this.hass.states[this._config.entity!]; if (!stateObj) { return html` `; } return html` `; } static get styles(): CSSResult { return css` :host { cursor: pointer; } state-badge:focus { outline: none; background: var(--divider-color); border-radius: 100%; } `; } private _handleAction(ev: ActionHandlerEvent) { handleAction(this, this.hass!, this._config!, ev.detail.action!); } } declare global { interface HTMLElementTagNameMap { "hui-state-icon-element": HuiStateIconElement; } }