diff --git a/pyproject.toml b/pyproject.toml index 2edefde21d..7c8db591ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "home-assistant-frontend" -version = "20220727.0" +version = "20220728.0" license = {text = "Apache-2.0"} description = "The Home Assistant frontend" readme = "README.md" diff --git a/src/components/map/ha-map.ts b/src/components/map/ha-map.ts index a123414675..ce395d170b 100644 --- a/src/components/map/ha-map.ts +++ b/src/components/map/ha-map.ts @@ -453,6 +453,7 @@ export class HaMap extends ReactiveElement { } #map.dark { background: #090909; + --map-filter: invert(0.9) hue-rotate(170deg) grayscale(0.7); } .light { color: #000000; @@ -464,7 +465,7 @@ export class HaMap extends ReactiveElement { filter: var(--map-filter); } .dark .leaflet-bar a { - background: var(--card-background-color); + background-color: var(--card-background-color, #1c1c1c); color: #ffffff; } .leaflet-marker-draggable { diff --git a/src/data/config_flow.ts b/src/data/config_flow.ts index c236a1b05c..001b321dce 100644 --- a/src/data/config_flow.ts +++ b/src/data/config_flow.ts @@ -6,16 +6,17 @@ import { DataEntryFlowProgress, DataEntryFlowStep } from "./data_entry_flow"; import { domainToName } from "./integration"; export const DISCOVERY_SOURCES = [ - "usb", - "unignore", + "bluetooth", "dhcp", - "homekit", - "ssdp", - "zeroconf", "discovery", + "hassio", + "homekit", "integration_discovery", "mqtt", - "hassio", + "ssdp", + "unignore", + "usb", + "zeroconf", ]; export const ATTENTION_SOURCES = ["reauth"]; diff --git a/src/data/repairs.ts b/src/data/repairs.ts index 48577448fa..92a175f753 100644 --- a/src/data/repairs.ts +++ b/src/data/repairs.ts @@ -7,6 +7,7 @@ import type { DataEntryFlowStep } from "./data_entry_flow"; export interface RepairsIssue { domain: string; + issue_domain?: string; issue_id: string; active: boolean; is_fixable: boolean; diff --git a/src/dialogs/config-flow/step-flow-pick-handler.ts b/src/dialogs/config-flow/step-flow-pick-handler.ts index fdd0e12ebc..21fa545da3 100644 --- a/src/dialogs/config-flow/step-flow-pick-handler.ts +++ b/src/dialogs/config-flow/step-flow-pick-handler.ts @@ -21,6 +21,7 @@ import { LocalizeFunc } from "../../common/translations/localize"; import "../../components/ha-icon-next"; import "../../components/search-input"; import { domainToName } from "../../data/integration"; +import { haStyleScrollbar } from "../../resources/styles"; import { HomeAssistant } from "../../types"; import { brandsUrl } from "../../util/brands-url"; import { documentationUrl } from "../../util/documentation-url"; @@ -143,6 +144,7 @@ class StepFlowPickHandler extends LitElement { width: `${this._width}px`, height: `${this._height}px`, })} + class="ha-scrollbar" > ${addDeviceRows.length ? html` @@ -321,6 +323,7 @@ class StepFlowPickHandler extends LitElement { static get styles(): CSSResultGroup { return [ configFlowContentStyles, + haStyleScrollbar, css` img { width: 40px; diff --git a/src/panels/config/core/ha-config-section-updates.ts b/src/panels/config/core/ha-config-section-updates.ts index e7f11d6318..4b2da37924 100644 --- a/src/panels/config/core/ha-config-section-updates.ts +++ b/src/panels/config/core/ha-config-section-updates.ts @@ -1,15 +1,16 @@ -import type { ActionDetail } from "@material/mwc-list"; -import "@material/mwc-list/mwc-list-item"; +import { RequestSelectedDetail } from "@material/mwc-list/mwc-list-item"; import { mdiDotsVertical, mdiRefresh } from "@mdi/js"; import { HassEntities } from "home-assistant-js-websocket"; import { css, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; import memoizeOne from "memoize-one"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; +import { shouldHandleRequestSelectedEvent } from "../../../common/mwc/handle-request-selected-event"; import "../../../components/ha-alert"; import "../../../components/ha-bar"; import "../../../components/ha-button-menu"; import "../../../components/ha-card"; +import "../../../components/ha-check-list-item"; import "../../../components/ha-metric"; import { extractApiErrorMessage } from "../../../data/hassio/common"; import { @@ -72,20 +73,23 @@ class HaConfigSectionUpdates extends LitElement { .path=${mdiRefresh} @click=${this._checkUpdates} > - + - - ${this._showSkipped - ? this.hass.localize("ui.panel.config.updates.hide_skipped") - : this.hass.localize("ui.panel.config.updates.show_skipped")} - + + ${this.hass.localize("ui.panel.config.updates.show_skipped")} + ${this._supervisorInfo?.channel !== "dev" ? html` - +
  • + ${this._supervisorInfo?.channel === "stable" ? this.hass.localize("ui.panel.config.updates.join_beta") : this.hass.localize( @@ -122,18 +126,21 @@ class HaConfigSectionUpdates extends LitElement { `; } - private _handleAction(ev: CustomEvent) { - switch (ev.detail.index) { - case 0: - this._showSkipped = !this._showSkipped; - break; - case 1: - this._toggleBeta(); - break; + private _toggleSkipped(ev: CustomEvent): void { + if (ev.detail.source !== "property") { + return; } + + this._showSkipped = !this._showSkipped; } - private async _toggleBeta(): Promise { + private async _toggleBeta( + ev: CustomEvent + ): Promise { + if (!shouldHandleRequestSelectedEvent(ev)) { + return; + } + if (this._supervisorInfo!.channel === "stable") { const confirmed = await showConfirmationDialog(this, { title: this.hass.localize("ui.dialogs.join_beta_channel.title"), @@ -206,6 +213,9 @@ class HaConfigSectionUpdates extends LitElement { .no-updates { padding: 16px; } + li[divider] { + border-bottom-color: var(--divider-color); + } `; } diff --git a/src/panels/config/repairs/dialog-integration-startup.ts b/src/panels/config/repairs/dialog-integration-startup.ts index 971be731f6..edc9c96aa6 100644 --- a/src/panels/config/repairs/dialog-integration-startup.ts +++ b/src/panels/config/repairs/dialog-integration-startup.ts @@ -1,5 +1,5 @@ import "@material/mwc-button/mwc-button"; -import { CSSResultGroup, html, LitElement, TemplateResult } from "lit"; +import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; import { fireEvent } from "../../../common/dom/fire_event"; import "../../../components/ha-card"; @@ -31,13 +31,14 @@ class DialogIntegrationStartup extends LitElement { return html`
    - ${this.hass.localize( - "ui.panel.config.repairs.dialog.alert_not_fixable" - )} - ${this._issue.breaks_in_ha_version - ? this.hass.localize( - "ui.panel.config.repairs.dialog.breaks_in_version", - { version: this._issue.breaks_in_ha_version } - ) - : ""} - + ${this._issue.breaks_in_ha_version + ? html` + + ${this.hass.localize( + "ui.panel.config.repairs.dialog.breaks_in_version", + { version: this._issue.breaks_in_ha_version } + )} + + ` + : ""} ` : ""} +
    + ${this.hass.localize( + `ui.panel.config.repairs.${this._issue.severity}` + )} + + - + ${this._issue.created + ? new Date(this._issue.created).toLocaleDateString( + this.hass.language + ) + : ""} +
    ${this._issue.learn_more_url ? html` @@ -137,6 +143,18 @@ class DialogRepairsIssue extends LitElement { .dismissed { font-style: italic; } + .secondary { + margin-top: 8px; + text-align: right; + color: var(--secondary-text-color); + } + .error, + .critical { + color: var(--error-color); + } + .warning { + color: var(--warning-color); + } `, ]; } diff --git a/src/panels/config/repairs/ha-config-repairs-dashboard.ts b/src/panels/config/repairs/ha-config-repairs-dashboard.ts index 3f60e5f2ca..0c837ac7f3 100644 --- a/src/panels/config/repairs/ha-config-repairs-dashboard.ts +++ b/src/panels/config/repairs/ha-config-repairs-dashboard.ts @@ -7,6 +7,7 @@ import memoizeOne from "memoize-one"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; import { shouldHandleRequestSelectedEvent } from "../../../common/mwc/handle-request-selected-event"; import "../../../components/ha-card"; +import "../../../components/ha-check-list-item"; import { RepairsIssue, severitySort, @@ -65,12 +66,20 @@ class HaConfigRepairsDashboard extends SubscribeMixin(LitElement) { .header=${this.hass.localize("ui.panel.config.repairs.caption")} >
    - + + + ${this.hass.localize("ui.panel.config.repairs.show_ignored")} + +
  • ${isComponentLoaded(this.hass, "system_health") || isComponentLoaded(this.hass, "hassio") ? html` @@ -90,11 +99,6 @@ class HaConfigRepairsDashboard extends SubscribeMixin(LitElement) { "ui.panel.config.repairs.integration_startup_time" )} - - ${this._showIgnored - ? this.hass.localize("ui.panel.config.repairs.hide_ignored") - : this.hass.localize("ui.panel.config.repairs.show_ignored")} -
    @@ -143,7 +147,7 @@ class HaConfigRepairsDashboard extends SubscribeMixin(LitElement) { } private _toggleIgnored(ev: CustomEvent): void { - if (!shouldHandleRequestSelectedEvent(ev)) { + if (ev.detail.source !== "property") { return; } @@ -177,6 +181,9 @@ class HaConfigRepairsDashboard extends SubscribeMixin(LitElement) { .no-repairs { padding: 16px; } + li[divider] { + border-bottom-color: var(--divider-color); + } `; } diff --git a/src/panels/config/repairs/ha-config-repairs.ts b/src/panels/config/repairs/ha-config-repairs.ts index e516822113..2cadd4a9b9 100644 --- a/src/panels/config/repairs/ha-config-repairs.ts +++ b/src/panels/config/repairs/ha-config-repairs.ts @@ -2,6 +2,7 @@ import "@material/mwc-list/mwc-list"; import { css, html, LitElement, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators"; import { relativeTime } from "../../../common/datetime/relative_time"; +import { capitalizeFirstLetter } from "../../../common/string/capitalize-first-letter"; import "../../../components/ha-alert"; import "../../../components/ha-card"; import "../../../components/ha-list-item"; @@ -44,7 +45,7 @@ class HaConfigRepairs extends LitElement { (issue) => html` ${this.hass.localize( `component.${issue.domain}.issues.${ issue.translation_key || issue.issue_id - }.title` + }.title`, + issue.translation_placeholders || {} )} + ${issue.severity === "critical" || issue.severity === "error" + ? html`${this.hass.localize( + `ui.panel.config.repairs.${issue.severity}` + )}` + : ""} + ${(issue.severity === "critical" || + issue.severity === "error") && + issue.created + ? " - " + : ""} ${issue.created - ? relativeTime(new Date(issue.created), this.hass.locale) + ? capitalizeFirstLetter( + relativeTime(new Date(issue.created), this.hass.locale) + ) : ""} ${issue.ignored ? ` - ${this.hass.localize( @@ -113,6 +129,9 @@ class HaConfigRepairs extends LitElement { .ignored { opacity: var(--light-secondary-opacity); } + ha-list-item { + --mdc-list-item-graphic-size: 40px; + } button.show-more { color: var(--primary-color); text-align: left; @@ -133,6 +152,9 @@ class HaConfigRepairs extends LitElement { cursor: pointer; font-size: 16px; } + .error { + color: var(--error-color); + } `; } diff --git a/src/panels/my/ha-panel-my.ts b/src/panels/my/ha-panel-my.ts index 93b3c3226f..122a93c8d9 100644 --- a/src/panels/my/ha-panel-my.ts +++ b/src/panels/my/ha-panel-my.ts @@ -149,6 +149,10 @@ export const getMyRedirects = (hasSupervisor: boolean): Redirects => ({ logs: { redirect: "/config/logs", }, + repairs: { + component: "repairs", + redirect: "/config/repairs", + }, info: { redirect: "/config/info", }, diff --git a/src/translations/en.json b/src/translations/en.json index 117feb5073..13084e5d84 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -577,7 +577,7 @@ "title": "Media Management", "manage": "Manage", "no_items": "No media items found", - "folders_not_supported": "Folders can not be managed via the UI.", + "folders_not_supported": "Folders cannot be managed via the UI.", "highlight_button": "Click here to upload your first media", "upload_failed": "Upload failed: {reason}", "add_media": "Add Media", @@ -1220,8 +1220,7 @@ "version_available": "Version {version_available} is available", "more_updates": "Show all updates", "show": "show", - "show_skipped": "Show skipped", - "hide_skipped": "Hide skipped", + "show_skipped": "Show skipped updates", "join_beta": "[%key:supervisor::system::supervisor::join_beta_action%]", "leave_beta": "[%key:supervisor::system::supervisor::leave_beta_action%]", "skipped": "Skipped" @@ -1232,8 +1231,7 @@ "title": "{count} {count, plural,\n one {repair}\n other {repairs}\n}", "no_repairs": "There are currently no repairs available", "more_repairs": "Show all repairs", - "show_ignored": "Show ignored", - "hide_ignored": "Hide ignored", + "show_ignored": "Show ignored repairs", "critical": "Critical", "error": "Error", "warning": "Warning", @@ -1246,8 +1244,7 @@ "learn": "Learn more", "ignore": "Ignore", "unignore": "Unignore", - "alert_not_fixable": "We can not repair this issue for you.", - "breaks_in_version": "This will break in version {version}. Please fix this issue before upgrading.", + "breaks_in_version": "This stops working in version {version}. Please address before upgrading.", "ignored_in_version_short": "Ignored in version {version}", "ignored_in_version": "This issue was ignored in version {version}." }