Convert selectors to MWC (#11543)

This commit is contained in:
Bram Kragten 2022-02-06 23:29:28 +01:00 committed by GitHub
parent 04668ad809
commit 4092f7f75d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 77 additions and 61 deletions

View File

@ -48,10 +48,15 @@ const SCHEMAS: {
boolean: { name: "Boolean", selector: { boolean: {} } }, boolean: { name: "Boolean", selector: { boolean: {} } },
time: { name: "Time", selector: { time: {} } }, time: { name: "Time", selector: { time: {} } },
action: { name: "Action", selector: { action: {} } }, action: { name: "Action", selector: { action: {} } },
text: { name: "Text", selector: { text: { multiline: false } } }, text: {
name: "Text",
selector: { text: { multiline: false } },
},
text_multiline: { text_multiline: {
name: "Text multiline", name: "Text multiline",
selector: { text: { multiline: true } }, selector: {
text: { multiline: true },
},
}, },
object: { name: "Object", selector: { object: {} } }, object: { name: "Object", selector: { object: {} } },
select: { select: {

View File

@ -67,6 +67,7 @@
"@material/mwc-switch": "0.25.3", "@material/mwc-switch": "0.25.3",
"@material/mwc-tab": "0.25.3", "@material/mwc-tab": "0.25.3",
"@material/mwc-tab-bar": "0.25.3", "@material/mwc-tab-bar": "0.25.3",
"@material/mwc-textarea": "^0.25.3",
"@material/mwc-textfield": "0.25.3", "@material/mwc-textfield": "0.25.3",
"@material/mwc-top-app-bar-fixed": "^0.25.3", "@material/mwc-top-app-bar-fixed": "^0.25.3",
"@material/top-app-bar": "14.0.0-canary.261f2db59.0", "@material/top-app-bar": "14.0.0-canary.261f2db59.0",

View File

@ -25,7 +25,7 @@ export class HaFormInteger extends LitElement implements HaFormElement {
@property({ type: Boolean }) public disabled = false; @property({ type: Boolean }) public disabled = false;
@query("paper-input ha-slider") private _input?: HTMLElement; @query("mwc-textfield ha-slider") private _input?: HTMLElement;
private _lastValue?: HaFormIntegerData; private _lastValue?: HaFormIntegerData;

View File

@ -1,4 +1,3 @@
import "@polymer/paper-input/paper-input";
import { css, CSSResultGroup, html, LitElement } from "lit"; import { css, CSSResultGroup, html, LitElement } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import { classMap } from "lit/directives/class-map"; import { classMap } from "lit/directives/class-map";
@ -6,6 +5,7 @@ import { fireEvent } from "../../common/dom/fire_event";
import { NumberSelector } from "../../data/selector"; import { NumberSelector } from "../../data/selector";
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
import "../ha-slider"; import "../ha-slider";
import "@material/mwc-textfield/mwc-textfield";
@customElement("ha-selector-number") @customElement("ha-selector-number")
export class HaNumberSelector extends LitElement { export class HaNumberSelector extends LitElement {
@ -36,27 +36,23 @@ export class HaNumberSelector extends LitElement {
> >
</ha-slider>` </ha-slider>`
: ""} : ""}
<paper-input <mwc-textfield
inputMode="numeric"
pattern="[0-9]+([\\.][0-9]+)?" pattern="[0-9]+([\\.][0-9]+)?"
.label=${this.selector.number.mode !== "box" ? undefined : this.label} .label=${this.selector.number.mode !== "box" ? undefined : this.label}
.placeholder=${this.placeholder} .placeholder=${this.placeholder}
.noLabelFloat=${this.selector.number.mode !== "box"}
class=${classMap({ single: this.selector.number.mode === "box" })} class=${classMap({ single: this.selector.number.mode === "box" })}
.min=${this.selector.number.min} .min=${this.selector.number.min}
.max=${this.selector.number.max} .max=${this.selector.number.max}
.value=${this.value} .value=${this.value}
.step=${this.selector.number.step ?? 1} .step=${this.selector.number.step ?? 1}
.disabled=${this.disabled} .disabled=${this.disabled}
.suffix=${this.selector.number.unit_of_measurement}
type="number" type="number"
auto-validate autoValidate
@value-changed=${this._handleInputChange} @input=${this._handleInputChange}
> >
${this.selector.number.unit_of_measurement </mwc-textfield>`;
? html`<div slot="suffix">
${this.selector.number.unit_of_measurement}
</div>`
: ""}
</paper-input>`;
} }
private get _value() { private get _value() {
@ -94,6 +90,9 @@ export class HaNumberSelector extends LitElement {
ha-slider { ha-slider {
flex: 1; flex: 1;
} }
mwc-textfield {
width: 70px;
}
.single { .single {
flex: 1; flex: 1;
} }

View File

@ -1,9 +1,11 @@
import { css, CSSResultGroup, html, LitElement } from "lit"; import { css, CSSResultGroup, html, LitElement } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import { stopPropagation } from "../../common/dom/stop_propagation";
import { SelectSelector } from "../../data/selector"; import { SelectSelector } from "../../data/selector";
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
import "../ha-paper-dropdown-menu"; import "@material/mwc-select/mwc-select";
import "@material/mwc-list/mwc-list-item";
@customElement("ha-selector-select") @customElement("ha-selector-select")
export class HaSelectSelector extends LitElement { export class HaSelectSelector extends LitElement {
@ -18,46 +20,37 @@ export class HaSelectSelector extends LitElement {
@property({ type: Boolean }) public disabled = false; @property({ type: Boolean }) public disabled = false;
protected render() { protected render() {
return html`<ha-paper-dropdown-menu return html`<mwc-select
.disabled=${this.disabled} fixedMenuPosition
naturalMenuWidth
.label=${this.label} .label=${this.label}
.value=${this.value}
.disabled=${this.disabled}
@closed=${stopPropagation}
@selected=${this._valueChanged}
> >
<paper-listbox ${this.selector.select.options.map(
slot="dropdown-content" (item: string) => html`
attr-for-selected="item-value" <mwc-list-item .value=${item}>${item}</mwc-list-item>
.selected=${this.value} `
@selected-item-changed=${this._valueChanged} )}
> </mwc-select>`;
${this.selector.select.options.map(
(item: string) => html`
<paper-item .itemValue=${item}> ${item} </paper-item>
`
)}
</paper-listbox>
</ha-paper-dropdown-menu>`;
} }
private _valueChanged(ev) { private _valueChanged(ev) {
if (this.disabled || !ev.detail.value) { ev.stopPropagation();
if (this.disabled || !ev.target.value) {
return; return;
} }
fireEvent(this, "value-changed", { fireEvent(this, "value-changed", {
value: ev.detail.value.itemValue, value: ev.target.value,
}); });
} }
static get styles(): CSSResultGroup { static get styles(): CSSResultGroup {
return css` return css`
ha-paper-dropdown-menu { mwc-select {
width: 100%; width: 100%;
min-width: 200px;
display: block;
}
paper-listbox {
min-width: 200px;
}
paper-item {
cursor: pointer;
} }
`; `;
} }

View File

@ -1,8 +1,3 @@
import "@material/mwc-list/mwc-list";
import "@material/mwc-list/mwc-list-item";
import "@material/mwc-tab-bar/mwc-tab-bar";
import "@material/mwc-tab/mwc-tab";
import "@polymer/paper-input/paper-input";
import { import {
HassEntity, HassEntity,
HassServiceTarget, HassServiceTarget,

View File

@ -1,10 +1,10 @@
import "@polymer/paper-input/paper-input"; import { css, CSSResultGroup, html, LitElement } from "lit";
import "@polymer/paper-input/paper-textarea";
import { html, LitElement } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import { StringSelector } from "../../data/selector"; import { StringSelector } from "../../data/selector";
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
import "@material/mwc-textfield/mwc-textfield";
import "@material/mwc-textarea/mwc-textarea";
@customElement("ha-selector-text") @customElement("ha-selector-text")
export class HaTextSelector extends LitElement { export class HaTextSelector extends LitElement {
@ -22,25 +22,26 @@ export class HaTextSelector extends LitElement {
protected render() { protected render() {
if (this.selector.text?.multiline) { if (this.selector.text?.multiline) {
return html`<paper-textarea return html`<mwc-textarea
.label=${this.label} .label=${this.label}
.placeholder=${this.placeholder} .placeholder=${this.placeholder}
.value=${this.value} .value=${this.value || ""}
.disabled=${this.disabled} .disabled=${this.disabled}
@value-changed=${this._handleChange} @input=${this._handleChange}
autocapitalize="none" autocapitalize="none"
autocomplete="off" autocomplete="off"
spellcheck="false" spellcheck="false"
></paper-textarea>`; required
></mwc-textarea>`;
} }
return html`<paper-input return html`<mwc-textfield
required .value=${this.value || ""}
.value=${this.value} .placeholder=${this.placeholder || ""}
.placeholder=${this.placeholder}
.disabled=${this.disabled} .disabled=${this.disabled}
@value-changed=${this._handleChange} @input=${this._handleChange}
.label=${this.label} .label=${this.label || ""}
></paper-input>`; required
></mwc-textfield>`;
} }
private _handleChange(ev) { private _handleChange(ev) {
@ -50,6 +51,15 @@ export class HaTextSelector extends LitElement {
} }
fireEvent(this, "value-changed", { value }); fireEvent(this, "value-changed", { value });
} }
static get styles(): CSSResultGroup {
return css`
mwc-textfield,
mwc-textarea {
width: 100%;
}
`;
}
} }
declare global { declare global {

View File

@ -2665,7 +2665,19 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@material/mwc-textfield@npm:0.25.3": "@material/mwc-textarea@npm:^0.25.3":
version: 0.25.3
resolution: "@material/mwc-textarea@npm:0.25.3"
dependencies:
"@material/mwc-base": ^0.25.3
"@material/mwc-textfield": ^0.25.3
lit: ^2.0.0
tslib: ^2.0.1
checksum: 918e28b72f7c687c481cd9ee00f652cd6c212d37cd281197cb02c87f04153792c5a60a86276e82f44684e7c7b4947e0e2e5fceaa08fc075a030ea769c1501d8e
languageName: node
linkType: hard
"@material/mwc-textfield@npm:0.25.3, @material/mwc-textfield@npm:^0.25.3":
version: 0.25.3 version: 0.25.3
resolution: "@material/mwc-textfield@npm:0.25.3" resolution: "@material/mwc-textfield@npm:0.25.3"
dependencies: dependencies:
@ -9133,6 +9145,7 @@ fsevents@^1.2.7:
"@material/mwc-switch": 0.25.3 "@material/mwc-switch": 0.25.3
"@material/mwc-tab": 0.25.3 "@material/mwc-tab": 0.25.3
"@material/mwc-tab-bar": 0.25.3 "@material/mwc-tab-bar": 0.25.3
"@material/mwc-textarea": ^0.25.3
"@material/mwc-textfield": 0.25.3 "@material/mwc-textfield": 0.25.3
"@material/mwc-top-app-bar-fixed": ^0.25.3 "@material/mwc-top-app-bar-fixed": ^0.25.3
"@material/top-app-bar": 14.0.0-canary.261f2db59.0 "@material/top-app-bar": 14.0.0-canary.261f2db59.0