mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
Convert selectors to MWC (#11543)
This commit is contained in:
parent
04668ad809
commit
4092f7f75d
@ -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: {
|
||||||
|
@ -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",
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
@ -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 {
|
||||||
|
15
yarn.lock
15
yarn.lock
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user