20241002.0 (#22185)

This commit is contained in:
Bram Kragten 2024-10-02 10:01:51 +02:00 committed by GitHub
commit fdf9fab709
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 478 additions and 344 deletions

View File

@ -33,7 +33,7 @@
"@codemirror/legacy-modes": "6.4.1", "@codemirror/legacy-modes": "6.4.1",
"@codemirror/search": "6.5.6", "@codemirror/search": "6.5.6",
"@codemirror/state": "6.4.1", "@codemirror/state": "6.4.1",
"@codemirror/view": "6.34.0", "@codemirror/view": "6.34.1",
"@egjs/hammerjs": "2.0.17", "@egjs/hammerjs": "2.0.17",
"@formatjs/intl-datetimeformat": "6.12.5", "@formatjs/intl-datetimeformat": "6.12.5",
"@formatjs/intl-displaynames": "6.6.8", "@formatjs/intl-displaynames": "6.6.8",
@ -89,8 +89,8 @@
"@polymer/polymer": "3.5.1", "@polymer/polymer": "3.5.1",
"@replit/codemirror-indentation-markers": "6.5.3", "@replit/codemirror-indentation-markers": "6.5.3",
"@thomasloven/round-slider": "0.6.0", "@thomasloven/round-slider": "0.6.0",
"@vaadin/combo-box": "24.4.9", "@vaadin/combo-box": "24.4.10",
"@vaadin/vaadin-themable-mixin": "24.4.9", "@vaadin/vaadin-themable-mixin": "24.4.10",
"@vibrant/color": "3.2.1-alpha.1", "@vibrant/color": "3.2.1-alpha.1",
"@vibrant/core": "3.2.1-alpha.1", "@vibrant/core": "3.2.1-alpha.1",
"@vibrant/quantizer-mmcq": "3.2.1-alpha.1", "@vibrant/quantizer-mmcq": "3.2.1-alpha.1",
@ -172,7 +172,7 @@
"@types/babel__plugin-transform-runtime": "7.9.5", "@types/babel__plugin-transform-runtime": "7.9.5",
"@types/chromecast-caf-receiver": "6.0.17", "@types/chromecast-caf-receiver": "6.0.17",
"@types/chromecast-caf-sender": "1.0.10", "@types/chromecast-caf-sender": "1.0.10",
"@types/color-name": "1.1.4", "@types/color-name": "2.0.0",
"@types/glob": "8.1.0", "@types/glob": "8.1.0",
"@types/html-minifier-terser": "7.0.2", "@types/html-minifier-terser": "7.0.2",
"@types/js-yaml": "4.0.9", "@types/js-yaml": "4.0.9",

View File

@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "home-assistant-frontend" name = "home-assistant-frontend"
version = "20240930.0" version = "20241002.0"
license = {text = "Apache-2.0"} license = {text = "Apache-2.0"}
description = "The Home Assistant frontend" description = "The Home Assistant frontend"
readme = "README.md" readme = "README.md"

View File

@ -1,6 +1,6 @@
import { mdiInvertColorsOff, mdiPalette } from "@mdi/js"; import { mdiInvertColorsOff, mdiPalette } from "@mdi/js";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property, query } from "lit/decorators";
import { styleMap } from "lit/directives/style-map"; import { styleMap } from "lit/directives/style-map";
import { computeCssColor, THEME_COLORS } from "../common/color/compute-color"; import { computeCssColor, THEME_COLORS } from "../common/color/compute-color";
import { fireEvent } from "../common/dom/fire_event"; import { fireEvent } from "../common/dom/fire_event";
@ -8,8 +8,9 @@ import { stopPropagation } from "../common/dom/stop_propagation";
import { LocalizeKeys } from "../common/translations/localize"; import { LocalizeKeys } from "../common/translations/localize";
import { HomeAssistant } from "../types"; import { HomeAssistant } from "../types";
import "./ha-list-item"; import "./ha-list-item";
import "./ha-select";
import "./ha-md-divider"; import "./ha-md-divider";
import "./ha-select";
import type { HaSelect } from "./ha-select";
@customElement("ha-color-picker") @customElement("ha-color-picker")
export class HaColorPicker extends LitElement { export class HaColorPicker extends LitElement {
@ -32,7 +33,17 @@ export class HaColorPicker extends LitElement {
@property({ type: Boolean }) public disabled = false; @property({ type: Boolean }) public disabled = false;
_valueSelected(ev) { @query("ha-select") private _select!: HaSelect;
connectedCallback(): void {
super.connectedCallback();
// Refresh layout options when the field is connected to the DOM to ensure current value displayed
this._select.layoutOptions();
}
private _valueSelected(ev) {
ev.stopPropagation();
if (!this.isConnected) return;
const value = ev.target.value; const value = ev.target.value;
this.value = value === this.defaultColor ? undefined : value; this.value = value === this.defaultColor ? undefined : value;
fireEvent(this, "value-changed", { fireEvent(this, "value-changed", {
@ -41,7 +52,13 @@ export class HaColorPicker extends LitElement {
} }
render() { render() {
const value = this.value || this.defaultColor; const value = this.value || this.defaultColor || "";
const isCustom = !(
THEME_COLORS.has(value) ||
value === "none" ||
value === "state"
);
return html` return html`
<ha-select <ha-select
@ -110,6 +127,14 @@ export class HaColorPicker extends LitElement {
</ha-list-item> </ha-list-item>
` `
)} )}
${isCustom
? html`
<ha-list-item .value=${value} graphic="icon">
${value}
<span slot="graphic">${this.renderColorCircle(value)}</span>
</ha-list-item>
`
: nothing}
</ha-select> </ha-select>
`; `;
} }

View File

@ -332,3 +332,6 @@ export const getDisplayUnit = (
export const isExternalStatistic = (statisticsId: string): boolean => export const isExternalStatistic = (statisticsId: string): boolean =>
statisticsId.includes(":"); statisticsId.includes(":");
export const updateStatisticsIssues = (hass: HomeAssistant) =>
hass.callWS({ type: "recorder/update_statistics_issues" });

View File

@ -72,8 +72,8 @@ export const timerTimeRemaining = (
if (stateObj.state === "active") { if (stateObj.state === "active") {
const now = new Date().getTime(); const now = new Date().getTime();
const madeActive = new Date(stateObj.last_changed).getTime(); const finishes = new Date(stateObj.attributes.finishes_at).getTime();
timeRemaining = Math.max(timeRemaining - (now - madeActive) / 1000, 0); timeRemaining = Math.max((finishes - now) / 1000, 0);
} }
return timeRemaining; return timeRemaining;

View File

@ -2,7 +2,7 @@ import { css, html, LitElement, nothing, PropertyValues } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import "../../components/ha-circular-progress"; import "../../components/ha-circular-progress";
import { UNAVAILABLE } from "../../data/entity"; import { OFF, ON, UNAVAILABLE } from "../../data/entity";
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
import { AssistantSetupStyles } from "./styles"; import { AssistantSetupStyles } from "./styles";
@ -14,6 +14,8 @@ export class HaVoiceAssistantSetupStepUpdate extends LitElement {
private _updated = false; private _updated = false;
private _refreshTimeout?: number;
protected override willUpdate(changedProperties: PropertyValues): void { protected override willUpdate(changedProperties: PropertyValues): void {
super.willUpdate(changedProperties); super.willUpdate(changedProperties);
@ -28,17 +30,18 @@ export class HaVoiceAssistantSetupStepUpdate extends LitElement {
const oldState = oldHass.states[this.updateEntityId]; const oldState = oldHass.states[this.updateEntityId];
const newState = this.hass.states[this.updateEntityId]; const newState = this.hass.states[this.updateEntityId];
if ( if (
oldState?.state === UNAVAILABLE && (oldState?.state === UNAVAILABLE &&
newState?.state !== UNAVAILABLE newState?.state !== UNAVAILABLE) ||
(oldState?.state === OFF && newState?.state === ON)
) { ) {
// Device is rebooted, let's move on // Device is rebooted, let's move on
this._tryUpdate(); this._tryUpdate(false);
} }
} }
} }
if (changedProperties.has("updateEntityId")) { if (changedProperties.has("updateEntityId")) {
this._tryUpdate(); this._tryUpdate(true);
} }
} }
@ -54,7 +57,11 @@ export class HaVoiceAssistantSetupStepUpdate extends LitElement {
return html`<div class="content"> return html`<div class="content">
<img src="/static/icons/casita/loading.png" /> <img src="/static/icons/casita/loading.png" />
<h1>Updating your voice assistant</h1> <h1>
${stateObj.state === OFF
? "Checking for updates"
: "Updating your voice assistant"}
</h1>
<p class="secondary"> <p class="secondary">
We are making sure you have the latest and greatest version of your We are making sure you have the latest and greatest version of your
voice assistant. This may take a few minutes. voice assistant. This may take a few minutes.
@ -75,7 +82,8 @@ export class HaVoiceAssistantSetupStepUpdate extends LitElement {
</div>`; </div>`;
} }
private async _tryUpdate() { private async _tryUpdate(refreshUpdate: boolean) {
clearTimeout(this._refreshTimeout);
if (!this.updateEntityId) { if (!this.updateEntityId) {
return; return;
} }
@ -91,6 +99,16 @@ export class HaVoiceAssistantSetupStepUpdate extends LitElement {
{}, {},
{ entity_id: updateEntity.entity_id } { entity_id: updateEntity.entity_id }
); );
} else if (refreshUpdate) {
await this.hass.callService(
"homeassistant",
"update_entity",
{},
{ entity_id: this.updateEntityId }
);
this._refreshTimeout = window.setTimeout(() => {
this._nextStep();
}, 5000);
} else { } else {
this._nextStep(); this._nextStep();
} }

View File

@ -35,6 +35,7 @@ import "../../../components/ha-button-menu";
import "../../../components/ha-icon-button"; import "../../../components/ha-icon-button";
import "../../../components/ha-icon-next"; import "../../../components/ha-icon-next";
import "../../../components/ha-svg-icon"; import "../../../components/ha-svg-icon";
import "../../../components/ha-expansion-panel";
import { getSignedPath } from "../../../data/auth"; import { getSignedPath } from "../../../data/auth";
import { import {
ConfigEntry, ConfigEntry,
@ -1354,16 +1355,14 @@ export class HaConfigDevicePage extends LitElement {
.filter((entity) => entity.newId) .filter((entity) => entity.newId)
.map( .map(
(entity) => (entity) =>
html`<li style="white-space: nowrap;"> html`<tr>
${entity.oldId} -> ${entity.newId} <td>${entity.oldId}</td>
</li>` <td>${entity.newId}</td>
</tr>`
); );
const dialogNoRenames = entityIdRenames const dialogNoRenames = entityIdRenames
.filter((entity) => !entity.newId) .filter((entity) => !entity.newId)
.map( .map((entity) => html`<li>${entity.oldId}</li>`);
(entity) =>
html`<li style="white-space: nowrap;">${entity.oldId}</li>`
);
if (dialogRenames.length) { if (dialogRenames.length) {
renameEntityid = await showConfirmationDialog(this, { renameEntityid = await showConfirmationDialog(this, {
@ -1372,17 +1371,46 @@ export class HaConfigDevicePage extends LitElement {
), ),
text: html`${this.hass.localize( text: html`${this.hass.localize(
"ui.panel.config.devices.confirm_rename_entity_ids_warning" "ui.panel.config.devices.confirm_rename_entity_ids_warning"
)} <br /><br />${this.hass.localize( )} <br /><br />
"ui.panel.config.devices.confirm_rename_entity_will_rename" <ha-expansion-panel outlined>
)}: <span slot="header"
${dialogRenames} >${this.hass.localize(
"ui.panel.config.devices.confirm_rename_entity_will_rename",
{ count: dialogRenames.length }
)}</span
>
<div style="overflow: auto;">
<table style="width: 100%; text-align: var(--float-start);">
<tr>
<th>
${this.hass.localize(
"ui.panel.config.devices.confirm_rename_old"
)}
</th>
<th>
${this.hass.localize(
"ui.panel.config.devices.confirm_rename_new"
)}
</th>
</tr>
${dialogRenames}
</table>
</div>
</ha-expansion-panel>
${dialogNoRenames.length ${dialogNoRenames.length
? html`<br /><br />${this.hass.localize( ? html`<ha-expansion-panel outlined>
"ui.panel.config.devices.confirm_rename_entity_wont_rename", <span slot="header"
{ deviceSlug: oldDeviceSlug } >${this.hass.localize(
)}: "ui.panel.config.devices.confirm_rename_entity_wont_rename",
${dialogNoRenames}` {
: nothing}`, count: dialogNoRenames.length,
deviceSlug: oldDeviceSlug,
}
)}</span
>
${dialogNoRenames}</ha-expansion-panel
>`
: nothing} `,
confirmText: this.hass.localize("ui.common.rename"), confirmText: this.hass.localize("ui.common.rename"),
dismissText: this.hass.localize("ui.common.no"), dismissText: this.hass.localize("ui.common.no"),
warning: true, warning: true,
@ -1392,11 +1420,15 @@ export class HaConfigDevicePage extends LitElement {
title: this.hass.localize( title: this.hass.localize(
"ui.panel.config.devices.confirm_rename_entity_no_renamable_entity_ids" "ui.panel.config.devices.confirm_rename_entity_no_renamable_entity_ids"
), ),
text: html`${this.hass.localize( text: html`<ha-expansion-panel outlined>
"ui.panel.config.devices.confirm_rename_entity_wont_rename", <span slot="header"
{ deviceSlug: oldDeviceSlug } >${this.hass.localize(
)}: "ui.panel.config.devices.confirm_rename_entity_wont_rename",
${dialogNoRenames}`, { deviceSlug: oldDeviceSlug, count: dialogNoRenames.length }
)}</span
>
${dialogNoRenames}
</ha-expansion-panel>`,
}); });
} }
} }

View File

@ -18,6 +18,7 @@ import { showRepairsIssueDialog } from "./show-repair-issue-dialog";
import { import {
STATISTIC_TYPES, STATISTIC_TYPES,
StatisticsValidationResult, StatisticsValidationResult,
updateStatisticsIssues,
} from "../../../data/recorder"; } from "../../../data/recorder";
@customElement("ha-config-repairs") @customElement("ha-config-repairs")
@ -144,25 +145,19 @@ class HaConfigRepairs extends LitElement {
issue.translation_key && issue.translation_key &&
STATISTIC_TYPES.includes(issue.translation_key as any) STATISTIC_TYPES.includes(issue.translation_key as any)
) { ) {
const localize = this.hass.loadFragmentTranslation("developer-tools");
await this.hass.loadFragmentTranslation("developer-tools");
const data = await fetchRepairsIssueData( const data = await fetchRepairsIssueData(
this.hass.connection, this.hass.connection,
issue.domain, issue.domain,
issue.issue_id issue.issue_id
); );
if ("issue_type" in data.issue_data) { if ("issue_type" in data.issue_data) {
await fixStatisticsIssue( await fixStatisticsIssue(this, {
this, type: data.issue_data
this.hass, .issue_type as StatisticsValidationResult["type"],
localize || this.hass.localize, data: data.issue_data as any,
{ });
type: data.issue_data updateStatisticsIssues(this.hass);
.issue_type as StatisticsValidationResult["type"],
data: data.issue_data as any,
}
);
this.hass.callWS({ type: "recorder/update_statistics_issues" });
} }
} else { } else {
showRepairsIssueDialog(this, { showRepairsIssueDialog(this, {

View File

@ -50,8 +50,6 @@ class HaPanelDevStatistics extends SubscribeMixin(LitElement) {
private _disabledEntities = new Set<string>(); private _disabledEntities = new Set<string>();
private _deletedStatistics = new Set<string>();
protected firstUpdated() { protected firstUpdated() {
this._validateStatistics(); this._validateStatistics();
} }
@ -225,9 +223,7 @@ class HaPanelDevStatistics extends SubscribeMixin(LitElement) {
this._data = statisticIds this._data = statisticIds
.filter( .filter(
(statistic) => (statistic) => !this._disabledEntities.has(statistic.statistic_id)
!this._disabledEntities.has(statistic.statistic_id) &&
!this._deletedStatistics.has(statistic.statistic_id)
) )
.map((statistic) => { .map((statistic) => {
statsIds.add(statistic.statistic_id); statsIds.add(statistic.statistic_id);
@ -241,8 +237,7 @@ class HaPanelDevStatistics extends SubscribeMixin(LitElement) {
Object.keys(issues).forEach((statisticId) => { Object.keys(issues).forEach((statisticId) => {
if ( if (
!statsIds.has(statisticId) && !statsIds.has(statisticId) &&
!this._disabledEntities.has(statisticId) && !this._disabledEntities.has(statisticId)
!this._deletedStatistics.has(statisticId)
) { ) {
this._data.push({ this._data.push({
statistic_id: statisticId, statistic_id: statisticId,
@ -265,20 +260,7 @@ class HaPanelDevStatistics extends SubscribeMixin(LitElement) {
(FIX_ISSUES_ORDER[itemB.type] ?? 99) (FIX_ISSUES_ORDER[itemB.type] ?? 99)
); );
const issue = issues[0]; const issue = issues[0];
const result = await fixStatisticsIssue( await fixStatisticsIssue(this, issue);
this,
this.hass,
this.hass.localize,
issue
);
if (
result &&
["no_state", "entity_no_longer_recorded", "state_class_removed"].includes(
issue.type
)
) {
this._deletedStatistics.add(issue.data.statistic_id);
}
this._validateStatistics(); this._validateStatistics();
}; };

View File

@ -0,0 +1,201 @@
import "@material/mwc-button/mwc-button";
import { CSSResultGroup, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators";
import "../../../components/ha-circular-progress";
import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-dialog";
import { clearStatistics, getStatisticLabel } from "../../../data/recorder";
import { haStyle, haStyleDialog } from "../../../resources/styles";
import { HomeAssistant } from "../../../types";
import { documentationUrl } from "../../../util/documentation-url";
import type { DialogStatisticsFixParams } from "./show-dialog-statistics-fix";
import { showAlertDialog } from "../../lovelace/custom-card-helpers";
@customElement("dialog-statistics-fix")
export class DialogStatisticsFix extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@state() private _params?: DialogStatisticsFixParams;
@state() private _clearing = false;
public showDialog(params: DialogStatisticsFixParams): void {
this._params = params;
}
public closeDialog(): void {
this._cancel();
}
private _closeDialog(): void {
this._params = undefined;
this._clearing = false;
fireEvent(this, "dialog-closed", { dialog: this.localName });
}
protected render() {
if (!this._params) {
return nothing;
}
const issue = this._params.issue;
return html`
<ha-dialog
open
scrimClickAction
escapeKeyAction
@closed=${this._closeDialog}
.heading=${this.hass.localize(
`ui.panel.developer-tools.tabs.statistics.fix_issue.${issue.type}.title`
)}
>
<p>
${this.hass.localize(
`ui.panel.developer-tools.tabs.statistics.fix_issue.${issue.type}.info_text_1`,
{
name: getStatisticLabel(
this.hass,
this._params.issue.data.statistic_id,
undefined
),
statistic_id: this._params.issue.data.statistic_id,
}
)}<br /><br />
${this.hass.localize(
`ui.panel.developer-tools.tabs.statistics.fix_issue.${issue.type}.info_text_2`,
{ statistic_id: issue.data.statistic_id }
)}
${issue.type === "entity_not_recorded"
? html`<br /><br />
<a
href=${documentationUrl(
this.hass,
"/integrations/recorder/#configure-filter"
)}
target="_blank"
rel="noreferrer noopener"
>
${this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_not_recorded.info_text_3_link"
)}</a
>`
: issue.type === "entity_no_longer_recorded"
? html`<a
href=${documentationUrl(
this.hass,
"/integrations/recorder/#configure-filter"
)}
target="_blank"
rel="noreferrer noopener"
>
${this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_no_longer_recorded.info_text_3_link"
)}</a
><br /><br />
${this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_no_longer_recorded.info_text_4"
)}`
: issue.type === "state_class_removed"
? html`<ul>
<li>
${this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_3"
)}
</li>
<li>
${this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_4"
)}
<a
href="https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics"
target="_blank"
rel="noreferrer noopener"
>
${this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_4_link"
)}</a
>
</li>
<li>
${this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_5"
)}
</li>
</ul>
${this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_6",
{ statistic_id: issue.data.statistic_id }
)}`
: nothing}
</p>
${issue.type !== "entity_not_recorded"
? html`<mwc-button
slot="primaryAction"
@click=${this._clearStatistics}
class="warning"
.disabled=${this._clearing}
>
${this._clearing
? html`<ha-circular-progress
indeterminate
size="small"
aria-label="Saving"
></ha-circular-progress>`
: nothing}
${this.hass.localize("ui.common.delete")}
</mwc-button>
<mwc-button slot="secondaryAction" @click=${this._cancel}>
${this.hass.localize("ui.common.close")}
</mwc-button>`
: html`<mwc-button slot="primaryAction" @click=${this._cancel}>
${this.hass.localize("ui.common.ok")}
</mwc-button>`}
</ha-dialog>
`;
}
private _cancel(): void {
this._params?.cancelCallback!();
this._closeDialog();
}
private async _clearStatistics(): Promise<void> {
this._clearing = true;
try {
await clearStatistics(this.hass, [this._params!.issue.data.statistic_id]);
} catch (err: any) {
await showAlertDialog(this, {
title:
err.code === "timeout"
? this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.clearing_timeout_title"
)
: this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.clearing_failed"
),
text:
err.code === "timeout"
? this.hass.localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.clearing_timeout_text"
)
: err.message,
});
} finally {
this._clearing = false;
this._params?.fixedCallback!();
this._closeDialog();
}
}
static get styles(): CSSResultGroup {
return [haStyle, haStyleDialog];
}
}
declare global {
interface HTMLElementTagNameMap {
"dialog-statistics-fix": DialogStatisticsFix;
}
}

View File

@ -1,171 +1,17 @@
import { html } from "lit"; import { StatisticsValidationResult } from "../../../data/recorder";
import { import { showFixStatisticsDialog } from "./show-dialog-statistics-fix";
clearStatistics,
getStatisticLabel,
StatisticsValidationResult,
} from "../../../data/recorder";
import { documentationUrl } from "../../../util/documentation-url";
import {
showConfirmationDialog,
showAlertDialog,
} from "../../lovelace/custom-card-helpers";
import { showFixStatisticsUnitsChangedDialog } from "./show-dialog-statistics-fix-units-changed"; import { showFixStatisticsUnitsChangedDialog } from "./show-dialog-statistics-fix-units-changed";
import { LocalizeFunc } from "../../../common/translations/localize";
import { HomeAssistant } from "../../../types";
export const fixStatisticsIssue = async ( export const fixStatisticsIssue = async (
element: HTMLElement, element: HTMLElement,
hass: HomeAssistant,
localize: LocalizeFunc,
issue: StatisticsValidationResult issue: StatisticsValidationResult
) => { ) => {
switch (issue.type) { if (issue.type === "units_changed") {
case "no_state": return showFixStatisticsUnitsChangedDialog(element, {
return showConfirmationDialog(element, { issue,
title: localize( });
"ui.panel.developer-tools.tabs.statistics.fix_issue.no_state.title"
),
text: html`${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.no_state.info_text_1",
{
name: getStatisticLabel(hass, issue.data.statistic_id, undefined),
statistic_id: issue.data.statistic_id,
}
)}<br /><br />${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.no_state.info_text_2",
{ statistic_id: issue.data.statistic_id }
)}`,
confirmText: localize("ui.common.delete"),
destructive: true,
confirm: async () => {
await clearStatistics(hass, [issue.data.statistic_id]);
},
});
case "entity_not_recorded":
return showAlertDialog(element, {
title: localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_not_recorded.title"
),
text: html`${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_not_recorded.info_text_1",
{
name: getStatisticLabel(hass, issue.data.statistic_id, undefined),
}
)}<br /><br />${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_not_recorded.info_text_2"
)}<br /><br />
<a
href=${documentationUrl(
hass,
"/integrations/recorder/#configure-filter"
)}
target="_blank"
rel="noreferrer noopener"
>
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_not_recorded.info_text_3_link"
)}</a
>`,
});
case "entity_no_longer_recorded":
return showConfirmationDialog(element, {
title: localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_no_longer_recorded.title"
),
text: html`${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_no_longer_recorded.info_text_1",
{
name: getStatisticLabel(hass, issue.data.statistic_id, undefined),
statistic_id: issue.data.statistic_id,
}
)}
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_no_longer_recorded.info_text_2"
)}
<a
href=${documentationUrl(
hass,
"/integrations/recorder/#configure-filter"
)}
target="_blank"
rel="noreferrer noopener"
>
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_no_longer_recorded.info_text_3_link"
)}</a
><br /><br />
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.entity_no_longer_recorded.info_text_4"
)}`,
confirmText: localize("ui.common.delete"),
destructive: true,
confirm: async () => {
await clearStatistics(hass, [issue.data.statistic_id]);
},
});
case "state_class_removed":
return showConfirmationDialog(element, {
title: localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.title"
),
text: html`${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_1",
{
name: getStatisticLabel(hass, issue.data.statistic_id, undefined),
statistic_id: issue.data.statistic_id,
}
)}<br /><br />
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_2"
)}
<ul>
<li>
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_3"
)}
</li>
<li>
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_4"
)}
<a
href="https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics"
target="_blank"
rel="noreferrer noopener"
>
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_4_link"
)}</a
>
</li>
<li>
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_5"
)}
</li>
</ul>
${localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.state_class_removed.info_text_6",
{ statistic_id: issue.data.statistic_id }
)}`,
confirmText: localize("ui.common.delete"),
destructive: true,
confirm: async () => {
await clearStatistics(hass, [issue.data.statistic_id]);
},
});
case "units_changed":
return showFixStatisticsUnitsChangedDialog(element, {
issue,
});
default:
return showAlertDialog(element, {
title: localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.no_support.title"
),
text: localize(
"ui.panel.developer-tools.tabs.statistics.fix_issue.no_support.info_text_1"
),
});
} }
return showFixStatisticsDialog(element, {
issue,
});
}; };

View File

@ -0,0 +1,33 @@
import { fireEvent } from "../../../common/dom/fire_event";
import { StatisticsValidationResult } from "../../../data/recorder";
export const loadFixDialog = () => import("./dialog-statistics-fix");
export interface DialogStatisticsFixParams {
issue: StatisticsValidationResult;
fixedCallback?: () => void;
cancelCallback?: () => void;
}
export const showFixStatisticsDialog = (
element: HTMLElement,
detailParams: DialogStatisticsFixParams
) =>
new Promise((resolve) => {
const origCallback = detailParams.fixedCallback;
fireEvent(element, "show-dialog", {
dialogTag: "dialog-statistics-fix",
dialogImport: loadFixDialog,
dialogParams: {
...detailParams,
cancelCallback: () => {
resolve(false);
},
fixedCallback: () => {
resolve(true);
origCallback?.();
},
},
});
});

View File

@ -70,7 +70,7 @@ export class HuiHeadingCardEditor
name: "heading_style", name: "heading_style",
selector: { selector: {
select: { select: {
mode: "dropdown", mode: "list",
options: ["title", "subtitle"].map((value) => ({ options: ["title", "subtitle"].map((value) => ({
label: localize( label: localize(
`ui.panel.lovelace.editor.card.heading.heading_style_options.${value}` `ui.panel.lovelace.editor.card.heading.heading_style_options.${value}`

View File

@ -220,7 +220,7 @@ export class HuiHeadingEntityEditor
return; return;
} }
const config = ev.detail.value as FormData; const config = { ...ev.detail.value } as FormData;
if (config.displayed_elements) { if (config.displayed_elements) {
config.show_state = config.displayed_elements.includes("state"); config.show_state = config.displayed_elements.includes("state");

View File

@ -317,6 +317,7 @@ export abstract class HuiElementEditor<
private _handleUIConfigChanged(ev: UIConfigChangedEvent<T>) { private _handleUIConfigChanged(ev: UIConfigChangedEvent<T>) {
ev.stopPropagation(); ev.stopPropagation();
if (!this.GUImode) return;
const config = ev.detail.config; const config = ev.detail.config;
Object.keys(config).forEach((key) => { Object.keys(config).forEach((key) => {
if (config[key] === undefined) { if (config[key] === undefined) {

View File

@ -15,7 +15,6 @@ import { fireEvent } from "../../../../common/dom/fire_event";
import { stopPropagation } from "../../../../common/dom/stop_propagation"; import { stopPropagation } from "../../../../common/dom/stop_propagation";
import "../../../../components/ha-button"; import "../../../../components/ha-button";
import "../../../../components/ha-button-menu"; import "../../../../components/ha-button-menu";
import "../../../../components/ha-circular-progress";
import "../../../../components/ha-dialog"; import "../../../../components/ha-dialog";
import "../../../../components/ha-dialog-header"; import "../../../../components/ha-dialog-header";
import "../../../../components/ha-icon-button"; import "../../../../components/ha-icon-button";

View File

@ -507,12 +507,6 @@ export class HuiDialogEditView extends LitElement {
margin-inline-end: auto; margin-inline-end: auto;
margin-inline-start: initial; margin-inline-start: initial;
} }
ha-circular-progress {
display: none;
}
ha-circular-progress[indeterminate] {
display: block;
}
.selected_menu_item { .selected_menu_item {
color: var(--primary-color); color: var(--primary-color);
} }

View File

@ -4089,8 +4089,10 @@
}, },
"confirm_rename_entity_ids": "Do you also want to rename the entity IDs of your entities?", "confirm_rename_entity_ids": "Do you also want to rename the entity IDs of your entities?",
"confirm_rename_entity_ids_warning": "This will not change any configuration (like automations, scripts, scenes, dashboards) that is currently using these entities! You will have to update them yourself to use the new entity IDs!", "confirm_rename_entity_ids_warning": "This will not change any configuration (like automations, scripts, scenes, dashboards) that is currently using these entities! You will have to update them yourself to use the new entity IDs!",
"confirm_rename_entity_will_rename": "The following entity IDs will be renamed", "confirm_rename_entity_will_rename": "{count} {count, plural,\n one {entity ID}\n other {entity IDs}\n} will be renamed",
"confirm_rename_entity_wont_rename": "The following entity IDs will not be renamed as they do not contain the current device name ({deviceSlug})", "confirm_rename_new": "New",
"confirm_rename_old": "Old",
"confirm_rename_entity_wont_rename": "{count} {count, plural,\n one {entity ID}\n other {entity IDs}\n} will not be renamed as they do not contain the current device name ({deviceSlug})",
"confirm_rename_entity_no_renamable_entity_ids": "No renamable entity IDs", "confirm_rename_entity_no_renamable_entity_ids": "No renamable entity IDs",
"confirm_disable_config_entry": "There are no more devices for the config entry {entry_name}, do you want to instead disable the config entry?", "confirm_disable_config_entry": "There are no more devices for the config entry {entry_name}, do you want to instead disable the config entry?",
"update_device_error": "Updating the device failed", "update_device_error": "Updating the device failed",
@ -6966,6 +6968,9 @@
}, },
"fix_issue": { "fix_issue": {
"fix": "Fix issue", "fix": "Fix issue",
"clearing_failed": "Clearing the statistics failed",
"clearing_timeout_title": "Clearing not done yet",
"clearing_timeout_text": "The clearing of the statistics took longer than expected, it might take longer for the issue to disappear.",
"no_support": { "no_support": {
"title": "Fix issue", "title": "Fix issue",
"info_text_1": "Fixing this issue is not supported yet." "info_text_1": "Fixing this issue is not supported yet."

View File

@ -42,8 +42,8 @@ describe("timerTimeRemaining", () => {
state: "active", state: "active",
attributes: { attributes: {
remaining: "0:01:05", remaining: "0:01:05",
finishes_at: "2018-01-17T16:16:17+00:00",
}, },
last_changed: "2018-01-17T16:15:12Z",
} as any), } as any),
47 47
); );

190
yarn.lock
View File

@ -1511,14 +1511,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@codemirror/view@npm:6.34.0, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0": "@codemirror/view@npm:6.34.1, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0":
version: 6.34.0 version: 6.34.1
resolution: "@codemirror/view@npm:6.34.0" resolution: "@codemirror/view@npm:6.34.1"
dependencies: dependencies:
"@codemirror/state": "npm:^6.4.0" "@codemirror/state": "npm:^6.4.0"
style-mod: "npm:^4.1.0" style-mod: "npm:^4.1.0"
w3c-keyname: "npm:^2.2.4" w3c-keyname: "npm:^2.2.4"
checksum: 10/df790659d229b2bd5867d8d424c7d911bf4800e893cf71cf1caf03797a70a1af561a05ce81a03f2e326320eb0a16db078a5ba4af2f89d790b578de94ea83f6ea checksum: 10/012f195d7c9da2f9693b2192e0e52c7d3f94d9c887c46e218ddb36ee1a050978ee6a13c7d0207dd3fb970b4454198962112b9afe17e1f23d2b89a274b7d186a0
languageName: node languageName: node
linkType: hard linkType: hard
@ -4041,10 +4041,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/color-name@npm:1.1.4": "@types/color-name@npm:2.0.0":
version: 1.1.4 version: 2.0.0
resolution: "@types/color-name@npm:1.1.4" resolution: "@types/color-name@npm:2.0.0"
checksum: 10/be275af06d32e6f09c8f1b8c15d35d2b8194736af980569b2fa572720339a19b3d5ccb63ce5950105d859d5c6226c98b8d8ecd613d626e757667037a90b9b47f checksum: 10/341d46645757c859ff1b6533d07f9c04e674e90ed44e63d38dcda20fd6dcf96289cb2c45f0137102bd8761dc691d239d107e18d4377df2784139c01bab36fc9f
languageName: node languageName: node
linkType: hard linkType: hard
@ -4669,129 +4669,129 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/a11y-base@npm:~24.4.9": "@vaadin/a11y-base@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/a11y-base@npm:24.4.9" resolution: "@vaadin/a11y-base@npm:24.4.10"
dependencies: dependencies:
"@open-wc/dedupe-mixin": "npm:^1.3.0" "@open-wc/dedupe-mixin": "npm:^1.3.0"
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/component-base": "npm:~24.4.9" "@vaadin/component-base": "npm:~24.4.10"
lit: "npm:^3.0.0" lit: "npm:^3.0.0"
checksum: 10/65406dd93126bd45720313b398e58d77369dbfe4c695a8ba7a23b6d5fc4ecfaf74718827b5c8cb38ef44b5f530afe99a7d4e3712cbab86f133fe59d52fa6d427 checksum: 10/858b58837bc5d8762ab86906384c1fcf1f1cb65ab593b9b3962d0e6fd5cce956952a28d80d66dc2e1eddd68b36fbd04a65c0509f786f7fcea7352ecd1e8ff0a9
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/combo-box@npm:24.4.9": "@vaadin/combo-box@npm:24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/combo-box@npm:24.4.9" resolution: "@vaadin/combo-box@npm:24.4.10"
dependencies: dependencies:
"@open-wc/dedupe-mixin": "npm:^1.3.0" "@open-wc/dedupe-mixin": "npm:^1.3.0"
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/a11y-base": "npm:~24.4.9" "@vaadin/a11y-base": "npm:~24.4.10"
"@vaadin/component-base": "npm:~24.4.9" "@vaadin/component-base": "npm:~24.4.10"
"@vaadin/field-base": "npm:~24.4.9" "@vaadin/field-base": "npm:~24.4.10"
"@vaadin/input-container": "npm:~24.4.9" "@vaadin/input-container": "npm:~24.4.10"
"@vaadin/item": "npm:~24.4.9" "@vaadin/item": "npm:~24.4.10"
"@vaadin/lit-renderer": "npm:~24.4.9" "@vaadin/lit-renderer": "npm:~24.4.10"
"@vaadin/overlay": "npm:~24.4.9" "@vaadin/overlay": "npm:~24.4.10"
"@vaadin/vaadin-lumo-styles": "npm:~24.4.9" "@vaadin/vaadin-lumo-styles": "npm:~24.4.10"
"@vaadin/vaadin-material-styles": "npm:~24.4.9" "@vaadin/vaadin-material-styles": "npm:~24.4.10"
"@vaadin/vaadin-themable-mixin": "npm:~24.4.9" "@vaadin/vaadin-themable-mixin": "npm:~24.4.10"
checksum: 10/5dbdd0b8ff1ba0fdf6f6ec476027ffe204380f2ba1ce011206418df0e26e78ec59787e7a5ff7290b9d3c0c509423ed0ea5dcf8ac56200c719d6dafaf24bc2b91 checksum: 10/327930d76cfc90d17d0966769f864e4918bd5e98ce5ba2bbe79dce1355faf803682ba0b3ec454a4060750037860362e0eb8d4f7ef80ed2c79b565d17f6c422cf
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/component-base@npm:~24.4.9": "@vaadin/component-base@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/component-base@npm:24.4.9" resolution: "@vaadin/component-base@npm:24.4.10"
dependencies: dependencies:
"@open-wc/dedupe-mixin": "npm:^1.3.0" "@open-wc/dedupe-mixin": "npm:^1.3.0"
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/vaadin-development-mode-detector": "npm:^2.0.0" "@vaadin/vaadin-development-mode-detector": "npm:^2.0.0"
"@vaadin/vaadin-usage-statistics": "npm:^2.1.0" "@vaadin/vaadin-usage-statistics": "npm:^2.1.0"
lit: "npm:^3.0.0" lit: "npm:^3.0.0"
checksum: 10/7ed428617ea8dc7a4dfc8a5f700f584727ae0f850928226fe8da93908a3b799e705fc972d13fde99ec200b081ac5f3d88f3d17547f1f4b289eafdc49c1128388 checksum: 10/1cdba96a018accf9070b21560041b50288c081afd39ef3aeb841c7071f3ff5dfe1133d9dc86ba2ab68c4874db765caae50e47b405dd5a0d01d22110018133d01
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/field-base@npm:~24.4.9": "@vaadin/field-base@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/field-base@npm:24.4.9" resolution: "@vaadin/field-base@npm:24.4.10"
dependencies: dependencies:
"@open-wc/dedupe-mixin": "npm:^1.3.0" "@open-wc/dedupe-mixin": "npm:^1.3.0"
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/a11y-base": "npm:~24.4.9" "@vaadin/a11y-base": "npm:~24.4.10"
"@vaadin/component-base": "npm:~24.4.9" "@vaadin/component-base": "npm:~24.4.10"
lit: "npm:^3.0.0" lit: "npm:^3.0.0"
checksum: 10/9a7955948a6270f89c5e0c5a9f3e35c7d02fa1490855460a6509bcaca1dc8d7aabe48b5f6d459f6f25202082ec277528aa3a1d3e0d0864528a6393b3c75a692d checksum: 10/4b7f8c96810716a7e8338ca1c3d15ee3081bb4cd859bba44c1ac10d68ce2b3263878e8e4e135b71f5a51bbee30e8ff690c23bd740594553832248534f5e90ec8
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/icon@npm:~24.4.9": "@vaadin/icon@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/icon@npm:24.4.9" resolution: "@vaadin/icon@npm:24.4.10"
dependencies: dependencies:
"@open-wc/dedupe-mixin": "npm:^1.3.0" "@open-wc/dedupe-mixin": "npm:^1.3.0"
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/component-base": "npm:~24.4.9" "@vaadin/component-base": "npm:~24.4.10"
"@vaadin/vaadin-lumo-styles": "npm:~24.4.9" "@vaadin/vaadin-lumo-styles": "npm:~24.4.10"
"@vaadin/vaadin-themable-mixin": "npm:~24.4.9" "@vaadin/vaadin-themable-mixin": "npm:~24.4.10"
lit: "npm:^3.0.0" lit: "npm:^3.0.0"
checksum: 10/d59c2d3f1abd97f36be9472d8f4eebc42e4ac520c8ac9054e53bb7e29c9d937a7ef13420ef13c6d3e93a1376b6b14c75e56b44ce76c6ee61e216d79c28906640 checksum: 10/8fd33f6a9cde75cd93c8a76c2c4dcf3db83ffb0f77b814eac0e2991202495f87c015068ba58c4133d7e212926b3948ef940d828c75b2b5448a2376fbdbe30267
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/input-container@npm:~24.4.9": "@vaadin/input-container@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/input-container@npm:24.4.9" resolution: "@vaadin/input-container@npm:24.4.10"
dependencies: dependencies:
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/component-base": "npm:~24.4.9" "@vaadin/component-base": "npm:~24.4.10"
"@vaadin/vaadin-lumo-styles": "npm:~24.4.9" "@vaadin/vaadin-lumo-styles": "npm:~24.4.10"
"@vaadin/vaadin-material-styles": "npm:~24.4.9" "@vaadin/vaadin-material-styles": "npm:~24.4.10"
"@vaadin/vaadin-themable-mixin": "npm:~24.4.9" "@vaadin/vaadin-themable-mixin": "npm:~24.4.10"
lit: "npm:^3.0.0" lit: "npm:^3.0.0"
checksum: 10/ec30c4bf821f865c8faec035496c5af6d69a6a84387e897e990ac8e73bae2e1697b303737a5c14727d6b5e9d736e1b01b4174d2ab85a07490f5ac4d94dbc574c checksum: 10/a16b2dd4ac0dace3a575718fc097e0082142286bd75730283f70144fcb5bf7b1c49a04266c066f359e6910fbd2b93b9e1d44f4dd87f1c9eddc45bea9bc72e023
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/item@npm:~24.4.9": "@vaadin/item@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/item@npm:24.4.9" resolution: "@vaadin/item@npm:24.4.10"
dependencies: dependencies:
"@open-wc/dedupe-mixin": "npm:^1.3.0" "@open-wc/dedupe-mixin": "npm:^1.3.0"
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/a11y-base": "npm:~24.4.9" "@vaadin/a11y-base": "npm:~24.4.10"
"@vaadin/component-base": "npm:~24.4.9" "@vaadin/component-base": "npm:~24.4.10"
"@vaadin/vaadin-lumo-styles": "npm:~24.4.9" "@vaadin/vaadin-lumo-styles": "npm:~24.4.10"
"@vaadin/vaadin-material-styles": "npm:~24.4.9" "@vaadin/vaadin-material-styles": "npm:~24.4.10"
"@vaadin/vaadin-themable-mixin": "npm:~24.4.9" "@vaadin/vaadin-themable-mixin": "npm:~24.4.10"
checksum: 10/932760421383a479e98c6c572a567a9221517dcf4d9a24f98c25d0a4fbe2db82b6ae7da043ff7454122c7b31990f29d2015442e9d9a5cd3f24a6519dbf985b14 checksum: 10/f7e344d11b351c28fe13a342e383d3a0c28295387effd94ac08b0605d48ed636e2798918a2b3619f9ebbab3be59a3981c72c6503d2f8e7d80ef30769f941a6ef
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/lit-renderer@npm:~24.4.9": "@vaadin/lit-renderer@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/lit-renderer@npm:24.4.9" resolution: "@vaadin/lit-renderer@npm:24.4.10"
dependencies: dependencies:
lit: "npm:^3.0.0" lit: "npm:^3.0.0"
checksum: 10/62b8ee678068488e217db3b090a190f2e9fb04266c10bf3badd9cec2aa9a9352667f0fc3afaa6406c41bf92b1cf6165accd295116dc7bb719930bcd9c787d033 checksum: 10/4794767d1ff99efc0dccdd2aeef4eb191a18f3b0f25236078f22c90327a91ca1e9199c8dc28c640ee312b1c82f04360970545d64cafc3a116cedac24992e082c
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/overlay@npm:~24.4.9": "@vaadin/overlay@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/overlay@npm:24.4.9" resolution: "@vaadin/overlay@npm:24.4.10"
dependencies: dependencies:
"@open-wc/dedupe-mixin": "npm:^1.3.0" "@open-wc/dedupe-mixin": "npm:^1.3.0"
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/a11y-base": "npm:~24.4.9" "@vaadin/a11y-base": "npm:~24.4.10"
"@vaadin/component-base": "npm:~24.4.9" "@vaadin/component-base": "npm:~24.4.10"
"@vaadin/vaadin-lumo-styles": "npm:~24.4.9" "@vaadin/vaadin-lumo-styles": "npm:~24.4.10"
"@vaadin/vaadin-material-styles": "npm:~24.4.9" "@vaadin/vaadin-material-styles": "npm:~24.4.10"
"@vaadin/vaadin-themable-mixin": "npm:~24.4.9" "@vaadin/vaadin-themable-mixin": "npm:~24.4.10"
lit: "npm:^3.0.0" lit: "npm:^3.0.0"
checksum: 10/2190be292a1be8fa0981fdbd661c7750e752926a0b56fd44f79027fc127ab0f02ecb461ad7d7a54e951a514659ac850fa782c95f2d397784cf46bc20ed99745f checksum: 10/db07a22a6b7e925deef378d04981612a27123800cdf98fc5fcc73571a90eaa5910403954cf50873671f0fc27610820f261d4a7fd0cfc4e97416c3d568a89a012
languageName: node languageName: node
linkType: hard linkType: hard
@ -4802,36 +4802,36 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/vaadin-lumo-styles@npm:~24.4.9": "@vaadin/vaadin-lumo-styles@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/vaadin-lumo-styles@npm:24.4.9" resolution: "@vaadin/vaadin-lumo-styles@npm:24.4.10"
dependencies: dependencies:
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/component-base": "npm:~24.4.9" "@vaadin/component-base": "npm:~24.4.10"
"@vaadin/icon": "npm:~24.4.9" "@vaadin/icon": "npm:~24.4.10"
"@vaadin/vaadin-themable-mixin": "npm:~24.4.9" "@vaadin/vaadin-themable-mixin": "npm:~24.4.10"
checksum: 10/1c29528abc011f514d2f574105f2474a6fe56dd43d8c945bd1cb86377282436d0bd0c3505d3e18a5965898d5a48a94ac64171a50b1ac7929ad37a112b5e4f488 checksum: 10/eabd0eecf6f8cc4b2a4acd2db5c77a47758f19ee0bfcdb0fe2ea28c6dedcd8b67e23ca0b31215ad5878d8f89a5c04adcfbfd5384d41cc1096c60990d3801dfa9
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/vaadin-material-styles@npm:~24.4.9": "@vaadin/vaadin-material-styles@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/vaadin-material-styles@npm:24.4.9" resolution: "@vaadin/vaadin-material-styles@npm:24.4.10"
dependencies: dependencies:
"@polymer/polymer": "npm:^3.0.0" "@polymer/polymer": "npm:^3.0.0"
"@vaadin/component-base": "npm:~24.4.9" "@vaadin/component-base": "npm:~24.4.10"
"@vaadin/vaadin-themable-mixin": "npm:~24.4.9" "@vaadin/vaadin-themable-mixin": "npm:~24.4.10"
checksum: 10/fe9e70613b33e765e2db06df5b2c340b7adec6354ce7a87089ea2b2651f68cb744095c64e0fa9650eea46aa27e826a537a3f715f4d4cda6977519442ff402060 checksum: 10/eb4f71967059093ad705f95c62c1aef7e01ee8f9300b9af6261454d09791f05786b1ead9ec890b5aaf1491ba504f45f793ceb267d3bf318f5465f91faaa8f037
languageName: node languageName: node
linkType: hard linkType: hard
"@vaadin/vaadin-themable-mixin@npm:24.4.9, @vaadin/vaadin-themable-mixin@npm:~24.4.9": "@vaadin/vaadin-themable-mixin@npm:24.4.10, @vaadin/vaadin-themable-mixin@npm:~24.4.10":
version: 24.4.9 version: 24.4.10
resolution: "@vaadin/vaadin-themable-mixin@npm:24.4.9" resolution: "@vaadin/vaadin-themable-mixin@npm:24.4.10"
dependencies: dependencies:
"@open-wc/dedupe-mixin": "npm:^1.3.0" "@open-wc/dedupe-mixin": "npm:^1.3.0"
lit: "npm:^3.0.0" lit: "npm:^3.0.0"
checksum: 10/791a1cb20e8512905c00b9d7ffe8bbfc672e4854e8d9346539648269a76aa95139046687a1bc6b0c2e46e34b8d6498ef039277d1d6ff223782823246566b412b checksum: 10/d9b974854e67fd21059705d2641210b288b0a023245bf38fe29bf0819b8918c32f32e71c1abca8c10a6c8254be644a7e802e5d5c47241e339e9caa5702868135
languageName: node languageName: node
linkType: hard linkType: hard
@ -8908,7 +8908,7 @@ __metadata:
"@codemirror/legacy-modes": "npm:6.4.1" "@codemirror/legacy-modes": "npm:6.4.1"
"@codemirror/search": "npm:6.5.6" "@codemirror/search": "npm:6.5.6"
"@codemirror/state": "npm:6.4.1" "@codemirror/state": "npm:6.4.1"
"@codemirror/view": "npm:6.34.0" "@codemirror/view": "npm:6.34.1"
"@egjs/hammerjs": "npm:2.0.17" "@egjs/hammerjs": "npm:2.0.17"
"@formatjs/intl-datetimeformat": "npm:6.12.5" "@formatjs/intl-datetimeformat": "npm:6.12.5"
"@formatjs/intl-displaynames": "npm:6.6.8" "@formatjs/intl-displaynames": "npm:6.6.8"
@ -8978,7 +8978,7 @@ __metadata:
"@types/babel__plugin-transform-runtime": "npm:7.9.5" "@types/babel__plugin-transform-runtime": "npm:7.9.5"
"@types/chromecast-caf-receiver": "npm:6.0.17" "@types/chromecast-caf-receiver": "npm:6.0.17"
"@types/chromecast-caf-sender": "npm:1.0.10" "@types/chromecast-caf-sender": "npm:1.0.10"
"@types/color-name": "npm:1.1.4" "@types/color-name": "npm:2.0.0"
"@types/glob": "npm:8.1.0" "@types/glob": "npm:8.1.0"
"@types/html-minifier-terser": "npm:7.0.2" "@types/html-minifier-terser": "npm:7.0.2"
"@types/js-yaml": "npm:4.0.9" "@types/js-yaml": "npm:4.0.9"
@ -8995,8 +8995,8 @@ __metadata:
"@types/webspeechapi": "npm:0.0.29" "@types/webspeechapi": "npm:0.0.29"
"@typescript-eslint/eslint-plugin": "npm:7.18.0" "@typescript-eslint/eslint-plugin": "npm:7.18.0"
"@typescript-eslint/parser": "npm:7.18.0" "@typescript-eslint/parser": "npm:7.18.0"
"@vaadin/combo-box": "npm:24.4.9" "@vaadin/combo-box": "npm:24.4.10"
"@vaadin/vaadin-themable-mixin": "npm:24.4.9" "@vaadin/vaadin-themable-mixin": "npm:24.4.10"
"@vibrant/color": "npm:3.2.1-alpha.1" "@vibrant/color": "npm:3.2.1-alpha.1"
"@vibrant/core": "npm:3.2.1-alpha.1" "@vibrant/core": "npm:3.2.1-alpha.1"
"@vibrant/quantizer-mmcq": "npm:3.2.1-alpha.1" "@vibrant/quantizer-mmcq": "npm:3.2.1-alpha.1"