diff --git a/package.json b/package.json index d8b369de1280..3f4e61c24329 100644 --- a/package.json +++ b/package.json @@ -81,8 +81,8 @@ "@material/mwc-top-app-bar-fixed": "0.27.0", "@material/top-app-bar": "=14.0.0-canary.53b3cad2f.0", "@material/web": "=1.1.1", - "@mdi/js": "7.3.67", - "@mdi/svg": "7.3.67", + "@mdi/js": "7.4.47", + "@mdi/svg": "7.4.47", "@polymer/paper-input": "3.2.1", "@polymer/paper-item": "3.0.1", "@polymer/paper-listbox": "3.0.1", @@ -184,13 +184,13 @@ "@types/tar": "6.1.10", "@types/ua-parser-js": "0.7.39", "@types/webspeechapi": "0.0.29", - "@typescript-eslint/eslint-plugin": "6.15.0", - "@typescript-eslint/parser": "6.15.0", + "@typescript-eslint/eslint-plugin": "6.16.0", + "@typescript-eslint/parser": "6.16.0", "@web/dev-server": "0.1.38", "@web/dev-server-rollup": "0.4.1", "babel-loader": "9.1.3", "babel-plugin-template-html-minifier": "4.1.0", - "chai": "4.3.10", + "chai": "5.0.0", "del": "7.1.0", "eslint": "8.56.0", "eslint-config-airbnb-base": "15.0.0", @@ -223,19 +223,19 @@ "map-stream": "0.0.7", "mocha": "10.2.0", "object-hash": "3.0.0", - "open": "10.0.1", + "open": "10.0.2", "pinst": "3.0.0", "prettier": "3.1.1", "rollup": "2.79.1", "rollup-plugin-string": "3.0.0", "rollup-plugin-terser": "7.0.2", - "rollup-plugin-visualizer": "5.11.0", + "rollup-plugin-visualizer": "5.12.0", "serve-handler": "6.1.5", "sinon": "17.0.1", "source-map-url": "0.4.1", "systemjs": "6.14.2", "tar": "6.2.0", - "terser-webpack-plugin": "5.3.9", + "terser-webpack-plugin": "5.3.10", "ts-lit-plugin": "2.0.1", "typescript": "5.3.3", "vinyl-buffer": "1.0.1", diff --git a/pyproject.toml b/pyproject.toml index 4617d88e3cd2..d1e5abd3d1c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "home-assistant-frontend" -version = "20231228.0" +version = "20240101.0" license = {text = "Apache-2.0"} description = "The Home Assistant frontend" readme = "README.md" diff --git a/src/components/ha-date-input.ts b/src/components/ha-date-input.ts index d3b5a0607eb3..d4d9922639d9 100644 --- a/src/components/ha-date-input.ts +++ b/src/components/ha-date-input.ts @@ -18,7 +18,8 @@ export interface datePickerDialogParams { max?: string; locale?: string; firstWeekday?: number; - onChange: (value: string) => void; + canClear?: boolean; + onChange: (value: string | undefined) => void; } const showDatePickerDialog = ( @@ -49,6 +50,8 @@ export class HaDateInput extends LitElement { @property() public helper?: string; + @property({ type: Boolean }) public canClear?: boolean; + render() { return html` this._valueChanged(value), locale: this.locale.language, firstWeekday: firstWeekdayIndex(this.locale), }); } - private _valueChanged(value: string) { + private _keyDown(ev: KeyboardEvent) { + if (!this.canClear) { + return; + } + if (["Backspace", "Delete"].includes(ev.key)) { + this._valueChanged(undefined); + } + } + + private _valueChanged(value: string | undefined) { if (this.value !== value) { this.value = value; fireEvent(this, "change"); diff --git a/src/components/ha-dialog-date-picker.ts b/src/components/ha-dialog-date-picker.ts index 2422754cfb15..b71e063ae410 100644 --- a/src/components/ha-dialog-date-picker.ts +++ b/src/components/ha-dialog-date-picker.ts @@ -50,6 +50,15 @@ export class HaDialogDatePicker extends LitElement { @datepicker-value-updated=${this._valueChanged} .firstDayOfWeek=${this._params.firstWeekday} > + ${this._params.canClear + ? html` + ${this.hass.localize("ui.dialogs.date-picker.clear")} + ` + : nothing} ${this.hass.localize("ui.dialogs.date-picker.today")} @@ -66,6 +75,11 @@ export class HaDialogDatePicker extends LitElement { this._value = ev.detail.value; } + private _clear() { + this._params?.onChange(undefined); + this.closeDialog(); + } + private _setToday() { const today = new Date(); this._value = format(today, "yyyy-MM-dd"); diff --git a/src/components/media-player/ha-browse-media-tts.ts b/src/components/media-player/ha-browse-media-tts.ts index 39e36b60b7b5..cb10b053c421 100644 --- a/src/components/media-player/ha-browse-media-tts.ts +++ b/src/components/media-player/ha-browse-media-tts.ts @@ -62,7 +62,7 @@ class BrowseMediaTTS extends LitElement { this.hass.localize( "ui.components.media-browser.tts.example_message", { - name: this.hass.user?.name || "", + name: this.hass.user?.name || "Alice", } )} > diff --git a/src/components/trace/ha-trace-path-details.ts b/src/components/trace/ha-trace-path-details.ts index f87d9006ef4e..514377e61f4f 100644 --- a/src/components/trace/ha-trace-path-details.ts +++ b/src/components/trace/ha-trace-path-details.ts @@ -133,7 +133,7 @@ export class HaTracePathDetails extends LitElement { if (result?.enabled === false) { return html`${this.hass!.localize( - "ui.panel.config.automation.trace.path.disabled_node" + "ui.panel.config.automation.trace.path.disabled_step" )}`; } @@ -208,11 +208,19 @@ export class HaTracePathDetails extends LitElement { const paths = this.trace.trace; const data: ActionTraceStep[] = paths[this.selected.path]; + if (data === undefined) { + return html`
+ ${this.hass!.localize( + "ui.panel.config.automation.trace.path.step_not_executed" + )} +
`; + } + return html`
${data.map( (trace, idx) => html` - ${idx > 0 + ${data.length > 1 ? html`

${this.hass!.localize( "ui.panel.config.automation.trace.path.iteration", @@ -240,7 +248,7 @@ export class HaTracePathDetails extends LitElement { if (index === -1) { return html`

${this.hass!.localize( - "ui.panel.config.automation.trace.path.node_not_tracked" + "ui.panel.config.automation.trace.path.step_not_executed" )}
`; } diff --git a/src/data/todo.ts b/src/data/todo.ts index e4f99090776b..9af8ef0f4cc6 100644 --- a/src/data/todo.ts +++ b/src/data/todo.ts @@ -18,8 +18,8 @@ export interface TodoItem { uid: string; summary: string; status: TodoItemStatus; - description?: string; - due?: string; + description?: string | null; + due?: string | null; } export const enum TodoListEntityFeature { @@ -83,9 +83,9 @@ export const updateItem = ( item: item.uid, rename: item.summary, status: item.status, - description: item.description || undefined, + description: item.description || null, due_datetime: item.due?.includes("T") ? item.due : undefined, - due_date: item.due?.includes("T") ? undefined : item.due || undefined, + due_date: item.due?.includes("T") ? undefined : item.due || null, }, { entity_id } ); diff --git a/src/panels/config/automation/action/types/ha-automation-action-repeat.ts b/src/panels/config/automation/action/types/ha-automation-action-repeat.ts index 890133d25019..7a1ad36e8156 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-repeat.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-repeat.ts @@ -9,6 +9,7 @@ import type { HomeAssistant } from "../../../../../types"; import "../ha-automation-action"; import type { ActionElement } from "../ha-automation-action-row"; +import { isTemplate } from "../../../../../common/string/has-template"; import type { LocalizeFunc } from "../../../../../common/translations/localize"; import "../../../../../components/ha-form/ha-form"; import type { SchemaUnion } from "../../../../../components/ha-form/types"; @@ -32,7 +33,12 @@ export class HaRepeatAction extends LitElement implements ActionElement { } private _schema = memoizeOne( - (localize: LocalizeFunc, type: string, reOrderMode: boolean) => + ( + localize: LocalizeFunc, + type: string, + reOrderMode: boolean, + template: boolean + ) => [ { name: "type", @@ -53,7 +59,9 @@ export class HaRepeatAction extends LitElement implements ActionElement { { name: "count", required: true, - selector: { number: { mode: "box", min: 1 } }, + selector: template + ? ({ template: {} } as const) + : ({ number: { mode: "box", min: 1 } } as const), }, ] as const) : []), @@ -89,10 +97,13 @@ export class HaRepeatAction extends LitElement implements ActionElement { const schema = this._schema( this.hass.localize, type ?? "count", - this.reOrderMode + this.reOrderMode, + "count" in action && typeof action.count === "string" + ? isTemplate(action.count) + : false ); const data = { ...action, type }; - return html` { if (type === "action" && isService(group)) { const result = this._services(localize, services, manifests, group); - if (group === "service_media_player") { + if (group === `${SERVICE_PREFIX}media_player`) { result.unshift(this._convertToItem("play_media", {}, type, localize)); } return result; @@ -254,31 +254,29 @@ class DialogAddAutomationElement extends LitElement implements HassDialog { return []; } const result: ListItem[] = []; - Object.keys(services) - .sort() - .forEach((domain) => { - const manifest = manifests[domain]; - if ( - (type === undefined && - manifest?.integration_type === "entity" && - !ENTITY_DOMAINS_OTHER.has(domain)) || - (type === "helper" && manifest?.integration_type === "helper") || - (type === "other" && - (ENTITY_DOMAINS_OTHER.has(domain) || - !["helper", "entity"].includes( - manifest?.integration_type || "" - ))) - ) { - result.push({ - group: true, - icon: domainIcon(domain), - key: `${SERVICE_PREFIX}${domain}`, - name: domainToName(localize, domain, manifest), - description: "", - }); - } - }); - return result; + Object.keys(services).forEach((domain) => { + const manifest = manifests[domain]; + if ( + (type === undefined && + manifest?.integration_type === "entity" && + !ENTITY_DOMAINS_OTHER.has(domain)) || + (type === "helper" && manifest?.integration_type === "helper") || + (type === "other" && + (ENTITY_DOMAINS_OTHER.has(domain) || + !["helper", "entity"].includes(manifest?.integration_type || ""))) + ) { + result.push({ + group: true, + icon: domainIcon(domain), + key: `${SERVICE_PREFIX}${domain}`, + name: domainToName(localize, domain, manifest), + description: "", + }); + } + }); + return result.sort((a, b) => + stringCompare(a.name, b.name, this.hass.locale.language) + ); } ); @@ -515,6 +513,7 @@ class DialogAddAutomationElement extends LitElement implements HassDialog { } private _back() { + this._dialog!.scrollToPos(0, 0); if (this._filter) { this._filter = ""; return; diff --git a/src/panels/config/automation/ha-automation-picker.ts b/src/panels/config/automation/ha-automation-picker.ts index a29a88d6a35c..7fe54ec1f818 100644 --- a/src/panels/config/automation/ha-automation-picker.ts +++ b/src/panels/config/automation/ha-automation-picker.ts @@ -342,7 +342,8 @@ class HaAutomationPicker extends LitElement {

${this.hass.localize( - "ui.panel.config.automation.picker.empty_text_2" + "ui.panel.config.automation.picker.empty_text_2", + { user: this.hass.user?.name || "Alice" } )}

${this.hass.localize( "ui.panel.config.automation.editor.conditions.description", - { user: this.hass.user?.name } + { user: this.hass.user?.name || "Alice" } )}

` : nothing} diff --git a/src/panels/config/integrations/dialog-add-integration.ts b/src/panels/config/integrations/dialog-add-integration.ts index 757f23160276..65edfbfccf67 100644 --- a/src/panels/config/integrations/dialog-add-integration.ts +++ b/src/panels/config/integrations/dialog-add-integration.ts @@ -340,7 +340,9 @@ class AddIntegrationDialog extends LitElement { !("integrations" in integration) && !this._flowsInProgress?.length ) { - return "What type of device is it?"; + return this.hass.localize( + "ui.panel.config.integrations.what_device_type" + ); } if ( integration && @@ -348,9 +350,11 @@ class AddIntegrationDialog extends LitElement { !("integrations" in integration) && this._flowsInProgress?.length ) { - return "Want to add these discovered devices?"; + return this.hass.localize( + "ui.panel.config.integrations.confirm_add_discovered" + ); } - return "What do you want to add?"; + return this.hass.localize("ui.panel.config.integrations.what_to_add"); } private _renderIntegration( diff --git a/src/panels/config/scene/ha-scene-editor.ts b/src/panels/config/scene/ha-scene-editor.ts index ea28abb08b1a..da9817835151 100644 --- a/src/panels/config/scene/ha-scene-editor.ts +++ b/src/panels/config/scene/ha-scene-editor.ts @@ -513,6 +513,7 @@ export class HaSceneEditor extends SubscribeMixin( if ( !entity.device_id || entity.entity_category || + entity.hidden_by || SCENE_IGNORED_DOMAINS.includes(computeDomain(entity.entity_id)) ) { continue; diff --git a/src/panels/todo/dialog-todo-item-editor.ts b/src/panels/todo/dialog-todo-item-editor.ts index 5206bfe8a877..c81b9e4dbec3 100644 --- a/src/panels/todo/dialog-todo-item-editor.ts +++ b/src/panels/todo/dialog-todo-item-editor.ts @@ -161,7 +161,8 @@ class DialogTodoItemEditor extends LitElement { .value=${dueDate} .locale=${this.hass.locale} .disabled=${!canUpdate} - @value-changed=${this._endDateChanged} + @value-changed=${this._dueDateChanged} + canClear > ${this._todoListSupportsFeature( TodoListEntityFeature.SET_DUE_DATETIME_ON_ITEM @@ -170,7 +171,7 @@ class DialogTodoItemEditor extends LitElement { .value=${dueTime} .locale=${this.hass.locale} .disabled=${!canUpdate} - @value-changed=${this._endTimeChanged} + @value-changed=${this._dueTimeChanged} >` : nothing}
@@ -259,12 +260,16 @@ class DialogTodoItemEditor extends LitElement { this._description = ev.target.value; } - private _endDateChanged(ev: CustomEvent) { + private _dueDateChanged(ev: CustomEvent) { + if (!ev.detail.value) { + this._due = undefined; + return; + } const time = this._due ? this._formatTime(this._due) : undefined; this._due = this._parseDate(`${ev.detail.value}${time ? `T${time}` : ""}`); } - private _endTimeChanged(ev: CustomEvent) { + private _dueTimeChanged(ev: CustomEvent) { this._hasTime = true; this._due = this._parseDate( `${this._formatDate(this._due || new Date())}T${ev.detail.value}` @@ -320,13 +325,13 @@ class DialogTodoItemEditor extends LitElement { TodoListEntityFeature.SET_DESCRIPTION_ON_ITEM ) ? // backend should accept null to clear the field, but it doesn't now - " " + null : undefined), due: this._due ? this._hasTime ? this._due.toISOString() : this._formatDate(this._due) - : undefined, + : null, status: this._checked ? TodoItemStatus.Completed : TodoItemStatus.NeedsAction, diff --git a/src/translations/en.json b/src/translations/en.json index 0209a3ffb70b..0039d9926f56 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1009,7 +1009,8 @@ "crop_image": "Picture to crop" }, "date-picker": { - "today": "Today" + "today": "Today", + "clear": "Clear" }, "more_info_control": { "dismiss": "Dismiss dialog", @@ -2386,7 +2387,7 @@ }, "empty_header": "Start automating", "empty_text_1": "Automations make Home Assistant automatically respond to things happening in and around your home.", - "empty_text_2": "Automations connect triggers to actions in a ''when trigger then action'' fashion with optional conditions. For example: ''When the sun sets and if Alice is home, then turn on the lights''." + "empty_text_2": "Automations connect triggers to actions in a ''when trigger then action'' fashion with optional conditions. For example: ''When the sun sets and if {user} is home, then turn on the lights''." }, "dialog_new": { "header": "Create automation", @@ -3114,15 +3115,15 @@ "blueprint_config": "Blueprint Config" }, "path": { - "choose": "Select a node on the left for more information.", + "choose": "Select a step on the left for more information.", "default_action_executed": "The default action was executed because no options matched.", - "no_further_execution": "This node was not executed and so no further trace information is available.", - "disabled_node": "This node was disabled and skipped during execution so no further trace information is available.", + "no_further_execution": "This step was not executed and so no further trace information is available.", + "disabled_step": "This step was disabled and skipped during execution so no further trace information is available.", "iteration": "Iteration {number}", "executed": "Executed: {time}", "error": "Error: {error}", "result": "Result:", - "node_not_tracked": "Node not tracked.", + "step_not_executed": "This step was not executed.", "no_logbook_entries": "No Logbook entries found for this step.", "no_variables_changed": "No variables changed", "unable_to_find_config": "Unable to find config" @@ -3799,6 +3800,9 @@ "add_zwave_js_device": "Add Z-Wave device", "add_zha_device": "Add Zigbee device", "add_matter_device": "Add Matter device", + "what_device_type": "What type of device is it?", + "what_to_add": "What do you want to add?", + "confirm_add_discovered": "Want to add these discovered devices?", "disable": { "show_disabled": "Show disabled integrations", "disabled_integrations": "{number} disabled", diff --git a/yarn.lock b/yarn.lock index 66ab497b9976..510c103b2e84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2043,7 +2043,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.20 resolution: "@jridgewell/trace-mapping@npm:0.3.20" dependencies: @@ -3146,17 +3146,17 @@ __metadata: languageName: node linkType: hard -"@mdi/js@npm:7.3.67": - version: 7.3.67 - resolution: "@mdi/js@npm:7.3.67" - checksum: 0f54a632d4ab3213931cc348d524f0f5e6b492ea74f8f1babe00298a8e7ae07b2fec88cfaf0cf7be0f1e427026a8da23fb8bed55b22892ad3b40b482e01cfb17 +"@mdi/js@npm:7.4.47": + version: 7.4.47 + resolution: "@mdi/js@npm:7.4.47" + checksum: c1a8fc82f23030bccc0cf324b13b73a0034d06140e79f8bc7b0e4e59275624c470e5ca6524d6141ad8c4fe3ad0f314c7af99afb3e38df163eb50d3b13b9eab17 languageName: node linkType: hard -"@mdi/svg@npm:7.3.67": - version: 7.3.67 - resolution: "@mdi/svg@npm:7.3.67" - checksum: bd9593e6cc16d140b681dedacd2a164da7884186d496c89809a9389c980c295d16edf4ba8744338d28bb6e627b1801f47c4c0cbf7b8faf7084ee87cd5d7b4250 +"@mdi/svg@npm:7.4.47": + version: 7.4.47 + resolution: "@mdi/svg@npm:7.4.47" + checksum: e5a6b80bb82cc7b7c98e9a018883aee1eaa0e98edfb62192e7ec5798fa573f30b9226629361d747de6e0a81fe6657fb37e9bc2fd89c68e9b094a07e863be4fba languageName: node linkType: hard @@ -4566,15 +4566,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:6.15.0": - version: 6.15.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.15.0" +"@typescript-eslint/eslint-plugin@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.16.0" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:6.15.0" - "@typescript-eslint/type-utils": "npm:6.15.0" - "@typescript-eslint/utils": "npm:6.15.0" - "@typescript-eslint/visitor-keys": "npm:6.15.0" + "@typescript-eslint/scope-manager": "npm:6.16.0" + "@typescript-eslint/type-utils": "npm:6.16.0" + "@typescript-eslint/utils": "npm:6.16.0" + "@typescript-eslint/visitor-keys": "npm:6.16.0" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -4587,44 +4587,44 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 9020370c5e89b52b65ed2373c755d4b70f57ec7ebcf02d3e2f323f31ec81717af110d8e5f903b189b71e0a952f042e0fe2b637e77959c3102907efed4ba55512 + checksum: 4bedce948ac3c20492a59813ee5d4f1f2306310857864dfaac2736f6c38e18785002c36844fd64c9fbdf3059fc390b29412be105fd7a118177f1eeeb1eb533f7 languageName: node linkType: hard -"@typescript-eslint/parser@npm:6.15.0": - version: 6.15.0 - resolution: "@typescript-eslint/parser@npm:6.15.0" +"@typescript-eslint/parser@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/parser@npm:6.16.0" dependencies: - "@typescript-eslint/scope-manager": "npm:6.15.0" - "@typescript-eslint/types": "npm:6.15.0" - "@typescript-eslint/typescript-estree": "npm:6.15.0" - "@typescript-eslint/visitor-keys": "npm:6.15.0" + "@typescript-eslint/scope-manager": "npm:6.16.0" + "@typescript-eslint/types": "npm:6.16.0" + "@typescript-eslint/typescript-estree": "npm:6.16.0" + "@typescript-eslint/visitor-keys": "npm:6.16.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: fdd1f584e5068216c36a01e40750950ef309b36a522f6ecde36931690558a319960a702b4b4a806f335fb28ca99f8a07bb206571141550aaab1f6f40066f6605 + checksum: 3d941ce345dc2ce29957e2110957662873d514b094b8939923c3281d858c11cd1f9058db862644afe14f68d087770f39a0a1f9e523a2013ed5d2fdf3421b34d0 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.15.0": - version: 6.15.0 - resolution: "@typescript-eslint/scope-manager@npm:6.15.0" +"@typescript-eslint/scope-manager@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/scope-manager@npm:6.16.0" dependencies: - "@typescript-eslint/types": "npm:6.15.0" - "@typescript-eslint/visitor-keys": "npm:6.15.0" - checksum: 168d783c06a99784362e2eaaa56396b31716ee785779707ef984c2abb3e822c56440473efc6580cb8b84b2da508731ad184a00b3618bc7f3f93d8243804f2fcf + "@typescript-eslint/types": "npm:6.16.0" + "@typescript-eslint/visitor-keys": "npm:6.16.0" + checksum: 3360aae4b85f5c31d20ad48d771cc09a6f8f6b1811b00d94f06e55b5a09c610ac75631b1c4edecb3bec682d41351b87e7d14d42bee84aa032064d0e13463035b languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.15.0": - version: 6.15.0 - resolution: "@typescript-eslint/type-utils@npm:6.15.0" +"@typescript-eslint/type-utils@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/type-utils@npm:6.16.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:6.15.0" - "@typescript-eslint/utils": "npm:6.15.0" + "@typescript-eslint/typescript-estree": "npm:6.16.0" + "@typescript-eslint/utils": "npm:6.16.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -4632,59 +4632,60 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 8dabb355f09f57de8b46d726ad95a57593e5b87427dee5182afecb490624424afec02b69a27018b352dcb5f930eb391cb8cdc12cd60a93231d4f04e63e2f2c0b + checksum: 5964b87a87252bed278a248eb568902babd7c34defd3af8c3df371926d96aec716f33f1dc14bde170e93f73ed1b0af6e591e647853d0f33f378e2c7b3b73fc5b languageName: node linkType: hard -"@typescript-eslint/types@npm:6.15.0": - version: 6.15.0 - resolution: "@typescript-eslint/types@npm:6.15.0" - checksum: d55de64d532c9016c922cc36b86ab661d7d64d942057486a0bca7a7db07fade95c3de59bfe364bc76ab538fb979ca2e4e6744c3acf8919a2d61e73cc7f544363 +"@typescript-eslint/types@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/types@npm:6.16.0" + checksum: 236ca318c2440c95068e5d4d147e2bfed62447775e18695e21c8ca04a341a74d01c37ed2b417629b7bf2fb91ad4fd5e2a6570215d16fc24dd1507ce6973b4e22 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.15.0": - version: 6.15.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.15.0" +"@typescript-eslint/typescript-estree@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.16.0" dependencies: - "@typescript-eslint/types": "npm:6.15.0" - "@typescript-eslint/visitor-keys": "npm:6.15.0" + "@typescript-eslint/types": "npm:6.16.0" + "@typescript-eslint/visitor-keys": "npm:6.16.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" + minimatch: "npm:9.0.3" semver: "npm:^7.5.4" ts-api-utils: "npm:^1.0.1" peerDependenciesMeta: typescript: optional: true - checksum: 920f7f3bfe463a9da943e1a686b7f13ac802a5e33be52f39ac711aa53a1e274dbe173b41bba05581c560fabfc3e1fadcfd81ab53a036afe25fb1a76651fcad7a + checksum: 8e1ef03ecabaf3791b11240a51217836dbb74850e458258db77ac5eab5508cd9c63fb671924993d1e7654718c0c857c3550d51ecba0845fe489d143bb858e1b1 languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.15.0": - version: 6.15.0 - resolution: "@typescript-eslint/utils@npm:6.15.0" +"@typescript-eslint/utils@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/utils@npm:6.16.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.15.0" - "@typescript-eslint/types": "npm:6.15.0" - "@typescript-eslint/typescript-estree": "npm:6.15.0" + "@typescript-eslint/scope-manager": "npm:6.16.0" + "@typescript-eslint/types": "npm:6.16.0" + "@typescript-eslint/typescript-estree": "npm:6.16.0" semver: "npm:^7.5.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 7895240933ad28295508f8c4286a8b905550a35eda83a11ecf9511e53078e0af07e75a1872f1bc757f165b41fdc84616ea97c1e2e3bf80cff985935f25596228 + checksum: 84dd02f7c8e47fae699cc222da5cbea08b28c6e1cc7827860430bc86c2a17ee3f86e198a4356902b95930f85785aa662266ea9c476f69bf80c6a5f648e55f9f4 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.15.0": - version: 6.15.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.15.0" +"@typescript-eslint/visitor-keys@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.16.0" dependencies: - "@typescript-eslint/types": "npm:6.15.0" + "@typescript-eslint/types": "npm:6.16.0" eslint-visitor-keys: "npm:^3.4.1" - checksum: 4641a829485f67a5d9d3558aa0d152e5ab57b468cfd9653168ce9a141e1f051730669a024505183b64f7a7e5d8f62533af4ebd4ad7366b551390461e9c45ec18 + checksum: 19e559f14ea0092585a374b8c5f1aca9b6b271fc23909d9857de9cf71a1e1d3abc0afd237e9c02d7a5fbdfe8e3be7853cf9fedf40a6f16bac3495cb7f4e67982 languageName: node linkType: hard @@ -5894,10 +5895,10 @@ __metadata: languageName: node linkType: hard -"assertion-error@npm:^1.1.0": - version: 1.1.0 - resolution: "assertion-error@npm:1.1.0" - checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 languageName: node linkType: hard @@ -6433,18 +6434,16 @@ __metadata: languageName: node linkType: hard -"chai@npm:4.3.10": - version: 4.3.10 - resolution: "chai@npm:4.3.10" +"chai@npm:5.0.0": + version: 5.0.0 + resolution: "chai@npm:5.0.0" dependencies: - assertion-error: "npm:^1.1.0" - check-error: "npm:^1.0.3" - deep-eql: "npm:^4.1.3" - get-func-name: "npm:^2.0.2" - loupe: "npm:^2.3.6" - pathval: "npm:^1.1.1" - type-detect: "npm:^4.0.8" - checksum: 9e545fd60f5efee4f06f7ad62f7b1b142932b08fbb3454db69defd511e7c58771ce51843764212da1e129b2c9d1b029fbf5f98da030fe67a95a0853e8679524f + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.0.0" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.0.0" + pathval: "npm:^2.0.0" + checksum: c23d1bb3912cc36d12861d7e4010bb992aabf923a8d393bc71e776218c39f5f40778ab9f398ff962dd26857edee07ce732c9ad28a678feb1b76f99384d2e4a90 languageName: node linkType: hard @@ -6494,12 +6493,10 @@ __metadata: languageName: node linkType: hard -"check-error@npm:^1.0.3": - version: 1.0.3 - resolution: "check-error@npm:1.0.3" - dependencies: - get-func-name: "npm:^2.0.2" - checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 +"check-error@npm:^2.0.0": + version: 2.0.0 + resolution: "check-error@npm:2.0.0" + checksum: 120f252c2e1ad82ef82a616662805345c6c361347bfd6203f8a28c53a158811dd0ea21278f29c8136cc9df12fc7f077d1a07124569d98fb396b3072d08f2f092 languageName: node linkType: hard @@ -7183,12 +7180,10 @@ __metadata: languageName: node linkType: hard -"deep-eql@npm:^4.1.3": - version: 4.1.3 - resolution: "deep-eql@npm:4.1.3" - dependencies: - type-detect: "npm:^4.0.0" - checksum: 12ce93ae63de187e77b076d3d51bfc28b11f98910a22c18714cce112791195e86a94f97788180994614b14562a86c9763f67c69f785e4586f806b5df39bf9301 +"deep-eql@npm:^5.0.1": + version: 5.0.1 + resolution: "deep-eql@npm:5.0.1" + checksum: f8846820213462cdca23700873810c8bc01263dcc6a1e0f8694964b64f48a6dcb1f323ef7bb8678b15553f4b82420eda19092d4ae2e2709c56af7ea77bd8e6ab languageName: node linkType: hard @@ -7227,13 +7222,13 @@ __metadata: languageName: node linkType: hard -"default-browser@npm:^5.2.0": - version: 5.2.0 - resolution: "default-browser@npm:5.2.0" +"default-browser@npm:^5.2.1": + version: 5.2.1 + resolution: "default-browser@npm:5.2.1" dependencies: bundle-name: "npm:^4.1.0" default-browser-id: "npm:^5.0.0" - checksum: 95530de0dca75892b4382d086f42bd798f54a1e25eab748e84e1b64566568b1a02cf1eccfb60a8fbab303d72c09938c2d34e0b38e57d85efd24f13a60d2de802 + checksum: afab7eff7b7f5f7a94d9114d1ec67273d3fbc539edf8c0f80019879d53aa71e867303c6f6d7cffeb10a6f3cfb59d4f963dba3f9c96830b4540cc7339a1bf9840 languageName: node linkType: hard @@ -8965,7 +8960,7 @@ __metadata: languageName: node linkType: hard -"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": +"get-func-name@npm:^2.0.1": version: 2.0.2 resolution: "get-func-name@npm:2.0.2" checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b @@ -9584,8 +9579,8 @@ __metadata: "@material/mwc-top-app-bar-fixed": "npm:0.27.0" "@material/top-app-bar": "npm:=14.0.0-canary.53b3cad2f.0" "@material/web": "npm:=1.1.1" - "@mdi/js": "npm:7.3.67" - "@mdi/svg": "npm:7.3.67" + "@mdi/js": "npm:7.4.47" + "@mdi/svg": "npm:7.4.47" "@octokit/auth-oauth-device": "npm:6.0.1" "@octokit/plugin-retry": "npm:6.0.1" "@octokit/rest": "npm:20.0.2" @@ -9618,8 +9613,8 @@ __metadata: "@types/tar": "npm:6.1.10" "@types/ua-parser-js": "npm:0.7.39" "@types/webspeechapi": "npm:0.0.29" - "@typescript-eslint/eslint-plugin": "npm:6.15.0" - "@typescript-eslint/parser": "npm:6.15.0" + "@typescript-eslint/eslint-plugin": "npm:6.16.0" + "@typescript-eslint/parser": "npm:6.16.0" "@vaadin/combo-box": "npm:24.3.2" "@vaadin/vaadin-themable-mixin": "npm:24.3.2" "@vibrant/color": "npm:3.2.1-alpha.1" @@ -9633,7 +9628,7 @@ __metadata: app-datepicker: "npm:5.1.1" babel-loader: "npm:9.1.3" babel-plugin-template-html-minifier: "npm:4.1.0" - chai: "npm:4.3.10" + chai: "npm:5.0.0" chart.js: "npm:4.4.1" comlink: "npm:4.4.1" core-js: "npm:3.34.0" @@ -9689,7 +9684,7 @@ __metadata: mocha: "npm:10.2.0" node-vibrant: "npm:3.2.1-alpha.1" object-hash: "npm:3.0.0" - open: "npm:10.0.1" + open: "npm:10.0.2" pinst: "npm:3.0.0" prettier: "npm:3.1.1" proxy-polyfill: "npm:0.3.2" @@ -9700,7 +9695,7 @@ __metadata: rollup: "npm:2.79.1" rollup-plugin-string: "npm:3.0.0" rollup-plugin-terser: "npm:7.0.2" - rollup-plugin-visualizer: "npm:5.11.0" + rollup-plugin-visualizer: "npm:5.12.0" rrule: "npm:2.8.1" serve-handler: "npm:6.1.5" sinon: "npm:17.0.1" @@ -9710,7 +9705,7 @@ __metadata: superstruct: "npm:1.0.3" systemjs: "npm:6.14.2" tar: "npm:6.2.0" - terser-webpack-plugin: "npm:5.3.9" + terser-webpack-plugin: "npm:5.3.10" tinykeys: "npm:2.1.0" ts-lit-plugin: "npm:2.0.1" tsparticles-engine: "npm:2.12.0" @@ -11532,12 +11527,12 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^2.3.6": - version: 2.3.7 - resolution: "loupe@npm:2.3.7" +"loupe@npm:^3.0.0": + version: 3.0.2 + resolution: "loupe@npm:3.0.2" dependencies: get-func-name: "npm:^2.0.1" - checksum: 635c8f0914c2ce7ecfe4e239fbaf0ce1d2c00e4246fafcc4ed000bfdb1b8f89d05db1a220054175cca631ebf3894872a26fffba0124477fcb562f78762848fb1 + checksum: 256467bf10afaca4a5dd79b32e36fcd042bc2a247232e940c62bcc07cb114c2d7a549218eb103598e7cdb8bd32c6601fe230d80e03b8d49782973d4da11c08ed languageName: node linkType: hard @@ -11859,21 +11854,21 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" +"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 126b36485b821daf96d33b5c821dac600cc1ab36c87e7a532594f9b1652b1fa89a1eebcaad4dff17c764dce1a7ac1531327f190fed5f97d8f6e5f889c116c429 + checksum: c81b47d28153e77521877649f4bab48348d10938df9e8147a58111fe00ef89559a2938de9f6632910c4f7bf7bb5cd81191a546167e58d357f0cfb1e18cecc1c5 languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" dependencies: brace-expansion: "npm:^2.0.1" - checksum: c81b47d28153e77521877649f4bab48348d10938df9e8147a58111fe00ef89559a2938de9f6632910c4f7bf7bb5cd81191a546167e58d357f0cfb1e18cecc1c5 + checksum: 126b36485b821daf96d33b5c821dac600cc1ab36c87e7a532594f9b1652b1fa89a1eebcaad4dff17c764dce1a7ac1531327f190fed5f97d8f6e5f889c116c429 languageName: node linkType: hard @@ -12529,15 +12524,15 @@ __metadata: languageName: node linkType: hard -"open@npm:10.0.1": - version: 10.0.1 - resolution: "open@npm:10.0.1" +"open@npm:10.0.2": + version: 10.0.2 + resolution: "open@npm:10.0.2" dependencies: - default-browser: "npm:^5.2.0" + default-browser: "npm:^5.2.1" define-lazy-prop: "npm:^3.0.0" is-inside-container: "npm:^1.0.0" is-wsl: "npm:^3.1.0" - checksum: 7ce545e2e68775f06ab800c2a2ef20369bce2738e1219fd31179e1a1773f2c33fcc6b7f816a4f5e9214821cb58ae9c50f2e3f7dd8f5b02e418fbcafabf481f03 + checksum: 6f7f9e08204af00930f2998690293df1a919a61c98b225ff9e3aa09a765254b8a98bec101644ffe991452c6aabea0c6f9e49670b559d48a44bfc5238f6b58351 languageName: node linkType: hard @@ -12959,10 +12954,10 @@ __metadata: languageName: node linkType: hard -"pathval@npm:^1.1.1": - version: 1.1.1 - resolution: "pathval@npm:1.1.1" - checksum: b50a4751068aa3a5428f5a0b480deecedc6f537666a3630a0c2ae2d5e7c0f4bf0ee77b48404441ec1220bef0c91625e6030b3d3cf5a32ab0d9764018d1d9dbb6 +"pathval@npm:^2.0.0": + version: 2.0.0 + resolution: "pathval@npm:2.0.0" + checksum: b91575bf9cdf01757afd7b5e521eb8a0b874a49bc972d08e0047cfea0cd3c019f5614521d4bc83d2855e3fcc331db6817dfd533dd8f3d90b16bc76fad2450fc1 languageName: node linkType: hard @@ -13845,9 +13840,9 @@ __metadata: languageName: node linkType: hard -"rollup-plugin-visualizer@npm:5.11.0": - version: 5.11.0 - resolution: "rollup-plugin-visualizer@npm:5.11.0" +"rollup-plugin-visualizer@npm:5.12.0": + version: 5.12.0 + resolution: "rollup-plugin-visualizer@npm:5.12.0" dependencies: open: "npm:^8.4.0" picomatch: "npm:^2.3.1" @@ -13860,7 +13855,7 @@ __metadata: optional: true bin: rollup-plugin-visualizer: dist/bin/cli.js - checksum: 947238aa22706a47a4d3e8ce616855f0e5cb969ed9f61b9a268eaede0a86f461ecb38e27b4e6bf00f4b5e3f63677667f65e0d4af89a659a5160f74add1f192bb + checksum: 47358feb672291d6edcfd94197577c192a84c24cb644119425dae8241fb6f5a52556efd0c501f38b276c07534642a80c0885ef681babb474e83c7b5a3b475b84 languageName: node linkType: hard @@ -15010,15 +15005,15 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:5.3.9, terser-webpack-plugin@npm:^5.3.7": - version: 5.3.9 - resolution: "terser-webpack-plugin@npm:5.3.9" +"terser-webpack-plugin@npm:5.3.10, terser-webpack-plugin@npm:^5.3.7": + version: 5.3.10 + resolution: "terser-webpack-plugin@npm:5.3.10" dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.17" + "@jridgewell/trace-mapping": "npm:^0.3.20" jest-worker: "npm:^27.4.5" schema-utils: "npm:^3.1.1" serialize-javascript: "npm:^6.0.1" - terser: "npm:^5.16.8" + terser: "npm:^5.26.0" peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -15028,7 +15023,7 @@ __metadata: optional: true uglify-js: optional: true - checksum: 339737a407e034b7a9d4a66e31d84d81c10433e41b8eae2ca776f0e47c2048879be482a9aa08e8c27565a2a949bc68f6e07f451bf4d9aa347dd61b3d000f5353 + checksum: fb1c2436ae1b4e983be043fa0a3d355c047b16b68f102437d08c736d7960c001e7420e2f722b9d99ce0dc70ca26a68cc63c0b82bc45f5b48671142b352a9d938 languageName: node linkType: hard @@ -15045,7 +15040,7 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.0.0, terser@npm:^5.15.1, terser@npm:^5.16.8": +"terser@npm:^5.0.0, terser@npm:^5.15.1, terser@npm:^5.26.0": version: 5.26.0 resolution: "terser@npm:5.26.0" dependencies: @@ -15405,7 +15400,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d