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."
},