From 8f5f14fada22b66fb4b71dbb5d07617b85702485 Mon Sep 17 00:00:00 2001 From: "David F. Mulcahey" Date: Tue, 2 Apr 2019 14:48:06 -0400 Subject: [PATCH 01/36] Add targeted joins to ZHA config panel (#3048) * initial targeted add * mains powered devices only * fix prop reference * import * fix targeted join --- src/data/zha.ts | 1 + src/panels/config/zha/zha-add-devices-page.ts | 17 ++++++++++---- src/panels/config/zha/zha-device-card.ts | 23 +++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/data/zha.ts b/src/data/zha.ts index 454ffaa85a..dc759063fe 100644 --- a/src/data/zha.ts +++ b/src/data/zha.ts @@ -16,6 +16,7 @@ export interface ZHADevice { manufacturer_code: number; device_reg_id: string; user_given_name?: string; + power_source?: string; area_id?: string; } diff --git a/src/panels/config/zha/zha-add-devices-page.ts b/src/panels/config/zha/zha-add-devices-page.ts index 9ebcce185a..9c69ab0c75 100644 --- a/src/panels/config/zha/zha-add-devices-page.ts +++ b/src/panels/config/zha/zha-add-devices-page.ts @@ -18,23 +18,28 @@ import { import { ZHADevice } from "../../../data/zha"; import { haStyle } from "../../../resources/styles"; -import { HomeAssistant } from "../../../types"; +import { HomeAssistant, Route } from "../../../types"; @customElement("zha-add-devices-page") class ZHAAddDevicesPage extends LitElement { @property() public hass!: HomeAssistant; @property() public isWide?: boolean; + @property() public route?: Route; @property() private _error?: string; @property() private _discoveredDevices: ZHADevice[] = []; @property() private _formattedEvents: string = ""; @property() private _active: boolean = false; @property() private _showHelp: boolean = false; + private _ieeeAddress?: string; private _addDevicesTimeoutHandle: any = undefined; private _subscribed?: Promise<() => Promise>; public connectedCallback(): void { super.connectedCallback(); - this._subscribe(); + if (this.route && this.route.path && this.route.path !== "") { + this._ieeeAddress = this.route.path.substring(1); + } + this._subscribe(this._ieeeAddress); } public disconnectedCallback(): void { @@ -151,10 +156,14 @@ class ZHAAddDevicesPage extends LitElement { } } - private _subscribe(): void { + private _subscribe(ieeeAddress: string | undefined): void { + const data: any = { type: "zha/devices/permit" }; + if (ieeeAddress) { + data.ieee = ieeeAddress; + } this._subscribed = this.hass!.connection.subscribeMessage( (message) => this._handleMessage(message), - { type: "zha/devices/permit" } + data ); this._active = true; this._addDevicesTimeoutHandle = setTimeout( diff --git a/src/panels/config/zha/zha-device-card.ts b/src/panels/config/zha/zha-device-card.ts index 575f29704b..51f8f41480 100644 --- a/src/panels/config/zha/zha-device-card.ts +++ b/src/panels/config/zha/zha-device-card.ts @@ -1,4 +1,5 @@ import "../../../components/buttons/ha-call-service-button"; +import "../../../components/ha-service-description"; import "../../../components/entity/state-badge"; import "@material/mwc-button"; import "@polymer/paper-card/paper-card"; @@ -34,6 +35,7 @@ import { reconfigureNode, ZHADevice } from "../../../data/zha"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; import { ItemSelectedEvent, NodeServiceData } from "./types"; +import { navigate } from "../../../common/navigate"; declare global { // for fire event @@ -222,6 +224,23 @@ class ZHADeviceCard extends LitElement { ` : ""} + ${this.device!.power_source === "Mains" + ? html` + + Add Devices + + ${this.showHelp + ? html` + + ` + : ""} + ` + : ""} ` : "" @@ -281,6 +300,10 @@ class ZHADeviceCard extends LitElement { this.device!.area_id = newAreaId; } + private _onAddDevicesClick() { + navigate(this, "add/" + this.device!.ieee); + } + static get styles(): CSSResult[] { return [ haStyle, From 75f53250485ca8ff83bb42dafc99c9f417c06946 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Apr 2019 11:50:50 -0700 Subject: [PATCH 02/36] Simplify hass subpage (#3039) --- src/layouts/hass-subpage.ts | 68 ++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 19 deletions(-) diff --git a/src/layouts/hass-subpage.ts b/src/layouts/hass-subpage.ts index f318a7b47f..8dae9e7125 100644 --- a/src/layouts/hass-subpage.ts +++ b/src/layouts/hass-subpage.ts @@ -1,16 +1,13 @@ -import "@polymer/app-layout/app-header-layout/app-header-layout"; -import "@polymer/app-layout/app-header/app-header"; -import "@polymer/app-layout/app-toolbar/app-toolbar"; -import "@polymer/paper-icon-button/paper-icon-button"; import { LitElement, property, TemplateResult, html, customElement, + css, CSSResult, } from "lit-element"; -import { haStyle } from "../resources/styles"; +import "../components/ha-paper-icon-button-arrow-prev"; @customElement("hass-subpage") class HassSubpage extends LitElement { @@ -19,19 +16,14 @@ class HassSubpage extends LitElement { protected render(): TemplateResult | void { return html` - - - - -
${this.header}
- -
-
- - -
+
+ +
${this.header}
+ +
+
`; } @@ -40,7 +32,45 @@ class HassSubpage extends LitElement { } static get styles(): CSSResult { - return haStyle; + return css` + :host { + display: block; + height: 100%; + background-color: var(--primary-background-color); + } + + .toolbar { + display: flex; + align-items: center; + font-size: 20px; + height: 64px; + padding: 0 16px; + pointer-events: none; + background-color: var(--primary-color); + font-weight: 400; + color: var(--text-primary-color, white); + } + + ha-paper-icon-button-arrow-prev, + ::slotted([slot="toolbar-icon"]) { + pointer-events: auto; + } + + [main-title] { + margin: 0 0 0 24px; + line-height: 20px; + flex-grow: 1; + } + + .content { + position: relative; + width: 100%; + height: calc(100% - 64px); + overflow-y: auto; + overflow: auto; + -webkit-overflow-scrolling: touch; + } + `; } } From 438d155c45571e0ba3127a0d5cd7cd6898fb9d92 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Apr 2019 11:50:57 -0700 Subject: [PATCH 03/36] Fix imports (#3040) --- src/dialogs/more-info/controls/more-info-input_datetime.js | 1 - src/resources/ha-style.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/dialogs/more-info/controls/more-info-input_datetime.js b/src/dialogs/more-info/controls/more-info-input_datetime.js index 5905fe039a..b8f6bc4260 100644 --- a/src/dialogs/more-info/controls/more-info-input_datetime.js +++ b/src/dialogs/more-info/controls/more-info-input_datetime.js @@ -2,7 +2,6 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "@polymer/polymer/polymer-legacy"; import "@vaadin/vaadin-date-picker/vaadin-date-picker"; import "../../../components/ha-relative-time"; diff --git a/src/resources/ha-style.ts b/src/resources/ha-style.ts index 85e9b17d75..6838312427 100644 --- a/src/resources/ha-style.ts +++ b/src/resources/ha-style.ts @@ -1,5 +1,5 @@ import "@polymer/paper-styles/paper-styles"; -import "@polymer/polymer/polymer-legacy"; +import "@polymer/polymer/lib/elements/custom-style"; import { haStyle, haStyleDialog } from "./styles"; const documentContainer = document.createElement("template"); From a362b081138c7ee38435984732cf6d806fd0de78 Mon Sep 17 00:00:00 2001 From: "David F. Mulcahey" Date: Tue, 2 Apr 2019 14:52:01 -0400 Subject: [PATCH 04/36] buffer time to prevent edge misses (#3049) --- src/panels/config/zha/zha-add-devices-page.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/config/zha/zha-add-devices-page.ts b/src/panels/config/zha/zha-add-devices-page.ts index 9c69ab0c75..8080bc6c19 100644 --- a/src/panels/config/zha/zha-add-devices-page.ts +++ b/src/panels/config/zha/zha-add-devices-page.ts @@ -168,7 +168,7 @@ class ZHAAddDevicesPage extends LitElement { this._active = true; this._addDevicesTimeoutHandle = setTimeout( () => this._unsubscribe(), - 60000 + 75000 ); } From 109c40b2d3fdbb81611d9c24398529c802a29730 Mon Sep 17 00:00:00 2001 From: yosilevy <37745463+yosilevy@users.noreply.github.com> Date: Tue, 2 Apr 2019 21:53:00 +0300 Subject: [PATCH 05/36] RTL fix for drop downs (#3047) * RTL fix for drop downs * Added new file --- src/components/ha-paper-dropdown-menu.ts | 28 +++++++++++++++++++ .../more-info/controls/more-info-climate.js | 16 +++++------ .../more-info/controls/more-info-fan.js | 8 +++--- .../more-info/controls/more-info-light.js | 6 ++-- .../controls/more-info-media_player.js | 12 ++++---- .../more-info/controls/more-info-vacuum.js | 6 ++-- .../controls/more-info-water_heater.js | 8 +++--- .../hui-input-select-entity-row.ts | 8 +++--- src/panels/profile/ha-pick-language-row.js | 7 +++-- src/panels/profile/ha-pick-theme-row.js | 7 +++-- 10 files changed, 68 insertions(+), 38 deletions(-) create mode 100644 src/components/ha-paper-dropdown-menu.ts diff --git a/src/components/ha-paper-dropdown-menu.ts b/src/components/ha-paper-dropdown-menu.ts new file mode 100644 index 0000000000..bed3e0ea10 --- /dev/null +++ b/src/components/ha-paper-dropdown-menu.ts @@ -0,0 +1,28 @@ +import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import { Constructor } from "lit-element"; +import { PolymerElement } from "@polymer/polymer"; + +const paperDropdownClass = customElements.get( + "paper-dropdown-menu" +) as Constructor; + +// patches paper drop down to properly support RTL - https://github.com/PolymerElements/paper-dropdown-menu/issues/183 +export class HaPaperDropdownClass extends paperDropdownClass { + public ready() { + super.ready(); + // wait to check for direction since otherwise direction is wrong even though top level is RTL + setTimeout(() => { + if (window.getComputedStyle(this).direction === "rtl") { + this.style.textAlign = "right"; + } + }, 100); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-paper-dropdown-menu": HaPaperDropdownClass; + } +} + +customElements.define("ha-paper-dropdown-menu", HaPaperDropdownClass); diff --git a/src/dialogs/more-info/controls/more-info-climate.js b/src/dialogs/more-info/controls/more-info-climate.js index 529cad6d6b..d0c4d419af 100644 --- a/src/dialogs/more-info/controls/more-info-climate.js +++ b/src/dialogs/more-info/controls/more-info-climate.js @@ -1,5 +1,4 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-toggle-button/paper-toggle-button"; @@ -10,6 +9,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../components/ha-climate-control"; import "../../../components/ha-paper-slider"; +import "../../../components/ha-paper-dropdown-menu"; import attributeClassNames from "../../../common/entity/attribute_class_names"; import featureClassNames from "../../../common/entity/feature_class_names"; @@ -64,7 +64,7 @@ class MoreInfoClimate extends LocalizeMixin(EventsMixin(PolymerElement)) { margin: 22px 16px 0 0; } - paper-dropdown-menu { + ha-paper-dropdown-menu { width: 100%; } @@ -193,7 +193,7 @@ class MoreInfoClimate extends LocalizeMixin(EventsMixin(PolymerElement)) { - + - + - + diff --git a/src/dialogs/more-info/controls/more-info-fan.js b/src/dialogs/more-info/controls/more-info-fan.js index 7f2ad0ef53..a57b702f9f 100644 --- a/src/dialogs/more-info/controls/more-info-fan.js +++ b/src/dialogs/more-info/controls/more-info-fan.js @@ -1,5 +1,4 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; @@ -8,6 +7,7 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../components/ha-attributes"; +import "../../../components/ha-paper-dropdown-menu"; import attributeClassNames from "../../../common/entity/attribute_class_names"; import EventsMixin from "../../../mixins/events-mixin"; @@ -33,7 +33,7 @@ class MoreInfoFan extends LocalizeMixin(EventsMixin(PolymerElement)) { display: block; } - paper-dropdown-menu { + ha-paper-dropdown-menu { width: 100%; } @@ -44,7 +44,7 @@ class MoreInfoFan extends LocalizeMixin(EventsMixin(PolymerElement)) {
- [[item]] - +
diff --git a/src/dialogs/more-info/controls/more-info-light.js b/src/dialogs/more-info/controls/more-info-light.js index 99c1bf2c53..682f2e1e2c 100644 --- a/src/dialogs/more-info/controls/more-info-light.js +++ b/src/dialogs/more-info/controls/more-info-light.js @@ -1,5 +1,4 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; @@ -8,6 +7,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../components/ha-attributes"; import "../../../components/ha-color-picker"; import "../../../components/ha-labeled-slider"; +import "../../../components/ha-paper-dropdown-menu"; import featureClassNames from "../../../common/entity/feature_class_names"; import EventsMixin from "../../../mixins/events-mixin"; @@ -177,7 +177,7 @@ class MoreInfoLight extends LocalizeMixin(EventsMixin(PolymerElement)) {
- [[item]] - +
- [[item]] - +
- + diff --git a/src/dialogs/more-info/controls/more-info-vacuum.js b/src/dialogs/more-info/controls/more-info-vacuum.js index d46a699788..b1c196b88d 100644 --- a/src/dialogs/more-info/controls/more-info-vacuum.js +++ b/src/dialogs/more-info/controls/more-info-vacuum.js @@ -1,6 +1,5 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/iron-icon/iron-icon"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; @@ -8,6 +7,7 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../components/ha-attributes"; +import "../../../components/ha-paper-dropdown-menu"; import { supportsFeature } from "../../../common/entity/supports-feature"; class MoreInfoVacuum extends PolymerElement { @@ -104,7 +104,7 @@ class MoreInfoVacuum extends PolymerElement {
- [[item]] - +
diff --git a/src/dialogs/more-info/controls/more-info-water_heater.js b/src/dialogs/more-info/controls/more-info-water_heater.js index 475d338c62..4f3a7af179 100644 --- a/src/dialogs/more-info/controls/more-info-water_heater.js +++ b/src/dialogs/more-info/controls/more-info-water_heater.js @@ -1,5 +1,4 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-toggle-button/paper-toggle-button"; @@ -10,6 +9,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../components/ha-water_heater-control"; import "../../../components/ha-paper-slider"; +import "../../../components/ha-paper-dropdown-menu"; import featureClassNames from "../../../common/entity/feature_class_names"; import { supportsFeature } from "../../../common/entity/supports-feature"; @@ -40,7 +40,7 @@ class MoreInfoWaterHeater extends LocalizeMixin(EventsMixin(PolymerElement)) { .container-operation_list iron-icon, - paper-dropdown-menu { + ha-paper-dropdown-menu { width: 100%; } @@ -93,7 +93,7 @@ class MoreInfoWaterHeater extends LocalizeMixin(EventsMixin(PolymerElement)) { - +
diff --git a/src/panels/lovelace/entity-rows/hui-input-select-entity-row.ts b/src/panels/lovelace/entity-rows/hui-input-select-entity-row.ts index 9909c89106..22564ae094 100644 --- a/src/panels/lovelace/entity-rows/hui-input-select-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-input-select-entity-row.ts @@ -9,10 +9,10 @@ import { PropertyValues, } from "lit-element"; import { repeat } from "lit-html/directives/repeat"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; +import "../../../components/ha-paper-dropdown-menu"; import "../../../components/entity/state-badge"; import "../components/hui-warning"; @@ -62,7 +62,7 @@ class HuiInputSelectEntityRow extends LitElement implements EntityRow { return html` - - + `; } @@ -89,7 +89,7 @@ class HuiInputSelectEntityRow extends LitElement implements EntityRow { display: flex; align-items: center; } - paper-dropdown-menu { + ha-paper-dropdown-menu { margin-left: 16px; flex: 1; } diff --git a/src/panels/profile/ha-pick-language-row.js b/src/panels/profile/ha-pick-language-row.js index 698d647bda..e0c678383c 100644 --- a/src/panels/profile/ha-pick-language-row.js +++ b/src/panels/profile/ha-pick-language-row.js @@ -1,10 +1,11 @@ import "@polymer/paper-card/paper-card"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; +import "../../components/ha-paper-dropdown-menu"; + import EventsMixin from "../../mixins/events-mixin"; import LocalizeMixin from "../../mixins/localize-mixin"; @@ -39,7 +40,7 @@ class HaPickLanguageRow extends LocalizeMixin(EventsMixin(PolymerElement)) { >[[localize('ui.panel.profile.language.link_promo')]] - @@ -54,7 +55,7 @@ class HaPickLanguageRow extends LocalizeMixin(EventsMixin(PolymerElement)) { - + `; } diff --git a/src/panels/profile/ha-pick-theme-row.js b/src/panels/profile/ha-pick-theme-row.js index 25220a7e7b..1aaa45a863 100644 --- a/src/panels/profile/ha-pick-theme-row.js +++ b/src/panels/profile/ha-pick-theme-row.js @@ -1,10 +1,11 @@ import "@polymer/paper-card/paper-card"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; +import "../../components/ha-paper-dropdown-menu"; + import EventsMixin from "../../mixins/events-mixin"; import LocalizeMixin from "../../mixins/localize-mixin"; @@ -34,7 +35,7 @@ class HaPickThemeRow extends LocalizeMixin(EventsMixin(PolymerElement)) { >[[localize('ui.panel.profile.themes.link_promo')]] - [[theme]] - + `; } From 0c406335f51985040d68784005c25854f5a51c77 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Apr 2019 12:14:10 -0700 Subject: [PATCH 06/36] Upgrade deps (#3038) * Upgrade deps * Revert workbox back to 3 * Fix var name --- gulp/tasks/gen-icons.js | 12 +- gulp/tasks/translations.js | 357 +- package.json | 142 +- .../util/time-cache-function-promise.ts | 4 +- src/html/authorize.html.template | 2 +- src/html/index.html.template | 2 +- src/html/onboarding.html.template | 2 +- .../lovelace/components/hui-yaml-editor.ts | 38 +- src/panels/lovelace/hui-root.ts | 4 +- test-mocha/common/entity/entity_filter.ts | 2 +- tsconfig.json | 4 +- yarn.lock | 4743 ++++++++--------- 12 files changed, 2564 insertions(+), 2748 deletions(-) diff --git a/gulp/tasks/gen-icons.js b/gulp/tasks/gen-icons.js index 18a5bb42c4..b0afecb43a 100644 --- a/gulp/tasks/gen-icons.js +++ b/gulp/tasks/gen-icons.js @@ -104,9 +104,15 @@ function genHassIcons() { fs.writeFileSync(HASS_OUTPUT_PATH, generateIconset("hass", iconNames)); } -gulp.task("gen-icons-mdi", () => genMDIIcons()); -gulp.task("gen-icons-hass", () => genHassIcons()); -gulp.task("gen-icons", ["gen-icons-hass", "gen-icons-mdi"], () => {}); +gulp.task("gen-icons-mdi", (done) => { + genMDIIcons(); + done(); +}); +gulp.task("gen-icons-hass", (done) => { + genHassIcons(); + done(); +}); +gulp.task("gen-icons", gulp.series("gen-icons-hass", "gen-icons-mdi")); module.exports = { findIcons, diff --git a/gulp/tasks/translations.js b/gulp/tasks/translations.js index 898ee60cff..3cf30958b1 100755 --- a/gulp/tasks/translations.js +++ b/gulp/tasks/translations.js @@ -118,198 +118,219 @@ tasks.push(taskName); * the Lokalise update to translations/en.json will not happen immediately. */ taskName = "build-master-translation"; -gulp.task(taskName, ["clean-translations"], function() { - return gulp - .src("src/translations/en.json") - .pipe( - transform(function(data, file) { - return lokalise_transform(data, data); - }) - ) - .pipe(rename("translationMaster.json")) - .pipe(gulp.dest(workDir)); -}); +gulp.task( + taskName, + gulp.series("clean-translations", function() { + return gulp + .src("src/translations/en.json") + .pipe( + transform(function(data, file) { + return lokalise_transform(data, data); + }) + ) + .pipe(rename("translationMaster.json")) + .pipe(gulp.dest(workDir)); + }) +); tasks.push(taskName); taskName = "build-merged-translations"; -gulp.task(taskName, ["build-master-translation"], function() { - return gulp.src(inDir + "/*.json").pipe( - foreach(function(stream, file) { - // For each language generate a merged json file. It begins with the master - // translation as a failsafe for untranslated strings, and merges all parent - // tags into one file for each specific subtag - // - // TODO: This is a naive interpretation of BCP47 that should be improved. - // Will be OK for now as long as we don't have anything more complicated - // than a base translation + region. - const tr = path.basename(file.history[0], ".json"); - const subtags = tr.split("-"); - const src = [workDir + "/translationMaster.json"]; - for (let i = 1; i <= subtags.length; i++) { - const lang = subtags.slice(0, i).join("-"); - src.push(inDir + "/" + lang + ".json"); - } - return gulp - .src(src) - .pipe(transform((data) => emptyFilter(data))) - .pipe( - merge({ - fileName: tr + ".json", - }) - ) - .pipe(gulp.dest(fullDir)); - }) - ); -}); +gulp.task( + taskName, + gulp.series("build-master-translation", function() { + return gulp.src(inDir + "/*.json").pipe( + foreach(function(stream, file) { + // For each language generate a merged json file. It begins with the master + // translation as a failsafe for untranslated strings, and merges all parent + // tags into one file for each specific subtag + // + // TODO: This is a naive interpretation of BCP47 that should be improved. + // Will be OK for now as long as we don't have anything more complicated + // than a base translation + region. + const tr = path.basename(file.history[0], ".json"); + const subtags = tr.split("-"); + const src = [workDir + "/translationMaster.json"]; + for (let i = 1; i <= subtags.length; i++) { + const lang = subtags.slice(0, i).join("-"); + src.push(inDir + "/" + lang + ".json"); + } + return gulp + .src(src, { allowEmpty: true }) + .pipe(transform((data) => emptyFilter(data))) + .pipe( + merge({ + fileName: tr + ".json", + }) + ) + .pipe(gulp.dest(fullDir)); + }) + ); + }) +); tasks.push(taskName); const splitTasks = []; TRANSLATION_FRAGMENTS.forEach((fragment) => { taskName = "build-translation-fragment-" + fragment; - gulp.task(taskName, ["build-merged-translations"], function() { - // Return only the translations for this fragment. - return gulp - .src(fullDir + "/*.json") - .pipe( - transform((data) => ({ - ui: { - panel: { - [fragment]: data.ui.panel[fragment], + gulp.task( + taskName, + gulp.series("build-merged-translations", function() { + // Return only the translations for this fragment. + return gulp + .src(fullDir + "/*.json") + .pipe( + transform((data) => ({ + ui: { + panel: { + [fragment]: data.ui.panel[fragment], + }, }, - }, - })) - ) - .pipe(gulp.dest(workDir + "/" + fragment)); - }); + })) + ) + .pipe(gulp.dest(workDir + "/" + fragment)); + }) + ); tasks.push(taskName); splitTasks.push(taskName); }); taskName = "build-translation-core"; -gulp.task(taskName, ["build-merged-translations"], function() { - // Remove the fragment translations from the core translation. - return gulp - .src(fullDir + "/*.json") - .pipe( - transform((data) => { - TRANSLATION_FRAGMENTS.forEach((fragment) => { - delete data.ui.panel[fragment]; - }); - return data; - }) - ) - .pipe(gulp.dest(coreDir)); -}); +gulp.task( + taskName, + gulp.series("build-merged-translations", function() { + // Remove the fragment translations from the core translation. + return gulp + .src(fullDir + "/*.json") + .pipe( + transform((data) => { + TRANSLATION_FRAGMENTS.forEach((fragment) => { + delete data.ui.panel[fragment]; + }); + return data; + }) + ) + .pipe(gulp.dest(coreDir)); + }) +); tasks.push(taskName); splitTasks.push(taskName); taskName = "build-flattened-translations"; -gulp.task(taskName, splitTasks, function() { - // Flatten the split versions of our translations, and move them into outDir - return gulp - .src( - TRANSLATION_FRAGMENTS.map( - (fragment) => workDir + "/" + fragment + "/*.json" - ).concat(coreDir + "/*.json"), - { base: workDir } - ) - .pipe( - transform(function(data) { - // Polymer.AppLocalizeBehavior requires flattened json - return flatten(data); - }) - ) - .pipe(minify()) - .pipe(hashFilename()) - .pipe( - rename((filePath) => { - if (filePath.dirname === "core") { - filePath.dirname = ""; - } - }) - ) - .pipe(gulp.dest(outDir)); -}); +gulp.task( + taskName, + gulp.series(...splitTasks, function() { + // Flatten the split versions of our translations, and move them into outDir + return gulp + .src( + TRANSLATION_FRAGMENTS.map( + (fragment) => workDir + "/" + fragment + "/*.json" + ).concat(coreDir + "/*.json"), + { base: workDir } + ) + .pipe( + transform(function(data) { + // Polymer.AppLocalizeBehavior requires flattened json + return flatten(data); + }) + ) + .pipe(minify()) + .pipe(hashFilename()) + .pipe( + rename((filePath) => { + if (filePath.dirname === "core") { + filePath.dirname = ""; + } + }) + ) + .pipe(gulp.dest(outDir)); + }) +); tasks.push(taskName); taskName = "build-translation-fingerprints"; -gulp.task(taskName, ["build-flattened-translations"], function() { - return gulp - .src(outDir + "/**/*.json") - .pipe( - rename({ - extname: "", - }) - ) - .pipe( - hash({ - algorithm: "md5", - hashLength: 32, - template: "<%= name %>.json", - }) - ) - .pipe(hash.manifest("translationFingerprints.json")) - .pipe( - transform(function(data) { - // After generating fingerprints of our translation files, consolidate - // all translation fragment fingerprints under the translation name key - const newData = {}; - Object.entries(data).forEach(([key, value]) => { - const [path, _md5] = key.rsplit("-", 1); - // let translation = key; - let translation = path; - const parts = translation.split("/"); - if (parts.length === 2) { - translation = parts[1]; - } - if (!(translation in newData)) { - newData[translation] = { - fingerprints: {}, - }; - } - newData[translation].fingerprints[path] = value; - }); - return newData; - }) - ) - .pipe(gulp.dest(workDir)); -}); +gulp.task( + taskName, + gulp.series("build-flattened-translations", function() { + return gulp + .src(outDir + "/**/*.json") + .pipe( + rename({ + extname: "", + }) + ) + .pipe( + hash({ + algorithm: "md5", + hashLength: 32, + template: "<%= name %>.json", + }) + ) + .pipe(hash.manifest("translationFingerprints.json")) + .pipe( + transform(function(data) { + // After generating fingerprints of our translation files, consolidate + // all translation fragment fingerprints under the translation name key + const newData = {}; + Object.entries(data).forEach(([key, value]) => { + const [path, _md5] = key.rsplit("-", 1); + // let translation = key; + let translation = path; + const parts = translation.split("/"); + if (parts.length === 2) { + translation = parts[1]; + } + if (!(translation in newData)) { + newData[translation] = { + fingerprints: {}, + }; + } + newData[translation].fingerprints[path] = value; + }); + return newData; + }) + ) + .pipe(gulp.dest(workDir)); + }) +); tasks.push(taskName); taskName = "build-translations"; -gulp.task(taskName, ["build-translation-fingerprints"], function() { - return gulp - .src([ - "src/translations/translationMetadata.json", - workDir + "/translationFingerprints.json", - ]) - .pipe(merge({})) - .pipe( - transform(function(data) { - const newData = {}; - Object.entries(data).forEach(([key, value]) => { - // Filter out translations without native name. - if (data[key].nativeName) { - newData[key] = data[key]; - } else { - console.warn( - `Skipping language ${key}. Native name was not translated.` - ); - } - if (data[key]) newData[key] = value; - }); - return newData; - }) - ) - .pipe( - transform((data) => ({ - fragments: TRANSLATION_FRAGMENTS, - translations: data, - })) - ) - .pipe(rename("translationMetadata.json")) - .pipe(gulp.dest(workDir)); -}); +gulp.task( + taskName, + gulp.series("build-translation-fingerprints", function() { + return gulp + .src([ + "src/translations/translationMetadata.json", + workDir + "/translationFingerprints.json", + ]) + .pipe(merge({})) + .pipe( + transform(function(data) { + const newData = {}; + Object.entries(data).forEach(([key, value]) => { + // Filter out translations without native name. + if (data[key].nativeName) { + newData[key] = data[key]; + } else { + console.warn( + `Skipping language ${key}. Native name was not translated.` + ); + } + if (data[key]) newData[key] = value; + }); + return newData; + }) + ) + .pipe( + transform((data) => ({ + fragments: TRANSLATION_FRAGMENTS, + translations: data, + })) + ) + .pipe(rename("translationMetadata.json")) + .pipe(gulp.dest(workDir)); + }) +); tasks.push(taskName); module.exports = tasks; diff --git a/package.json b/package.json index 4898fc98b7..2005ae97d1 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@material/mwc-button": "^0.5.0", "@material/mwc-ripple": "^0.5.0", "@mdi/svg": "3.5.95", - "@polymer/app-layout": "^3.0.1", + "@polymer/app-layout": "^3.0.2", "@polymer/app-localize-behavior": "^3.0.1", "@polymer/app-route": "^3.0.2", "@polymer/app-storage": "^3.0.2", @@ -39,14 +39,14 @@ "@polymer/iron-resizable-behavior": "^3.0.1", "@polymer/neon-animation": "^3.0.1", "@polymer/paper-card": "^3.0.1", - "@polymer/paper-checkbox": "^3.0.1", + "@polymer/paper-checkbox": "^3.1.0", "@polymer/paper-dialog": "^3.0.1", "@polymer/paper-dialog-behavior": "^3.0.1", "@polymer/paper-dialog-scrollable": "^3.0.1", "@polymer/paper-drawer-panel": "^3.0.1", "@polymer/paper-dropdown-menu": "^3.0.1", "@polymer/paper-fab": "^3.0.1", - "@polymer/paper-icon-button": "^3.0.1", + "@polymer/paper-icon-button": "^3.0.2", "@polymer/paper-input": "^3.0.1", "@polymer/paper-item": "^3.0.1", "@polymer/paper-listbox": "^3.0.1", @@ -57,115 +57,115 @@ "@polymer/paper-ripple": "^3.0.1", "@polymer/paper-scroll-header-panel": "^3.0.1", "@polymer/paper-slider": "^3.0.1", - "@polymer/paper-spinner": "^3.0.1", + "@polymer/paper-spinner": "^3.0.2", "@polymer/paper-styles": "^3.0.1", "@polymer/paper-tabs": "^3.0.1", "@polymer/paper-toast": "^3.0.1", "@polymer/paper-toggle-button": "^3.0.1", "@polymer/paper-tooltip": "^3.0.1", - "@polymer/polymer": "^3.0.5", - "@vaadin/vaadin-combo-box": "^4.2.0", - "@vaadin/vaadin-date-picker": "^3.3.1", + "@polymer/polymer": "^3.2.0", + "@vaadin/vaadin-combo-box": "^4.2.8", + "@vaadin/vaadin-date-picker": "^3.3.3", "@webcomponents/shadycss": "^1.9.0", - "@webcomponents/webcomponentsjs": "^2.2.6", - "chart.js": "~2.7.2", - "chartjs-chart-timeline": "^0.2.1", - "codemirror": "^5.43.0", + "@webcomponents/webcomponentsjs": "^2.2.7", + "chart.js": "~2.8.0", + "chartjs-chart-timeline": "^0.3.0", + "codemirror": "^5.45.0", "deep-clone-simple": "^1.1.1", "es6-object-assign": "^1.1.0", - "fecha": "^3.0.0", - "hls.js": "^0.12.3", + "fecha": "^3.0.2", + "hls.js": "^0.12.4", "home-assistant-js-websocket": "^3.4.0", "intl-messageformat": "^2.2.0", "jquery": "^3.3.1", - "js-yaml": "^3.12.0", - "leaflet": "^1.3.4", + "js-yaml": "^3.13.0", + "leaflet": "^1.4.0", "lit-element": "^2.1.0", "lit-html": "^1.0.0", - "marked": "^0.6.0", - "mdn-polyfills": "^5.12.0", - "memoize-one": "^5.0.0", - "moment": "^2.22.2", - "preact": "^8.3.1", + "marked": "^0.6.1", + "mdn-polyfills": "^5.16.0", + "memoize-one": "^5.0.2", + "moment": "^2.24.0", + "preact": "^8.4.2", "preact-compat": "^3.18.4", - "react-big-calendar": "^0.19.2", - "regenerator-runtime": "^0.12.1", - "round-slider": "^1.3.2", - "superstruct": "^0.6.0", - "unfetch": "^4.0.1", + "react-big-calendar": "^0.20.4", + "regenerator-runtime": "^0.13.2", + "round-slider": "^1.3.3", + "superstruct": "^0.6.1", + "unfetch": "^4.1.0", "web-animations-js": "^2.3.1", - "xss": "^1.0.3" + "xss": "^1.0.6" }, "devDependencies": { - "@babel/core": "^7.1.2", - "@babel/plugin-external-helpers": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.3.0", - "@babel/plugin-proposal-decorators": "^7.3.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/preset-env": "^7.1.0", - "@babel/preset-typescript": "^7.1.0", - "@gfx/zopfli": "^1.0.9", + "@babel/core": "^7.4.0", + "@babel/plugin-external-helpers": "^7.2.0", + "@babel/plugin-proposal-class-properties": "^7.4.0", + "@babel/plugin-proposal-decorators": "^7.4.0", + "@babel/plugin-proposal-object-rest-spread": "^7.4.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "@babel/preset-env": "^7.4.2", + "@babel/preset-typescript": "^7.3.3", + "@gfx/zopfli": "^1.0.11", "@types/chai": "^4.1.7", - "@types/codemirror": "^0.0.71", - "@types/hls.js": "^0.12.2", + "@types/codemirror": "^0.0.72", + "@types/hls.js": "^0.12.3", "@types/leaflet": "^1.4.3", - "@types/memoize-one": "^4.1.0", - "@types/mocha": "^5.2.5", + "@types/memoize-one": "^4.1.1", + "@types/mocha": "^5.2.6", "babel-eslint": "^10", - "babel-loader": "^8.0.4", + "babel-loader": "^8.0.5", "chai": "^4.2.0", "compression-webpack-plugin": "^2.0.0", - "copy-webpack-plugin": "^4.5.2", - "del": "^3.0.0", - "eslint": "^5.6.0", + "copy-webpack-plugin": "^5.0.2", + "del": "^4.0.0", + "eslint": "^5.15.3", "eslint-config-airbnb-base": "^13.1.0", - "eslint-config-prettier": "^4.0.0", - "eslint-import-resolver-webpack": "^0.10.1", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-prettier": "^3.0.0", - "eslint-plugin-react": "^7.11.1", - "gulp": "^3.9.1", + "eslint-config-prettier": "^4.1.0", + "eslint-import-resolver-webpack": "^0.11.0", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-prettier": "^3.0.1", + "eslint-plugin-react": "^7.12.4", + "gulp": "^4.0.0", "gulp-foreach": "^0.1.0", "gulp-hash": "^4.2.2", "gulp-hash-filename": "^2.0.1", "gulp-insert": "^0.5.0", - "gulp-json-transform": "^0.4.5", + "gulp-json-transform": "^0.4.6", "gulp-jsonminify": "^1.1.0", "gulp-merge-json": "^1.3.1", "gulp-rename": "^1.4.0", "html-loader": "^0.5.5", "html-webpack-plugin": "^3.2.0", - "husky": "^1.1.0", - "lint-staged": "^8.0.2", + "husky": "^1.3.1", + "lint-staged": "^8.1.5", "merge-stream": "^1.0.1", - "mocha": "^5.2.0", + "mocha": "^6.0.2", "parse5": "^5.1.0", - "polymer-cli": "^1.8.0", - "prettier": "^1.14.3", - "raw-loader": "^0.5.1", + "polymer-cli": "^1.9.7", + "prettier": "^1.16.4", + "raw-loader": "^2.0.0", "reify": "^0.18.1", - "require-dir": "^1.0.0", - "sinon": "^7.1.1", + "require-dir": "^1.2.0", + "sinon": "^7.3.1", "terser-webpack-plugin": "^1.2.3", - "ts-mocha": "^2.0.0", - "tslint": "^5.11.0", - "tslint-config-prettier": "^1.15.0", + "ts-mocha": "^6.0.0", + "tslint": "^5.14.0", + "tslint-config-prettier": "^1.18.0", "tslint-eslint-rules": "^5.4.0", "tslint-plugin-prettier": "^2.0.1", - "typescript": "^3.1.4", - "uglifyjs-webpack-plugin": "^2.1.1", - "wct-browser-legacy": "^1.0.1", - "web-component-tester": "^6.8.0", - "webpack": "^4.19.1", - "webpack-cli": "^3.1.0", - "webpack-dev-server": "^3.1.8", + "typescript": "^3.4.1", + "uglifyjs-webpack-plugin": "^2.1.2", + "wct-browser-legacy": "^1.0.2", + "web-component-tester": "^6.9.2", + "webpack": "^4.29.6", + "webpack-cli": "^3.3.0", + "webpack-dev-server": "^3.2.1", "workbox-webpack-plugin": "^3.5.0" }, "resolutions": { - "@polymer/polymer": "3.1.0", - "@webcomponents/webcomponentsjs": "^2.2.6", + "@polymer/polymer": "3.2.0", + "@webcomponents/webcomponentsjs": "^2.2.7", "@webcomponents/shadycss": "^1.9.0", "@vaadin/vaadin-overlay": "3.2.2", "@vaadin/vaadin-lumo-styles": "1.3.0", diff --git a/src/common/util/time-cache-function-promise.ts b/src/common/util/time-cache-function-promise.ts index 8dc8abcd3f..c11a901884 100644 --- a/src/common/util/time-cache-function-promise.ts +++ b/src/common/util/time-cache-function-promise.ts @@ -10,11 +10,11 @@ export const timeCachePromiseFunc = async ( func: ( hass: HomeAssistant, entityId: string, - ...args: Array + ...args: unknown[] ) => Promise, hass: HomeAssistant, entityId: string, - ...args: Array + ...args: unknown[] ): Promise => { let cache: ResultCache | undefined = (hass as any)[cacheKey]; diff --git a/src/html/authorize.html.template b/src/html/authorize.html.template index 83133b6e0e..a8feb6560b 100644 --- a/src/html/authorize.html.template +++ b/src/html/authorize.html.template @@ -4,7 +4,7 @@ Home Assistant - <%= require('raw-loader!./_header.html.template') %> + <%= require('raw-loader!./_header.html.template').default %> - + - + `; } diff --git a/hassio/src/snapshots/hassio-snapshot.js b/hassio/src/snapshots/hassio-snapshot.js index 8ea0c0e4a6..6ade909c43 100644 --- a/hassio/src/snapshots/hassio-snapshot.js +++ b/hassio/src/snapshots/hassio-snapshot.js @@ -2,7 +2,6 @@ import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@material/mwc-button"; import "@polymer/paper-checkbox/paper-checkbox"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; @@ -10,12 +9,13 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import { getSignedPath } from "../../../src/auth/data"; import "../../../src/resources/ha-style"; +import "../../../src/components/dialog/ha-paper-dialog"; class HassioSnapshot extends PolymerElement { static get template() { return html` -
- + `; } diff --git a/src/panels/lovelace/components/dialog/ha-iron-focusables-helper.js b/src/components/dialog/ha-iron-focusables-helper.js similarity index 100% rename from src/panels/lovelace/components/dialog/ha-iron-focusables-helper.js rename to src/components/dialog/ha-iron-focusables-helper.js diff --git a/src/panels/lovelace/components/dialog/ha-dialog.ts b/src/components/dialog/ha-paper-dialog.ts similarity index 75% rename from src/panels/lovelace/components/dialog/ha-dialog.ts rename to src/components/dialog/ha-paper-dialog.ts index 25be5b934e..7ddef793c6 100644 --- a/src/panels/lovelace/components/dialog/ha-dialog.ts +++ b/src/components/dialog/ha-paper-dialog.ts @@ -1,6 +1,8 @@ import "@polymer/paper-dialog/paper-dialog"; import { mixinBehaviors } from "@polymer/polymer/lib/legacy/class"; import { HaIronFocusablesHelper } from "./ha-iron-focusables-helper.js"; +// tslint:disable-next-line +import { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; const paperDialogClass = customElements.get("paper-dialog"); @@ -13,10 +15,10 @@ const haTabFixBehaviorImpl = { // paper-dialog that uses the haTabFixBehaviorImpl behvaior // export class HaPaperDialog extends paperDialogClass {} -export class HaPaperDialog extends mixinBehaviors( - [haTabFixBehaviorImpl], - paperDialogClass -) {} +// @ts-ignore +export class HaPaperDialog + extends mixinBehaviors([haTabFixBehaviorImpl], paperDialogClass) + implements PaperDialogElement {} declare global { interface HTMLElementTagNameMap { diff --git a/src/dialogs/config-flow/dialog-config-flow.ts b/src/dialogs/config-flow/dialog-config-flow.ts index 9a98881ab5..37c1b1b7d6 100644 --- a/src/dialogs/config-flow/dialog-config-flow.ts +++ b/src/dialogs/config-flow/dialog-config-flow.ts @@ -12,14 +12,14 @@ import "@material/mwc-button"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-tooltip/paper-tooltip"; import "@polymer/paper-spinner/paper-spinner"; -import "@polymer/paper-dialog/paper-dialog"; -// Not duplicate, is for typing -// tslint:disable-next-line -import { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; import "../../components/ha-form"; import "../../components/ha-markdown"; import "../../resources/ha-style"; +import "../../components/dialog/ha-paper-dialog"; +// Not duplicate, is for typing +// tslint:disable-next-line +import { HaPaperDialog } from "../../components/dialog/ha-paper-dialog"; import { haStyleDialog } from "../../resources/styles"; import { fetchConfigFlow, @@ -108,7 +108,11 @@ class ConfigFlowDialog extends LitElement { } return html` - + ${this._loading ? html` @@ -144,7 +148,7 @@ class ConfigFlowDialog extends LitElement { .areas=${this._areas} > `} - + `; } @@ -166,8 +170,8 @@ class ConfigFlowDialog extends LitElement { } } - private get _dialog(): PaperDialogElement { - return this.shadowRoot!.querySelector("paper-dialog")!; + private get _dialog(): HaPaperDialog { + return this.shadowRoot!.querySelector("ha-paper-dialog")!; } private async _fetchDevices(configEntryId) { @@ -226,10 +230,10 @@ class ConfigFlowDialog extends LitElement { return [ haStyleDialog, css` - paper-dialog { + ha-paper-dialog { max-width: 500px; } - paper-dialog > * { + ha-paper-dialog > * { margin: 0; display: block; padding: 0; diff --git a/src/dialogs/config-flow/step-flow-abort.ts b/src/dialogs/config-flow/step-flow-abort.ts index ecd05fe2b5..b338d26fbc 100644 --- a/src/dialogs/config-flow/step-flow-abort.ts +++ b/src/dialogs/config-flow/step-flow-abort.ts @@ -33,20 +33,17 @@ class StepFlowAbort extends LitElement { ); return html` -

Aborted

-
- ${ - description - ? html` - - ` - : "" - } -
-
- Close -
- +

Aborted

+
+ ${description + ? html` + + ` + : ""} +
+
+ Close +
`; } diff --git a/src/dialogs/config-flow/step-flow-create-entry.ts b/src/dialogs/config-flow/step-flow-create-entry.ts index 0935ef5d5f..be4b268389 100644 --- a/src/dialogs/config-flow/step-flow-create-entry.ts +++ b/src/dialogs/config-flow/step-flow-create-entry.ts @@ -52,71 +52,61 @@ class StepFlowCreateEntry extends LitElement { ); return html` -

Success!

-
- ${ - description - ? html` - - ` - : "" - } -

Created config for ${step.title}.

- ${ - this.devices.length === 0 - ? "" - : html` -

We found the following devices:

-
- ${this.devices.map( - (device) => - html` -
- ${device.name}
- ${device.model} (${device.manufacturer}) +

Success!

+
+ ${description + ? html` + + ` + : ""} +

Created config for ${step.title}.

+ ${this.devices.length === 0 + ? "" + : html` +

We found the following devices:

+
+ ${this.devices.map( + (device) => + html` +
+ ${device.name}
+ ${device.model} (${device.manufacturer}) - - - - ${localize( - "ui.panel.config.integrations.config_entry.no_area" - )} + + + + ${localize( + "ui.panel.config.integrations.config_entry.no_area" + )} + + ${this.areas.map( + (area) => html` + + ${area.name} - ${this.areas.map( - (area) => html` - - ${area.name} - - ` - )} - - -
- ` - )} -
- ` - } -
-
- ${ - this.devices.length > 0 - ? html` - Add Area - ` - : "" - } + ` + )} + + +
+ ` + )} +
+ `} +
+
+ ${this.devices.length > 0 + ? html` + Add Area + ` + : ""} - Finish -
- + Finish +
`; } diff --git a/src/panels/config/area_registry/dialog-area-registry-detail.ts b/src/panels/config/area_registry/dialog-area-registry-detail.ts index 3119d74ba7..f2703018c9 100644 --- a/src/panels/config/area_registry/dialog-area-registry-detail.ts +++ b/src/panels/config/area_registry/dialog-area-registry-detail.ts @@ -6,10 +6,10 @@ import { CSSResult, TemplateResult, } from "lit-element"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-input/paper-input"; +import "../../../components/dialog/ha-paper-dialog"; import { AreaRegistryDetailDialogParams } from "./show-dialog-area-registry-detail"; import { PolymerChangedEvent } from "../../../polymer-types"; import { haStyleDialog } from "../../../resources/styles"; @@ -47,7 +47,7 @@ class DialogAreaDetail extends LitElement { const entry = this._params.entry; const nameInvalid = this._name.trim() === ""; return html` - - + `; } @@ -157,7 +157,7 @@ class DialogAreaDetail extends LitElement { return [ haStyleDialog, css` - paper-dialog { + ha-paper-dialog { min-width: 400px; } .form { diff --git a/src/panels/config/cloud/cloud-webhook-manage-dialog.ts b/src/panels/config/cloud/cloud-webhook-manage-dialog.ts index f32298c047..03e8d1240e 100644 --- a/src/panels/config/cloud/cloud-webhook-manage-dialog.ts +++ b/src/panels/config/cloud/cloud-webhook-manage-dialog.ts @@ -9,10 +9,10 @@ import { import "@material/mwc-button"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; -import "@polymer/paper-dialog/paper-dialog"; +import "../../../components/dialog/ha-paper-dialog"; // This is not a duplicate import, one is for types, one is for element. // tslint:disable-next-line -import { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; +import { HaPaperDialog } from "../../../components/dialog/ha-paper-dialog"; // tslint:disable-next-line import { PaperInputElement } from "@polymer/paper-input/paper-input"; @@ -49,7 +49,7 @@ export class CloudWebhookManageDialog extends LitElement { ? "https://www.home-assistant.io/docs/automation/trigger/#webhook-trigger" : `https://www.home-assistant.io/components/${webhook.domain}/`; return html` - +

Webhook for ${webhook.name}

The webhook is available at the following url:

@@ -80,12 +80,12 @@ export class CloudWebhookManageDialog extends LitElement { > CLOSE
-
+ `; } - private get _dialog(): PaperDialogElement { - return this.shadowRoot!.querySelector("paper-dialog")!; + private get _dialog(): HaPaperDialog { + return this.shadowRoot!.querySelector("ha-paper-dialog")!; } private get _paperInput(): PaperInputElement { @@ -127,7 +127,7 @@ export class CloudWebhookManageDialog extends LitElement { return [ haStyle, css` - paper-dialog { + ha-paper-dialog { width: 650px; } paper-input { diff --git a/src/panels/config/cloud/dialog-cloud-certificate.ts b/src/panels/config/cloud/dialog-cloud-certificate.ts index a5d86e81e0..1c3f210542 100644 --- a/src/panels/config/cloud/dialog-cloud-certificate.ts +++ b/src/panels/config/cloud/dialog-cloud-certificate.ts @@ -8,10 +8,10 @@ import { } from "lit-element"; import "@material/mwc-button"; -import "@polymer/paper-dialog/paper-dialog"; +import "../../../components/dialog/ha-paper-dialog"; // This is not a duplicate import, one is for types, one is for element. // tslint:disable-next-line -import { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; +import { HaPaperDialog } from "../../../components/dialog/ha-paper-dialog"; import { HomeAssistant } from "../../../types"; import { haStyle } from "../../../resources/styles"; @@ -39,7 +39,7 @@ class DialogCloudCertificate extends LitElement { const { certificateInfo } = this._params; return html` - +

Certificate Information

@@ -58,12 +58,12 @@ class DialogCloudCertificate extends LitElement {

CLOSE
- + `; } - private get _dialog(): PaperDialogElement { - return this.shadowRoot!.querySelector("paper-dialog")!; + private get _dialog(): HaPaperDialog { + return this.shadowRoot!.querySelector("ha-paper-dialog")!; } private _closeDialog() { @@ -74,7 +74,7 @@ class DialogCloudCertificate extends LitElement { return [ haStyle, css` - paper-dialog { + ha-paper-dialog { width: 535px; } `, diff --git a/src/panels/config/entity_registry/dialog-entity-registry-detail.ts b/src/panels/config/entity_registry/dialog-entity-registry-detail.ts index a3db216236..391e72d16c 100644 --- a/src/panels/config/entity_registry/dialog-entity-registry-detail.ts +++ b/src/panels/config/entity_registry/dialog-entity-registry-detail.ts @@ -6,10 +6,11 @@ import { CSSResult, TemplateResult, } from "lit-element"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-input/paper-input"; +import "../../../components/dialog/ha-paper-dialog"; + import { EntityRegistryDetailDialogParams } from "./show-dialog-entity-registry-detail"; import { PolymerChangedEvent } from "../../../polymer-types"; import { haStyleDialog } from "../../../resources/styles"; @@ -56,7 +57,7 @@ class DialogEntityRegistryDetail extends LitElement { computeDomain(this._params.entry.entity_id); return html` -
-
+ `; } @@ -166,7 +167,7 @@ class DialogEntityRegistryDetail extends LitElement { return [ haStyleDialog, css` - paper-dialog { + ha-paper-dialog { min-width: 400px; } .form { diff --git a/src/panels/config/person/dialog-person-detail.ts b/src/panels/config/person/dialog-person-detail.ts index 17a9b8db14..6a191e72a0 100644 --- a/src/panels/config/person/dialog-person-detail.ts +++ b/src/panels/config/person/dialog-person-detail.ts @@ -6,11 +6,12 @@ import { TemplateResult, property, } from "lit-element"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-input/paper-input"; import "@material/mwc-button"; +import "../../../components/dialog/ha-paper-dialog"; + import "../../../components/entity/ha-entities-picker"; import "../../../components/user/ha-user-picker"; import { PersonDetailDialogParams } from "./show-dialog-person-detail"; @@ -49,7 +50,7 @@ class DialogPersonDetail extends LitElement { } const nameInvalid = this._name.trim() === ""; return html` - - + `; } @@ -175,7 +176,7 @@ class DialogPersonDetail extends LitElement { return [ haStyleDialog, css` - paper-dialog { + ha-paper-dialog { min-width: 400px; } .form { diff --git a/src/panels/config/users/ha-dialog-add-user.js b/src/panels/config/users/ha-dialog-add-user.js index da5f7d6c55..08c0319919 100644 --- a/src/panels/config/users/ha-dialog-add-user.js +++ b/src/panels/config/users/ha-dialog-add-user.js @@ -1,9 +1,9 @@ import "@material/mwc-button"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; +import "../../../components/dialog/ha-paper-dialog"; import "../../../resources/ha-style"; import LocalizeMixin from "../../../mixins/localize-mixin"; @@ -18,14 +18,14 @@ class HaDialogAddUser extends LocalizeMixin(PolymerElement) { .error { color: red; } - paper-dialog { + ha-paper-dialog { max-width: 500px; } .username { margin-top: -8px; } - - + `; } diff --git a/src/panels/config/zwave/zwave-log-dialog.js b/src/panels/config/zwave/zwave-log-dialog.js index 799234ccdf..f99925e367 100644 --- a/src/panels/config/zwave/zwave-log-dialog.js +++ b/src/panels/config/zwave/zwave-log-dialog.js @@ -1,8 +1,8 @@ import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; -import "@polymer/paper-dialog/paper-dialog"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; +import "../../../components/dialog/ha-paper-dialog"; import "../../../resources/ha-style"; import EventsMixin from "../../../mixins/events-mixin"; @@ -12,12 +12,12 @@ class ZwaveLogDialog extends EventsMixin(PolymerElement) { return html` - +

OpenZwave internal logfile

[[_ozwLog]]
-
+ `; } diff --git a/src/panels/config/zwave/zwave-log.js b/src/panels/config/zwave/zwave-log.js index a0524d08a9..716d962812 100644 --- a/src/panels/config/zwave/zwave-log.js +++ b/src/panels/config/zwave/zwave-log.js @@ -2,8 +2,6 @@ import "@material/mwc-button"; import "@polymer/paper-card/paper-card"; import "@polymer/paper-checkbox/paper-checkbox"; import "@polymer/paper-input/paper-input"; -import "@polymer/paper-dialog/paper-dialog"; -import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import EventsMixin from "../../../mixins/events-mixin"; diff --git a/src/panels/dev-info/dialog-system-log-detail.ts b/src/panels/dev-info/dialog-system-log-detail.ts index 4e817632c7..6ec2299a1b 100644 --- a/src/panels/dev-info/dialog-system-log-detail.ts +++ b/src/panels/dev-info/dialog-system-log-detail.ts @@ -6,9 +6,10 @@ import { CSSResult, TemplateResult, } from "lit-element"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "../../components/dialog/ha-paper-dialog"; + import { SystemLogDetailDialogParams } from "./show-dialog-system-log-detail"; import { PolymerChangedEvent } from "../../polymer-types"; import { haStyleDialog } from "../../resources/styles"; @@ -34,7 +35,7 @@ class DialogSystemLogDetail extends LitElement { const item = this._params.item; return html` - - + `; } @@ -67,7 +68,7 @@ class DialogSystemLogDetail extends LitElement { return [ haStyleDialog, css` - paper-dialog { + ha-paper-dialog { direction: ltr; } `, diff --git a/src/panels/lovelace/editor/card-editor/hui-dialog-move-card-view.ts b/src/panels/lovelace/editor/card-editor/hui-dialog-move-card-view.ts index 1cd86ebee7..9e860a75e0 100644 --- a/src/panels/lovelace/editor/card-editor/hui-dialog-move-card-view.ts +++ b/src/panels/lovelace/editor/card-editor/hui-dialog-move-card-view.ts @@ -7,10 +7,10 @@ import { css, CSSResult, } from "lit-element"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-item/paper-item"; +import "../../../../components/dialog/ha-paper-dialog"; // tslint:disable-next-line:no-duplicate-imports -import { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; +import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; import { moveCard } from "../config-util"; import { MoveCardViewDialogParams } from "./show-move-card-view-dialog"; @@ -30,7 +30,7 @@ export class HuiDialogMoveCardView extends LitElement { return html``; } return html` - `; })} - + `; } @@ -76,8 +76,8 @@ export class HuiDialogMoveCardView extends LitElement { `; } - private get _dialog(): PaperDialogElement { - return this.shadowRoot!.querySelector("paper-dialog")!; + private get _dialog(): HaPaperDialog { + return this.shadowRoot!.querySelector("ha-paper-dialog")!; } private _moveCard(e: Event): void { diff --git a/src/panels/lovelace/editor/card-editor/hui-dialog-pick-card.ts b/src/panels/lovelace/editor/card-editor/hui-dialog-pick-card.ts index c8a293925b..49d80a6fd7 100644 --- a/src/panels/lovelace/editor/card-editor/hui-dialog-pick-card.ts +++ b/src/panels/lovelace/editor/card-editor/hui-dialog-pick-card.ts @@ -6,9 +6,10 @@ import { CSSResult, customElement, } from "lit-element"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "../../../../components/dialog/ha-paper-dialog"; + import { haStyleDialog } from "../../../../resources/styles"; import "./hui-card-picker"; @@ -23,7 +24,7 @@ export class HuiDialogPickCard extends LitElement { protected render(): TemplateResult | void { return html` - MANUAL CARD - + `; } @@ -60,19 +61,19 @@ export class HuiDialogPickCard extends LitElement { css` @media all and (max-width: 450px), all and (max-height: 500px) { /* overrule the ha-style-dialog max-height on small screens */ - paper-dialog { + ha-paper-dialog { max-height: 100%; height: 100%; } } @media all and (min-width: 660px) { - paper-dialog { + ha-paper-dialog { width: 650px; } } - paper-dialog { + ha-paper-dialog { max-width: 650px; } `, diff --git a/src/panels/lovelace/editor/card-editor/hui-edit-card.ts b/src/panels/lovelace/editor/card-editor/hui-edit-card.ts index ad741cea7c..efe7ce09ac 100644 --- a/src/panels/lovelace/editor/card-editor/hui-edit-card.ts +++ b/src/panels/lovelace/editor/card-editor/hui-edit-card.ts @@ -15,10 +15,10 @@ import { haStyleDialog } from "../../../../resources/styles"; import "@polymer/paper-spinner/paper-spinner"; import "@polymer/paper-dialog/paper-dialog"; -import "../../components/dialog/ha-dialog"; +import "../../../../components/dialog/ha-paper-dialog"; // This is not a duplicate import, one is for types, one is for element. // tslint:disable-next-line -import { HaPaperDialog } from "../../components/dialog/ha-dialog"; +import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; import "@material/mwc-button"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import { HomeAssistant } from "../../../../types"; @@ -428,7 +428,7 @@ export class HuiEditCard extends LitElement { } @media (min-width: 1200px) { - paper-dialog { + ha-paper-dialog { max-width: none; width: 1000px; } diff --git a/src/panels/lovelace/editor/hui-dialog-save-config.ts b/src/panels/lovelace/editor/hui-dialog-save-config.ts index cb8942fae4..b50e6552fe 100644 --- a/src/panels/lovelace/editor/hui-dialog-save-config.ts +++ b/src/panels/lovelace/editor/hui-dialog-save-config.ts @@ -8,10 +8,9 @@ import { property, } from "lit-element"; import "@polymer/paper-spinner/paper-spinner"; -import "@polymer/paper-dialog/paper-dialog"; -// This is not a duplicate import, one is for types, one is for element. -// tslint:disable-next-line -import { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; +import "../../../components/dialog/ha-paper-dialog"; +// tslint:disable-next-line:no-duplicate-imports +import { HaPaperDialog } from "../../../components/dialog/ha-paper-dialog"; import "@material/mwc-button"; import { haStyleDialog } from "../../../resources/styles"; @@ -37,13 +36,13 @@ export class HuiSaveConfig extends LitElement { this._dialog.open(); } - private get _dialog(): PaperDialogElement { - return this.shadowRoot!.querySelector("paper-dialog")!; + private get _dialog(): HaPaperDialog { + return this.shadowRoot!.querySelector("ha-paper-dialog")!; } protected render(): TemplateResult | void { return html` - +

${this.hass!.localize("ui.panel.lovelace.editor.save_config.header")}

@@ -73,7 +72,7 @@ export class HuiSaveConfig extends LitElement { )} -
+ `; } @@ -104,17 +103,17 @@ export class HuiSaveConfig extends LitElement { css` @media all and (max-width: 450px), all and (max-height: 500px) { /* overrule the ha-style-dialog max-height on small screens */ - paper-dialog { + ha-paper-dialog { max-height: 100%; height: 100%; } } @media all and (min-width: 660px) { - paper-dialog { + ha-paper-dialog { width: 650px; } } - paper-dialog { + ha-paper-dialog { max-width: 650px; } paper-spinner { diff --git a/src/panels/lovelace/editor/lovelace-editor/hui-dialog-edit-lovelace.ts b/src/panels/lovelace/editor/lovelace-editor/hui-dialog-edit-lovelace.ts index 2b62748c09..f7ebfb0fb4 100644 --- a/src/panels/lovelace/editor/lovelace-editor/hui-dialog-edit-lovelace.ts +++ b/src/panels/lovelace/editor/lovelace-editor/hui-dialog-edit-lovelace.ts @@ -8,10 +8,9 @@ import { property, } from "lit-element"; import "@polymer/paper-spinner/paper-spinner"; -import "@polymer/paper-dialog/paper-dialog"; -// This is not a duplicate import, one is for types, one is for element. -// tslint:disable-next-line -import { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; +import "../../../../components/dialog/ha-paper-dialog"; +// tslint:disable-next-line:no-duplicate-imports +import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; import "@material/mwc-button"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; @@ -49,13 +48,13 @@ export class HuiDialogEditLovelace extends LitElement { this._dialog.open(); } - private get _dialog(): PaperDialogElement { - return this.shadowRoot!.querySelector("paper-dialog")!; + private get _dialog(): HaPaperDialog { + return this.shadowRoot!.querySelector("ha-paper-dialog")!; } protected render(): TemplateResult | void { return html` - +

Edit Lovelace

-
+ `; } @@ -132,17 +131,17 @@ export class HuiDialogEditLovelace extends LitElement { css` @media all and (max-width: 450px), all and (max-height: 500px) { /* overrule the ha-style-dialog max-height on small screens */ - paper-dialog { + ha-paper-dialog { max-height: 100%; height: 100%; } } @media all and (min-width: 660px) { - paper-dialog { + ha-paper-dialog { width: 650px; } } - paper-dialog { + ha-paper-dialog { max-width: 650px; } mwc-button paper-spinner { diff --git a/src/panels/lovelace/editor/view-editor/hui-edit-view.ts b/src/panels/lovelace/editor/view-editor/hui-edit-view.ts index ff115e7cf5..4af79771f3 100644 --- a/src/panels/lovelace/editor/view-editor/hui-edit-view.ts +++ b/src/panels/lovelace/editor/view-editor/hui-edit-view.ts @@ -11,11 +11,10 @@ import { import "@polymer/paper-spinner/paper-spinner"; import "@polymer/paper-tabs/paper-tab"; import "@polymer/paper-tabs/paper-tabs"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-icon-button/paper-icon-button.js"; -// This is not a duplicate import, one is for types, one is for element. -// tslint:disable-next-line -import { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; +import "../../../../components/dialog/ha-paper-dialog"; +// tslint:disable-next-line:no-duplicate-imports +import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; import "@material/mwc-button"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; @@ -84,8 +83,8 @@ export class HuiEditView extends LitElement { this._dialog.open(); } - private get _dialog(): PaperDialogElement { - return this.shadowRoot!.querySelector("paper-dialog")!; + private get _dialog(): HaPaperDialog { + return this.shadowRoot!.querySelector("ha-paper-dialog")!; } protected render(): TemplateResult | void { @@ -116,7 +115,7 @@ export class HuiEditView extends LitElement { break; } return html` - +

${this.hass!.localize("ui.panel.lovelace.editor.edit_view.header")}

@@ -155,7 +154,7 @@ export class HuiEditView extends LitElement { ${this.hass!.localize("ui.common.save")} -
+ `; } @@ -184,7 +183,7 @@ export class HuiEditView extends LitElement { private async _resizeDialog(): Promise { await this.updateComplete; - fireEvent(this._dialog, "iron-resize"); + fireEvent(this._dialog as HTMLElement, "iron-resize"); } private _closeDialog(): void { @@ -267,17 +266,17 @@ export class HuiEditView extends LitElement { css` @media all and (max-width: 450px), all and (max-height: 500px) { /* overrule the ha-style-dialog max-height on small screens */ - paper-dialog { + ha-paper-dialog { max-height: 100%; height: 100%; } } @media all and (min-width: 660px) { - paper-dialog { + ha-paper-dialog { width: 650px; } } - paper-dialog { + ha-paper-dialog { max-width: 650px; } paper-tabs { diff --git a/src/panels/mailbox/ha-dialog-show-audio-message.js b/src/panels/mailbox/ha-dialog-show-audio-message.js index 6ac06c5c8a..c381c00e2d 100644 --- a/src/panels/mailbox/ha-dialog-show-audio-message.js +++ b/src/panels/mailbox/ha-dialog-show-audio-message.js @@ -1,10 +1,10 @@ import "@material/mwc-button"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../resources/ha-style"; +import "../../components/dialog/ha-paper-dialog"; import LocalizeMixin from "../../mixins/localize-mixin"; @@ -19,7 +19,7 @@ class HaDialogShowAudioMessage extends LocalizeMixin(PolymerElement) { color: red; } @media all and (max-width: 500px) { - paper-dialog { + ha-paper-dialog { margin: 0; width: 100%; max-height: calc(100% - 64px); @@ -34,10 +34,10 @@ class HaDialogShowAudioMessage extends LocalizeMixin(PolymerElement) { } } - paper-dialog { + ha-paper-dialog { border-radius: 2px; } - paper-dialog p { + ha-paper-dialog p { color: var(--secondary-text-color); } @@ -45,7 +45,7 @@ class HaDialogShowAudioMessage extends LocalizeMixin(PolymerElement) { float: right; } - - + `; } diff --git a/src/panels/profile/ha-mfa-module-setup-flow.js b/src/panels/profile/ha-mfa-module-setup-flow.js index f8feef4a72..cee65656a5 100644 --- a/src/panels/profile/ha-mfa-module-setup-flow.js +++ b/src/panels/profile/ha-mfa-module-setup-flow.js @@ -1,10 +1,10 @@ import "@material/mwc-button"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; -import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; +import "../../components/dialog/ha-paper-dialog"; import "../../components/ha-form"; import "../../components/ha-markdown"; import "../../resources/ha-style"; @@ -25,7 +25,7 @@ class HaMfaModuleSetupFlow extends LocalizeMixin(EventsMixin(PolymerElement)) { .error { color: red; } - paper-dialog { + ha-paper-dialog { max-width: 500px; } ha-markdown img:first-child:last-child, @@ -44,7 +44,7 @@ class HaMfaModuleSetupFlow extends LocalizeMixin(EventsMixin(PolymerElement)) { margin-right: 16px; } - - + `; } From 7f99f1d9be40c77e8fd628de728a27706c34260e Mon Sep 17 00:00:00 2001 From: Markus Jankowski Date: Fri, 5 Apr 2019 03:40:27 +0200 Subject: [PATCH 12/36] add device_class_signal_strength (#3058) --- src/common/entity/sensor_icon.ts | 1 + src/util/hass-attributes-util.js | 1 + 2 files changed, 2 insertions(+) diff --git a/src/common/entity/sensor_icon.ts b/src/common/entity/sensor_icon.ts index de741888b7..3a04fa823c 100644 --- a/src/common/entity/sensor_icon.ts +++ b/src/common/entity/sensor_icon.ts @@ -9,6 +9,7 @@ const fixedDeviceClassIcons = { temperature: "hass:thermometer", pressure: "hass:gauge", power: "hass:flash", + signal_strength: "hass:wifi", }; export default function sensorIcon(state: HassEntity) { diff --git a/src/util/hass-attributes-util.js b/src/util/hass-attributes-util.js index 4740fea291..c6eeb30d4c 100644 --- a/src/util/hass-attributes-util.js +++ b/src/util/hass-attributes-util.js @@ -34,6 +34,7 @@ hassAttributeUtil.DOMAIN_DEVICE_CLASS = { "temperature", "pressure", "power", + "signal_strength", ], }; From b07f95f9566b4c1fe5e1b417d3cbf32bf1927b75 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 6 Apr 2019 00:28:08 -0700 Subject: [PATCH 13/36] Add hassio ingress support (#3062) * Add hassio ingress support * Remove logging * Better integrate * Add badge * FIx type --- hassio/src/addon-view/hassio-addon-info.js | 39 +++++- hassio/src/entrypoint.js | 14 ++- hassio/src/hassio-main.js | 18 ++- .../src/ingress-view/hassio-ingress-view.ts | 113 ++++++++++++++++++ .../ha-paper-icon-button-arrow-prev.ts | 8 +- src/data/hassio.ts | 86 +++++++++++++ src/layouts/hass-subpage.ts | 22 +++- 7 files changed, 291 insertions(+), 9 deletions(-) create mode 100644 hassio/src/ingress-view/hassio-ingress-view.ts create mode 100644 src/data/hassio.ts diff --git a/hassio/src/addon-view/hassio-addon-info.js b/hassio/src/addon-view/hassio-addon-info.js index 792407116b..3a987088af 100644 --- a/hassio/src/addon-view/hassio-addon-info.js +++ b/hassio/src/addon-view/hassio-addon-info.js @@ -10,6 +10,7 @@ import "../../../src/components/ha-markdown"; import "../../../src/components/buttons/ha-call-api-button"; import "../../../src/resources/ha-style"; import EventsMixin from "../../../src/mixins/events-mixin"; +import { navigate } from "../../../src/common/navigate"; import "../components/hassio-card-content"; @@ -59,6 +60,11 @@ const PERMIS_DESC = { description: "An addon can authenticate users against Home Assistant, allowing add-ons to give users the possibility to log into applications running inside add-ons, using their Home Assistant username/password. This badge indicates if the add-on author requests this capability.", }, + ingress: { + title: "Ingress", + description: + "This add-on is using Ingress to embed its interface securely into Home Assistant.", + }, }; class HassioAddonInfo extends EventsMixin(PolymerElement) { @@ -310,6 +316,15 @@ class HassioAddonInfo extends EventsMixin(PolymerElement) { description="" > + +