diff --git a/demo/src/configs/arsaboo/lovelace.ts b/demo/src/configs/arsaboo/lovelace.ts index e3a95650e3..bc21e15c71 100644 --- a/demo/src/configs/arsaboo/lovelace.ts +++ b/demo/src/configs/arsaboo/lovelace.ts @@ -528,7 +528,7 @@ export const demoLovelaceArsaboo: () => LovelaceConfig = () => ({ { type: "iframe", aspect_ratio: "90%", - url: "https://embed.windy.com/embed2.html?rain,32.487,-84.023,5", + url: "https://embed.windy.com/embed2.html?lat=32.487&lon=-84.023&zoom=5&level=surface&overlay=rain&menu=&message=&marker=&calendar=&pressure=&type=map&location=coordinates&detail=&detailLat=32.487&detailLon=--84.023&metricWind=default&metricTemp=default&radarRange=-1", }, { type: "entities", diff --git a/demo/src/custom-cards/ha-demo-card.ts b/demo/src/custom-cards/ha-demo-card.ts index 85a8bd9ced..fe3f7afe65 100644 --- a/demo/src/custom-cards/ha-demo-card.ts +++ b/demo/src/custom-cards/ha-demo-card.ts @@ -10,6 +10,8 @@ import "@polymer/paper-icon-button"; import "@material/mwc-button"; import "@polymer/paper-spinner/paper-spinner-lite"; import "../../../src/components/ha-card"; +import "../../../src/components/ha-paper-icon-button-next"; +import "../../../src/components/ha-paper-icon-button-prev"; import { LovelaceCard, Lovelace } from "../../../src/panels/lovelace/types"; import { LovelaceCardConfig } from "../../../src/data/lovelace"; import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; @@ -47,12 +49,10 @@ export class HADemoCard extends LitElement implements LovelaceCard { return html`
- + >
${this._switching ? html` @@ -73,11 +73,10 @@ export class HADemoCard extends LitElement implements LovelaceCard { "" )}
- + >
Welcome home! You've reached the Home Assistant demo where we showcase diff --git a/setup.py b/setup.py index a6770e4a10..2a9f4977d5 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20190219.0", + version="20190220.0", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors", diff --git a/src/auth/ha-pick-auth-provider.js b/src/auth/ha-pick-auth-provider.js index 6e63f3a1d5..e7469b0637 100644 --- a/src/auth/ha-pick-auth-provider.js +++ b/src/auth/ha-pick-auth-provider.js @@ -5,6 +5,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import EventsMixin from "../mixins/events-mixin"; import { localizeLiteMixin } from "../mixins/localize-lite-mixin"; +import "../components/ha-icon-next"; /* * @appliesMixin EventsMixin @@ -26,7 +27,7 @@ class HaPickAuthProvider extends EventsMixin( `; diff --git a/src/components/ha-icon-next.ts b/src/components/ha-icon-next.ts new file mode 100644 index 0000000000..d6a16bc7bb --- /dev/null +++ b/src/components/ha-icon-next.ts @@ -0,0 +1,24 @@ +import "@polymer/iron-icon/iron-icon"; +// Not duplicate, this is for typing. +// tslint:disable-next-line +import { HaIcon } from "./ha-icon"; + +export class HaIconNext extends HaIcon { + public connectedCallback() { + this.icon = + window.getComputedStyle(this).direction === "ltr" + ? "hass:chevron-right" + : "hass:chevron-left"; + + // calling super after setting icon to have it consistently show the icon (otherwise not always shown) + super.connectedCallback(); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-icon-next": HaIconNext; + } +} + +customElements.define("ha-icon-next", HaIconNext); diff --git a/src/components/ha-icon-prev.ts b/src/components/ha-icon-prev.ts new file mode 100644 index 0000000000..8fa3c030e8 --- /dev/null +++ b/src/components/ha-icon-prev.ts @@ -0,0 +1,24 @@ +import "@polymer/iron-icon/iron-icon"; +// Not duplicate, this is for typing. +// tslint:disable-next-line +import { HaIcon } from "./ha-icon"; + +export class HaIconPrev extends HaIcon { + public connectedCallback() { + this.icon = + window.getComputedStyle(this).direction === "ltr" + ? "hass:chevron-left" + : "hass:chevron-right"; + + // calling super after setting icon to have it consistently show the icon (otherwise not always shown) + super.connectedCallback(); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-icon-prev": HaIconPrev; + } +} + +customElements.define("ha-icon-prev", HaIconPrev); diff --git a/src/components/ha-paper-icon-button-arrow-next.ts b/src/components/ha-paper-icon-button-arrow-next.ts new file mode 100644 index 0000000000..8d0914a0cb --- /dev/null +++ b/src/components/ha-paper-icon-button-arrow-next.ts @@ -0,0 +1,32 @@ +import { Constructor } from "lit-element"; +import "@polymer/paper-icon-button/paper-icon-button"; +// Not duplicate, this is for typing. +// tslint:disable-next-line +import { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; + +const paperIconButtonClass = customElements.get( + "paper-icon-button" +) as Constructor; + +export class HaPaperIconButtonArrowNext extends paperIconButtonClass { + public connectedCallback() { + this.icon = + window.getComputedStyle(this).direction === "ltr" + ? "hass:arrow-right" + : "hass:arrow-left"; + + // calling super after setting icon to have it consistently show the icon (otherwise not always shown) + super.connectedCallback(); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-paper-icon-button-arrow-next": HaPaperIconButtonArrowNext; + } +} + +customElements.define( + "ha-paper-icon-button-arrow-next", + HaPaperIconButtonArrowNext +); diff --git a/src/components/ha-paper-icon-button-arrow-prev.ts b/src/components/ha-paper-icon-button-arrow-prev.ts new file mode 100644 index 0000000000..acac478b8f --- /dev/null +++ b/src/components/ha-paper-icon-button-arrow-prev.ts @@ -0,0 +1,32 @@ +import { Constructor } from "lit-element"; +import "@polymer/paper-icon-button/paper-icon-button"; +// Not duplicate, this is for typing. +// tslint:disable-next-line +import { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; + +const paperIconButtonClass = customElements.get( + "paper-icon-button" +) as Constructor; + +export class HaPaperIconButtonArrowPrev extends paperIconButtonClass { + public connectedCallback() { + this.icon = + window.getComputedStyle(this).direction === "ltr" + ? "hass:arrow-left" + : "hass:arrow-right"; + + // calling super after setting icon to have it consistently show the icon (otherwise not always shown) + super.connectedCallback(); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-paper-icon-button-arrow-prev": HaPaperIconButtonArrowPrev; + } +} + +customElements.define( + "ha-paper-icon-button-arrow-prev", + HaPaperIconButtonArrowPrev +); diff --git a/src/components/ha-paper-icon-button-next.ts b/src/components/ha-paper-icon-button-next.ts new file mode 100644 index 0000000000..5a137fc2d3 --- /dev/null +++ b/src/components/ha-paper-icon-button-next.ts @@ -0,0 +1,29 @@ +import { Constructor } from "lit-element"; +import "@polymer/paper-icon-button/paper-icon-button"; +// Not duplicate, this is for typing. +// tslint:disable-next-line +import { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; + +const paperIconButtonClass = customElements.get( + "paper-icon-button" +) as Constructor; + +export class HaPaperIconButtonNext extends paperIconButtonClass { + public connectedCallback() { + this.icon = + window.getComputedStyle(this).direction === "ltr" + ? "hass:chevron-right" + : "hass:chevron-left"; + + // calling super after setting icon to have it consistently show the icon (otherwise not always shown) + super.connectedCallback(); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-paper-icon-button-next": HaPaperIconButtonNext; + } +} + +customElements.define("ha-paper-icon-button-next", HaPaperIconButtonNext); diff --git a/src/components/ha-paper-icon-button-prev.ts b/src/components/ha-paper-icon-button-prev.ts new file mode 100644 index 0000000000..06479fcd1f --- /dev/null +++ b/src/components/ha-paper-icon-button-prev.ts @@ -0,0 +1,29 @@ +import { Constructor } from "lit-element"; +import "@polymer/paper-icon-button/paper-icon-button"; +// Not duplicate, this is for typing. +// tslint:disable-next-line +import { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; + +const paperIconButtonClass = customElements.get( + "paper-icon-button" +) as Constructor; + +export class HaPaperIconButtonPrev extends paperIconButtonClass { + public connectedCallback() { + this.icon = + window.getComputedStyle(this).direction === "ltr" + ? "hass:chevron-left" + : "hass:chevron-right"; + + // calling super after setting icon to have it consistently show the icon (otherwise not always shown) + super.connectedCallback(); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-paper-icon-button-prev": HaPaperIconButtonPrev; + } +} + +customElements.define("ha-paper-icon-button-prev", HaPaperIconButtonPrev); diff --git a/src/data/system_log.ts b/src/data/system_log.ts index 540bb04289..49f93b79ee 100644 --- a/src/data/system_log.ts +++ b/src/data/system_log.ts @@ -7,6 +7,9 @@ export interface LoggedError { // unix timestamp in seconds timestamp: number; exception: string; + count: number; + // unix timestamp in seconds + first_occured: number; } export const fetchSystemLog = (hass: HomeAssistant) => diff --git a/src/dialogs/more-info/more-info-settings.js b/src/dialogs/more-info/more-info-settings.js index cac25ab0d7..f30cd1de4f 100644 --- a/src/dialogs/more-info/more-info-settings.js +++ b/src/dialogs/more-info/more-info-settings.js @@ -13,6 +13,7 @@ import computeDomain from "../../common/entity/compute_domain"; import isComponentLoaded from "../../common/config/is_component_loaded"; import { updateEntityRegistryEntry } from "../../data/entity_registry"; +import "../../components/ha-paper-icon-button-arrow-prev"; /* * @appliesMixin EventsMixin * @appliesMixin LocalizeMixin @@ -44,10 +45,9 @@ class MoreInfoSettings extends LocalizeMixin(EventsMixin(PolymerElement)) { - + >
[[_computeStateName(stateObj)]]
[[localize('ui.dialogs.more_info_settings.save')]] + + + + +
[[header]]
+ +
+
+ + +
+ `; + } + + static get properties() { + return { + header: String, + }; + } + + _backTapped() { + history.back(); + } +} + +customElements.define("hass-subpage", HassSubpage); diff --git a/src/panels/config/automation/ha-automation-editor.ts b/src/panels/config/automation/ha-automation-editor.ts index 93d1ab71ce..06003edcb2 100644 --- a/src/panels/config/automation/ha-automation-editor.ts +++ b/src/panels/config/automation/ha-automation-editor.ts @@ -15,6 +15,7 @@ import { classMap } from "lit-html/directives/class-map"; import { h, render } from "preact"; +import "../../../components/ha-paper-icon-button-arrow-prev"; import "../../../layouts/ha-app-layout"; import Automation from "../js/automation"; @@ -74,10 +75,9 @@ class HaAutomationEditor extends LitElement { - + >
${this.automation ? computeStateName(this.automation) diff --git a/src/panels/config/automation/ha-automation-picker.js b/src/panels/config/automation/ha-automation-picker.js index f7cb80df7f..348e7d4fef 100644 --- a/src/panels/config/automation/ha-automation-picker.js +++ b/src/panels/config/automation/ha-automation-picker.js @@ -8,10 +8,13 @@ import "@polymer/paper-item/paper-item"; import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; +import "../../../components/ha-paper-icon-button-arrow-prev"; import "../../../layouts/ha-app-layout"; import "../ha-config-section"; +import "../../../components/ha-icon-next"; + import NavigateMixin from "../../../mixins/navigate-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; import computeStateName from "../../../common/entity/compute_state_name"; @@ -64,10 +67,8 @@ class HaAutomationPicker extends LocalizeMixin(NavigateMixin(PolymerElement)) { - + +
[[localize('ui.panel.config.automation.caption')]]
@@ -101,7 +102,7 @@ class HaAutomationPicker extends LocalizeMixin(NavigateMixin(PolymerElement)) {
[[computeName(automation)]]
[[computeDescription(automation)]]
- + diff --git a/src/panels/config/cloud/ha-config-cloud-login.js b/src/panels/config/cloud/ha-config-cloud-login.js index ae607aabd1..170fe4d63c 100644 --- a/src/panels/config/cloud/ha-config-cloud-login.js +++ b/src/panels/config/cloud/ha-config-cloud-login.js @@ -15,7 +15,7 @@ import "../../../resources/ha-style"; import "../ha-config-section"; import EventsMixin from "../../../mixins/events-mixin"; import NavigateMixin from "../../../mixins/navigate-mixin"; - +import "../../../components/ha-icon-next"; /* * @appliesMixin NavigateMixin * @appliesMixin EventsMixin @@ -148,7 +148,7 @@ class HaConfigCloudLogin extends NavigateMixin(EventsMixin(PolymerElement)) { Start your free 1 month trial
No payment information necessary
- + diff --git a/src/panels/config/config-entries/ha-config-entries-dashboard.js b/src/panels/config/config-entries/ha-config-entries-dashboard.js index 276e8eb74e..386656f918 100644 --- a/src/panels/config/config-entries/ha-config-entries-dashboard.js +++ b/src/panels/config/config-entries/ha-config-entries-dashboard.js @@ -11,6 +11,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../components/entity/ha-state-icon"; import "../../../layouts/hass-subpage"; import "../../../resources/ha-style"; +import "../../../components/ha-icon-next"; import "../ha-config-section"; import EventsMixin from "../../../mixins/events-mixin"; @@ -109,7 +110,7 @@ class HaConfigManagerDashboard extends LocalizeMixin(
- + diff --git a/src/panels/config/customize/ha-config-customize.js b/src/panels/config/customize/ha-config-customize.js index 0be8d54886..8eee9254f0 100644 --- a/src/panels/config/customize/ha-config-customize.js +++ b/src/panels/config/customize/ha-config-customize.js @@ -6,6 +6,7 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../resources/ha-style"; +import "../../../components/ha-paper-icon-button-arrow-prev"; import "../ha-config-section"; import "../ha-entity-config"; @@ -27,10 +28,9 @@ class HaConfigCustomize extends LocalizeMixin(PolymerElement) { - + >
[[localize('ui.panel.config.customize.caption')]]
diff --git a/src/panels/config/dashboard/ha-config-dashboard.js b/src/panels/config/dashboard/ha-config-dashboard.js index f6338ba5f9..e931f4d54e 100644 --- a/src/panels/config/dashboard/ha-config-dashboard.js +++ b/src/panels/config/dashboard/ha-config-dashboard.js @@ -9,6 +9,7 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../components/ha-menu-button"; +import "../../../components/ha-icon-next"; import "../ha-config-section"; import "./ha-config-navigation"; @@ -66,7 +67,7 @@ class HaConfigDashboard extends NavigateMixin(LocalizeMixin(PolymerElement)) {
- + @@ -81,7 +82,7 @@ class HaConfigDashboard extends NavigateMixin(LocalizeMixin(PolymerElement)) { [[localize('ui.panel.config.integrations.description')]] - + @@ -93,7 +94,7 @@ class HaConfigDashboard extends NavigateMixin(LocalizeMixin(PolymerElement)) { [[localize('ui.panel.config.users.description')]] - + diff --git a/src/panels/config/dashboard/ha-config-navigation.js b/src/panels/config/dashboard/ha-config-navigation.js index eb74814757..083e4e0487 100644 --- a/src/panels/config/dashboard/ha-config-navigation.js +++ b/src/panels/config/dashboard/ha-config-navigation.js @@ -10,6 +10,8 @@ import LocalizeMixin from "../../../mixins/localize-mixin"; import isComponentLoaded from "../../../common/config/is_component_loaded"; +import "../../../components/ha-icon-next"; + const CORE_PAGES = ["core", "customize", "entity_registry", "area_registry"]; /* * @appliesMixin LocalizeMixin @@ -34,7 +36,7 @@ class HaConfigNavigation extends LocalizeMixin(NavigateMixin(PolymerElement)) { [[_computeCaption(item, localize)]]
[[_computeDescription(item, localize)]]
- + diff --git a/src/panels/config/script/ha-script-editor.js b/src/panels/config/script/ha-script-editor.js index 9f6847634a..756de22e45 100644 --- a/src/panels/config/script/ha-script-editor.js +++ b/src/panels/config/script/ha-script-editor.js @@ -7,6 +7,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import { h, render } from "preact"; import "../../../layouts/ha-app-layout"; +import "../../../components/ha-paper-icon-button-arrow-prev"; import Script from "../js/script"; import unmountPreact from "../../../common/preact/unmount"; @@ -98,10 +99,9 @@ class HaScriptEditor extends LocalizeMixin(NavigateMixin(PolymerElement)) { - + >
Script [[computeName(script)]]
diff --git a/src/panels/config/script/ha-script-picker.js b/src/panels/config/script/ha-script-picker.js index 4af0f9fe20..9d68400551 100644 --- a/src/panels/config/script/ha-script-picker.js +++ b/src/panels/config/script/ha-script-picker.js @@ -11,6 +11,8 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import { computeRTL } from "../../../common/util/compute_rtl"; import "../../../layouts/ha-app-layout"; +import "../../../components/ha-icon-next"; +import "../../../components/ha-paper-icon-button-arrow-prev"; import "../ha-config-section"; @@ -65,10 +67,9 @@ class HaScriptPicker extends LocalizeMixin(NavigateMixin(PolymerElement)) { - + >
[[localize('ui.panel.config.script.caption')]]
@@ -99,7 +100,7 @@ class HaScriptPicker extends LocalizeMixin(NavigateMixin(PolymerElement)) {
[[computeName(script)]]
[[computeDescription(script)]]
- + diff --git a/src/panels/config/users/ha-config-user-picker.js b/src/panels/config/users/ha-config-user-picker.js index 611dbd2f30..aa028cf4c3 100644 --- a/src/panels/config/users/ha-config-user-picker.js +++ b/src/panels/config/users/ha-config-user-picker.js @@ -6,6 +6,7 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../layouts/hass-subpage"; +import "../../../components/ha-icon-next"; import LocalizeMixin from "../../../mixins/localize-mixin"; import NavigateMixin from "../../../mixins/navigate-mixin"; @@ -71,7 +72,7 @@ class HaUserPicker extends EventsMixin( - + diff --git a/src/panels/config/zha/ha-config-zha.ts b/src/panels/config/zha/ha-config-zha.ts old mode 100644 new mode 100755 index 40cf67620f..ef9c06b59e --- a/src/panels/config/zha/ha-config-zha.ts +++ b/src/panels/config/zha/ha-config-zha.ts @@ -12,6 +12,7 @@ import { HassEntity } from "home-assistant-js-websocket"; import { HASSDomEvent } from "../../../common/dom/fire_event"; import { Cluster } from "../../../data/zha"; import "../../../layouts/ha-app-layout"; +import "../../../components/ha-paper-icon-button-arrow-prev"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; import { ZHAClusterSelectedParams, ZHANodeSelectedParams } from "./types"; @@ -40,10 +41,9 @@ export class HaConfigZha extends LitElement { - + >
Zigbee Home Automation
diff --git a/src/panels/config/zwave/ha-config-zwave.js b/src/panels/config/zwave/ha-config-zwave.js index da3a8f1c12..81f536dfb4 100644 --- a/src/panels/config/zwave/ha-config-zwave.js +++ b/src/panels/config/zwave/ha-config-zwave.js @@ -12,6 +12,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../components/buttons/ha-call-service-button"; import "../../../components/ha-menu-button"; import "../../../components/ha-service-description"; +import "../../../components/ha-paper-icon-button-arrow-prev"; import "../../../layouts/ha-app-layout"; import "../../../resources/ha-style"; @@ -85,10 +86,9 @@ class HaConfigZwave extends LocalizeMixin(EventsMixin(PolymerElement)) { - + >
[[localize('ui.panel.config.zwave.caption')]]
diff --git a/src/panels/dev-event/event-subscribe-card.ts b/src/panels/dev-event/event-subscribe-card.ts new file mode 100644 index 0000000000..cc0196b235 --- /dev/null +++ b/src/panels/dev-event/event-subscribe-card.ts @@ -0,0 +1,128 @@ +import { + LitElement, + customElement, + TemplateResult, + html, + property, + CSSResult, + css, +} from "lit-element"; +import "@material/mwc-button"; +import "@polymer/paper-input/paper-input"; +import { HassEvent } from "home-assistant-js-websocket"; +import { HomeAssistant } from "../../types"; +import { PolymerChangedEvent } from "../../polymer-types"; +import "../../components/ha-card"; +import format_time from "../../common/datetime/format_time"; + +@customElement("event-subscribe-card") +class EventSubscribeCard extends LitElement { + @property() public hass?: HomeAssistant; + @property() private _eventType = ""; + @property() private _subscribed?: () => void; + @property() private _events: Array<{ id: number; event: HassEvent }> = []; + private _eventCount = 0; + + public disconnectedCallback() { + super.disconnectedCallback(); + if (this._subscribed) { + this._subscribed(); + this._subscribed = undefined; + } + } + + protected render(): TemplateResult { + return html` + +
+ + + ${this._subscribed ? "Stop listening" : "Start listening"} + +
+
+ ${this._events.map( + (ev) => html` +
+ Event ${ev.id} fired + ${format_time( + new Date(ev.event.time_fired), + this.hass!.language + )}: +
${JSON.stringify(ev.event, null, 4)}
+
+ ` + )} +
+
+ `; + } + + private _valueChanged(ev: PolymerChangedEvent): void { + this._eventType = ev.detail.value; + } + + private async _handleSubmit(): Promise { + if (this._subscribed) { + this._subscribed(); + this._subscribed = undefined; + } else { + this._subscribed = await this.hass!.connection.subscribeEvents( + (event) => { + const tail = + this._events.length > 30 ? this._events.slice(0, 29) : this._events; + this._events = [ + { + event, + id: this._eventCount++, + }, + ...tail, + ]; + }, + this._eventType + ); + } + } + + static get styles(): CSSResult { + return css` + form { + display: block; + padding: 16px; + } + paper-input { + display: inline-block; + width: 200px; + } + .events { + margin: -16px 0; + padding: 0 16px; + } + .event { + border-bottom: 1px solid var(--divider-color); + padding-bottom: 16px; + margin: 16px 0; + } + .event:last-child { + border-bottom: 0; + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "event-subscribe-card": EventSubscribeCard; + } +} diff --git a/src/panels/dev-event/ha-panel-dev-event.js b/src/panels/dev-event/ha-panel-dev-event.js index 8ad0511d49..6ca1a1f9a1 100644 --- a/src/panels/dev-event/ha-panel-dev-event.js +++ b/src/panels/dev-event/ha-panel-dev-event.js @@ -11,6 +11,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../components/ha-menu-button"; import "../../resources/ha-style"; import "./events-list"; +import "./event-subscribe-card"; import EventsMixin from "../../mixins/events-mixin"; /* @@ -40,6 +41,12 @@ class HaPanelDevEvent extends EventsMixin(PolymerElement) { .header { @apply --paper-font-title; } + + event-subscribe-card { + display: block; + max-width: 800px; + margin: 16px auto; + } @@ -53,32 +60,35 @@ class HaPanelDevEvent extends EventsMixin(PolymerElement) {
-
-
-

Fire an event on the event bus.

+
+
+
+

Fire an event on the event bus.

-
- - - Fire Event +
+ + + Fire Event +
+
+ +
+
Available Events
+
- -
-
Available Events
- -
+
`; @@ -138,7 +148,7 @@ class HaPanelDevEvent extends EventsMixin(PolymerElement) { } computeFormClasses(narrow) { - return narrow ? "content fit" : "content fit layout horizontal"; + return narrow ? "" : "layout horizontal"; } } diff --git a/src/panels/dev-info/system-log-card.ts b/src/panels/dev-info/system-log-card.ts index 59c11ca61c..8f4c17c15b 100644 --- a/src/panels/dev-info/system-log-card.ts +++ b/src/panels/dev-info/system-log-card.ts @@ -68,6 +68,16 @@ class SystemLogCard extends LitElement { this.hass!.language )} ${item.source} (${item.level}) + ${item.count > 1 + ? html` + - message first occured at + ${formatLogTime( + item.first_occured, + this.hass!.language + )} + and shows up ${item.count} times + ` + : html``}
diff --git a/src/panels/lovelace/components/notifications/hui-notification-drawer.js b/src/panels/lovelace/components/notifications/hui-notification-drawer.js index 5b3aa7037b..4cb33646f4 100644 --- a/src/panels/lovelace/components/notifications/hui-notification-drawer.js +++ b/src/panels/lovelace/components/notifications/hui-notification-drawer.js @@ -6,6 +6,7 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import "./hui-notification-item"; +import "../../../../components/ha-paper-icon-button-next"; import EventsMixin from "../../../../mixins/events-mixin"; import LocalizeMixin from "../../../../mixins/localize-mixin"; @@ -121,7 +122,7 @@ export class HuiNotificationDrawer extends EventsMixin(
[[localize('ui.notification_drawer.title')]]
- +