diff --git a/src/components/data-table/ha-data-table-labels.ts b/src/components/data-table/ha-data-table-labels.ts index 84ad9ca81a..7156d6d4ca 100644 --- a/src/components/data-table/ha-data-table-labels.ts +++ b/src/components/data-table/ha-data-table-labels.ts @@ -1,10 +1,10 @@ import { css, html, LitElement, nothing, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators"; -import "../chips/ha-assist-chip"; import { repeat } from "lit/directives/repeat"; import { LabelRegistryEntry } from "../../data/label_registry"; import { computeCssColor } from "../../common/color/compute-color"; import { fireEvent } from "../../common/dom/fire_event"; +import "../ha-label"; @customElement("ha-data-table-labels") class HaDataTableLabels extends LitElement { @@ -21,23 +21,22 @@ class HaDataTableLabels extends LitElement { ${this.labels.length > 2 ? html` - + + +${this.labels.length - 2} + ${repeat( this.labels.slice(2), (label) => label.label_id, - (label) => - html` + (label) => html` + ${this._renderLabel(label, false)} - ` + + ` )} ` : nothing} @@ -47,20 +46,29 @@ class HaDataTableLabels extends LitElement { private _renderLabel(label: LabelRegistryEntry, clickAction: boolean) { const color = label?.color ? computeCssColor(label.color) : undefined; - return html` - ${label?.icon - ? html`` - : nothing} - `; + return html` + + ${label?.icon + ? html`` + : nothing} + ${label.name} + + `; } - private _labelClicked(ev: Event) { + private _labelClicked(ev) { + ev.stopPropagation(); + if (ev.type === "keydown" && ev.key !== "Enter" && ev.key !== " ") { + return; + } const label = (ev.currentTarget as any).item as LabelRegistryEntry; fireEvent(this, "label-clicked", { label }); } @@ -95,14 +103,15 @@ class HaDataTableLabels extends LitElement { position: fixed; flex-wrap: nowrap; } - ha-assist-chip { - border: 1px solid var(--color); - --md-assist-chip-icon-size: 16px; - --md-assist-chip-container-height: 20px; - --md-assist-chip-leading-space: 12px; - --md-assist-chip-trailing-space: 12px; - --ha-assist-chip-active-container-color: var(--color); - --ha-assist-chip-active-container-opacity: 0.3; + ha-label { + --ha-label-background-color: var(--color); + --ha-label-background-opacity: 0.5; + } + ha-button-menu { + border-radius: 10px; + } + .plus { + border: 1px solid var(--divider-color); } `; } diff --git a/src/components/ha-filter-labels.ts b/src/components/ha-filter-labels.ts index 622b694538..5b816272cd 100644 --- a/src/components/ha-filter-labels.ts +++ b/src/components/ha-filter-labels.ts @@ -12,10 +12,10 @@ import { import { SubscribeMixin } from "../mixins/subscribe-mixin"; import { haStyleScrollbar } from "../resources/styles"; import type { HomeAssistant } from "../types"; -import "./chips/ha-assist-chip"; +import "./ha-check-list-item"; import "./ha-expansion-panel"; import "./ha-icon"; -import "./ha-check-list-item"; +import "./ha-label"; @customElement("ha-filter-labels") export class HaFilterLabels extends SubscribeMixin(LitElement) { @@ -69,18 +69,15 @@ export class HaFilterLabels extends SubscribeMixin(LitElement) { .selected=${this.value?.includes(label.label_id)} hasMeta > - + ${label.icon ? html`` : nothing} - + ${label.name} + `; })} @@ -170,13 +167,9 @@ export class HaFilterLabels extends SubscribeMixin(LitElement) { .warning { color: var(--error-color); } - ha-assist-chip { - border: 1px solid var(--color); - --md-assist-chip-icon-size: 16px; - --md-assist-chip-leading-space: 12px; - --md-assist-chip-trailing-space: 12px; - --ha-assist-chip-active-container-color: var(--color); - --ha-assist-chip-active-container-opacity: 0.3; + ha-label { + --ha-label-background-color: var(--color); + --ha-label-background-opacity: 0.5; } `, ]; diff --git a/src/components/ha-label.ts b/src/components/ha-label.ts index 10293c88a9..e542b06be5 100644 --- a/src/components/ha-label.ts +++ b/src/components/ha-label.ts @@ -1,13 +1,17 @@ import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; -import { customElement } from "lit/decorators"; +import { customElement, property } from "lit/decorators"; +import "@material/web/ripple/ripple"; @customElement("ha-label") class HaLabel extends LitElement { + @property({ type: Boolean, reflect: true }) dense = false; + protected render(): TemplateResult { return html` - + + `; } @@ -22,8 +26,10 @@ class HaLabel extends LitElement { var(--rgb-primary-text-color), 0.15 ); - } - .label { + --ha-label-background-opacity: 1; + + position: relative; + box-sizing: border-box; display: inline-flex; flex-direction: row; align-items: center; @@ -35,9 +41,22 @@ class HaLabel extends LitElement { height: 32px; padding: 0 16px; border-radius: 18px; - background-color: var(--ha-label-background-color); color: var(--ha-label-text-color); - --mdc-icon-size: 18px; + --mdc-icon-size: 12px; + } + .content > * { + position: relative; + display: inline-flex; + flex-direction: row; + align-items: center; + } + :host:before { + position: absolute; + content: ""; + inset: 0; + border-radius: inherit; + background-color: var(--ha-label-background-color); + opacity: var(--ha-label-background-opacity); } ::slotted([slot="icon"]) { margin-right: 8px; @@ -45,11 +64,23 @@ class HaLabel extends LitElement { margin-inline-start: -8px; margin-inline-end: 8px; display: flex; - color: var(--ha-label-icon-color); } + span { display: inline-flex; } + + :host([dense]) { + height: 20px; + padding: 0 12px; + border-radius: 10px; + } + :host([dense]) ::slotted([slot="icon"]) { + margin-right: 4px; + margin-left: -4px; + margin-inline-start: -4px; + margin-inline-end: 4px; + } `, ]; } diff --git a/src/components/ha-labels-picker.ts b/src/components/ha-labels-picker.ts index 3010c69b0e..a011499120 100644 --- a/src/components/ha-labels-picker.ts +++ b/src/components/ha-labels-picker.ts @@ -199,9 +199,8 @@ export class HaLabelsPicker extends SubscribeMixin(LitElement) { margin-bottom: 8px; } ha-input-chip { - border: 1px solid var(--color); --md-input-chip-selected-container-color: var(--color); - --ha-input-chip-selected-container-opacity: 0.3; + --ha-input-chip-selected-container-opacity: 0.5; } `; }