Compare commits

..
Author SHA1 Message Date
Paul Bottein a86bab98ad Fix cursor jump when dragging slider 2024-10-14 10:48:34 +02:00
Paul Bottein 8939dd2213 Use 12 columns grid 2024-10-14 10:29:14 +02:00
Paul Bottein fde1bb7d6a Allow to resize card in the grid with more precision 2024-10-11 12:04:14 +02:00
32 changed files with 663 additions and 606 deletions

No files matched your search

+2 -2
View File
@@ -21,7 +21,7 @@ jobs:
url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }}
steps:
- name: Check out files from GitHub
uses: actions/[email protected].1
uses: actions/[email protected].0
with:
ref: dev
@@ -57,7 +57,7 @@ jobs:
url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }}
steps:
- name: Check out files from GitHub
uses: actions/[email protected].1
uses: actions/[email protected].0
with:
ref: master
+7 -7
View File
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
uses: actions/[email protected].1
uses: actions/[email protected].0
- name: Setup Node
uses: actions/[email protected]
with:
@@ -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/[email protected].1
uses: actions/[email protected].0
with:
path: |
node_modules/.cache/prettier
@@ -58,7 +58,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
uses: actions/[email protected].1
uses: actions/[email protected].0
- name: Setup Node
uses: actions/[email protected]
with:
@@ -76,7 +76,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
uses: actions/[email protected].1
uses: actions/[email protected].0
- name: Setup Node
uses: actions/[email protected]
with:
@@ -89,7 +89,7 @@ jobs:
env:
IS_TEST: "true"
- name: Upload bundle stats
uses: actions/[email protected].3
uses: actions/[email protected].0
with:
name: frontend-bundle-stats
path: build/stats/*.json
@@ -100,7 +100,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
uses: actions/[email protected].1
uses: actions/[email protected].0
- name: Setup Node
uses: actions/[email protected]
with:
@@ -113,7 +113,7 @@ jobs:
env:
IS_TEST: "true"
- name: Upload bundle stats
uses: actions/[email protected].3
uses: actions/[email protected].0
with:
name: supervisor-bundle-stats
path: build/stats/*.json
+1 -1
View File
@@ -23,7 +23,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/[email protected].1
uses: actions/[email protected].0
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
+2 -2
View File
@@ -22,7 +22,7 @@ jobs:
url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }}
steps:
- name: Check out files from GitHub
uses: actions/[email protected].1
uses: actions/[email protected].0
with:
ref: dev
@@ -58,7 +58,7 @@ jobs:
url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }}
steps:
- name: Check out files from GitHub
uses: actions/[email protected].1
uses: actions/[email protected].0
with:
ref: master
+1 -1
View File
@@ -16,7 +16,7 @@ jobs:
url: ${{ steps.deploy.outputs.NETLIFY_LIVE_URL || steps.deploy.outputs.NETLIFY_URL }}
steps:
- name: Check out files from GitHub
uses: actions/[email protected].1
uses: actions/[email protected].0
- name: Setup Node
uses: actions/[email protected]
+1 -1
View File
@@ -21,7 +21,7 @@ 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/[email protected].1
uses: actions/[email protected].0
- name: Setup Node
uses: actions/[email protected]
+3 -3
View File
@@ -20,7 +20,7 @@ jobs:
contents: write
steps:
- name: Checkout the repository
uses: actions/[email protected].1
uses: actions/[email protected].0
- name: Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v5
@@ -57,14 +57,14 @@ jobs:
run: tar -czvf translations.tar.gz translations
- name: Upload build artifacts
uses: actions/[email protected].3
uses: actions/[email protected].0
with:
name: wheels
path: dist/home_assistant_frontend*.whl
if-no-files-found: error
- name: Upload translations
uses: actions/[email protected].3
uses: actions/[email protected].0
with:
name: translations
path: translations.tar.gz
+1 -1
View File
@@ -23,7 +23,7 @@ jobs:
contents: write # Required to upload release assets
steps:
- name: Checkout the repository
uses: actions/[email protected].1
uses: actions/[email protected].0
- name: Verify version
uses: home-assistant/actions/helpers/verify-version@master
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/[email protected].1
uses: actions/[email protected].0
- name: Upload Translations
run: |
+12 -12
View File
@@ -35,14 +35,14 @@
"@codemirror/state": "6.4.1",
"@codemirror/view": "6.34.1",
"@egjs/hammerjs": "2.0.17",
"@formatjs/intl-datetimeformat": "6.13.0",
"@formatjs/intl-displaynames": "6.6.9",
"@formatjs/intl-datetimeformat": "6.12.5",
"@formatjs/intl-displaynames": "6.6.8",
"@formatjs/intl-getcanonicallocales": "2.3.0",
"@formatjs/intl-listformat": "7.5.8",
"@formatjs/intl-locale": "4.0.1",
"@formatjs/intl-numberformat": "8.11.0",
"@formatjs/intl-pluralrules": "5.2.15",
"@formatjs/intl-relativetimeformat": "11.2.15",
"@formatjs/intl-listformat": "7.5.7",
"@formatjs/intl-locale": "4.0.0",
"@formatjs/intl-numberformat": "8.10.3",
"@formatjs/intl-pluralrules": "5.2.14",
"@formatjs/intl-relativetimeformat": "11.2.14",
"@fullcalendar/core": "6.1.15",
"@fullcalendar/daygrid": "6.1.15",
"@fullcalendar/interaction": "6.1.15",
@@ -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.6.0",
"intl-messageformat": "10.5.14",
"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,11 +151,11 @@
"xss": "1.0.15"
},
"devDependencies": {
"@babel/core": "7.25.8",
"@babel/core": "7.25.7",
"@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-env": "7.25.7",
"@babel/preset-typescript": "7.25.7",
"@bundle-stats/plugin-webpack-filter": "4.15.1",
"@koa/cors": "5.0.0",
@@ -222,7 +222,7 @@
"lit-analyzer": "2.0.3",
"lodash.merge": "4.6.2",
"lodash.template": "4.5.0",
"magic-string": "0.30.12",
"magic-string": "0.30.11",
"map-stream": "0.0.7",
"mocha": "10.5.0",
"object-hash": "3.0.0",
@@ -240,7 +240,7 @@
"terser-webpack-plugin": "5.3.10",
"transform-async-modules-webpack-plugin": "1.1.1",
"ts-lit-plugin": "2.0.2",
"typescript": "5.6.3",
"typescript": "5.6.2",
"webpack": "5.95.0",
"webpack-cli": "5.1.4",
"webpack-dev-server": "5.1.0",
+1 -1
View File
@@ -1,5 +1,5 @@
[build-system]
requires = ["setuptools~=75.1"]
requires = ["setuptools~=68.0", "wheel~=0.40.0"]
build-backend = "setuptools.build_meta"
[project]
+2 -2
View File
@@ -68,7 +68,7 @@ export class HaGridSizeEditor extends LitElement {
.min=${columnMin}
.max=${columnMax}
.range=${this.columns}
.value=${fullWidth ? this.columns : columnValue}
.value=${fullWidth ? this.columns : this.value?.columns}
@value-changed=${this._valueChanged}
@slider-moved=${this._sliderMoved}
.disabled=${disabledColumns}
@@ -83,7 +83,7 @@ export class HaGridSizeEditor extends LitElement {
.max=${rowMax}
.range=${this.rows}
vertical
.value=${rowValue}
.value=${autoHeight ? rowMin : this.value?.rows}
@value-changed=${this._valueChanged}
@slider-moved=${this._sliderMoved}
.disabled=${disabledRows}
+10 -29
View File
@@ -499,23 +499,8 @@ export class HaServiceControl extends LitElement {
.defaultValue=${this._value?.data}
@value-changed=${this._dataChanged}
></ha-yaml-editor>`
: serviceData?.fields.map((dataField) => {
if (!dataField.fields) {
return this._renderField(
dataField,
hasOptional,
domain,
serviceName,
targetEntities
);
}
const fields = Object.entries(dataField.fields).map(
([key, field]) => ({ key, ...field })
);
return fields.length &&
this._hasFilteredFields(fields, targetEntities)
: serviceData?.fields.map((dataField) =>
dataField.fields
? html`<ha-expansion-panel
leftChevron
.expanded=${!dataField.collapsed}
@@ -546,8 +531,14 @@ export class HaServiceControl extends LitElement {
)
)}
</ha-expansion-panel>`
: nothing;
})} `;
: this._renderField(
dataField,
hasOptional,
domain,
serviceName,
targetEntities
)
)} `;
}
private _getSectionDescription(
@@ -560,16 +551,6 @@ export class HaServiceControl extends LitElement {
);
}
private _hasFilteredFields(
dataFields: ExtHassService["fields"],
targetEntities: string[]
) {
return dataFields.some(
(dataField) =>
!dataField.filter || this._filterField(dataField.filter, targetEntities)
);
}
private _renderField = (
dataField: ExtHassService["fields"][number],
hasOptional: boolean,
+1 -1
View File
@@ -167,7 +167,7 @@ export interface TagTrigger extends BaseTrigger {
export interface TimeTrigger extends BaseTrigger {
trigger: "time";
at: string | { entity_id: string; offset?: string };
at: string;
}
export interface TemplateTrigger extends BaseTrigger {
+7 -17
View File
@@ -8,7 +8,6 @@ import {
import secondsToDuration from "../common/datetime/seconds_to_duration";
import { computeAttributeNameDisplay } from "../common/entity/compute_attribute_display";
import { computeStateName } from "../common/entity/compute_state_name";
import { isValidEntityId } from "../common/entity/valid_entity_id";
import type { HomeAssistant } from "../types";
import { Condition, ForDict, Trigger } from "./automation";
import {
@@ -372,22 +371,13 @@ const tryDescribeTrigger = (
// Time Trigger
if (trigger.trigger === "time" && trigger.at) {
const result = ensureArray(trigger.at).map((at) => {
if (typeof at === "string") {
if (isValidEntityId(at)) {
return `entity ${hass.states[at] ? computeStateName(hass.states[at]) : at}`;
}
return localizeTimeString(at, hass.locale, hass.config);
}
const entityStr = `entity ${hass.states[at.entity_id] ? computeStateName(hass.states[at.entity_id]) : at.entity_id}`;
const offsetStr = at.offset
? " " +
hass.localize(`${triggerTranslationBaseKey}.time.offset_by`, {
offset: describeDuration(hass.locale, at.offset),
})
: "";
return `${entityStr}${offsetStr}`;
});
const result = ensureArray(trigger.at).map((at) =>
typeof at !== "string"
? at
: at.includes(".")
? `entity ${hass.states[at] ? computeStateName(hass.states[at]) : at}`
: localizeTimeString(at, hass.locale, hass.config)
);
return hass.localize(`${triggerTranslationBaseKey}.time.description.full`, {
time: formatListWithOrs(hass.locale, result),
+6 -1
View File
@@ -1,11 +1,16 @@
import type { Condition } from "../../../panels/lovelace/common/validate-condition";
import type { LovelaceLayoutOptions } from "../../../panels/lovelace/types";
import type {
LovelaceGridOptions,
LovelaceLayoutOptions,
} from "../../../panels/lovelace/types";
export interface LovelaceCardConfig {
index?: number;
view_index?: number;
view_layout?: any;
/** @deprecated Use `grid_options` instead */
layout_options?: LovelaceLayoutOptions;
grid_options?: LovelaceGridOptions;
type: string;
[key: string]: any;
visibility?: Condition[];
-4
View File
@@ -17,10 +17,6 @@ export interface LovelaceSectionConfig extends LovelaceBaseSectionConfig {
cards?: LovelaceCardConfig[];
}
export interface LovelaceGridSectionConfig extends LovelaceSectionConfig {
grid_base?: number;
}
export interface LovelaceStrategySectionConfig
extends LovelaceBaseSectionConfig {
strategy: LovelaceStrategyConfig;
@@ -51,7 +51,6 @@ export class HuiPersistentNotificationItem extends LitElement {
static get styles(): CSSResultGroup {
return css`
.time {
position: relative;
display: flex;
justify-content: flex-end;
margin-top: 6px;
@@ -208,7 +208,6 @@ class DialogAddAutomationElement extends LitElement implements HassDialog {
const options: IFuseOptions<ListItem> = {
keys: ["key", "name", "description"],
isCaseSensitive: false,
ignoreLocation: true,
minMatchCharLength: Math.min(filter.length, 2),
threshold: 0.2,
getFn: getStripDiacriticsFn,
@@ -9,9 +9,6 @@ import type { TimeTrigger } from "../../../../../data/automation";
import type { HomeAssistant } from "../../../../../types";
import type { TriggerElement } from "../ha-automation-trigger-row";
const MODE_TIME = "time";
const MODE_ENTITY = "entity";
@customElement("ha-automation-trigger-time")
export class HaTimeTrigger extends LitElement implements TriggerElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -20,60 +17,48 @@ export class HaTimeTrigger extends LitElement implements TriggerElement {
@property({ type: Boolean }) public disabled = false;
@state() private _inputMode:
| undefined
| typeof MODE_TIME
| typeof MODE_ENTITY;
@state() private _inputMode?: boolean;
public static get defaultConfig(): TimeTrigger {
return { trigger: "time", at: "" };
}
private _schema = memoizeOne(
(
localize: LocalizeFunc,
inputMode: typeof MODE_TIME | typeof MODE_ENTITY,
showOffset: boolean
) =>
[
(localize: LocalizeFunc, inputMode?: boolean) => {
const atSelector = inputMode
? {
entity: {
filter: [
{ domain: "input_datetime" },
{ domain: "sensor", device_class: "timestamp" },
],
},
}
: { time: {} };
return [
{
name: "mode",
type: "select",
required: true,
options: [
[
MODE_TIME,
"value",
localize(
"ui.panel.config.automation.editor.triggers.type.time.type_value"
),
],
[
MODE_ENTITY,
"input",
localize(
"ui.panel.config.automation.editor.triggers.type.time.type_input"
),
],
],
},
...(inputMode === MODE_TIME
? ([{ name: "time", selector: { time: {} } }] as const)
: ([
{
name: "entity",
selector: {
entity: {
filter: [
{ domain: "input_datetime" },
{ domain: "sensor", device_class: "timestamp" },
],
},
},
},
] as const)),
...(showOffset
? ([{ name: "offset", selector: { text: {} } }] as const)
: ([] as const)),
] as const
{ name: "at", selector: atSelector },
] as const;
}
);
public willUpdate(changedProperties: PropertyValues) {
@@ -90,46 +75,23 @@ export class HaTimeTrigger extends LitElement implements TriggerElement {
}
}
private _data = memoizeOne(
(
inputMode: undefined | typeof MODE_ENTITY | typeof MODE_TIME,
at:
| string
| { entity_id: string | undefined; offset?: string | undefined }
): {
mode: typeof MODE_TIME | typeof MODE_ENTITY;
entity: string | undefined;
time: string | undefined;
offset: string | undefined;
} => {
const entity =
typeof at === "object"
? at.entity_id
: at?.startsWith("input_datetime.") || at?.startsWith("sensor.")
? at
: undefined;
const time = entity ? undefined : (at as string | undefined);
const offset = typeof at === "object" ? at.offset : undefined;
const mode = inputMode ?? (entity ? MODE_ENTITY : MODE_TIME);
return {
mode,
entity,
time,
offset,
};
}
);
protected render() {
const at = this.trigger.at;
if (Array.isArray(at)) {
return nothing;
}
const data = this._data(this._inputMode, at);
const showOffset =
data.mode === MODE_ENTITY && data.entity?.startsWith("sensor.");
const schema = this._schema(this.hass.localize, data.mode, !!showOffset);
const inputMode =
this._inputMode ??
(at?.startsWith("input_datetime.") || at?.startsWith("sensor."));
const schema = this._schema(this.hass.localize, inputMode);
const data = {
mode: inputMode ? "input" : "value",
...this.trigger,
};
return html`
<ha-form
@@ -145,43 +107,26 @@ export class HaTimeTrigger extends LitElement implements TriggerElement {
private _valueChanged(ev: CustomEvent): void {
ev.stopPropagation();
const newValue = { ...ev.detail.value };
this._inputMode = newValue.mode;
if (newValue.mode === MODE_TIME) {
delete newValue.entity;
delete newValue.offset;
} else {
delete newValue.time;
if (!newValue.entity?.startsWith("sensor.")) {
delete newValue.offset;
}
}
fireEvent(this, "value-changed", {
value: {
...this.trigger,
at: newValue.offset
? {
entity_id: newValue.entity,
offset: newValue.offset,
}
: newValue.entity || newValue.time,
},
});
const newValue = ev.detail.value;
this._inputMode = newValue.mode === "input";
delete newValue.mode;
Object.keys(newValue).forEach((key) =>
newValue[key] === undefined || newValue[key] === ""
? delete newValue[key]
: {}
);
fireEvent(this, "value-changed", { value: newValue });
}
private _computeLabelCallback = (
schema: SchemaUnion<ReturnType<typeof this._schema>>
): string => {
switch (schema.name) {
case "time":
return this.hass.localize(
`ui.panel.config.automation.editor.triggers.type.time.at`
);
}
return this.hass.localize(
): string =>
this.hass.localize(
`ui.panel.config.automation.editor.triggers.type.time.${schema.name}`
);
};
}
declare global {
+28 -13
View File
@@ -83,6 +83,8 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
@state() private _config?: ScriptConfig;
@state() private _idError = false;
@state() private _dirty = false;
@state() private _errors?: string;
@@ -412,18 +414,6 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
this._loadConfig();
}
if (
(changedProps.has("scriptId") || changedProps.has("entityRegistry")) &&
this.scriptId &&
this.entityRegistry
) {
// find entity for when script entity id changed
const entity = this.entityRegistry.find(
(ent) => ent.platform === "script" && ent.unique_id === this.scriptId
);
this._entityId = entity?.entity_id;
}
if (changedProps.has("scriptId") && !this.scriptId && this.hass) {
const initData = getScriptEditorInitData();
this._dirty = !!initData;
@@ -458,6 +448,15 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
}
}
private _setEntityId(id?: string) {
this._entityId = id;
if (this.hass.states[`script.${this._entityId}`]) {
this._idError = true;
} else {
this._idError = false;
}
}
private async _checkValidation() {
this._validationErrors = undefined;
if (!this._entityId || !this._config) {
@@ -767,12 +766,28 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
}
private async _saveScript(): Promise<void> {
if (this._idError) {
showToast(this, {
message: this.hass.localize(
"ui.panel.config.script.editor.id_already_exists_save_error"
),
dismissable: false,
duration: -1,
action: {
action: () => {},
text: this.hass.localize("ui.dialogs.generic.ok"),
},
});
return;
}
if (!this.scriptId) {
const saved = await this._promptScriptAlias();
if (!saved) {
return;
}
this._entityId = this._computeEntityIdFromAlias(this._config!.alias);
const entityId = this._computeEntityIdFromAlias(this._config!.alias);
this._setEntityId(entityId);
}
const id = this.scriptId || this._entityId || Date.now();
@@ -68,16 +68,6 @@ class HaPanelDevAction extends LitElement {
@query("#yaml-editor") private _yamlEditor?: HaYamlEditor;
protected willUpdate() {
if (
!this.hasUpdated &&
this._serviceData?.action &&
typeof this._serviceData.action !== "string"
) {
this._serviceData.action = "";
}
}
protected firstUpdated(params) {
super.firstUpdated(params);
this.hass.loadBackendTranslation("services");
+38 -13
View File
@@ -5,6 +5,7 @@ import { MediaQueriesListener } from "../../../common/dom/media_query";
import "../../../components/ha-svg-icon";
import { LovelaceCardConfig } from "../../../data/lovelace/config/card";
import type { HomeAssistant } from "../../../types";
import { migrateLayoutToGridOptions } from "../common/compute-card-grid-size";
import { computeCardSize } from "../common/compute-card-size";
import {
attachConditionMediaQueriesListeners,
@@ -12,7 +13,7 @@ import {
} from "../common/validate-condition";
import { createCardElement } from "../create-element/create-card-element";
import { createErrorCardConfig } from "../create-element/create-element-base";
import type { LovelaceCard, LovelaceLayoutOptions } from "../types";
import type { LovelaceCard, LovelaceGridOptions } from "../types";
declare global {
interface HASSDomEvents {
@@ -67,20 +68,44 @@ export class HuiCard extends ReactiveElement {
return 1;
}
public getLayoutOptions(): LovelaceLayoutOptions {
const configOptions = this.config?.layout_options ?? {};
if (this._element) {
const cardOptions = this._element.getLayoutOptions?.() ?? {};
return {
...cardOptions,
...configOptions,
};
}
return configOptions;
public getGridOptions(): LovelaceGridOptions {
const elementOptions = this.getElementGridOptions();
const configOptions = this.getConfigGridOptions();
return {
...elementOptions,
...configOptions,
};
}
public getElementLayoutOptions(): LovelaceLayoutOptions {
return this._element?.getLayoutOptions?.() ?? {};
// options provided by the element
public getElementGridOptions(): LovelaceGridOptions {
if (!this._element) return {};
if (this._element.getGridOptions) {
return this._element.getGridOptions();
}
if (this._element.getLayoutOptions) {
// eslint-disable-next-line no-console
console.warn(
`This card (${this.config?.type}) is using "getLayoutOptions" and it is deprecated, contact the developer to suggest to use "getGridOptions" instead`
);
const config = migrateLayoutToGridOptions(
this._element.getLayoutOptions()
);
return config;
}
return {};
}
// options provided by the config
public getConfigGridOptions(): LovelaceGridOptions {
if (this.config?.grid_options) {
return this.config.grid_options;
}
if (this.config?.layout_options) {
return migrateLayoutToGridOptions(this.config.layout_options);
}
return {};
}
private _updateElement(config: LovelaceCardConfig) {
@@ -1,8 +1,34 @@
import { conditionalClamp } from "../../../common/number/clamp";
import { LovelaceLayoutOptions } from "../types";
import { LovelaceGridOptions, LovelaceLayoutOptions } from "../types";
const GRID_COLUMN_MULTIPLIER = 3;
const multiplyBy = <T extends number | string | undefined>(
value: T,
multiplier: number
): T => (typeof value === "number" ? ((value * multiplier) as T) : value);
export const migrateLayoutToGridOptions = (
options: LovelaceLayoutOptions
): LovelaceGridOptions => {
const gridOptions: LovelaceGridOptions = {
columns: multiplyBy(options.grid_columns, GRID_COLUMN_MULTIPLIER),
max_columns: multiplyBy(options.grid_max_columns, GRID_COLUMN_MULTIPLIER),
min_columns: multiplyBy(options.grid_min_columns, GRID_COLUMN_MULTIPLIER),
rows: options.grid_rows,
max_rows: options.grid_max_rows,
min_rows: options.grid_min_rows,
};
for (const [key, value] of Object.entries(gridOptions)) {
if (value === undefined) {
delete gridOptions[key];
}
}
return gridOptions;
};
export const DEFAULT_GRID_SIZE = {
columns: 4,
columns: 12,
rows: "auto",
} as CardGridSize;
@@ -12,14 +38,14 @@ export type CardGridSize = {
};
export const computeCardGridSize = (
options: LovelaceLayoutOptions
options: LovelaceGridOptions
): CardGridSize => {
const rows = options.grid_rows ?? DEFAULT_GRID_SIZE.rows;
const columns = options.grid_columns ?? DEFAULT_GRID_SIZE.columns;
const minRows = options.grid_min_rows;
const maxRows = options.grid_max_rows;
const minColumns = options.grid_min_columns;
const maxColumns = options.grid_max_columns;
const rows = options.rows ?? DEFAULT_GRID_SIZE.rows;
const columns = options.columns ?? DEFAULT_GRID_SIZE.columns;
const minRows = options.min_rows;
const maxRows = options.max_rows;
const minColumns = options.min_columns;
const maxColumns = options.max_columns;
const clampedRows =
typeof rows === "string" ? rows : conditionalClamp(rows, minRows, maxRows);
@@ -3,15 +3,12 @@ import "@material/mwc-tab/mwc-tab";
import { CSSResultGroup, TemplateResult, css, html, nothing } from "lit";
import { customElement, property, state } from "lit/decorators";
import { LovelaceCardConfig } from "../../../../data/lovelace/config/card";
import {
LovelaceGridSectionConfig,
LovelaceSectionConfig,
} from "../../../../data/lovelace/config/section";
import { getCardElementClass } from "../../create-element/create-card-element";
import type { LovelaceCardEditor, LovelaceConfigForm } from "../../types";
import { HuiTypedElementEditor } from "../hui-typed-element-editor";
import "./hui-card-layout-editor";
import "./hui-card-visibility-editor";
import { LovelaceSectionConfig } from "../../../../data/lovelace/config/section";
const tabs = ["config", "visibility", "layout"] as const;
@@ -62,7 +59,7 @@ export class HuiCardElementEditor extends HuiTypedElementEditor<LovelaceCardConf
protected renderConfigElement(): TemplateResult {
const displayedTabs: string[] = ["config"];
if (this.showVisibilityTab) displayedTabs.push("visibility");
if (this.sectionConfig?.type === "grid") displayedTabs.push("layout");
if (this._showLayoutTab) displayedTabs.push("layout");
if (displayedTabs.length === 1) return super.renderConfigElement();
@@ -86,8 +83,8 @@ export class HuiCardElementEditor extends HuiTypedElementEditor<LovelaceCardConf
<hui-card-layout-editor
.hass=${this.hass}
.config=${this.value}
.sectionConfig=${this.sectionConfig!}
@value-changed=${this._configChanged}
.sectionConfig=${this.sectionConfig as LovelaceGridSectionConfig}
>
</hui-card-layout-editor>
`;
@@ -1,7 +1,7 @@
import type { ActionDetail } from "@material/mwc-list";
import { mdiCheck, mdiDotsVertical } from "@mdi/js";
import { css, html, LitElement, nothing, PropertyValues } from "lit";
import { customElement, property, query, state } from "lit/decorators";
import { customElement, property, state } from "lit/decorators";
import { styleMap } from "lit/directives/style-map";
import memoizeOne from "memoize-one";
import { fireEvent } from "../../../../common/dom/fire_event";
@@ -17,21 +17,17 @@ import "../../../../components/ha-slider";
import "../../../../components/ha-svg-icon";
import "../../../../components/ha-switch";
import "../../../../components/ha-yaml-editor";
import type { HaYamlEditor } from "../../../../components/ha-yaml-editor";
import { LovelaceCardConfig } from "../../../../data/lovelace/config/card";
import {
LovelaceGridSectionConfig,
LovelaceSectionConfig,
} from "../../../../data/lovelace/config/section";
import { LovelaceSectionConfig } from "../../../../data/lovelace/config/section";
import { haStyle } from "../../../../resources/styles";
import { HomeAssistant } from "../../../../types";
import { HuiCard } from "../../cards/hui-card";
import {
CardGridSize,
computeCardGridSize,
migrateLayoutToGridOptions,
} from "../../common/compute-card-grid-size";
import { DEFAULT_GRID_BASE } from "../../sections/hui-grid-section";
import { LovelaceLayoutOptions } from "../../types";
import { LovelaceGridOptions } from "../../types";
@customElement("hui-card-layout-editor")
export class HuiCardLayoutEditor extends LitElement {
@@ -41,21 +37,16 @@ export class HuiCardLayoutEditor extends LitElement {
@property({ attribute: false }) public sectionConfig!: LovelaceSectionConfig;
@state() _defaultLayoutOptions?: LovelaceLayoutOptions;
@state() _defaultGridOptions?: LovelaceGridOptions;
@state() public _yamlMode = false;
@state() public _uiAvailable = true;
@query("ha-yaml-editor") private _yamlEditor?: HaYamlEditor;
private _cardElement?: HuiCard;
private _mergedOptions = memoizeOne(
(
options?: LovelaceLayoutOptions,
defaultOptions?: LovelaceLayoutOptions
) => ({
(options?: LovelaceGridOptions, defaultOptions?: LovelaceGridOptions) => ({
...defaultOptions,
...options,
})
@@ -64,22 +55,30 @@ export class HuiCardLayoutEditor extends LitElement {
private _computeCardGridSize = memoizeOne(computeCardGridSize);
private _isDefault = memoizeOne(
(options?: LovelaceLayoutOptions) =>
options?.grid_columns === undefined && options?.grid_rows === undefined
(options?: LovelaceGridOptions) =>
options?.columns === undefined && options?.rows === undefined
);
private _configGridOptions = (config: LovelaceCardConfig) => {
if (config.grid_options) {
return config.grid_options;
}
if (config.layout_options) {
return migrateLayoutToGridOptions(config.layout_options);
}
return {};
};
render() {
const configGridOptions = this._configGridOptions(this.config);
const options = this._mergedOptions(
this.config.layout_options,
this._defaultLayoutOptions
configGridOptions,
this._defaultGridOptions
);
const value = this._computeCardGridSize(options);
const totalColumns =
(this.sectionConfig.column_span ?? 1) *
((this.sectionConfig as LovelaceGridSectionConfig).grid_base ||
DEFAULT_GRID_BASE);
const totalColumns = (this.sectionConfig.column_span ?? 1) * 12;
return html`
<div class="header">
@@ -137,24 +136,24 @@ export class HuiCardLayoutEditor extends LitElement {
? html`
<ha-yaml-editor
.hass=${this.hass}
.defaultValue=${this.config.layout_options}
.defaultValue=${configGridOptions}
@value-changed=${this._valueChanged}
></ha-yaml-editor>
`
: html`
<ha-grid-size-picker
style=${styleMap({
"max-width": `${totalColumns * 45 + 50}px`,
"max-width": `${totalColumns * 20 + 50}px`,
})}
.columns=${totalColumns}
.hass=${this.hass}
.value=${value}
.isDefault=${this._isDefault(this.config.layout_options)}
.isDefault=${this._isDefault(configGridOptions)}
@value-changed=${this._gridSizeChanged}
.rowMin=${options.grid_min_rows}
.rowMax=${options.grid_max_rows}
.columnMin=${options.grid_min_columns}
.columnMax=${options.grid_max_columns}
.rowMin=${options.min_rows}
.rowMax=${options.max_rows}
.columnMin=${options.min_columns}
.columnMax=${options.max_columns}
></ha-grid-size-picker>
<ha-settings-row>
<span slot="heading" data-for="full-width">
@@ -174,6 +173,19 @@ export class HuiCardLayoutEditor extends LitElement {
>
</ha-switch>
</ha-settings-row>
<ha-settings-row>
<span slot="heading" data-for="full-width">
${this.hass.localize(
"ui.panel.lovelace.editor.edit_card.layout.precision_mode"
)}
</span>
<span slot="description" data-for="full-width">
${this.hass.localize(
"ui.panel.lovelace.editor.edit_card.layout.precision_mode_helper"
)}
</span>
<ha-switch name="full-precision_mode"> </ha-switch>
</ha-settings-row>
`}
`;
}
@@ -187,11 +199,10 @@ export class HuiCardLayoutEditor extends LitElement {
this._cardElement.config = this.config;
this._cardElement.addEventListener("card-updated", (ev: Event) => {
ev.stopPropagation();
this._defaultLayoutOptions =
this._cardElement?.getElementLayoutOptions();
this._defaultGridOptions = this._cardElement?.getElementGridOptions();
});
this._cardElement.load();
this._defaultLayoutOptions = this._cardElement.getElementLayoutOptions();
this._defaultGridOptions = this._cardElement.getElementGridOptions();
} catch (err) {
// eslint-disable-next-line no-console
console.error(err);
@@ -218,53 +229,49 @@ export class HuiCardLayoutEditor extends LitElement {
case 1:
this._yamlMode = true;
break;
case 2:
this._reset();
break;
}
}
private async _reset() {
const newConfig = { ...this.config };
delete newConfig.layout_options;
this._yamlEditor?.setValue({});
fireEvent(this, "value-changed", { value: newConfig });
}
private _gridSizeChanged(ev: CustomEvent): void {
ev.stopPropagation();
const value = ev.detail.value as CardGridSize;
const newConfig: LovelaceCardConfig = {
...this.config,
layout_options: {
...this.config.layout_options,
grid_columns: value.columns,
grid_rows: value.rows,
grid_options: {
...this.config.grid_options,
columns: value.columns,
rows: value.rows,
},
};
if (newConfig.layout_options!.grid_columns === undefined) {
delete newConfig.layout_options!.grid_columns;
}
if (newConfig.layout_options!.grid_rows === undefined) {
delete newConfig.layout_options!.grid_rows;
}
if (Object.keys(newConfig.layout_options!).length === 0) {
delete newConfig.layout_options;
}
this._updateValue(newConfig);
}
fireEvent(this, "value-changed", { value: newConfig });
private _updateValue(value: LovelaceCardConfig): void {
if (value.grid_options!.columns === undefined) {
delete value.grid_options!.columns;
}
if (value.grid_options!.rows === undefined) {
delete value.grid_options!.rows;
}
if (Object.keys(value.grid_options!).length === 0) {
delete value.grid_options;
}
if (value.layout_options) {
delete value.layout_options;
}
fireEvent(this, "value-changed", { value });
}
private _valueChanged(ev: CustomEvent): void {
ev.stopPropagation();
const options = ev.detail.value as LovelaceLayoutOptions;
const options = ev.detail.value as LovelaceGridOptions;
const newConfig: LovelaceCardConfig = {
...this.config,
layout_options: options,
grid_options: options,
};
fireEvent(this, "value-changed", { value: newConfig });
this._updateValue(newConfig);
}
private _fullWidthChanged(ev): void {
@@ -272,14 +279,12 @@ export class HuiCardLayoutEditor extends LitElement {
const value = ev.target.checked;
const newConfig: LovelaceCardConfig = {
...this.config,
layout_options: {
...this.config.layout_options,
grid_columns: value
? "full"
: (this._defaultLayoutOptions?.grid_min_columns ?? 1),
grid_options: {
...this.config.grid_options,
columns: value ? "full" : (this._defaultGridOptions?.min_columns ?? 1),
},
};
fireEvent(this, "value-changed", { value: newConfig });
this._updateValue(newConfig);
}
static styles = [
@@ -1,4 +1,4 @@
import { html, LitElement } from "lit";
import { LitElement, html } from "lit";
import { customElement, property } from "lit/decorators";
import memoizeOne from "memoize-one";
import { fireEvent } from "../../../../common/dom/fire_event";
@@ -6,21 +6,12 @@ import {
HaFormSchema,
SchemaUnion,
} from "../../../../components/ha-form/types";
import {
isStrategySection,
LovelaceGridSectionConfig,
LovelaceSectionRawConfig,
} from "../../../../data/lovelace/config/section";
import { LovelaceSectionRawConfig } from "../../../../data/lovelace/config/section";
import { LovelaceViewConfig } from "../../../../data/lovelace/config/view";
import { HomeAssistant } from "../../../../types";
import { LocalizeFunc } from "../../../../common/translations/localize";
import { DEFAULT_GRID_BASE } from "../../sections/hui-grid-section";
type GridDensity = "default" | "dense" | "custom";
type SettingsData = {
column_span?: number;
grid_density?: GridDensity;
};
@customElement("hui-section-settings-editor")
@@ -32,89 +23,27 @@ export class HuiDialogEditSection extends LitElement {
@property({ attribute: false }) public viewConfig!: LovelaceViewConfig;
private _schema = memoizeOne(
(
maxColumns: number,
localize: LocalizeFunc,
type?: string | undefined,
columnDensity?: GridDensity,
columnBase?: number
) =>
(maxColumns: number) =>
[
{
name: "title",
selector: { text: {} },
name: "column_span",
selector: {
number: {
min: 1,
max: maxColumns,
slider_ticks: true,
},
},
},
...(type === "grid"
? ([
{
name: "grid_density",
default: "default",
selector: {
select: {
mode: "list",
options: [
{
label: localize(
`ui.panel.lovelace.editor.edit_section.settings.grid_density_options.default`,
{ count: 4 }
),
value: "default",
},
{
label: localize(
`ui.panel.lovelace.editor.edit_section.settings.grid_density_options.dense`,
{ count: 6 }
),
value: "dense",
},
...(columnDensity === "custom" && columnBase
? [
{
label: localize(
`ui.panel.lovelace.editor.edit_section.settings.grid_density_options.custom`,
{ count: columnBase }
),
value: "custom",
},
]
: []),
],
},
},
},
] as const satisfies readonly HaFormSchema[])
: []),
] as const satisfies HaFormSchema[]
);
private _isGridSectionConfig(
config: LovelaceSectionRawConfig
): config is LovelaceGridSectionConfig {
return !isStrategySection(config) && config.type === "grid";
}
render() {
const gridBase = this._isGridSectionConfig(this.config)
? this.config.grid_base || DEFAULT_GRID_BASE
: undefined;
const columnDensity =
gridBase === 6 ? "dense" : gridBase === 4 ? "default" : "custom";
const data: SettingsData = {
column_span: this.config.column_span || 1,
grid_density: columnDensity,
};
const type = "type" in this.config ? this.config.type : undefined;
const schema = this._schema(
this.viewConfig.max_columns || 4,
this.hass.localize,
type,
columnDensity,
gridBase
);
const schema = this._schema(this.viewConfig.max_columns || 4);
return html`
<ha-form
@@ -146,26 +75,11 @@ export class HuiDialogEditSection extends LitElement {
ev.stopPropagation();
const newData = ev.detail.value as SettingsData;
const { column_span, grid_density } = newData;
const newConfig: LovelaceSectionRawConfig = {
...this.config,
column_span: column_span,
column_span: newData.column_span,
};
if (this._isGridSectionConfig(newConfig)) {
const gridBase =
grid_density === "default"
? 4
: grid_density === "dense"
? 6
: undefined;
if (gridBase) {
(newConfig as LovelaceGridSectionConfig).grid_base = gridBase;
}
}
fireEvent(this, "value-changed", { value: newConfig });
}
}
@@ -4,5 +4,6 @@ export const baseLovelaceCardConfig = object({
type: string(),
view_layout: any(),
layout_options: any(),
grid_options: any(),
visibility: any(),
});
@@ -8,7 +8,7 @@ import { fireEvent } from "../../../common/dom/fire_event";
import type { HaSortableOptions } from "../../../components/ha-sortable";
import { LovelaceSectionElement } from "../../../data/lovelace";
import { LovelaceCardConfig } from "../../../data/lovelace/config/card";
import type { LovelaceGridSectionConfig } from "../../../data/lovelace/config/section";
import type { LovelaceSectionConfig } from "../../../data/lovelace/config/section";
import { haStyle } from "../../../resources/styles";
import type { HomeAssistant } from "../../../types";
import { HuiCard } from "../cards/hui-card";
@@ -24,8 +24,6 @@ const CARD_SORTABLE_OPTIONS: HaSortableOptions = {
invertedSwapThreshold: 0.7,
} as HaSortableOptions;
export const DEFAULT_GRID_BASE = 4;
export class GridSection extends LitElement implements LovelaceSectionElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -39,11 +37,11 @@ export class GridSection extends LitElement implements LovelaceSectionElement {
@property({ attribute: false }) public cards: HuiCard[] = [];
@state() _config?: LovelaceGridSectionConfig;
@state() _config?: LovelaceSectionConfig;
@state() _dragging = false;
public setConfig(config: LovelaceGridSectionConfig): void {
public setConfig(config: LovelaceSectionConfig): void {
this._config = config;
}
@@ -66,8 +64,6 @@ export class GridSection extends LitElement implements LovelaceSectionElement {
const editMode = Boolean(this.lovelace?.editMode && !this.isStrategy);
const columnCount = this._config.grid_base ?? DEFAULT_GRID_BASE;
return html`
<ha-sortable
.disabled=${!editMode}
@@ -81,19 +77,16 @@ export class GridSection extends LitElement implements LovelaceSectionElement {
.options=${CARD_SORTABLE_OPTIONS}
invert-swap
>
<div
class="container ${classMap({ "edit-mode": editMode })}"
style=${styleMap({ "--column-count": columnCount })}
>
<div class="container ${classMap({ "edit-mode": editMode })}">
${repeat(
cardsConfig,
(cardConfig) => this._getKey(cardConfig),
(_cardConfig, idx) => {
const card = this.cards![idx];
card.layout = "grid";
const layoutOptions = card.getLayoutOptions();
const gridOptions = card.getGridOptions();
const { rows, columns } = computeCardGridSize(layoutOptions);
const { rows, columns } = computeCardGridSize(gridOptions);
return html`
<div
@@ -103,7 +96,7 @@ export class GridSection extends LitElement implements LovelaceSectionElement {
"--row-size": typeof rows === "number" ? rows : undefined,
})}
class="card ${classMap({
"fit-rows": typeof layoutOptions?.grid_rows === "number",
"fit-rows": typeof rows === "number",
"full-width": columns === "full",
})}"
>
@@ -172,6 +165,7 @@ export class GridSection extends LitElement implements LovelaceSectionElement {
haStyle,
css`
:host {
--base-column-count: 12;
--row-gap: var(--ha-section-grid-row-gap, 8px);
--column-gap: var(--ha-section-grid-column-gap, 8px);
--row-height: var(--ha-section-grid-row-height, 56px);
@@ -181,7 +175,7 @@ export class GridSection extends LitElement implements LovelaceSectionElement {
}
.container {
--grid-column-count: calc(
var(--column-count, 4) * var(--column-span, 1)
var(--base-column-count) * var(--column-span, 1)
);
display: grid;
grid-template-columns: repeat(
@@ -236,8 +230,8 @@ export class GridSection extends LitElement implements LovelaceSectionElement {
.add {
outline: none;
grid-row: span var(--row-size, 1);
grid-column: span var(--column-size, 2);
grid-row: span 1;
grid-column: span 6;
background: none;
cursor: pointer;
border-radius: var(--ha-card-border-radius, 12px);
+11
View File
@@ -51,12 +51,23 @@ export type LovelaceLayoutOptions = {
grid_max_rows?: number;
};
export type LovelaceGridOptions = {
columns?: number | "full";
rows?: number | "auto";
max_columns?: number;
min_columns?: number;
min_rows?: number;
max_rows?: number;
};
export interface LovelaceCard extends HTMLElement {
hass?: HomeAssistant;
preview?: boolean;
layout?: string;
getCardSize(): number | Promise<number>;
/** @deprecated Use `getGridOptions` instead */
getLayoutOptions?(): LovelaceLayoutOptions;
getGridOptions?(): LovelaceGridOptions;
setConfig(config: LovelaceCardConfig): void;
}
+9 -13
View File
@@ -2811,7 +2811,7 @@
"migrate": "Migrate",
"duplicate": "[%key:ui::common::duplicate%]",
"take_control": "Take control",
"confirm_take_control": "You are viewing a preview of the automation config, do you want to take control?",
"confirm_take_control": "Your are viewing a preview of the automation config, do you want to take control?",
"run": "[%key:ui::panel::config::automation::editor::actions::run%]",
"rename": "[%key:ui::panel::config::automation::editor::triggers::rename%]",
"show_trace": "Traces",
@@ -3054,9 +3054,6 @@
"type_input": "Value of a date/time helper or timestamp-class sensor",
"label": "Time",
"at": "At time",
"offset": "[%key:ui::panel::config::automation::editor::triggers::type::sun::offset%]",
"entity": "Entity with timestamp",
"offset_by": "offset by {offset}",
"mode": "Mode",
"description": {
"picker": "At a specific time, or on a specific date.",
@@ -3688,13 +3685,16 @@
"editor": {
"alias": "Name",
"icon": "Icon",
"id": "Entity ID",
"id_already_exists_save_error": "You can't save this script because the ID is not unique, pick another ID or leave it blank to automatically generate one.",
"id_already_exists": "This ID already exists",
"introduction": "Use scripts to run a sequence of actions.",
"show_trace": "[%key:ui::panel::config::automation::editor::show_trace%]",
"show_info": "[%key:ui::panel::config::automation::editor::show_info%]",
"rename": "[%key:ui::panel::config::automation::editor::triggers::rename%]",
"change_mode": "[%key:ui::panel::config::automation::editor::change_mode%]",
"take_control": "[%key:ui::panel::config::automation::editor::take_control%]",
"confirm_take_control": "You are viewing a preview of the script config, do you want to take control?",
"confirm_take_control": "Your are viewing a preview of the script config, do you want to take control?",
"read_only": "This script cannot be edited from the UI, because it is not stored in the ''scripts.yaml'' file.",
"unavailable": "Script is unavailable",
"migrate": "Migrate",
@@ -5645,7 +5645,9 @@
},
"layout": {
"full_width": "Full width card",
"full_width_helper": "Take up the full width of the section whatever its size"
"full_width_helper": "Take up the full width of the section whatever its size",
"precision_mode": "Precision mode",
"precision_mode_helper": "Change the card width with precision without limits"
}
},
"edit_badge": {
@@ -5714,13 +5716,7 @@
"title": "Title",
"title_helper": "The title will appear at the top of section. Leave empty to hide the title.",
"column_span": "Width",
"column_span_helper": "Larger sections will be made smaller to fit the display. (e.g. on mobile devices)",
"grid_density": "Grid density",
"grid_density_options": {
"default": "Default ({count} columns)",
"dense": "Dense ({count} columns)",
"custom": "Custom ({count} {count, plural,\n one {column}\n other {columns}\n})"
}
"column_span_helper": "Larger sections will be made smaller to fit the display. (e.g. on mobile devices)"
},
"visibility": {
"explanation": "The section will be shown when ALL conditions below are fulfilled. If no conditions are set, the section will always be shown."
+341 -173
View File
@@ -38,16 +38,16 @@ __metadata:
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.7":
version: 7.25.7
resolution: "@babel/compat-data@npm:7.25.7"
checksum: 10/8fdc451e0ed9e22d1324d504b84d4452ba6f4a806b0f5c364996ee4c2a77293f79ecf4da03033acb625c90bac115c61617eb6c894c2b88486724bcbe3af1a6eb
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.25.7, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.0, @babel/core@npm:^7.24.4":
version: 7.25.7
resolution: "@babel/core@npm:7.25.7"
dependencies:
"@ampproject/remapping": "npm:^2.2.0"
"@babel/code-frame": "npm:^7.25.7"
@@ -55,16 +55,16 @@ __metadata:
"@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/parser": "npm:^7.25.7"
"@babel/template": "npm:^7.25.7"
"@babel/traverse": "npm:^7.25.7"
"@babel/types": "npm:^7.25.8"
"@babel/types": "npm:^7.25.7"
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/f5fb7fb1e3ce357485cb33fe7984051a2d416472370b33144ae809df86a4663192b58cf0d828d40674d30f485790f3dd5aaf72eb659487673a4dc4be47cb3575
languageName: node
linkType: hard
@@ -200,7 +200,7 @@ __metadata:
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":
"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @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, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
version: 7.25.7
resolution: "@babel/helper-plugin-utils@npm:7.25.7"
checksum: 10/e1b0ea5e67b05378d6360e3fc370e99bfb247eed9f68145b5cce541da703424e1887fb6fc60ab2f7f743c72dcbfbed79d3032af43f2c251c229c734dc2572a5b
@@ -307,14 +307,14 @@ __metadata:
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"
"@babel/parser@npm:^7.23.5, @babel/parser@npm:^7.25.7":
version: 7.25.7
resolution: "@babel/parser@npm:7.25.7"
dependencies:
"@babel/types": "npm:^7.25.8"
"@babel/types": "npm:^7.25.7"
bin:
parser: ./bin/babel-parser.js
checksum: 10/0396eb71e379903cedb43862f84ebb1bec809c41e82b4894d2e6e83b8e8bc636ba6eff45382e615baefdb2399ede76ca82247ecc3a9877ac16eb3140074a3276
checksum: 10/98eaa81bd378734a5f2790f02c7c076ecaba0839217445b4b84f45a7b391d640c34034253231a5bb2b2daf8204796f03584c3f94c10d46b004369bbb426a418f
languageName: node
linkType: hard
@@ -399,6 +399,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-syntax-async-generators@npm:^7.8.4":
version: 7.8.4
resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.8.0"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367
languageName: node
linkType: hard
"@babel/plugin-syntax-class-properties@npm:^7.12.13":
version: 7.12.13
resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13"
@@ -410,6 +421,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-syntax-class-static-block@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.14.5"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948
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"
@@ -421,6 +443,28 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-syntax-dynamic-import@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.8.0"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd
languageName: node
linkType: hard
"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.8.3"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a
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"
@@ -443,6 +487,28 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-syntax-import-meta@npm:^7.10.4":
version: 7.10.4
resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.10.4"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b
languageName: node
linkType: hard
"@babel/plugin-syntax-json-strings@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.8.0"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a
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"
@@ -454,7 +520,84 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-syntax-top-level-await@npm:^7.12.1":
"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4":
version: 7.10.4
resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.10.4"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886
languageName: node
linkType: hard
"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.8.0"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1
languageName: node
linkType: hard
"@babel/plugin-syntax-numeric-separator@npm:^7.10.4":
version: 7.10.4
resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.10.4"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1
languageName: node
linkType: hard
"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.8.0"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf
languageName: node
linkType: hard
"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.8.0"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9
languageName: node
linkType: hard
"@babel/plugin-syntax-optional-chaining@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.8.0"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30
languageName: node
linkType: hard
"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.14.5"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda
languageName: node
linkType: hard
"@babel/plugin-syntax-top-level-await@npm:^7.12.1, @babel/plugin-syntax-top-level-await@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5"
dependencies:
@@ -499,16 +642,17 @@ __metadata:
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.7"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/helper-remap-async-to-generator": "npm:^7.25.7"
"@babel/plugin-syntax-async-generators": "npm:^7.8.4"
"@babel/traverse": "npm:^7.25.7"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/ab3f74664fc03af357e8450711de60ec77149be668059dbc0c0d616d85253117aec0e5ffb2eccda3449d0099d5fba5ef32f0e6e12a52af5f72fbca437372ece5
checksum: 10/f5e14796bcb04db7f045833d695e49bb1178162c74754f67f25fd6934ebbd0e57a59784d76a23b3f472bbd3e5a0c33d433ab60e7c6a5c7ca240b54d8ca231baa
languageName: node
linkType: hard
@@ -559,15 +703,16 @@ __metadata:
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.25.7":
version: 7.25.7
resolution: "@babel/plugin-transform-class-static-block@npm:7.25.7"
dependencies:
"@babel/helper-create-class-features-plugin": "npm:^7.25.7"
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/plugin-syntax-class-static-block": "npm:^7.14.5"
peerDependencies:
"@babel/core": ^7.12.0
checksum: 10/160d5f9d1dbe4dc12c2998227b51b1ccfe9f4d11b1031d0698f34403961d5b9bb995cc86acf1855102b9be365370c97d8cea243802b73c7ba7b2b18b2ac3aae9
checksum: 10/d6fa7132071860d4b6e58baa43c8efdd241d5b4ff3d31b0b6593390c7b39bf17ab549e427c08db550c84b0fb02eaad41fc96c2d299fbee4c0a6030315b0a5296
languageName: node
linkType: hard
@@ -645,14 +790,15 @@ __metadata:
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.7"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/plugin-syntax-dynamic-import": "npm:^7.8.3"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/cf2c105143461876f418d21893ac8f7f2b0a3c3cefb4374c3cd6338a19d3a0deed3565049f7436b94452c6471622958ef9248c7bdfeb34d2917710ac74431203
checksum: 10/a153f2a8b10a733f884a0ba0e680387d0ba643d40774885c26cceef90cc61b8e2f946a64e1764605189498a9a04e1d4da4e886c3e26a850e7c4e5ea5fb4b3f50
languageName: node
linkType: hard
@@ -668,14 +814,15 @@ __metadata:
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.7"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/439aac4ca1c7dbb63f021142e7abcd746049bf0d44cc5d2eb469ae3b75d90e076a43ff77190b74d8139402b53eea625b08c68651d3ce1d0a0915f5643450b3de
checksum: 10/e3ec589906380d1daa3349c358f8a56c9adc1c5003b4069321172e1e8160f2a497e9ae112ad1ac68e26dce33eb19019932cf938ad411493441ad202db0e72c2b
languageName: node
linkType: hard
@@ -704,14 +851,15 @@ __metadata:
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-json-strings@npm:7.25.7"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/plugin-syntax-json-strings": "npm:^7.8.3"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/adbc6a5a77b96db0f7e168c5fd2e56941df649808ce960f12447c1ba5d3893e9d458e7e14e3a5bd725ac5f3432ac1b3cf62b7413bbf7168a7c656dce51db711a
checksum: 10/99e7b19d5b8f0df78eb2eaef2c1c8734e634b08910b47d5c2f61e43e75bd94a9f8e51c8baf2d2fa181bf0a7424c08b0aee29a95ae5f9e59f50e51e188dc943a1
languageName: node
linkType: hard
@@ -726,14 +874,15 @@ __metadata:
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.7"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/7af0e4ad63c1a59f24894b64330040966204963b75287752a2d56703c7924d3a883a3c2497e1f03c4b1792f8664e0650cf6687010dc5483444c077de1daae9f5
checksum: 10/28d00bae5637564243585e4fa044b9bc1da4b5c2ac2859e848e2db5f1c11c24dbc1ecc690755a00f593815a40d9cd99df2b31110ab68626840b22598ecf08d93
languageName: node
linkType: hard
@@ -822,38 +971,41 @@ __metadata:
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.7"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/d742fedc1abf404d7f40065cdff9afc521236607f0d06c48d1e471f43d3a7471010d1651ba4758d80c73347a39dc278d86c43a9c814382ded4e9c7c519ace021
checksum: 10/af4d2d17eb0bdfa4a0414eb02a402f65226363ea3cc6d781028fd0051893918eeb3cf13aaceef8ef58ef35b36362dbcc25cd018e0c24b5b441226e086bf3b58f
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.7"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/plugin-syntax-numeric-separator": "npm:^7.10.4"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/e27779a309dbc5fdba71d7eae0eac5506547632b0cbf8f0add8215797bbda4f4e61595750236fee3292600cc2d13892f133beccc52b2998534e0b10c668db857
checksum: 10/963ff47d27b7e61e0b346a29e2ff86ccf4fb779f7069b54c09e93376e6ed769523d81b9ef4ef60ae2d8fe35f3411a25d4b2e8d0a23850afa821f47f33c7b510c
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.7"
dependencies:
"@babel/helper-compilation-targets": "npm:^7.25.7"
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3"
"@babel/plugin-transform-parameters": "npm:^7.25.7"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/38f0fab8321a0b1e44784b7371f8bd5601eb885a7e9d88d7904dedda33a72f500d84792758c47e1541336c1b7592b6d956a85c2fd8e2e294f34c0303cc73442c
checksum: 10/b831c56921cb4818956941fd6eb54ba75fa51e5e5c1dc00466d70c79fea2a73d166a6ff02e8a27d63e40238de49f966af2bd243a8b6d281f784672f1a285d47c
languageName: node
linkType: hard
@@ -869,26 +1021,28 @@ __metadata:
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.7"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/9ecf32accc5b12b83ce2f6537c9eac87f2b0f89abfe91a8a8c87ea5ece05820988415271d0fdaf7f565e2c0c837afb24fc644779029b98b1401782d9c0d73642
checksum: 10/b195680e047bd2e0e36debfb75e5649f0fd8c88185e33c627c5418c68f9990cb4d96faccfbf47a2fdf9ff848a9e013ca077647616aa9dc1f78fa250ef1521437
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.7"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7"
"@babel/plugin-syntax-optional-chaining": "npm:^7.8.3"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/ffb5d81e6dbb28907d5346c8e12a1ed1ea0e30170fbe609d48d0466cdbc9d11b5774c8781682693f7cf7bd39da6111980e54813af96c6b3086dc769369c67d28
checksum: 10/9c0a742eb3111f250b95065cd7d27b31c724d3f3c29b1de3c6655632172f69d5aa658d3ebff76d3b530b6792b6f4cf4845f4132ac8a1fea6e57ff19e3ec6f531
languageName: node
linkType: hard
@@ -915,16 +1069,17 @@ __metadata:
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.7":
version: 7.25.7
resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.7"
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/plugin-syntax-private-property-in-object": "npm:^7.14.5"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/c612023879930c951e3a993104bbc3b78169aef6c38233758ee3358a7ab76954b41880bca67635df218dc6893aabad138f3783d508dc715419e62c8d1fad9088
checksum: 10/c23786b9c123cceb0f69ab074377236825d76db090413db0b92d1a412b0e488e7ebde3e6155883ddbce6616114c54693485274a5d2b8a9a280b40781f80bd343
languageName: node
linkType: hard
@@ -1096,11 +1251,11 @@ __metadata:
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.25.7, @babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.13.0":
version: 7.25.7
resolution: "@babel/preset-env@npm:7.25.7"
dependencies:
"@babel/compat-data": "npm:^7.25.8"
"@babel/compat-data": "npm:^7.25.7"
"@babel/helper-compilation-targets": "npm:^7.25.7"
"@babel/helper-plugin-utils": "npm:^7.25.7"
"@babel/helper-validator-option": "npm:^7.25.7"
@@ -1110,30 +1265,45 @@ __metadata:
"@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/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2"
"@babel/plugin-syntax-async-generators": "npm:^7.8.4"
"@babel/plugin-syntax-class-properties": "npm:^7.12.13"
"@babel/plugin-syntax-class-static-block": "npm:^7.14.5"
"@babel/plugin-syntax-dynamic-import": "npm:^7.8.3"
"@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3"
"@babel/plugin-syntax-import-assertions": "npm:^7.25.7"
"@babel/plugin-syntax-import-attributes": "npm:^7.25.7"
"@babel/plugin-syntax-import-meta": "npm:^7.10.4"
"@babel/plugin-syntax-json-strings": "npm:^7.8.3"
"@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4"
"@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3"
"@babel/plugin-syntax-numeric-separator": "npm:^7.10.4"
"@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3"
"@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3"
"@babel/plugin-syntax-optional-chaining": "npm:^7.8.3"
"@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5"
"@babel/plugin-syntax-top-level-await": "npm:^7.14.5"
"@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-generator-functions": "npm:^7.25.7"
"@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-class-static-block": "npm:^7.25.7"
"@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-dynamic-import": "npm:^7.25.7"
"@babel/plugin-transform-exponentiation-operator": "npm:^7.25.7"
"@babel/plugin-transform-export-namespace-from": "npm:^7.25.8"
"@babel/plugin-transform-export-namespace-from": "npm:^7.25.7"
"@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-json-strings": "npm:^7.25.7"
"@babel/plugin-transform-literals": "npm:^7.25.7"
"@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.8"
"@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.7"
"@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"
@@ -1141,15 +1311,15 @@ __metadata:
"@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-nullish-coalescing-operator": "npm:^7.25.7"
"@babel/plugin-transform-numeric-separator": "npm:^7.25.7"
"@babel/plugin-transform-object-rest-spread": "npm:^7.25.7"
"@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-optional-catch-binding": "npm:^7.25.7"
"@babel/plugin-transform-optional-chaining": "npm:^7.25.7"
"@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-private-property-in-object": "npm:^7.25.7"
"@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"
@@ -1170,7 +1340,7 @@ __metadata:
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10/501d78f56df8bf6f98a42da5db475db183048c4280b3292cf988b6baf01843915161f3b341ed525e2fcafcc47726798532b0e1dc7eb80aa29cc88c9d6f94ee6e
checksum: 10/2d09aa2cb765a9a1c8a7566e22948e69d69de6b9b763322790bd72ec0bd5bcadf7b02abbc6ad1bab917e1f6d60b1a7f4606778d88cc7d7e1388cc52d292db97d
languageName: node
linkType: hard
@@ -1237,14 +1407,14 @@ __metadata:
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.7, @babel/types@npm:^7.4.4":
version: 7.25.7
resolution: "@babel/types@npm:7.25.7"
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
checksum: 10/4504e16a95b6a67d50cfaa389bcbc0621019084cff73784ad4797f82d1bb76c870cb0abb6d9881d5776eb06b4607419a2b1205a08c3e87b152d74bd0884b822a
languageName: node
linkType: hard
@@ -1412,14 +1582,13 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/ecma402-abstract@npm:2.1.0":
version: 2.1.0
resolution: "@formatjs/ecma402-abstract@npm:2.1.0"
"@formatjs/ecma402-abstract@npm:2.0.0":
version: 2.0.0
resolution: "@formatjs/ecma402-abstract@npm:2.0.0"
dependencies:
"@formatjs/fast-memoize": "npm:2.2.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/8e25d2739c03913c61f0ec12a71ab7baf03386cff540e7470bee73e78e4fe9f09c9dfa860223f1177acdcfd0fa341041d25b2fe4e0a77e7209d0680831982bac
checksum: 10/41543ba509ea3c7d6530d57b888115f7ca242f13462a951fae4d1d1f28bae10c999f4dea28a71d2f08366d4889a3f5276cae3a16c6f6417b841a84fd314c2234
languageName: node
linkType: hard
@@ -1432,56 +1601,55 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/icu-messageformat-parser@npm:2.7.9":
version: 2.7.9
resolution: "@formatjs/icu-messageformat-parser@npm:2.7.9"
"@formatjs/icu-messageformat-parser@npm:2.7.8":
version: 2.7.8
resolution: "@formatjs/icu-messageformat-parser@npm:2.7.8"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/icu-skeleton-parser": "npm:1.8.3"
"@formatjs/ecma402-abstract": "npm:2.0.0"
"@formatjs/icu-skeleton-parser": "npm:1.8.2"
tslib: "npm:^2.4.0"
checksum: 10/8bffac5e5b832e18786f383fb60966cfa53da7c94aa9bc5e1b19bb4772aacbfbccd128e599395d1a3a1642930debfc41c6198a178437d98b9a8804dd875c6755
checksum: 10/292fd36268ad84337c0e798fc73b58e8f3cf3f362cea031f710fd78053d29b420526ab766a95745e162ae4a11bf846bc2f7ae5c2c0a3288d3bc9daa97a3be8c1
languageName: node
linkType: hard
"@formatjs/icu-skeleton-parser@npm:1.8.3":
version: 1.8.3
resolution: "@formatjs/icu-skeleton-parser@npm:1.8.3"
"@formatjs/icu-skeleton-parser@npm:1.8.2":
version: 1.8.2
resolution: "@formatjs/icu-skeleton-parser@npm:1.8.2"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/ecma402-abstract": "npm:2.0.0"
tslib: "npm:^2.4.0"
checksum: 10/9105170d65d6793be39f5b085c295bd773e5254c781e5d2c3ad389f21c96afaee1fc7f126b7d36a75a044283458f1cd9a4abdd0b8cca9241e72161fa71e2020b
checksum: 10/a06b61cf6c298bbbc23349e391bad8a1cf0a6a32dc4928a4681a3aa6f38dd8c6a181dc4067e228f67584d4dc181d862704095e65c38cfac077c984dc24ba54d3
languageName: node
linkType: hard
"@formatjs/intl-datetimeformat@npm:6.13.0":
version: 6.13.0
resolution: "@formatjs/intl-datetimeformat@npm:6.13.0"
"@formatjs/intl-datetimeformat@npm:6.12.5":
version: 6.12.5
resolution: "@formatjs/intl-datetimeformat@npm:6.12.5"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/ecma402-abstract": "npm:2.0.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/a9d2451b1c4a8fa12628d5645dc710a853796c686072407f3e313527c11a61129bf5c65de912dc8f3f30780e5cc25ae9f6739903ec7a36d17a070b56b33a7314
checksum: 10/9dd2409f077931270405c7f2d28e0996d7db849f69b7ed9aac85164092435da4054345f9522c03fbba390eeeeda2404b6843800624ba2896bed96632721be01a
languageName: node
linkType: hard
"@formatjs/intl-displaynames@npm:6.6.9":
version: 6.6.9
resolution: "@formatjs/intl-displaynames@npm:6.6.9"
"@formatjs/intl-displaynames@npm:6.6.8":
version: 6.6.8
resolution: "@formatjs/intl-displaynames@npm:6.6.8"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/ecma402-abstract": "npm:2.0.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/b235a85fb0295b64e9b7bb033309aff0652bd06695c08ead38a5c717464c59e99d2003a50b8e936a627dd7e772254b9fd5da165a24f42c3c5c292fdcf67cb9af
checksum: 10/d305787fe2a35f9725b1293f70a2ccc454310c5df48ad62613d674a648dd318bec2a3ccd8656047443d1e438bb1cf8140e354d9c4a4101ec38df00614e0244b7
languageName: node
linkType: hard
"@formatjs/intl-enumerator@npm:1.5.0":
version: 1.5.0
resolution: "@formatjs/intl-enumerator@npm:1.5.0"
"@formatjs/intl-enumerator@npm:1.4.7":
version: 1.4.7
resolution: "@formatjs/intl-enumerator@npm:1.4.7"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
tslib: "npm:^2.4.0"
checksum: 10/92beee0112200d8d89838d048cdd489eb8f53ea0ff739ee7a7126f66468d6179b4fa98a95e3398efa981fffaac51faf7a3c06bcef2fc3f51ea8d4b33a25cd232
checksum: 10/14234c9de2a5143d4839a032e2a876b3acd75c6107868b4d771969354c359f4fa2256d9385ca8bec196273ea7b844d7f6d598ca0ca3832c06e14573494aaf561
languageName: node
linkType: hard
@@ -1494,26 +1662,26 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/intl-listformat@npm:7.5.8":
version: 7.5.8
resolution: "@formatjs/intl-listformat@npm:7.5.8"
"@formatjs/intl-listformat@npm:7.5.7":
version: 7.5.7
resolution: "@formatjs/intl-listformat@npm:7.5.7"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/ecma402-abstract": "npm:2.0.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/761de6c738758550ea3007bac20cda648aaa45e114597c0ecdd30624c2eafbc76b5003ae011a6fe96c797b747a745aad4c88347a81aa0e5ab640e8636bd6fbb2
checksum: 10/ba7e1ee9c29f2a8cfc66d51c5f273f279ced048b427533aa3d502cf7d12d510e79965d0471a158fd41d7cc7314f688c56d863c3ebec8e5e550d687f64d210794
languageName: node
linkType: hard
"@formatjs/intl-locale@npm:4.0.1":
version: 4.0.1
resolution: "@formatjs/intl-locale@npm:4.0.1"
"@formatjs/intl-locale@npm:4.0.0":
version: 4.0.0
resolution: "@formatjs/intl-locale@npm:4.0.0"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/intl-enumerator": "npm:1.5.0"
"@formatjs/ecma402-abstract": "npm:2.0.0"
"@formatjs/intl-enumerator": "npm:1.4.7"
"@formatjs/intl-getcanonicallocales": "npm:2.3.0"
tslib: "npm:^2.4.0"
checksum: 10/6f3412064fc314d964a3196bd4b16fab677ffa8dd64e45e4324d108a4e177a10a60dddd5224deccb1d35405207f3e1ab4d2a626e8d77bf2c812fb8e752b21140
checksum: 10/5c7ba139800498ca381ca7df708b18127a2bc9187e7d9fce8234426e2e1a8552a6cc44d370e3998afad46a43cd082ccc5a4b00ef738167552c1756f56e7dd4ca
languageName: node
linkType: hard
@@ -1526,36 +1694,36 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/intl-numberformat@npm:8.11.0":
version: 8.11.0
resolution: "@formatjs/intl-numberformat@npm:8.11.0"
"@formatjs/intl-numberformat@npm:8.10.3":
version: 8.10.3
resolution: "@formatjs/intl-numberformat@npm:8.10.3"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/ecma402-abstract": "npm:2.0.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/ca08753068ae375f9c1a6be871005fe64b758005aa54ae8c083ea9efa7ae023a06312031d1bf03b9f022005e3aba2796c1fc183efe0c172bd4eea562301aec91
checksum: 10/7044fdef3cd8c51f801304342a28f31fa9f82b37cd3388bd7f45bea5b54f259a1e38769d628db2f17a27fb9faa9d8316e1ab0afc9d9dc85cd865f2c142666eb3
languageName: node
linkType: hard
"@formatjs/intl-pluralrules@npm:5.2.15":
version: 5.2.15
resolution: "@formatjs/intl-pluralrules@npm:5.2.15"
"@formatjs/intl-pluralrules@npm:5.2.14":
version: 5.2.14
resolution: "@formatjs/intl-pluralrules@npm:5.2.14"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/ecma402-abstract": "npm:2.0.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/8a6c756afeca3d1cb5b9f93a479993e6f036341ea32264a4542e6f65488733f9c97dc8457ba6d3d049de7160177040e47bb51f8dbbc5268e22d6800ef5d90802
checksum: 10/831dfe6b8ad84472f836091c2da4d925fba238fa2b1c36befaca668ff399f43ac7d97d715842db7a1a3baccccf611b709e368b27875be86b471592276c00cd2b
languageName: node
linkType: hard
"@formatjs/intl-relativetimeformat@npm:11.2.15":
version: 11.2.15
resolution: "@formatjs/intl-relativetimeformat@npm:11.2.15"
"@formatjs/intl-relativetimeformat@npm:11.2.14":
version: 11.2.14
resolution: "@formatjs/intl-relativetimeformat@npm:11.2.14"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/ecma402-abstract": "npm:2.0.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/a7890892cd52e37c427982a700d7613cd6a68f73e9c0bf785e9841442b37ba491d1eded3fe6df8ad4ccba4754ad6b5e9b3cc082a5d227b2988a8b6709775bea5
checksum: 10/a61febd0262c803b568598f64f734a3f2e5f06934b52d19ebd5cc48b8ad0b8e282868fb28cbceff49e6494ad924d86e5af1714a108b16c945bad349453cd58b8
languageName: node
linkType: hard
@@ -8699,11 +8867,11 @@ __metadata:
version: 0.0.0-use.local
resolution: "home-assistant-frontend@workspace:."
dependencies:
"@babel/core": "npm:7.25.8"
"@babel/core": "npm:7.25.7"
"@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-env": "npm:7.25.7"
"@babel/preset-typescript": "npm:7.25.7"
"@babel/runtime": "npm:7.25.7"
"@braintree/sanitize-url": "npm:7.1.0"
@@ -8716,14 +8884,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.13.0"
"@formatjs/intl-displaynames": "npm:6.6.9"
"@formatjs/intl-datetimeformat": "npm:6.12.5"
"@formatjs/intl-displaynames": "npm:6.6.8"
"@formatjs/intl-getcanonicallocales": "npm:2.3.0"
"@formatjs/intl-listformat": "npm:7.5.8"
"@formatjs/intl-locale": "npm:4.0.1"
"@formatjs/intl-numberformat": "npm:8.11.0"
"@formatjs/intl-pluralrules": "npm:5.2.15"
"@formatjs/intl-relativetimeformat": "npm:11.2.15"
"@formatjs/intl-listformat": "npm:7.5.7"
"@formatjs/intl-locale": "npm:4.0.0"
"@formatjs/intl-numberformat": "npm:8.10.3"
"@formatjs/intl-pluralrules": "npm:5.2.14"
"@formatjs/intl-relativetimeformat": "npm:11.2.14"
"@fullcalendar/core": "npm:6.1.15"
"@fullcalendar/daygrid": "npm:6.1.15"
"@fullcalendar/interaction": "npm:6.1.15"
@@ -8854,7 +9022,7 @@ __metadata:
husky: "npm:9.1.6"
idb-keyval: "npm:6.2.1"
instant-mocha: "npm:1.5.2"
intl-messageformat: "npm:10.6.0"
intl-messageformat: "npm:10.5.14"
js-yaml: "npm:4.1.0"
jszip: "npm:3.10.1"
leaflet: "npm:1.9.4"
@@ -8865,7 +9033,7 @@ __metadata:
lodash.merge: "npm:4.6.2"
lodash.template: "npm:4.5.0"
luxon: "npm:3.5.0"
magic-string: "npm:0.30.12"
magic-string: "npm:0.30.11"
map-stream: "npm:0.0.7"
marked: "npm:14.1.2"
memoize-one: "npm:6.0.0"
@@ -8898,7 +9066,7 @@ __metadata:
ts-lit-plugin: "npm:2.0.2"
tsparticles-engine: "npm:2.12.0"
tsparticles-preset-links: "npm:2.12.0"
typescript: "npm:5.6.3"
typescript: "npm:5.6.2"
ua-parser-js: "npm:1.0.39"
unfetch: "npm:5.0.0"
vis-data: "npm:7.1.9"
@@ -9304,15 +9472,15 @@ __metadata:
languageName: node
linkType: hard
"intl-messageformat@npm:10.6.0":
version: 10.6.0
resolution: "intl-messageformat@npm:10.6.0"
"intl-messageformat@npm:10.5.14":
version: 10.5.14
resolution: "intl-messageformat@npm:10.5.14"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/ecma402-abstract": "npm:2.0.0"
"@formatjs/fast-memoize": "npm:2.2.0"
"@formatjs/icu-messageformat-parser": "npm:2.7.9"
"@formatjs/icu-messageformat-parser": "npm:2.7.8"
tslib: "npm:^2.4.0"
checksum: 10/14e6eeaebfbbcd8c7032a6dab623438575aa4407b509cac5ee69b126209faf0f0717e566e223fa60608d7dd5f4ec5459d0dd9c6c89adda302cb008d67b536466
checksum: 10/01692e92671b00d2423a7db405e6bb8e42bea52445dec931abaa8a8c47e3a7da17dddd3cd0faa33cb6a614370ea230b2c3980ae106cafa8b760e50ac4db0952f
languageName: node
linkType: hard
@@ -10563,12 +10731,12 @@ __metadata:
languageName: node
linkType: hard
"magic-string@npm:0.30.12, magic-string@npm:^0.30.3":
version: 0.30.12
resolution: "magic-string@npm:0.30.12"
"magic-string@npm:0.30.11, magic-string@npm:^0.30.3":
version: 0.30.11
resolution: "magic-string@npm:0.30.11"
dependencies:
"@jridgewell/sourcemap-codec": "npm:^1.5.0"
checksum: 10/98016180a52b28efc1362152b45671067facccdaead6b70c1c14c566cba98491bc2e1336474b0996397730dca24400e85649da84d3da62b2560ed03c067573e6
checksum: 10/b784d2240252f5b1e755d487354ada4c672cbca16f045144f7185a75b059210e5fcca7be7be03ef1bac2ca754c4428b21d36ae64a9057ba429916f06b8c54eb2
languageName: node
linkType: hard
@@ -14035,13 +14203,13 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:5.6.3":
version: 5.6.3
resolution: "typescript@npm:5.6.3"
"typescript@npm:5.6.2":
version: 5.6.2
resolution: "typescript@npm:5.6.2"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 10/c328e418e124b500908781d9f7b9b93cf08b66bf5936d94332b463822eea2f4e62973bfb3b8a745fdc038785cb66cf59d1092bac3ec2ac6a3e5854687f7833f1
checksum: 10/f95365d4898f357823e93d334ecda9fcade54f009b397c7d05b7621cd9e865981033cf89ccde0f3e3a7b73b1fdbae18e92bc77db237b43e912f053fef0f9a53b
languageName: node
linkType: hard
@@ -14055,13 +14223,13 @@ __metadata:
languageName: node
linkType: hard
"typescript@patch:typescript@npm%3A5.6.3#optional!builtin<compat/typescript>":
version: 5.6.3
resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin<compat/typescript>::version=5.6.3&hash=8c6c40"
"typescript@patch:typescript@npm%3A5.6.2#optional!builtin<compat/typescript>":
version: 5.6.2
resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin<compat/typescript>::version=5.6.2&hash=8c6c40"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 10/00504c01ee42d470c23495426af07512e25e6546bce7e24572e72a9ca2e6b2e9bea63de4286c3cfea644874da1467dcfca23f4f98f7caf20f8b03c0213bb6837
checksum: 10/8bfc7ca0d9feca4c3fcbd6c70741abfcd714197d6448e68225ae71e462447d904d3bfba49759a8fbe4956d87f054e2d346833c8349c222daa594a2626d4e1be8
languageName: node
linkType: hard