diff --git a/.github/workflows/cast_deployment.yaml b/.github/workflows/cast_deployment.yaml index 82eaf245ea29..7538244e40c9 100644 --- a/.github/workflows/cast_deployment.yaml +++ b/.github/workflows/cast_deployment.yaml @@ -21,12 +21,12 @@ jobs: url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }} steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 with: ref: dev - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn @@ -57,12 +57,12 @@ jobs: url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }} steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 with: ref: master - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f09fd4c1b799..ea51c3ab437e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -24,9 +24,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn @@ -37,7 +37,7 @@ jobs: - name: Build resources run: ./node_modules/.bin/gulp gen-icons-json build-translations build-locale-data gather-gallery-pages - name: Setup lint cache - uses: actions/cache@v4.1.1 + uses: actions/cache@v4.1.2 with: path: | node_modules/.cache/prettier @@ -58,9 +58,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn @@ -76,9 +76,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn @@ -100,9 +100,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ae9a1a54067f..a98228bddb2b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. diff --git a/.github/workflows/demo_deployment.yaml b/.github/workflows/demo_deployment.yaml index dd073a03671b..452d43cac351 100644 --- a/.github/workflows/demo_deployment.yaml +++ b/.github/workflows/demo_deployment.yaml @@ -22,12 +22,12 @@ jobs: url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }} steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 with: ref: dev - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn @@ -58,12 +58,12 @@ jobs: url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }} steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 with: ref: master - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn diff --git a/.github/workflows/design_deployment.yaml b/.github/workflows/design_deployment.yaml index bfcf44eadf78..f82539658397 100644 --- a/.github/workflows/design_deployment.yaml +++ b/.github/workflows/design_deployment.yaml @@ -16,10 +16,10 @@ jobs: url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }} steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn diff --git a/.github/workflows/design_preview.yaml b/.github/workflows/design_preview.yaml index 18083a67f168..96b6cf442288 100644 --- a/.github/workflows/design_preview.yaml +++ b/.github/workflows/design_preview.yaml @@ -21,10 +21,10 @@ jobs: if: github.repository == 'home-assistant/frontend' && contains(github.event.pull_request.labels.*.name, 'needs design preview') steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn diff --git a/.github/workflows/nightly.yaml b/.github/workflows/nightly.yaml index 408ad46a81c8..7a4ee65b1b57 100644 --- a/.github/workflows/nightly.yaml +++ b/.github/workflows/nightly.yaml @@ -20,7 +20,7 @@ jobs: contents: write steps: - name: Checkout the repository - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Set up Python ${{ env.PYTHON_VERSION }} uses: actions/setup-python@v5 @@ -28,7 +28,7 @@ jobs: python-version: ${{ env.PYTHON_VERSION }} - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 5d547e802bd3..2eaf2b6a26f6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -23,7 +23,7 @@ jobs: contents: write # Required to upload release assets steps: - name: Checkout the repository - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Verify version uses: home-assistant/actions/helpers/verify-version@master @@ -34,7 +34,7 @@ jobs: python-version: ${{ env.PYTHON_VERSION }} - name: Setup Node - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4.1.0 with: node-version-file: ".nvmrc" cache: yarn diff --git a/.github/workflows/translations.yaml b/.github/workflows/translations.yaml index ec035e3034fa..5c74aa757970 100644 --- a/.github/workflows/translations.yaml +++ b/.github/workflows/translations.yaml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout the repository - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Upload Translations run: | diff --git a/build-scripts/gulp/locale-data.js b/build-scripts/gulp/locale-data.js index 4da1d8f218cd..4cf91711d495 100755 --- a/build-scripts/gulp/locale-data.js +++ b/build-scripts/gulp/locale-data.js @@ -24,8 +24,11 @@ const convertToJSON = async ( ) => { let localeData; try { + // use "pt" for "pt-BR", because "pt-BR" is unsupported by @formatjs + const language = lang === "pt-BR" ? "pt" : lang; + localeData = await readFile( - join(formatjsDir, pkg, subDir, `${lang}.js`), + join(formatjsDir, pkg, subDir, `${language}.js`), "utf-8" ); } catch (e) { diff --git a/cast/src/launcher/layout/hc-cast.ts b/cast/src/launcher/layout/hc-cast.ts index 2aae14bb98a5..b8c2b9bf7ec4 100644 --- a/cast/src/launcher/layout/hc-cast.ts +++ b/cast/src/launcher/layout/hc-cast.ts @@ -1,5 +1,6 @@ import "@material/mwc-button/mwc-button"; -import { ActionDetail } from "@material/mwc-list/mwc-list"; +import "@material/mwc-list/mwc-list"; +import type { ActionDetail } from "@material/mwc-list/mwc-list"; import { mdiCast, mdiCastConnected, mdiViewDashboard } from "@mdi/js"; import { Auth, Connection } from "home-assistant-js-websocket"; import { CSSResultGroup, LitElement, TemplateResult, css, html } from "lit"; @@ -89,8 +90,8 @@ class HcCast extends LitElement { generateDefaultViewConfig({}, {}, {}, {}, () => ""), ] ).map( - (view, idx) => - html` html` + `} ` + >`} + + ` )} `} diff --git a/cast/src/receiver/layout/hc-lovelace.ts b/cast/src/receiver/layout/hc-lovelace.ts index 010979e32d08..6df50c6109bb 100644 --- a/cast/src/receiver/layout/hc-lovelace.ts +++ b/cast/src/receiver/layout/hc-lovelace.ts @@ -1,10 +1,11 @@ import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; -import { customElement, property, query } from "lit/decorators"; +import { customElement, property } from "lit/decorators"; import { fireEvent } from "../../../../src/common/dom/fire_event"; import { LovelaceConfig } from "../../../../src/data/lovelace/config/types"; import { getPanelTitleFromUrlPath } from "../../../../src/data/panel"; import { Lovelace } from "../../../../src/panels/lovelace/types"; import "../../../../src/panels/lovelace/views/hui-view"; +import "../../../../src/panels/lovelace/views/hui-view-container"; import { HomeAssistant } from "../../../../src/types"; import "./hc-launch-screen"; @@ -22,8 +23,6 @@ class HcLovelace extends LitElement { @property() public urlPath: string | null = null; - @query("hui-view") private _huiView?: HTMLElement; - protected render(): TemplateResult { const index = this._viewIndex; if (index === undefined) { @@ -47,12 +46,22 @@ class HcLovelace extends LitElement { setEditMode: () => undefined, showToast: () => undefined, }; + + const viewConfig = this.lovelaceConfig.views[index]; + const background = viewConfig.background || this.lovelaceConfig.background; + return html` - + .background=${background} + .theme=${viewConfig.theme} + > + + `; } @@ -82,26 +91,6 @@ class HcLovelace extends LitElement { }${viewTitle || ""}` : undefined, }); - - const configBackground = - this.lovelaceConfig.views[index].background || - this.lovelaceConfig.background; - - const backgroundStyle = - typeof configBackground === "string" - ? configBackground - : configBackground?.image - ? `center / cover no-repeat url('${configBackground.image}')` - : undefined; - - if (backgroundStyle) { - this._huiView!.style.setProperty( - "--lovelace-background", - backgroundStyle - ); - } else { - this._huiView!.style.removeProperty("--lovelace-background"); - } } } } @@ -125,19 +114,15 @@ class HcLovelace extends LitElement { static get styles(): CSSResultGroup { return css` - :host { - min-height: 100vh; - height: 0; + hui-view-container { display: flex; - flex-direction: column; + position: relative; + min-height: 100vh; box-sizing: border-box; - background: var(--primary-background-color); - } - :host > * { - flex: 1; } hui-view { - background: var(--lovelace-background, var(--primary-background-color)); + flex: 1 1 100%; + max-width: 100%; } `; } diff --git a/hassio/src/backups/hassio-backups.ts b/hassio/src/backups/hassio-backups.ts index 095bd922f493..3512dd8bd863 100644 --- a/hassio/src/backups/hassio-backups.ts +++ b/hassio/src/backups/hassio-backups.ts @@ -48,6 +48,7 @@ import { showHassioBackupDialog } from "../dialogs/backup/show-dialog-hassio-bac import { showHassioCreateBackupDialog } from "../dialogs/backup/show-dialog-hassio-create-backup"; import { supervisorTabs } from "../hassio-tabs"; import { hassioStyle } from "../resources/hassio-style"; +import "../../../src/layouts/hass-loading-screen"; type BackupItem = HassioBackup & { secondary: string; @@ -69,6 +70,8 @@ export class HassioBackups extends LitElement { @state() private _backups?: HassioBackup[] = []; + @state() private _isLoading = false; + @query("hass-tabs-subpage-data-table", true) private _dataTable!: HaTabsSubpageDataTable; @@ -77,15 +80,10 @@ export class HassioBackups extends LitElement { public connectedCallback(): void { super.connectedCallback(); if (this.hass && this._firstUpdatedCalled) { - this.refreshData(); + this.fetchBackups(); } } - public async refreshData() { - await reloadHassioBackups(this.hass); - await this.fetchBackups(); - } - private _computeBackupContent = (backup: HassioBackup): string => { if (backup.type === "full") { return this.supervisor.localize("backup.full_backup"); @@ -115,7 +113,7 @@ export class HassioBackups extends LitElement { protected firstUpdated(changedProperties: PropertyValues): void { super.firstUpdated(changedProperties); if (this.hass && this.isConnected) { - this.refreshData(); + this.fetchBackups(); } this._firstUpdatedCalled = true; } @@ -175,6 +173,13 @@ export class HassioBackups extends LitElement { if (!this.supervisor) { return nothing; } + + if (this._isLoading) { + return html``; + } + return html` ) { switch (ev.detail.index) { case 0: - this.refreshData(); + this.fetchBackups(); break; case 1: showHassioBackupLocationDialog(this, { supervisor: this.supervisor }); @@ -306,13 +311,15 @@ export class HassioBackups extends LitElement { supervisor: this.supervisor, onDelete: () => this.fetchBackups(), }), - reloadBackup: () => this.refreshData(), + reloadBackup: () => this.fetchBackups(), }); } private async fetchBackups() { + this._isLoading = true; await reloadHassioBackups(this.hass); this._backups = await fetchHassioBackups(this.hass); + this._isLoading = false; } private async _deleteSelected() { @@ -339,8 +346,7 @@ export class HassioBackups extends LitElement { }); return; } - await reloadHassioBackups(this.hass); - this._backups = await fetchHassioBackups(this.hass); + await this.fetchBackups(); this._dataTable.clearSelection(); } diff --git a/hassio/src/update-available/update-available-card.ts b/hassio/src/update-available/update-available-card.ts index d2c22ac0e107..e00035b987a0 100644 --- a/hassio/src/update-available/update-available-card.ts +++ b/hassio/src/update-available/update-available-card.ts @@ -1,11 +1,10 @@ -import "@material/mwc-list/mwc-list-item"; import { css, CSSResultGroup, html, LitElement, - PropertyValues, nothing, + PropertyValues, } from "lit"; import { customElement, property, state } from "lit/decorators"; import memoizeOne from "memoize-one"; @@ -16,12 +15,12 @@ import "../../../src/components/ha-button-menu"; import "../../../src/components/ha-card"; import "../../../src/components/ha-checkbox"; import "../../../src/components/ha-faded"; -import "../../../src/components/ha-formfield"; import "../../../src/components/ha-icon-button"; import "../../../src/components/ha-markdown"; import "../../../src/components/ha-settings-row"; import "../../../src/components/ha-svg-icon"; import "../../../src/components/ha-switch"; +import type { HaSwitch } from "../../../src/components/ha-switch"; import { fetchHassioAddonChangelog, fetchHassioAddonInfo, @@ -42,6 +41,7 @@ import { updateCore } from "../../../src/data/supervisor/core"; import { StoreAddon } from "../../../src/data/supervisor/store"; import { Supervisor } from "../../../src/data/supervisor/supervisor"; import { showAlertDialog } from "../../../src/dialogs/generic/show-dialog-box"; +import { haStyle } from "../../../src/resources/styles"; import { HomeAssistant, Route } from "../../../src/types"; import { addonArchIsSupported, extractChangelog } from "../util/addon"; @@ -149,7 +149,7 @@ class UpdateAvailableCard extends LitElement { ` - : ""} + : nothing}

${this.supervisor.localize( @@ -164,15 +164,17 @@ class UpdateAvailableCard extends LitElement {

${["core", "addon"].includes(this._updateType) ? html` - - - +
+ + + ${this.supervisor.localize( + "update_available.create_backup" + )} + + + ` - : ""} + : nothing} ` : html` ${changelog - ? html` - - - ` - : ""} + ? html` + + + + + ` + : nothing} - + ${this.supervisor.localize("common.update")} ` - : ""} + : nothing} `; } @@ -242,9 +246,11 @@ class UpdateAvailableCard extends LitElement { if (this._updateType && !["core", "addon"].includes(this._updateType)) { return false; } - const checkbox = this.shadowRoot?.querySelector("ha-checkbox"); - if (checkbox) { - return checkbox.checked; + const createBackupSwitch = this.shadowRoot?.getElementById( + "create-backup" + ) as HaSwitch; + if (createBackupSwitch) { + return createBackupSwitch.checked; } return true; } @@ -397,41 +403,50 @@ class UpdateAvailableCard extends LitElement { } static get styles(): CSSResultGroup { - return css` - :host { - display: block; - } - ha-card { - margin: auto; - } - a { - text-decoration: none; - color: var(--primary-text-color); - } - ha-settings-row { - padding: 0; - } - .card-actions { - display: flex; - justify-content: space-between; - border-top: none; - padding: 0 8px 8px; - } + return [ + haStyle, + css` + :host { + display: block; + } + ha-card { + margin: auto; + } + a { + text-decoration: none; + color: var(--primary-text-color); + } + .card-actions { + display: flex; + justify-content: space-between; + } - ha-circular-progress { - display: block; - margin: 32px; - text-align: center; - } + ha-circular-progress { + display: block; + margin: 32px; + text-align: center; + } - .progress-text { - text-align: center; - } + .progress-text { + text-align: center; + } - ha-markdown { - padding-bottom: 8px; - } - `; + ha-markdown { + padding-bottom: 8px; + } + + ha-settings-row { + padding: 0; + margin-bottom: -16px; + } + + hr { + border-color: var(--divider-color); + border-bottom: none; + margin: 16px 0 0 0; + } + `, + ]; } } diff --git a/package.json b/package.json index ff1ade0cc619..774c9e9bfa83 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "license": "Apache-2.0", "type": "module", "dependencies": { - "@babel/runtime": "7.25.7", + "@babel/runtime": "7.26.0", "@braintree/sanitize-url": "7.1.0", "@codemirror/autocomplete": "6.18.1", "@codemirror/commands": "6.7.1", @@ -35,14 +35,14 @@ "@codemirror/state": "6.4.1", "@codemirror/view": "6.34.1", "@egjs/hammerjs": "2.0.17", - "@formatjs/intl-datetimeformat": "6.15.0", - "@formatjs/intl-displaynames": "6.7.0", - "@formatjs/intl-getcanonicallocales": "2.4.0", - "@formatjs/intl-listformat": "7.6.0", - "@formatjs/intl-locale": "4.1.0", - "@formatjs/intl-numberformat": "8.13.0", - "@formatjs/intl-pluralrules": "5.2.17", - "@formatjs/intl-relativetimeformat": "11.3.0", + "@formatjs/intl-datetimeformat": "6.16.1", + "@formatjs/intl-displaynames": "6.8.1", + "@formatjs/intl-getcanonicallocales": "2.5.1", + "@formatjs/intl-listformat": "7.7.1", + "@formatjs/intl-locale": "4.2.1", + "@formatjs/intl-numberformat": "8.14.1", + "@formatjs/intl-pluralrules": "5.3.1", + "@formatjs/intl-relativetimeformat": "11.4.1", "@fullcalendar/core": "6.1.15", "@fullcalendar/daygrid": "6.1.15", "@fullcalendar/interaction": "6.1.15", @@ -89,8 +89,8 @@ "@polymer/polymer": "3.5.2", "@replit/codemirror-indentation-markers": "6.5.3", "@thomasloven/round-slider": "0.6.0", - "@vaadin/combo-box": "24.5.0", - "@vaadin/vaadin-themable-mixin": "24.5.0", + "@vaadin/combo-box": "24.5.1", + "@vaadin/vaadin-themable-mixin": "24.5.1", "@vibrant/color": "3.2.1-alpha.1", "@vibrant/core": "3.2.1-alpha.1", "@vibrant/quantizer-mmcq": "3.2.1-alpha.1", @@ -114,7 +114,7 @@ "hls.js": "patch:hls.js@npm%3A1.5.7#~/.yarn/patches/hls.js-npm-1.5.7-f5bbd3d060.patch", "home-assistant-js-websocket": "9.4.0", "idb-keyval": "6.2.1", - "intl-messageformat": "10.7.1", + "intl-messageformat": "10.7.3", "js-yaml": "4.1.0", "leaflet": "1.9.4", "leaflet-draw": "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch", @@ -151,12 +151,12 @@ "xss": "1.0.15" }, "devDependencies": { - "@babel/core": "7.25.8", + "@babel/core": "7.26.0", "@babel/helper-define-polyfill-provider": "0.6.2", - "@babel/plugin-proposal-decorators": "7.25.7", - "@babel/plugin-transform-runtime": "7.25.7", - "@babel/preset-env": "7.25.8", - "@babel/preset-typescript": "7.25.7", + "@babel/plugin-proposal-decorators": "7.25.9", + "@babel/plugin-transform-runtime": "7.25.9", + "@babel/preset-env": "7.26.0", + "@babel/preset-typescript": "7.26.0", "@bundle-stats/plugin-webpack-filter": "4.16.0", "@koa/cors": "5.0.0", "@lokalise/node-api": "12.8.0", @@ -176,7 +176,7 @@ "@types/glob": "8.1.0", "@types/html-minifier-terser": "7.0.2", "@types/js-yaml": "4.0.9", - "@types/leaflet": "1.9.13", + "@types/leaflet": "1.9.14", "@types/leaflet-draw": "1.0.11", "@types/lodash.merge": "4.6.9", "@types/luxon": "3.4.2", @@ -194,7 +194,7 @@ "babel-loader": "9.2.1", "babel-plugin-template-html-minifier": "4.1.0", "browserslist-useragent-regexp": "4.1.3", - "chai": "5.1.1", + "chai": "5.1.2", "del": "8.0.0", "eslint": "8.57.1", "eslint-config-airbnb-base": "15.0.0", diff --git a/src/components/data-table/ha-data-table-labels.ts b/src/components/data-table/ha-data-table-labels.ts index 66c137e92a6a..e87ac80ea241 100644 --- a/src/components/data-table/ha-data-table-labels.ts +++ b/src/components/data-table/ha-data-table-labels.ts @@ -108,6 +108,7 @@ class HaDataTableLabels extends LitElement { ha-label { --ha-label-background-color: var(--color, var(--grey-color)); --ha-label-background-opacity: 0.5; + outline: 1px solid var(--outline-color); } ha-button-menu { border-radius: 10px; diff --git a/src/components/date-range-picker.ts b/src/components/date-range-picker.ts index 523ac64eb067..bc67b46bd93b 100644 --- a/src/components/date-range-picker.ts +++ b/src/components/date-range-picker.ts @@ -254,7 +254,7 @@ class DateRangePickerElement extends WrappedElement { .daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect { - background: transparent; + background: var(--card-background-color); border: 1px solid var(--divider-color); color: var(--primary-color); } diff --git a/src/components/ha-header-bar.ts b/src/components/ha-header-bar.ts index aef90d635273..d3a32626f42b 100644 --- a/src/components/ha-header-bar.ts +++ b/src/components/ha-header-bar.ts @@ -46,7 +46,7 @@ export class HaHeaderBar extends LitElement { flex: none; } .mdc-top-app-bar__title { - padding-inline-start: 20px; + padding-inline-start: 24px; padding-inline-end: initial; } `, diff --git a/src/components/ha-labels-picker.ts b/src/components/ha-labels-picker.ts index 4d59f33045f3..d05cae721546 100644 --- a/src/components/ha-labels-picker.ts +++ b/src/components/ha-labels-picker.ts @@ -216,6 +216,7 @@ export class HaLabelsPicker extends SubscribeMixin(LitElement) { ha-input-chip { --md-input-chip-selected-container-color: var(--color, var(--grey-color)); --ha-input-chip-selected-container-opacity: 0.5; + --md-input-chip-selected-outline-width: 1px; } `; } diff --git a/src/components/ha-markdown.ts b/src/components/ha-markdown.ts index d8f0ba227014..f66037776bfc 100644 --- a/src/components/ha-markdown.ts +++ b/src/components/ha-markdown.ts @@ -86,6 +86,11 @@ export class HaMarkdown extends LitElement { font-size: 1.5em; font-weight: bold; } + hr { + border-color: var(--divider-color); + border-bottom: none; + margin: 16px 0; + } `; } } diff --git a/src/components/ha-service-control.ts b/src/components/ha-service-control.ts index 6b3acc0f87bc..32f25e702422 100644 --- a/src/components/ha-service-control.ts +++ b/src/components/ha-service-control.ts @@ -61,6 +61,11 @@ const showOptionalToggle = (field) => !field.required && !("boolean" in field.selector && field.default); +interface Field extends Omit { + key: string; + selector?: Selector; +} + interface ExtHassService extends Omit { fields: Array< Omit & { @@ -70,6 +75,7 @@ interface ExtHassService extends Omit { collapsed?: boolean; } >; + flatFields: Array; hasSelector: string[]; } @@ -177,7 +183,7 @@ export class HaServiceControl extends LitElement { if (!this._value.data) { this._value.data = {}; } - serviceData.fields.forEach((field) => { + serviceData.flatFields.forEach((field) => { if ( field.selector && field.required && @@ -241,22 +247,28 @@ export class HaServiceControl extends LitElement { selector: value.selector as Selector | undefined, })); + const flatFields: Field[] = []; const hasSelector: string[] = []; fields.forEach((field) => { if ((field as any).fields) { Object.entries((field as any).fields).forEach(([key, subField]) => { + flatFields.push({ ...(subField as Field), key }); if ((subField as any).selector) { hasSelector.push(key); } }); - } else if (field.selector) { - hasSelector.push(field.key); + } else { + flatFields.push(field); + if (field.selector) { + hasSelector.push(field.key); + } } }); return { ...serviceDomains[domain][serviceName], fields, + flatFields, hasSelector, }; } @@ -397,7 +409,7 @@ export class HaServiceControl extends LitElement { const hasOptional = Boolean( !shouldRenderServiceDataYaml && - serviceData?.fields.some((field) => showOptionalToggle(field)) + serviceData?.flatFields.some((field) => showOptionalToggle(field)) ); const targetEntities = this._getTargetedEntities( @@ -667,7 +679,7 @@ export class HaServiceControl extends LitElement { const field = this._getServiceInfo( this._value?.action, this.hass.services - )?.fields.find((_field) => _field.key === key); + )?.flatFields.find((_field) => _field.key === key); let defaultValue = field?.default; diff --git a/src/components/ha-settings-row.ts b/src/components/ha-settings-row.ts index 4ba42277e319..e58bc1f41610 100644 --- a/src/components/ha-settings-row.ts +++ b/src/components/ha-settings-row.ts @@ -5,6 +5,8 @@ import { customElement, property } from "lit/decorators"; export class HaSettingsRow extends LitElement { @property({ type: Boolean, reflect: true }) public narrow = false; + @property({ type: Boolean, reflect: true }) public slim = false; // remove padding and min-height + @property({ type: Boolean, attribute: "three-line" }) public threeLine = false; @@ -42,14 +44,17 @@ export class HaSettingsRow extends LitElement { padding-bottom: 8px; padding-left: 0; padding-inline-start: 0; - padding-right: 16x; + padding-right: 16px; padding-inline-end: 16px; overflow: hidden; - display: var(--layout-vertical_-_display); - flex-direction: var(--layout-vertical_-_flex-direction); - justify-content: var(--layout-center-justified_-_justify-content); - flex: var(--layout-flex_-_flex); - flex-basis: var(--layout-flex_-_flex-basis); + display: var(--layout-vertical_-_display, flex); + flex-direction: var(--layout-vertical_-_flex-direction, column); + justify-content: var( + --layout-center-justified_-_justify-content, + center + ); + flex: var(--layout-flex_-_flex, 1); + flex-basis: var(--layout-flex_-_flex-basis, 0.000000001px); } .body[three-line] { min-height: var(--paper-item-body-three-line-min-height, 88px); @@ -109,6 +114,14 @@ export class HaSettingsRow extends LitElement { display: flex; align-items: center; } + :host([slim]), + :host([slim]) .content, + :host([slim]) ::slotted(ha-switch) { + padding: 0; + } + :host([slim]) .body { + min-height: 0; + } `; } } diff --git a/src/components/ha-top-app-bar-fixed.ts b/src/components/ha-top-app-bar-fixed.ts index e6fac8a01955..bfd71d75c1d3 100644 --- a/src/components/ha-top-app-bar-fixed.ts +++ b/src/components/ha-top-app-bar-fixed.ts @@ -24,7 +24,7 @@ export class HaTopAppBarFixed extends TopAppBarFixedBase { ); } .mdc-top-app-bar__title { - padding-inline-start: 20px; + padding-inline-start: 24px; padding-inline-end: initial; } `, diff --git a/src/components/ha-two-pane-top-app-bar-fixed.ts b/src/components/ha-two-pane-top-app-bar-fixed.ts index 5daae9d61858..0c5e1eddd804 100644 --- a/src/components/ha-two-pane-top-app-bar-fixed.ts +++ b/src/components/ha-two-pane-top-app-bar-fixed.ts @@ -321,7 +321,7 @@ export class TopAppBarBaseBase extends BaseElement { overflow: auto; } .mdc-top-app-bar__title { - padding-inline-start: 20px; + padding-inline-start: 24px; padding-inline-end: initial; } `, diff --git a/src/components/ha-web-rtc-player.ts b/src/components/ha-web-rtc-player.ts index e6276aa5f82f..a2ae49e47299 100644 --- a/src/components/ha-web-rtc-player.ts +++ b/src/components/ha-web-rtc-player.ts @@ -1,4 +1,5 @@ /* eslint-disable no-console */ +import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { css, CSSResultGroup, @@ -11,9 +12,12 @@ import { customElement, property, query, state } from "lit/decorators"; import { ifDefined } from "lit/directives/if-defined"; import { fireEvent } from "../common/dom/fire_event"; import { + addWebRtcCandidate, fetchWebRtcClientConfiguration, - handleWebRtcOffer, WebRtcAnswer, + WebRTCClientConfiguration, + webRtcOffer, + WebRtcOfferEvent, } from "../data/camera"; import type { HomeAssistant } from "../types"; import "./ha-alert"; @@ -27,7 +31,7 @@ import "./ha-alert"; class HaWebRtcPlayer extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; - @property() public entityid!: string; + @property() public entityid?: string; @property({ type: Boolean, attribute: "controls" }) public controls = false; @@ -45,12 +49,20 @@ class HaWebRtcPlayer extends LitElement { @state() private _error?: string; - @query("#remote-stream", true) private _videoEl!: HTMLVideoElement; + @query("#remote-stream") private _videoEl!: HTMLVideoElement; + + private _clientConfig?: WebRTCClientConfiguration; private _peerConnection?: RTCPeerConnection; private _remoteStream?: MediaStream; + private _unsub?: Promise; + + private _sessionId?: string; + + private _candidatesList: string[] = []; + protected override render(): TemplateResult { if (this._error) { return html`${this._error}`; @@ -70,7 +82,7 @@ class HaWebRtcPlayer extends LitElement { public override connectedCallback() { super.connectedCallback(); - if (this.hasUpdated) { + if (this.hasUpdated && this.entityid) { this._startWebRtc(); } } @@ -80,7 +92,8 @@ class HaWebRtcPlayer extends LitElement { this._cleanUp(); } - protected override updated(changedProperties: PropertyValues) { + protected override willUpdate(changedProperties: PropertyValues) { + super.willUpdate(changedProperties); if (!changedProperties.has("entityid")) { return; } @@ -88,28 +101,68 @@ class HaWebRtcPlayer extends LitElement { } private async _startWebRtc(): Promise { + this._cleanUp(); + + if (!this.hass || !this.entityid) { + return; + } + console.time("WebRTC"); this._error = undefined; console.timeLog("WebRTC", "start clientConfig"); - const clientConfig = await fetchWebRtcClientConfiguration( + this._clientConfig = await fetchWebRtcClientConfiguration( this.hass, this.entityid ); - console.timeLog("WebRTC", "end clientConfig", clientConfig); + console.timeLog("WebRTC", "end clientConfig", this._clientConfig); - const peerConnection = new RTCPeerConnection(clientConfig.configuration); + this._peerConnection = new RTCPeerConnection( + this._clientConfig.configuration + ); - if (clientConfig.dataChannel) { + if (this._clientConfig.dataChannel) { // Some cameras (such as nest) require a data channel to establish a stream // however, not used by any integrations. - peerConnection.createDataChannel(clientConfig.dataChannel); + this._peerConnection.createDataChannel(this._clientConfig.dataChannel); + } + + this._peerConnection.onnegotiationneeded = this._startNegotiation; + + this._peerConnection.onicecandidate = this._handleIceCandidate; + this._peerConnection.oniceconnectionstatechange = + this._iceConnectionStateChanged; + + // just for debugging + this._peerConnection.onsignalingstatechange = (ev) => { + switch ((ev.target as RTCPeerConnection).signalingState) { + case "stable": + console.timeLog("WebRTC", "ICE negotiation complete"); + break; + default: + console.timeLog( + "WebRTC", + "Signaling state changed", + (ev.target as RTCPeerConnection).signalingState + ); + } + }; + + // Setup callbacks to render remote stream once media tracks are discovered. + this._remoteStream = new MediaStream(); + this._peerConnection.ontrack = this._addTrack; + + this._peerConnection.addTransceiver("audio", { direction: "recvonly" }); + this._peerConnection.addTransceiver("video", { direction: "recvonly" }); + } + + private _startNegotiation = async () => { + if (!this._peerConnection) { + return; } - peerConnection.addTransceiver("audio", { direction: "recvonly" }); - peerConnection.addTransceiver("video", { direction: "recvonly" }); const offerOptions: RTCOfferOptions = { offerToReceiveAudio: true, @@ -119,98 +172,218 @@ class HaWebRtcPlayer extends LitElement { console.timeLog("WebRTC", "start createOffer", offerOptions); const offer: RTCSessionDescriptionInit = - await peerConnection.createOffer(offerOptions); + await this._peerConnection.createOffer(offerOptions); + + if (!this._peerConnection) { + return; + } console.timeLog("WebRTC", "end createOffer", offer); console.timeLog("WebRTC", "start setLocalDescription"); - await peerConnection.setLocalDescription(offer); + await this._peerConnection.setLocalDescription(offer); + + if (!this._peerConnection || !this.entityid) { + return; + } console.timeLog("WebRTC", "end setLocalDescription"); - console.timeLog("WebRTC", "start iceResolver"); - - let candidates = ""; // Build an Offer SDP string with ice candidates - const iceResolver = new Promise((resolve) => { - peerConnection.addEventListener("icecandidate", (event) => { - if (!event.candidate?.candidate) { - resolve(); // Gathering complete - return; - } - console.timeLog("WebRTC", "iceResolver candidate", event.candidate); - candidates += `a=${event.candidate.candidate}\r\n`; + let candidates = ""; + + if (this._clientConfig?.getCandidatesUpfront) { + await new Promise((resolve) => { + this._peerConnection!.onicegatheringstatechange = (ev: Event) => { + const iceGatheringState = (ev.target as RTCPeerConnection) + .iceGatheringState; + if (iceGatheringState === "complete") { + this._peerConnection!.onicegatheringstatechange = null; + resolve(); + } + + console.timeLog( + "WebRTC", + "Ice gathering state changed", + iceGatheringState + ); + }; }); - }); - await iceResolver; - console.timeLog("WebRTC", "end iceResolver", candidates); + if (!this._peerConnection || !this.entityid) { + return; + } + } + + while (this._candidatesList.length) { + const candidate = this._candidatesList.pop(); + if (candidate) { + candidates += `a=${candidate}\r\n`; + } + } const offer_sdp = offer.sdp! + candidates; - let webRtcAnswer: WebRtcAnswer; + console.timeLog("WebRTC", "start webRtcOffer", offer_sdp); + try { - console.timeLog("WebRTC", "start WebRTCOffer", offer_sdp); - webRtcAnswer = await handleWebRtcOffer( - this.hass, - this.entityid, - offer_sdp + this._unsub = webRtcOffer(this.hass, this.entityid, offer_sdp, (event) => + this._handleOfferEvent(event) ); - console.timeLog("WebRTC", "end webRtcOffer", webRtcAnswer); } catch (err: any) { this._error = "Failed to start WebRTC stream: " + err.message; - peerConnection.close(); + this._cleanUp(); + } + }; + + private _iceConnectionStateChanged = () => { + console.timeLog( + "WebRTC", + "ice connection state change", + this._peerConnection?.iceConnectionState + ); + if (this._peerConnection?.iceConnectionState === "failed") { + this._peerConnection.restartIce(); + } + }; + + private async _handleOfferEvent(event: WebRtcOfferEvent) { + if (!this.entityid) { return; } + if (event.type === "session") { + this._sessionId = event.session_id; + this._candidatesList.forEach((candidate) => + addWebRtcCandidate( + this.hass, + this.entityid!, + event.session_id, + candidate + ) + ); + this._candidatesList = []; + } + if (event.type === "answer") { + console.timeLog("WebRTC", "answer", event.answer); - // Setup callbacks to render remote stream once media tracks are discovered. - const remoteStream = new MediaStream(); - peerConnection.addEventListener("track", (event) => { - console.timeLog("WebRTC", "track", event); - remoteStream.addTrack(event.track); - this._videoEl.srcObject = remoteStream; - }); - this._remoteStream = remoteStream; + this._handleAnswer(event); + } + if (event.type === "candidate") { + console.timeLog("WebRTC", "remote ice candidate", event.candidate); + + try { + await this._peerConnection?.addIceCandidate( + new RTCIceCandidate({ candidate: event.candidate, sdpMid: "0" }) + ); + } catch (err: any) { + console.error(err); + } + } + if (event.type === "error") { + this._error = "Failed to start WebRTC stream: " + event.message; + this._cleanUp(); + } + } + + private _handleIceCandidate = (event: RTCPeerConnectionIceEvent) => { + if (!this.entityid || !event.candidate?.candidate) { + return; + } + + console.timeLog( + "WebRTC", + "local ice candidate", + event.candidate?.candidate + ); + + if (this._sessionId) { + addWebRtcCandidate( + this.hass, + this.entityid, + this._sessionId, + event.candidate?.candidate + ); + } else { + this._candidatesList.push(event.candidate?.candidate); + } + }; + + private _addTrack = async (event: RTCTrackEvent) => { + if (!this._remoteStream) { + return; + } + this._remoteStream.addTrack(event.track); + if (!this.hasUpdated) { + await this.updateComplete; + } + this._videoEl.srcObject = this._remoteStream; + }; + + private async _handleAnswer(event: WebRtcAnswer) { + if ( + !this._peerConnection?.signalingState || + ["stable", "closed"].includes(this._peerConnection.signalingState) + ) { + return; + } // Initiate the stream with the remote device const remoteDesc = new RTCSessionDescription({ type: "answer", - sdp: webRtcAnswer.answer, + sdp: event.answer, }); try { console.timeLog("WebRTC", "start setRemoteDescription", remoteDesc); - await peerConnection.setRemoteDescription(remoteDesc); - console.timeLog("WebRTC", "end setRemoteDescription"); + await this._peerConnection.setRemoteDescription(remoteDesc); } catch (err: any) { this._error = "Failed to connect WebRTC stream: " + err.message; - peerConnection.close(); - return; + this._cleanUp(); } - this._peerConnection = peerConnection; + console.timeLog("WebRTC", "end setRemoteDescription"); } private _cleanUp() { + console.timeLog("WebRTC", "stopped"); + console.timeEnd("WebRTC"); + if (this._remoteStream) { this._remoteStream.getTracks().forEach((track) => { track.stop(); }); + this._remoteStream = undefined; } - if (this._videoEl) { - this._videoEl.removeAttribute("src"); - this._videoEl.load(); + const videoEl = this._videoEl; + if (videoEl) { + videoEl.removeAttribute("src"); + videoEl.load(); } if (this._peerConnection) { this._peerConnection.close(); + + this._peerConnection.onnegotiationneeded = null; + this._peerConnection.onicecandidate = null; + this._peerConnection.oniceconnectionstatechange = null; + this._peerConnection.onicegatheringstatechange = null; + this._peerConnection.ontrack = null; + + // just for debugging + this._peerConnection.onsignalingstatechange = null; + this._peerConnection = undefined; } + this._unsub?.then((unsub) => unsub()); + this._unsub = undefined; + this._sessionId = undefined; + this._candidatesList = []; } private _loadedData() { - console.timeLog("WebRTC", "loadedData"); - console.timeEnd("WebRTC"); // @ts-ignore fireEvent(this, "load"); + + console.timeLog("WebRTC", "loadedData"); + console.timeEnd("WebRTC"); } static get styles(): CSSResultGroup { diff --git a/src/components/map/ha-entity-marker.ts b/src/components/map/ha-entity-marker.ts index 178de1063f6c..81df58fb8149 100644 --- a/src/components/map/ha-entity-marker.ts +++ b/src/components/map/ha-entity-marker.ts @@ -43,6 +43,7 @@ class HaEntityMarker extends LitElement { .marker { display: flex; justify-content: center; + text-align: center; align-items: center; box-sizing: border-box; width: 48px; diff --git a/src/data/camera.ts b/src/data/camera.ts index 0bf40f9cb524..84df934a74ac 100644 --- a/src/data/camera.ts +++ b/src/data/camera.ts @@ -39,10 +39,37 @@ export interface Stream { url: string; } +export type WebRtcOfferEvent = + | WebRtcId + | WebRtcAnswer + | WebRtcCandidate + | WebRtcError; + +export interface WebRtcId { + type: "session"; + session_id: string; +} + export interface WebRtcAnswer { + type: "answer"; answer: string; } +export interface WebRtcCandidate { + type: "candidate"; + candidate: string; +} + +export interface WebRtcError { + type: "error"; + code: string; + message: string; +} + +export interface WebRtcOfferResponse { + id: string; +} + export const cameraUrlWithWidthHeight = ( base_url: string, width: number, @@ -94,15 +121,29 @@ export const fetchStreamUrl = async ( return stream; }; -export const handleWebRtcOffer = ( +export const webRtcOffer = ( hass: HomeAssistant, - entityId: string, - offer: string + entity_id: string, + offer: string, + callback: (event: WebRtcOfferEvent) => void ) => - hass.callWS({ - type: "camera/web_rtc_offer", - entity_id: entityId, - offer: offer, + hass.connection.subscribeMessage(callback, { + type: "camera/webrtc/offer", + entity_id, + offer, + }); + +export const addWebRtcCandidate = ( + hass: HomeAssistant, + entity_id: string, + session_id: string, + candidate: string +) => + hass.callWS({ + type: "camera/webrtc/candidate", + entity_id, + session_id, + candidate, }); export const fetchCameraPrefs = (hass: HomeAssistant, entityId: string) => @@ -137,6 +178,7 @@ export const getEntityIdFromCameraMediaSource = (mediaContentId: string) => export interface WebRTCClientConfiguration { configuration: RTCConfiguration; dataChannel?: string; + getCandidatesUpfront: boolean; } export const fetchWebRtcClientConfiguration = async ( diff --git a/src/data/hassio/supervisor.ts b/src/data/hassio/supervisor.ts index 8bf9d715703d..e16d3220be40 100644 --- a/src/data/hassio/supervisor.ts +++ b/src/data/hassio/supervisor.ts @@ -65,6 +65,10 @@ export type HassioInfo = { timezone: string; }; +export type HassioBoots = { + boots: Record; +}; + export type HassioPanelInfo = PanelInfo< | undefined | { @@ -177,14 +181,18 @@ export const fetchHassioInfo = async ( ); }; +export const fetchHassioBoots = async (hass: HomeAssistant) => + hass.callApi>("GET", `hassio/host/logs/boots`); + export const fetchHassioLogs = async ( hass: HomeAssistant, provider: string, - range?: string + range?: string, + boot = 0 ) => hass.callApiRaw( "GET", - `hassio/${provider.includes("_") ? `addons/${provider}` : provider}/logs`, + `hassio/${provider.includes("_") ? `addons/${provider}` : provider}/logs/boots/${boot}`, undefined, range ? { @@ -197,11 +205,12 @@ export const fetchHassioLogsFollow = async ( hass: HomeAssistant, provider: string, signal: AbortSignal, - lines = 100 + lines = 100, + boot = 0 ) => hass.callApiRaw( "GET", - `hassio/${provider.includes("_") ? `addons/${provider}` : provider}/logs/follow?lines=${lines}`, + `hassio/${provider.includes("_") ? `addons/${provider}` : provider}/logs/boots/${boot}/follow?lines=${lines}`, undefined, undefined, signal @@ -212,10 +221,14 @@ export const getHassioLogDownloadUrl = (provider: string) => provider.includes("_") ? `addons/${provider}` : provider }/logs`; -export const getHassioLogDownloadLinesUrl = (provider: string, lines: number) => +export const getHassioLogDownloadLinesUrl = ( + provider: string, + lines: number, + boot = 0 +) => `/api/hassio/${ provider.includes("_") ? `addons/${provider}` : provider - }/logs?lines=${lines}`; + }/logs/boots/${boot}?lines=${lines}`; export const setSupervisorOption = async ( hass: HomeAssistant, diff --git a/src/data/network.ts b/src/data/network.ts index 5bfb391c00b3..10482557ac1d 100644 --- a/src/data/network.ts +++ b/src/data/network.ts @@ -26,6 +26,12 @@ export interface NetworkConfig { configured_adapters: string[]; } +export interface NetworkUrls { + internal: string; + external: string; + cloud: string; +} + export const getNetworkConfig = (hass: HomeAssistant) => hass.callWS({ type: "network", @@ -41,3 +47,8 @@ export const setNetworkConfig = ( configured_adapters: configured_adapters, }, }); + +export const getNetworkUrls = (hass: HomeAssistant) => + hass.callWS({ + type: "network/url", + }); diff --git a/src/data/update.ts b/src/data/update.ts index 1816bc867797..2a21a0c75bc5 100644 --- a/src/data/update.ts +++ b/src/data/update.ts @@ -8,6 +8,7 @@ import { BINARY_STATE_ON } from "../common/const"; import { computeDomain } from "../common/entity/compute_domain"; import { computeStateDomain } from "../common/entity/compute_state_domain"; import { supportsFeature } from "../common/entity/supports-feature"; +import { formatNumber } from "../common/number/format_number"; import { caseInsensitiveStringCompare } from "../common/string/compare"; import { showAlertDialog } from "../dialogs/generic/show-dialog-box"; import { HomeAssistant } from "../types"; @@ -23,6 +24,7 @@ export enum UpdateEntityFeature { interface UpdateEntityAttributes extends HassEntityAttributeBase { auto_update: boolean | null; + display_precision: number; installed_version: string | null; in_progress: boolean; latest_version: string | null; @@ -187,7 +189,10 @@ export const computeUpdateStateDisplay = ( attributes.update_percentage !== null; if (supportsProgress) { return hass.localize("ui.card.update.installing_with_progress", { - progress: attributes.update_percentage, + progress: formatNumber(attributes.update_percentage!, hass.locale, { + maximumFractionDigits: attributes.display_precision, + minimumFractionDigits: attributes.display_precision, + }), }); } return hass.localize("ui.card.update.installing"); diff --git a/src/dialogs/more-info/const.ts b/src/dialogs/more-info/const.ts index e5589107791c..ef6ef2b28cb4 100644 --- a/src/dialogs/more-info/const.ts +++ b/src/dialogs/more-info/const.ts @@ -31,6 +31,9 @@ export const DOMAINS_WITH_NEW_MORE_INFO = [ "valve", "water_heater", ]; +/** Domains with full height more info dialog */ +export const DOMAINS_FULL_HEIGHT_MORE_INFO = ["update"]; + /** Domains with separate more info dialog. */ export const DOMAINS_WITH_MORE_INFO = [ "alarm_control_panel", diff --git a/src/dialogs/more-info/controls/more-info-cover.ts b/src/dialogs/more-info/controls/more-info-cover.ts index a352002e4adb..bf96995fcfe8 100644 --- a/src/dialogs/more-info/controls/more-info-cover.ts +++ b/src/dialogs/more-info/controls/more-info-cover.ts @@ -93,12 +93,13 @@ class MoreInfoCover extends LitElement { supportsFeature(this.stateObj, CoverEntityFeature.CLOSE_TILT) || supportsFeature(this.stateObj, CoverEntityFeature.STOP_TILT); - const supportsOpenCloseWithoutStop = + const supportsOpenCloseOnly = supportsFeature(this.stateObj, CoverEntityFeature.OPEN) && supportsFeature(this.stateObj, CoverEntityFeature.CLOSE) && !supportsFeature(this.stateObj, CoverEntityFeature.STOP) && - !supportsFeature(this.stateObj, CoverEntityFeature.OPEN_TILT) && - !supportsFeature(this.stateObj, CoverEntityFeature.CLOSE_TILT); + !supportsTilt && + !supportsPosition && + !supportsTiltPosition; return html` ` - : html`` - : ""} -

${this.stateObj.attributes.title}

- ${this._error - ? html`${this._error}` - : ""} -
-
- ${this.hass.formatEntityAttributeName( - this.stateObj, - "installed_version" - )} -
-
- ${this.stateObj.attributes.installed_version ?? - this.hass.localize("state.default.unavailable")} -
-
-
-
- ${this.hass.formatEntityAttributeName( - this.stateObj, - "latest_version" - )} +
+ ${this.stateObj.attributes.in_progress + ? supportsFeature(this.stateObj, UpdateEntityFeature.PROGRESS) && + this.stateObj.attributes.update_percentage !== null + ? html`` + : html`` + : nothing} +

${this.stateObj.attributes.title}

+ ${this._error + ? html`${this._error}` + : nothing} +
+
+ ${this.hass.formatEntityAttributeName( + this.stateObj, + "installed_version" + )} +
+
+ ${this.stateObj.attributes.installed_version ?? + this.hass.localize("state.default.unavailable")} +
-
- ${this.stateObj.attributes.latest_version ?? - this.hass.localize("state.default.unavailable")} +
+
+ ${this.hass.formatEntityAttributeName( + this.stateObj, + "latest_version" + )} +
+
+ ${this.stateObj.attributes.latest_version ?? + this.hass.localize("state.default.unavailable")} +
-
- ${this.stateObj.attributes.release_url - ? html`` - : ""} - ${supportsFeature(this.stateObj!, UpdateEntityFeature.RELEASE_NOTES) && - !this._error - ? this._releaseNotes === undefined - ? html`
- + ${this.stateObj.attributes.release_url + ? html`` - : html`
- - - ` - : this.stateObj.attributes.release_summary - ? html`
- ` - : ""} - ${supportsFeature(this.stateObj, UpdateEntityFeature.BACKUP) - ? html`
- - - ` - : ""} -
- ${this.stateObj.state === BINARY_STATE_OFF && - this.stateObj.attributes.skipped_version - ? html` - - ${this.hass.localize( - "ui.dialogs.more_info_control.update.clear_skipped" - )} - - ` - : html` - - ${this.hass.localize( - "ui.dialogs.more_info_control.update.skip" - )} - - `} - ${supportsFeature(this.stateObj, UpdateEntityFeature.INSTALL) + : nothing} + ${supportsFeature(this.stateObj!, UpdateEntityFeature.RELEASE_NOTES) && + !this._error + ? this._releaseNotes === undefined + ? html` +
+ ${this._markdownLoading ? this._renderLoader() : nothing} + ` + : html` +
+ + ${this._markdownLoading ? this._renderLoader() : nothing} + ` + : this.stateObj.attributes.release_summary + ? html` +
+ + ${this._markdownLoading ? this._renderLoader() : nothing} + ` + : nothing} +
+ + `; + } + + private _renderLoader() { + return html` +
+
`; } protected firstUpdated(): void { if (supportsFeature(this.stateObj!, UpdateEntityFeature.RELEASE_NOTES)) { - updateReleaseNotes(this.hass, this.stateObj!.entity_id) - .then((result) => { - this._releaseNotes = result; - }) - .catch((err) => { - this._error = err.message; - }); + this._fetchReleaseNotes(); + } + } + + private async _markdownLoaded() { + if (this._markdownLoading) { + this._markdownLoading = false; + } + } + + private async _fetchReleaseNotes() { + try { + this._releaseNotes = await updateReleaseNotes( + this.hass, + this.stateObj!.entity_id + ); + } catch (err: any) { + this._error = err.message; } } @@ -183,9 +225,11 @@ class MoreInfoUpdate extends LitElement { if (!supportsFeature(this.stateObj!, UpdateEntityFeature.BACKUP)) { return null; } - const checkbox = this.shadowRoot?.querySelector("ha-checkbox"); - if (checkbox) { - return checkbox.checked; + const createBackupSwitch = this.shadowRoot?.getElementById( + "create-backup" + ) as HaSwitch; + if (createBackupSwitch) { + return createBackupSwitch.checked; } return true; } @@ -234,6 +278,12 @@ class MoreInfoUpdate extends LitElement { static get styles(): CSSResultGroup { return css` + :host { + display: flex; + flex-direction: column; + flex: 1; + justify-content: space-between; + } hr { border-color: var(--divider-color); border-bottom: none; @@ -248,26 +298,44 @@ class MoreInfoUpdate extends LitElement { flex-direction: row; justify-content: space-between; } - .actions { + + .footer { border-top: 1px solid var(--divider-color); background: var( --ha-dialog-surface-background, var(--mdc-theme-surface, #fff) ); - margin: 8px 0 0; - display: flex; - flex-wrap: wrap; - justify-content: center; position: sticky; bottom: 0; - padding: 12px 0; - margin-bottom: -24px; - z-index: 1; + margin: 0 -24px -24px -24px; + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: center; + overflow: hidden; + z-index: 10; } - .actions mwc-button { - margin: 0 4px 4px; + ha-settings-row { + width: 100%; + padding: 0 24px; + box-sizing: border-box; + margin-bottom: -16px; + margin-top: -4px; } + + .actions { + width: 100%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-end; + box-sizing: border-box; + padding: 12px; + z-index: 1; + gap: 8px; + } + a { color: var(--primary-color); } @@ -282,6 +350,16 @@ class MoreInfoUpdate extends LitElement { } ha-markdown { direction: ltr; + padding-bottom: 16px; + box-sizing: border-box; + } + ha-markdown.hidden { + display: none; + } + .loader { + height: 80px; + box-sizing: border-box; + padding-bottom: 16px; } `; } diff --git a/src/dialogs/more-info/controls/more-info-valve.ts b/src/dialogs/more-info/controls/more-info-valve.ts index f7bae2a9bef5..63e23d737a50 100644 --- a/src/dialogs/more-info/controls/more-info-valve.ts +++ b/src/dialogs/more-info/controls/more-info-valve.ts @@ -83,10 +83,11 @@ class MoreInfoValve extends LitElement { supportsFeature(this.stateObj, ValveEntityFeature.CLOSE) || supportsFeature(this.stateObj, ValveEntityFeature.STOP); - const supportsOpenCloseWithoutStop = + const supportsOpenCloseOnly = supportsFeature(this.stateObj, ValveEntityFeature.OPEN) && supportsFeature(this.stateObj, ValveEntityFeature.CLOSE) && - !supportsFeature(this.stateObj, ValveEntityFeature.STOP); + !supportsFeature(this.stateObj, ValveEntityFeature.STOP) && + !supportsPosition; return html` @@ -89,7 +92,7 @@ export class MoreInfoInfo extends LitElement { .entityId=${this.entityId} >`} ({ + mode_above: inputAboveIsEntity ? "input" : "value", + mode_below: inputBelowIsEntity ? "input" : "value", + ...condition, + }) + ); + private _schema = memoizeOne( ( localize: LocalizeFunc, @@ -233,31 +245,33 @@ export default class HaNumericStateCondition extends LitElement { ] as const ); - public render() { - const inputAboveIsEntity = + public willUpdate() { + this._inputAboveIsEntity = this._inputAboveIsEntity ?? (typeof this.condition.above === "string" && ((this.condition.above as string).startsWith("input_number.") || (this.condition.above as string).startsWith("number.") || (this.condition.above as string).startsWith("sensor."))); - const inputBelowIsEntity = + this._inputBelowIsEntity = this._inputBelowIsEntity ?? (typeof this.condition.below === "string" && ((this.condition.below as string).startsWith("input_number.") || (this.condition.below as string).startsWith("number.") || (this.condition.below as string).startsWith("sensor."))); + } + public render() { const schema = this._schema( this.hass.localize, - inputAboveIsEntity, - inputBelowIsEntity + this._inputAboveIsEntity, + this._inputBelowIsEntity ); - const data = { - mode_above: inputAboveIsEntity ? "input" : "value", - mode_below: inputBelowIsEntity ? "input" : "value", - ...this.condition, - }; + const data = this._data( + this._inputAboveIsEntity!, + this._inputBelowIsEntity!, + this.condition + ); return html` ({ + mode_above: inputAboveIsEntity ? "input" : "value", + mode_below: inputBelowIsEntity ? "input" : "value", + ...trigger, + entity_id: ensureArray(trigger.entity_id), + for: createDurationData(trigger.for), + }) + ); + public render() { const schema = this._schema( this.hass.localize, this.trigger.entity_id, - inputAboveIsEntity, - inputBelowIsEntity + this._inputAboveIsEntity, + this._inputBelowIsEntity ); - const data = { - mode_above: inputAboveIsEntity ? "input" : "value", - mode_below: inputBelowIsEntity ? "input" : "value", - ...this.trigger, - entity_id: ensureArray(this.trigger.entity_id), - for: trgFor, - }; + const data = this._data( + this._inputAboveIsEntity!, + this._inputBelowIsEntity!, + this.trigger + ); return html` - ${this.hass.localize( - "ui.panel.config.cloud.account.remote.copy_link" - )} + ${this.hass.localize("ui.panel.config.common.copy_link")}
diff --git a/src/panels/config/devices/device-detail/ha-device-entities-card.ts b/src/panels/config/devices/device-detail/ha-device-entities-card.ts index 71a8b0acdf12..07993cbdb723 100644 --- a/src/panels/config/devices/device-detail/ha-device-entities-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-entities-card.ts @@ -251,9 +251,7 @@ export class HaDeviceEntitiesCard extends LitElement { display: block; } ha-icon { - margin-left: 8px; - margin-inline-start: 8px; - margin-inline-end: initial; + margin-left: -8px; } .entity-id { color: var(--secondary-text-color); @@ -283,6 +281,9 @@ export class HaDeviceEntitiesCard extends LitElement { .name { font-size: 14px; } + .name:dir(rtl) { + margin-inline-start: 8px; + } .empty { text-align: center; } @@ -302,6 +303,9 @@ export class HaDeviceEntitiesCard extends LitElement { outline: none; text-decoration: underline; } + ha-list-item { + height: 40px; + } `; } } diff --git a/src/panels/config/entities/ha-config-entities.ts b/src/panels/config/entities/ha-config-entities.ts index e828e7b6e101..1859f5578d75 100644 --- a/src/panels/config/entities/ha-config-entities.ts +++ b/src/panels/config/entities/ha-config-entities.ts @@ -1069,8 +1069,7 @@ ${ } if ( changedProps.has("_entitySources") || - (changedProps.has("hass") && !oldHass) || - !oldHass.states[entityId] + (changedProps.has("hass") && (!oldHass || !oldHass.states[entityId])) ) { changed = true; } diff --git a/src/panels/config/labels/ha-config-labels.ts b/src/panels/config/labels/ha-config-labels.ts index db2f60663106..7d0e60e22d42 100644 --- a/src/panels/config/labels/ha-config-labels.ts +++ b/src/panels/config/labels/ha-config-labels.ts @@ -103,6 +103,7 @@ export class HaConfigLabels extends LitElement { style=" background-color: ${computeCssColor(label.color)}; border-radius: 10px; + outline: 1px solid var(--outline-color); width: 20px; height: 20px;" >
` diff --git a/src/panels/config/logs/dialog-download-logs.ts b/src/panels/config/logs/dialog-download-logs.ts index cd711fa5a2b4..fdb5e7242ea4 100644 --- a/src/panels/config/logs/dialog-download-logs.ts +++ b/src/panels/config/logs/dialog-download-logs.ts @@ -65,7 +65,11 @@ class DownloadLogsDialog extends LitElement { ${this.hass.localize("ui.panel.config.logs.download_full_log")} - ${this._dialogParams.header} + + ${this._dialogParams.header}${this._dialogParams.boot === 0 + ? "" + : ` ⸱ ${this._dialogParams.boot === -1 ? this.hass.localize("ui.panel.config.logs.previous") : this.hass.localize("ui.panel.config.logs.startups_ago", { boot: this._dialogParams.boot * -1 })}`} +
@@ -104,9 +108,14 @@ class DownloadLogsDialog extends LitElement { private async _dowloadLogs() { const provider = this._dialogParams!.provider; + const boot = this._dialogParams!.boot; const timeString = new Date().toISOString().replace(/:/g, "-"); - const downloadUrl = getHassioLogDownloadLinesUrl(provider, this._lineCount); + const downloadUrl = getHassioLogDownloadLinesUrl( + provider, + this._lineCount, + boot + ); const logFileName = provider !== "core" ? `${provider}_${timeString}.log` diff --git a/src/panels/config/logs/error-log-card.ts b/src/panels/config/logs/error-log-card.ts index 41bd9eea19f6..ae17a7a16466 100644 --- a/src/panels/config/logs/error-log-card.ts +++ b/src/panels/config/logs/error-log-card.ts @@ -1,5 +1,10 @@ import "@material/mwc-list/mwc-list-item"; -import { mdiArrowCollapseDown, mdiDownload, mdiRefresh } from "@mdi/js"; +import { + mdiArrowCollapseDown, + mdiDownload, + mdiMenuDown, + mdiRefresh, +} from "@mdi/js"; import { css, CSSResultGroup, @@ -22,12 +27,17 @@ import "../../../components/ha-button"; import "../../../components/ha-icon-button"; import "../../../components/ha-svg-icon"; import "../../../components/ha-circular-progress"; +import "../../../components/chips/ha-assist-chip"; +import "../../../components/ha-menu"; +import "../../../components/ha-md-menu-item"; +import "../../../components/ha-md-divider"; import { getSignedPath } from "../../../data/auth"; import { fetchErrorLog, getErrorLogDownloadUrl } from "../../../data/error_log"; import { extractApiErrorMessage } from "../../../data/hassio/common"; import { + fetchHassioBoots, fetchHassioLogs, fetchHassioLogsFollow, getHassioLogDownloadUrl, @@ -40,6 +50,7 @@ import { atLeastVersion } from "../../../common/config/version"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; import { debounce } from "../../../common/util/debounce"; import { showDownloadLogsDialog } from "./show-dialog-download-logs"; +import type { HaMenu } from "../../../components/ha-menu"; const NUMBER_OF_LINES = 100; @@ -64,6 +75,8 @@ class ErrorLogCard extends LitElement { @query("ha-ansi-to-html") private _ansiToHtmlElement?: HaAnsiToHtml; + @query("#boots-menu") private _bootsMenu?: HaMenu; + @state() private _firstCursor?: string; @state() private _scrolledToBottomController = @@ -92,6 +105,10 @@ class ErrorLogCard extends LitElement { @state() private _numberOfLines?: number; + @state() private _boot = 0; + + @state() private _boots?: number[]; + protected render(): TemplateResult { return html`
@@ -105,6 +122,60 @@ class ErrorLogCard extends LitElement { this.hass.localize("ui.panel.config.logs.show_full_logs")}
+ ${this._streamSupported && Array.isArray(this._boots) + ? html` + + + + ${this._boots.map( + (boot) => html` + + ${boot === 0 + ? this.hass.localize( + "ui.panel.config.logs.current" + ) + : boot === -1 + ? this.hass.localize( + "ui.panel.config.logs.previous" + ) + : this.hass.localize( + "ui.panel.config.logs.startups_ago", + { boot: boot * -1 } + )} + + ${boot === 0 + ? html`` + : nothing} + ` + )} + + ` + : nothing} b - a); + } catch (err: any) { + // eslint-disable-next-line no-console + console.error(err); + } + } + } + + private _toggleBootsMenu() { + if (this._bootsMenu) { + this._bootsMenu.open = !this._bootsMenu.open; + } + } + + private _setBoot(ev: any) { + this._boot = ev.target.value; + this._loadLogs(); + } + static styles: CSSResultGroup = css` .error-log-intro { text-align: center; @@ -600,6 +703,11 @@ class ErrorLogCard extends LitElement { justify-content: center; padding: 16px; } + + ha-assist-chip { + --ha-assist-chip-container-shape: 10px; + --md-assist-chip-trailing-space: 8px; + } `; } diff --git a/src/panels/config/logs/show-dialog-download-logs.ts b/src/panels/config/logs/show-dialog-download-logs.ts index e61d0c22ad7e..e0267075fe4c 100644 --- a/src/panels/config/logs/show-dialog-download-logs.ts +++ b/src/panels/config/logs/show-dialog-download-logs.ts @@ -4,6 +4,7 @@ export interface DownloadLogsDialogParams { header?: string; provider: string; defaultLineCount?: number; + boot: number; } export const showDownloadLogsDialog = ( diff --git a/src/panels/config/network/ha-config-url-form.ts b/src/panels/config/network/ha-config-url-form.ts index 8ec30540b182..934869b79995 100644 --- a/src/panels/config/network/ha-config-url-form.ts +++ b/src/panels/config/network/ha-config-url-form.ts @@ -8,6 +8,7 @@ import { nothing, } from "lit"; import { customElement, property, state } from "lit/decorators"; +import { mdiContentCopy, mdiEyeOff, mdiEye } from "@mdi/js"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; import { isIPAddress } from "../../../common/string/is_ip_address"; import "../../../components/ha-alert"; @@ -18,7 +19,12 @@ import "../../../components/ha-textfield"; import type { HaTextField } from "../../../components/ha-textfield"; import { CloudStatus, fetchCloudStatus } from "../../../data/cloud"; import { saveCoreConfig } from "../../../data/core"; +import { getNetworkUrls, type NetworkUrls } from "../../../data/network"; import type { ValueChangedEvent, HomeAssistant } from "../../../types"; +import { copyToClipboard } from "../../../common/util/copy-clipboard"; +import { showToast } from "../../../util/toast"; +import type { HaSwitch } from "../../../components/ha-switch"; +import { obfuscateUrl } from "../../../util/url"; @customElement("ha-config-url-form") class ConfigUrlForm extends LitElement { @@ -28,9 +34,11 @@ class ConfigUrlForm extends LitElement { @state() private _working = false; - @state() private _external_url?: string; + @state() private _urls?: NetworkUrls; - @state() private _internal_url?: string; + @state() private _external_url: string = ""; + + @state() private _internal_url: string = ""; @state() private _cloudStatus?: CloudStatus | null; @@ -38,18 +46,29 @@ class ConfigUrlForm extends LitElement { @state() private _showCustomInternalUrl = false; + @state() private _unmaskedExternalUrl = false; + + @state() private _unmaskedInternalUrl = false; + + @state() private _cloudChecked = false; + protected render() { const canEdit = ["storage", "default"].includes( this.hass.config.config_source ); const disabled = this._working || !canEdit; - if (!this.hass.userData?.showAdvanced || this._cloudStatus === undefined) { + if (this._cloudStatus === undefined || this._urls === undefined) { return nothing; } - const internalUrl = this._internalUrlValue; - const externalUrl = this._externalUrlValue; + const internalUrl = this._showCustomInternalUrl + ? this._internal_url + : this._urls?.internal || ""; + const externalUrl = this._showCustomExternalUrl + ? this._external_url + : (this._cloudChecked ? this._urls?.cloud : this._urls?.external) || ""; + let hasCloud: boolean; let remoteEnabled: boolean; let httpUseHttps: boolean; @@ -95,49 +114,61 @@ class ConfigUrlForm extends LitElement { ${hasCloud ? html` -
-
+

+ ${this.hass.localize( + "ui.panel.config.url.external_url_label" + )} +

+ + ${this.hass.localize( - "ui.panel.config.url.external_url_label" - )} -
- - - -
+ + + ` : ""} - ${!this._showCustomExternalUrl - ? "" - : html` -
-
- ${hasCloud - ? "" - : this.hass.localize( - "ui.panel.config.url.external_url_label" - )} -
- - -
- `} +
+
+
` + } + > + ${!this._showCustomExternalUrl || !canEdit + ? html` + + ` + : nothing} +
+ + + ${this.hass.localize("ui.panel.config.common.copy_link")} + +
${hasCloud || !isComponentLoaded(this.hass, "cloud") ? "" : html` @@ -180,40 +211,65 @@ class ConfigUrlForm extends LitElement { ` : ""} -
-
- ${this.hass.localize("ui.panel.config.url.internal_url_label")} -
- - + ${this.hass.localize("ui.panel.config.url.internal_url_label")} + + + + ${this.hass.localize( "ui.panel.config.url.internal_url_automatic" )} - > - - + + + ${this.hass.localize( + "ui.panel.config.url.internal_url_automatic_description" + )} + + + + +
+
+
` + } + > + ${!this._showCustomInternalUrl || !canEdit + ? html` + + ` + : nothing} +
+ + + ${this.hass.localize("ui.panel.config.common.copy_link")} +
- - ${!this._showCustomInternalUrl - ? "" - : html` -
-
- - -
- `} ${ // If the user has configured a cert, show an error if httpUseHttps && // there is no internal url configured @@ -253,46 +309,47 @@ class ConfigUrlForm extends LitElement { protected override firstUpdated(changedProps: PropertyValues) { super.firstUpdated(changedProps); - this._showCustomInternalUrl = this._internalUrlValue !== null; - if (isComponentLoaded(this.hass, "cloud")) { fetchCloudStatus(this.hass).then((cloudStatus) => { this._cloudStatus = cloudStatus; - if (cloudStatus.logged_in) { - this._showCustomExternalUrl = this._externalUrlValue !== null; - } else { - this._showCustomExternalUrl = true; - } + this._showCustomExternalUrl = !( + this._cloudStatus.logged_in && !this.hass.config.external_url + ); }); } else { this._cloudStatus = null; - this._showCustomExternalUrl = true; } + this._fetchUrls(); } - private get _internalUrlValue() { - return this._internal_url !== undefined - ? this._internal_url - : this.hass.config.internal_url; + private _toggleCloud(ev: Event) { + this._cloudChecked = (ev.currentTarget as HaSwitch).checked; + this._showCustomExternalUrl = !this._cloudChecked; } - private get _externalUrlValue() { - return this._external_url !== undefined - ? this._external_url - : this.hass.config.external_url; + private _toggleInternalAutomatic(ev: Event) { + this._showCustomInternalUrl = !(ev.currentTarget as HaSwitch).checked; } - private _toggleCloud(ev) { - this._showCustomExternalUrl = !ev.currentTarget.checked; + private _toggleUnmaskedInternalUrl() { + this._unmaskedInternalUrl = !this._unmaskedInternalUrl; } - private _toggleInternalAutomatic(ev) { - this._showCustomInternalUrl = !ev.currentTarget.checked; + private _toggleUnmaskedExternalUrl() { + this._unmaskedExternalUrl = !this._unmaskedExternalUrl; + } + + private async _copyURL(ev) { + const url = ev.currentTarget.url; + await copyToClipboard(url); + showToast(this, { + message: this.hass.localize("ui.common.copied_clipboard"), + }); } private _handleChange(ev: ValueChangedEvent) { const target = ev.currentTarget as HaTextField; - this[`_${target.name}`] = target.value || null; + this[`_${target.name}`] = target.value || ""; } private async _save() { @@ -307,6 +364,7 @@ class ConfigUrlForm extends LitElement { ? this._internal_url || null : null, }); + await this._fetchUrls(); } catch (err: any) { this._error = err.message || err; } finally { @@ -314,6 +372,19 @@ class ConfigUrlForm extends LitElement { } } + private async _fetchUrls() { + this._urls = await getNetworkUrls(this.hass); + this._cloudChecked = + this._urls?.cloud === this._urls?.external && + !this.hass.config.external_url; + this._showCustomInternalUrl = !!this.hass.config.internal_url; + this._showCustomExternalUrl = !( + this._cloudStatus?.logged_in && !this.hass.config.external_url + ); + this._internal_url = this._urls?.internal ?? ""; + this._external_url = this._urls?.external ?? ""; + } + static get styles(): CSSResultGroup { return css` .description { @@ -351,6 +422,31 @@ class ConfigUrlForm extends LitElement { color: var(--primary-color); text-decoration: none; } + + .url-container { + display: flex; + align-items: center; + gap: 8px; + margin-top: 8px; + } + .textfield-container { + position: relative; + flex: 1; + } + .textfield-container ha-textfield { + display: block; + } + .toggle-unmasked-url { + position: absolute; + top: 8px; + right: 8px; + inset-inline-start: initial; + inset-inline-end: 8px; + --mdc-icon-button-size: 40px; + --mdc-icon-size: 20px; + color: var(--secondary-text-color); + direction: var(--direction); + } `; } } diff --git a/src/panels/config/person/ha-config-person.ts b/src/panels/config/person/ha-config-person.ts index 27e065e54a72..c4c658b02340 100644 --- a/src/panels/config/person/ha-config-person.ts +++ b/src/panels/config/person/ha-config-person.ts @@ -292,6 +292,9 @@ export class HaConfigPerson extends LitElement { align-items: center; justify-content: space-around; } + mwc-list:has(+ .empty) { + display: none; + } `; } } diff --git a/src/panels/energy/ha-panel-energy.ts b/src/panels/energy/ha-panel-energy.ts index c16b3842c113..200e3e576ed7 100644 --- a/src/panels/energy/ha-panel-energy.ts +++ b/src/panels/energy/ha-panel-energy.ts @@ -18,6 +18,7 @@ import { HomeAssistant } from "../../types"; import "../lovelace/components/hui-energy-period-selector"; import { Lovelace } from "../lovelace/types"; import "../lovelace/views/hui-view"; +import "../lovelace/views/hui-view-container"; import { navigate } from "../../common/navigate"; import { getEnergyDataCollection, @@ -108,14 +109,18 @@ class PanelEnergy extends LitElement {
-
+ + -
+ `; } @@ -389,23 +394,19 @@ class PanelEnergy extends LitElement { line-height: 20px; flex-grow: 1; } - #view { + hui-view-container { position: relative; display: flex; - padding-top: calc(var(--header-height) + env(safe-area-inset-top)); min-height: 100vh; box-sizing: border-box; + padding-top: calc(var(--header-height) + env(safe-area-inset-top)); padding-left: env(safe-area-inset-left); padding-right: env(safe-area-inset-right); padding-inline-start: env(safe-area-inset-left); padding-inline-end: env(safe-area-inset-right); padding-bottom: env(safe-area-inset-bottom); - background: var( - --lovelace-background, - var(--primary-background-color) - ); } - #view > * { + hui-view { flex: 1 1 100%; max-width: 100%; } diff --git a/src/panels/lovelace/cards/hui-map-card.ts b/src/panels/lovelace/cards/hui-map-card.ts index ae3bd5279881..c50cb0c38eb8 100644 --- a/src/panels/lovelace/cards/hui-map-card.ts +++ b/src/panels/lovelace/cards/hui-map-card.ts @@ -50,6 +50,11 @@ interface MapEntityConfig extends EntityConfig { focus?: boolean; } +interface GeoEntity { + entity_id: string; + focus: boolean; +} + @customElement("hui-map-card") class HuiMapCard extends LitElement implements LovelaceCard { @property({ attribute: false }) public hass!: HomeAssistant; @@ -332,23 +337,32 @@ class HuiMapCard extends LitElement implements LovelaceCard { return color; } - private _getSourceEntities(states?: HassEntities): string[] { + private _getSourceEntities(states?: HassEntities): GeoEntity[] { if (!states || !this._config?.geo_location_sources) { return []; } - const geoEntities: string[] = []; + const sourceObjs = this._config.geo_location_sources.map((source) => + typeof source === "string" ? { source } : source + ); + + const geoEntities: GeoEntity[] = []; // Calculate visible geo location sources - const includesAll = this._config.geo_location_sources.includes("all"); + const allSource = sourceObjs.find((s) => s.source === "all"); for (const stateObj of Object.values(states)) { + const sourceObj = sourceObjs.find( + (s) => s.source === stateObj.attributes.source + ); if ( computeDomain(stateObj.entity_id) === "geo_location" && - (includesAll || - this._config.geo_location_sources.includes( - stateObj.attributes.source - )) + (allSource || sourceObj) ) { - geoEntities.push(stateObj.entity_id); + geoEntities.push({ + entity_id: stateObj.entity_id, + focus: sourceObj + ? (sourceObj.focus ?? true) + : (allSource?.focus ?? true), + }); } } return geoEntities; @@ -364,8 +378,9 @@ class HuiMapCard extends LitElement implements LovelaceCard { name: entityConf.name, })), ...this._getSourceEntities(this.hass?.states).map((entity) => ({ - entity_id: entity, - color: this._getColor(entity), + entity_id: entity.entity_id, + focus: entity.focus, + color: this._getColor(entity.entity_id), })), ]; } diff --git a/src/panels/lovelace/cards/types.ts b/src/panels/lovelace/cards/types.ts index c14f07cf790d..6ee537db30ba 100644 --- a/src/panels/lovelace/cards/types.ts +++ b/src/panels/lovelace/cards/types.ts @@ -298,6 +298,11 @@ export interface LogbookCardConfig extends LovelaceCardConfig { theme?: string; } +interface GeoLocationSourceConfig { + source: string; + focus?: boolean; +} + export interface MapCardConfig extends LovelaceCardConfig { type: "map"; title?: string; @@ -307,7 +312,7 @@ export interface MapCardConfig extends LovelaceCardConfig { default_zoom?: number; entities?: Array; hours_to_show?: number; - geo_location_sources?: string[]; + geo_location_sources?: Array; dark_mode?: boolean; theme_mode?: ThemeMode; } diff --git a/src/panels/lovelace/common/compute-unused-entities.ts b/src/panels/lovelace/common/compute-unused-entities.ts index dd2fafe89108..ff563456e0d2 100755 --- a/src/panels/lovelace/common/compute-unused-entities.ts +++ b/src/panels/lovelace/common/compute-unused-entities.ts @@ -26,6 +26,9 @@ const addFromAction = (entities: Set, actionConfig: ActionConfig) => { }; const addEntityId = (entities: Set, entity) => { + if (!entity) { + return; + } if (typeof entity === "string") { entities.add(entity); return; diff --git a/src/panels/lovelace/common/confirm-action.ts b/src/panels/lovelace/common/confirm-action.ts new file mode 100644 index 000000000000..2b783cb3f3a6 --- /dev/null +++ b/src/panels/lovelace/common/confirm-action.ts @@ -0,0 +1,25 @@ +import type { ConfirmationRestrictionConfig } from "../../../data/lovelace/config/action"; +import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box"; +import { HomeAssistant } from "../../../types"; + +export const confirmAction = async ( + node: HTMLElement, + hass: HomeAssistant, + config: ConfirmationRestrictionConfig, + action: string +): Promise => { + if ( + config.exemptions && + config.exemptions.some((e) => e.user === hass!.user?.id) + ) { + return true; + } + + return showConfirmationDialog(node, { + text: + config.text || + hass.localize("ui.panel.lovelace.cards.actions.action_confirmation", { + action, + }), + }); +}; diff --git a/src/panels/lovelace/components/hui-card-options.ts b/src/panels/lovelace/components/hui-card-options.ts index c5c5d8cc677d..0a9a39be8e38 100644 --- a/src/panels/lovelace/components/hui-card-options.ts +++ b/src/panels/lovelace/components/hui-card-options.ts @@ -28,7 +28,10 @@ import "../../../components/ha-icon-button"; import "../../../components/ha-list-item"; import { LovelaceCardConfig } from "../../../data/lovelace/config/card"; import { saveConfig } from "../../../data/lovelace/config/types"; -import { isStrategyView } from "../../../data/lovelace/config/view"; +import { + isStrategyView, + type LovelaceViewConfig, +} from "../../../data/lovelace/config/view"; import { showAlertDialog, showPromptDialog, @@ -40,12 +43,14 @@ import { computeCardSize } from "../common/compute-card-size"; import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog"; import { addCard, + addSection, deleteCard, moveCardToContainer, moveCardToIndex, } from "../editor/config-util"; import { LovelaceCardPath, + type LovelaceContainerPath, findLovelaceItems, getLovelaceContainerPath, parseLovelaceCardPath, @@ -53,6 +58,7 @@ import { import { showSelectViewDialog } from "../editor/select-view/show-select-view-dialog"; import { Lovelace, LovelaceCard } from "../types"; import { SECTIONS_VIEW_LAYOUT } from "../views/const"; +import type { LovelaceSectionConfig } from "../../../data/lovelace/config/section"; @customElement("hui-card-options") export class HuiCardOptions extends LitElement { @@ -353,34 +359,79 @@ export class HuiCardOptions extends LitElement { allowDashboardChange: true, header: this.hass!.localize("ui.panel.lovelace.editor.move_card.header"), viewSelectedCallback: async (urlPath, selectedDashConfig, viewIndex) => { - const view = selectedDashConfig.views[viewIndex]; + const fromView = selectedDashConfig.views[this.path![0]]; + let toView = selectedDashConfig.views[viewIndex]; + let newConfig = selectedDashConfig; - if (!isStrategyView(view) && view.type === SECTIONS_VIEW_LAYOUT) { + if (isStrategyView(toView)) { showAlertDialog(this, { title: this.hass!.localize( "ui.panel.lovelace.editor.move_card.error_title" ), text: this.hass!.localize( - "ui.panel.lovelace.editor.move_card.error_text_section" + "ui.panel.lovelace.editor.move_card.error_text_strategy" ), warning: true, }); return; } + const isSectionsView = toView.type === SECTIONS_VIEW_LAYOUT; + + let toPath: LovelaceContainerPath = [viewIndex]; + + // If the view is a section view and has no "imported cards" section, adds a default section. + if (isSectionsView) { + const importedCardHeading = fromView.title + ? this.hass!.localize( + "ui.panel.lovelace.editor.section.imported_card_section_title_view", + { view_title: fromView.title } + ) + : this.hass!.localize( + "ui.panel.lovelace.editor.section.imported_card_section_title_default" + ); + + let sectionIndex = toView.sections + ? toView.sections.findIndex( + (s) => + "cards" in s && + s.cards?.some( + (c) => + c.type === "heading" && c.heading === importedCardHeading + ) + ) + : -1; + if (sectionIndex === -1) { + const newSection: LovelaceSectionConfig = { + type: "grid", + cards: [ + { + type: "heading", + heading: importedCardHeading, + }, + ], + }; + newConfig = addSection(selectedDashConfig, viewIndex, newSection); + toView = newConfig.views[viewIndex] as LovelaceViewConfig; + sectionIndex = toView.sections!.length - 1; + } + toPath = [viewIndex, sectionIndex]; + } + if (urlPath === this.lovelace!.urlPath) { this.lovelace!.saveConfig( - moveCardToContainer(this.lovelace!.config, this.path!, [viewIndex]) + moveCardToContainer(newConfig, this.path!, toPath) ); showSaveSuccessToast(this, this.hass!); return; } try { const { cardIndex } = parseLovelaceCardPath(this.path!); + const card = this._cards[cardIndex]; await saveConfig( this.hass!, urlPath, - addCard(selectedDashConfig, [viewIndex], this._cards[cardIndex]) + addCard(newConfig, toPath, card) ); this.lovelace!.saveConfig( deleteCard(this.lovelace!.config, this.path!) diff --git a/src/panels/lovelace/components/hui-input-list-editor.ts b/src/panels/lovelace/components/hui-input-list-editor.ts deleted file mode 100644 index 6616753fc81f..000000000000 --- a/src/panels/lovelace/components/hui-input-list-editor.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { mdiClose } from "@mdi/js"; -import { css, CSSResultGroup, html, LitElement, nothing } from "lit"; -import { customElement, property } from "lit/decorators"; -import { fireEvent } from "../../../common/dom/fire_event"; -import "../../../components/ha-icon-button"; -import "../../../components/ha-textfield"; -import { HomeAssistant } from "../../../types"; -import { EditorTarget } from "../editor/types"; - -@customElement("hui-input-list-editor") -export class HuiInputListEditor extends LitElement { - @property({ type: Array }) public value?: string[]; - - @property({ attribute: false }) public hass?: HomeAssistant; - - @property() public inputLabel?: string; - - protected render() { - if (!this.value) { - return nothing; - } - - return html` - ${this.value.map( - (listEntry, index) => html` - - - - ` - )} - - `; - } - - private _addEntry(ev: Event): void { - const target = ev.target! as EditorTarget; - if (target.value === "") { - return; - } - const newEntries = this.value!.concat(target.value as string); - target.value = ""; - fireEvent(this, "value-changed", { - value: newEntries, - }); - (ev.target! as LitElement).blur(); - } - - private _valueChanged(ev: Event): void { - ev.stopPropagation(); - const target = ev.target! as EditorTarget; - const newEntries = this.value!.concat(); - newEntries[target.index!] = target.value!; - fireEvent(this, "value-changed", { - value: newEntries, - }); - } - - private _handleKeyDown(ev: KeyboardEvent) { - if (ev.key === "Enter") { - ev.stopPropagation(); - this._consolidateEntries(ev); - } - } - - private _consolidateEntries(ev: Event): void { - const target = ev.target! as EditorTarget; - if (target.value === "") { - const newEntries = this.value!.concat(); - newEntries.splice(target.index!, 1); - fireEvent(this, "value-changed", { - value: newEntries, - }); - } - } - - private _removeEntry(ev: Event): void { - const parent = (ev.currentTarget as any).parentElement; - const newEntries = this.value!.concat(); - newEntries.splice(parent.index!, 1); - fireEvent(this, "value-changed", { - value: newEntries, - }); - } - - static get styles(): CSSResultGroup { - return css` - ha-icon-button { - margin-right: -24px; - margin-inline-end: -24px; - margin-inline-start: initial; - color: var(--secondary-text-color); - } - ha-textfield { - display: block; - } - `; - } -} - -declare global { - interface HTMLElementTagNameMap { - "hui-input-list-editor": HuiInputListEditor; - } -} diff --git a/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts index e8e0c70f3c43..3f3280a91b53 100644 --- a/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts @@ -81,13 +81,7 @@ const callServiceEntitiesRowConfigStruct = object({ const conditionalEntitiesRowConfigStruct = object({ type: literal("conditional"), row: any(), - conditions: array( - object({ - entity: string(), - state: optional(string()), - state_not: optional(string()), - }) - ), + conditions: array(any()), }); const dividerEntitiesRowConfigStruct = object({ diff --git a/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts index 7aafbb59006e..41a32456e758 100644 --- a/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts @@ -15,15 +15,17 @@ import { import memoizeOne from "memoize-one"; import { fireEvent } from "../../../../common/dom/fire_event"; import { hasLocation } from "../../../../common/entity/has_location"; +import { computeDomain } from "../../../../common/entity/compute_domain"; import "../../../../components/ha-form/ha-form"; import { SchemaUnion } from "../../../../components/ha-form/types"; +import type { SelectSelector } from "../../../../data/selector"; import "../../../../components/ha-formfield"; import "../../../../components/ha-switch"; +import "../../../../components/ha-selector/ha-selector-select"; import { HomeAssistant, ValueChangedEvent } from "../../../../types"; import { DEFAULT_HOURS_TO_SHOW, DEFAULT_ZOOM } from "../../cards/hui-map-card"; import { MapCardConfig } from "../../cards/types"; import "../../components/hui-entity-editor"; -import "../../components/hui-input-list-editor"; import { EntityConfig } from "../../entity-rows/types"; import { LovelaceCardEditor } from "../../types"; import { processEditorEntities } from "../process-editor-entities"; @@ -42,6 +44,14 @@ export const mapEntitiesConfigStruct = union([ string(), ]); +const geoSourcesConfigStruct = union([ + object({ + source: string(), + focus: optional(boolean()), + }), + string(), +]); + const cardConfigStruct = assign( baseLovelaceCardConfig, object({ @@ -51,7 +61,7 @@ const cardConfigStruct = assign( dark_mode: optional(boolean()), entities: array(mapEntitiesConfigStruct), hours_to_show: optional(number()), - geo_location_sources: optional(array(string())), + geo_location_sources: optional(array(geoSourcesConfigStruct)), auto_fit: optional(boolean()), theme_mode: optional(string()), }) @@ -67,6 +77,8 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor { @state() private _configEntities?: EntityConfig[]; + @state() private _possibleGeoSources?: { value: string; label?: string }[]; + private _schema = memoizeOne( (localize: LocalizeFunc) => [ @@ -135,8 +147,12 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor { : []; } + private _geoSourcesStrings = memoizeOne((sources): string[] | undefined => + sources?.map((s) => (typeof s === "string" ? s : s.source)) + ); + get _geo_location_sources(): string[] { - return this._config!.geo_location_sources || []; + return this._geoSourcesStrings(this._config!.geo_location_sources) || []; } protected render() { @@ -166,17 +182,40 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor { )} - + .selector=${this._selectSchema( + this._possibleGeoSources, + this.hass.localize + )} + > `; } + private _selectSchema = memoizeOne( + (options, localize: LocalizeFunc): SelectSelector => ({ + select: { + sort: true, + multiple: true, + custom_value: true, + options: options.length + ? options + : [ + { + value: "", + label: localize( + "ui.panel.lovelace.editor.card.map.no_geo_location_sources" + ), + }, + ], + }, + }) + ); + private _entitiesValueChanged(ev: EntitiesEditorEvent): void { if (ev.detail && ev.detail.entities) { this._config = { ...this._config!, entities: ev.detail.entities }; @@ -201,9 +240,16 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor { this._config = { ...this._config }; delete this._config.geo_location_sources; } else { + const newSources = value.map( + (newSource) => + this._config!.geo_location_sources?.find( + (oldSource) => + typeof oldSource === "object" && oldSource.source === newSource + ) || newSource + ); this._config = { ...this._config, - geo_location_sources: value, + geo_location_sources: newSources, }; } fireEvent(this, "config-changed", { config: this._config }); @@ -213,6 +259,25 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor { fireEvent(this, "config-changed", { config: ev.detail.value }); } + protected willUpdate() { + if (this.hass && !this._possibleGeoSources) { + const sources: Record = {}; + Object.entries(this.hass.states).forEach(([entity_id, stateObj]) => { + const domain = computeDomain(entity_id); + if (domain === "geo_location" && stateObj.attributes.source) { + sources[stateObj.attributes.source] = stateObj.attributes.attribution; + } + }); + + this._possibleGeoSources = Object.entries(sources).map( + ([source, attribution]) => ({ + value: source, + label: attribution || source, + }) + ); + } + } + private _computeLabelCallback = ( schema: SchemaUnion> ) => { diff --git a/src/panels/lovelace/editor/config-elements/hui-tile-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-tile-card-editor.ts index 004bba358bba..7990f21eaab7 100644 --- a/src/panels/lovelace/editor/config-elements/hui-tile-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-tile-card-editor.ts @@ -48,6 +48,7 @@ const cardConfigStruct = assign( vertical: optional(boolean()), tap_action: optional(actionConfigStruct), icon_tap_action: optional(actionConfigStruct), + hold_action: optional(actionConfigStruct), features: optional(array(any())), }) ); @@ -156,6 +157,14 @@ export class HuiTileCardEditor }, }, }, + { + name: "hold_action", + selector: { + ui_action: { + default_action: "none", + }, + }, + }, ], }, ] as const satisfies readonly HaFormSchema[] diff --git a/src/panels/lovelace/editor/structs/action-struct.ts b/src/panels/lovelace/editor/structs/action-struct.ts index d1f8d90c483a..ed918e6d1f8b 100644 --- a/src/panels/lovelace/editor/structs/action-struct.ts +++ b/src/panels/lovelace/editor/structs/action-struct.ts @@ -16,7 +16,7 @@ const actionConfigStructUser = object({ user: string(), }); -const actionConfigStructConfirmation = union([ +export const actionConfigStructConfirmation = union([ boolean(), object({ text: optional(string()), diff --git a/src/panels/lovelace/editor/structs/entities-struct.ts b/src/panels/lovelace/editor/structs/entities-struct.ts index 837f621b19f8..870e097b85f3 100644 --- a/src/panels/lovelace/editor/structs/entities-struct.ts +++ b/src/panels/lovelace/editor/structs/entities-struct.ts @@ -1,6 +1,9 @@ import { union, object, string, optional, boolean, enums } from "superstruct"; import { TIMESTAMP_RENDERING_FORMATS } from "../../components/types"; -import { actionConfigStruct } from "./action-struct"; +import { + actionConfigStruct, + actionConfigStructConfirmation, +} from "./action-struct"; export const entitiesConfigStruct = union([ object({ @@ -14,6 +17,7 @@ export const entitiesConfigStruct = union([ tap_action: optional(actionConfigStruct), hold_action: optional(actionConfigStruct), double_tap_action: optional(actionConfigStruct), + confirmation: optional(actionConfigStructConfirmation), }), string(), ]); diff --git a/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts b/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts index dadd34449ea2..ef0a34233356 100644 --- a/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts +++ b/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts @@ -167,7 +167,6 @@ export class HuiUnusedEntities extends LitElement { static get styles(): CSSResultGroup { return css` :host { - background: var(--lovelace-background); overflow: hidden; } .container { diff --git a/src/panels/lovelace/entity-rows/hui-button-entity-row.ts b/src/panels/lovelace/entity-rows/hui-button-entity-row.ts index 1b9d5cf583e7..c649b2664b1a 100644 --- a/src/panels/lovelace/entity-rows/hui-button-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-button-entity-row.ts @@ -14,6 +14,7 @@ import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import { createEntityNotFoundWarning } from "../components/hui-warning"; import { ActionRowConfig, LovelaceRow } from "./types"; +import { confirmAction } from "../common/confirm-action"; @customElement("hui-button-entity-row") class HuiButtonEntityRow extends LitElement implements LovelaceRow { @@ -69,11 +70,21 @@ class HuiButtonEntityRow extends LitElement implements LovelaceRow { `; } - private _pressButton(ev): void { + private async _pressButton(ev): Promise { ev.stopPropagation(); - this.hass.callService("button", "press", { - entity_id: this._config!.entity, - }); + if ( + !this._config?.confirmation || + (await confirmAction( + this, + this.hass, + this._config.confirmation, + this.hass.localize("ui.card.button.press") + )) + ) { + this.hass.callService("button", "press", { + entity_id: this._config!.entity, + }); + } } } diff --git a/src/panels/lovelace/entity-rows/hui-input-button-entity-row.ts b/src/panels/lovelace/entity-rows/hui-input-button-entity-row.ts index 97b2a08dba6e..84697b89e5b5 100644 --- a/src/panels/lovelace/entity-rows/hui-input-button-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-input-button-entity-row.ts @@ -14,6 +14,7 @@ import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import { createEntityNotFoundWarning } from "../components/hui-warning"; import { ActionRowConfig, LovelaceRow } from "./types"; +import { confirmAction } from "../common/confirm-action"; @customElement("hui-input-button-entity-row") class HuiInputButtonEntityRow extends LitElement implements LovelaceRow { @@ -69,11 +70,21 @@ class HuiInputButtonEntityRow extends LitElement implements LovelaceRow { `; } - private _pressButton(ev): void { + private async _pressButton(ev): Promise { ev.stopPropagation(); - this.hass.callService("input_button", "press", { - entity_id: this._config!.entity, - }); + if ( + !this._config?.confirmation || + (await confirmAction( + this, + this.hass, + this._config.confirmation, + this.hass.localize("ui.card.button.press") + )) + ) { + this.hass.callService("input_button", "press", { + entity_id: this._config!.entity, + }); + } } } diff --git a/src/panels/lovelace/entity-rows/hui-lock-entity-row.ts b/src/panels/lovelace/entity-rows/hui-lock-entity-row.ts index 128a80808a7c..454225cd6ee8 100644 --- a/src/panels/lovelace/entity-rows/hui-lock-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-lock-entity-row.ts @@ -13,16 +13,17 @@ import { HomeAssistant } from "../../../types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import { createEntityNotFoundWarning } from "../components/hui-warning"; -import { EntityConfig, LovelaceRow } from "./types"; +import { ConfirmableRowConfig, LovelaceRow } from "./types"; import { callProtectedLockService } from "../../../data/lock"; +import { confirmAction } from "../common/confirm-action"; @customElement("hui-lock-entity-row") class HuiLockEntityRow extends LitElement implements LovelaceRow { @property({ attribute: false }) public hass?: HomeAssistant; - @state() private _config?: EntityConfig; + @state() private _config?: ConfirmableRowConfig; - public setConfig(config: EntityConfig): void { + public setConfig(config: ConfirmableRowConfig): void { if (!config) { throw new Error("Invalid configuration"); } @@ -73,15 +74,21 @@ class HuiLockEntityRow extends LitElement implements LovelaceRow { `; } - private _callService(ev): void { + private async _callService(ev): Promise { ev.stopPropagation(); const stateObj = this.hass!.states[this._config!.entity]; - callProtectedLockService( - this, - this.hass!, - stateObj, - stateObj.state === "locked" ? "unlock" : "lock" - ); + const action = stateObj.state === "locked" ? "unlock" : "lock"; + if ( + !this._config?.confirmation || + (await confirmAction( + this, + this.hass!, + this._config.confirmation, + this.hass!.localize(`ui.card.lock.${action}`) + )) + ) { + callProtectedLockService(this, this.hass!, stateObj, action); + } } } diff --git a/src/panels/lovelace/entity-rows/hui-scene-entity-row.ts b/src/panels/lovelace/entity-rows/hui-scene-entity-row.ts index 5d1646d9b29c..27ddae5b70f5 100644 --- a/src/panels/lovelace/entity-rows/hui-scene-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-scene-entity-row.ts @@ -16,6 +16,7 @@ import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import { createEntityNotFoundWarning } from "../components/hui-warning"; import { ActionRowConfig, LovelaceRow } from "./types"; +import { confirmAction } from "../common/confirm-action"; @customElement("hui-scene-entity-row") class HuiSceneEntityRow extends LitElement implements LovelaceRow { @@ -73,9 +74,19 @@ class HuiSceneEntityRow extends LitElement implements LovelaceRow { `; } - private _callService(ev: Event): void { + private async _callService(ev: Event): Promise { ev.stopPropagation(); - activateScene(this.hass, this._config!.entity); + if ( + !this._config?.confirmation || + (await confirmAction( + this, + this.hass, + this._config.confirmation, + this._config.action_name || this.hass.localize("ui.card.scene.activate") + )) + ) { + activateScene(this.hass, this._config!.entity); + } } } diff --git a/src/panels/lovelace/entity-rows/hui-script-entity-row.ts b/src/panels/lovelace/entity-rows/hui-script-entity-row.ts index 87602c939f22..e884f405074f 100644 --- a/src/panels/lovelace/entity-rows/hui-script-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-script-entity-row.ts @@ -16,6 +16,7 @@ import "../components/hui-generic-entity-row"; import { createEntityNotFoundWarning } from "../components/hui-warning"; import { ActionRowConfig, LovelaceRow } from "./types"; import { showMoreInfoDialog } from "../../../dialogs/more-info/show-ha-more-info-dialog"; +import { confirmAction } from "../common/confirm-action"; @customElement("hui-script-entity-row") class HuiScriptEntityRow extends LitElement implements LovelaceRow { @@ -91,12 +92,20 @@ class HuiScriptEntityRow extends LitElement implements LovelaceRow { this._callService("turn_off"); } - private _runScript(ev): void { + private async _runScript(ev): Promise { ev.stopPropagation(); if (hasScriptFields(this.hass!, this._config!.entity)) { showMoreInfoDialog(this, { entityId: this._config!.entity }); - } else { + } else if ( + !this._config?.confirmation || + (await confirmAction( + this, + this.hass!, + this._config.confirmation, + this._config.action_name || this.hass!.localize("ui.card.script.run") + )) + ) { this._callService("turn_on"); } } diff --git a/src/panels/lovelace/entity-rows/types.ts b/src/panels/lovelace/entity-rows/types.ts index d5c20534183c..b8dd9c8d4c7b 100644 --- a/src/panels/lovelace/entity-rows/types.ts +++ b/src/panels/lovelace/entity-rows/types.ts @@ -1,4 +1,7 @@ -import type { ActionConfig } from "../../../data/lovelace/config/action"; +import type { + ActionConfig, + ConfirmationRestrictionConfig, +} from "../../../data/lovelace/config/action"; import type { HomeAssistant } from "../../../types"; import type { LegacyStateFilter } from "../common/evaluate-filter"; import type { Condition } from "../common/validate-condition"; @@ -11,7 +14,12 @@ export interface EntityConfig { icon?: string; image?: string; } -export interface ActionRowConfig extends EntityConfig { + +export interface ConfirmableRowConfig extends EntityConfig { + confirmation?: ConfirmationRestrictionConfig; +} + +export interface ActionRowConfig extends ConfirmableRowConfig { action_name?: string; } export interface EntityFilterEntityConfig extends EntityConfig { diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts index 939d063e8203..3c749fe1a87f 100644 --- a/src/panels/lovelace/hui-root.ts +++ b/src/panels/lovelace/hui-root.ts @@ -62,6 +62,7 @@ import { fetchDashboards, updateDashboard, } from "../../data/lovelace/dashboard"; +import { getPanelTitle } from "../../data/panel"; import { showAlertDialog, showConfirmationDialog, @@ -80,8 +81,8 @@ import { getLovelaceStrategy } from "./strategies/get-strategy"; import { isLegacyStrategyConfig } from "./strategies/legacy-strategy"; import type { Lovelace } from "./types"; import "./views/hui-view"; +import "./views/hui-view-container"; import type { HUIView } from "./views/hui-view"; -import { getPanelTitle } from "../../data/panel"; @customElement("hui-root") class HUIRoot extends LitElement { @@ -291,6 +292,8 @@ class HUIRoot extends LitElement { ? getPanelTitle(this.hass, this.panel) : undefined; + const background = curViewConfig?.background || this.config.background; + return html`
-
+ +
`; } @@ -937,21 +947,6 @@ class HUIRoot extends LitElement { view.hass = this.hass; view.narrow = this.narrow; - const configBackground = viewConfig.background || this.config.background; - - const backgroundStyle = - typeof configBackground === "string" - ? configBackground - : configBackground?.image - ? `center / cover no-repeat url('${configBackground.image}')` - : undefined; - - if (backgroundStyle) { - root.style.setProperty("--lovelace-background", backgroundStyle); - } else { - root.style.removeProperty("--lovelace-background"); - } - root.appendChild(view); } @@ -1063,30 +1058,26 @@ class HUIRoot extends LitElement { mwc-button.warning:not([disabled]) { color: var(--error-color); } - #view { + hui-view-container { position: relative; display: flex; - padding-top: calc(var(--header-height) + env(safe-area-inset-top)); min-height: 100vh; box-sizing: border-box; + padding-top: calc(var(--header-height) + env(safe-area-inset-top)); padding-left: env(safe-area-inset-left); padding-right: env(safe-area-inset-right); padding-inline-start: env(safe-area-inset-left); padding-inline-end: env(safe-area-inset-right); padding-bottom: env(safe-area-inset-bottom); - background: var( - --lovelace-background, - var(--primary-background-color) - ); } - #view > * { + hui-view-container > * { flex: 1 1 100%; max-width: 100%; } /** * In edit mode we have the tab bar on a new line * */ - .edit-mode #view { + .edit-mode hui-view-container { padding-top: calc( var(--header-height) + 48px + env(safe-area-inset-top) ); diff --git a/src/panels/lovelace/sections/hui-grid-section.ts b/src/panels/lovelace/sections/hui-grid-section.ts index 4c477891a654..2edc91094120 100644 --- a/src/panels/lovelace/sections/hui-grid-section.ts +++ b/src/panels/lovelace/sections/hui-grid-section.ts @@ -233,8 +233,8 @@ export class GridSection extends LitElement implements LovelaceSectionElement { .add { position: relative; outline: none; - grid-row: span var(--row-size, 1); - grid-column: span var(--column-size, 2); + grid-row: span 1; + grid-column: span 1; background: none; cursor: pointer; border-radius: var(--ha-card-border-radius, 12px); diff --git a/src/panels/lovelace/views/hui-view-container.ts b/src/panels/lovelace/views/hui-view-container.ts new file mode 100644 index 000000000000..73da5a04c1f4 --- /dev/null +++ b/src/panels/lovelace/views/hui-view-container.ts @@ -0,0 +1,142 @@ +import { css, CSSResultGroup, html, LitElement, PropertyValues } from "lit"; +import { customElement, property, state } from "lit/decorators"; +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { listenMediaQuery } from "../../../common/dom/media_query"; +import type { LovelaceViewConfig } from "../../../data/lovelace/config/view"; +import type { HomeAssistant } from "../../../types"; + +type BackgroundConfig = LovelaceViewConfig["background"]; + +@customElement("hui-view-container") +class HuiViewContainer extends LitElement { + @property({ attribute: false }) hass?: HomeAssistant; + + @property({ attribute: false }) background?: BackgroundConfig; + + @property({ attribute: false }) theme?: LovelaceViewConfig["theme"]; + + @state() themeBackground?: string; + + private _unsubMediaQuery?: () => void; + + public connectedCallback(): void { + super.connectedCallback(); + this._setUpMediaQuery(); + this._applyTheme(); + } + + public disconnectedCallback(): void { + super.disconnectedCallback(); + this._clearmediaQuery(); + } + + private _clearmediaQuery() { + if (this._unsubMediaQuery) { + this._unsubMediaQuery(); + this._unsubMediaQuery = undefined; + } + } + + private _setUpMediaQuery() { + this._unsubMediaQuery = listenMediaQuery( + "(prefers-color-scheme: dark)", + this._applyTheme.bind(this) + ); + } + + private _isFixedBackground(background?: BackgroundConfig) { + if (typeof background === "string") { + return background.includes(" fixed"); + } + return false; + } + + private _computeBackgroundProperty(background?: BackgroundConfig) { + if (typeof background === "object" && background.image) { + return `center / cover no-repeat url('${background.image}')`; + } + if (typeof background === "string") { + return background; + } + return null; + } + + protected willUpdate(changedProperties: PropertyValues) { + super.willUpdate(changedProperties); + if (changedProperties.has("hass") && this.hass) { + const oldHass = changedProperties.get("hass"); + if ( + !oldHass || + this.hass.themes !== oldHass.themes || + this.hass.selectedTheme !== oldHass.selectedTheme + ) { + this._applyTheme(); + return; + } + } + + if (changedProperties.has("theme") || changedProperties.has("background")) { + this._applyTheme(); + } + } + + render() { + return html``; + } + + private _applyTheme() { + if (this.hass) { + applyThemesOnElement(this, this.hass?.themes, this.theme); + } + + const computedStyles = getComputedStyle(this); + const themeBackground = computedStyles.getPropertyValue( + "--lovelace-background" + ); + + const fixedBackground = this._isFixedBackground( + this.background || themeBackground + ); + const viewBackground = this._computeBackgroundProperty(this.background); + this.toggleAttribute("fixed-background", fixedBackground); + this.style.setProperty("--view-background", viewBackground); + } + + static get styles(): CSSResultGroup { + return css` + :host { + display: relative; + } + /* Fixed background hack for Safari iOS */ + :host([fixed-background]) ::slotted(*):before { + display: block; + content: ""; + z-index: -1; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + height: 100%; + width: 100%; + background: var( + --view-background, + var(--lovelace-background, var(--primary-background-color)) + ); + background-attachment: scroll !important; + } + :host(:not(fixed-background)) { + background: var( + --view-background, + var(--lovelace-background, var(--primary-background-color)) + ); + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "hui-view-container": HuiViewContainer; + } +} diff --git a/src/panels/lovelace/views/hui-view.ts b/src/panels/lovelace/views/hui-view.ts index 397be95d51bd..12aa24eb8e60 100644 --- a/src/panels/lovelace/views/hui-view.ts +++ b/src/panels/lovelace/views/hui-view.ts @@ -1,6 +1,5 @@ import { PropertyValues, ReactiveElement } from "lit"; import { customElement, property, state } from "lit/decorators"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; import { HASSDomEvent } from "../../../common/dom/fire_event"; import "../../../components/entity/ha-state-label-badge"; import "../../../components/ha-svg-icon"; @@ -84,8 +83,6 @@ export class HUIView extends ReactiveElement { private _layoutElement?: LovelaceViewElement; - private _viewConfigTheme?: string; - private _createCardElement(cardConfig: LovelaceCardConfig) { const element = document.createElement("hui-card"); element.hass = this.hass; @@ -138,11 +135,6 @@ export class HUIView extends ReactiveElement { return this; } - public connectedCallback(): void { - super.connectedCallback(); - this._applyTheme(); - } - public willUpdate(changedProperties: PropertyValues): void { super.willUpdate(changedProperties); @@ -194,18 +186,6 @@ export class HUIView extends ReactiveElement { }); this._layoutElement.hass = this.hass; - - const oldHass = changedProperties.get("hass") as - | this["hass"] - | undefined; - - if ( - !oldHass || - this.hass.themes !== oldHass.themes || - this.hass.selectedTheme !== oldHass.selectedTheme - ) { - this._applyTheme(); - } } if (changedProperties.has("narrow")) { this._layoutElement.narrow = this.narrow; @@ -237,28 +217,6 @@ export class HUIView extends ReactiveElement { } } - private _applyTheme() { - applyThemesOnElement(this, this.hass.themes, this._viewConfigTheme); - if (this._viewConfigTheme) { - // Set lovelace background color to root element, so it will be placed under the header too - const computedStyles = getComputedStyle(this); - let lovelaceBackground = computedStyles.getPropertyValue( - "--lovelace-background" - ); - if (!lovelaceBackground) { - lovelaceBackground = computedStyles.getPropertyValue( - "--primary-background-color" - ); - } - if (lovelaceBackground) { - this.parentElement?.style.setProperty( - "--lovelace-background", - lovelaceBackground - ); - } - } - } - private async _initializeConfig() { let viewConfig = this.lovelace.config.views[this.index]; let isStrategy = false; @@ -296,9 +254,6 @@ export class HUIView extends ReactiveElement { this._layoutElement!.badges = this._badges; this._layoutElement!.sections = this._sections; - applyThemesOnElement(this, this.hass.themes, viewConfig.theme); - this._viewConfigTheme = viewConfig.theme; - if (addLayoutElement) { while (this.lastChild) { this.removeChild(this.lastChild); diff --git a/src/translations/en.json b/src/translations/en.json index d811d3cda14e..4f4ac7d9253e 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1191,6 +1191,7 @@ "skip": "Skip", "clear_skipped": "Clear skipped", "install": "Install", + "update": "Update", "create_backup": "Create backup before updating", "auto_update_enabled_title": "Can not skip version", "auto_update_enabled_text": "Automatic updates for this item have been enabled; skipping it is, therefore, unavailable. You can either install this update now or wait for Home Assistant to do it automatically." @@ -1929,7 +1930,10 @@ "multiselect": { "failed": "Failed to update {number} items." }, - "learn_more": "Learn more" + "learn_more": "Learn more", + "show_url": "Show full URL", + "hide_url": "Hide URL", + "copy_link": "Copy link" }, "updates": { "caption": "Updates", @@ -2397,7 +2401,9 @@ "enable_remote": "[%key:ui::common::enable%]", "internal_url_automatic": "Automatic", "internal_url_https_error_title": "Invalid local network URL", - "internal_url_https_error_description": "You have configured an HTTPS certificate in Home Assistant. This means that your internal URL needs to be set to a domain covered by the certficate." + "internal_url_https_error_description": "You have configured an HTTPS certificate in Home Assistant. This means that your internal URL needs to be set to a domain covered by the certficate.", + "internal_url_automatic_description": "Use the configured network settings", + "internal_url_placeholder": "http://:8123" }, "hardware": { "caption": "Hardware", @@ -2490,6 +2496,9 @@ "scroll_down_button": "New logs - Click to scroll", "provider_not_found": "Log provider not found", "provider_not_available": "Logs for ''{provider}'' are not available on your system.", + "current": "Current", + "previous": "Previous", + "startups_ago": "{boot} startups ago", "detail": { "logger": "Logger", "source": "Source", @@ -2861,6 +2870,7 @@ "copy_to_clipboard": "Copy to clipboard", "search_in": "Search · {group}", "unknown_entity": "unknown entity", + "edit_unknown_device": "Editor not available for unknown device", "triggers": { "name": "Triggers", "header": "When", @@ -3910,9 +3920,6 @@ "info": "Home Assistant Cloud provides a secure remote access to your instance while away from home. For more information on remote access and these settings visit our security documentation.", "info_instance_will_be_available": "Your instance will be available at your Nabu Casa URL.", "link_learn_how_it_works": "Learn how it works", - "show_url": "Show full URL", - "hide_url": "Hide URL", - "copy_link": "Copy link", "security_options": "Security options", "external_activation": "Allow external activation of remote access", "external_activation_secondary": "If you disable remote access on this page, having this setting enabled allows you to reactivate it remotely via your Nabu Casa account.", @@ -5701,8 +5708,8 @@ }, "move_card": { "header": "Choose a view to move the card to", - "error_title": "Impossible to move the card", - "error_text_section": "Moving a card to a section view is not supported yet. Use copy/cut/paste instead." + "strategy_error_title": "Impossible to move the card", + "strategy_error_text_strategy": "Moving a card to an auto generated view is not supported." }, "change_position": { "title": "Change card position", @@ -5720,7 +5727,9 @@ "add_badge": "Add badge", "add_card": "[%key:ui::panel::lovelace::editor::edit_card::add%]", "create_section": "Create section", - "default_section_title": "New section" + "default_section_title": "New section", + "imported_card_section_title_view": "Imported cards from ''{view_title}'' view", + "imported_card_section_title_default": "Imported cards from another view" }, "delete_section": { "title": "Delete section", @@ -6086,6 +6095,7 @@ "map": { "name": "Map", "geo_location_sources": "Geolocation sources", + "no_geo_location_sources": "No geolocation sources available", "dark_mode": "Dark mode?", "appearance": "Appearance", "theme_mode": "Theme Mode", @@ -7669,6 +7679,7 @@ }, "backup": { "search": "[%key:ui::panel::config::backup::picker::search%]", + "loading_backups": "Loading backups. This can take a few seconds.", "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.", "restore_blocked_not_running": "Restoring a backup is not possible right now because the system is in \"{state}\" state.", diff --git a/src/util/url.ts b/src/util/url.ts new file mode 100644 index 000000000000..ed3da5bb5926 --- /dev/null +++ b/src/util/url.ts @@ -0,0 +1,9 @@ +export function obfuscateUrl(url: string) { + if (url.endsWith(".ui.nabu.casa")) { + return "https://•••••••••••••••••.ui.nabu.casa"; + } + // hide any words that look like they might be a hostname or IP address + return url.replace(/(?<=:\/\/)[\w-]+|(?<=\.)[\w-]+/g, (match) => + "•".repeat(match.length) + ); +} diff --git a/yarn.lock b/yarn.lock index 22b4144017ad..5a866a60dd77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,117 +28,119 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.11, @babel/code-frame@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/code-frame@npm:7.25.7" +"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.11, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/code-frame@npm:7.26.0" dependencies: - "@babel/highlight": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10/000fb8299fb35b6217d4f6c6580dcc1fa2f6c0f82d0a54b8a029966f633a8b19b490a7a906b56a94e9d8bee91c3bc44c74c44c33fb0abaa588202f6280186291 + checksum: 10/41deb0a9ac72d81e46aeab7e587a75e46c7af6a717e10b150a150b332e843807eacb7c856832c84bee2c5015fe31de23e04c18e052c83a1254027c71c0840791 languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.7, @babel/compat-data@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/compat-data@npm:7.25.8" - checksum: 10/269fcb0d89e02e36c8a11e0c1b960a6b4204e88f59f20c374d28f8e318f4cd5ded42dfedc4b54162065e6a10f71c0de651f5ed3f9b45d3a4b52240196df85726 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.9, @babel/compat-data@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/compat-data@npm:7.26.0" + checksum: 10/e847d58222eb567da4bcc2c8e4e44b508d1a34626922858fe12edeb73b5f3c486e7e77a351725b4347525d623dc5046b8a6355df76f368560ca6cbac10fef2c5 languageName: node linkType: hard -"@babel/core@npm:7.25.8, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.0, @babel/core@npm:^7.24.4": - version: 7.25.8 - resolution: "@babel/core@npm:7.25.8" +"@babel/core@npm:7.26.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.0, @babel/core@npm:^7.24.4": + version: 7.26.0 + resolution: "@babel/core@npm:7.26.0" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.25.7" - "@babel/generator": "npm:^7.25.7" - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helpers": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.8" - "@babel/template": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.8" + "@babel/code-frame": "npm:^7.26.0" + "@babel/generator": "npm:^7.26.0" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-module-transforms": "npm:^7.26.0" + "@babel/helpers": "npm:^7.26.0" + "@babel/parser": "npm:^7.26.0" + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10/31eb1a8ca1a3cc0026060720eb290e68205d95c5c00fbd831e69ddc0810f5920b8eb2749db1889ac0a0312b6eddbf321d18a996a88858f3b75c9582bef9ec1e4 + checksum: 10/65767bfdb1f02e80d3af4f138066670ef8fdd12293de85ef151758a901c191c797e86d2e99b11c4cdfca33c72385ecaf38bbd7fa692791ec44c77763496b9b93 languageName: node linkType: hard -"@babel/generator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/generator@npm:7.25.7" +"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/generator@npm:7.26.0" dependencies: - "@babel/types": "npm:^7.25.7" + "@babel/parser": "npm:^7.26.0" + "@babel/types": "npm:^7.26.0" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10/01542829621388077fa8a7464970c1db0f748f1482968dddf5332926afe4003f953cbe08e3bbbb0a335b11eba0126c9a81779bd1c5baed681a9ccec4ae63b217 + checksum: 10/3528b0b5da7003617771ddfc564bcb4037dde59e8142e3808ae8eb5d45c5dfda74df5eb9e6162ab2c2bc66329c609a44d9fd0ce6d4bc14b89b3deb92c3343c56 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.25.7" +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.25.7" - checksum: 10/38044806cab33032391c46861cd0a36adb960525b00bc03f2f3d4380c983bf17971cdabc431e58b93a328ef24bd0271f1dc3a8c1c1ea6cab49d04702961451d8 + "@babel/types": "npm:^7.25.9" + checksum: 10/41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.25.7" +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10/e493c4b7ea1dcb1e406cf30265164b632e133ea9a039a5ddc8eadd5370ad498eddcd99871fdf500b9ac05d0b43f2a0987580ceb1f7adb3b7272e49b56589849a + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/e1bb465b3b0155702d82cfef09e3813e87a6d777cdd2c513796861eac14953340491eafea1d4109278bf4ceb48b54074c45758f042c0544d00c498090bee5a6f languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-compilation-targets@npm:7.25.7" +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-compilation-targets@npm:7.25.9" dependencies: - "@babel/compat-data": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" + "@babel/compat-data": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" browserslist: "npm:^4.24.0" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 10/bbf9be8480da3f9a89e36e9ea2e1c76601014c1074ccada7c2edb1adeb3b62bc402cc4abaf8d16760734b25eceb187a9510ce44f6a7a6f696ccc74f69283625b + checksum: 10/8053fbfc21e8297ab55c8e7f9f119e4809fa7e505268691e1bedc2cf5e7a5a7de8c60ad13da2515378621b7601c42e101d2d679904da395fa3806a1edef6b92e languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.7" +"@babel/helper-create-class-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-member-expression-to-functions": "npm:^7.25.7" - "@babel/helper-optimise-call-expression": "npm:^7.25.7" - "@babel/helper-replace-supers": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/76e3bb727d7541d38acaa9b6ecff88f70e62370396dd22511837b90a556c6815a7efd6fd25b499bf1c8b02cdb18c575781a6aba0c442c38a2129a403b5bf9b1e + checksum: 10/d1d47a7b5fd317c6cb1446b0e4f4892c19ddaa69ea0229f04ba8bea5f273fc8168441e7114ad36ff919f2d310f97310cec51adc79002e22039a7e1640ccaf248 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.7" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" regexpu-core: "npm:^6.1.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/fa083f83ae9ba3326e32762c9839fea171de34d66bffc65569a6a67222ec55cf4ef35b6b26f332d24485c0622a69a2e0b9eb2a7ca279595b174cfeeec68849ac + checksum: 10/bc2b6a365ddf490c416661833dbf4430ae0c66132acccb5ce257e82026dd9db54da788bfbdcb7e0032aa0cba965cb1be169b1e1fb2c8c029b81625da4963f6b9 languageName: node linkType: hard @@ -157,236 +159,223 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-member-expression-to-functions@npm:7.25.7" +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10/f953a0ddbcfbaae835033b54fdbf42cc3aea08c554875fccfc02ed4b1e5fe3ee06abf1b7a8419314357841fabc9efdbcbb8afdf07c4f216a73164a45a147562b + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/ef8cc1c1e600b012b312315f843226545a1a89f25d2f474ce2503fd939ca3f8585180f291a3a13efc56cf13eddc1d41a3a040eae9a521838fd59a6d04cc82490 languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-module-imports@npm:7.25.7" +"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10/94556712c27058ea35a1a39e21a3a9f067cd699405b64333d7d92b2b3d2f24d6f0ffa51aedba0b908e320acb1854e70d296259622e636fb021eeae9a6d996f01 + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/e090be5dee94dda6cd769972231b21ddfae988acd76b703a480ac0c96f3334557d70a965bf41245d6ee43891e7571a8b400ccf2b2be5803351375d0f4e5bcf08 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-module-transforms@npm:7.25.7" +"@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" dependencies: - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-simple-access": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/480309b1272ceaa985de1393f0e4c41aede0d5921ca644cec5aeaf43c8e4192b6dd56a58ef6d7e9acd02a43184ab45d3b241fc8c3a0a00f9dbb30235fd8a1181 + checksum: 10/9841d2a62f61ad52b66a72d08264f23052d533afc4ce07aec2a6202adac0bfe43014c312f94feacb3291f4c5aafe681955610041ece2c276271adce3f570f2f5 languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.25.7" +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.25.7" - checksum: 10/8da0d9f5aae15991678ad1bbe58e52cd62a0ed36871075756d9684c0a7a65988ed81bab53ad6436c39a470d3cd690694dd2b07147817217e3ca87178a129c509 + "@babel/types": "npm:^7.25.9" + checksum: 10/f09d0ad60c0715b9a60c31841b3246b47d67650c512ce85bbe24a3124f1a4d66377df793af393273bc6e1015b0a9c799626c48e53747581c1582b99167cc65dc languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-plugin-utils@npm:7.25.7" - checksum: 10/e1b0ea5e67b05378d6360e3fc370e99bfb247eed9f68145b5cce541da703424e1887fb6fc60ab2f7f743c72dcbfbed79d3032af43f2c251c229c734dc2572a5b +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-plugin-utils@npm:7.25.9" + checksum: 10/e347d87728b1ab10b6976d46403941c8f9008c045ea6d99997a7ffca7b852dc34b6171380f7b17edf94410e0857ff26f3a53d8618f11d73744db86e8ca9b8c64 languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-remap-async-to-generator@npm:7.25.7" +"@babel/helper-remap-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-wrap-function": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-wrap-function": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/3d563ac35cb1306bf70e7353fc807e7b082a7510d955a36db089fa861c6a8b2c470184996f3177d5384e5290a1be9e7eed424efb9e2dd3bed3a8cf6c2d6a9723 + checksum: 10/ea37ad9f8f7bcc27c109963b8ebb9d22bac7a5db2a51de199cb560e251d5593fe721e46aab2ca7d3e7a24b0aa4aff0eaf9c7307af9c2fd3a1d84268579073052 languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-replace-supers@npm:7.25.7" +"@babel/helper-replace-supers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-replace-supers@npm:7.25.9" dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.25.7" - "@babel/helper-optimise-call-expression": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/87b65c7b278fabcb67458e592082a0b4532d5400acbb51e496ea47763077d0a64dc0531d32bafcb1d51f04d61d4715dadb1fd0301bc8449c26fcfd06913eb45e + checksum: 10/8ebf787016953e4479b99007bac735c9c860822fafc51bc3db67bc53814539888797238c81fa8b948b6da897eb7b1c1d4f04df11e501a7f0596b356be02de2ab languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-simple-access@npm:7.25.7" +"@babel/helper-simple-access@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-simple-access@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10/42da1c358f2516337a4f2927c77ebb952907543b9f85d7cb1e2b5b5f6d808cdc081ee66a73e2ecdf48c315d9b0c2a81a857d5e1923ea210b8e81aba5e6cd2b53 + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/a16a6cfa5e8ac7144e856bcdaaf0022cf5de028fc0c56ce21dd664a6e900999a4285c587a209f2acf9de438c0d60bfb497f5f34aa34cbaf29da3e2f8d8d7feb7 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.7" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10/466c81d09981bfb9e10aa6697ecb621389ff92a86187daaca34a969ca990d7327ebe931e87f7d52a200e499542d398469478d83dfaaa244d2f49df4e078490b3 + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/fdbb5248932198bc26daa6abf0d2ac42cab9c2dbb75b7e9f40d425c8f28f09620b886d40e7f9e4e08ffc7aaa2cefe6fc2c44be7c20e81f7526634702fb615bdc languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-string-parser@npm:7.25.7" - checksum: 10/2b8de9fa86c3f3090a349f1ce6e8ee2618a95355cbdafc6f228d82fa4808c84bf3d1d25290c6616d0a18b26b6cfeb6ec2aeebf01404bc8c60051d0094209f0e6 +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10/c28656c52bd48e8c1d9f3e8e68ecafd09d949c57755b0d353739eb4eae7ba4f7e67e92e4036f1cd43378cc1397a2c943ed7bcaf5949b04ab48607def0258b775 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-validator-identifier@npm:7.25.7" - checksum: 10/ec6934cc47fc35baaeb968414a372b064f14f7b130cf6489a014c9486b0fd2549b3c6c682cc1fc35080075e8e38d96aeb40342d63d09fc1a62510c8ce25cde1e +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10/3f9b649be0c2fd457fa1957b694b4e69532a668866b8a0d81eabfa34ba16dbf3107b39e0e7144c55c3c652bf773ec816af8df4a61273a2bb4eb3145ca9cf478e languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-validator-option@npm:7.25.7" - checksum: 10/3c46cbdd666d176f90a0b7e952a0c6e92184b66633336eca79aca243d1f86085ec339a6e45c3d44efa9e03f1829b470a350ddafa70926af6bbf1ac611284f8d3 +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 10/9491b2755948ebbdd68f87da907283698e663b5af2d2b1b02a2765761974b1120d5d8d49e9175b167f16f72748ffceec8c9cf62acfbee73f4904507b246e2b3d languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-wrap-function@npm:7.25.7" +"@babel/helper-wrap-function@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-wrap-function@npm:7.25.9" dependencies: - "@babel/template": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10/00e2291a2b67e060b98cae90b4cc9107cff29d7b26bd5eb61149c63fb99418d9bd00bb0708b8b3e733cae4b1ea3a2b41a709d85192accfa15903f8af5c821fe6 + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/988dcf49159f1c920d6b9486762a93767a6e84b5e593a6342bc235f3e47cc1cb0c048d8fca531a48143e6b7fce1ff12ddbf735cf5f62cb2f07192cf7c27b89cf languageName: node linkType: hard -"@babel/helpers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helpers@npm:7.25.7" +"@babel/helpers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helpers@npm:7.26.0" dependencies: - "@babel/template": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10/2632909f83aa99e8b0da4e10e5ab7fc4f0274e6497bb0f17071e004e037d25e4a595583620261dc21410a526fb32b4f7063c3e15e60ed7890a6f9b8ad52312c5 + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" + checksum: 10/fd4757f65d10b64cfdbf4b3adb7ea6ffff9497c53e0786452f495d1f7794da7e0898261b4db65e1c62bbb9a360d7d78a1085635c23dfc3af2ab6dcba06585f86 languageName: node linkType: hard -"@babel/highlight@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/highlight@npm:7.25.7" +"@babel/parser@npm:^7.23.5, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/parser@npm:7.26.0" dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.7" - chalk: "npm:^2.4.2" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10/823be2523d246dbf80aab3cc81c2a36c6111b16ac2949ef06789da54387824c2bfaa88c6627cdeb4ba7151d047a5d6765e49ebd0b478aba09759250111e65e08 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.23.5, @babel/parser@npm:^7.25.7, @babel/parser@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/parser@npm:7.25.8" - dependencies: - "@babel/types": "npm:^7.25.8" + "@babel/types": "npm:^7.26.0" bin: parser: ./bin/babel-parser.js - checksum: 10/0396eb71e379903cedb43862f84ebb1bec809c41e82b4894d2e6e83b8e8bc636ba6eff45382e615baefdb2399ede76ca82247ecc3a9877ac16eb3140074a3276 + checksum: 10/07e01683b02f12e36eba54a92e8e3db0b362bb6aa624eaf3e4ef54c190148de33004adbabd97961a56182c17b170f3c8835c5f2ff3e100c5a7dc2a8de57c8c88 languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.7" +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/25f1d0a2ec6f9e912d2513b3830b239acdf9c75f453c208f77074687393f380b1150684ca0acb78368391fa1035242ac66e7f3856834d8003f01d1af17747230 + checksum: 10/3c23ef34e3fd7da3578428cb488180ab6b7b96c9c141438374b6d87fa814d87de099f28098e5fc64726c19193a1da397e4d2351d40b459bcd2489993557e2c74 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.7" +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/52551470b6164a787460c28019428e97d20097d5dffab74f8866512706a3b002e57fdb23fe8e5156149bc4c9cfea48d5a0347b7a9e7e2a05f681941037136ab3 + checksum: 10/d3e14ab1cb9cb50246d20cab9539f2fbd1e7ef1ded73980c8ad7c0561b4d5e0b144d362225f0976d47898e04cbd40f2000e208b0913bd788346cf7791b96af91 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.7" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/c37204ec3c82a1babba13f0cc2a68220959224cbab1294b1d7d8501af4734de1664b43c67b97fcaa1b3f53c865b0a4ad6f887102c7d7b913aab43df29ac7da52 + checksum: 10/a9d1ee3fd100d3eb6799a2f2bbd785296f356c531d75c9369f71541811fa324270258a374db103ce159156d006da2f33370330558d0133e6f7584152c34997ca languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.13.0 - checksum: 10/507c92bbcb3d7747c82290370336b50368fbb652af31fea718be8f1928142f1c5f7c6f2b9810d8b9b2905734f8f6b778f9e4b1cfb5a11073a2f1cfe9e5e5b354 + checksum: 10/5b298b28e156f64de51cdb03a2c5b80c7f978815ef1026f3ae8b9fc48d28bf0a83817d8fbecb61ef8fb94a7201f62cca5103cc6e7b9e8f28e38f766d7905b378 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.7" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/289c6da5840c5049adbeb9b4cfb166d422f0b7b3f3a54aff64e8a053a1249e8eb513eac0fa3d033869372ffc30eda1e8555fa789b9daa1064bfdaf7f4717daa8 + checksum: 10/cb893e5deb9312a0120a399835b6614a016c036714de7123c8edabccc56a09c4455016e083c5c4dd485248546d4e5e55fc0e9132b3c3a9bd16abf534138fe3f2 languageName: node linkType: hard -"@babel/plugin-proposal-decorators@npm:7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-proposal-decorators@npm:7.25.7" +"@babel/plugin-proposal-decorators@npm:7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-proposal-decorators@npm:7.25.9" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-decorators": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/plugin-syntax-decorators": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/f07c6af4a6db9369f30f29c33efdcdaad296746702066ce31b88d0edb17e9bc12576b208a4936dd4d0a6a4b4a770516f7dc4ca97eef30aa2fab4653fbe182abd + checksum: 10/f564de219ace3980cd679c719738390c02e2e6f562b330bfb941fab94c128bcb2b30e9970e1aae82d3b908703e162e4a62fb9269c7e9fb4bad83d0a56cdb41af languageName: node linkType: hard @@ -410,47 +399,47 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-decorators@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-syntax-decorators@npm:7.25.7" +"@babel/plugin-syntax-decorators@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-decorators@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/68107004ba33c69ab50b9c57bb04e95dea19ee5daf9a8049cfbf2544c7c8178b6411dbc1bd08375c007543fc07f8b836075126c3220d5338b3167ad9d81746db + checksum: 10/e22e85c0a780b9c10619996d8e9fdb5f151869e53ce2b82ea05a52d393a1dbfda82e5896e9a75775a78ca7f91bca3b7d6864bec401ae1e9dc2b490dc044cad8d languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.12.1, @babel/plugin-syntax-import-assertions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.7" +"@babel/plugin-syntax-import-assertions@npm:^7.12.1, @babel/plugin-syntax-import-assertions@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.26.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/d72615f8dcc5ffbcb456bcf7ce27bc22b30cc9ea8d809e461d80af486033d31bd0b6d83c9a7997c9cd36ff283a9c1207f806da4361bb620370659c256c5454e9 + checksum: 10/b58f2306df4a690ca90b763d832ec05202c50af787158ff8b50cdf3354359710bce2e1eb2b5135fcabf284756ac8eadf09ca74764aa7e76d12a5cac5f6b21e67 languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.7" +"@babel/plugin-syntax-import-attributes@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/7c5451e2d8351693acbc53b1e1f6951026e35899d22847a6d22424a1ee5c92c11ac6c6f209a9e18f85d7bb9267caaf2532653e892997cdcd51784106a5858b7e + checksum: 10/c122aa577166c80ee67f75aebebeef4150a132c4d3109d25d7fc058bf802946f883e330f20b78c1d3e3a5ada631c8780c263d2d01b5dbaecc69efefeedd42916 languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.25.7" +"@babel/plugin-syntax-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/243476a943a84b6b86e99076301e66f48268e8799564053e8feccab90da7944a0b42c91360216dbfb0b2958bbd0ed100d2c7b2db688dab83d19ff2745d4892eb + checksum: 10/bb609d1ffb50b58f0c1bac8810d0e46a4f6c922aa171c458f3a19d66ee545d36e782d3bffbbc1fed0dc65a558bdce1caf5279316583c0fff5a2c1658982a8563 languageName: node linkType: hard @@ -465,14 +454,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.25.7" +"@babel/plugin-syntax-typescript@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/f1492336230920cc4daa6e7aa3571253fb0c0fd05a1d0a7b5dc0a5b907f31945235ee8bf09c83f7738b89943a2320a61dda95e0db2b6310b07040aeda6be4f44 + checksum: 10/0e9821e8ba7d660c36c919654e4144a70546942ae184e85b8102f2322451eae102cbfadbcadd52ce077a2b44b400ee52394c616feab7b5b9f791b910e933fd33 languageName: node linkType: hard @@ -488,680 +477,693 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.7" +"@babel/plugin-transform-arrow-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/45a6b05acd132bd399ab127d54d43f7117f650908092c15da7c41c61c5e49bfdb63c0e65bd59ad68c94bfc6aade602732a98a55b146b69dfae212516203d43f9 + checksum: 10/c29f081224859483accf55fb4d091db2aac0dcd0d7954bac5ca889030cc498d3f771aa20eb2e9cd8310084ec394d85fa084b97faf09298b6bc9541182b3eb5bb languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.8" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-remap-async-to-generator": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-remap-async-to-generator": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/ab3f74664fc03af357e8450711de60ec77149be668059dbc0c0d616d85253117aec0e5ffb2eccda3449d0099d5fba5ef32f0e6e12a52af5f72fbca437372ece5 + checksum: 10/99306c44a4a791abd51a56d89fa61c4cfe805a58e070c7fb1cbf950886778a6c8c4f25a92d231f91da1746d14a338436073fd83038e607f03a2a98ac5340406b languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.7" +"@babel/plugin-transform-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9" dependencies: - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-remap-async-to-generator": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-remap-async-to-generator": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/fdc6161e9027bec8bbe523e40934a2cccf1a30cf241006c98a120b2cda6e4f75d4a4cb4831cf3ece43d9b752183117e4ca5ec43778750146d5fc9a74b22b1acf + checksum: 10/b3ad50fb93c171644d501864620ed23952a46648c4df10dc9c62cc9ad08031b66bd272cfdd708faeee07c23b6251b16f29ce0350473e4c79f0c32178d38ce3a6 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.25.7" +"@babel/plugin-transform-block-scoped-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/334debb143d002295c6dd5559ebf24483557787621fd1d7283ac748eb401ed96b7d43c981f1d2b6795720979fe7872dd0719aed890d064244d52b1c4fe6f3347 + checksum: 10/bf31896556b33a80f017af3d445ceb532ec0f5ca9d69bc211a963ac92514d172d5c24c5ac319f384d9dfa7f1a4d8dc23032c2fe3e74f98a59467ecd86f7033ae languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-block-scoping@npm:7.25.7" +"@babel/plugin-transform-block-scoping@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/bbc5b815c6850eb798a294a5d31ed09bb0db367a31196e78c0d02ce3f845ddd2e0dcfd7ec70505dfa4e1bd67f13e46b315d290c58aa7531468feed380e267d97 + checksum: 10/89dcdd7edb1e0c2f44e3c568a8ad8202e2574a8a8308248550a9391540bc3f5c9fbd8352c60ae90769d46f58d3ab36f2c3a0fbc1c3620813d92ff6fccdfa79c8 languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-class-properties@npm:7.25.7" +"@babel/plugin-transform-class-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.9" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/fe1dbbd77275ade96964fec0c85a1f14e2dac0c6565bccddf00680e43c2e906d289dd9d483aff6359420cef2a044b4aaaeb303f64a3a1a005601c018188368e7 + checksum: 10/a8d69e2c285486b63f49193cbcf7a15e1d3a5f632c1c07d7a97f65306df7f554b30270b7378dde143f8b557d1f8f6336c643377943dec8ec405e4cd11e90b9ea languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-class-static-block@npm:7.25.8" +"@babel/plugin-transform-class-static-block@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-class-static-block@npm:7.26.0" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10/160d5f9d1dbe4dc12c2998227b51b1ccfe9f4d11b1031d0698f34403961d5b9bb995cc86acf1855102b9be365370c97d8cea243802b73c7ba7b2b18b2ac3aae9 + checksum: 10/60cba3f125a7bc4f90706af0a011697c7ffd2eddfba336ed6f84c5f358c44c3161af18b0202475241a96dee7964d96dd3a342f46dbf85b75b38bb789326e1766 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-classes@npm:7.25.7" +"@babel/plugin-transform-classes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-classes@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-replace-supers": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/239926ceb7fa926054fe9aabb7a64dba090d8f83d075bcec804d602a5715501c56dc26367bb90e6780e1113cc04cf6ad32c131e2782ccf1768fd059ac7eba04b + checksum: 10/1914ebe152f35c667fba7bf17ce0d9d0f33df2fb4491990ce9bb1f9ec5ae8cbd11d95b0dc371f7a4cc5e7ce4cf89467c3e34857302911fc6bfb6494a77f7b37e languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.25.7" +"@babel/plugin-transform-computed-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/template": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/f25caeb3366847a1f67efe4b250a460f88a5ebb4c12c566d945bf211ef28977dd21f4dd6539f63743f3fabdbb174b4d34e22af2a451aba3bcfd702396442eb53 + checksum: 10/aa1a9064d6a9d3b569b8cae6972437315a38a8f6553ee618406da5122500a06c2f20b9fa93aeed04dd895923bf6f529c09fc79d4be987ec41785ceb7d2203122 languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-destructuring@npm:7.25.7" +"@babel/plugin-transform-destructuring@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/b58347dc1b807ef8e6aaf995d59c6f09aa9de2c590bb90a52bc9c4082836ef72f70f8fc062370138134220de40dad06af6122ffcce77fb97d5e77ca7cd71e5c7 + checksum: 10/51b24fbead910ad0547463b2d214dd08076b22a66234b9f878b8bac117603dd23e05090ff86e9ffc373214de23d3e5bf1b095fe54cce2ca16b010264d90cf4f5 languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.7" +"@babel/plugin-transform-dotall-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/a4727ee33b95d1f7e33b277b0003e3e91ebb9c3c611512e1ca5f3f0d99efd552a6c42b09e5520ea686ef0389dd8159a77c7c59fb53d0d1a1ff7d385c362da71b + checksum: 10/8bdf1bb9e6e3a2cc8154ae88a3872faa6dc346d6901994505fb43ac85f858728781f1219f40b67f7bb0687c507450236cb7838ac68d457e65637f98500aa161b languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.7" +"@babel/plugin-transform-duplicate-keys@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/b132ce919643f1fa519c8597513fba77155fde2d7689154c73791847efd218ff7ce11694b539ca9dee65538c9e774adf4bd6a6e950800dd648f43d5906a38155 + checksum: 10/10dbb87bc09582416f9f97ca6c40563655abf33e3fd0fee25eeaeff28e946a06651192112a2bc2b18c314a638fa15c55b8365a677ef67aa490848cefdc57e1d8 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.7" +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/688ab66ed249a08d4b2e3ae8a2c10678fbe23f6466d5020d4cc3e031946dc335c028f5a1bee3221acb3875a1e901b0237020463157690fabc06edc4bdd6c6c88 + checksum: 10/f7233cf596be8c6843d31951afaf2464a62a610cb89c72c818c044765827fab78403ab8a7d3a6386f838c8df574668e2a48f6c206b1d7da965aff9c6886cb8e6 languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.8" +"@babel/plugin-transform-dynamic-import@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/cf2c105143461876f418d21893ac8f7f2b0a3c3cefb4374c3cd6338a19d3a0deed3565049f7436b94452c6471622958ef9248c7bdfeb34d2917710ac74431203 + checksum: 10/aaca1ccda819be9b2b85af47ba08ddd2210ff2dbea222f26e4cd33f97ab020884bf81a66197e50872721e9daf36ceb5659502c82199884ea74d5d75ecda5c58b languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.25.7" +"@babel/plugin-transform-exponentiation-operator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.25.9" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/3371fc79c052a3c63652785284a9f4b943a188ae5aa3e68a760c45afc43739d654ad6d8d24b93ed04fe736f6c0b4a7a11ace56bc954d3a6520d0b3c79e058c03 + checksum: 10/57e1bb4135dd16782fe84b49dd360cce8f9bf5f62eb10424dcdaf221e54a8bacdf50f2541c5ac01dea9f833a6c628613d71be915290938a93454389cba4de06b languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.8" +"@babel/plugin-transform-export-namespace-from@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/439aac4ca1c7dbb63f021142e7abcd746049bf0d44cc5d2eb469ae3b75d90e076a43ff77190b74d8139402b53eea625b08c68651d3ce1d0a0915f5643450b3de + checksum: 10/4dfe8df86c5b1d085d591290874bb2d78a9063090d71567ed657a418010ad333c3f48af2c974b865f53bbb718987a065f89828d43279a7751db1a56c9229078d languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-for-of@npm:7.25.7" +"@babel/plugin-transform-for-of@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-for-of@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/6fdfc1747283f50ada9f08d4f801d2156658f183db731369ac2b17f5f885661114906b3645c6a38bb6a5e24b771e6bd43c0ea47580c4fcb9347cd1d179e57435 + checksum: 10/63a2db7fe06c2e3f5fc1926f478dac66a5f7b3eaeb4a0ffae577e6f3cb3d822cb1ed2ed3798f70f5cb1aa06bc2ad8bcd1f557342f5c425fd83c37a8fc1cfd2ba languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-function-name@npm:7.25.7" +"@babel/plugin-transform-function-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-function-name@npm:7.25.9" dependencies: - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/465d54942c03f77da3be5fb56404c6f8162f0e99034b8aceab6af2d386a77ecaf3df0c5f2dd67a00b66cd8ad970c0a08151026ed14aa44673a33f495e6849cc7 + checksum: 10/a8d7c8d019a6eb57eab5ca1be3e3236f175557d55b1f3b11f8ad7999e3fbb1cf37905fd8cb3a349bffb4163a558e9f33b63f631597fdc97c858757deac1b2fd7 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-json-strings@npm:7.25.8" +"@babel/plugin-transform-json-strings@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/adbc6a5a77b96db0f7e168c5fd2e56941df649808ce960f12447c1ba5d3893e9d458e7e14e3a5bd725ac5f3432ac1b3cf62b7413bbf7168a7c656dce51db711a + checksum: 10/e2498d84761cfd05aaea53799933d55af309c9d6204e66b38778792d171e4d1311ad34f334259a3aa3407dd0446f6bd3e390a1fcb8ce2e42fe5aabed0e41bee1 languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-literals@npm:7.25.7" +"@babel/plugin-transform-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/435d9709204e4cae46f9e75973a1424b98bb71516d9cfb0619260cfb56d445b43fa34aa49dacb0e1fbc2a19fdd9373f4b4db4908007be8f9e9e3f0ccf6c73e71 + checksum: 10/3cca75823a38aab599bc151b0fa4d816b5e1b62d6e49c156aa90436deb6e13649f5505973151a10418b64f3f9d1c3da53e38a186402e0ed7ad98e482e70c0c14 languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.8" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/7af0e4ad63c1a59f24894b64330040966204963b75287752a2d56703c7924d3a883a3c2497e1f03c4b1792f8664e0650cf6687010dc5483444c077de1daae9f5 + checksum: 10/8c6febb4ac53852314d28b5e2c23d5dbbff7bf1e57d61f9672e0d97531ef7778b3f0ad698dcf1179f5486e626c77127508916a65eb846a89e98a92f70ed3537b languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.7" +"@babel/plugin-transform-member-expression-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/fb2b985cfa0436bfbed6fbcdd430573272518cf3454c9b0de374cfb80ac6fe60b2ebbe0818a83035e436a9ff08b159bb87527dfd712560c52a0ebfabe6f65121 + checksum: 10/db92041ae87b8f59f98b50359e0bb172480f6ba22e5e76b13bdfe07122cbf0daa9cd8ad2e78dcb47939938fed88ad57ab5989346f64b3a16953fc73dea3a9b1f languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-amd@npm:7.25.7" +"@babel/plugin-transform-modules-amd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-amd@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/0d061c91130433fccc723b4eb1359ced515a5dd7196c3ec75f2b2c24613154365ec1c89fe89bee648c1dc28a54c9625dd2b21b6196659a9f2b8ebff0b2352f6c + checksum: 10/75d34c6e709a23bcfa0e06f722c9a72b1d9ac3e7d72a07ef54a943d32f65f97cbbf0e387d874eb9d9b4c8d33045edfa8e8441d0f8794f3c2b9f1d71b928acf2c languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.25.7" +"@babel/plugin-transform-modules-commonjs@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-simple-access": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-simple-access": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/4b3d038b55bfe5553e9eea360cc1b3dd689068256a9bce1939061ab1dfa194fea0b7b54f10c53b0af0be44508fd0037022c32709a6d96ac1277fb9c7de0f510c + checksum: 10/a7390ca999373ccdef91075f274d1ace3a5cb79f9b9118ed6f76e94867ed454cf798a6f312ce2c4cdc1e035a25d810d754e4cb2e4d866acb4219490f3585de60 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.7" +"@babel/plugin-transform-modules-systemjs@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/abd3522e60a9b639f8ad58b2ee237debe9e78a3a1462e3c5b17b4fbdc1b4bb2235edb1ed7d204b45701ec99dd3506d87164ece8ac9d9465a3e603cf13170b65b + checksum: 10/03145aa89b7c867941a03755216cfb503df6d475a78df84849a157fa5f2fcc17ba114a968d0579ae34e7c61403f35d1ba5d188fdfb9ad05f19354eb7605792f9 languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-umd@npm:7.25.7" +"@babel/plugin-transform-modules-umd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-umd@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/06d6e95a9948aa91b218ada2940b8f568f78991265f2923f6e69c29e97ef1731c1b79adaf72a072a834a86f98fc0bd0117dfb14a37aaea6337fb4468f757471a + checksum: 10/47d03485fedac828832d9fee33b3b982a6db8197e8651ceb5d001890e276150b5a7ee3e9780749e1ba76453c471af907a159108832c24f93453dd45221788e97 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.7" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/4c8340cacb1d21794777abb68db2ea434a89274e9ca539e6f564488f5e8a7f517fdf0f9dc754a14cdb8702a3a488ba2bf0fad404a7da3ba4481f620fa6f234c9 + checksum: 10/434346ba05cf74e3f4704b3bdd439287b95cd2a8676afcdc607810b8c38b6f4798cd69c1419726b2e4c7204e62e4a04d31b0360e91ca57a930521c9211e07789 languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-new-target@npm:7.25.7" +"@babel/plugin-transform-new-target@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-new-target@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/c410edc9d8800590e34e648851a633534c3d153d0a76a34cc12854a4ecd578ce1b1c121e42e8c8f654757fcba13849a39fccde0d619de9ee3567a8f9fa2c8fc0 + checksum: 10/07bb3a09028ee7b8e8ede6e6390e3b3aecc5cf9adb2fc5475ff58036c552b8a3f8e63d4c43211a60545f3307cdc15919f0e54cb5455d9546daed162dc54ff94e languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.8" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/d742fedc1abf404d7f40065cdff9afc521236607f0d06c48d1e471f43d3a7471010d1651ba4758d80c73347a39dc278d86c43a9c814382ded4e9c7c519ace021 + checksum: 10/26e03b1c2c0408cc300e46d8f8cb639653ff3a7b03456d0d8afbb53c44f33a89323f51d99991dade3a5676921119bbdf869728bb7911799b5ef99ffafa2cdd24 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.8" +"@babel/plugin-transform-numeric-separator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/e27779a309dbc5fdba71d7eae0eac5506547632b0cbf8f0add8215797bbda4f4e61595750236fee3292600cc2d13892f133beccc52b2998534e0b10c668db857 + checksum: 10/0528ef041ed88e8c3f51624ee87b8182a7f246fe4013f0572788e0727d20795b558f2b82e3989b5dd416cbd339500f0d88857de41b6d3b6fdacb1d5344bcc5b1 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.8" +"@babel/plugin-transform-object-rest-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9" dependencies: - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-transform-parameters": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/plugin-transform-parameters": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/38f0fab8321a0b1e44784b7371f8bd5601eb885a7e9d88d7904dedda33a72f500d84792758c47e1541336c1b7592b6d956a85c2fd8e2e294f34c0303cc73442c + checksum: 10/a157ac5af2721090150858f301d9c0a3a0efb8ef66b90fce326d6cc0ae45ab97b6219b3e441bf8d72a2287e95eb04dd6c12544da88ea2345e70b3fac2c0ac9e2 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-object-super@npm:7.25.7" +"@babel/plugin-transform-object-super@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-super@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-replace-supers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/c033337d27f98a255509c3ac152a54ce25d707b7969a64ba5262c7ddb54ba962da081fe756ce922caa57d782cacc6705e3d8e74364938391170f043eb9c5905e + checksum: 10/1817b5d8b80e451ae1ad9080cca884f4f16df75880a158947df76a2ed8ab404d567a7dce71dd8051ef95f90fbe3513154086a32aba55cc76027f6cbabfbd7f98 languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.8" +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/9ecf32accc5b12b83ce2f6537c9eac87f2b0f89abfe91a8a8c87ea5ece05820988415271d0fdaf7f565e2c0c837afb24fc644779029b98b1401782d9c0d73642 + checksum: 10/b46a8d1e91829f3db5c252583eb00d05a779b4660abeea5500fda0f8ffa3584fd18299443c22f7fddf0ed9dfdb73c782c43b445dc468d4f89803f2356963b406 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.25.7, @babel/plugin-transform-optional-chaining@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.8" +"@babel/plugin-transform-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/ffb5d81e6dbb28907d5346c8e12a1ed1ea0e30170fbe609d48d0466cdbc9d11b5774c8781682693f7cf7bd39da6111980e54813af96c6b3086dc769369c67d28 + checksum: 10/bc838a499fd9892e163b8bc9bfbc4bf0b28cc3232ee0a6406ae078257c8096518f871d09b4a32c11f4a2d6953c3bc1984619ef748f7ad45aed0b0d9689a8eb36 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-parameters@npm:7.25.7" +"@babel/plugin-transform-parameters@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-parameters@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/c6a77fece85b3fd7323ec4ecc62329932b92c2c1ec20f1cc7617d3e49cc175f143988e756f5ccc45deca0fe582040afa67eeefd1704a8188cf2dc437efcfaf53 + checksum: 10/014009a1763deb41fe9f0dbca2c4489ce0ac83dd87395f488492e8eb52399f6c883d5bd591bae3b8836f2460c3937fcebd07e57dce1e0bfe30cdbc63fdfc9d3a languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-private-methods@npm:7.25.7" +"@babel/plugin-transform-private-methods@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.9" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/79506a74334dc77f6c53f44109f0a3fcf6c50410faa5dd5e5d17ac4b73194098de509f5515a7aed3724a4bfa5dd246517e22a1dff4c20fc052df7a189bf2160d + checksum: 10/6e3671b352c267847c53a170a1937210fa8151764d70d25005e711ef9b21969aaf422acc14f9f7fb86bc0e4ec43e7aefcc0ad9196ae02d262ec10f509f126a58 languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.8" +"@babel/plugin-transform-private-property-in-object@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/c612023879930c951e3a993104bbc3b78169aef6c38233758ee3358a7ab76954b41880bca67635df218dc6893aabad138f3783d508dc715419e62c8d1fad9088 + checksum: 10/aa45bb5669b610afa763d774a4b5583bb60ce7d38e4fd2dedfd0703e73e25aa560e6c6124e155aa90b101601743b127d9e5d3eb00989a7e4b4ab9c2eb88475ba languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-property-literals@npm:7.25.7" +"@babel/plugin-transform-property-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-property-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/f8be4090e9ffa9eebaca5eab4534de16acc5c84a476649cfed532de564817fc982a47d9349e6e447c510786897625153f60740fe9128b40d3a1eae3bbb5e1438 + checksum: 10/436046ab07d54a9b44a384eeffec701d4e959a37a7547dda72e069e751ca7ff753d1782a8339e354b97c78a868b49ea97bf41bf5a44c6d7a3c0a05ad40eeb49c languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-regenerator@npm:7.25.7" +"@babel/plugin-transform-regenerator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-regenerator@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" regenerator-transform: "npm:^0.15.2" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/7a68e841b12b5f767d98ee650aa914ea246d99cc84de054bdb331185894c0fa554ec4296f32d65385e3012dcf083a098e06c14e518056d7e8a0804227a12d85d + checksum: 10/1c09e8087b476c5967282c9790fb8710e065eda77c60f6cb5da541edd59ded9d003d96f8ef640928faab4a0b35bf997673499a194973da4f0c97f0935807a482 + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.26.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/726deca486bbd4b176f8a966eb0f4aabc19d9def3b8dabb8b3a656778eca0df1fda3f3c92b213aa5a184232fdafd5b7bd73b4e24ca4345c498ef6baff2bda4e1 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-reserved-words@npm:7.25.7" +"@babel/plugin-transform-reserved-words@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-reserved-words@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/484edb3f4aa52f49914bea5f832fe380d159fff44e007ac9063666cf773bc258ef5b741f5a323167087bfd6a6dd5c2f96556d1ce5b3765bdf3a54fc018f3670d + checksum: 10/8beda04481b25767acbd1f6b9ef7b3a9c12fbd9dcb24df45a6ad120e1dc4b247c073db60ac742f9093657d6d8c050501fc0606af042f81a3bb6a3ff862cddc47 languageName: node linkType: hard -"@babel/plugin-transform-runtime@npm:7.25.7, @babel/plugin-transform-runtime@npm:^7.13.0": - version: 7.25.7 - resolution: "@babel/plugin-transform-runtime@npm:7.25.7" +"@babel/plugin-transform-runtime@npm:7.25.9, @babel/plugin-transform-runtime@npm:^7.13.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-runtime@npm:7.25.9" dependencies: - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/45a829b6748758f311e483ead6e874a8cc885a4cdb258582fd01221d055649f3ccf08e0eee8d2d6611c05affdde3bbda354c08ad0a6b6258c2d45d87399b7660 + checksum: 10/d8d4f04a47cfc1a6103ecee8604750ba2184cd947ee1696cdc363639f0d4a3848839e20f0ca63511af9ad6742f7dd813cca5b2640353f7b0816bbc17ff0e9e88 languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.7" +"@babel/plugin-transform-shorthand-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/71c9c1d77887ffa452b2d7c9026ee8e40596e4b4208b077369a997e4e031b474ab08c2991b882a9883b78d7cd6d0d2a2b73345b17e195577b28538360b36f914 + checksum: 10/f774995d58d4e3a992b732cf3a9b8823552d471040e280264dd15e0735433d51b468fef04d75853d061309389c66bda10ce1b298297ce83999220eb0ad62741d languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-spread@npm:7.25.7" +"@babel/plugin-transform-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-spread@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/5dd9e269241fccfdb8c9ac9cb21c53fa776113c3cee0ea92bb029940c6231b3bc7c0c70e13e5df220b80cfafe8683264cadff5b182bed9fd1b1317557f1a6c2d + checksum: 10/fe72c6545267176cdc9b6f32f30f9ced37c1cafa1290e4436b83b8f377b4f1c175dad404228c96e3efdec75da692f15bfb9db2108fcd9ad260bc9968778ee41e languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.7" +"@babel/plugin-transform-sticky-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/9f918281fdf2661a095d53ce8b981acaec0fef2a133af4a4fb66132c7a8ad509c49f444ee140bfa5821db24f987d278b3886d3f04e6ba94a6a55c7b2ed024443 + checksum: 10/7454b00844dbe924030dd15e2b3615b36e196500c4c47e98dabc6b37a054c5b1038ecd437e910aabf0e43bf56b973cb148d3437d50f6e2332d8309568e3e979b languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-template-literals@npm:7.25.7" +"@babel/plugin-transform-template-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-template-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/bdb541c31d4890a0aea4cf73a897975b69372cc524302ee9b375424d1706c38d1344b891c14ad2cbc3926e9553ffc2596772e8dab5982e09a9da0d959e4a1e92 + checksum: 10/92eb1d6e2d95bd24abbb74fa7640d02b66ff6214e0bb616d7fda298a7821ce15132a4265d576a3502a347a3c9e94b6c69ed265bb0784664592fa076785a3d16a languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.7" +"@babel/plugin-transform-typeof-symbol@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/1145d65dbf720837b0a1bdcdb2b8b0a761587f3602703ba42209e06b6b8d81801a2041671a881ed0cff6866acec4f7c17031f8540017f2d53913584e152453db + checksum: 10/3ae240358f0b0cd59f8610d6c59d395c216fd1bab407f7de58b86d592f030fb42b4d18e2456a29bee4a2ff014c4c1e3404c8ae64462b1155d1c053b2f9d73438 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-typescript@npm:7.25.7" +"@babel/plugin-transform-typescript@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-typescript@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/plugin-syntax-typescript": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/plugin-syntax-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/2648da981cd71c2100a4ea496684f2c0b939fc77eb4bb9cc8f113d433eab17d4930d2e5ed8d280606bcedef58df99002a64dc92579c6cc7f6c6ee71ceaa77418 + checksum: 10/91e2ec805f89a813e0bf9cf42dffb767f798429e983af3e2f919885a2826b10f29223dd8b40ccc569eb61858d3273620e82e14431603a893e4a7f9b4c1a3a3cf languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.7" +"@babel/plugin-transform-unicode-escapes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/3c8d5b36738690c2d0b843fcc213a18766e617d16b6cfd92f13be2eba025228b6a796fd8e5b6e209daffa1b453c52544bf62e40b917a32c7446184fef52c98fc + checksum: 10/f138cbee539963fb3da13f684e6f33c9f7495220369ae12a682b358f1e25ac68936825562c38eae87f01ac9992b2129208b35ec18533567fc805ce5ed0ffd775 languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.7" +"@babel/plugin-transform-unicode-property-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/cccdddc6837f5e82f0aca59fd77dbab5efd5024dcd6d358efc74faccb4892f69e943f7750f613fcc241f33973fe8622a7e96909305697e7e5868f8e9954cb84e + checksum: 10/201f6f46c1beb399e79aa208b94c5d54412047511795ce1e790edcd189cef73752e6a099fdfc01b3ad12205f139ae344143b62f21f44bbe02338a95e8506a911 languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.7" +"@babel/plugin-transform-unicode-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/1a5a068d39741febd9b8cfce7bf4abf79b282a13c29d39ef7685bffdeb65e5d595e23d9630fedd34428a144d96701efed5a48ea1db0c250c4daf53f44da52983 + checksum: 10/e8baae867526e179467c6ef5280d70390fa7388f8763a19a27c21302dd59b121032568be080749514b097097ceb9af716bf4b90638f1b3cf689aa837ba20150f languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.7" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/c06dd8e66704fc60a97ce2555fa9f6cdfa98bb935a811b15e811cf3a8b5723e508e92b24077163ad704ddce56115062b8cf2f5490d1ad7d23f863d93a8125f89 + checksum: 10/4445ef20de687cb4dcc95169742a8d9013d680aa5eee9186d8e25875bbfa7ee5e2de26a91177ccf70b1db518e36886abcd44750d28db5d7a9539f0efa6839f4b languageName: node linkType: hard -"@babel/preset-env@npm:7.25.8, @babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.13.0": - version: 7.25.8 - resolution: "@babel/preset-env@npm:7.25.8" +"@babel/preset-env@npm:7.26.0, @babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.13.0": + version: 7.26.0 + resolution: "@babel/preset-env@npm:7.26.0" dependencies: - "@babel/compat-data": "npm:^7.25.8" - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.7" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.7" + "@babel/compat-data": "npm:^7.26.0" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.9" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions": "npm:^7.25.7" - "@babel/plugin-syntax-import-attributes": "npm:^7.25.7" + "@babel/plugin-syntax-import-assertions": "npm:^7.26.0" + "@babel/plugin-syntax-import-attributes": "npm:^7.26.0" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.25.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.8" - "@babel/plugin-transform-async-to-generator": "npm:^7.25.7" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.7" - "@babel/plugin-transform-block-scoping": "npm:^7.25.7" - "@babel/plugin-transform-class-properties": "npm:^7.25.7" - "@babel/plugin-transform-class-static-block": "npm:^7.25.8" - "@babel/plugin-transform-classes": "npm:^7.25.7" - "@babel/plugin-transform-computed-properties": "npm:^7.25.7" - "@babel/plugin-transform-destructuring": "npm:^7.25.7" - "@babel/plugin-transform-dotall-regex": "npm:^7.25.7" - "@babel/plugin-transform-duplicate-keys": "npm:^7.25.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.7" - "@babel/plugin-transform-dynamic-import": "npm:^7.25.8" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.7" - "@babel/plugin-transform-export-namespace-from": "npm:^7.25.8" - "@babel/plugin-transform-for-of": "npm:^7.25.7" - "@babel/plugin-transform-function-name": "npm:^7.25.7" - "@babel/plugin-transform-json-strings": "npm:^7.25.8" - "@babel/plugin-transform-literals": "npm:^7.25.7" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.8" - "@babel/plugin-transform-member-expression-literals": "npm:^7.25.7" - "@babel/plugin-transform-modules-amd": "npm:^7.25.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" - "@babel/plugin-transform-modules-systemjs": "npm:^7.25.7" - "@babel/plugin-transform-modules-umd": "npm:^7.25.7" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.7" - "@babel/plugin-transform-new-target": "npm:^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.8" - "@babel/plugin-transform-numeric-separator": "npm:^7.25.8" - "@babel/plugin-transform-object-rest-spread": "npm:^7.25.8" - "@babel/plugin-transform-object-super": "npm:^7.25.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.8" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.8" - "@babel/plugin-transform-parameters": "npm:^7.25.7" - "@babel/plugin-transform-private-methods": "npm:^7.25.7" - "@babel/plugin-transform-private-property-in-object": "npm:^7.25.8" - "@babel/plugin-transform-property-literals": "npm:^7.25.7" - "@babel/plugin-transform-regenerator": "npm:^7.25.7" - "@babel/plugin-transform-reserved-words": "npm:^7.25.7" - "@babel/plugin-transform-shorthand-properties": "npm:^7.25.7" - "@babel/plugin-transform-spread": "npm:^7.25.7" - "@babel/plugin-transform-sticky-regex": "npm:^7.25.7" - "@babel/plugin-transform-template-literals": "npm:^7.25.7" - "@babel/plugin-transform-typeof-symbol": "npm:^7.25.7" - "@babel/plugin-transform-unicode-escapes": "npm:^7.25.7" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.7" - "@babel/plugin-transform-unicode-regex": "npm:^7.25.7" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.7" + "@babel/plugin-transform-arrow-functions": "npm:^7.25.9" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.9" + "@babel/plugin-transform-async-to-generator": "npm:^7.25.9" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.9" + "@babel/plugin-transform-block-scoping": "npm:^7.25.9" + "@babel/plugin-transform-class-properties": "npm:^7.25.9" + "@babel/plugin-transform-class-static-block": "npm:^7.26.0" + "@babel/plugin-transform-classes": "npm:^7.25.9" + "@babel/plugin-transform-computed-properties": "npm:^7.25.9" + "@babel/plugin-transform-destructuring": "npm:^7.25.9" + "@babel/plugin-transform-dotall-regex": "npm:^7.25.9" + "@babel/plugin-transform-duplicate-keys": "npm:^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.9" + "@babel/plugin-transform-dynamic-import": "npm:^7.25.9" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.9" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9" + "@babel/plugin-transform-for-of": "npm:^7.25.9" + "@babel/plugin-transform-function-name": "npm:^7.25.9" + "@babel/plugin-transform-json-strings": "npm:^7.25.9" + "@babel/plugin-transform-literals": "npm:^7.25.9" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.9" + "@babel/plugin-transform-member-expression-literals": "npm:^7.25.9" + "@babel/plugin-transform-modules-amd": "npm:^7.25.9" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9" + "@babel/plugin-transform-modules-systemjs": "npm:^7.25.9" + "@babel/plugin-transform-modules-umd": "npm:^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.9" + "@babel/plugin-transform-new-target": "npm:^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.9" + "@babel/plugin-transform-numeric-separator": "npm:^7.25.9" + "@babel/plugin-transform-object-rest-spread": "npm:^7.25.9" + "@babel/plugin-transform-object-super": "npm:^7.25.9" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.9" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.9" + "@babel/plugin-transform-parameters": "npm:^7.25.9" + "@babel/plugin-transform-private-methods": "npm:^7.25.9" + "@babel/plugin-transform-private-property-in-object": "npm:^7.25.9" + "@babel/plugin-transform-property-literals": "npm:^7.25.9" + "@babel/plugin-transform-regenerator": "npm:^7.25.9" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.26.0" + "@babel/plugin-transform-reserved-words": "npm:^7.25.9" + "@babel/plugin-transform-shorthand-properties": "npm:^7.25.9" + "@babel/plugin-transform-spread": "npm:^7.25.9" + "@babel/plugin-transform-sticky-regex": "npm:^7.25.9" + "@babel/plugin-transform-template-literals": "npm:^7.25.9" + "@babel/plugin-transform-typeof-symbol": "npm:^7.25.9" + "@babel/plugin-transform-unicode-escapes": "npm:^7.25.9" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.9" + "@babel/plugin-transform-unicode-regex": "npm:^7.25.9" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.9" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs3: "npm:^0.10.6" @@ -1170,7 +1172,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/501d78f56df8bf6f98a42da5db475db183048c4280b3292cf988b6baf01843915161f3b341ed525e2fcafcc47726798532b0e1dc7eb80aa29cc88c9d6f94ee6e + checksum: 10/a7a80314f845deea713985a6316361c476621c76cfe5c6c28e8b9558f01634b49bbfdd3581ef94b5d6cff5c2b8830468aa53a73f5b5c1224db2dfea5db7e676f languageName: node linkType: hard @@ -1187,64 +1189,63 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:7.25.7": - version: 7.25.7 - resolution: "@babel/preset-typescript@npm:7.25.7" +"@babel/preset-typescript@npm:7.26.0": + version: 7.26.0 + resolution: "@babel/preset-typescript@npm:7.26.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" - "@babel/plugin-syntax-jsx": "npm:^7.25.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" - "@babel/plugin-transform-typescript": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-syntax-jsx": "npm:^7.25.9" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9" + "@babel/plugin-transform-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/cf6501971f696800096f3b3aef4f7e2c774210b4204bb3a076b2f253970d6649c28003de3afc620b7c7ad67fb346083819c89bae2c644f59995ddb64d6003541 + checksum: 10/81a60826160163a3daae017709f42147744757b725b50c9024ef3ee5a402ee45fd2e93eaecdaaa22c81be91f7940916249cfb7711366431cfcacc69c95878c03 languageName: node linkType: hard -"@babel/runtime@npm:7.25.7, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4": - version: 7.25.7 - resolution: "@babel/runtime@npm:7.25.7" +"@babel/runtime@npm:7.26.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10/73411fe0f1bff3a962586cef05b30f49e554b6563767e6d84f7d79d605b2c20e7fc3df291a3aebef69043181a8f893afdab9e6672557a5c2d08b9377d6f678cd + checksum: 10/9f4ea1c1d566c497c052d505587554e782e021e6ccd302c2ad7ae8291c8e16e3f19d4a7726fb64469e057779ea2081c28b7dbefec6d813a22f08a35712c0f699 languageName: node linkType: hard -"@babel/template@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/template@npm:7.25.7" +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" dependencies: - "@babel/code-frame": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10/49e1e88d2eac17d31ae28d6cf13d6d29c1f49384c4f056a6751c065d6565c351e62c01ce6b11fef5edb5f3a77c87e114ea7326ca384fa618b4834e10cf9b20f3 + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/e861180881507210150c1335ad94aff80fd9e9be6202e1efa752059c93224e2d5310186ddcdd4c0f0b0fc658ce48cb47823f15142b5c00c8456dde54f5de80b2 languageName: node linkType: hard -"@babel/traverse@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/traverse@npm:7.25.7" +"@babel/traverse@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/traverse@npm:7.25.9" dependencies: - "@babel/code-frame": "npm:^7.25.7" - "@babel/generator": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" - "@babel/template": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" + "@babel/code-frame": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10/5b2d332fcd6bc78e6500c997e79f7e2a54dfb357e06f0908cb7f0cdd9bb54e7fd3c5673f45993849d433d01ea6076a6d04b825958f0cfa01288ad55ffa5c286f + checksum: 10/7431614d76d4a053e429208db82f2846a415833f3d9eb2e11ef72eeb3c64dfd71f4a4d983de1a4a047b36165a1f5a64de8ca2a417534cc472005c740ffcb9c6a languageName: node linkType: hard -"@babel/types@npm:^7.25.7, @babel/types@npm:^7.25.8, @babel/types@npm:^7.4.4": - version: 7.25.8 - resolution: "@babel/types@npm:7.25.8" +"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.4.4": + version: 7.26.0 + resolution: "@babel/types@npm:7.26.0" dependencies: - "@babel/helper-string-parser": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - to-fast-properties: "npm:^2.0.0" - checksum: 10/973108dbb189916bb87360f2beff43ae97f1b08f1c071bc6499d363cce48b3c71674bf3b59dfd617f8c5062d1c76dc2a64232bc07b6ccef831fd0c06162d44d9 + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10/40780741ecec886ed9edae234b5eb4976968cc70d72b4e5a40d55f83ff2cc457de20f9b0f4fe9d858350e43dab0ea496e7ef62e2b2f08df699481a76df02cd6e languageName: node linkType: hard @@ -1412,150 +1413,150 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.2.0": - version: 2.2.0 - resolution: "@formatjs/ecma402-abstract@npm:2.2.0" +"@formatjs/ecma402-abstract@npm:2.2.1": + version: 2.2.1 + resolution: "@formatjs/ecma402-abstract@npm:2.2.1" dependencies: - "@formatjs/fast-memoize": "npm:2.2.1" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10/f836dfa8787c8d0d2022f7c77fd15025a402ee519f9cb6e68dfce2b937956059e4f96b6059c40506c7260d93bdfd0517001b568cdbea8db08b439ce5d21f437e + "@formatjs/fast-memoize": "npm:2.2.2" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10/8c281e14cb5f12b8697225be6b0ac13d057911e257d3c23928aad985b535df90b7bb2a235aab22753a6e57aef98f00b826514fc3703e69018ccc98c8d9848f38 languageName: node linkType: hard -"@formatjs/fast-memoize@npm:2.2.1": - version: 2.2.1 - resolution: "@formatjs/fast-memoize@npm:2.2.1" +"@formatjs/fast-memoize@npm:2.2.2": + version: 2.2.2 + resolution: "@formatjs/fast-memoize@npm:2.2.2" dependencies: - tslib: "npm:^2.7.0" - checksum: 10/7bb12904d4c93cfae17006388b26d97cc0e32fef5af510f80974437382cd13a88b439b4407d96b6646af1806977cf34113f3dc8f1c96b28f73856700ee7857fd + tslib: "npm:2" + checksum: 10/c6e958753eb41bb0875734762a44126a0d570706a31b32bb409e759cd372184c28e294b02fce0b0f0999c171ef717d513eaf7936862c498d78428b97db446ff8 languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.8.0": - version: 2.8.0 - resolution: "@formatjs/icu-messageformat-parser@npm:2.8.0" +"@formatjs/icu-messageformat-parser@npm:2.9.1": + version: 2.9.1 + resolution: "@formatjs/icu-messageformat-parser@npm:2.9.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/icu-skeleton-parser": "npm:1.8.4" - tslib: "npm:^2.7.0" - checksum: 10/26464d14b19da2cb2b4c946ac619cac68936e0613324b3c5d317aaa5192089c3c56f53673c0a8549bb66d4939d60c617a010e7998e73f93755d2a46a82d8b255 + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/icu-skeleton-parser": "npm:1.8.5" + tslib: "npm:2" + checksum: 10/f52c7c55b1dfc141910089a0494abd98d1c13c0a359cfb3bfa0668a5e2015c0c579bf161978fdb3ab40fa9a7374a37ac062f8710ed285429bf60abde4a5d1183 languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.8.4": - version: 1.8.4 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.4" +"@formatjs/icu-skeleton-parser@npm:1.8.5": + version: 1.8.5 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.5" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - tslib: "npm:^2.7.0" - checksum: 10/15610bdbf7b8405191a41f044ccd2ba152364690b20a23bec32b98764e3de44029bb03cb897ef0bce0c2f1643ba2333dc79e99724f2619a69154c13617eb27af + "@formatjs/ecma402-abstract": "npm:2.2.1" + tslib: "npm:2" + checksum: 10/5b9c57f80b751483bef8897ff9607a9eb215fd7a8d8ae9fa5c631edf6d16fa4532c853395f20b7f3f38d6d4d1a35b98cd06421291203c7ad333f52077ef2a406 languageName: node linkType: hard -"@formatjs/intl-datetimeformat@npm:6.15.0": - version: 6.15.0 - resolution: "@formatjs/intl-datetimeformat@npm:6.15.0" +"@formatjs/intl-datetimeformat@npm:6.16.1": + version: 6.16.1 + resolution: "@formatjs/intl-datetimeformat@npm:6.16.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10/847c2c8acc6a9782e30fbb771639513ef3f73d1d96dbbff5042509925ca4e26c106c0fd87bf488bc93ceaaddad463c089f9d03d9a700075928c2fc937cec44b1 + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10/494868322d396e0eede6a27c16047858944f42fd3b45cf5d155f963df62e694b842ac0bef07e23aa73fa55cf143956d642d05ea62a3e762632101451975b5fc4 languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.7.0": - version: 6.7.0 - resolution: "@formatjs/intl-displaynames@npm:6.7.0" +"@formatjs/intl-displaynames@npm:6.8.1": + version: 6.8.1 + resolution: "@formatjs/intl-displaynames@npm:6.8.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10/975c39d987920883cc520d3d950afeb52850fc36e5ebabbf006a579b1e5a99e1b5ef6d7126181f0d5449bf12ef8c63e1e8952c456475c77d41f0d021fdc8c6cb + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10/627fc625e14b4d1bea5b2bf41e40050eb9775d0f66780e155719e21c062f9b3331d08b488ebcd3608c60999498af5a39e67cb5fd2a6d54a0e7395d7a63bfe643 languageName: node linkType: hard -"@formatjs/intl-enumerator@npm:1.7.0": - version: 1.7.0 - resolution: "@formatjs/intl-enumerator@npm:1.7.0" +"@formatjs/intl-enumerator@npm:1.8.1": + version: 1.8.1 + resolution: "@formatjs/intl-enumerator@npm:1.8.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - tslib: "npm:^2.7.0" - checksum: 10/de37c701e37cbb1af250df406b0282c4df1bf62d440b92d6d5c11dce88edd780b7ba7885fb9561de317a40bb0ab5169c63178effbeccb78124a7758d2c01a833 + "@formatjs/ecma402-abstract": "npm:2.2.1" + tslib: "npm:2" + checksum: 10/0e4250de905e757fb88d6ff072968c72ed3a39de8ddaed73c38c0099825f11530c9b8e224573ae6e46cf49f1318e463f40ba2cdfa25cb7415382ba952b570bdc languageName: node linkType: hard -"@formatjs/intl-getcanonicallocales@npm:2.4.0": - version: 2.4.0 - resolution: "@formatjs/intl-getcanonicallocales@npm:2.4.0" +"@formatjs/intl-getcanonicallocales@npm:2.5.1": + version: 2.5.1 + resolution: "@formatjs/intl-getcanonicallocales@npm:2.5.1" dependencies: - tslib: "npm:^2.7.0" - checksum: 10/ec1dc0498c05189441bf1cfe5c89f9d5e9bad4e1c41ec735c8d3248852b885d39a24436cccfdcee8a2246158365f20e975af7854c83f947c38b40496d29e1428 + tslib: "npm:2" + checksum: 10/5e83c0b3574333e5027c3c4f74ea20800e50e36fb8efa69361457b57f618738f478b5d22777ba30a2b7a15bdff60101d8119169c909b33577244747d52e59614 languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.6.0": - version: 7.6.0 - resolution: "@formatjs/intl-listformat@npm:7.6.0" +"@formatjs/intl-listformat@npm:7.7.1": + version: 7.7.1 + resolution: "@formatjs/intl-listformat@npm:7.7.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10/3024b00f5965385c816a890eccc5891fc7b9d843dbc6a17dd560c9db8c5e45fc1656258375f9e06e61266869e6303a685fc9e3d7f9e8ba078244db8198f48259 + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10/a64581f1d2e8e0c0c83c5d56334a3e3786ed251e1a882d7610d2588d8602eacb32c9167032891e2796c30df3437c9ce52c7284786dca6f1f44250301060169ea languageName: node linkType: hard -"@formatjs/intl-locale@npm:4.1.0": - version: 4.1.0 - resolution: "@formatjs/intl-locale@npm:4.1.0" +"@formatjs/intl-locale@npm:4.2.1": + version: 4.2.1 + resolution: "@formatjs/intl-locale@npm:4.2.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-enumerator": "npm:1.7.0" - "@formatjs/intl-getcanonicallocales": "npm:2.4.0" - tslib: "npm:^2.7.0" - checksum: 10/dd598576957ee92399572a3a327a557fd6089763e4d372abdddd23cbce0b49f963d4a4d7e017beaa4488827a1671f15567da057c8d0bf967bc1eefc8d3c7977c + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-enumerator": "npm:1.8.1" + "@formatjs/intl-getcanonicallocales": "npm:2.5.1" + tslib: "npm:2" + checksum: 10/4cba0fbeded2c7c5806528806f176cb833c43765bf1717470f4e001ab42581d5f0b52bf1893afef9597fba96dc3d4659507e490030f231523d460ec6686b9562 languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.5.5": - version: 0.5.5 - resolution: "@formatjs/intl-localematcher@npm:0.5.5" +"@formatjs/intl-localematcher@npm:0.5.6": + version: 0.5.6 + resolution: "@formatjs/intl-localematcher@npm:0.5.6" dependencies: - tslib: "npm:^2.7.0" - checksum: 10/179069eb3a23510e17f118efa3b6a9873f18683977cb813e57ef08cba09bbac73fce13f42c557deb62d3da4f32a8c7ad7d522aae4f1b41625835ce564e59e750 + tslib: "npm:2" + checksum: 10/14eac6bb25dcfeedd7960f44dec5a137999729da00b294ddf1133abe760ced4342f37734bc750b4c47f8dd8d5633a7da38d274503f80d7e965bb1f6fb6f2988c languageName: node linkType: hard -"@formatjs/intl-numberformat@npm:8.13.0": - version: 8.13.0 - resolution: "@formatjs/intl-numberformat@npm:8.13.0" +"@formatjs/intl-numberformat@npm:8.14.1": + version: 8.14.1 + resolution: "@formatjs/intl-numberformat@npm:8.14.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10/c1c5ebcf559137978332045e56d228b4851a7ab96063a07a9ceef51e4f41c034f549d9c0ab21fa7d11f5b19f97a9ca5114d4367636bf22f7a23fd7e22c5e2412 + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10/51152d1b9607a35c64e6089e44b90c7ec90be3b1925ba47ffc559ddb4fd72afae76e83af3d436831ea0fc47dc0e9fee9cd3d576280440f2dce03cb6bd24e0bed languageName: node linkType: hard -"@formatjs/intl-pluralrules@npm:5.2.17": - version: 5.2.17 - resolution: "@formatjs/intl-pluralrules@npm:5.2.17" +"@formatjs/intl-pluralrules@npm:5.3.1": + version: 5.3.1 + resolution: "@formatjs/intl-pluralrules@npm:5.3.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10/fabbff5b30a31e68579fa6005578ebf17cc398b4914459c863f1ed6fa29f81c112365a182b8aa2329fdbbbec5a3c3f5a931dd67f1fc1e8a5b46c55442e59dfb3 + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10/fc83c3547a9f0af6331c2970f265234fde967848ff738730f2e87ce816636d8778ead1185f5ecccc692cb8b63c11412dc85deac9d3425f44fe3a6a6c30c8b776 languageName: node linkType: hard -"@formatjs/intl-relativetimeformat@npm:11.3.0": - version: 11.3.0 - resolution: "@formatjs/intl-relativetimeformat@npm:11.3.0" +"@formatjs/intl-relativetimeformat@npm:11.4.1": + version: 11.4.1 + resolution: "@formatjs/intl-relativetimeformat@npm:11.4.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10/675f8a15eab8e073f1bb61e1b13e206472aa92b82979592ae2f31a434631cab049e67e2d957223b1b0a3ea45c0e80143f1bb5b3f9c762ef77fac2082567390f9 + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10/80817403301baed257fbd8c793b9ed077a2e6dd0414a6895b5bfde3619aebc818f30535da9b560a6186fac783cf09561c495d2c6568a980bd635736194655af5 languageName: node linkType: hard @@ -4144,12 +4145,12 @@ __metadata: languageName: node linkType: hard -"@types/leaflet@npm:*, @types/leaflet@npm:1.9.13": - version: 1.9.13 - resolution: "@types/leaflet@npm:1.9.13" +"@types/leaflet@npm:*, @types/leaflet@npm:1.9.14": + version: 1.9.14 + resolution: "@types/leaflet@npm:1.9.14" dependencies: "@types/geojson": "npm:*" - checksum: 10/67ca1bf3da0db15e9efe4aebc72f66a3960a8375859f15d41676c61b8c2b934be72cba689c584bb2ef7d40de5aafaf9f82bf4530c56191a09a61b24395531d84 + checksum: 10/70fbc69a4d6a3168a14072211e7738ad80954b8786105c4a0ec0615e88a5dbe131b1beff7b30594b293db2e1cb3f88a87d1ec1c89e128018bd42393dfcfcc69b languageName: node linkType: hard @@ -4543,129 +4544,129 @@ __metadata: languageName: node linkType: hard -"@vaadin/a11y-base@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/a11y-base@npm:24.5.0" +"@vaadin/a11y-base@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/a11y-base@npm:24.5.1" dependencies: "@open-wc/dedupe-mixin": "npm:^1.3.0" "@polymer/polymer": "npm:^3.0.0" - "@vaadin/component-base": "npm:~24.5.0" + "@vaadin/component-base": "npm:~24.5.1" lit: "npm:^3.0.0" - checksum: 10/18fe49b1c52842a14fa2d15d3ae647422c74abb2c3b1ee5883c09448da01d1c4562af85206d2870c8f5f59ca500334e2b99a55b97ebf9db87465725c980dfd11 + checksum: 10/616324d61525904a4f897cbee508c0b61b3ba70e88727207ef793e9b5fdd5febe2afe304e204b599aa8b1caf93bab37b3219b3a896a8c63e7ed25f720ee8bcc2 languageName: node linkType: hard -"@vaadin/combo-box@npm:24.5.0": - version: 24.5.0 - resolution: "@vaadin/combo-box@npm:24.5.0" +"@vaadin/combo-box@npm:24.5.1": + version: 24.5.1 + resolution: "@vaadin/combo-box@npm:24.5.1" dependencies: "@open-wc/dedupe-mixin": "npm:^1.3.0" "@polymer/polymer": "npm:^3.0.0" - "@vaadin/a11y-base": "npm:~24.5.0" - "@vaadin/component-base": "npm:~24.5.0" - "@vaadin/field-base": "npm:~24.5.0" - "@vaadin/input-container": "npm:~24.5.0" - "@vaadin/item": "npm:~24.5.0" - "@vaadin/lit-renderer": "npm:~24.5.0" - "@vaadin/overlay": "npm:~24.5.0" - "@vaadin/vaadin-lumo-styles": "npm:~24.5.0" - "@vaadin/vaadin-material-styles": "npm:~24.5.0" - "@vaadin/vaadin-themable-mixin": "npm:~24.5.0" - checksum: 10/910f2d59c4cd40e4a7c9d49295c36135b344078401277b1c6b2fdbd3aa6a0bf120db7acef1be1fa81d205d69d2cdb1953af58c523dd22cd768c9e03f6f06f9a7 + "@vaadin/a11y-base": "npm:~24.5.1" + "@vaadin/component-base": "npm:~24.5.1" + "@vaadin/field-base": "npm:~24.5.1" + "@vaadin/input-container": "npm:~24.5.1" + "@vaadin/item": "npm:~24.5.1" + "@vaadin/lit-renderer": "npm:~24.5.1" + "@vaadin/overlay": "npm:~24.5.1" + "@vaadin/vaadin-lumo-styles": "npm:~24.5.1" + "@vaadin/vaadin-material-styles": "npm:~24.5.1" + "@vaadin/vaadin-themable-mixin": "npm:~24.5.1" + checksum: 10/bc95ddd4d82e1dd64c98e535ee5643ef1aef47679ee12673cb12e3006597364d6c302fd07e44cf659feabcd12bee8169e3755a3bd506e8c95d285f7dae90d82b languageName: node linkType: hard -"@vaadin/component-base@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/component-base@npm:24.5.0" +"@vaadin/component-base@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/component-base@npm:24.5.1" dependencies: "@open-wc/dedupe-mixin": "npm:^1.3.0" "@polymer/polymer": "npm:^3.0.0" "@vaadin/vaadin-development-mode-detector": "npm:^2.0.0" "@vaadin/vaadin-usage-statistics": "npm:^2.1.0" lit: "npm:^3.0.0" - checksum: 10/ac787456264fd6ab50806b3742a8f8d2a91fdff96bab876c6863bd3438dff7d2e20698434cafd1419f4edf630e789025cf4a50d2c2892b792cc600b090cfd6bc + checksum: 10/1abbdce90cd494a622548232c8eb23219aef7616dc159ed4dbf6c7df748017e1672c140fea66839bfb14c0c8f78928dc4917857114789ac1cac1f02f3be5e6c6 languageName: node linkType: hard -"@vaadin/field-base@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/field-base@npm:24.5.0" +"@vaadin/field-base@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/field-base@npm:24.5.1" dependencies: "@open-wc/dedupe-mixin": "npm:^1.3.0" "@polymer/polymer": "npm:^3.0.0" - "@vaadin/a11y-base": "npm:~24.5.0" - "@vaadin/component-base": "npm:~24.5.0" + "@vaadin/a11y-base": "npm:~24.5.1" + "@vaadin/component-base": "npm:~24.5.1" lit: "npm:^3.0.0" - checksum: 10/5c16a8f36280f5ab42e419f0a8078cd3d2451e795f6e7a09fe16168d7154aca55b8dacbe91b131d689fa9a4c8e7296f0c3f10876a420524bee72ae59786e0732 + checksum: 10/97eefe265d76095c9aee15d1e1009bae4fa12de62d00ac73e74985d452aeb3f5e3f63173abdcdfd8c71a10a0203ee205d277f349dc25e3a4a44dad0488b7e661 languageName: node linkType: hard -"@vaadin/icon@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/icon@npm:24.5.0" +"@vaadin/icon@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/icon@npm:24.5.1" dependencies: "@open-wc/dedupe-mixin": "npm:^1.3.0" "@polymer/polymer": "npm:^3.0.0" - "@vaadin/component-base": "npm:~24.5.0" - "@vaadin/vaadin-lumo-styles": "npm:~24.5.0" - "@vaadin/vaadin-themable-mixin": "npm:~24.5.0" + "@vaadin/component-base": "npm:~24.5.1" + "@vaadin/vaadin-lumo-styles": "npm:~24.5.1" + "@vaadin/vaadin-themable-mixin": "npm:~24.5.1" lit: "npm:^3.0.0" - checksum: 10/1ae2d1addcf20d890d924e02b901add937c795f7c9451dfd36128f0b919fac3ee1f6d363d4ad9af88f5432ab96612913460c7bcd0b7309da425da688cb667311 + checksum: 10/859e6380193b7184e9159f3dc62219a4878318fd7271d7d226338e25965c9cfff8b67db345c3ce64c6eaac8b26196810bddabac0b8a34b88a2d1d937b8814279 languageName: node linkType: hard -"@vaadin/input-container@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/input-container@npm:24.5.0" +"@vaadin/input-container@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/input-container@npm:24.5.1" dependencies: "@polymer/polymer": "npm:^3.0.0" - "@vaadin/component-base": "npm:~24.5.0" - "@vaadin/vaadin-lumo-styles": "npm:~24.5.0" - "@vaadin/vaadin-material-styles": "npm:~24.5.0" - "@vaadin/vaadin-themable-mixin": "npm:~24.5.0" + "@vaadin/component-base": "npm:~24.5.1" + "@vaadin/vaadin-lumo-styles": "npm:~24.5.1" + "@vaadin/vaadin-material-styles": "npm:~24.5.1" + "@vaadin/vaadin-themable-mixin": "npm:~24.5.1" lit: "npm:^3.0.0" - checksum: 10/8c0048cff0e7d9479ff262278658f5faeff231b62e8a14adac54b87761f387151b9931c81cd776393db8318e8787a61c926f8d7f4d682b36c80df00960655639 + checksum: 10/81312f4b7d5b691d03d708c4cec40b07542773eab6f2101cbd12cad5cb491f13ffd6c4dcd44a276745f80e334feb393caa3d084da1e221d72ac91fe863a653ad languageName: node linkType: hard -"@vaadin/item@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/item@npm:24.5.0" +"@vaadin/item@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/item@npm:24.5.1" dependencies: "@open-wc/dedupe-mixin": "npm:^1.3.0" "@polymer/polymer": "npm:^3.0.0" - "@vaadin/a11y-base": "npm:~24.5.0" - "@vaadin/component-base": "npm:~24.5.0" - "@vaadin/vaadin-lumo-styles": "npm:~24.5.0" - "@vaadin/vaadin-material-styles": "npm:~24.5.0" - "@vaadin/vaadin-themable-mixin": "npm:~24.5.0" - checksum: 10/083cf3cbdbf2950f6793561fc8b9bed1df298a2f6b071dac5ca4aed1230e1ee8a2f0818d891ed4dbd9b56ed756ad6a6d3c806b86dbffe6d4cf3608246dbd1632 + "@vaadin/a11y-base": "npm:~24.5.1" + "@vaadin/component-base": "npm:~24.5.1" + "@vaadin/vaadin-lumo-styles": "npm:~24.5.1" + "@vaadin/vaadin-material-styles": "npm:~24.5.1" + "@vaadin/vaadin-themable-mixin": "npm:~24.5.1" + checksum: 10/5aa6c9e795f915089d7fa1668b2049063a3ccfc078ad1e66a0b591980c836105613a1e276731e44156a8e9cd2702c8668fc68ec531e098f6e946591c32e05514 languageName: node linkType: hard -"@vaadin/lit-renderer@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/lit-renderer@npm:24.5.0" +"@vaadin/lit-renderer@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/lit-renderer@npm:24.5.1" dependencies: lit: "npm:^3.0.0" - checksum: 10/923c01f79e5d8dc44e8a9b332aa494b0045a662b639851ce138006313abd23a1c617e60419266a3c06b1fd499bf47c63b9cadffb6059f29815e07455e5bf7e42 + checksum: 10/cd357ee89b36493709c0ff4dd43d32dddedcff4e909e5faaf6f16389ce2448aeb09df0ff6fb6d9f4d5208cc913013120c3f1a40bd8e4325e33634d1e5491acbc languageName: node linkType: hard -"@vaadin/overlay@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/overlay@npm:24.5.0" +"@vaadin/overlay@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/overlay@npm:24.5.1" dependencies: "@open-wc/dedupe-mixin": "npm:^1.3.0" "@polymer/polymer": "npm:^3.0.0" - "@vaadin/a11y-base": "npm:~24.5.0" - "@vaadin/component-base": "npm:~24.5.0" - "@vaadin/vaadin-lumo-styles": "npm:~24.5.0" - "@vaadin/vaadin-material-styles": "npm:~24.5.0" - "@vaadin/vaadin-themable-mixin": "npm:~24.5.0" + "@vaadin/a11y-base": "npm:~24.5.1" + "@vaadin/component-base": "npm:~24.5.1" + "@vaadin/vaadin-lumo-styles": "npm:~24.5.1" + "@vaadin/vaadin-material-styles": "npm:~24.5.1" + "@vaadin/vaadin-themable-mixin": "npm:~24.5.1" lit: "npm:^3.0.0" - checksum: 10/1fce7cefee38eb84e41968f5f73fd32ef45d75e29a10e7bfc113c98c9852f4f6a67be8e10b6467e018b5a5b00536113a3af94aa3cf00f72e241beeded0e6d1de + checksum: 10/3b88d72f4da22bff5820f8d0ca5e0d46fc38e396792945fc5210a99bf959aa169c1d29b08c4e7d9b7984981d42bb0a582e3485883602b5da04fac4f5251ac50f languageName: node linkType: hard @@ -4676,36 +4677,36 @@ __metadata: languageName: node linkType: hard -"@vaadin/vaadin-lumo-styles@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/vaadin-lumo-styles@npm:24.5.0" +"@vaadin/vaadin-lumo-styles@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/vaadin-lumo-styles@npm:24.5.1" dependencies: "@polymer/polymer": "npm:^3.0.0" - "@vaadin/component-base": "npm:~24.5.0" - "@vaadin/icon": "npm:~24.5.0" - "@vaadin/vaadin-themable-mixin": "npm:~24.5.0" - checksum: 10/bd48dee4fe45ada05e2b32a472c5b4d4f93ddd6024005c9d29a61d793ed4e0b37b124492a31ae2d79defe7ec090b2c9bb596802a4ae77f22b7afa4482a62b7a2 + "@vaadin/component-base": "npm:~24.5.1" + "@vaadin/icon": "npm:~24.5.1" + "@vaadin/vaadin-themable-mixin": "npm:~24.5.1" + checksum: 10/67de74b1944932366c3e2ed8fe01c29332082fd3c373f415bc1af4063261773c358131c934ebac8964a606a293a42997cb7dfbcb5aae0abb2996ce1e582478b9 languageName: node linkType: hard -"@vaadin/vaadin-material-styles@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/vaadin-material-styles@npm:24.5.0" +"@vaadin/vaadin-material-styles@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/vaadin-material-styles@npm:24.5.1" dependencies: "@polymer/polymer": "npm:^3.0.0" - "@vaadin/component-base": "npm:~24.5.0" - "@vaadin/vaadin-themable-mixin": "npm:~24.5.0" - checksum: 10/386c879a9390751b1378be0e4c7c8418a48bb6e39d5a104ac48877a3581429891fe2bcbb542c20890a26b66f2143e6b7c5ccdcbb0b7e92c6bc8e1f1d4ba14480 + "@vaadin/component-base": "npm:~24.5.1" + "@vaadin/vaadin-themable-mixin": "npm:~24.5.1" + checksum: 10/7264caa7d53d6aabf7223b78da8434037bb0945ae11ff1f3f59be25e3631193ca65fbc6990ba2b28b99f2048ce422e601140947261e90f53962085786260b05d languageName: node linkType: hard -"@vaadin/vaadin-themable-mixin@npm:24.5.0, @vaadin/vaadin-themable-mixin@npm:~24.5.0": - version: 24.5.0 - resolution: "@vaadin/vaadin-themable-mixin@npm:24.5.0" +"@vaadin/vaadin-themable-mixin@npm:24.5.1, @vaadin/vaadin-themable-mixin@npm:~24.5.1": + version: 24.5.1 + resolution: "@vaadin/vaadin-themable-mixin@npm:24.5.1" dependencies: "@open-wc/dedupe-mixin": "npm:^1.3.0" lit: "npm:^3.0.0" - checksum: 10/877daa05dc175d77e3267e62cd11fde8870918f7e38dae89cdbccab7db5c345d7c27bf99ddd474123a937f2e9492c0ccb6c19e0b1403f1e28b506f1e8402a8c2 + checksum: 10/28b94d789d3713ed25db7d4ab9b008e4b0b502b4ab0a22672d92b61a053017ae429bcd03e0e45eafdb9442d66ed3a9b2e72210a59477d16440061a05a591664e languageName: node linkType: hard @@ -6048,16 +6049,16 @@ __metadata: languageName: node linkType: hard -"chai@npm:5.1.1": - version: 5.1.1 - resolution: "chai@npm:5.1.1" +"chai@npm:5.1.2": + version: 5.1.2 + resolution: "chai@npm:5.1.2" dependencies: assertion-error: "npm:^2.0.1" check-error: "npm:^2.1.1" deep-eql: "npm:^5.0.1" loupe: "npm:^3.1.0" pathval: "npm:^2.0.0" - checksum: 10/ee67279a5613bd36dc1dc13660042429ae2f1dc5a9030a6abcf381345866dfb5bce7bc10b9d74c8de86b6f656489f654bbbef3f3361e06925591e6a00c72afff + checksum: 10/e8c2bbc83cb5a2f87130d93056d4cfbbe04106e12aa798b504816dbe3fa538a9f68541b472e56cbf0f54558b501d7e31867d74b8218abcd5a8cc8ba536fba46c languageName: node linkType: hard @@ -8706,13 +8707,13 @@ __metadata: version: 0.0.0-use.local resolution: "home-assistant-frontend@workspace:." dependencies: - "@babel/core": "npm:7.25.8" + "@babel/core": "npm:7.26.0" "@babel/helper-define-polyfill-provider": "npm:0.6.2" - "@babel/plugin-proposal-decorators": "npm:7.25.7" - "@babel/plugin-transform-runtime": "npm:7.25.7" - "@babel/preset-env": "npm:7.25.8" - "@babel/preset-typescript": "npm:7.25.7" - "@babel/runtime": "npm:7.25.7" + "@babel/plugin-proposal-decorators": "npm:7.25.9" + "@babel/plugin-transform-runtime": "npm:7.25.9" + "@babel/preset-env": "npm:7.26.0" + "@babel/preset-typescript": "npm:7.26.0" + "@babel/runtime": "npm:7.26.0" "@braintree/sanitize-url": "npm:7.1.0" "@bundle-stats/plugin-webpack-filter": "npm:4.16.0" "@codemirror/autocomplete": "npm:6.18.1" @@ -8723,14 +8724,14 @@ __metadata: "@codemirror/state": "npm:6.4.1" "@codemirror/view": "npm:6.34.1" "@egjs/hammerjs": "npm:2.0.17" - "@formatjs/intl-datetimeformat": "npm:6.15.0" - "@formatjs/intl-displaynames": "npm:6.7.0" - "@formatjs/intl-getcanonicallocales": "npm:2.4.0" - "@formatjs/intl-listformat": "npm:7.6.0" - "@formatjs/intl-locale": "npm:4.1.0" - "@formatjs/intl-numberformat": "npm:8.13.0" - "@formatjs/intl-pluralrules": "npm:5.2.17" - "@formatjs/intl-relativetimeformat": "npm:11.3.0" + "@formatjs/intl-datetimeformat": "npm:6.16.1" + "@formatjs/intl-displaynames": "npm:6.8.1" + "@formatjs/intl-getcanonicallocales": "npm:2.5.1" + "@formatjs/intl-listformat": "npm:7.7.1" + "@formatjs/intl-locale": "npm:4.2.1" + "@formatjs/intl-numberformat": "npm:8.14.1" + "@formatjs/intl-pluralrules": "npm:5.3.1" + "@formatjs/intl-relativetimeformat": "npm:11.4.1" "@fullcalendar/core": "npm:6.1.15" "@fullcalendar/daygrid": "npm:6.1.15" "@fullcalendar/interaction": "npm:6.1.15" @@ -8795,7 +8796,7 @@ __metadata: "@types/glob": "npm:8.1.0" "@types/html-minifier-terser": "npm:7.0.2" "@types/js-yaml": "npm:4.0.9" - "@types/leaflet": "npm:1.9.13" + "@types/leaflet": "npm:1.9.14" "@types/leaflet-draw": "npm:1.0.11" "@types/lodash.merge": "npm:4.6.9" "@types/luxon": "npm:3.4.2" @@ -8808,8 +8809,8 @@ __metadata: "@types/webspeechapi": "npm:0.0.29" "@typescript-eslint/eslint-plugin": "npm:7.18.0" "@typescript-eslint/parser": "npm:7.18.0" - "@vaadin/combo-box": "npm:24.5.0" - "@vaadin/vaadin-themable-mixin": "npm:24.5.0" + "@vaadin/combo-box": "npm:24.5.1" + "@vaadin/vaadin-themable-mixin": "npm:24.5.1" "@vibrant/color": "npm:3.2.1-alpha.1" "@vibrant/core": "npm:3.2.1-alpha.1" "@vibrant/quantizer-mmcq": "npm:3.2.1-alpha.1" @@ -8822,7 +8823,7 @@ __metadata: babel-loader: "npm:9.2.1" babel-plugin-template-html-minifier: "npm:4.1.0" browserslist-useragent-regexp: "npm:4.1.3" - chai: "npm:5.1.1" + chai: "npm:5.1.2" chart.js: "npm:4.4.5" color-name: "npm:2.0.0" comlink: "npm:4.4.1" @@ -8861,7 +8862,7 @@ __metadata: husky: "npm:9.1.6" idb-keyval: "npm:6.2.1" instant-mocha: "npm:1.5.3" - intl-messageformat: "npm:10.7.1" + intl-messageformat: "npm:10.7.3" js-yaml: "npm:4.1.0" jszip: "npm:3.10.1" leaflet: "npm:1.9.4" @@ -9311,15 +9312,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.7.1": - version: 10.7.1 - resolution: "intl-messageformat@npm:10.7.1" +"intl-messageformat@npm:10.7.3": + version: 10.7.3 + resolution: "intl-messageformat@npm:10.7.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/fast-memoize": "npm:2.2.1" - "@formatjs/icu-messageformat-parser": "npm:2.8.0" - tslib: "npm:^2.7.0" - checksum: 10/e8bf10555a2352043552aca9a437a5890602e000f9895cec1e0736edda89e2e711b2dfa1672f1b92907da3550b9dcfe36842e19c9a0abffaef449caf99219313 + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/fast-memoize": "npm:2.2.2" + "@formatjs/icu-messageformat-parser": "npm:2.9.1" + tslib: "npm:2" + checksum: 10/e387f7f37a295d9d386af0c6392ba135a4580e86177161f1f400d470fed1f8c7b3cb6c724cbc2f50a7ded2e20f202977d8bf5e2bbc626f72016a5b5b6752b76d languageName: node linkType: hard @@ -13668,13 +13669,6 @@ __metadata: languageName: node linkType: hard -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: 10/be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 - languageName: node - linkType: hard - "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -13792,7 +13786,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.2, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.7.0": +"tslib@npm:2, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.2, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": version: 2.8.0 resolution: "tslib@npm:2.8.0" checksum: 10/1bc7c43937477059b4d26f2dbde7e49ef0fb4f38f3014e0603eaea76d6a885742c8b1762af45949145e5e7408a736d20ded949da99dabc8ccba1fc5531d2d927