From 4ea43a5343883d142d24bcab993cc0addd913ef1 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 23 Feb 2022 15:22:11 +0100 Subject: [PATCH 1/7] Migrate single textfields --- src/components/entity/ha-entities-picker.ts | 1 + .../areas/dialog-area-registry-detail.ts | 24 ++++++------- .../blueprint/dialog-import-blueprint.ts | 34 +++++++++++-------- .../dialog-device-registry-detail.ts | 20 ++++++----- .../config/person/dialog-person-detail.ts | 15 ++++---- src/panels/config/tags/dialog-tag-detail.ts | 24 +++++++------ src/panels/config/users/dialog-user-detail.ts | 13 +++---- 7 files changed, 72 insertions(+), 59 deletions(-) diff --git a/src/components/entity/ha-entities-picker.ts b/src/components/entity/ha-entities-picker.ts index deac6335cab1..1cc56b19a4fa 100644 --- a/src/components/entity/ha-entities-picker.ts +++ b/src/components/entity/ha-entities-picker.ts @@ -148,6 +148,7 @@ class HaEntitiesPickerLight extends LitElement { static override styles = css` ha-entity-picker { + display: block; margin-top: 8px; } `; diff --git a/src/panels/config/areas/dialog-area-registry-detail.ts b/src/panels/config/areas/dialog-area-registry-detail.ts index 3fadb0ea581c..de517ef4ae77 100644 --- a/src/panels/config/areas/dialog-area-registry-detail.ts +++ b/src/panels/config/areas/dialog-area-registry-detail.ts @@ -1,10 +1,10 @@ import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { property, state } from "lit/decorators"; import { fireEvent } from "../../../common/dom/fire_event"; import { createCloseHeading } from "../../../components/ha-dialog"; import "../../../components/ha-alert"; +import "../../../components/ha-textfield"; import "../../../components/ha-picture-upload"; import type { HaPictureUpload } from "../../../components/ha-picture-upload"; import { AreaRegistryEntryMutableParams } from "../../../data/area_registry"; @@ -69,7 +69,7 @@ class DialogAreaDetail extends LitElement { >
${this._error - ? html` ${this._error} ` + ? html`${this._error}` : ""}
${entry @@ -83,9 +83,9 @@ class DialogAreaDetail extends LitElement { ` : ""} - + > ) { + private _nameChanged(ev) { this._error = undefined; - this._name = ev.detail.value; + this._name = ev.target.value; } private _pictureChanged(ev: PolymerChangedEvent) { @@ -188,6 +182,10 @@ class DialogAreaDetail extends LitElement { .form { padding-bottom: 24px; } + ha-textfield { + display: block; + margin-bottom: 16px; + } `, ]; } diff --git a/src/panels/config/blueprint/dialog-import-blueprint.ts b/src/panels/config/blueprint/dialog-import-blueprint.ts index ad2cb1eb6c5c..ef43378c16ec 100644 --- a/src/panels/config/blueprint/dialog-import-blueprint.ts +++ b/src/panels/config/blueprint/dialog-import-blueprint.ts @@ -1,13 +1,13 @@ import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; -import type { PaperInputElement } from "@polymer/paper-input/paper-input"; -import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; -import { customElement, property, state, query } from "lit/decorators"; +import { css, html, LitElement, TemplateResult } from "lit"; +import { customElement, property, query, state } from "lit/decorators"; import { fireEvent } from "../../../common/dom/fire_event"; import "../../../components/ha-circular-progress"; import { createCloseHeading } from "../../../components/ha-dialog"; import "../../../components/ha-expansion-panel"; import "../../../components/ha-markdown"; +import "../../../components/ha-textfield"; +import type { HaTextField } from "../../../components/ha-textfield"; import { BlueprintImportResult, importBlueprint, @@ -32,7 +32,7 @@ class DialogImportBlueprint extends LitElement { @state() private _url?: string; - @query("#input") private _input?: PaperInputElement; + @query("#input") private _input?: HaTextField; public showDialog(params): void { this._params = params; @@ -90,13 +90,13 @@ class DialogImportBlueprint extends LitElement { ` : html` - + > `} ` - )}`} + >`}
${!this._result ? html`
- ${this._error ? html`
${this._error}
` : ""} + ${this._error + ? html`${this._error} ` + : ""}
- + > ): void { + private _nameChanged(ev): void { this._error = undefined; - this._nameByUser = ev.detail.value; + this._nameByUser = ev.target.value; } private _areaPicked(event: CustomEvent): void { @@ -174,8 +175,9 @@ class DialogDeviceRegistryDetail extends LitElement { mwc-button.warning { margin-right: auto; } - .error { - color: var(--error-color); + ha-textfield { + display: block; + margin-bottom: 16px; } ha-switch { margin-right: 16px; diff --git a/src/panels/config/person/dialog-person-detail.ts b/src/panels/config/person/dialog-person-detail.ts index 2724d8ef2ea8..185056404fbb 100644 --- a/src/panels/config/person/dialog-person-detail.ts +++ b/src/panels/config/person/dialog-person-detail.ts @@ -1,5 +1,4 @@ import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { property, state } from "lit/decorators"; import memoizeOne from "memoize-one"; @@ -7,6 +6,7 @@ import { computeRTLDirection } from "../../../common/util/compute_rtl"; import "../../../components/entity/ha-entities-picker"; import { createCloseHeading } from "../../../components/ha-dialog"; import "../../../components/ha-formfield"; +import "../../../components/ha-textfield"; import "../../../components/ha-picture-upload"; import type { HaPictureUpload } from "../../../components/ha-picture-upload"; import { adminChangePassword } from "../../../data/auth"; @@ -120,17 +120,17 @@ class DialogPersonDetail extends LitElement {
${this._error ? html`
${this._error}
` : ""}
- + > ) { + private _nameChanged(ev) { this._error = undefined; - this._name = ev.detail.value; + this._name = ev.target.value; } private _adminChanged(ev): void { @@ -460,7 +460,8 @@ class DialogPersonDetail extends LitElement { .form { padding-bottom: 24px; } - ha-picture-upload { + ha-picture-upload, + ha-textfield { display: block; } ha-formfield { diff --git a/src/panels/config/tags/dialog-tag-detail.ts b/src/panels/config/tags/dialog-tag-detail.ts index 02a6aa03fafc..09ae381780e9 100644 --- a/src/panels/config/tags/dialog-tag-detail.ts +++ b/src/panels/config/tags/dialog-tag-detail.ts @@ -11,6 +11,7 @@ import { HassDialog } from "../../../dialogs/make-dialog-manager"; import { haStyleDialog } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; import { TagDetailDialogParams } from "./show-dialog-tag-detail"; +import "../../../components/ha-alert"; const QR_LOGO_URL = "/static/icons/favicon-192x192.png"; @@ -71,7 +72,9 @@ class DialogTagDetail )} >
- ${this._error ? html`
${this._error}
` : ""} + ${this._error + ? html`${this._error}` + : ""}
${this._params.entry ? html`${this.hass!.localize( @@ -79,30 +82,30 @@ class DialogTagDetail )}: ${this._params.entry.id}` : ""} - + > ${!this._params.entry - ? html` ` + >` : ""}
${this._params.entry @@ -165,11 +168,12 @@ class DialogTagDetail `; } - private _valueChanged(ev: CustomEvent) { - const configValue = (ev.target as any).configValue; + private _valueChanged(ev: Event) { + const target = ev.target as any; + const configValue = target.configValue; this._error = undefined; - this[`_${configValue}`] = ev.detail.value; + this[`_${configValue}`] = target.value; } private async _updateEntry() { diff --git a/src/panels/config/users/dialog-user-detail.ts b/src/panels/config/users/dialog-user-detail.ts index 731de2e0659b..9729262167fb 100644 --- a/src/panels/config/users/dialog-user-detail.ts +++ b/src/panels/config/users/dialog-user-detail.ts @@ -1,5 +1,4 @@ import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; import "@polymer/paper-tooltip/paper-tooltip"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; @@ -11,6 +10,7 @@ import "../../../components/ha-help-tooltip"; import "../../../components/ha-chip-set"; import "../../../components/ha-chip"; import "../../../components/ha-svg-icon"; +import "../../../components/ha-textfield"; import "../../../components/ha-switch"; import { adminChangePassword } from "../../../data/auth"; import { @@ -92,13 +92,13 @@ class DialogUserDetail extends LitElement { `}
- + @input=${this._nameChanged} + .label=${this.hass!.localize("ui.panel.config.users.editor.name")} + >
Date: Wed, 23 Feb 2022 15:22:58 +0100 Subject: [PATCH 2/7] Update ha-config-name-form.ts --- src/panels/config/core/ha-config-name-form.ts | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/panels/config/core/ha-config-name-form.ts b/src/panels/config/core/ha-config-name-form.ts index 7dc7752720f6..63e71d14e63c 100644 --- a/src/panels/config/core/ha-config-name-form.ts +++ b/src/panels/config/core/ha-config-name-form.ts @@ -1,12 +1,11 @@ import "@material/mwc-button/mwc-button"; -import "@polymer/paper-input/paper-input"; -import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import { css, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; import "../../../components/ha-card"; import { ConfigUpdateValues, saveCoreConfig } from "../../../data/core"; -import type { PolymerChangedEvent } from "../../../polymer-types"; import type { HomeAssistant } from "../../../types"; +import "../../../components/ha-textfield"; +import type { HaTextField } from "../../../components/ha-textfield"; @customElement("ha-config-name-form") class ConfigNameForm extends LitElement { @@ -34,16 +33,15 @@ class ConfigNameForm extends LitElement {

` : ""} - + @changed=${this._handleChange} + >
@@ -62,9 +60,9 @@ class ConfigNameForm extends LitElement { : this.hass.config.location_name; } - private _handleChange(ev: PolymerChangedEvent) { - const target = ev.currentTarget as PaperInputElement; - this[`_${target.name}`] = target.value; + private _handleChange(ev) { + const target = ev.currentTarget as HaTextField; + this._name = target.value; } private async _save() { @@ -85,6 +83,9 @@ class ConfigNameForm extends LitElement { .card-actions { text-align: right; } + ha-textfield { + display: block; + } `; } } From e7088d2d5b9f1ecaadab47ef7ef81552fac31251 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 23 Feb 2022 15:26:45 +0100 Subject: [PATCH 3/7] Update dialog-area-registry-detail.ts --- src/panels/config/areas/dialog-area-registry-detail.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/panels/config/areas/dialog-area-registry-detail.ts b/src/panels/config/areas/dialog-area-registry-detail.ts index de517ef4ae77..fcf95fc6c1e3 100644 --- a/src/panels/config/areas/dialog-area-registry-detail.ts +++ b/src/panels/config/areas/dialog-area-registry-detail.ts @@ -86,7 +86,6 @@ class DialogAreaDetail extends LitElement { Date: Wed, 23 Feb 2022 15:48:43 +0100 Subject: [PATCH 4/7] Update manual-automation-editor.ts --- src/panels/config/automation/manual-automation-editor.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/panels/config/automation/manual-automation-editor.ts b/src/panels/config/automation/manual-automation-editor.ts index b0df97fbfc4c..428790f37604 100644 --- a/src/panels/config/automation/manual-automation-editor.ts +++ b/src/panels/config/automation/manual-automation-editor.ts @@ -99,7 +99,7 @@ export class HaManualAutomationEditor extends LitElement { .label=${this.hass.localize( "ui.panel.config.automation.editor.modes.label" )} - .value=${this.config.mode ? MODES.indexOf(this.config.mode) : 0} + .value=${this.config.mode} @selected=${this._modeChanged} fixedMenuPosition > @@ -115,7 +115,7 @@ export class HaManualAutomationEditor extends LitElement { ${this.config.mode && MODES_MAX.includes(this.config.mode) ? html` - ` @@ -357,8 +358,10 @@ export class HaManualAutomationEditor extends LitElement { ha-entity-toggle { margin-right: 8px; } - mwc-select { + mwc-select, + .max { margin-top: 8px; + width: 200px; } `, ]; From 259be54d39eaa1254bdcd9cd85c1fe72bf68f421 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 23 Feb 2022 15:49:41 +0100 Subject: [PATCH 5/7] Update manual-automation-editor.ts --- src/panels/config/automation/manual-automation-editor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/config/automation/manual-automation-editor.ts b/src/panels/config/automation/manual-automation-editor.ts index 428790f37604..19a82decb9ee 100644 --- a/src/panels/config/automation/manual-automation-editor.ts +++ b/src/panels/config/automation/manual-automation-editor.ts @@ -360,7 +360,7 @@ export class HaManualAutomationEditor extends LitElement { } mwc-select, .max { - margin-top: 8px; + margin-top: 16px; width: 200px; } `, From 09c9f6e35b3a5fd9c7b730b9bcb9c9b79c35ae67 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 23 Feb 2022 16:07:51 +0100 Subject: [PATCH 6/7] required to number selector fix script --- src/components/ha-selector/ha-selector-number.ts | 12 +++++++++--- src/panels/config/script/ha-script-editor.ts | 7 +++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/components/ha-selector/ha-selector-number.ts b/src/components/ha-selector/ha-selector-number.ts index 4d15be84d2fb..0094192f1b1d 100644 --- a/src/components/ha-selector/ha-selector-number.ts +++ b/src/components/ha-selector/ha-selector-number.ts @@ -19,6 +19,8 @@ export class HaNumberSelector extends LitElement { @property() public label?: string; + @property({ type: Boolean }) public required = true; + @property({ type: Boolean }) public disabled = false; protected render() { @@ -29,6 +31,7 @@ export class HaNumberSelector extends LitElement { .value=${this._value} .step=${this.selector.number.step ?? 1} .disabled=${this.disabled} + .required=${this.required} pin ignore-bar-touch @change=${this._handleSliderChange} @@ -43,9 +46,10 @@ export class HaNumberSelector extends LitElement { class=${classMap({ single: this.selector.number.mode === "box" })} .min=${this.selector.number.min} .max=${this.selector.number.max} - .value=${this.value} + .value=${this.value || ""} .step=${this.selector.number.step ?? 1} .disabled=${this.disabled} + .required=${this.required} .suffix=${this.selector.number.unit_of_measurement} type="number" autoValidate @@ -56,14 +60,16 @@ export class HaNumberSelector extends LitElement { } private get _value() { - return this.value ?? 0; + return this.value ?? (this.selector.number.min || 0); } private _handleInputChange(ev) { ev.stopPropagation(); const value = ev.target.value === "" || isNaN(ev.target.value) - ? undefined + ? this.required + ? this.selector.number.min || 0 + : undefined : Number(ev.target.value); if (this.value === value) { return; diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts index c4ce09a6b00c..2aeb262d47a4 100644 --- a/src/panels/config/script/ha-script-editor.ts +++ b/src/panels/config/script/ha-script-editor.ts @@ -136,10 +136,9 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) { if (currentMode && MODES_MAX.includes(currentMode)) { schema.push({ name: "max", + required: true, selector: { - text: { - type: "number", - }, + number: { mode: "box", min: 1, max: Infinity }, }, }); } @@ -161,11 +160,11 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) { const data = { mode: MODES[0], + icon: undefined, max: this._config.mode && MODES_MAX.includes(this._config.mode) ? 10 : undefined, - icon: undefined, ...this._config, id: this._entityId, }; From d6d55ca1822671a9fc18211694312d7cf9ddac99 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 23 Feb 2022 16:09:04 +0100 Subject: [PATCH 7/7] review --- .../device-registry-detail/dialog-device-registry-detail.ts | 2 +- src/panels/config/tags/dialog-tag-detail.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/panels/config/devices/device-registry-detail/dialog-device-registry-detail.ts b/src/panels/config/devices/device-registry-detail/dialog-device-registry-detail.ts index 5a4952f75836..cb287db2a135 100644 --- a/src/panels/config/devices/device-registry-detail/dialog-device-registry-detail.ts +++ b/src/panels/config/devices/device-registry-detail/dialog-device-registry-detail.ts @@ -1,11 +1,11 @@ import "@material/mwc-button/mwc-button"; -import "@polymer/paper-input/paper-input"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-area-picker"; import "../../../../components/ha-dialog"; import type { HaSwitch } from "../../../../components/ha-switch"; +import "../../../../components/ha-textfield"; import { computeDeviceName } from "../../../../data/device_registry"; import { haStyle, haStyleDialog } from "../../../../resources/styles"; import { HomeAssistant } from "../../../../types"; diff --git a/src/panels/config/tags/dialog-tag-detail.ts b/src/panels/config/tags/dialog-tag-detail.ts index 09ae381780e9..a084f22e771b 100644 --- a/src/panels/config/tags/dialog-tag-detail.ts +++ b/src/panels/config/tags/dialog-tag-detail.ts @@ -1,17 +1,17 @@ import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; import { fireEvent } from "../../../common/dom/fire_event"; +import "../../../components/ha-alert"; import { createCloseHeading } from "../../../components/ha-dialog"; import "../../../components/ha-formfield"; import "../../../components/ha-switch"; +import "../../../components/ha-textfield"; import { Tag, UpdateTagParams } from "../../../data/tag"; import { HassDialog } from "../../../dialogs/make-dialog-manager"; import { haStyleDialog } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; import { TagDetailDialogParams } from "./show-dialog-tag-detail"; -import "../../../components/ha-alert"; const QR_LOGO_URL = "/static/icons/favicon-192x192.png";