diff --git a/build-scripts/gulp/fetch-nightly-translations.cjs b/build-scripts/gulp/fetch-nightly-translations.cjs index 13795995e1..a0c986bd56 100644 --- a/build-scripts/gulp/fetch-nightly-translations.cjs +++ b/build-scripts/gulp/fetch-nightly-translations.cjs @@ -8,6 +8,7 @@ const gulp = require("gulp"); const jszip = require("jszip"); const tar = require("tar"); const { Octokit } = require("@octokit/rest"); +const { retry } = require("@octokit/plugin-retry"); const { createOAuthDeviceAuth } = require("@octokit/auth-oauth-device"); const MAX_AGE = 24; // hours @@ -95,7 +96,7 @@ gulp.task("fetch-nightly-translations", async function () { // Authenticate with token and request workflow runs from GitHub console.log("Fetching new translations..."); - const octokit = new Octokit({ + const octokit = new (Octokit.plugin(retry))({ userAgent: "Fetch Nightly Translations", auth: tokenAuth.token, }); diff --git a/package.json b/package.json index 99ad81844b..b8e655dc0f 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "xss": "1.0.14" }, "devDependencies": { - "@babel/core": "7.21.3", + "@babel/core": "7.21.4", "@babel/plugin-external-helpers": "7.18.6", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-decorators": "7.21.0", @@ -158,10 +158,11 @@ "@babel/plugin-syntax-dynamic-import": "7.8.3", "@babel/plugin-syntax-import-meta": "7.10.4", "@babel/plugin-syntax-top-level-await": "7.14.5", - "@babel/preset-env": "7.20.2", - "@babel/preset-typescript": "7.21.0", + "@babel/preset-env": "7.21.4", + "@babel/preset-typescript": "7.21.4", "@koa/cors": "4.0.0", "@octokit/auth-oauth-device": "4.0.4", + "@octokit/plugin-retry": "4.1.3", "@octokit/rest": "19.0.7", "@open-wc/dev-server-hmr": "0.1.4", "@rollup/plugin-babel": "6.0.3", diff --git a/pyproject.toml b/pyproject.toml index 7396a23278..97f2c429bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "home-assistant-frontend" -version = "20230401.0" +version = "20230403.0" license = {text = "Apache-2.0"} description = "The Home Assistant frontend" readme = "README.md" diff --git a/src/components/ha-control-select.ts b/src/components/ha-control-select.ts index c2e56a5e73..1a48c0574c 100644 --- a/src/components/ha-control-select.ts +++ b/src/components/ha-control-select.ts @@ -310,6 +310,8 @@ export class HaControlSelect extends LitElement { .option .content span { display: block; width: 100%; + -webkit-hyphens: auto; + -moz-hyphens: auto; hyphens: auto; } :host([vertical]) { diff --git a/src/components/ha-drawer.ts b/src/components/ha-drawer.ts index dd1a6d99be..5fcfd031c6 100644 --- a/src/components/ha-drawer.ts +++ b/src/components/ha-drawer.ts @@ -1,16 +1,75 @@ +import { + DIRECTION_LEFT, + DIRECTION_RIGHT, + Manager, + Swipe, +} from "@egjs/hammerjs"; import { DrawerBase } from "@material/mwc-drawer/mwc-drawer-base"; import { styles } from "@material/mwc-drawer/mwc-drawer.css"; -import { css } from "lit"; -import { customElement } from "lit/decorators"; +import { css, PropertyValues } from "lit"; +import { customElement, property } from "lit/decorators"; +import { fireEvent } from "../common/dom/fire_event"; + +const blockingElements = (document as any).$blockingElements; @customElement("ha-drawer") export class HaDrawer extends DrawerBase { + @property() public direction: "ltr" | "rtl" = "ltr"; + + private _mc?: HammerManager; + + protected createAdapter() { + return { + ...super.createAdapter(), + trapFocus: () => { + blockingElements.push(this); + this.appContent.inert = true; + document.body.style.overflow = "hidden"; + }, + releaseFocus: () => { + blockingElements.remove(this); + this.appContent.inert = false; + document.body.style.overflow = ""; + }, + }; + } + + protected updated(changedProps: PropertyValues) { + super.updated(changedProps); + if (changedProps.has("direction")) { + this.mdcRoot.dir = this.direction; + } + if (changedProps.has("open") && this.open && this.type === "modal") { + this._mc = new Manager(document, { + touchAction: "pan-y", + }); + this._mc.add( + new Swipe({ + direction: + this.direction === "rtl" ? DIRECTION_RIGHT : DIRECTION_LEFT, + }) + ); + this._mc.on("swipeleft swiperight", () => { + fireEvent(this, "hass-toggle-menu", { open: false }); + }); + } else if (this._mc) { + this._mc.destroy(); + this._mc = undefined; + } + } + static override styles = [ styles, css` .mdc-drawer { top: 0; } + .mdc-drawer.mdc-drawer--modal.mdc-drawer--open { + z-index: 200; + } + .mdc-drawer-app-content { + transform: translateZ(0); + } `, ]; } diff --git a/src/components/ha-sidebar.ts b/src/components/ha-sidebar.ts index 156b4e777c..7036ab6d71 100644 --- a/src/components/ha-sidebar.ts +++ b/src/components/ha-sidebar.ts @@ -28,8 +28,8 @@ import { CSSResultGroup, html, LitElement, - PropertyValues, nothing, + PropertyValues, } from "lit"; import { customElement, eventOptions, property, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; diff --git a/src/components/ha-top-app-bar-fixed.ts b/src/components/ha-top-app-bar-fixed.ts index 49501ac01b..d75c74f651 100644 --- a/src/components/ha-top-app-bar-fixed.ts +++ b/src/components/ha-top-app-bar-fixed.ts @@ -1,19 +1,43 @@ import { TopAppBarFixedBase } from "@material/mwc-top-app-bar-fixed/mwc-top-app-bar-fixed-base"; import { styles } from "@material/mwc-top-app-bar/mwc-top-app-bar.css"; import { css } from "lit"; -import { customElement } from "lit/decorators"; +import { customElement, property } from "lit/decorators"; + +let drawerContent: HTMLElement | undefined; @customElement("ha-top-app-bar-fixed") export class HaTopAppBarFixed extends TopAppBarFixedBase { + private get _drawerContent() { + if (!drawerContent) { + drawerContent = document + .querySelector("home-assistant")! + .renderRoot.querySelector("home-assistant-main")! + .renderRoot.querySelector("ha-drawer")! + .renderRoot.querySelector(".mdc-drawer-app-content") as HTMLElement; + } + return drawerContent; + } + + @property({ type: Object }) + get scrollTarget() { + return this._scrollTarget || this._drawerContent || window; + } + + protected updateRootPosition() {} + static override styles = [ styles, css` + .mdc-top-app-bar { + position: sticky; + top: 0; + } .mdc-top-app-bar__row { height: var(--header-height); border-bottom: var(--app-header-border-bottom); } .mdc-top-app-bar--fixed-adjust { - padding-top: var(--header-height); + padding-top: 0; } .mdc-top-app-bar { --mdc-typography-headline6-font-weight: 400; diff --git a/src/data/alarm_control_panel.ts b/src/data/alarm_control_panel.ts index d5f59d595d..2c1a8ea489 100644 --- a/src/data/alarm_control_panel.ts +++ b/src/data/alarm_control_panel.ts @@ -53,53 +53,46 @@ export const callAlarmAction = ( }; export type AlarmMode = - | "away" - | "home" - | "night" - | "vacation" - | "custom_bypass" + | "armed_home" + | "armed_away" + | "armed_night" + | "armed_vacation" + | "armed_custom_bypass" | "disarmed"; type AlarmConfig = { service: string; feature?: AlarmControlPanelEntityFeature; - state: string; path: string; }; export const ALARM_MODES: Record = { - away: { - feature: AlarmControlPanelEntityFeature.ARM_AWAY, - service: "alarm_arm_away", - state: "armed_away", - path: mdiLock, - }, - home: { + armed_home: { feature: AlarmControlPanelEntityFeature.ARM_HOME, service: "alarm_arm_home", - state: "armed_home", path: mdiHome, }, - custom_bypass: { - feature: AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS, - service: "alarm_arm_custom_bypass", - state: "armed_custom_bypass", - path: mdiShield, + armed_away: { + feature: AlarmControlPanelEntityFeature.ARM_AWAY, + service: "alarm_arm_away", + path: mdiLock, }, - night: { + armed_night: { feature: AlarmControlPanelEntityFeature.ARM_NIGHT, service: "alarm_arm_night", - state: "armed_night", path: mdiMoonWaningCrescent, }, - vacation: { + armed_vacation: { feature: AlarmControlPanelEntityFeature.ARM_VACATION, service: "alarm_arm_vacation", - state: "armed_vacation", path: mdiAirplane, }, + armed_custom_bypass: { + feature: AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS, + service: "alarm_arm_custom_bypass", + path: mdiShield, + }, disarmed: { service: "alarm_disarm", - state: "disarmed", path: mdiShieldOff, }, }; diff --git a/src/data/hassio/host.ts b/src/data/hassio/host.ts index 136bd17d57..dd3c8cce33 100644 --- a/src/data/hassio/host.ts +++ b/src/data/hassio/host.ts @@ -28,8 +28,19 @@ export interface HassioHassOSInfo { data_disk: string; } +export interface Datadisk { + name: string; + vendor: string; + model: string; + serial: string; + size: number; + id: string; + dev_path: string; +} + export interface DatadiskList { devices: string[]; + disks: Datadisk[]; } export const fetchHassioHostInfo = async ( diff --git a/src/data/selector.ts b/src/data/selector.ts index 91119bc2ec..3ee0d020b7 100644 --- a/src/data/selector.ts +++ b/src/data/selector.ts @@ -389,8 +389,8 @@ export const filterSelectorEntities = ( if (filterSupportedFeature) { if ( - ensureArray(filterSupportedFeature).some( - (feature) => !supportsFeature(entity, feature) + !ensureArray(filterSupportedFeature).some((feature) => + supportsFeature(entity, feature) ) ) { return false; diff --git a/src/data/thread.ts b/src/data/thread.ts index cd575fcb04..0af2cbd273 100644 --- a/src/data/thread.ts +++ b/src/data/thread.ts @@ -18,6 +18,7 @@ export interface ThreadDataSet { network_name: string; extended_pan_id?: string; pan_id?: string; + channel?: number; } export interface ThreadRouterDiscoveryEvent { diff --git a/src/dialogs/make-dialog-manager.ts b/src/dialogs/make-dialog-manager.ts index 3d90a421f6..9cfb685ad0 100644 --- a/src/dialogs/make-dialog-manager.ts +++ b/src/dialogs/make-dialog-manager.ts @@ -62,7 +62,7 @@ export const showDialog = async ( dialogParams: unknown, dialogImport?: () => Promise, addHistory = true -) => { +): Promise => { if (!(dialogTag in LOADED)) { if (!dialogImport) { if (__DEV__) { @@ -71,7 +71,7 @@ export const showDialog = async ( "Asked to show dialog that's not loaded and can't be imported" ); } - return; + return false; } LOADED[dialogTag] = { element: dialogImport().then(() => { @@ -128,6 +128,8 @@ export const showDialog = async ( // so it's guaranteed to be on top of the other elements root.appendChild(dialogElement); dialogElement.showDialog(dialogParams); + + return true; }; export const replaceDialog = (dialogElement: HassDialog) => { diff --git a/src/dialogs/more-info/components/alarm_control_panel/ha-more-info-alarm_control_panel-modes.ts b/src/dialogs/more-info/components/alarm_control_panel/ha-more-info-alarm_control_panel-modes.ts index 4e3ade78e1..ea8881c5b5 100644 --- a/src/dialogs/more-info/components/alarm_control_panel/ha-more-info-alarm_control_panel-modes.ts +++ b/src/dialogs/more-info/components/alarm_control_panel/ha-more-info-alarm_control_panel-modes.ts @@ -40,9 +40,7 @@ export class HaMoreInfoAlarmControlPanelModes extends LitElement { } private _getCurrentMode(stateObj: AlarmControlPanelEntity) { - return this._modes(stateObj).find( - (mode) => ALARM_MODES[mode].state === stateObj.state - ); + return this._modes(stateObj).find((mode) => mode === stateObj.state); } private async _setMode(mode: AlarmMode) { @@ -86,7 +84,7 @@ export class HaMoreInfoAlarmControlPanelModes extends LitElement { private async _valueChanged(ev: CustomEvent) { const mode = (ev.detail as any).value as AlarmMode; - if (ALARM_MODES[mode].state === this.stateObj!.state) return; + if (mode === this.stateObj!.state) return; const oldMode = this._getCurrentMode(this.stateObj!); this._currentMode = mode; diff --git a/src/external_app/external_app_entrypoint.ts b/src/external_app/external_app_entrypoint.ts index e39ca5b566..39176b652b 100644 --- a/src/external_app/external_app_entrypoint.ts +++ b/src/external_app/external_app_entrypoint.ts @@ -6,6 +6,7 @@ This is the entry point for providing external app stuff from app entrypoint. */ import { fireEvent } from "../common/dom/fire_event"; +import { mainWindow } from "../common/dom/get_main_window"; import { HomeAssistantMain } from "../layouts/home-assistant-main"; import type { EMIncomingMessageCommands } from "./external_messaging"; @@ -45,6 +46,15 @@ const handleExternalMessage = ( result: null, }); } else if (msg.command === "sidebar/toggle") { + if (mainWindow.history.state?.open) { + bus.fireMessage({ + id: msg.id, + type: "result", + success: false, + error: { code: "not_allowed", message: "dialog open" }, + }); + return true; + } fireEvent(hassMainEl, "hass-toggle-menu"); bus.fireMessage({ id: msg.id, @@ -53,6 +63,15 @@ const handleExternalMessage = ( result: null, }); } else if (msg.command === "sidebar/show") { + if (mainWindow.history.state?.open) { + bus.fireMessage({ + id: msg.id, + type: "result", + success: false, + error: { code: "not_allowed", message: "dialog open" }, + }); + return true; + } fireEvent(hassMainEl, "hass-toggle-menu", { open: true }); bus.fireMessage({ id: msg.id, diff --git a/src/layouts/home-assistant-main.ts b/src/layouts/home-assistant-main.ts index c0a116163a..afd153947b 100644 --- a/src/layouts/home-assistant-main.ts +++ b/src/layouts/home-assistant-main.ts @@ -11,6 +11,7 @@ import { customElement, property, state } from "lit/decorators"; import { fireEvent, HASSDomEvent } from "../common/dom/fire_event"; import { listenMediaQuery } from "../common/dom/media_query"; import { toggleAttribute } from "../common/dom/toggle_attribute"; +import { computeRTLDirection } from "../common/util/compute_rtl"; import "../components/ha-drawer"; import { showNotificationDrawer } from "../dialogs/notifications/show-notification-drawer"; import type { HomeAssistant, Route } from "../types"; @@ -61,6 +62,7 @@ export class HomeAssistantMain extends LitElement { + Channel: ${dataset.channel}
Dataset id: ${dataset.dataset_id}
Pan id: ${dataset.pan_id}
Extended Pan id: ${dataset.extended_pan_id}
@@ -263,6 +264,7 @@ export class ThreadConfigPanel extends SubscribeMixin(LitElement) { showAlertDialog(this, { title: dataset.network_name, text: html`Network name: ${dataset.network_name}
+ Channel: ${dataset.channel}
Dataset id: ${dataset.dataset_id}
Pan id: ${dataset.pan_id}
Extended Pan id: ${dataset.extended_pan_id}`, diff --git a/src/panels/config/storage/dialog-move-datadisk.ts b/src/panels/config/storage/dialog-move-datadisk.ts index aef10f81ac..9c75a22318 100644 --- a/src/panels/config/storage/dialog-move-datadisk.ts +++ b/src/panels/config/storage/dialog-move-datadisk.ts @@ -22,6 +22,7 @@ import { import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import { haStyle, haStyleDialog } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; +import { bytesToString } from "../../../util/bytes-to-string"; import { MoveDatadiskDialogParams } from "./show-dialog-move-datadisk"; const calculateMoveTime = memoizeOne((hostInfo: HassioHostInfo): number => { @@ -39,7 +40,7 @@ class MoveDatadiskDialog extends LitElement { @state() private _selectedDevice?: string; - @state() private _devices?: DatadiskList["devices"]; + @state() private _disks?: DatadiskList["disks"]; @state() private _osInfo?: HassioHassOSInfo; @@ -55,7 +56,7 @@ class MoveDatadiskDialog extends LitElement { const data = await listDatadisks(this.hass); if (data.devices.length > 0) { - this._devices = data.devices; + this._disks = data.disks; } else { this.closeDialog(); await showAlertDialog(this, { @@ -80,7 +81,7 @@ class MoveDatadiskDialog extends LitElement { public closeDialog(): void { this._selectedDevice = undefined; - this._devices = undefined; + this._disks = undefined; this._moving = false; this._hostInfo = undefined; this._osInfo = undefined; @@ -88,7 +89,7 @@ class MoveDatadiskDialog extends LitElement { } protected render() { - if (!this._hostInfo || !this._osInfo || !this._devices) { + if (!this._hostInfo || !this._osInfo || !this._disks) { return nothing; } @@ -132,10 +133,19 @@ class MoveDatadiskDialog extends LitElement { dialogInitialFocus fixedMenuPosition > - ${this._devices.map( - (device) => - html` - ${device} + ${this._disks.map( + (disk) => + html` + ${disk.vendor} ${disk.model} + + ${this.hass.localize( + "ui.panel.config.storage.datadisk.extra_information", + { + size: bytesToString(disk.size), + serial: disk.serial, + } + )} + ` )} diff --git a/src/panels/history/ha-panel-history.ts b/src/panels/history/ha-panel-history.ts index b5f1c2bc13..6bb2e9ce11 100644 --- a/src/panels/history/ha-panel-history.ts +++ b/src/panels/history/ha-panel-history.ts @@ -515,22 +515,11 @@ class HaPanelHistory extends SubscribeMixin(LitElement) { css` .content { padding: 0 16px 16px; + padding-bottom: max(env(safe-area-inset-bottom), 16px); } state-history-charts { - height: calc(100vh - 136px); - } - - :host([narrow]) state-history-charts { - height: calc(100vh - 198px); - } - - .progress-wrapper { - height: calc(100vh - 136px); - } - - :host([narrow]) .progress-wrapper { - height: calc(100vh - 198px); + overflow-x: hidden; } :host([virtualize]) { @@ -539,6 +528,10 @@ class HaPanelHistory extends SubscribeMixin(LitElement) { .progress-wrapper { position: relative; + display: flex; + align-items: center; + flex-direction: column; + padding: 16px; } .filters { @@ -566,13 +559,6 @@ class HaPanelHistory extends SubscribeMixin(LitElement) { } } - ha-circular-progress { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - } - .start-search { padding-top: 16px; text-align: center; diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts index 3428ce4a9e..0f9e67446f 100644 --- a/src/panels/lovelace/hui-root.ts +++ b/src/panels/lovelace/hui-root.ts @@ -961,11 +961,17 @@ class HUIRoot extends LitElement { position: fixed; top: 0; width: var(--mdc-top-app-bar-width, 100%); - z-index: 2; - transition: box-shadow 0.3s ease-out; + padding-top: env(safe-area-inset-top); + z-index: 4; + transition: box-shadow 200ms linear; } :host([scrolled]) .header { - box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.75); + box-shadow: var( + --mdc-top-app-bar-fixed-box-shadow, + 0px 2px 4px -1px rgba(0, 0, 0, 0.2), + 0px 4px 5px 0px rgba(0, 0, 0, 0.14), + 0px 1px 10px 0px rgba(0, 0, 0, 0.12) + ); } .edit-mode .header { background-color: var(--app-header-edit-background-color, #455a64); @@ -1044,27 +1050,27 @@ class HUIRoot extends LitElement { color: var(--error-color); } #view { - margin-top: var(--header-height); - height: calc( - 100vh - var(--header-height) - env(safe-area-inset-top) - - env(safe-area-inset-bottom) - ); + margin-top: calc(var(--header-height) + env(safe-area-inset-top)); + height: calc(100vh - var(--header-height) - env(safe-area-inset-top)); + padding-left: env(safe-area-inset-left); + padding-right: env(safe-area-inset-right); background: var( --lovelace-background, var(--primary-background-color) ); - display: flex; overflow: auto; + transform: translateZ(0); } /** * In edit mode we have the tab bar on a new line * */ .edit-mode #view { height: calc( - 100vh - var(--header-height) - 48px - env(safe-area-inset-top) - - env(safe-area-inset-bottom) + 100vh - var(--header-height) - 48px - env(safe-area-inset-top) + ); + margin-top: calc( + var(--header-height) + 48px + env(safe-area-inset-top) ); - margin-top: calc(var(--header-height) + 48px); } #view > * { /** @@ -1077,6 +1083,8 @@ class HUIRoot extends LitElement { */ flex: 1 1 100%; max-width: 100%; + padding-bottom: env(safe-area-inset-bottom); + display: block; } .hide-tab { display: none; diff --git a/src/panels/lovelace/tile-features/hui-alarm-modes-tile-feature.ts b/src/panels/lovelace/tile-features/hui-alarm-modes-tile-feature.ts index 3fee95942b..d6641b5d38 100644 --- a/src/panels/lovelace/tile-features/hui-alarm-modes-tile-feature.ts +++ b/src/panels/lovelace/tile-features/hui-alarm-modes-tile-feature.ts @@ -95,14 +95,14 @@ class HuiAlarmModeTileFeature private _getCurrentMode(stateObj: AlarmControlPanelEntity) { return this._modes(stateObj, this._config?.modes).find( - (mode) => ALARM_MODES[mode].state === stateObj.state + (mode) => mode === stateObj.state ); } private async _valueChanged(ev: CustomEvent) { const mode = (ev.detail as any).value as AlarmMode; - if (ALARM_MODES[mode].state === this.stateObj!.state) return; + if (mode === this.stateObj!.state) return; const oldMode = this._getCurrentMode(this.stateObj!); this._currentMode = mode; diff --git a/src/panels/profile/ha-change-password-card.ts b/src/panels/profile/ha-change-password-card.ts index fda74d6ef6..b4b3e0a7b1 100644 --- a/src/panels/profile/ha-change-password-card.ts +++ b/src/panels/profile/ha-change-password-card.ts @@ -33,78 +33,72 @@ class HaChangePasswordCard extends LitElement { protected render(): TemplateResult { return html` -
- -
- ${this._errorMsg - ? html`${this._errorMsg}` - : ""} - ${this._statusMsg - ? html`${this._statusMsg}` - : ""} + +
+ ${this._errorMsg + ? html`${this._errorMsg}` + : ""} + ${this._statusMsg + ? html`${this._statusMsg}` + : ""} - + - ${this._currentPassword - ? html` - ` - : ""} -
+ ${this._currentPassword + ? html` + ` + : ""} +
-
- ${this._loading - ? html`
- -
` - : html`${this.hass.localize( - "ui.panel.profile.change_password.submit" - )}`} -
-
-
+
+ ${this._loading + ? html`
+ +
` + : html`${this.hass.localize( + "ui.panel.profile.change_password.submit" + )}`} +
+ `; } diff --git a/src/panels/profile/ha-panel-profile.ts b/src/panels/profile/ha-panel-profile.ts index bc4afb7721..f5465fd676 100644 --- a/src/panels/profile/ha-panel-profile.ts +++ b/src/panels/profile/ha-panel-profile.ts @@ -5,6 +5,7 @@ import { customElement, property, state } from "lit/decorators"; import { fireEvent } from "../../common/dom/fire_event"; import "../../components/ha-card"; import "../../components/ha-menu-button"; +import "../../components/ha-top-app-bar-fixed"; import { isExternal } from "../../data/external"; import { CoreFrontendUserData, @@ -30,7 +31,6 @@ import "./ha-push-notifications-row"; import "./ha-refresh-tokens-card"; import "./ha-set-suspend-row"; import "./ha-set-vibrate-row"; -import "../../components/ha-top-app-bar-fixed"; @customElement("ha-panel-profile") class HaPanelProfile extends LitElement { diff --git a/src/state/url-sync-mixin.ts b/src/state/url-sync-mixin.ts index d8cc554b75..387bf8fd9b 100644 --- a/src/state/url-sync-mixin.ts +++ b/src/state/url-sync-mixin.ts @@ -1,5 +1,5 @@ /* eslint-disable no-console */ -import { ReactiveElement } from "lit"; +import { PropertyValueMap, ReactiveElement } from "lit"; import { HASSDomEvent } from "../common/dom/fire_event"; import { mainWindow } from "../common/dom/get_main_window"; import { @@ -31,8 +31,11 @@ export const urlSyncMixin = < public connectedCallback(): void { super.connectedCallback(); - if (history.length === 1) { - history.replaceState({ ...history.state, root: true }, ""); + if (mainWindow.history.length === 1) { + mainWindow.history.replaceState( + { ...mainWindow.history.state, root: true }, + "" + ); } mainWindow.addEventListener("popstate", this._popstateChangeListener); this.addEventListener("dialog-closed", this._dialogClosedListener); @@ -47,6 +50,15 @@ export const urlSyncMixin = < this.removeEventListener("dialog-closed", this._dialogClosedListener); } + protected firstUpdated( + changedProperties: PropertyValueMap | Map + ): void { + super.firstUpdated(changedProperties); + if (mainWindow.history.state?.dialog) { + this._handleDialogStateChange(mainWindow.history.state); + } + } + private _dialogClosedListener = ( ev: HASSDomEvent ) => { @@ -67,7 +79,7 @@ export const urlSyncMixin = < if (DEBUG) { console.log("remove state", ev.detail.dialog); } - if (history.length) { + if (mainWindow.history.length) { this._ignoreNextPopState = true; historyPromise = new Promise((resolve) => { historyResolve = () => { @@ -145,13 +157,21 @@ export const urlSyncMixin = < } return; } - if (state.dialogParams !== null) { - showDialog( + let shown = false; + if (state.open && state.dialogParams !== null) { + shown = await showDialog( this, this.shadowRoot!, state.dialog, state.dialogParams ); } + if (!shown) { + // can't open dialog, update state + mainWindow.history.replaceState( + { ...mainWindow.history.state, open: false }, + "" + ); + } } }; diff --git a/src/translations/en.json b/src/translations/en.json index f3c01350f1..1255298cec 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -931,11 +931,11 @@ "alarm_control_panel": { "modes_label": "Modes", "modes": { - "away": "Away", - "home": "Home", - "night": "Night", - "vacation": "Vacation", - "custom_bypass": "Custom", + "armed_away": "Away", + "armed_home": "Home", + "armed_night": "Night", + "armed_vacation": "Vacation", + "armed_custom_bypass": "Custom", "disarmed": "Disarmed" }, "disarm_title": "Disarm", @@ -3861,6 +3861,7 @@ "datadisk": { "title": "Move datadisk", "description": "You are currently using ''{current_path}'' as datadisk. Moving data disks will reboot your device and it's estimated to take {time} minutes. Your Home Assistant installation will not be accessible during this period. Do not disconnect the power during the move!", + "extra_information": "Size: {size}, S/N: {serial}", "select_device": "Select new datadisk", "no_devices_title": "No suitable storage found", "no_devices_text": "There is no suitable external device found. The storage capacity of the external data disk must be larger than the storage capacity of the existing disk", @@ -4466,11 +4467,11 @@ "label": "Alarm modes", "modes": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes_label%]", "modes_list": { - "away": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::away%]", - "home": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::home%]", - "night": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::night%]", - "vacation": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::vacation%]", - "custom_bypass": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::custom_bypass%]", + "armed_away": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_away%]", + "armed_home": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_home%]", + "armed_night": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_night%]", + "armed_vacation": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_vacation%]", + "armed_custom_bypass": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_custom_bypass%]", "disarmed": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::disarmed%]" } }, @@ -4541,7 +4542,6 @@ "white": "White" } }, - "cardpicker": { "no_description": "No description available.", "custom_card": "Custom", diff --git a/src/util/legacy-support.js b/src/util/legacy-support.js index ab77431315..c94ffffdb0 100644 --- a/src/util/legacy-support.js +++ b/src/util/legacy-support.js @@ -7,6 +7,29 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import { Polymer } from "@polymer/polymer/polymer-legacy"; +const message = + "WARNING: Polymer will be removed from window in Home Assistant 2023.5. More info: https://developers.home-assistant.io/blog/2023/04/04/deprecating_polymer"; + +const handler = { + get(target, prop, receiver) { + // eslint-disable-next-line no-console + console.warn(message); + document + .querySelector("home-assistant") + .dispatchEvent(new CustomEvent("write_log", { detail: { message } })); + return Reflect.get(target, prop, receiver); + }, + apply: function (target, thisArg, argumentsList) { + // eslint-disable-next-line no-console + console.warn(message); + document + .querySelector("home-assistant") + .dispatchEvent(new CustomEvent("write_log", { detail: { message } })); + return Reflect.apply(target, thisArg, argumentsList); + }, +}; + Polymer.Element = PolymerElement; Polymer.html = html; -window.Polymer = Polymer; + +window.Polymer = new Proxy(Polymer, handler); diff --git a/yarn.lock b/yarn.lock index cab79d905a..38cd20991c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,54 +28,54 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.11, @babel/code-frame@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/code-frame@npm:7.18.6" +"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.11, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/code-frame@npm:7.21.4" dependencies: "@babel/highlight": ^7.18.6 - checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.1, @babel/compat-data@npm:^7.20.5": - version: 7.21.0 - resolution: "@babel/compat-data@npm:7.21.0" - checksum: dbf632c532f9c75ba0be7d1dc9f6cd3582501af52f10a6b90415d634ec5878735bd46064c91673b10317af94d4cc99c4da5bd9d955978cdccb7905fc33291e4d +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/compat-data@npm:7.21.4" + checksum: 5f8b98c66f2ffba9f3c3a82c0cf354c52a0ec5ad4797b370dc32bdcd6e136ac4febe5e93d76ce76e175632e2dbf6ce9f46319aa689fcfafa41b6e49834fa4b66 languageName: node linkType: hard -"@babel/core@npm:7.21.3, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3": - version: 7.21.3 - resolution: "@babel/core@npm:7.21.3" +"@babel/core@npm:7.21.4, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3": + version: 7.21.4 + resolution: "@babel/core@npm:7.21.4" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.21.3 - "@babel/helper-compilation-targets": ^7.20.7 + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.4 + "@babel/helper-compilation-targets": ^7.21.4 "@babel/helper-module-transforms": ^7.21.2 "@babel/helpers": ^7.21.0 - "@babel/parser": ^7.21.3 + "@babel/parser": ^7.21.4 "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.3 - "@babel/types": ^7.21.3 + "@babel/traverse": ^7.21.4 + "@babel/types": ^7.21.4 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.2 semver: ^6.3.0 - checksum: bef25fbea96f461bf79bd1d0e4f0cdce679fd5ada464a89c1141ddba59ae1adfdbb23e04440c266ed525712d33d5ffd818cd8b0c25b1dee0e648d5559516153a + checksum: a3beebb2cc79908a02f27a07dc381bcb34e8ecc58fa99f568ad0934c49e12111fc977ee9c5b51eb7ea2da66f63155d37c4dd96b6472eaeecfc35843ccb56bf3d languageName: node linkType: hard -"@babel/generator@npm:^7.21.3": - version: 7.21.3 - resolution: "@babel/generator@npm:7.21.3" +"@babel/generator@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/generator@npm:7.21.4" dependencies: - "@babel/types": ^7.21.3 + "@babel/types": ^7.21.4 "@jridgewell/gen-mapping": ^0.3.2 "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: be6bb5a32a0273260b91210d4137b7b5da148a2db8dd324654275cb0af865ae59de5e1536e93ac83423b2586415059e1c24cf94293026755cf995757238da749 + checksum: 9ffbb526a53bb8469b5402f7b5feac93809b09b2a9f82fcbfcdc5916268a65dae746a1f2479e03ba4fb0776facd7c892191f63baa61ab69b2cfdb24f7b92424d languageName: node linkType: hard @@ -98,18 +98,18 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0, @babel/helper-compilation-targets@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-compilation-targets@npm:7.20.7" +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/helper-compilation-targets@npm:7.21.4" dependencies: - "@babel/compat-data": ^7.20.5 - "@babel/helper-validator-option": ^7.18.6 + "@babel/compat-data": ^7.21.4 + "@babel/helper-validator-option": ^7.21.0 browserslist: ^4.21.3 lru-cache: ^5.1.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + checksum: bf9c7d3e7e6adff9222c05d898724cd4ee91d7eb9d52222c7ad2a22955620c2872cc2d9bdf0e047df8efdb79f4e3af2a06b53f509286145feccc4d10ddc318be languageName: node linkType: hard @@ -313,7 +313,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.18.6, @babel/helper-validator-option@npm:^7.21.0": +"@babel/helper-validator-option@npm:^7.21.0": version: 7.21.0 resolution: "@babel/helper-validator-option@npm:7.21.0" checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 @@ -354,12 +354,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.18.4, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.3": - version: 7.21.3 - resolution: "@babel/parser@npm:7.21.3" +"@babel/parser@npm:^7.18.4, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/parser@npm:7.21.4" bin: parser: ./bin/babel-parser.js - checksum: a71e6456a1260c2a943736b56cc0acdf5f2a53c6c79e545f56618967e51f9b710d1d3359264e7c979313a7153741b1d95ad8860834cc2ab4ce4f428b13cc07be + checksum: de610ecd1bff331766d0c058023ca11a4f242bfafefc42caf926becccfb6756637d167c001987ca830dd4b34b93c629a4cef63f8c8c864a8564cdfde1989ac77 languageName: node linkType: hard @@ -374,7 +374,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.9": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.20.7" dependencies: @@ -398,7 +398,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.20.1": +"@babel/plugin-proposal-async-generator-functions@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7" dependencies: @@ -424,7 +424,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-static-block@npm:^7.18.6": +"@babel/plugin-proposal-class-static-block@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-proposal-class-static-block@npm:7.21.0" dependencies: @@ -488,7 +488,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-logical-assignment-operators@npm:^7.18.9": +"@babel/plugin-proposal-logical-assignment-operators@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.20.7" dependencies: @@ -524,7 +524,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:7.20.7, @babel/plugin-proposal-object-rest-spread@npm:^7.20.2": +"@babel/plugin-proposal-object-rest-spread@npm:7.20.7, @babel/plugin-proposal-object-rest-spread@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" dependencies: @@ -551,7 +551,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:7.21.0, @babel/plugin-proposal-optional-chaining@npm:^7.18.9, @babel/plugin-proposal-optional-chaining@npm:^7.20.7": +"@babel/plugin-proposal-optional-chaining@npm:7.21.0, @babel/plugin-proposal-optional-chaining@npm:^7.20.7, @babel/plugin-proposal-optional-chaining@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" dependencies: @@ -576,7 +576,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-property-in-object@npm:^7.18.6": +"@babel/plugin-proposal-private-property-in-object@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0" dependencies: @@ -701,6 +701,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/plugin-syntax-jsx@npm:7.21.4" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb7309402a1d4e155f32aa0cf216e1fa8324d6c4cfd248b03280028a015a10e46b6efd6565f515f8913918a3602b39255999c06046f7d4b8a5106be2165d724a + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -800,7 +811,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.18.6": +"@babel/plugin-transform-arrow-functions@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-transform-arrow-functions@npm:7.20.7" dependencies: @@ -811,7 +822,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.18.6": +"@babel/plugin-transform-async-to-generator@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-transform-async-to-generator@npm:7.20.7" dependencies: @@ -835,7 +846,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.20.2": +"@babel/plugin-transform-block-scoping@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-transform-block-scoping@npm:7.21.0" dependencies: @@ -846,7 +857,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.20.2": +"@babel/plugin-transform-classes@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-transform-classes@npm:7.21.0" dependencies: @@ -865,7 +876,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.18.9": +"@babel/plugin-transform-computed-properties@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-transform-computed-properties@npm:7.20.7" dependencies: @@ -877,7 +888,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.20.2": +"@babel/plugin-transform-destructuring@npm:^7.21.3": version: 7.21.3 resolution: "@babel/plugin-transform-destructuring@npm:7.21.3" dependencies: @@ -923,7 +934,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.18.8": +"@babel/plugin-transform-for-of@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-transform-for-of@npm:7.21.0" dependencies: @@ -969,7 +980,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.19.6": +"@babel/plugin-transform-modules-amd@npm:^7.20.11": version: 7.20.11 resolution: "@babel/plugin-transform-modules-amd@npm:7.20.11" dependencies: @@ -981,7 +992,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.19.6": +"@babel/plugin-transform-modules-commonjs@npm:^7.21.2": version: 7.21.2 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.21.2" dependencies: @@ -994,7 +1005,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.19.6": +"@babel/plugin-transform-modules-systemjs@npm:^7.20.11": version: 7.20.11 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.20.11" dependencies: @@ -1020,7 +1031,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1": +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.20.5": version: 7.20.5 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.20.5" dependencies: @@ -1055,7 +1066,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.20.1, @babel/plugin-transform-parameters@npm:^7.20.7": +"@babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.21.3": version: 7.21.3 resolution: "@babel/plugin-transform-parameters@npm:7.21.3" dependencies: @@ -1077,7 +1088,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.18.6": +"@babel/plugin-transform-regenerator@npm:^7.20.5": version: 7.20.5 resolution: "@babel/plugin-transform-regenerator@npm:7.20.5" dependencies: @@ -1111,7 +1122,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.19.0": +"@babel/plugin-transform-spread@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-transform-spread@npm:7.20.7" dependencies: @@ -1156,7 +1167,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.21.0": +"@babel/plugin-transform-typescript@npm:^7.21.3": version: 7.21.3 resolution: "@babel/plugin-transform-typescript@npm:7.21.3" dependencies: @@ -1193,30 +1204,30 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:7.20.2, @babel/preset-env@npm:^7.11.0": - version: 7.20.2 - resolution: "@babel/preset-env@npm:7.20.2" +"@babel/preset-env@npm:7.21.4, @babel/preset-env@npm:^7.11.0": + version: 7.21.4 + resolution: "@babel/preset-env@npm:7.21.4" dependencies: - "@babel/compat-data": ^7.20.1 - "@babel/helper-compilation-targets": ^7.20.0 + "@babel/compat-data": ^7.21.4 + "@babel/helper-compilation-targets": ^7.21.4 "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-option": ^7.18.6 + "@babel/helper-validator-option": ^7.21.0 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.20.1 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.20.7 + "@babel/plugin-proposal-async-generator-functions": ^7.20.7 "@babel/plugin-proposal-class-properties": ^7.18.6 - "@babel/plugin-proposal-class-static-block": ^7.18.6 + "@babel/plugin-proposal-class-static-block": ^7.21.0 "@babel/plugin-proposal-dynamic-import": ^7.18.6 "@babel/plugin-proposal-export-namespace-from": ^7.18.9 "@babel/plugin-proposal-json-strings": ^7.18.6 - "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 + "@babel/plugin-proposal-logical-assignment-operators": ^7.20.7 "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 "@babel/plugin-proposal-numeric-separator": ^7.18.6 - "@babel/plugin-proposal-object-rest-spread": ^7.20.2 + "@babel/plugin-proposal-object-rest-spread": ^7.20.7 "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 - "@babel/plugin-proposal-optional-chaining": ^7.18.9 + "@babel/plugin-proposal-optional-chaining": ^7.21.0 "@babel/plugin-proposal-private-methods": ^7.18.6 - "@babel/plugin-proposal-private-property-in-object": ^7.18.6 + "@babel/plugin-proposal-private-property-in-object": ^7.21.0 "@babel/plugin-proposal-unicode-property-regex": ^7.18.6 "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-class-properties": ^7.12.13 @@ -1233,40 +1244,40 @@ __metadata: "@babel/plugin-syntax-optional-chaining": ^7.8.3 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 "@babel/plugin-syntax-top-level-await": ^7.14.5 - "@babel/plugin-transform-arrow-functions": ^7.18.6 - "@babel/plugin-transform-async-to-generator": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.20.7 + "@babel/plugin-transform-async-to-generator": ^7.20.7 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.20.2 - "@babel/plugin-transform-classes": ^7.20.2 - "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.20.2 + "@babel/plugin-transform-block-scoping": ^7.21.0 + "@babel/plugin-transform-classes": ^7.21.0 + "@babel/plugin-transform-computed-properties": ^7.20.7 + "@babel/plugin-transform-destructuring": ^7.21.3 "@babel/plugin-transform-dotall-regex": ^7.18.6 "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 - "@babel/plugin-transform-for-of": ^7.18.8 + "@babel/plugin-transform-for-of": ^7.21.0 "@babel/plugin-transform-function-name": ^7.18.9 "@babel/plugin-transform-literals": ^7.18.9 "@babel/plugin-transform-member-expression-literals": ^7.18.6 - "@babel/plugin-transform-modules-amd": ^7.19.6 - "@babel/plugin-transform-modules-commonjs": ^7.19.6 - "@babel/plugin-transform-modules-systemjs": ^7.19.6 + "@babel/plugin-transform-modules-amd": ^7.20.11 + "@babel/plugin-transform-modules-commonjs": ^7.21.2 + "@babel/plugin-transform-modules-systemjs": ^7.20.11 "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.20.5 "@babel/plugin-transform-new-target": ^7.18.6 "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-parameters": ^7.20.1 + "@babel/plugin-transform-parameters": ^7.21.3 "@babel/plugin-transform-property-literals": ^7.18.6 - "@babel/plugin-transform-regenerator": ^7.18.6 + "@babel/plugin-transform-regenerator": ^7.20.5 "@babel/plugin-transform-reserved-words": ^7.18.6 "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.19.0 + "@babel/plugin-transform-spread": ^7.20.7 "@babel/plugin-transform-sticky-regex": ^7.18.6 "@babel/plugin-transform-template-literals": ^7.18.9 "@babel/plugin-transform-typeof-symbol": ^7.18.9 "@babel/plugin-transform-unicode-escapes": ^7.18.10 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.20.2 + "@babel/types": ^7.21.4 babel-plugin-polyfill-corejs2: ^0.3.3 babel-plugin-polyfill-corejs3: ^0.6.0 babel-plugin-polyfill-regenerator: ^0.4.1 @@ -1274,7 +1285,7 @@ __metadata: semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ece2d7e9c7789db6116e962b8e1a55eb55c110c44c217f0c8f6ffea4ca234954e66557f7bd019b7affadf7fbb3a53ccc807e93fc935aacd48146234b73b6947e + checksum: 1e328674c4b39e985fa81e5a8eee9aaab353dea4ff1f28f454c5e27a6498c762e25d42e827f5bfc9d7acf6c9b8bc317b5283aa7c83d9fd03c1a89e5c08f334f9 languageName: node linkType: hard @@ -1293,16 +1304,18 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:7.21.0": - version: 7.21.0 - resolution: "@babel/preset-typescript@npm:7.21.0" +"@babel/preset-typescript@npm:7.21.4": + version: 7.21.4 + resolution: "@babel/preset-typescript@npm:7.21.4" dependencies: "@babel/helper-plugin-utils": ^7.20.2 "@babel/helper-validator-option": ^7.21.0 - "@babel/plugin-transform-typescript": ^7.21.0 + "@babel/plugin-syntax-jsx": ^7.21.4 + "@babel/plugin-transform-modules-commonjs": ^7.21.2 + "@babel/plugin-transform-typescript": ^7.21.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6e1f4d7294de2678fbaf36035e98847b2be432f40fe7a1204e5e45b8b05bcbe22902fe0d726e16af14de5bc08987fae28a7899871503fd661050d85f58755af6 + checksum: 83b2f2bf7be3a970acd212177525f58bbb1f2e042b675a47d021a675ae27cf00b6b6babfaf3ae5c980592c9ed1b0712e5197796b691905d25c99f9006478ea06 languageName: node linkType: hard @@ -1333,32 +1346,32 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.3": - version: 7.21.3 - resolution: "@babel/traverse@npm:7.21.3" +"@babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/traverse@npm:7.21.4" dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.21.3 + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.4 "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-function-name": ^7.21.0 "@babel/helper-hoist-variables": ^7.18.6 "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.21.3 - "@babel/types": ^7.21.3 + "@babel/parser": ^7.21.4 + "@babel/types": ^7.21.4 debug: ^4.1.0 globals: ^11.1.0 - checksum: 0af5bcd47a2fc501592b90ac1feae9d449afb9ab0772a4f6e68230f4cd3a475795d538c1de3f880fe3414b6c2820bac84d02c6549eea796f39d74a603717447b + checksum: f22f067c2d9b6497abf3d4e53ea71f3aa82a21f2ed434dd69b8c5767f11f2a4c24c8d2f517d2312c9e5248e5c69395fdca1c95a2b3286122c75f5783ddb6f53c languageName: node linkType: hard -"@babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.21.3 - resolution: "@babel/types@npm:7.21.3" +"@babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.4, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.21.4 + resolution: "@babel/types@npm:7.21.4" dependencies: "@babel/helper-string-parser": ^7.19.4 "@babel/helper-validator-identifier": ^7.19.1 to-fast-properties: ^2.0.0 - checksum: b750274718ba9cefd0b81836c464009bb6ba339fccce51b9baff497a0a2d96c044c61dc90cf203cec0adc770454b53a9681c3f7716883c802b85ab84c365ba35 + checksum: 587bc55a91ce003b0f8aa10d70070f8006560d7dc0360dc0406d306a2cb2a10154e2f9080b9c37abec76907a90b330a536406cb75e6bdc905484f37b75c73219 languageName: node linkType: hard @@ -3240,6 +3253,18 @@ __metadata: languageName: node linkType: hard +"@octokit/plugin-retry@npm:4.1.3": + version: 4.1.3 + resolution: "@octokit/plugin-retry@npm:4.1.3" + dependencies: + "@octokit/types": ^9.0.0 + bottleneck: ^2.15.3 + peerDependencies: + "@octokit/core": ">=3" + checksum: f9ed5869be23dddcf1ee896ce996e46a412a586259b55612ba44c82cdeed91436102e6e3ec57db879bd91a4446dcafbaa94632e4e059c6af56d9cca9b163eacb + languageName: node + linkType: hard + "@octokit/request-error@npm:^3.0.0, @octokit/request-error@npm:^3.0.3": version: 3.0.3 resolution: "@octokit/request-error@npm:3.0.3" @@ -6084,6 +6109,13 @@ __metadata: languageName: node linkType: hard +"bottleneck@npm:^2.15.3": + version: 2.19.5 + resolution: "bottleneck@npm:2.19.5" + checksum: c5eef1bbea12cef1f1405e7306e7d24860568b0f7ac5eeab706a86762b3fc65ef6d1c641c8a166e4db90f412fc5c948fc5ce8008a8cd3d28c7212ef9c3482bda + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -9391,7 +9423,7 @@ __metadata: version: 0.0.0-use.local resolution: "home-assistant-frontend@workspace:." dependencies: - "@babel/core": 7.21.3 + "@babel/core": 7.21.4 "@babel/plugin-external-helpers": 7.18.6 "@babel/plugin-proposal-class-properties": 7.18.6 "@babel/plugin-proposal-decorators": 7.21.0 @@ -9401,8 +9433,8 @@ __metadata: "@babel/plugin-syntax-dynamic-import": 7.8.3 "@babel/plugin-syntax-import-meta": 7.10.4 "@babel/plugin-syntax-top-level-await": 7.14.5 - "@babel/preset-env": 7.20.2 - "@babel/preset-typescript": 7.21.0 + "@babel/preset-env": 7.21.4 + "@babel/preset-typescript": 7.21.4 "@braintree/sanitize-url": 6.0.2 "@codemirror/autocomplete": 6.4.2 "@codemirror/commands": 6.2.2 @@ -9458,6 +9490,7 @@ __metadata: "@mdi/js": 7.2.96 "@mdi/svg": 7.2.96 "@octokit/auth-oauth-device": 4.0.4 + "@octokit/plugin-retry": 4.1.3 "@octokit/rest": 19.0.7 "@open-wc/dev-server-hmr": 0.1.4 "@polymer/app-layout": 3.1.0