diff --git a/src/components/ha-area-picker.ts b/src/components/ha-area-picker.ts index 8777c513b923..d601b4cf60bf 100644 --- a/src/components/ha-area-picker.ts +++ b/src/components/ha-area-picker.ts @@ -357,7 +357,11 @@ export class HaAreaPicker extends LitElement { protected render(): TemplateResult { const placeholder = - this.placeholder ?? this.hass.localize("ui.components.area-picker.area"); + this.placeholder ?? + this.hass.localize("ui.components.area-picker.placeholder"); + const notFoundLabel = this.hass.localize( + "ui.components.area-picker.no_match" + ); const valueRenderer = this._computeValueRenderer(this.hass.areas); @@ -367,9 +371,7 @@ export class HaAreaPicker extends LitElement { .autofocus=${this.autofocus} .label=${this.label} .helper=${this.helper} - .notFoundLabel=${this.hass.localize( - "ui.components.area-picker.no_match" - )} + .notFoundLabel=${notFoundLabel} .placeholder=${placeholder} .value=${this.value} .getItems=${this._getItems} diff --git a/src/components/ha-generic-picker.ts b/src/components/ha-generic-picker.ts index 256d4c29b476..d5573e87c7f2 100644 --- a/src/components/ha-generic-picker.ts +++ b/src/components/ha-generic-picker.ts @@ -3,7 +3,6 @@ import type { RenderItemFunction } from "@lit-labs/virtualizer/virtualize"; import { mdiPlaylistPlus } from "@mdi/js"; import { css, html, LitElement, nothing, type CSSResultGroup } from "lit"; import { customElement, property, query, state } from "lit/decorators"; -import { ifDefined } from "lit/directives/if-defined"; import { tinykeys } from "tinykeys"; import { fireEvent } from "../common/dom/fire_event"; import type { HomeAssistant } from "../types"; @@ -107,9 +106,6 @@ export class HaGenericPicker extends LitElement { protected render() { return html` - ${this.label - ? html`` - : nothing}
@@ -130,7 +126,7 @@ export class HaGenericPicker extends LitElement { type="button" class=${this._opened ? "opened" : ""} compact - aria-label=${ifDefined(this.label)} + .label=${this.label} @click=${this.open} @clear=${this._clear} .placeholder=${this.placeholder} diff --git a/src/components/ha-picker-field.ts b/src/components/ha-picker-field.ts index a78c10a9a325..1b545c18fc21 100644 --- a/src/components/ha-picker-field.ts +++ b/src/components/ha-picker-field.ts @@ -8,6 +8,7 @@ import { type TemplateResult, } from "lit"; import { customElement, property, query } from "lit/decorators"; +import { ifDefined } from "lit/directives/if-defined"; import { fireEvent } from "../common/dom/fire_event"; import "./ha-combo-box-item"; import type { HaComboBoxItem } from "./ha-combo-box-item"; @@ -33,6 +34,8 @@ export class HaPickerField extends LitElement { @property() public placeholder?: string; + @property() public label?: string; + @property({ attribute: "hide-clear-icon", type: Boolean }) public hideClearIcon = false; @@ -51,15 +54,35 @@ export class HaPickerField extends LitElement { !!this.value && !this.required && !this.disabled && !this.hideClearIcon; return html` - + ${this.value ? this.valueRenderer ? this.valueRenderer(this.value) - : html`${this.value}` + : html`${this.value}` : html` - - ${this.placeholder} - + ${this.label + ? html` + ${this.label} + ` + : nothing} + ${this.placeholder + ? html` + + ${this.placeholder} + + ` + : nothing} `} ${showClearIcon ? html` @@ -152,9 +175,24 @@ export class HaPickerField extends LitElement { width: 32px; } + .label { + padding: 0 8px; + color: var(--secondary-text-color); + line-height: var(--ha-line-height-normal); + font-size: var(--ha-font-size-m); + white-space: nowrap; + } + + .label.with-placeholder { + line-height: var(--ha-line-height-condensed); + font-size: var(--ha-font-size-xs); + } + .placeholder { color: var(--secondary-text-color); padding: 0 8px; + line-height: var(--ha-line-height-normal); + font-size: var(--ha-font-size-m); } `, ]; diff --git a/src/translations/en.json b/src/translations/en.json index 1a35e26eb67b..26dff5a4f905 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -824,6 +824,7 @@ "add_new": "Add new area…", "no_areas": "You don't have any areas", "no_match": "No matching areas found", + "placeholder": "Select an area", "unassigned_areas": "Unassigned areas", "failed_create_area": "Failed to create area." },