From 9a84ce7b81d8bc1f7430573b3f26569fcd471911 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Thu, 5 Oct 2023 18:29:15 +0200 Subject: [PATCH] 20231005.0 (#18126) * Update dependency @material/web to v1.0.0 (#18070) * Update dependency @material/web to v1.0.0 * Fix icon button size * Remove unused ios override --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Paul Bottein * Update dependency magic-string to v0.30.4 (#18089) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Bump postcss from 8.4.30 to 8.4.31 (#18110) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.30 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.30...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Update CodeMirror (#18096) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update vaadinWebComponents monorepo to v24.1.10 (#18092) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Make the "icon next/prev" series load faster (#18087) * Preserve ancillary fields in a repeat action when modifying the form (#18068) * Do not clear alias when editing automation action, condition or trigger (#18114) * Use restart dialog confirmation for quick command (#18113) * Add translations for restore backup dialogs (#18112) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Hide tooltip after clicking on a chart to display more info (cosmetic change) (#18103) * fix setting wake word to first option everytime (#18121) * Fix class field for ha-icon-next/prev (#18118) * Set border-radius to 0 for img in thread panel (#18124) * Load Intl locale data in parallel (#18120) * Load Intl locale data in parallel * Switch to check result.ok * Update dependency @codemirror/view to v6.21.1 (#18125) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Bumped version to 20231005.0 --------- Signed-off-by: dependabot[bot] Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kendell R Co-authored-by: karwosts <32912880+karwosts@users.noreply.github.com> Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Co-authored-by: K3A <966992+k3a@users.noreply.github.com> Co-authored-by: Bram Kragten Co-authored-by: Steve Repsher --- hassio/src/backups/hassio-backups.ts | 8 +- .../dialogs/backup/dialog-hassio-backup.ts | 108 +++++---- .../backup/dialog-hassio-create-backup.ts | 3 +- hassio/src/util/translations.ts | 4 + package.json | 12 +- pyproject.toml | 2 +- .../chart/state-history-chart-line.ts | 5 +- .../chart/state-history-chart-timeline.ts | 1 + src/components/ha-icon-button-arrow-next.ts | 15 +- src/components/ha-icon-button-arrow-prev.ts | 15 +- src/components/ha-icon-button-next.ts | 15 +- src/components/ha-icon-button-prev.ts | 15 +- src/components/ha-icon-next.ts | 15 +- src/components/ha-icon-prev.ts | 15 +- src/components/ha-outlined-icon-button.ts | 5 - ...more-info-control-circular-slider-style.ts | 3 +- src/dialogs/quick-bar/ha-quick-bar.ts | 53 ++--- .../action/ha-automation-action-row.ts | 14 +- .../ha-automation-action-activate_scene.ts | 1 + .../types/ha-automation-action-play_media.ts | 1 + .../types/ha-automation-action-repeat.ts | 1 + .../ha-automation-condition-editor.ts | 11 +- .../trigger/ha-automation-trigger-row.ts | 14 +- .../thread/thread-config-panel.ts | 3 + .../assist-pipeline-detail-wakeword.ts | 10 +- .../energy/hui-energy-devices-graph-card.ts | 1 + src/resources/locale-data-polyfill.ts | 90 +++----- src/translations/en.json | 34 ++- yarn.lock | 214 +++++++++--------- 29 files changed, 341 insertions(+), 347 deletions(-) create mode 100644 hassio/src/util/translations.ts diff --git a/hassio/src/backups/hassio-backups.ts b/hassio/src/backups/hassio-backups.ts index 80282aa7d6ad..943e6e6c646b 100644 --- a/hassio/src/backups/hassio-backups.ts +++ b/hassio/src/backups/hassio-backups.ts @@ -360,11 +360,9 @@ export class HassioBackups extends LitElement { if (this.supervisor!.info.state !== "running") { showAlertDialog(this, { title: this.supervisor!.localize("backup.could_not_create"), - text: this.supervisor!.localize( - "backup.create_blocked_not_running", - "state", - this.supervisor!.info.state - ), + text: this.supervisor!.localize("backup.create_blocked_not_running", { + state: this.supervisor!.info.state, + }), }); return; } diff --git a/hassio/src/dialogs/backup/dialog-hassio-backup.ts b/hassio/src/dialogs/backup/dialog-hassio-backup.ts index fbf1edc46f6a..c66de088f73d 100644 --- a/hassio/src/dialogs/backup/dialog-hassio-backup.ts +++ b/hassio/src/dialogs/backup/dialog-hassio-backup.ts @@ -31,6 +31,7 @@ import { fileDownload } from "../../../../src/util/file_download"; import "../../components/supervisor-backup-content"; import type { SupervisorBackupContent } from "../../components/supervisor-backup-content"; import { HassioBackupDialogParams } from "./show-dialog-hassio-backup"; +import { BackupOrRestoreKey } from "../../util/translations"; @customElement("dialog-hassio-backup") class HassioBackupDialog @@ -64,6 +65,13 @@ class HassioBackupDialog fireEvent(this, "dialog-closed", { dialog: this.localName }); } + private _localize(key: BackupOrRestoreKey) { + return ( + this._dialogParams!.supervisor?.localize(`backup.${key}`) || + this._dialogParams!.localize!(`ui.panel.page-onboarding.restore.${key}`) + ); + } + protected render() { if (!this._dialogParams || !this._backup) { return nothing; @@ -79,7 +87,7 @@ class HassioBackupDialog ${this._backup.name} ${this._restoringBackup - ? html` ` - : html` - `} + ? html`` + : html` + + + `} ${this._error ? html`${this._error}` - : ""} + : nothing} - Restore + ${this._localize("restore")} - ${!this._dialogParams.onboarding + ${!this._dialogParams.onboarding && this._dialogParams.supervisor ? html` ${this._dialogParams.supervisor?.localize( + >${this._dialogParams.supervisor.localize( "backup.download_backup" )} ${this._dialogParams.supervisor?.localize( + >${this._dialogParams.supervisor.localize( "backup.delete_backup_title" )} ` - : ""} + : nothing} `; } @@ -183,21 +195,22 @@ class HassioBackupDialog } private async _partialRestoreClicked(backupDetails) { - if ( - this._dialogParams?.supervisor !== undefined && - this._dialogParams?.supervisor.info.state !== "running" - ) { + const supervisor = this._dialogParams?.supervisor; + if (supervisor !== undefined && supervisor.info.state !== "running") { await showAlertDialog(this, { - title: "Could not restore backup", - text: `Restoring a backup is not possible right now because the system is in ${this._dialogParams?.supervisor.info.state} state.`, + title: supervisor.localize("backup.could_not_restore"), + text: supervisor.localize("backup.restore_blocked_not_running", { + state: supervisor.info.state, + }), }); return; } if ( !(await showConfirmationDialog(this, { - title: "Are you sure you want to restore this partial backup?", - confirmText: "restore", - dismissText: "cancel", + title: this._localize("confirm_restore_partial_backup_title"), + text: this._localize("confirm_restore_partial_backup_text"), + confirmText: this._localize("restore"), + dismissText: this._localize("cancel"), })) ) { return; @@ -230,22 +243,22 @@ class HassioBackupDialog } private async _fullRestoreClicked(backupDetails) { - if ( - this._dialogParams?.supervisor !== undefined && - this._dialogParams?.supervisor.info.state !== "running" - ) { + const supervisor = this._dialogParams?.supervisor; + if (supervisor !== undefined && supervisor.info.state !== "running") { await showAlertDialog(this, { - title: "Could not restore backup", - text: `Restoring a backup is not possible right now because the system is in ${this._dialogParams?.supervisor.info.state} state.`, + title: supervisor.localize("backup.could_not_restore"), + text: supervisor.localize("backup.restore_blocked_not_running", { + state: supervisor.info.state, + }), }); return; } if ( !(await showConfirmationDialog(this, { - title: - "Are you sure you want to wipe your system and restore this backup?", - confirmText: "restore", - dismissText: "cancel", + title: this._localize("confirm_restore_full_backup_title"), + text: this._localize("confirm_restore_full_backup_text"), + confirmText: this._localize("restore"), + dismissText: this._localize("cancel"), })) ) { return; @@ -279,11 +292,15 @@ class HassioBackupDialog } private async _deleteClicked() { + const supervisor = this._dialogParams?.supervisor; + if (!supervisor) return; + if ( !(await showConfirmationDialog(this, { - title: "Are you sure you want to delete this backup?", - confirmText: "delete", - dismissText: "cancel", + title: supervisor!.localize("backup.confirm_delete_title"), + text: supervisor!.localize("backup.confirm_delete_text"), + confirmText: supervisor!.localize("backup.delete"), + dismissText: supervisor!.localize("backup.cancel"), })) ) { return; @@ -301,6 +318,9 @@ class HassioBackupDialog } private async _downloadClicked() { + const supervisor = this._dialogParams?.supervisor; + if (!supervisor) return; + let signedPath: { path: string }; try { signedPath = await getSignedPath( @@ -320,10 +340,10 @@ class HassioBackupDialog if (window.location.href.includes("ui.nabu.casa")) { const confirm = await showConfirmationDialog(this, { - title: "Potential slow download", - text: "Downloading backups over the Nabu Casa URL will take some time, it is recomended to use your local URL instead, do you want to continue?", - confirmText: "continue", - dismissText: "cancel", + title: supervisor.localize("backup.remote_download_title"), + text: supervisor.localize("backup.remote_download_text"), + confirmText: supervisor.localize("backup.download"), + dismissText: this._localize("cancel"), }); if (!confirm) { return; diff --git a/hassio/src/dialogs/backup/dialog-hassio-create-backup.ts b/hassio/src/dialogs/backup/dialog-hassio-create-backup.ts index da0bbdbef6e0..3e1fd79a3df1 100644 --- a/hassio/src/dialogs/backup/dialog-hassio-create-backup.ts +++ b/hassio/src/dialogs/backup/dialog-hassio-create-backup.ts @@ -89,8 +89,7 @@ class HassioCreateBackupDialog extends LitElement { ), text: this._dialogParams!.supervisor.localize( "backup.create_blocked_not_running", - "state", - this._dialogParams!.supervisor.info.state + { state: this._dialogParams!.supervisor.info.state } ), }); return; diff --git a/hassio/src/util/translations.ts b/hassio/src/util/translations.ts new file mode 100644 index 000000000000..1a7af29ef342 --- /dev/null +++ b/hassio/src/util/translations.ts @@ -0,0 +1,4 @@ +import type { TranslationDict } from "../../../src/types"; + +export type BackupOrRestoreKey = keyof TranslationDict["supervisor"]["backup"] & + keyof TranslationDict["ui"]["panel"]["page-onboarding"]["restore"]; diff --git a/package.json b/package.json index a606b1d9ed3a..1f1d676b31f4 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "@babel/runtime": "7.23.1", "@braintree/sanitize-url": "6.0.4", "@codemirror/autocomplete": "6.9.1", - "@codemirror/commands": "6.2.5", + "@codemirror/commands": "6.3.0", "@codemirror/language": "6.9.1", "@codemirror/legacy-modes": "6.3.3", "@codemirror/search": "6.5.4", "@codemirror/state": "6.2.1", - "@codemirror/view": "6.20.2", + "@codemirror/view": "6.21.1", "@egjs/hammerjs": "2.0.17", "@formatjs/intl-datetimeformat": "6.10.3", "@formatjs/intl-displaynames": "6.5.2", @@ -80,7 +80,7 @@ "@material/mwc-top-app-bar": "0.27.0", "@material/mwc-top-app-bar-fixed": "0.27.0", "@material/top-app-bar": "=14.0.0-canary.53b3cad2f.0", - "@material/web": "=1.0.0-pre.17", + "@material/web": "=1.0.0", "@mdi/js": "7.2.96", "@mdi/svg": "7.2.96", "@polymer/iron-flex-layout": "3.0.1", @@ -94,8 +94,8 @@ "@polymer/paper-toast": "3.0.1", "@polymer/polymer": "3.5.1", "@thomasloven/round-slider": "0.6.0", - "@vaadin/combo-box": "24.1.9", - "@vaadin/vaadin-themable-mixin": "24.1.9", + "@vaadin/combo-box": "24.1.10", + "@vaadin/vaadin-themable-mixin": "24.1.10", "@vibrant/color": "3.2.1-alpha.1", "@vibrant/core": "3.2.1-alpha.1", "@vibrant/quantizer-mmcq": "3.2.1-alpha.1", @@ -223,7 +223,7 @@ "lint-staged": "14.0.1", "lit-analyzer": "2.0.0-pre.3", "lodash.template": "4.5.0", - "magic-string": "0.30.3", + "magic-string": "0.30.4", "map-stream": "0.0.7", "mocha": "10.2.0", "object-hash": "3.0.0", diff --git a/pyproject.toml b/pyproject.toml index 83b7360e8d0b..2a0e3d7e9b17 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "home-assistant-frontend" -version = "20231002.0" +version = "20231005.0" license = {text = "Apache-2.0"} description = "The Home Assistant frontend" readme = "README.md" diff --git a/src/components/chart/state-history-chart-line.ts b/src/components/chart/state-history-chart-line.ts index 64e7feaa164b..e869ffadfe75 100644 --- a/src/components/chart/state-history-chart-line.ts +++ b/src/components/chart/state-history-chart-line.ts @@ -180,7 +180,9 @@ export class StateHistoryChartLine extends LitElement { return; } - const points = e.chart.getElementsAtEventForMode( + const chart = e.chart; + + const points = chart.getElementsAtEventForMode( e, "nearest", { intersect: true }, @@ -192,6 +194,7 @@ export class StateHistoryChartLine extends LitElement { fireEvent(this, "hass-more-info", { entityId: this._entityIds[firstPoint.datasetIndex], }); + chart.canvas.dispatchEvent(new Event("mouseout")); // to hide tooltip } }, }; diff --git a/src/components/chart/state-history-chart-timeline.ts b/src/components/chart/state-history-chart-timeline.ts index aa9123db2916..0330fcb1f811 100644 --- a/src/components/chart/state-history-chart-timeline.ts +++ b/src/components/chart/state-history-chart-timeline.ts @@ -238,6 +238,7 @@ export class StateHistoryChartTimeline extends LitElement { // @ts-ignore entityId: this._chartData?.datasets[index]?.label, }); + chart.canvas.dispatchEvent(new Event("mouseout")); // to hide tooltip }, }; } diff --git a/src/components/ha-icon-button-arrow-next.ts b/src/components/ha-icon-button-arrow-next.ts index 6fa3a084b36b..97e7d116efdf 100644 --- a/src/components/ha-icon-button-arrow-next.ts +++ b/src/components/ha-icon-button-arrow-next.ts @@ -12,19 +12,8 @@ export class HaIconButtonArrowNext extends LitElement { @property() public label?: string; - @state() private _icon = mdiArrowRight; - - public connectedCallback() { - super.connectedCallback(); - - // wait to check for direction since otherwise direction is wrong even though top level is RTL - setTimeout(() => { - this._icon = - window.getComputedStyle(this).direction === "ltr" - ? mdiArrowRight - : mdiArrowLeft; - }, 100); - } + @state() private _icon = + document.dir === "ltr" ? mdiArrowRight : mdiArrowLeft; protected render(): TemplateResult { return html` diff --git a/src/components/ha-icon-button-arrow-prev.ts b/src/components/ha-icon-button-arrow-prev.ts index 76a78843d24a..e8927d7e956f 100644 --- a/src/components/ha-icon-button-arrow-prev.ts +++ b/src/components/ha-icon-button-arrow-prev.ts @@ -12,19 +12,8 @@ export class HaIconButtonArrowPrev extends LitElement { @property() public label?: string; - @state() private _icon = mdiArrowLeft; - - public connectedCallback() { - super.connectedCallback(); - - // wait to check for direction since otherwise direction is wrong even though top level is RTL - setTimeout(() => { - this._icon = - window.getComputedStyle(this).direction === "ltr" - ? mdiArrowLeft - : mdiArrowRight; - }, 100); - } + @state() private _icon = + document.dir === "ltr" ? mdiArrowLeft : mdiArrowRight; protected render(): TemplateResult { return html` diff --git a/src/components/ha-icon-button-next.ts b/src/components/ha-icon-button-next.ts index ffceb3fd1344..99793cf4a71e 100644 --- a/src/components/ha-icon-button-next.ts +++ b/src/components/ha-icon-button-next.ts @@ -12,19 +12,8 @@ export class HaIconButtonNext extends LitElement { @property() public label?: string; - @state() private _icon = mdiChevronRight; - - public connectedCallback() { - super.connectedCallback(); - - // wait to check for direction since otherwise direction is wrong even though top level is RTL - setTimeout(() => { - this._icon = - window.getComputedStyle(this).direction === "ltr" - ? mdiChevronRight - : mdiChevronLeft; - }, 100); - } + @state() private _icon = + document.dir === "ltr" ? mdiChevronRight : mdiChevronLeft; protected render(): TemplateResult { return html` diff --git a/src/components/ha-icon-button-prev.ts b/src/components/ha-icon-button-prev.ts index 44c7c49aa1a3..b1499b96c236 100644 --- a/src/components/ha-icon-button-prev.ts +++ b/src/components/ha-icon-button-prev.ts @@ -12,19 +12,8 @@ export class HaIconButtonPrev extends LitElement { @property() public label?: string; - @state() private _icon = mdiChevronLeft; - - public connectedCallback() { - super.connectedCallback(); - - // wait to check for direction since otherwise direction is wrong even though top level is RTL - setTimeout(() => { - this._icon = - window.getComputedStyle(this).direction === "ltr" - ? mdiChevronLeft - : mdiChevronRight; - }, 100); - } + @state() private _icon = + document.dir === "ltr" ? mdiChevronLeft : mdiChevronRight; protected render(): TemplateResult { return html` diff --git a/src/components/ha-icon-next.ts b/src/components/ha-icon-next.ts index 0752f492fe95..607f4242fc25 100644 --- a/src/components/ha-icon-next.ts +++ b/src/components/ha-icon-next.ts @@ -1,20 +1,11 @@ import { mdiChevronLeft, mdiChevronRight } from "@mdi/js"; -import { customElement } from "lit/decorators"; +import { customElement, property } from "lit/decorators"; import { HaSvgIcon } from "./ha-svg-icon"; @customElement("ha-icon-next") export class HaIconNext extends HaSvgIcon { - public connectedCallback() { - super.connectedCallback(); - - // wait to check for direction since otherwise direction is wrong even though top level is RTL - setTimeout(() => { - this.path = - window.getComputedStyle(this).direction === "ltr" - ? mdiChevronRight - : mdiChevronLeft; - }, 100); - } + @property() public override path = + document.dir === "ltr" ? mdiChevronRight : mdiChevronLeft; } declare global { diff --git a/src/components/ha-icon-prev.ts b/src/components/ha-icon-prev.ts index f6744a1b203c..da93f628dadc 100644 --- a/src/components/ha-icon-prev.ts +++ b/src/components/ha-icon-prev.ts @@ -1,20 +1,11 @@ import { mdiChevronLeft, mdiChevronRight } from "@mdi/js"; -import { customElement } from "lit/decorators"; +import { customElement, property } from "lit/decorators"; import { HaSvgIcon } from "./ha-svg-icon"; @customElement("ha-icon-prev") export class HaIconPrev extends HaSvgIcon { - public connectedCallback() { - super.connectedCallback(); - - // wait to check for direction since otherwise direction is wrong even though top level is RTL - setTimeout(() => { - this.path = - window.getComputedStyle(this).direction === "ltr" - ? mdiChevronLeft - : mdiChevronRight; - }, 100); - } + @property() public override path = + document.dir === "ltr" ? mdiChevronLeft : mdiChevronRight; } declare global { diff --git a/src/components/ha-outlined-icon-button.ts b/src/components/ha-outlined-icon-button.ts index 9715c4a7ccb1..7f6618d5024c 100644 --- a/src/components/ha-outlined-icon-button.ts +++ b/src/components/ha-outlined-icon-button.ts @@ -29,11 +29,6 @@ export class HaOutlinedIconButton extends IconButton { --md-ripple-hover-opacity: 0; --md-ripple-pressed-opacity: 0; } - .outlined { - /* Fix md-outlined-icon-button padding and margin for iOS */ - padding: 0; - margin: 0; - } `, ]; } diff --git a/src/dialogs/more-info/components/ha-more-info-control-circular-slider-style.ts b/src/dialogs/more-info/components/ha-more-info-control-circular-slider-style.ts index 0e9d64c2d0ef..cee92177ff98 100644 --- a/src/dialogs/more-info/components/ha-more-info-control-circular-slider-style.ts +++ b/src/dialogs/more-info/components/ha-more-info-control-circular-slider-style.ts @@ -60,7 +60,8 @@ export const moreInfoControlCircularSliderStyle = css` justify-content: space-between; } .buttons ha-outlined-icon-button { - --md-outlined-icon-button-container-size: 48px; + --md-outlined-icon-button-container-width: 48px; + --md-outlined-icon-button-container-height: 48px; --md-outlined-icon-button-icon-size: 24px; } /* Accessibility */ diff --git a/src/dialogs/quick-bar/ha-quick-bar.ts b/src/dialogs/quick-bar/ha-quick-bar.ts index a8120a27ea15..07d823858d1c 100644 --- a/src/dialogs/quick-bar/ha-quick-bar.ts +++ b/src/dialogs/quick-bar/ha-quick-bar.ts @@ -8,7 +8,7 @@ import { mdiReload, mdiServerNetwork, } from "@mdi/js"; -import { css, html, LitElement, nothing } from "lit"; +import { LitElement, css, html, nothing } from "lit"; import { customElement, property, query, state } from "lit/decorators"; import { ifDefined } from "lit/directives/if-defined"; import { styleMap } from "lit/directives/style-map"; @@ -23,8 +23,8 @@ import { domainIcon } from "../../common/entity/domain_icon"; import { navigate } from "../../common/navigate"; import { caseInsensitiveStringCompare } from "../../common/string/compare"; import { - fuzzyFilterSort, ScorableTextItem, + fuzzyFilterSort, } from "../../common/string/filter/sequence-matching"; import { debounce } from "../../common/util/debounce"; import "../../components/ha-chip"; @@ -40,10 +40,7 @@ import { configSections } from "../../panels/config/ha-panel-config"; import { haStyleDialog, haStyleScrollbar } from "../../resources/styles"; import { loadVirtualizer } from "../../resources/virtualizer"; import { HomeAssistant } from "../../types"; -import { - ConfirmationDialogParams, - showConfirmationDialog, -} from "../generic/show-dialog-box"; +import { showConfirmationDialog } from "../generic/show-dialog-box"; import { QuickBarParams } from "./show-dialog-quick-bar"; interface QuickBarItem extends ScorableTextItem { @@ -602,16 +599,30 @@ export class QuickBar extends LitElement { `ui.dialogs.quick-bar.commands.types.${categoryKey}` ), categoryKey, - action: () => this.hass.callService("homeassistant", action), + action: async () => { + const confirmed = await showConfirmationDialog(this, { + title: this.hass.localize( + `ui.dialogs.restart.${action}.confirm_title` + ), + text: this.hass.localize( + `ui.dialogs.restart.${action}.confirm_description` + ), + confirmText: this.hass.localize( + `ui.dialogs.restart.${action}.confirm_action` + ), + destructive: true, + }); + if (!confirmed) { + return; + } + this.hass.callService("homeassistant", action); + }, }; - return this._generateConfirmationCommand( - { - ...item, - strings: [`${item.categoryText} ${item.primaryText}`], - }, - this.hass.localize("ui.dialogs.generic.ok") - ); + return { + ...item, + strings: [`${item.categoryText} ${item.primaryText}`], + }; }); } @@ -717,20 +728,6 @@ export class QuickBar extends LitElement { return undefined; } - private _generateConfirmationCommand( - item: CommandItem, - confirmText: ConfirmationDialogParams["confirmText"] - ): CommandItem { - return { - ...item, - action: () => - showConfirmationDialog(this, { - confirmText, - confirm: item.action, - }), - }; - } - private _finalizeNavigationCommands( items: BaseNavigationCommand[] ): CommandItem[] { diff --git a/src/panels/config/automation/action/ha-automation-action-row.ts b/src/panels/config/automation/action/ha-automation-action-row.ts index 56b2b825060b..5884f68be40f 100644 --- a/src/panels/config/automation/action/ha-automation-action-row.ts +++ b/src/panels/config/automation/action/ha-automation-action-row.ts @@ -391,7 +391,10 @@ export default class HaAutomationActionRow extends LitElement { > ` : html` -
+
${dynamicElement(`ha-automation-action-${type}`, { hass: this.hass, action: this.action, @@ -530,6 +533,15 @@ export default class HaAutomationActionRow extends LitElement { fireEvent(this, "value-changed", { value: ev.detail.value }); } + private _onUiChanged(ev: CustomEvent) { + ev.stopPropagation(); + const value = { + ...(this.action.alias ? { alias: this.action.alias } : {}), + ...ev.detail.value, + }; + fireEvent(this, "value-changed", { value }); + } + private _switchUiMode() { this._warnings = undefined; this._yamlMode = false; diff --git a/src/panels/config/automation/action/types/ha-automation-action-activate_scene.ts b/src/panels/config/automation/action/types/ha-automation-action-activate_scene.ts index 1950204d8496..5e61ca20341a 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-activate_scene.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-activate_scene.ts @@ -54,6 +54,7 @@ export class HaSceneAction extends LitElement implements ActionElement { ev.stopPropagation(); fireEvent(this, "value-changed", { value: { + ...this.action, service: "scene.turn_on", target: { entity_id: ev.detail.value, diff --git a/src/panels/config/automation/action/types/ha-automation-action-play_media.ts b/src/panels/config/automation/action/types/ha-automation-action-play_media.ts index f35c6438227b..bd1ee27ec363 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-play_media.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-play_media.ts @@ -51,6 +51,7 @@ export class HaPlayMediaAction extends LitElement implements ActionElement { ev.stopPropagation(); fireEvent(this, "value-changed", { value: { + ...this.action, service: "media_player.play_media", target: { entity_id: ev.detail.value.entity_id }, data: { diff --git a/src/panels/config/automation/action/types/ha-automation-action-repeat.ts b/src/panels/config/automation/action/types/ha-automation-action-repeat.ts index fa4d36a69a7c..890133d25019 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-repeat.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-repeat.ts @@ -139,6 +139,7 @@ export class HaRepeatAction extends LitElement implements ActionElement { fireEvent(this, "value-changed", { value: { + ...this.action, repeat: { ...newVal }, }, }); diff --git a/src/panels/config/automation/condition/ha-automation-condition-editor.ts b/src/panels/config/automation/condition/ha-automation-condition-editor.ts index eb4558569e9a..ade44fa4e1cd 100644 --- a/src/panels/config/automation/condition/ha-automation-condition-editor.ts +++ b/src/panels/config/automation/condition/ha-automation-condition-editor.ts @@ -62,7 +62,7 @@ export default class HaAutomationConditionEditor extends LitElement { > ` : html` -
+
${dynamicElement( `ha-automation-condition-${condition.condition}`, { @@ -86,6 +86,15 @@ export default class HaAutomationConditionEditor extends LitElement { fireEvent(this, "value-changed", { value: ev.detail.value, yaml: true }); } + private _onUiChanged(ev: CustomEvent) { + ev.stopPropagation(); + const value = { + ...(this.condition.alias ? { alias: this.condition.alias } : {}), + ...ev.detail.value, + }; + fireEvent(this, "value-changed", { value }); + } + static styles = haStyle; } diff --git a/src/panels/config/automation/trigger/ha-automation-trigger-row.ts b/src/panels/config/automation/trigger/ha-automation-trigger-row.ts index cbc1e7bff34f..0db6ca2e3887 100644 --- a/src/panels/config/automation/trigger/ha-automation-trigger-row.ts +++ b/src/panels/config/automation/trigger/ha-automation-trigger-row.ts @@ -350,7 +350,10 @@ export default class HaAutomationTriggerRow extends LitElement { ` : ""} -
+
${dynamicElement( `ha-automation-trigger-${this.trigger.platform}`, { @@ -562,6 +565,15 @@ export default class HaAutomationTriggerRow extends LitElement { fireEvent(this, "value-changed", { value: ev.detail.value }); } + private _onUiChanged(ev: CustomEvent) { + ev.stopPropagation(); + const value = { + ...(this.trigger.alias ? { alias: this.trigger.alias } : {}), + ...ev.detail.value, + }; + fireEvent(this, "value-changed", { value }); + } + private _switchUiMode() { this._warnings = undefined; this._yamlMode = false; diff --git a/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts b/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts index a9936b029353..95624b377e2a 100644 --- a/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts +++ b/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts @@ -635,6 +635,9 @@ export class ThreadConfigPanel extends SubscribeMixin(LitElement) { cursor: default; overflow: visible; } + ha-list-item img { + border-radius: 0; + } ha-svg-icon[slot="meta"] { width: 24px; } diff --git a/src/panels/config/voice-assistants/assist-pipeline-detail/assist-pipeline-detail-wakeword.ts b/src/panels/config/voice-assistants/assist-pipeline-detail/assist-pipeline-detail-wakeword.ts index 518f3f02e6fe..5e23835ad495 100644 --- a/src/panels/config/voice-assistants/assist-pipeline-detail/assist-pipeline-detail-wakeword.ts +++ b/src/panels/config/voice-assistants/assist-pipeline-detail/assist-pipeline-detail-wakeword.ts @@ -72,7 +72,10 @@ export class AssistPipelineDetailWakeWord extends LitElement { changedProps.has("data") && changedProps.get("data")?.wake_word_entity !== this.data?.wake_word_entity ) { - if (this.data?.wake_word_id) { + if ( + changedProps.get("data")?.wake_word_entity && + this.data?.wake_word_id + ) { fireEvent(this, "value-changed", { value: { ...this.data, wake_word_id: undefined }, }); @@ -140,8 +143,9 @@ export class AssistPipelineDetailWakeWord extends LitElement { } this._wakeWords = wakewordInfo.wake_words; if ( - !this.data?.wake_word_id || - !this._wakeWords.some((ww) => ww.id === this.data!.wake_word_id) + this.data && + (!this.data?.wake_word_id || + !this._wakeWords.some((ww) => ww.id === this.data!.wake_word_id)) ) { fireEvent(this, "value-changed", { value: { ...this.data, wake_word_id: this._wakeWords[0]?.id }, diff --git a/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts b/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts index 9e99c11ca75c..ea787919fffc 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts @@ -164,6 +164,7 @@ export class HuiEnergyDevicesGraphCard // @ts-ignore entityId: this._chartData?.datasets[0]?.data[index]?.y, }); + chart.canvas.dispatchEvent(new Event("mouseout")); // to hide tooltip }, }) ); diff --git a/src/resources/locale-data-polyfill.ts b/src/resources/locale-data-polyfill.ts index e408947a655b..b1de492df7ec 100644 --- a/src/resources/locale-data-polyfill.ts +++ b/src/resources/locale-data-polyfill.ts @@ -1,70 +1,36 @@ // Loads the static locale data for a given language from FormatJS // Parents need to load polyfills first; they are not imported here to avoid a circular reference -const loadedPolyfillLocale = new Set(); +const INTL_POLYFILLS = [ + "DateTimeFormat", + "DisplayNames", + "ListFormat", + "NumberFormat", + "RelativeTimeFormat", +] as const satisfies readonly (keyof typeof Intl)[]; + +const loadedLocales: Set = new Set(); + +const addData = async ( + obj: (typeof INTL_POLYFILLS)[number], + language: string +) => { + // Add function will only exist if constructor is polyfilled + if (typeof (Intl[obj] as any)?.__addLocaleData === "function") { + const result = await fetch( + `${__STATIC_PATH__}locale-data/intl-${obj.toLowerCase()}/${language}.json` + ); + // Ignore if polyfill data does not exist for language + if (result.ok) { + (Intl[obj] as any).__addLocaleData(await result.json()); + } + } +}; export const polyfillLocaleData = async (language: string) => { - if (loadedPolyfillLocale.has(language)) { + if (loadedLocales.has(language)) { return; } - loadedPolyfillLocale.add(language); - try { - if ( - Intl.NumberFormat && - // @ts-ignore - typeof Intl.NumberFormat.__addLocaleData === "function" - ) { - const result = await fetch( - `${__STATIC_PATH__}locale-data/intl-numberformat/${language}.json` - ); - // @ts-ignore - Intl.NumberFormat.__addLocaleData(await result.json()); - } - if ( - Intl.RelativeTimeFormat && - // @ts-ignore - typeof Intl.RelativeTimeFormat.__addLocaleData === "function" - ) { - const result = await fetch( - `${__STATIC_PATH__}locale-data/intl-relativetimeformat/${language}.json` - ); - // @ts-ignore - Intl.RelativeTimeFormat.__addLocaleData(await result.json()); - } - if ( - Intl.DateTimeFormat && - // @ts-ignore - typeof Intl.DateTimeFormat.__addLocaleData === "function" - ) { - const result = await fetch( - `${__STATIC_PATH__}locale-data/intl-datetimeformat/${language}.json` - ); - // @ts-ignore - Intl.DateTimeFormat.__addLocaleData(await result.json()); - } - if ( - Intl.DisplayNames && - // @ts-ignore - typeof Intl.DisplayNames.__addLocaleData === "function" - ) { - const result = await fetch( - `${__STATIC_PATH__}locale-data/intl-displaynames/${language}.json` - ); - // @ts-ignore - Intl.DisplayNames.__addLocaleData(await result.json()); - } - if ( - Intl.ListFormat && - // @ts-ignore - typeof Intl.ListFormat.__addLocaleData === "function" - ) { - const result = await fetch( - `${__STATIC_PATH__}locale-data/intl-listformat/${language}.json` - ); - // @ts-ignore - Intl.ListFormat.__addLocaleData(await result.json()); - } - } catch (e) { - // Ignore - } + loadedLocales.add(language); + await Promise.all(INTL_POLYFILLS.map((obj) => addData(obj, language))); }; diff --git a/src/translations/en.json b/src/translations/en.json index 3c9bfce68445..204bc20eca1b 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1203,6 +1203,11 @@ "confirm_action": "Restart", "failed": "Failed to restart Home Assistant" }, + "stop": { + "confirm_title": "Stop Home Assistant?", + "confirm_description": "This will interrupt all running automations and scripts.", + "confirm_action": "Stop" + }, "reboot": { "title": "Reboot system", "description": "Restart the system running Home Assistant and all Add-ons.", @@ -5853,7 +5858,14 @@ "addons": "[%key:supervisor::backup::addons%]", "password_protection": "[%key:supervisor::backup::password_protection%]", "password": "[%key:supervisor::backup::password%]", - "confirm_password": "[%key:supervisor::backup::confirm_password%]" + "confirm_password": "[%key:supervisor::backup::confirm_password%]", + "confirm_restore_partial_backup_title": "[%key:supervisor::backup::confirm_restore_partial_backup_title%]", + "confirm_restore_partial_backup_text": "[%key:supervisor::backup::confirm_restore_partial_backup_text%]", + "confirm_restore_full_backup_title": "[%key:supervisor::backup::confirm_restore_full_backup_title%]", + "confirm_restore_full_backup_text": "[%key:supervisor::backup::confirm_restore_full_backup_text%]", + "restore": "[%key:supervisor::backup::restore%]", + "close": "[%key:ui::common::close%]", + "cancel": "[%key:ui::common::cancel%]" } }, "custom": { @@ -6256,7 +6268,8 @@ "backup": { "search": "[%key:ui::panel::config::backup::picker::search%]", "no_backups": "You don't have any backups yet.", - "create_blocked_not_running": "Creating a backup is not possible right now because the system is in {state} state.", + "create_blocked_not_running": "Creating a backup is not possible right now because the system is in \"{state}\" state.", + "restore_blocked_not_running": "Restoring a backup is not possible right now because the system is in \"{state}\" state.", "delete_selected": "Delete selected backups", "delete_backup_title": "Delete backup", "delete_backup_text": "Do you want to delete {number} {number, plural,\n one {backup}\n other {backups}\n}?", @@ -6264,6 +6277,7 @@ "selected": "{number} selected", "failed_to_delete": "Failed to delete", "could_not_create": "Could not create backup", + "could_not_restore": "Could not restore backup", "upload_backup": "Upload backup", "download_backup": "Download backup", "create_backup": "Create backup", @@ -6284,7 +6298,21 @@ "password_protection": "Password protection", "enter_password": "Please enter a password.", "passwords_not_matching": "The passwords does not match", - "backup_already_running": "A backup or restore is already running, creating a new backup is currently not possible, try again later." + "backup_already_running": "A backup or restore is already running. Creating a new backup is currently not possible, try again later.", + "confirm_restore_partial_backup_title": "Restore partial backup", + "confirm_restore_partial_backup_text": "The backup will be restored. Depending on the size of the backup, this can take up to 45 min.", + "confirm_restore_full_backup_title": "Restore full backup", + "confirm_restore_full_backup_text": "Your entire system will be wiped and the backup will be restored. Depending on the size of the backup, this can take up to 45 min.", + "confirm_delete_title": "Delete backup", + "confirm_delete_text": "This backup will be permanently deleted and cannot be restored later.", + "restore": "Restore", + "close": "[%key:ui::common::close%]", + "cancel": "[%key:ui::common::cancel%]", + "delete": "[%key:ui::common::delete%]", + "download": "Download", + "more_actions": "More actions", + "remote_download_title": "Potentially slow download", + "remote_download_text": "You are accessing Home Assistant via remote access. Downloading backups over the Nabu Casa URL will take some time. If you are at home, cancel this dialog and enter your local URL, such as 'http://homeassistant.local:8123'" }, "dialog": { "network": { diff --git a/yarn.lock b/yarn.lock index a7d8a5c17da9..89049bc28381 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1454,15 +1454,15 @@ __metadata: languageName: node linkType: hard -"@codemirror/commands@npm:6.2.5": - version: 6.2.5 - resolution: "@codemirror/commands@npm:6.2.5" +"@codemirror/commands@npm:6.3.0": + version: 6.3.0 + resolution: "@codemirror/commands@npm:6.3.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.2.0 "@codemirror/view": ^6.0.0 - "@lezer/common": ^1.0.0 - checksum: 6d373bcfd4337160243e1493c8703a8e367e208811742331679a6410a3645de36ae8a5664e11790fec521137b45f34d703e9292932a98c4de10139510f3f29a3 + "@lezer/common": ^1.1.0 + checksum: d6ade0ba7d4f80c2e44163935783d2f2f35c8b641a4b4f62452c0630211670abe5093786cf5a4af14147102d4284dae660a26f3ae58fd840e838685a81107d11 languageName: node linkType: hard @@ -1507,14 +1507,14 @@ __metadata: languageName: node linkType: hard -"@codemirror/view@npm:6.20.2, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0": - version: 6.20.2 - resolution: "@codemirror/view@npm:6.20.2" +"@codemirror/view@npm:6.21.1, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0": + version: 6.21.1 + resolution: "@codemirror/view@npm:6.21.1" dependencies: "@codemirror/state": ^6.1.4 style-mod: ^4.1.0 w3c-keyname: ^2.2.4 - checksum: eaf47726bb94b40f12c6f1d3494b558addaa7cd98a4ff05bfea7439c03cca3967d73380346ea8b06021478c21ec336a74665c9acb44e2b0280d5e0da4714387b + checksum: c2271a03559c5ef469dc941bd345e5355b4f704a582ca49ff69db915dcf10f175d2fc2ad6d8f4c10b371abb20e0c0f2e625c9348b681566e52a4dfdb5adfe648 languageName: node linkType: hard @@ -3164,13 +3164,13 @@ __metadata: languageName: node linkType: hard -"@material/web@npm:=1.0.0-pre.17": - version: 1.0.0-pre.17 - resolution: "@material/web@npm:1.0.0-pre.17" +"@material/web@npm:=1.0.0": + version: 1.0.0 + resolution: "@material/web@npm:1.0.0" dependencies: lit: ^2.7.4 || ^3.0.0 tslib: ^2.4.0 - checksum: a6443931677d981a0152fe52927b1aa2a9490354c81fbf77f3f9f33accfdc567dc2a431ae0a3cb375dff60a322ff7babd49fb62b186bcf43285e09fecd48a594 + checksum: 0c6772ab2b2c144bba62f323a6d657d44ea3b2c9a2b8e745e0e5d17081983724e8e72857a58a930df28073ec931ed04a4f2364bdcbdf72ce5c85a03abc0578f3 languageName: node linkType: hard @@ -4755,126 +4755,126 @@ __metadata: languageName: node linkType: hard -"@vaadin/a11y-base@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/a11y-base@npm:24.1.9" +"@vaadin/a11y-base@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/a11y-base@npm:24.1.10" dependencies: "@open-wc/dedupe-mixin": ^1.3.0 "@polymer/polymer": ^3.0.0 - "@vaadin/component-base": ~24.1.9 + "@vaadin/component-base": ~24.1.10 lit: ^2.0.0 - checksum: 773c96bf2d99668a43fa5420002bd8e9c1c677bcf6ab7248cde7b46520f2819e8a862ca930f3dcebb8eae5f312ebaa7af7353d495407766e9dde2f02162868c2 + checksum: aec01290993b717c219f3d84959cc0cec8db4717422d69a721549691620121d877ebc2c8f5763e91b92770d86c8dd76d4d98b2b4216f67a56fb7a526e7e2c916 languageName: node linkType: hard -"@vaadin/combo-box@npm:24.1.9": - version: 24.1.9 - resolution: "@vaadin/combo-box@npm:24.1.9" +"@vaadin/combo-box@npm:24.1.10": + version: 24.1.10 + resolution: "@vaadin/combo-box@npm:24.1.10" dependencies: "@open-wc/dedupe-mixin": ^1.3.0 "@polymer/polymer": ^3.0.0 - "@vaadin/a11y-base": ~24.1.9 - "@vaadin/component-base": ~24.1.9 - "@vaadin/field-base": ~24.1.9 - "@vaadin/input-container": ~24.1.9 - "@vaadin/item": ~24.1.9 - "@vaadin/lit-renderer": ~24.1.9 - "@vaadin/overlay": ~24.1.9 - "@vaadin/vaadin-lumo-styles": ~24.1.9 - "@vaadin/vaadin-material-styles": ~24.1.9 - "@vaadin/vaadin-themable-mixin": ~24.1.9 - checksum: a709aefc2bacc150b3d86fbf825f2dd381f8fdf863250ff4beabfdb084c765d8b5a5dac4cfe5641875aed8be67c1f72fc6e3bc9572baf26b68c88c58ba148421 + "@vaadin/a11y-base": ~24.1.10 + "@vaadin/component-base": ~24.1.10 + "@vaadin/field-base": ~24.1.10 + "@vaadin/input-container": ~24.1.10 + "@vaadin/item": ~24.1.10 + "@vaadin/lit-renderer": ~24.1.10 + "@vaadin/overlay": ~24.1.10 + "@vaadin/vaadin-lumo-styles": ~24.1.10 + "@vaadin/vaadin-material-styles": ~24.1.10 + "@vaadin/vaadin-themable-mixin": ~24.1.10 + checksum: 0e776a8f2e606d7e1f667dda9f26724b31520354ce64e6333e19f9fc1b67ead07acd370e8122bc26c910802e83e789e825de8fe746c26d2d53eb91f4f880f1e7 languageName: node linkType: hard -"@vaadin/component-base@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/component-base@npm:24.1.9" +"@vaadin/component-base@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/component-base@npm:24.1.10" dependencies: "@open-wc/dedupe-mixin": ^1.3.0 "@polymer/polymer": ^3.0.0 "@vaadin/vaadin-development-mode-detector": ^2.0.0 "@vaadin/vaadin-usage-statistics": ^2.1.0 lit: ^2.0.0 - checksum: 5480a5523e68bc38a1438c5f1a892f9b9901b24a736927107fd95fa4f699b611c12f4ae24a272d0133cb165561951203fa17be6c0e9742092827c580d69d1c4c + checksum: fbb2c40c6bfea2bf38c4161e70bb17bc8c7eef5b281d7a9e4e5f83e5bb7ade4d41cff5eb3e9f580a45470cee84a2efb675b32e878733d989cac5e56e21750627 languageName: node linkType: hard -"@vaadin/field-base@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/field-base@npm:24.1.9" +"@vaadin/field-base@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/field-base@npm:24.1.10" dependencies: "@open-wc/dedupe-mixin": ^1.3.0 "@polymer/polymer": ^3.0.0 - "@vaadin/a11y-base": ~24.1.9 - "@vaadin/component-base": ~24.1.9 + "@vaadin/a11y-base": ~24.1.10 + "@vaadin/component-base": ~24.1.10 lit: ^2.0.0 - checksum: b9cef524ece180690b23deb5af4fcf2b121ef7df9c3028e1bdcf1e9d24374aadf416e18a922cae4cc9e8eac9f57b4de79c3787ef068c4e55f497b3632a3e92d3 + checksum: 0b88d9b69f41caf4a9f2b720fc50b49a57b79db7dc1c4fb85515a1ab79b650066960812c7be29125554a68f5b7200cec6586dfec5385f70a079632b8f1b9bf41 languageName: node linkType: hard -"@vaadin/icon@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/icon@npm:24.1.9" +"@vaadin/icon@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/icon@npm:24.1.10" dependencies: "@polymer/polymer": ^3.0.0 - "@vaadin/component-base": ~24.1.9 - "@vaadin/vaadin-lumo-styles": ~24.1.9 - "@vaadin/vaadin-themable-mixin": ~24.1.9 + "@vaadin/component-base": ~24.1.10 + "@vaadin/vaadin-lumo-styles": ~24.1.10 + "@vaadin/vaadin-themable-mixin": ~24.1.10 lit: ^2.0.0 - checksum: 53e84bf2afc4c5ed50274080e21a1eca964d2c79efaa93c8b83f798adea8a89a73ee5361b812f63773485299943b23bffea11ce91467c8d991d2a851b248d242 + checksum: 33980e49503b2e5986ceb4f81d5c520f1a0f252a1d49001a96aef3a38180d0840fc2066ccc858bfca1eaa086ea73ec113c0a3401a57661ed72c0eb4d5425f245 languageName: node linkType: hard -"@vaadin/input-container@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/input-container@npm:24.1.9" +"@vaadin/input-container@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/input-container@npm:24.1.10" dependencies: "@polymer/polymer": ^3.0.0 - "@vaadin/component-base": ~24.1.9 - "@vaadin/vaadin-lumo-styles": ~24.1.9 - "@vaadin/vaadin-material-styles": ~24.1.9 - "@vaadin/vaadin-themable-mixin": ~24.1.9 - checksum: 4b126151bacf2f6c030c0a75a2e38e91dfd80bbb4ae009f2a250ffa2d4c9accda0d4ffdf16da8f43017641decf12c37c2722e66cb41cda718f413fe311d7fdb4 + "@vaadin/component-base": ~24.1.10 + "@vaadin/vaadin-lumo-styles": ~24.1.10 + "@vaadin/vaadin-material-styles": ~24.1.10 + "@vaadin/vaadin-themable-mixin": ~24.1.10 + checksum: ad6bda87ed61e9f6ce9011491b0b9a009bf5f4514f93b7b5617f575950015210f69c87371fd342be7c8b51fc82bbc70ca9af559dc8de90343c6818e1428fa416 languageName: node linkType: hard -"@vaadin/item@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/item@npm:24.1.9" +"@vaadin/item@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/item@npm:24.1.10" dependencies: "@open-wc/dedupe-mixin": ^1.3.0 "@polymer/polymer": ^3.0.0 - "@vaadin/a11y-base": ~24.1.9 - "@vaadin/component-base": ~24.1.9 - "@vaadin/vaadin-lumo-styles": ~24.1.9 - "@vaadin/vaadin-material-styles": ~24.1.9 - "@vaadin/vaadin-themable-mixin": ~24.1.9 - checksum: 50ec496b64c6062fe560c7481269b9fe2f381432415bae41c97b4a16ab7507fa66ff33a750402b6644792051fe121239b6f253dc2414a2c7aa3ab8f901bbbcd6 + "@vaadin/a11y-base": ~24.1.10 + "@vaadin/component-base": ~24.1.10 + "@vaadin/vaadin-lumo-styles": ~24.1.10 + "@vaadin/vaadin-material-styles": ~24.1.10 + "@vaadin/vaadin-themable-mixin": ~24.1.10 + checksum: 81158c43976d159bed8a92a54bfe40ca319650aa60c8a4bd5b89e69f965abf385d6f5ac7bbef1040e1c60adc5c2d1aeacc75dede1618923159b686209209a1da languageName: node linkType: hard -"@vaadin/lit-renderer@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/lit-renderer@npm:24.1.9" +"@vaadin/lit-renderer@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/lit-renderer@npm:24.1.10" dependencies: lit: ^2.0.0 - checksum: 3ba6836d211f1cc458c898e4ac5e55aba2cf33efe2a9df8afd7d98dc039aa6b4eccc0274a08c7b466795760e90887d81341d56fca3ad33215ea8d8e4bd7b9f11 + checksum: f5eec0c3a8482bda03955b3e35e730edde78d2a06672a1ee0c4bd691e93308c7303b2051cb80b79f93dd924c2a2094c6135ecedbdb47dfc5a3068235b041b9e6 languageName: node linkType: hard -"@vaadin/overlay@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/overlay@npm:24.1.9" +"@vaadin/overlay@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/overlay@npm:24.1.10" dependencies: "@open-wc/dedupe-mixin": ^1.3.0 "@polymer/polymer": ^3.0.0 - "@vaadin/a11y-base": ~24.1.9 - "@vaadin/component-base": ~24.1.9 - "@vaadin/vaadin-lumo-styles": ~24.1.9 - "@vaadin/vaadin-material-styles": ~24.1.9 - "@vaadin/vaadin-themable-mixin": ~24.1.9 - checksum: 387b642a9f0d7b85d3cee0a1a6a09701ef39ba0fd667cb0e2701fd0e8a40d6afd974044588f47f34ec66a4ca0cd524c72f4f34b90b7d74f5587ff3824eb79317 + "@vaadin/a11y-base": ~24.1.10 + "@vaadin/component-base": ~24.1.10 + "@vaadin/vaadin-lumo-styles": ~24.1.10 + "@vaadin/vaadin-material-styles": ~24.1.10 + "@vaadin/vaadin-themable-mixin": ~24.1.10 + checksum: 6bd9477c11a86cd26b42de11da9ca8f863b9e0e75e3b54c1fbdacd64c8974dbeaecbde1842be32ef3108aab6611c1e266b0cacd42c3ab977457d4e18bcbf8b27 languageName: node linkType: hard @@ -4885,34 +4885,34 @@ __metadata: languageName: node linkType: hard -"@vaadin/vaadin-lumo-styles@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/vaadin-lumo-styles@npm:24.1.9" +"@vaadin/vaadin-lumo-styles@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/vaadin-lumo-styles@npm:24.1.10" dependencies: "@polymer/polymer": ^3.0.0 - "@vaadin/icon": ~24.1.9 - "@vaadin/vaadin-themable-mixin": ~24.1.9 - checksum: c4266f3b0a8cb739f50d67cd9e68965dbf462505a04c51659809f56e747492131b8b7da422b2725bfeec387978b782418268c46dc988e2f5cefec6303b89ca5c + "@vaadin/icon": ~24.1.10 + "@vaadin/vaadin-themable-mixin": ~24.1.10 + checksum: 40abf84d0552b16561c528cd41f9acd15cfb9bee2796c0c8cedacd8977059ad5e01834aa36c8c25ad605847bb8759e3753f7e4c6a5f15127f262b841a457f59e languageName: node linkType: hard -"@vaadin/vaadin-material-styles@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/vaadin-material-styles@npm:24.1.9" +"@vaadin/vaadin-material-styles@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/vaadin-material-styles@npm:24.1.10" dependencies: "@polymer/polymer": ^3.0.0 - "@vaadin/vaadin-themable-mixin": ~24.1.9 - checksum: f4cda5bf4c7d8a00cbbd59dc21e540a5b2df7c0f20056442564f8636a31f2784e8b403ee9aa330ddff0adbf0308f3a3df5a356c08ac3572e3429aad43c062baf + "@vaadin/vaadin-themable-mixin": ~24.1.10 + checksum: 3ba00529fe103a32d50fa1a68d1c127b71ff944ad7566da31c7bf8e8c125f48a1c1ad91c96070b22c54087592ea9559392495f0d9fe8d9b65b2046cc4e855b52 languageName: node linkType: hard -"@vaadin/vaadin-themable-mixin@npm:24.1.9, @vaadin/vaadin-themable-mixin@npm:~24.1.9": - version: 24.1.9 - resolution: "@vaadin/vaadin-themable-mixin@npm:24.1.9" +"@vaadin/vaadin-themable-mixin@npm:24.1.10, @vaadin/vaadin-themable-mixin@npm:~24.1.10": + version: 24.1.10 + resolution: "@vaadin/vaadin-themable-mixin@npm:24.1.10" dependencies: "@open-wc/dedupe-mixin": ^1.3.0 lit: ^2.0.0 - checksum: b006a5b998b2e5ee74ad3b04fd933c34d8d4c8b0578d52ed334de8ad957c78ee6ac4e92e2c38372dcd942b6b75ea65a9ae88549c8097e02c1f386ea4d44338e2 + checksum: 409b8ef11f09a1090630ee09851366e40cc04583853b4ccd2aeef17915cf466a3bd7e0f183b98a469396aef24600cf30c794c3da9ccd72085b9f7588bec67095 languageName: node linkType: hard @@ -9635,12 +9635,12 @@ __metadata: "@babel/runtime": 7.23.1 "@braintree/sanitize-url": 6.0.4 "@codemirror/autocomplete": 6.9.1 - "@codemirror/commands": 6.2.5 + "@codemirror/commands": 6.3.0 "@codemirror/language": 6.9.1 "@codemirror/legacy-modes": 6.3.3 "@codemirror/search": 6.5.4 "@codemirror/state": 6.2.1 - "@codemirror/view": 6.20.2 + "@codemirror/view": 6.21.1 "@egjs/hammerjs": 2.0.17 "@formatjs/intl-datetimeformat": 6.10.3 "@formatjs/intl-displaynames": 6.5.2 @@ -9689,7 +9689,7 @@ __metadata: "@material/mwc-top-app-bar": 0.27.0 "@material/mwc-top-app-bar-fixed": 0.27.0 "@material/top-app-bar": =14.0.0-canary.53b3cad2f.0 - "@material/web": =1.0.0-pre.17 + "@material/web": =1.0.0 "@mdi/js": 7.2.96 "@mdi/svg": 7.2.96 "@octokit/auth-oauth-device": 6.0.1 @@ -9731,8 +9731,8 @@ __metadata: "@types/webspeechapi": 0.0.29 "@typescript-eslint/eslint-plugin": 6.7.3 "@typescript-eslint/parser": 6.7.3 - "@vaadin/combo-box": 24.1.9 - "@vaadin/vaadin-themable-mixin": 24.1.9 + "@vaadin/combo-box": 24.1.10 + "@vaadin/vaadin-themable-mixin": 24.1.10 "@vibrant/color": 3.2.1-alpha.1 "@vibrant/core": 3.2.1-alpha.1 "@vibrant/quantizer-mmcq": 3.2.1-alpha.1 @@ -9793,7 +9793,7 @@ __metadata: lit-analyzer: 2.0.0-pre.3 lodash.template: 4.5.0 luxon: 3.4.3 - magic-string: 0.30.3 + magic-string: 0.30.4 map-stream: 0.0.7 marked: 9.0.3 memoize-one: 6.0.0 @@ -11710,12 +11710,12 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:0.30.3": - version: 0.30.3 - resolution: "magic-string@npm:0.30.3" +"magic-string@npm:0.30.4": + version: 0.30.4 + resolution: "magic-string@npm:0.30.4" dependencies: "@jridgewell/sourcemap-codec": ^1.4.15 - checksum: a5a9ddf9bd3bf49a2de1048bf358464f1bda7b3cc1311550f4a0ba8f81a4070e25445d53a5ee28850161336f1bff3cf28aa3320c6b4aeff45ce3e689f300b2f3 + checksum: bef57c926d14e9926c142307c1494cc4bdea28a56601a7624f1a5bcd34a63800e2d8a363e826436ce86104460a63ee76c7c185a6ab1f8f7ee5af2de475b98947 languageName: node linkType: hard @@ -13267,13 +13267,13 @@ __metadata: linkType: hard "postcss@npm:^8.4.14": - version: 8.4.30 - resolution: "postcss@npm:8.4.30" + version: 8.4.31 + resolution: "postcss@npm:8.4.31" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 6c810c10c9bd3e03ca016e0b6b6756261e640aba1a9a7b1200b55502bc34b9165e38f590aef3493afc2f30ab55cdfcd43fd0f8408d69a77318ddbcf2a8ad164b + checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea languageName: node linkType: hard