Switch paper-toggle-button to mwc-switch (#3683)

* Switch paper-toggle-button to mwc-switch

Closes https://github.com/home-assistant/home-assistant-polymer/issues/3352

* ha-switch

* apply not-checked theming

Thanks @bramkragten!

* address review comments
This commit is contained in:
Ian Richardson 2019-09-21 04:59:27 -05:00 committed by Bram Kragten
parent 9a7eb3d406
commit 5e28e1b320
32 changed files with 240 additions and 178 deletions

View File

@ -1,9 +1,9 @@
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/app-layout/app-toolbar/app-toolbar";
import "@polymer/paper-toggle-button/paper-toggle-button";
import "./demo-card"; import "./demo-card";
import "../../../src/components/ha-switch";
class DemoCards extends PolymerElement { class DemoCards extends PolymerElement {
static get template() { static get template() {
@ -26,9 +26,7 @@ class DemoCards extends PolymerElement {
</style> </style>
<app-toolbar> <app-toolbar>
<div class="filters"> <div class="filters">
<paper-toggle-button checked="{{_showConfig}}" <ha-switch checked="{{_showConfig}}">Show config</ha-switch>
>Show config</paper-toggle-button
>
</div> </div>
</app-toolbar> </app-toolbar>
<div class="cards"> <div class="cards">

View File

@ -1,9 +1,9 @@
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/app-layout/app-toolbar/app-toolbar";
import "@polymer/paper-toggle-button/paper-toggle-button";
import "./demo-more-info"; import "./demo-more-info";
import "../../../src/components/ha-switch";
class DemoMoreInfos extends PolymerElement { class DemoMoreInfos extends PolymerElement {
static get template() { static get template() {
@ -26,9 +26,7 @@ class DemoMoreInfos extends PolymerElement {
</style> </style>
<app-toolbar> <app-toolbar>
<div class="filters"> <div class="filters">
<paper-toggle-button checked="{{_showConfig}}" <ha-switch checked="{{_showConfig}}">Show entity</ha-switch>
>Show entity</paper-toggle-button
>
</div> </div>
</app-toolbar> </app-toolbar>
<div class="cards"> <div class="cards">

View File

@ -2,19 +2,19 @@ import "@polymer/iron-icon/iron-icon";
import "@material/mwc-button"; import "@material/mwc-button";
import "@polymer/paper-card/paper-card"; import "@polymer/paper-card/paper-card";
import "@polymer/paper-tooltip/paper-tooltip"; import "@polymer/paper-tooltip/paper-tooltip";
import "@polymer/paper-toggle-button/paper-toggle-button";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import "../../../src/components/ha-label-badge"; import "../../../src/components/ha-label-badge";
import "../../../src/components/ha-markdown"; import "../../../src/components/ha-markdown";
import "../../../src/components/buttons/ha-call-api-button"; import "../../../src/components/buttons/ha-call-api-button";
import "../../../src/components/ha-switch";
import "../../../src/resources/ha-style"; import "../../../src/resources/ha-style";
import "../components/hassio-card-content";
import { EventsMixin } from "../../../src/mixins/events-mixin"; import { EventsMixin } from "../../../src/mixins/events-mixin";
import { navigate } from "../../../src/common/navigate"; import { navigate } from "../../../src/common/navigate";
import { showHassioMarkdownDialog } from "../dialogs/markdown/show-dialog-hassio-markdown"; import { showHassioMarkdownDialog } from "../dialogs/markdown/show-dialog-hassio-markdown";
import "../components/hassio-card-content";
const PERMIS_DESC = { const PERMIS_DESC = {
rating: { rating: {
@ -122,7 +122,7 @@ class HassioAddonInfo extends EventsMixin(PolymerElement) {
width: 16px; width: 16px;
color: var(--secondary-text-color); color: var(--secondary-text-color);
} }
paper-toggle-button { ha-switch {
display: inline; display: inline;
} }
iron-icon.running { iron-icon.running {
@ -348,26 +348,26 @@ class HassioAddonInfo extends EventsMixin(PolymerElement) {
<template is="dom-if" if="[[addon.version]]"> <template is="dom-if" if="[[addon.version]]">
<div class="state"> <div class="state">
<div>Start on boot</div> <div>Start on boot</div>
<paper-toggle-button <ha-switch
on-change="startOnBootToggled" on-change="startOnBootToggled"
checked="[[computeStartOnBoot(addon.boot)]]" checked="[[computeStartOnBoot(addon.boot)]]"
></paper-toggle-button> ></ha-switch>
</div> </div>
<div class="state"> <div class="state">
<div>Auto update</div> <div>Auto update</div>
<paper-toggle-button <ha-switch
on-change="autoUpdateToggled" on-change="autoUpdateToggled"
checked="[[addon.auto_update]]" checked="[[addon.auto_update]]"
></paper-toggle-button> ></ha-switch>
</div> </div>
<template is="dom-if" if="[[addon.ingress]]"> <template is="dom-if" if="[[addon.ingress]]">
<div class="state"> <div class="state">
<div>Show in sidebar</div> <div>Show in sidebar</div>
<paper-toggle-button <ha-switch
on-change="panelToggled" on-change="panelToggled"
checked="[[addon.ingress_panel]]" checked="[[addon.ingress_panel]]"
disabled="[[_computeCannotIngressSidebar(hass, addon)]]" disabled="[[_computeCannotIngressSidebar(hass, addon)]]"
></paper-toggle-button> ></ha-switch>
<template is="dom-if" if="[[_computeCannotIngressSidebar(hass, addon)]]"> <template is="dom-if" if="[[_computeCannotIngressSidebar(hass, addon)]]">
<span>This option requires Home Assistant 0.92 or later.</span> <span>This option requires Home Assistant 0.92 or later.</span>
</template> </template>
@ -381,10 +381,10 @@ class HassioAddonInfo extends EventsMixin(PolymerElement) {
<paper-tooltip>Grant the add-on elevated system access.</paper-tooltip> <paper-tooltip>Grant the add-on elevated system access.</paper-tooltip>
</span> </span>
</div> </div>
<paper-toggle-button <ha-switch
on-change="protectionToggled" on-change="protectionToggled"
checked="[[addon.protected]]" checked="[[addon.protected]]"
></paper-toggle-button> ></ha-switch>
</div> </div>
</template> </template>
</div> </div>

View File

@ -23,6 +23,7 @@
"@material/mwc-checkbox": "^0.8.0", "@material/mwc-checkbox": "^0.8.0",
"@material/mwc-fab": "^0.8.0", "@material/mwc-fab": "^0.8.0",
"@material/mwc-ripple": "0.8.0", "@material/mwc-ripple": "0.8.0",
"@material/mwc-switch": "^0.8.0",
"@mdi/svg": "4.4.95", "@mdi/svg": "4.4.95",
"@polymer/app-layout": "^3.0.2", "@polymer/app-layout": "^3.0.2",
"@polymer/app-localize-behavior": "^3.0.1", "@polymer/app-localize-behavior": "^3.0.1",
@ -63,7 +64,6 @@
"@polymer/paper-styles": "^3.0.1", "@polymer/paper-styles": "^3.0.1",
"@polymer/paper-tabs": "^3.0.1", "@polymer/paper-tabs": "^3.0.1",
"@polymer/paper-toast": "^3.0.1", "@polymer/paper-toast": "^3.0.1",
"@polymer/paper-toggle-button": "^3.0.1",
"@polymer/paper-tooltip": "^3.0.1", "@polymer/paper-tooltip": "^3.0.1",
"@polymer/polymer": "3.1.0", "@polymer/polymer": "3.1.0",
"@thomasloven/round-slider": "^0.2.2", "@thomasloven/round-slider": "^0.2.2",

View File

@ -1,8 +1,6 @@
import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-icon-button/paper-icon-button";
import "@polymer/paper-toggle-button/paper-toggle-button";
import { STATES_OFF } from "../../common/const"; import { STATES_OFF } from "../../common/const";
import computeStateDomain from "../../common/entity/compute_state_domain";
import { import {
LitElement, LitElement,
TemplateResult, TemplateResult,
@ -15,8 +13,12 @@ import {
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
import { HassEntity } from "home-assistant-js-websocket"; import { HassEntity } from "home-assistant-js-websocket";
import { forwardHaptic } from "../../data/haptics"; import { forwardHaptic } from "../../data/haptics";
import computeStateDomain from "../../common/entity/compute_state_domain";
import computeStateName from "../../common/entity/compute_state_name"; import computeStateName from "../../common/entity/compute_state_name";
import "../ha-switch";
const isOn = (stateObj?: HassEntity) => const isOn = (stateObj?: HassEntity) =>
stateObj !== undefined && !STATES_OFF.includes(stateObj.state); stateObj !== undefined && !STATES_OFF.includes(stateObj.state);
@ -29,7 +31,7 @@ class HaEntityToggle extends LitElement {
protected render(): TemplateResult | void { protected render(): TemplateResult | void {
if (!this.stateObj) { if (!this.stateObj) {
return html` return html`
<paper-toggle-button disabled></paper-toggle-button> <ha-switch disabled></ha-switch>
`; `;
} }
@ -51,13 +53,13 @@ class HaEntityToggle extends LitElement {
} }
return html` return html`
<paper-toggle-button <ha-switch
aria-label=${`Toggle ${computeStateName(this.stateObj)} ${ aria-label=${`Toggle ${computeStateName(this.stateObj)} ${
this._isOn ? "off" : "on" this._isOn ? "off" : "on"
}`} }`}
.checked=${this._isOn} .checked=${this._isOn}
@change=${this._toggleChanged} @change=${this._toggleChanged}
></paper-toggle-button> ></ha-switch>
`; `;
} }
@ -149,9 +151,7 @@ class HaEntityToggle extends LitElement {
paper-icon-button[state-active] { paper-icon-button[state-active] {
color: var(--paper-icon-button-active-color, var(--primary-color)); color: var(--paper-icon-button-active-color, var(--primary-color));
} }
paper-toggle-button { ha-switch {
cursor: pointer;
--paper-toggle-button-label-spacing: 0;
padding: 13px 5px; padding: 13px 5px;
margin: -4px -5px; margin: -4px -5px;
} }

View File

@ -1,11 +1,11 @@
import "@polymer/paper-toggle-button/paper-toggle-button";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import { getAppKey } from "../data/notify_html5"; import { getAppKey } from "../data/notify_html5";
import { EventsMixin } from "../mixins/events-mixin"; import { EventsMixin } from "../mixins/events-mixin";
import "./ha-switch";
export const pushSupported = export const pushSupported =
"serviceWorker" in navigator && "serviceWorker" in navigator &&
"PushManager" in window && "PushManager" in window &&
@ -19,11 +19,11 @@ export const pushSupported =
class HaPushNotificationsToggle extends EventsMixin(PolymerElement) { class HaPushNotificationsToggle extends EventsMixin(PolymerElement) {
static get template() { static get template() {
return html` return html`
<paper-toggle-button <ha-switch
disabled="[[_compDisabled(disabled, loading)]]" disabled="[[_compDisabled(disabled, loading)]]"
checked="{{pushChecked}}" checked="{{pushChecked}}"
on-change="handlePushChange" on-change="handlePushChange"
></paper-toggle-button> ></ha-switch>
`; `;
} }

View File

@ -0,0 +1,37 @@
import { Constructor, customElement, CSSResult, css } from "lit-element";
import "@material/mwc-switch";
import { style } from "@material/mwc-switch/mwc-switch-css";
// tslint:disable-next-line
import { Switch } from "@material/mwc-switch";
// tslint:disable-next-line
const MwcSwitch = customElements.get("mwc-switch") as Constructor<Switch>;
@customElement("ha-switch")
export class HaSwitch extends MwcSwitch {
protected firstUpdated() {
super.firstUpdated();
this.style.setProperty("--mdc-theme-secondary", "var(--primary-color)");
}
protected static get styles(): CSSResult[] {
return [
style,
css`
.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb {
background-color: var(--paper-toggle-button-unchecked-button-color);
border-color: var(--paper-toggle-button-unchecked-button-color);
}
.mdc-switch:not(.mdc-switch--checked) .mdc-switch__track {
background-color: var(--paper-toggle-button-unchecked-bar-color;
border-color: var(--paper-toggle-button-unchecked-bar-color);
}
`,
];
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-switch": HaSwitch;
}
}

View File

@ -11,6 +11,8 @@ import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable";
import "@polymer/paper-input/paper-input"; import "@polymer/paper-input/paper-input";
import "../../components/dialog/ha-paper-dialog"; import "../../components/dialog/ha-paper-dialog";
import "../../components/ha-switch";
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
import { ConfigEntrySystemOptionsDialogParams } from "./show-dialog-config-entry-system-options"; import { ConfigEntrySystemOptionsDialogParams } from "./show-dialog-config-entry-system-options";
import { import {
@ -19,6 +21,8 @@ import {
} from "../../data/config_entries"; } from "../../data/config_entries";
import { PolymerChangedEvent } from "../../polymer-types"; import { PolymerChangedEvent } from "../../polymer-types";
import { haStyleDialog } from "../../resources/styles"; import { haStyleDialog } from "../../resources/styles";
// tslint:disable-next-line: no-duplicate-imports
import { HaSwitch } from "../../components/ha-switch";
@customElement("dialog-config-entry-system-options") @customElement("dialog-config-entry-system-options")
class DialogConfigEntrySystemOptions extends LitElement { class DialogConfigEntrySystemOptions extends LitElement {
@ -72,9 +76,9 @@ class DialogConfigEntrySystemOptions extends LitElement {
` `
: ""} : ""}
<div class="form"> <div class="form">
<paper-toggle-button <ha-switch
.checked=${!this._disableNewEntities} .checked=${!this._disableNewEntities}
@checked-changed=${this._disableNewEntitiesChanged} @change=${this._disableNewEntitiesChanged}
.disabled=${this._submitting} .disabled=${this._submitting}
> >
<div> <div>
@ -87,7 +91,7 @@ class DialogConfigEntrySystemOptions extends LitElement {
"ui.dialogs.config_entry_system_options.enable_new_entities_description" "ui.dialogs.config_entry_system_options.enable_new_entities_description"
)} )}
</div> </div>
</paper-toggle-button> </ha-switch>
</div> </div>
`} `}
</paper-dialog-scrollable> </paper-dialog-scrollable>
@ -109,9 +113,9 @@ class DialogConfigEntrySystemOptions extends LitElement {
`; `;
} }
private _disableNewEntitiesChanged(ev: PolymerChangedEvent<boolean>): void { private _disableNewEntitiesChanged(ev: Event): void {
this._error = undefined; this._error = undefined;
this._disableNewEntities = !ev.detail.value; this._disableNewEntities = !(ev.target as HaSwitch).checked;
} }
private async _updateEntry(): Promise<void> { private async _updateEntry(): Promise<void> {
@ -152,6 +156,7 @@ class DialogConfigEntrySystemOptions extends LitElement {
} }
.form { .form {
padding-top: 6px;
padding-bottom: 24px; padding-bottom: 24px;
color: var(--primary-text-color); color: var(--primary-text-color);
} }

View File

@ -1,7 +1,6 @@
import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/iron-flex-layout/iron-flex-layout-classes";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-listbox/paper-listbox";
import "@polymer/paper-toggle-button/paper-toggle-button";
import { import {
LitElement, LitElement,
html, html,
@ -15,6 +14,7 @@ import {
import "../../../components/ha-climate-control"; import "../../../components/ha-climate-control";
import "../../../components/ha-paper-slider"; import "../../../components/ha-paper-slider";
import "../../../components/ha-paper-dropdown-menu"; import "../../../components/ha-paper-dropdown-menu";
import "../../../components/ha-switch";
import { supportsFeature } from "../../../common/entity/supports-feature"; import { supportsFeature } from "../../../common/entity/supports-feature";
@ -279,10 +279,10 @@ class MoreInfoClimate extends LitElement {
<div class="flex"> <div class="flex">
${hass.localize("ui.card.climate.aux_heat")} ${hass.localize("ui.card.climate.aux_heat")}
</div> </div>
<paper-toggle-button <ha-switch
.checked=${stateObj.attributes.aux_heat === "on"} .checked=${stateObj.attributes.aux_heat === "on"}
@change=${this._auxToggleChanged} @change=${this._auxToggleChanged}
></paper-toggle-button> ></ha-switch>
</div> </div>
</div> </div>
` `

View File

@ -2,15 +2,16 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes";
import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-icon-button/paper-icon-button";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-listbox/paper-listbox";
import "@polymer/paper-toggle-button/paper-toggle-button";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import "../../../components/ha-attributes"; import "../../../components/ha-attributes";
import "../../../components/ha-paper-dropdown-menu"; import "../../../components/ha-paper-dropdown-menu";
import "../../../components/ha-switch";
import { EventsMixin } from "../../../mixins/events-mixin";
import attributeClassNames from "../../../common/entity/attribute_class_names"; import attributeClassNames from "../../../common/entity/attribute_class_names";
import { EventsMixin } from "../../../mixins/events-mixin";
import LocalizeMixin from "../../../mixins/localize-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin";
/* /*
@ -68,11 +69,11 @@ class MoreInfoFan extends LocalizeMixin(EventsMixin(PolymerElement)) {
<div class="container-oscillating"> <div class="container-oscillating">
<div class="center horizontal layout single-row"> <div class="center horizontal layout single-row">
<div class="flex">[[localize('ui.card.fan.oscillate')]]</div> <div class="flex">[[localize('ui.card.fan.oscillate')]]</div>
<paper-toggle-button <ha-switch
checked="[[oscillationToggleChecked]]" checked="[[oscillationToggleChecked]]"
on-change="oscillationToggleChanged" on-change="oscillationToggleChanged"
> >
</paper-toggle-button> </ha-switch>
</div> </div>
</div> </div>

View File

@ -1,7 +1,6 @@
import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/iron-flex-layout/iron-flex-layout-classes";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-listbox/paper-listbox";
import "@polymer/paper-toggle-button/paper-toggle-button";
import { timeOut } from "@polymer/polymer/lib/utils/async"; import { timeOut } from "@polymer/polymer/lib/utils/async";
import { Debouncer } from "@polymer/polymer/lib/utils/debounce"; import { Debouncer } from "@polymer/polymer/lib/utils/debounce";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
@ -10,11 +9,12 @@ import { PolymerElement } from "@polymer/polymer/polymer-element";
import "../../../components/ha-water_heater-control"; import "../../../components/ha-water_heater-control";
import "../../../components/ha-paper-slider"; import "../../../components/ha-paper-slider";
import "../../../components/ha-paper-dropdown-menu"; import "../../../components/ha-paper-dropdown-menu";
import "../../../components/ha-switch";
import { supportsFeature } from "../../../common/entity/supports-feature";
import { EventsMixin } from "../../../mixins/events-mixin";
import featureClassNames from "../../../common/entity/feature_class_names"; import featureClassNames from "../../../common/entity/feature_class_names";
import { supportsFeature } from "../../../common/entity/supports-feature";
import { EventsMixin } from "../../../mixins/events-mixin";
import LocalizeMixin from "../../../mixins/localize-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin";
/* /*
@ -124,11 +124,11 @@ class MoreInfoWaterHeater extends LocalizeMixin(EventsMixin(PolymerElement)) {
<div class="flex"> <div class="flex">
[[localize('ui.card.water_heater.away_mode')]] [[localize('ui.card.water_heater.away_mode')]]
</div> </div>
<paper-toggle-button <ha-switch
checked="[[awayToggleChecked]]" checked="[[awayToggleChecked]]"
on-change="awayToggleChanged" on-change="awayToggleChanged"
> >
</paper-toggle-button> </ha-switch>
</div> </div>
</div> </div>
</template> </template>

View File

@ -1,6 +1,5 @@
import "@material/mwc-button"; import "@material/mwc-button";
import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item-body";
import "@polymer/paper-toggle-button/paper-toggle-button";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
@ -8,18 +7,18 @@ import "../../../../components/ha-card";
import "../../../../components/buttons/ha-call-api-button"; import "../../../../components/buttons/ha-call-api-button";
import "../../../../layouts/hass-subpage"; import "../../../../layouts/hass-subpage";
import "../../../../resources/ha-style"; import "../../../../resources/ha-style";
import "../../ha-config-section"; import "../../ha-config-section";
import "./cloud-webhooks"; import "./cloud-webhooks";
import formatDateTime from "../../../../common/datetime/format_date_time";
import { EventsMixin } from "../../../../mixins/events-mixin";
import LocalizeMixin from "../../../../mixins/localize-mixin";
import { fetchCloudSubscriptionInfo } from "../../../../data/cloud";
import "./cloud-alexa-pref"; import "./cloud-alexa-pref";
import "./cloud-google-pref"; import "./cloud-google-pref";
import "./cloud-remote-pref"; import "./cloud-remote-pref";
import { EventsMixin } from "../../../../mixins/events-mixin";
import { fetchCloudSubscriptionInfo } from "../../../../data/cloud";
import formatDateTime from "../../../../common/datetime/format_date_time";
import LocalizeMixin from "../../../../mixins/localize-mixin";
/* /*
* @appliesMixin EventsMixin * @appliesMixin EventsMixin
* @appliesMixin LocalizeMixin * @appliesMixin LocalizeMixin

View File

@ -7,12 +7,12 @@ import {
property, property,
} from "lit-element"; } from "lit-element";
import "@material/mwc-button"; import "@material/mwc-button";
import "@polymer/paper-toggle-button/paper-toggle-button";
// tslint:disable-next-line
import { PaperToggleButtonElement } from "@polymer/paper-toggle-button/paper-toggle-button";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-switch";
// tslint:disable-next-line: no-duplicate-imports
import { HaSwitch } from "../../../../components/ha-switch";
import { fireEvent } from "../../../../common/dom/fire_event"; import { fireEvent } from "../../../../common/dom/fire_event";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud"; import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud";
@ -32,10 +32,10 @@ export class CloudAlexaPref extends LitElement {
return html` return html`
<ha-card header="Alexa"> <ha-card header="Alexa">
<paper-toggle-button <ha-switch
.checked=${alexa_enabled} .checked=${alexa_enabled}
@change=${this._enabledToggleChanged} @change=${this._enabledToggleChanged}
></paper-toggle-button> ></ha-switch>
<div class="card-content"> <div class="card-content">
With the Alexa integration for Home Assistant Cloud you'll be able to With the Alexa integration for Home Assistant Cloud you'll be able to
control all your Home Assistant devices via any Alexa-enabled device. control all your Home Assistant devices via any Alexa-enabled device.
@ -70,10 +70,10 @@ export class CloudAlexaPref extends LitElement {
allows you to always see the latest states in the Alexa app allows you to always see the latest states in the Alexa app
and use the state changes to create routines. and use the state changes to create routines.
</p> </p>
<paper-toggle-button <ha-switch
.checked=${alexa_report_state} .checked=${alexa_report_state}
@change=${this._reportToggleChanged} @change=${this._reportToggleChanged}
></paper-toggle-button> ></ha-switch>
` `
: ""} : ""}
</div> </div>
@ -102,7 +102,7 @@ export class CloudAlexaPref extends LitElement {
} }
private async _enabledToggleChanged(ev) { private async _enabledToggleChanged(ev) {
const toggle = ev.target as PaperToggleButtonElement; const toggle = ev.target as HaSwitch;
try { try {
await updateCloudPref(this.hass!, { alexa_enabled: toggle.checked! }); await updateCloudPref(this.hass!, { alexa_enabled: toggle.checked! });
fireEvent(this, "ha-refresh-cloud-status"); fireEvent(this, "ha-refresh-cloud-status");
@ -112,7 +112,7 @@ export class CloudAlexaPref extends LitElement {
} }
private async _reportToggleChanged(ev) { private async _reportToggleChanged(ev) {
const toggle = ev.target as PaperToggleButtonElement; const toggle = ev.target as HaSwitch;
try { try {
await updateCloudPref(this.hass!, { await updateCloudPref(this.hass!, {
alexa_report_state: toggle.checked!, alexa_report_state: toggle.checked!,
@ -133,7 +133,7 @@ export class CloudAlexaPref extends LitElement {
a { a {
color: var(--primary-color); color: var(--primary-color);
} }
ha-card > paper-toggle-button { ha-card > ha-switch {
margin: -4px 0; margin: -4px 0;
position: absolute; position: absolute;
right: 8px; right: 8px;

View File

@ -7,13 +7,13 @@ import {
css, css,
} from "lit-element"; } from "lit-element";
import "@material/mwc-button"; import "@material/mwc-button";
import "@polymer/paper-toggle-button/paper-toggle-button";
// tslint:disable-next-line
import { PaperToggleButtonElement } from "@polymer/paper-toggle-button/paper-toggle-button";
import "../../../../components/buttons/ha-call-api-button"; import "../../../../components/buttons/ha-call-api-button";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-switch";
// tslint:disable-next-line
import { HaSwitch } from "../../../../components/ha-switch";
import { fireEvent } from "../../../../common/dom/fire_event"; import { fireEvent } from "../../../../common/dom/fire_event";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud"; import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud";
@ -43,11 +43,11 @@ export class CloudGooglePref extends LitElement {
return html` return html`
<ha-card header="Google Assistant"> <ha-card header="Google Assistant">
<paper-toggle-button <ha-switch
id="google_enabled" id="google_enabled"
.checked="${google_enabled}" .checked="${google_enabled}"
@change="${this._toggleChanged}" @change="${this._toggleChanged}"
></paper-toggle-button> ></ha-switch>
<div class="card-content"> <div class="card-content">
With the Google Assistant integration for Home Assistant Cloud you'll With the Google Assistant integration for Home Assistant Cloud you'll
be able to control all your Home Assistant devices via any Google be able to control all your Home Assistant devices via any Google
@ -110,7 +110,7 @@ export class CloudGooglePref extends LitElement {
} }
private async _toggleChanged(ev) { private async _toggleChanged(ev) {
const toggle = ev.target as PaperToggleButtonElement; const toggle = ev.target as HaSwitch;
try { try {
await updateCloudPref(this.hass!, { [toggle.id]: toggle.checked! }); await updateCloudPref(this.hass!, { [toggle.id]: toggle.checked! });
fireEvent(this, "ha-refresh-cloud-status"); fireEvent(this, "ha-refresh-cloud-status");
@ -138,7 +138,7 @@ export class CloudGooglePref extends LitElement {
a { a {
color: var(--primary-color); color: var(--primary-color);
} }
ha-card > paper-toggle-button { ha-card > ha-switch {
margin: -4px 0; margin: -4px 0;
position: absolute; position: absolute;
right: 8px; right: 8px;

View File

@ -8,13 +8,13 @@ import {
css, css,
} from "lit-element"; } from "lit-element";
import "@material/mwc-button"; import "@material/mwc-button";
import "@polymer/paper-toggle-button/paper-toggle-button";
import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item-body";
// tslint:disable-next-line
import { PaperToggleButtonElement } from "@polymer/paper-toggle-button/paper-toggle-button";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-switch";
// tslint:disable-next-line
import { HaSwitch } from "../../../../components/ha-switch";
import { fireEvent } from "../../../../common/dom/fire_event"; import { fireEvent } from "../../../../common/dom/fire_event";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
import { import {
@ -59,10 +59,10 @@ export class CloudRemotePref extends LitElement {
return html` return html`
<ha-card header="Remote Control"> <ha-card header="Remote Control">
<paper-toggle-button <ha-switch
.checked="${remote_connected}" .checked="${remote_connected}"
@change="${this._toggleChanged}" @change="${this._toggleChanged}"
></paper-toggle-button> ></ha-switch>
<div class="card-content"> <div class="card-content">
Home Assistant Cloud provides a secure remote connection to your Home Assistant Cloud provides a secure remote connection to your
instance while away from home. Your instance instance while away from home. Your instance
@ -95,7 +95,7 @@ export class CloudRemotePref extends LitElement {
} }
private async _toggleChanged(ev) { private async _toggleChanged(ev) {
const toggle = ev.target as PaperToggleButtonElement; const toggle = ev.target as HaSwitch;
try { try {
if (toggle.checked) { if (toggle.checked) {
@ -118,7 +118,7 @@ export class CloudRemotePref extends LitElement {
a { a {
color: var(--primary-color); color: var(--primary-color);
} }
ha-card > paper-toggle-button { ha-card > ha-switch {
margin: -4px 0; margin: -4px 0;
position: absolute; position: absolute;
right: 8px; right: 8px;

View File

@ -4,11 +4,12 @@ import {
PropertyDeclarations, PropertyDeclarations,
PropertyValues, PropertyValues,
} from "lit-element"; } from "lit-element";
import "@polymer/paper-toggle-button/paper-toggle-button";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item-body";
import "@polymer/paper-spinner/paper-spinner"; import "@polymer/paper-spinner/paper-spinner";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-switch";
import { HomeAssistant, WebhookError } from "../../../../types"; import { HomeAssistant, WebhookError } from "../../../../types";
import { Webhook, fetchWebhooks } from "../../../../data/webhook"; import { Webhook, fetchWebhooks } from "../../../../data/webhook";
@ -116,9 +117,7 @@ export class CloudWebhooks extends LitElement {
</mwc-button> </mwc-button>
` `
: html` : html`
<paper-toggle-button <ha-switch @click="${this._enableWebhook}"></ha-switch>
@click="${this._enableWebhook}"
></paper-toggle-button>
`} `}
</div> </div>
` `

View File

@ -7,12 +7,15 @@ import {
customElement, customElement,
property, property,
} from "lit-element"; } from "lit-element";
import "@polymer/paper-toggle-button";
import "@polymer/paper-icon-button"; import "@polymer/paper-icon-button";
import memoizeOne from "memoize-one";
import "../../../../layouts/hass-subpage"; import "../../../../layouts/hass-subpage";
import "../../../../layouts/hass-loading-screen"; import "../../../../layouts/hass-loading-screen";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-switch";
import "../../../../components/entity/state-info"; import "../../../../components/entity/state-info";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
import { import {
CloudStatusLoggedIn, CloudStatusLoggedIn,
@ -20,19 +23,20 @@ import {
updateCloudAlexaEntityConfig, updateCloudAlexaEntityConfig,
AlexaEntityConfig, AlexaEntityConfig,
} from "../../../../data/cloud"; } from "../../../../data/cloud";
import memoizeOne from "memoize-one";
import { import {
generateFilter, generateFilter,
isEmptyFilter, isEmptyFilter,
EntityFilter, EntityFilter,
} from "../../../../common/entity/entity_filter"; } from "../../../../common/entity/entity_filter";
import { compare } from "../../../../common/string/compare"; import { compare } from "../../../../common/string/compare";
import computeStateName from "../../../../common/entity/compute_state_name";
import { fireEvent } from "../../../../common/dom/fire_event"; import { fireEvent } from "../../../../common/dom/fire_event";
import { PolymerChangedEvent } from "../../../../polymer-types";
import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler"; import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler";
import computeDomain from "../../../../common/entity/compute_domain";
import { AlexaEntity, fetchCloudAlexaEntities } from "../../../../data/alexa"; import { AlexaEntity, fetchCloudAlexaEntities } from "../../../../data/alexa";
// tslint:disable-next-line: no-duplicate-imports
import { HaSwitch } from "../../../../components/ha-switch";
import computeStateName from "../../../../common/entity/compute_state_name";
import computeDomain from "../../../../common/entity/compute_domain";
const DEFAULT_CONFIG_EXPOSE = true; const DEFAULT_CONFIG_EXPOSE = true;
const IGNORE_INTERFACES = ["Alexa.EndpointHealth"]; const IGNORE_INTERFACES = ["Alexa.EndpointHealth"];
@ -126,14 +130,14 @@ class CloudAlexa extends LitElement {
) )
.join(", ")} .join(", ")}
</state-info> </state-info>
<paper-toggle-button <ha-switch
.entityId=${entity.entity_id} .entityId=${entity.entity_id}
.disabled=${!emptyFilter} .disabled=${!emptyFilter}
.checked=${isExposed} .checked=${isExposed}
@checked-changed=${this._exposeChanged} @change=${this._exposeChanged}
> >
Expose to Alexa Expose to Alexa
</paper-toggle-button> </ha-switch>
</div> </div>
</ha-card> </ha-card>
`); `);
@ -227,9 +231,9 @@ class CloudAlexa extends LitElement {
fireEvent(this, "hass-more-info", { entityId }); fireEvent(this, "hass-more-info", { entityId });
} }
private async _exposeChanged(ev: PolymerChangedEvent<boolean>) { private async _exposeChanged(ev: Event) {
const entityId = (ev.currentTarget as any).entityId; const entityId = (ev.currentTarget as any).entityId;
const newExposed = ev.detail.value; const newExposed = (ev.target as HaSwitch).checked;
await this._updateExposed(entityId, newExposed); await this._updateExposed(entityId, newExposed);
} }
@ -328,9 +332,8 @@ class CloudAlexa extends LitElement {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
padding: 4px; padding: 4px;
--paper-toggle-button-label-spacing: 16px;
} }
paper-toggle-button { ha-switch {
clear: both; clear: both;
} }
ha-card { ha-card {
@ -344,7 +347,7 @@ class CloudAlexa extends LitElement {
state-info { state-info {
cursor: pointer; cursor: pointer;
} }
paper-toggle-button { ha-switch {
padding: 8px 0; padding: 8px 0;
} }

View File

@ -7,12 +7,15 @@ import {
customElement, customElement,
property, property,
} from "lit-element"; } from "lit-element";
import "@polymer/paper-toggle-button"; import memoizeOne from "memoize-one";
import "@polymer/paper-icon-button"; import "@polymer/paper-icon-button";
import "../../../../layouts/hass-subpage"; import "../../../../layouts/hass-subpage";
import "../../../../layouts/hass-loading-screen"; import "../../../../layouts/hass-loading-screen";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/entity/state-info"; import "../../../../components/entity/state-info";
import "../../../../components/ha-switch";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
import { import {
CloudStatusLoggedIn, CloudStatusLoggedIn,
@ -21,23 +24,24 @@ import {
cloudSyncGoogleAssistant, cloudSyncGoogleAssistant,
GoogleEntityConfig, GoogleEntityConfig,
} from "../../../../data/cloud"; } from "../../../../data/cloud";
import memoizeOne from "memoize-one";
import { import {
generateFilter, generateFilter,
isEmptyFilter, isEmptyFilter,
EntityFilter, EntityFilter,
} from "../../../../common/entity/entity_filter"; } from "../../../../common/entity/entity_filter";
import { compare } from "../../../../common/string/compare"; import { compare } from "../../../../common/string/compare";
import computeStateName from "../../../../common/entity/compute_state_name";
import { fireEvent } from "../../../../common/dom/fire_event"; import { fireEvent } from "../../../../common/dom/fire_event";
import { showToast } from "../../../../util/toast"; import { showToast } from "../../../../util/toast";
import { PolymerChangedEvent } from "../../../../polymer-types";
import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler"; import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler";
import computeDomain from "../../../../common/entity/compute_domain";
import { import {
GoogleEntity, GoogleEntity,
fetchCloudGoogleEntities, fetchCloudGoogleEntities,
} from "../../../../data/google_assistant"; } from "../../../../data/google_assistant";
// tslint:disable-next-line: no-duplicate-imports
import { HaSwitch } from "../../../../components/ha-switch";
import computeStateName from "../../../../common/entity/compute_state_name";
import computeDomain from "../../../../common/entity/compute_domain";
const DEFAULT_CONFIG_EXPOSE = true; const DEFAULT_CONFIG_EXPOSE = true;
@ -122,23 +126,23 @@ class CloudGoogleAssistant extends LitElement {
.map((trait) => trait.substr(trait.lastIndexOf(".") + 1)) .map((trait) => trait.substr(trait.lastIndexOf(".") + 1))
.join(", ")} .join(", ")}
</state-info> </state-info>
<paper-toggle-button <ha-switch
.entityId=${entity.entity_id} .entityId=${entity.entity_id}
.disabled=${!emptyFilter} .disabled=${!emptyFilter}
.checked=${isExposed} .checked=${isExposed}
@checked-changed=${this._exposeChanged} @change=${this._exposeChanged}
> >
Expose to Google Assistant Expose to Google Assistant
</paper-toggle-button> </ha-switch>
${entity.might_2fa ${entity.might_2fa
? html` ? html`
<paper-toggle-button <ha-switch
.entityId=${entity.entity_id} .entityId=${entity.entity_id}
.checked=${Boolean(config.disable_2fa)} .checked=${Boolean(config.disable_2fa)}
@checked-changed=${this._disable2FAChanged} @change=${this._disable2FAChanged}
> >
Disable two factor authentication Disable two factor authentication
</paper-toggle-button> </ha-switch>
` `
: ""} : ""}
</div> </div>
@ -234,9 +238,9 @@ class CloudGoogleAssistant extends LitElement {
fireEvent(this, "hass-more-info", { entityId }); fireEvent(this, "hass-more-info", { entityId });
} }
private async _exposeChanged(ev: PolymerChangedEvent<boolean>) { private async _exposeChanged(ev: Event) {
const entityId = (ev.currentTarget as any).entityId; const entityId = (ev.currentTarget as any).entityId;
const newExposed = ev.detail.value; const newExposed = (ev.target as HaSwitch).checked;
await this._updateExposed(entityId, newExposed); await this._updateExposed(entityId, newExposed);
} }
@ -251,9 +255,9 @@ class CloudGoogleAssistant extends LitElement {
this._ensureEntitySync(); this._ensureEntitySync();
} }
private async _disable2FAChanged(ev: PolymerChangedEvent<boolean>) { private async _disable2FAChanged(ev: Event) {
const entityId = (ev.currentTarget as any).entityId; const entityId = (ev.currentTarget as any).entityId;
const newDisable2FA = ev.detail.value; const newDisable2FA = (ev.target as HaSwitch).checked;
const curDisable2FA = Boolean( const curDisable2FA = Boolean(
(this._entityConfigs[entityId] || {}).disable_2fa (this._entityConfigs[entityId] || {}).disable_2fa
); );
@ -348,7 +352,6 @@ class CloudGoogleAssistant extends LitElement {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
padding: 4px; padding: 4px;
--paper-toggle-button-label-spacing: 16px;
} }
ha-card { ha-card {
margin: 4px; margin: 4px;
@ -361,7 +364,7 @@ class CloudGoogleAssistant extends LitElement {
state-info { state-info {
cursor: pointer; cursor: pointer;
} }
paper-toggle-button { ha-switch {
padding: 8px 0; padding: 8px 0;
} }

View File

@ -8,16 +8,19 @@ import {
} from "lit-element"; } from "lit-element";
import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable";
import "@polymer/paper-input/paper-input"; import "@polymer/paper-input/paper-input";
import "@polymer/paper-toggle-button/paper-toggle-button";
import "../../../components/dialog/ha-paper-dialog"; import "../../../components/dialog/ha-paper-dialog";
import "../../../components/ha-switch";
import { EntityRegistryDetailDialogParams } from "./show-dialog-entity-registry-detail"; import { EntityRegistryDetailDialogParams } from "./show-dialog-entity-registry-detail";
import { PolymerChangedEvent } from "../../../polymer-types"; import { PolymerChangedEvent } from "../../../polymer-types";
import { haStyleDialog } from "../../../resources/styles"; import { haStyleDialog } from "../../../resources/styles";
import { HomeAssistant } from "../../../types"; import { HomeAssistant } from "../../../types";
import computeDomain from "../../../common/entity/compute_domain";
import { HassEntity } from "home-assistant-js-websocket"; import { HassEntity } from "home-assistant-js-websocket";
// tslint:disable-next-line: no-duplicate-imports
import { HaSwitch } from "../../../components/ha-switch";
import computeDomain from "../../../common/entity/compute_domain";
import computeStateName from "../../../common/entity/compute_state_name"; import computeStateName from "../../../common/entity/compute_state_name";
class DialogEntityRegistryDetail extends LitElement { class DialogEntityRegistryDetail extends LitElement {
@ -95,9 +98,9 @@ class DialogEntityRegistryDetail extends LitElement {
.disabled=${this._submitting} .disabled=${this._submitting}
></paper-input> ></paper-input>
<div class="row"> <div class="row">
<paper-toggle-button <ha-switch
.checked=${!this._disabledBy} .checked=${!this._disabledBy}
@checked-changed=${this._disabledByChanged} @change=${this._disabledByChanged}
> >
<div> <div>
<div> <div>
@ -121,7 +124,7 @@ class DialogEntityRegistryDetail extends LitElement {
<br />Note: this might not work yet with all integrations. <br />Note: this might not work yet with all integrations.
</div> </div>
</div> </div>
</paper-toggle-button> </ha-switch>
</div> </div>
</div> </div>
</paper-dialog-scrollable> </paper-dialog-scrollable>
@ -190,8 +193,8 @@ class DialogEntityRegistryDetail extends LitElement {
this._params = undefined; this._params = undefined;
} }
} }
private _disabledByChanged(ev: PolymerChangedEvent<boolean>): void { private _disabledByChanged(ev: Event): void {
this._disabledBy = ev.detail.value ? null : "user"; this._disabledBy = (ev.target as HaSwitch).checked ? null : "user";
} }
static get styles(): CSSResult[] { static get styles(): CSSResult[] {

View File

@ -8,8 +8,11 @@ import {
css, css,
CSSResult, CSSResult,
} from "lit-element"; } from "lit-element";
import { PaperToggleButtonElement } from "@polymer/paper-toggle-button/paper-toggle-button";
import "../../../components/ha-switch";
// tslint:disable-next-line: no-duplicate-imports
import { HaSwitch } from "../../../components/ha-switch";
import { DOMAINS_TOGGLE } from "../../../common/const"; import { DOMAINS_TOGGLE } from "../../../common/const";
import { turnOnOffEntities } from "../common/entity/turn-on-off-entities"; import { turnOnOffEntities } from "../common/entity/turn-on-off-entities";
import { HomeAssistant } from "../../../types"; import { HomeAssistant } from "../../../types";
@ -40,14 +43,14 @@ class HuiEntitiesToggle extends LitElement {
} }
return html` return html`
<paper-toggle-button <ha-switch
aria-label="Toggle entities." aria-label="Toggle entities."
?checked="${this._toggleEntities!.some((entityId) => { ?checked="${this._toggleEntities!.some((entityId) => {
const stateObj = this.hass!.states[entityId]; const stateObj = this.hass!.states[entityId];
return stateObj && stateObj.state === "on"; return stateObj && stateObj.state === "on";
})}" })}"
@change="${this._callService}" @change="${this._callService}"
></paper-toggle-button> ></ha-switch>
`; `;
} }
@ -57,9 +60,7 @@ class HuiEntitiesToggle extends LitElement {
width: 38px; width: 38px;
display: block; display: block;
} }
paper-toggle-button { ha-switch {
cursor: pointer;
--paper-toggle-button-label-spacing: 0;
padding: 13px 5px; padding: 13px 5px;
margin: -4px -5px; margin: -4px -5px;
} }
@ -68,7 +69,7 @@ class HuiEntitiesToggle extends LitElement {
private _callService(ev: MouseEvent): void { private _callService(ev: MouseEvent): void {
forwardHaptic("light"); forwardHaptic("light");
const turnOn = (ev.target as PaperToggleButtonElement).checked; const turnOn = (ev.target as HaSwitch).checked;
turnOnOffEntities(this.hass!, this._toggleEntities!, turnOn!); turnOnOffEntities(this.hass!, this._toggleEntities!, turnOn!);
} }
} }

View File

@ -1,5 +1,3 @@
import "@polymer/paper-toggle-button/paper-toggle-button";
import { STATES_OFF } from "../../../common/const"; import { STATES_OFF } from "../../../common/const";
import parseAspectRatio from "../../../common/util/parse-aspect-ratio"; import parseAspectRatio from "../../../common/util/parse-aspect-ratio";

View File

@ -2,7 +2,7 @@ import { html } from "lit-element";
export const configElementStyle = html` export const configElementStyle = html`
<style> <style>
paper-toggle-button { ha-switch {
padding-top: 16px; padding-top: 16px;
} }
.side-by-side { .side-by-side {

View File

@ -8,13 +8,13 @@ import {
import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-listbox/paper-listbox";
import "@polymer/paper-toggle-button/paper-toggle-button";
import "../../../../components/entity/state-badge"; import "../../../../components/entity/state-badge";
import "../../components/hui-theme-select-editor"; import "../../components/hui-theme-select-editor";
import "../../components/hui-entity-editor"; import "../../components/hui-entity-editor";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-icon"; import "../../../../components/ha-icon";
import "../../../../components/ha-switch";
import { processEditorEntities } from "../process-editor-entities"; import { processEditorEntities } from "../process-editor-entities";
import { struct } from "../../common/structs/struct"; import { struct } from "../../common/structs/struct";
@ -88,11 +88,11 @@ export class HuiEntitiesCardEditor extends LitElement
.configValue="${"theme"}" .configValue="${"theme"}"
@theme-changed="${this._valueChanged}" @theme-changed="${this._valueChanged}"
></hui-theme-select-editor> ></hui-theme-select-editor>
<paper-toggle-button <ha-switch
?checked="${this._config!.show_header_toggle !== false}" ?checked="${this._config!.show_header_toggle !== false}"
.configValue="${"show_header_toggle"}" .configValue="${"show_header_toggle"}"
@change="${this._valueChanged}" @change="${this._valueChanged}"
>Show Header Toggle?</paper-toggle-button >Show Header Toggle?</ha-switch
> >
</div> </div>
<hui-entity-editor <hui-entity-editor

View File

@ -119,17 +119,17 @@ export class HuiEntityButtonCardEditor extends LitElement
></paper-input> ></paper-input>
</div> </div>
<div class="side-by-side"> <div class="side-by-side">
<paper-toggle-button <ha-switch
?checked="${this._config!.show_name !== false}" ?checked="${this._config!.show_name !== false}"
.configValue="${"show_name"}" .configValue="${"show_name"}"
@change="${this._valueChanged}" @change="${this._valueChanged}"
>Show Name?</paper-toggle-button >Show Name?</ha-switch
> >
<paper-toggle-button <ha-switch
?checked="${this._config!.show_icon !== false}" ?checked="${this._config!.show_icon !== false}"
.configValue="${"show_icon"}" .configValue="${"show_icon"}"
@change="${this._valueChanged}" @change="${this._valueChanged}"
>Show Icon?</paper-toggle-button >Show Icon?</ha-switch
> >
</div> </div>
<div class="side-by-side"> <div class="side-by-side">

View File

@ -8,10 +8,10 @@ import {
CSSResult, CSSResult,
} from "lit-element"; } from "lit-element";
import "@polymer/paper-input/paper-input"; import "@polymer/paper-input/paper-input";
import "@polymer/paper-toggle-button/paper-toggle-button";
import "../../components/hui-theme-select-editor"; import "../../components/hui-theme-select-editor";
import "../../components/hui-entity-editor"; import "../../components/hui-entity-editor";
import "../../../../components/ha-switch";
import { struct } from "../../common/structs/struct"; import { struct } from "../../common/structs/struct";
import { EntitiesEditorEvent, EditorTarget } from "../types"; import { EntitiesEditorEvent, EditorTarget } from "../types";
@ -130,10 +130,10 @@ export class HuiGaugeCardEditor extends LitElement
></paper-input> ></paper-input>
</div> </div>
<div class="side-by-side"> <div class="side-by-side">
<paper-toggle-button <ha-switch
?checked="${this._useSeverity !== false}" ?checked="${this._useSeverity !== false}"
@change="${this._toggleSeverity}" @change="${this._toggleSeverity}"
>Define Severity?</paper-toggle-button >Define Severity?</ha-switch
> >
<div class="severity"> <div class="severity">
<paper-input <paper-input
@ -176,7 +176,7 @@ export class HuiGaugeCardEditor extends LitElement
flex: 1 0 30%; flex: 1 0 30%;
padding-right: 4px; padding-right: 4px;
} }
paper-toggle-button[checked] ~ .severity { ha-switch[checked] ~ .severity {
display: flex; display: flex;
} }
`; `;

View File

@ -8,13 +8,13 @@ import {
import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-listbox/paper-listbox";
import "@polymer/paper-toggle-button/paper-toggle-button";
import "../../../../components/entity/state-badge"; import "../../../../components/entity/state-badge";
import "../../components/hui-theme-select-editor"; import "../../components/hui-theme-select-editor";
import "../../components/hui-entity-editor"; import "../../components/hui-entity-editor";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-icon"; import "../../../../components/ha-icon";
import "../../../../components/ha-switch";
import { struct } from "../../common/structs/struct"; import { struct } from "../../common/structs/struct";
import { processEditorEntities } from "../process-editor-entities"; import { processEditorEntities } from "../process-editor-entities";
@ -114,23 +114,23 @@ export class HuiGlanceCardEditor extends LitElement
></paper-input> ></paper-input>
</div> </div>
<div class="side-by-side"> <div class="side-by-side">
<paper-toggle-button <ha-switch
?checked="${this._show_name !== false}" ?checked="${this._show_name !== false}"
.configValue="${"show_name"}" .configValue="${"show_name"}"
@change="${this._valueChanged}" @change="${this._valueChanged}"
>Show Name?</paper-toggle-button >Show Name?</ha-switch
> >
<paper-toggle-button <ha-switch
?checked="${this._show_icon !== false}" ?checked="${this._show_icon !== false}"
.configValue="${"show_icon"}" .configValue="${"show_icon"}"
@change="${this._valueChanged}" @change="${this._valueChanged}"
>Show Icon?</paper-toggle-button >Show Icon?</ha-switch
> >
<paper-toggle-button <ha-switch
?checked="${this._show_state !== false}" ?checked="${this._show_state !== false}"
.configValue="${"show_state"}" .configValue="${"show_state"}"
@change="${this._valueChanged}" @change="${this._valueChanged}"
>Show State?</paper-toggle-button >Show State?</ha-switch
> >
</div> </div>
</div> </div>

View File

@ -105,11 +105,11 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
@value-changed="${this._valueChanged}" @value-changed="${this._valueChanged}"
></paper-input> ></paper-input>
</div> </div>
<paper-toggle-button <ha-switch
?checked="${this._dark_mode !== false}" ?checked="${this._dark_mode !== false}"
.configValue="${"dark_mode"}" .configValue="${"dark_mode"}"
@change="${this._valueChanged}" @change="${this._valueChanged}"
>Dark Mode?</paper-toggle-button >Dark Mode?</ha-switch
> >
<hui-entity-editor <hui-entity-editor
.hass="${this.hass}" .hass="${this.hass}"

View File

@ -6,17 +6,17 @@ import {
property, property,
} from "lit-element"; } from "lit-element";
import "@polymer/paper-input/paper-input"; import "@polymer/paper-input/paper-input";
import "@polymer/paper-toggle-button/paper-toggle-button";
import { EditorTarget } from "../types"; import { EditorTarget } from "../types";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
import { fireEvent } from "../../../../common/dom/fire_event"; import { fireEvent } from "../../../../common/dom/fire_event";
import { configElementStyle } from "../config-elements/config-elements-style"; import { configElementStyle } from "../config-elements/config-elements-style";
import "../../components/hui-theme-select-editor";
import { LovelaceViewConfig } from "../../../../data/lovelace"; import { LovelaceViewConfig } from "../../../../data/lovelace";
import { slugify } from "../../../../common/string/slugify"; import { slugify } from "../../../../common/string/slugify";
import "../../components/hui-theme-select-editor";
import "../../../../components/ha-switch";
declare global { declare global {
interface HASSDomEvents { interface HASSDomEvents {
"view-config-changed": { "view-config-changed": {
@ -104,11 +104,11 @@ export class HuiViewEditor extends LitElement {
.configValue=${"theme"} .configValue=${"theme"}
@theme-changed=${this._valueChanged} @theme-changed=${this._valueChanged}
></hui-theme-select-editor> ></hui-theme-select-editor>
<paper-toggle-button <ha-switch
?checked=${this._panel !== false} ?checked=${this._panel !== false}
.configValue=${"panel"} .configValue=${"panel"}
@change=${this._valueChanged} @change=${this._valueChanged}
>Panel Mode?</paper-toggle-button >Panel Mode?</ha-switch
> >
</div> </div>
`; `;

View File

@ -24,11 +24,11 @@ class AdvancedModeCard extends LitElement {
<ha-card> <ha-card>
<div class="card-header"> <div class="card-header">
<div class="title">Advanced mode</div> <div class="title">Advanced mode</div>
<paper-toggle-button <ha-switch
.checked=${this.coreUserData && this.coreUserData.showAdvanced} .checked=${this.coreUserData && this.coreUserData.showAdvanced}
.disabled=${this.coreUserData === undefined} .disabled=${this.coreUserData === undefined}
@change=${this._advancedToggled} @change=${this._advancedToggled}
></paper-toggle-button> ></ha-switch>
</div> </div>
<div class="card-content"> <div class="card-content">
Home Assistant hides advanced features and options by default. You can Home Assistant hides advanced features and options by default. You can

View File

@ -5,12 +5,14 @@ import {
property, property,
customElement, customElement,
} from "lit-element"; } from "lit-element";
import "@polymer/paper-toggle-button/paper-toggle-button";
import "./ha-settings-row"; import "./ha-settings-row";
import "../../components/ha-switch";
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import { PolymerChangedEvent } from "../../polymer-types"; // tslint:disable-next-line: no-duplicate-imports
import { HaSwitch } from "../../components/ha-switch";
@customElement("ha-force-narrow-row") @customElement("ha-force-narrow-row")
class HaPushNotificationsRow extends LitElement { class HaPushNotificationsRow extends LitElement {
@ -26,16 +28,16 @@ class HaPushNotificationsRow extends LitElement {
<span slot="description"> <span slot="description">
${this.hass.localize("ui.panel.profile.force_narrow.description")} ${this.hass.localize("ui.panel.profile.force_narrow.description")}
</span> </span>
<paper-toggle-button <ha-switch
.checked=${this.hass.dockedSidebar === "always_hidden"} .checked=${this.hass.dockedSidebar === "always_hidden"}
@checked-changed=${this._checkedChanged} @change=${this._checkedChanged}
></paper-toggle-button> ></ha-switch>
</ha-settings-row> </ha-settings-row>
`; `;
} }
private async _checkedChanged(ev: PolymerChangedEvent<boolean>) { private async _checkedChanged(ev: Event) {
const newValue = ev.detail.value; const newValue = (ev.target as HaSwitch).checked;
if (newValue === (this.hass.dockedSidebar === "always_hidden")) { if (newValue === (this.hass.dockedSidebar === "always_hidden")) {
return; return;
} }

View File

@ -72,7 +72,7 @@ documentContainer.innerHTML = `<custom-style>
from paper-styles/color.html to here. from paper-styles/color.html to here.
*/ */
--paper-grey-50: #fafafa; /* default for: --paper-toggle-button-unchecked-button-color */ --paper-grey-50: #fafafa; /* default for: --mwc-switch-unchecked-button-color */
--paper-grey-200: #eeeeee; /* for ha-date-picker-style */ --paper-grey-200: #eeeeee; /* for ha-date-picker-style */
--paper-grey-500: #9e9e9e; /* --label-badge-grey */ --paper-grey-500: #9e9e9e; /* --label-badge-grey */

View File

@ -661,6 +661,16 @@
lit-html "^1.0.0" lit-html "^1.0.0"
tslib "^1.10.0" tslib "^1.10.0"
"@material/mwc-switch@^0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@material/mwc-switch/-/mwc-switch-0.8.0.tgz#5a2afc95e5f65ad077781fe16b6231cf5caddc9b"
integrity sha512-q6VWrtOJIOjyl35xo6G2npq0guac0avqUH+gR8TvQXSO0E2+pB+2GX+PhSryVBbFxgJRiVmfRlWBeIzlYtI4mg==
dependencies:
"@material/mwc-base" "^0.8.0"
"@material/mwc-ripple" "^0.8.0"
"@material/switch" "^3.0.0"
tslib "^1.10.0"
"@material/ripple@^3.0.0", "@material/ripple@^3.1.0": "@material/ripple@^3.0.0", "@material/ripple@^3.1.0":
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/@material/ripple/-/ripple-3.1.0.tgz#5cb581e9a70415c50c8b92ecd8628d5eeae34c74" resolved "https://registry.yarnpkg.com/@material/ripple/-/ripple-3.1.0.tgz#5cb581e9a70415c50c8b92ecd8628d5eeae34c74"
@ -685,6 +695,21 @@
dependencies: dependencies:
"@material/feature-targeting" "^3.1.0" "@material/feature-targeting" "^3.1.0"
"@material/switch@^3.0.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@material/switch/-/switch-3.1.0.tgz#6a610b05339ce4d145f7791debb37302b8f2ef70"
integrity sha512-DhxFN3aRrShkkiDG1fFLp1TZZCinnkLlCoxhhyCKEdCl+jaCaTl2Ii3SIw2SvN1KwMLHBX33jIzm+odOLsz7/Q==
dependencies:
"@material/animation" "^3.1.0"
"@material/base" "^3.1.0"
"@material/dom" "^3.1.0"
"@material/elevation" "^3.1.0"
"@material/feature-targeting" "^3.1.0"
"@material/ripple" "^3.1.0"
"@material/rtl" "^3.1.0"
"@material/theme" "^3.1.0"
tslib "^1.9.3"
"@material/theme@^3.1.0": "@material/theme@^3.1.0":
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/@material/theme/-/theme-3.1.0.tgz#d31147bbc9e20bdaa3e322c9e898e4fc98807d8c" resolved "https://registry.yarnpkg.com/@material/theme/-/theme-3.1.0.tgz#d31147bbc9e20bdaa3e322c9e898e4fc98807d8c"
@ -1222,16 +1247,6 @@
"@polymer/iron-overlay-behavior" "^3.0.0-pre.27" "@polymer/iron-overlay-behavior" "^3.0.0-pre.27"
"@polymer/polymer" "^3.0.0" "@polymer/polymer" "^3.0.0"
"@polymer/paper-toggle-button@^3.0.1":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@polymer/paper-toggle-button/-/paper-toggle-button-3.0.1.tgz#7d855420f0df96e7f812a9f1bdcfbc5ab082e819"
integrity sha512-jadZB60fycT7YnSAH0H23LYo6/2HYmMZTtNr9LpdSIRFPLX6mqqxewex92cFz019bMKaRJgORn308hRlJo2u6A==
dependencies:
"@polymer/iron-checked-element-behavior" "^3.0.0-pre.26"
"@polymer/paper-behaviors" "^3.0.0-pre.27"
"@polymer/paper-styles" "^3.0.0-pre.26"
"@polymer/polymer" "^3.0.0"
"@polymer/paper-tooltip@^3.0.1": "@polymer/paper-tooltip@^3.0.1":
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/@polymer/paper-tooltip/-/paper-tooltip-3.0.1.tgz#cdbb06442737513f081437c6302842170ce714dc" resolved "https://registry.yarnpkg.com/@polymer/paper-tooltip/-/paper-tooltip-3.0.1.tgz#cdbb06442737513f081437c6302842170ce714dc"