diff --git a/src/components/entity/ha-badge-group.ts b/src/components/entity/ha-badge-group.ts new file mode 100644 index 000000000000..f5d074035b14 --- /dev/null +++ b/src/components/entity/ha-badge-group.ts @@ -0,0 +1,35 @@ +import { + css, + CSSResult, + customElement, + html, + LitElement, + TemplateResult, +} from "lit-element"; +import "../ha-label-badge"; + +@customElement("ha-badge-group") +export class HaBadgeGroup extends LitElement { + protected render(): TemplateResult | void { + return html` + + `; + } + + static get styles(): CSSResult { + return css` + :host { + display: block; + margin: 8px 16px; + font-size: 85%; + text-align: center; + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-badge-group": HaBadgeGroup; + } +} diff --git a/src/components/entity/ha-state-label-badge.ts b/src/components/entity/ha-state-label-badge.ts index 2d82e820955a..380ef69184c9 100644 --- a/src/components/entity/ha-state-label-badge.ts +++ b/src/components/entity/ha-state-label-badge.ts @@ -35,6 +35,8 @@ export class HaStateLabelBadge extends LitElement { @property() public image?: string; + @property() public disabled: boolean = false; + @property() private _timerTimeRemaining?: number; private _connected?: boolean; @@ -92,8 +94,12 @@ export class HaStateLabelBadge extends LitElement { protected firstUpdated(changedProperties: PropertyValues): void { super.firstUpdated(changedProperties); + this.addEventListener("click", (ev) => { ev.stopPropagation(); + if (this.disabled) { + return; + } if (this.state) { fireEvent(this, "hass-more-info", { entityId: this.state.entity_id }); } @@ -220,6 +226,10 @@ export class HaStateLabelBadge extends LitElement { cursor: pointer; } + :host([disabled]) { + cursor: initial; + } + ha-label-badge { --ha-label-badge-color: var(--label-badge-red, #df4c1e); } diff --git a/src/panels/lovelace/components/hui-entity-editor.ts b/src/panels/lovelace/components/hui-entity-editor.ts index c7fc17e00b9c..c96be29f6be6 100644 --- a/src/panels/lovelace/components/hui-entity-editor.ts +++ b/src/panels/lovelace/components/hui-entity-editor.ts @@ -14,6 +14,7 @@ import { fireEvent } from "../../../common/dom/fire_event"; import { EntityConfig } from "../entity-rows/types"; import "../../../components/entity/ha-entity-picker"; +import "../../../components/entity/ha-badge-group"; import { EditorTarget } from "../editor/types"; @customElement("hui-entity-editor") @@ -30,6 +31,27 @@ export class HuiEntityEditor extends LitElement { } return html` + + ${this.entities.map((entity) => { + const state = this.hass!.states[entity.entity]; + const name = entity.name; + const icon = entity.icon; + const image = entity.image; + + return html` + + + + `; + })} + +

${this.label || this.hass!.localize( diff --git a/src/panels/lovelace/views/hui-view.ts b/src/panels/lovelace/views/hui-view.ts index 1edcd41d7bc9..9d14d678ab3f 100644 --- a/src/panels/lovelace/views/hui-view.ts +++ b/src/panels/lovelace/views/hui-view.ts @@ -7,6 +7,7 @@ import { } from "lit-element"; import "../../../components/entity/ha-state-label-badge"; +import "../../../components/entity/ha-badge-group"; // This one is for types // tslint:disable-next-line import { HaStateLabelBadge } from "../../../components/entity/ha-state-label-badge"; @@ -91,7 +92,7 @@ export class HUIView extends LitElement { protected render(): TemplateResult | void { return html` ${this.renderStyles()} -
+
${this.lovelace!.editMode ? html` @@ -122,12 +123,6 @@ export class HUIView extends LitElement { background: var(--lovelace-background); } - #badges { - margin: 8px 16px; - font-size: 85%; - text-align: center; - } - #columns { display: flex; flex-direction: row;