@@ -103,6 +103,10 @@ export class HaGenericPicker extends LitElement {
103103 // helper to set new value after closing picker, to avoid flicker
104104 private _newValue ?: string ;
105105
106+ @property ( { attribute : "error-message" } ) public errorMessage ?: string ;
107+
108+ @property ( { type : Boolean , reflect : true } ) public invalid = false ;
109+
106110 private _unsubscribeTinyKeys ?: ( ) => void ;
107111
108112 protected render ( ) {
@@ -137,6 +141,8 @@ export class HaGenericPicker extends LitElement {
137141 .value = ${ this . value }
138142 .required = ${ this . required }
139143 .disabled = ${ this . disabled }
144+ .errorMessage = ${ this . errorMessage }
145+ .invalid = ${ this . invalid }
140146 .hideClearIcon = ${ this . hideClearIcon }
141147 .valueRenderer = ${ this . valueRenderer }
142148 >
@@ -205,11 +211,16 @@ export class HaGenericPicker extends LitElement {
205211 }
206212
207213 private _renderHelper ( ) {
208- return this . helper
209- ? html `<ha- input- helper- text .disabled = ${ this . disabled }
210- > ${ this . helper } </ ha- input- helper- text
211- > `
212- : nothing ;
214+ const showError = this . invalid && this . errorMessage ;
215+ const showHelper = ! showError && this . helper ;
216+
217+ if ( ! showError && ! showHelper ) {
218+ return nothing ;
219+ }
220+
221+ return html `<ha- input- helper- text .disabled = ${ this . disabled } >
222+ ${ showError ? this . errorMessage : this . helper }
223+ </ ha- input- helper- text> ` ;
213224 }
214225
215226 private _dialogOpened = ( ) => {
@@ -308,6 +319,9 @@ export class HaGenericPicker extends LitElement {
308319 display : block;
309320 margin : var (--ha-space-2 ) 0 0 ;
310321 }
322+ : host ([invalid ]) ha-input-helper-text {
323+ color : var (--mdc-theme-error , var (--error-color , # b00020 ));
324+ }
311325
312326 wa-popover {
313327 --wa-space-l : var (--ha-space-0 );
0 commit comments