mirror of
https://github.com/home-assistant/frontend.git
synced 2026-08-03 13:01:40 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 527e16668d | |||
| f59ceeff8f | |||
| cee1c91ed8 | |||
| 954662f454 | |||
| c07fb2b7ec | |||
| 041219a40c | |||
| f28a1c5370 | |||
| 4099de96c3 | |||
| 673ca45cde | |||
| 4dfc626363 | |||
| 1206f0ae5d | |||
| f71a938d02 | |||
| e2cade842e |
@@ -7,6 +7,8 @@ description: Home Assistant frontend component patterns. Use when implementing o
|
||||
|
||||
Use this skill when creating or reviewing Home Assistant UI components and common interaction patterns.
|
||||
|
||||
Cross-load `ha-frontend-events` when component work includes event listener typing, custom event dispatch, or event-map declarations.
|
||||
|
||||
## Dialogs
|
||||
|
||||
Open dialogs through the fire-event pattern:
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
---
|
||||
name: ha-frontend-events
|
||||
description: Home Assistant frontend event patterns. Use when typing event handlers, using HASSDomEvent types, dispatching with fireEvent, or declaring HASSDomEvents and event maps.
|
||||
---
|
||||
|
||||
# HA Frontend Events
|
||||
|
||||
Use this skill when implementing or reviewing event listeners and custom event contracts. Cross-load `ha-frontend-components` when the work also involves dialogs, forms, alerts, shortcuts, tooltips, panels, Lovelace cards, or buttons.
|
||||
|
||||
## Event Handling
|
||||
|
||||
Use the event types from `src/common/dom/fire_event.ts` instead of plain `Event`, generic `CustomEvent`, or element casts when they express the handler contract:
|
||||
|
||||
- Use `HASSDomCurrentTargetEvent<T>` to read the element on which the listener was registered through `ev.currentTarget`.
|
||||
- Use `HASSDomTargetEvent<T>` only to read the element that originated the event through `ev.target`.
|
||||
- Use `HASSDomEvent<T>` to read a custom event payload through `ev.detail`.
|
||||
- Use `ValueChangedEvent<T>` from `src/types.ts` for the standard `value-changed` event.
|
||||
- Prefer an event type exported by the component being listened to, such as `HaSelectSelectEvent<T, Clearable>` or `HaDropdownSelectEvent<TValue, TData>`, over reconstructing its detail type.
|
||||
- Use `ActionHandlerEvent` from `src/data/lovelace/action_handler.ts` for Lovelace tap, hold, and double-tap handlers.
|
||||
|
||||
Import event and element types with `import type`:
|
||||
|
||||
```ts
|
||||
import type {
|
||||
HASSDomCurrentTargetEvent,
|
||||
HASSDomEvent,
|
||||
HASSDomTargetEvent,
|
||||
} from "../common/dom/fire_event";
|
||||
import type { HaCheckbox } from "../components/ha-checkbox";
|
||||
import type { HaEntityPicker } from "../components/entity/ha-entity-picker";
|
||||
import type { HaRadioGroup } from "../components/radio/ha-radio-group";
|
||||
import type { ValueChangedEvent } from "../types";
|
||||
```
|
||||
|
||||
Type the handler so the selected property can be read directly. Do not cast `ev.currentTarget` or assign it to a single-use variable:
|
||||
|
||||
```ts
|
||||
private _scopeChanged(ev: HASSDomCurrentTargetEvent<HaRadioGroup>): void {
|
||||
this._scope = ev.currentTarget.value;
|
||||
}
|
||||
|
||||
private _checkedChanged(ev: HASSDomTargetEvent<HaCheckbox>): void {
|
||||
this._checked = ev.target.checked;
|
||||
}
|
||||
|
||||
private _valueChanged(ev: ValueChangedEvent<string>): void {
|
||||
this._value = ev.detail.value;
|
||||
}
|
||||
|
||||
private _itemSelected(ev: HASSDomEvent<{ id: string }>): void {
|
||||
this._selectedId = ev.detail.id;
|
||||
}
|
||||
```
|
||||
|
||||
Use intersections when a handler needs more than one facet of an event. Keep the native event type when the handler reads native fields such as `key`, modifier keys, `dataTransfer`, or focus relationships:
|
||||
|
||||
```ts
|
||||
private _entityChanged(
|
||||
ev: ValueChangedEvent<string> & HASSDomCurrentTargetEvent<HaEntityPicker>
|
||||
): void {
|
||||
ev.currentTarget.value = ev.detail.value;
|
||||
}
|
||||
|
||||
private _keyDown(
|
||||
ev: KeyboardEvent & HASSDomCurrentTargetEvent<HTMLInputElement>
|
||||
): void {
|
||||
if (ev.key === "Enter") {
|
||||
this._submit(ev.currentTarget.value);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dispatch Home Assistant component events with `fireEvent()` instead of constructing `Event` or `CustomEvent` directly. Register the event name and detail type by augmenting `HASSDomEvents`; use `undefined` when an event has no detail. `fireEvent()` constrains event names and supplied detail, and events bubble and cross shadow boundaries by default:
|
||||
|
||||
```ts
|
||||
fireEvent(this, "item-selected", { id: item.id });
|
||||
fireEvent(this, "refresh-requested");
|
||||
```
|
||||
|
||||
When an event is already registered, derive handler and listener types from its registration rather than repeating the payload shape:
|
||||
|
||||
```ts
|
||||
private _itemSelected(
|
||||
ev: HASSDomEvent<HASSDomEvents["item-selected"]>
|
||||
): void {
|
||||
this._selectedId = ev.detail.id;
|
||||
}
|
||||
```
|
||||
|
||||
`HASSDomEvents` types `fireEvent()` calls. Augment `HTMLElementEventMap` for typed listeners on HTML elements, or `GlobalEventHandlersEventMap` when the event is handled on global event targets.
|
||||
|
||||
In component files, prefer placing global event declarations after the class at the bottom of the file. Preserve the existing placement when editing established files; foundational type, helper, and mixin files commonly keep declarations near the top before their consumers.
|
||||
|
||||
```ts
|
||||
declare global {
|
||||
interface HASSDomEvents {
|
||||
"item-selected": { id: string };
|
||||
"refresh-requested": undefined;
|
||||
}
|
||||
|
||||
interface HTMLElementEventMap {
|
||||
"item-selected": HASSDomEvent<HASSDomEvents["item-selected"]>;
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -70,4 +70,4 @@ Configuration and props:
|
||||
- Identify behavioral regressions, bugs, accessibility issues, and missing tests first.
|
||||
- Keep style-only comments secondary unless they affect maintainability or user experience.
|
||||
- Prefer small, direct fixes over large refactors during review follow-up.
|
||||
- Cross-load `ha-frontend-contexts`, `ha-frontend-components`, `ha-frontend-styling`, `ha-frontend-testing`, or `ha-frontend-user-facing-text` when a finding falls in that area.
|
||||
- Cross-load `ha-frontend-contexts`, `ha-frontend-components`, `ha-frontend-events`, `ha-frontend-styling`, `ha-frontend-testing`, or `ha-frontend-user-facing-text` when a finding falls in that area.
|
||||
|
||||
@@ -32,12 +32,12 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1
|
||||
uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
||||
with:
|
||||
languages: javascript-typescript
|
||||
build-mode: none
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1
|
||||
uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
||||
with:
|
||||
category: "/language:javascript-typescript"
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
name: Prepare container dependencies
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: mcr.microsoft.com/playwright:v1.62.0-noble
|
||||
image: mcr.microsoft.com/playwright:v1.62.1-noble
|
||||
options: --user 1001
|
||||
defaults:
|
||||
run:
|
||||
@@ -154,7 +154,7 @@ jobs:
|
||||
- prepare-container-dependencies
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: mcr.microsoft.com/playwright:v1.62.0-noble
|
||||
image: mcr.microsoft.com/playwright:v1.62.1-noble
|
||||
options: --user 1001 --ipc=host
|
||||
defaults:
|
||||
run:
|
||||
@@ -206,7 +206,7 @@ jobs:
|
||||
- prepare-container-dependencies
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: mcr.microsoft.com/playwright:v1.62.0-noble
|
||||
image: mcr.microsoft.com/playwright:v1.62.1-noble
|
||||
options: --user 1001 --ipc=host
|
||||
defaults:
|
||||
run:
|
||||
@@ -260,7 +260,7 @@ jobs:
|
||||
- prepare-container-dependencies
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: mcr.microsoft.com/playwright:v1.62.0-noble
|
||||
image: mcr.microsoft.com/playwright:v1.62.1-noble
|
||||
options: --user 1001 --ipc=host
|
||||
defaults:
|
||||
run:
|
||||
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
|
||||
- name: Verify version
|
||||
uses: home-assistant/actions/helpers/verify-version@e3fb68ebda13d88a0d695082f471ba2c83d025fb # master
|
||||
uses: home-assistant/actions/helpers/verify-version@ab22029681aa532bfe7de5774a9972d67bfbd2c0 # master
|
||||
|
||||
- name: Setup Node and install
|
||||
uses: ./.github/actions/setup
|
||||
|
||||
Vendored
-944
File diff suppressed because one or more lines are too long
+1000
File diff suppressed because one or more lines are too long
+1
-1
@@ -13,4 +13,4 @@ nodeLinker: node-modules
|
||||
|
||||
npmMinimalAgeGate: 3d
|
||||
|
||||
yarnPath: .yarn/releases/yarn-4.17.1.cjs
|
||||
yarnPath: .yarn/releases/yarn-4.18.0.cjs
|
||||
|
||||
@@ -40,6 +40,7 @@ Detailed guidance lives in project skills under `.agents/skills/`. Load the matc
|
||||
|
||||
- `ha-frontend-contexts`: Lit contexts, `hass` migration, and rerender-sensitive state access.
|
||||
- `ha-frontend-components`: dialogs, forms, alerts, shortcuts, tooltips, panels, and Lovelace cards.
|
||||
- `ha-frontend-events`: event handler typing, custom event dispatch, and event-map declarations.
|
||||
- `ha-frontend-styling`: theme variables, spacing tokens, responsive layout, RTL, and view transitions.
|
||||
- `ha-frontend-testing`: lint, typecheck, Vitest, Playwright e2e dev servers, and benchmarks.
|
||||
- `ha-frontend-user-facing-text`: localization, terminology, sentence case, and Home Assistant text style.
|
||||
|
||||
+7
-7
@@ -52,13 +52,13 @@
|
||||
"@codemirror/view": "6.43.7",
|
||||
"@date-fns/tz": "1.5.0",
|
||||
"@egjs/hammerjs": "2.0.17",
|
||||
"@formatjs/intl-datetimeformat": "7.5.2",
|
||||
"@formatjs/intl-datetimeformat": "7.6.0",
|
||||
"@formatjs/intl-displaynames": "7.3.13",
|
||||
"@formatjs/intl-durationformat": "0.10.18",
|
||||
"@formatjs/intl-getcanonicallocales": "3.2.11",
|
||||
"@formatjs/intl-listformat": "8.3.13",
|
||||
"@formatjs/intl-locale": "5.3.10",
|
||||
"@formatjs/intl-numberformat": "9.3.14",
|
||||
"@formatjs/intl-numberformat": "9.4.0",
|
||||
"@formatjs/intl-pluralrules": "6.3.13",
|
||||
"@formatjs/intl-relativetimeformat": "12.3.13",
|
||||
"@fullcalendar/core": "6.1.21",
|
||||
@@ -107,7 +107,7 @@
|
||||
"hls.js": "1.6.16",
|
||||
"home-assistant-js-websocket": "9.6.0",
|
||||
"idb-keyval": "6.3.0",
|
||||
"intl-messageformat": "11.2.12",
|
||||
"intl-messageformat": "11.2.13",
|
||||
"js-yaml": "5.2.2",
|
||||
"leaflet": "1.9.4",
|
||||
"leaflet-draw": "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch",
|
||||
@@ -150,9 +150,9 @@
|
||||
"@octokit/auth-oauth-device": "8.0.3",
|
||||
"@octokit/plugin-retry": "8.1.0",
|
||||
"@octokit/rest": "22.0.1",
|
||||
"@playwright/test": "1.62.0",
|
||||
"@playwright/test": "1.62.1",
|
||||
"@rsdoctor/rspack-plugin": "1.6.1",
|
||||
"@rspack/core": "2.1.6",
|
||||
"@rspack/core": "2.1.7",
|
||||
"@rspack/dev-server": "2.1.0",
|
||||
"@types/babel__plugin-transform-runtime": "7.9.5",
|
||||
"@types/chromecast-caf-receiver": "6.0.26",
|
||||
@@ -193,7 +193,7 @@
|
||||
"gulp-rename": "2.1.0",
|
||||
"html-minifier-terser": "7.2.0",
|
||||
"husky": "9.1.7",
|
||||
"jsdom": "30.0.0",
|
||||
"jsdom": "30.0.1",
|
||||
"jszip": "3.10.1",
|
||||
"license-checker-rseidelsohn": "5.0.1",
|
||||
"lint-staged": "17.2.0",
|
||||
@@ -228,7 +228,7 @@
|
||||
"tslib": "2.8.1",
|
||||
"@material/mwc-list@^0.27.0": "patch:@material/mwc-list@npm%3A0.27.0#~/.yarn/patches/@material-mwc-list-npm-0.27.0-5344fc9de4.patch"
|
||||
},
|
||||
"packageManager": "yarn@4.17.1",
|
||||
"packageManager": "yarn@4.18.0",
|
||||
"volta": {
|
||||
"node": "24.18.1"
|
||||
}
|
||||
|
||||
@@ -6,14 +6,20 @@ import type { ByWeekday, Options, WeekdayStr } from "rrule";
|
||||
import { RRule, Weekday } from "rrule";
|
||||
import { formatDate, formatTime } from "../../common/datetime/calc_date";
|
||||
import { firstWeekdayIndex } from "../../common/datetime/first_weekday";
|
||||
import type {
|
||||
HASSDomCurrentTargetEvent,
|
||||
HASSDomTargetEvent,
|
||||
} from "../../common/dom/fire_event";
|
||||
import type { LocalizeKeys } from "../../common/translations/localize";
|
||||
import "../../components/chips/ha-chip-set";
|
||||
import "../../components/chips/ha-filter-chip";
|
||||
import type { HaFilterChip } from "../../components/chips/ha-filter-chip";
|
||||
import "../../components/ha-date-input";
|
||||
import "../../components/ha-select";
|
||||
import type { HaSelectSelectEvent } from "../../components/ha-select";
|
||||
import "../../components/input/ha-input";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import type { HaInput } from "../../components/input/ha-input";
|
||||
import type { HomeAssistant, ValueChangedEvent } from "../../types";
|
||||
import type {
|
||||
MonthlyRepeatItem,
|
||||
RepeatEnd,
|
||||
@@ -321,8 +327,8 @@ export class RecurrenceRuleEditor extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private _onIntervalChange(e: Event) {
|
||||
this._interval = (e.target! as any).value;
|
||||
private _onIntervalChange(e: HASSDomTargetEvent<HaInput>) {
|
||||
this._interval = Number(e.target.value);
|
||||
}
|
||||
|
||||
private _onRepeatSelected(e: HaSelectSelectEvent<RepeatFrequency>) {
|
||||
@@ -351,9 +357,12 @@ export class RecurrenceRuleEditor extends LitElement {
|
||||
this._monthday = selectedItem.bymonthday;
|
||||
}
|
||||
|
||||
private _onWeekdayToggle(e: MouseEvent) {
|
||||
const target = e.currentTarget as any;
|
||||
const value = target.value as WeekdayStr;
|
||||
private _onWeekdayToggle(
|
||||
e: MouseEvent &
|
||||
HASSDomCurrentTargetEvent<HaFilterChip & { value: WeekdayStr }>
|
||||
) {
|
||||
const target = e.currentTarget;
|
||||
const value = target.value;
|
||||
if (this._weekday.has(value)) {
|
||||
this._weekday.delete(value);
|
||||
} else {
|
||||
@@ -385,11 +394,11 @@ export class RecurrenceRuleEditor extends LitElement {
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
private _onCountChange(e: Event) {
|
||||
this._count = (e.target! as any).value;
|
||||
private _onCountChange(e: HASSDomTargetEvent<HaInput>) {
|
||||
this._count = Number(e.target.value);
|
||||
}
|
||||
|
||||
private _onUntilChange(e: CustomEvent) {
|
||||
private _onUntilChange(e: ValueChangedEvent<string>) {
|
||||
e.stopPropagation();
|
||||
this._untilDay = new Date(
|
||||
new TZDate(e.detail.value + "T00:00:00", this.timezone).getTime()
|
||||
@@ -436,7 +445,7 @@ export class RecurrenceRuleEditor extends LitElement {
|
||||
);
|
||||
// rrule.js can't compute some UNTIL variations so we compute that ourself. Must be
|
||||
// in the same format as dtstart.
|
||||
let newUntilValue;
|
||||
let newUntilValue: string;
|
||||
if (this.allDay) {
|
||||
// For all-day events, only use the date part
|
||||
newUntilValue = until.toISOString().split("T")[0].replace(/-/g, "");
|
||||
|
||||
@@ -4,6 +4,7 @@ import type { PropertyValues } from "lit";
|
||||
import { css, html, LitElement, nothing } from "lit";
|
||||
import { customElement, property, state } from "lit/decorators";
|
||||
import { formatNumber } from "../../../../common/number/format_number";
|
||||
import { round } from "../../../../common/number/round";
|
||||
import "../../../../components/ha-card";
|
||||
import "../../../../components/ha-svg-icon";
|
||||
import "../../../../components/ha-tooltip";
|
||||
@@ -91,8 +92,8 @@ class HuiEnergyGridBalanceCard
|
||||
|
||||
const { summedData } = getSummedData(this._data);
|
||||
|
||||
const imported = summedData.total.from_grid ?? 0;
|
||||
const exported = summedData.total.to_grid ?? 0;
|
||||
const imported = round(summedData.total.from_grid ?? 0, 3);
|
||||
const exported = round(summedData.total.to_grid ?? 0, 3);
|
||||
const net = imported - exported;
|
||||
|
||||
const fmt = (value: number) =>
|
||||
|
||||
@@ -147,7 +147,7 @@ export class HuiTileCard extends LitElement implements LovelaceCard {
|
||||
handleAction(this, this.hass!, this._config!, ev.detail.action!);
|
||||
}
|
||||
|
||||
private _handleIconAction(ev: CustomEvent) {
|
||||
private _handleIconAction(ev: ActionHandlerEvent) {
|
||||
ev.stopPropagation();
|
||||
const config = {
|
||||
entity: this._config!.entity,
|
||||
|
||||
@@ -4,6 +4,10 @@ import { customElement, property, state } from "lit/decorators";
|
||||
import { classMap } from "lit/directives/class-map";
|
||||
import { styleMap } from "lit/directives/style-map";
|
||||
import { STATES_OFF } from "../../../common/const";
|
||||
import type {
|
||||
HASSDomCurrentTargetEvent,
|
||||
HASSDomTargetEvent,
|
||||
} from "../../../common/dom/fire_event";
|
||||
import { computeDomain } from "../../../common/entity/compute_domain";
|
||||
import parseAspectRatio from "../../../common/util/parse-aspect-ratio";
|
||||
import "../../../components/ha-camera-stream";
|
||||
@@ -378,9 +382,11 @@ export class HuiImage extends LitElement {
|
||||
this._loadState = LoadState.Error;
|
||||
}
|
||||
|
||||
private async _onImageLoad(ev: Event): Promise<void> {
|
||||
private async _onImageLoad(
|
||||
ev: HASSDomTargetEvent<HTMLImageElement>
|
||||
): Promise<void> {
|
||||
this._loadState = LoadState.Loaded;
|
||||
const imgEl = ev.target as HTMLImageElement;
|
||||
const imgEl = ev.target;
|
||||
if (this._ratio && this._ratio.w > 0 && this._ratio.h > 0) {
|
||||
this._loadedImageSrc = imgEl.src;
|
||||
}
|
||||
@@ -388,9 +394,11 @@ export class HuiImage extends LitElement {
|
||||
this._lastImageHeight = imgEl.offsetHeight;
|
||||
}
|
||||
|
||||
private async _onVideoLoad(ev: Event): Promise<void> {
|
||||
private async _onVideoLoad(
|
||||
ev: HASSDomCurrentTargetEvent<HaCameraStream>
|
||||
): Promise<void> {
|
||||
this._loadState = LoadState.Loaded;
|
||||
const videoEl = ev.currentTarget as HaCameraStream;
|
||||
const videoEl = ev.currentTarget;
|
||||
await this.updateComplete;
|
||||
this._lastImageHeight = videoEl.offsetHeight;
|
||||
}
|
||||
|
||||
@@ -123,8 +123,9 @@ export class HuiCardPicker extends LitElement {
|
||||
};
|
||||
const fuse = new Fuse(cards, options);
|
||||
cards = fuse.search(filter).map((result) => result.item);
|
||||
return cardElements.filter((cardElement: CardElement) =>
|
||||
cards.includes(cardElement.card)
|
||||
return cardElements.filter(
|
||||
(cardElement: CardElement) =>
|
||||
cards.includes(cardElement.card) && cardElement.card.type !== "manual"
|
||||
);
|
||||
}
|
||||
);
|
||||
@@ -140,7 +141,9 @@ export class HuiCardPicker extends LitElement {
|
||||
(cardElements: CardElement[]): CardElement[] =>
|
||||
cardElements.filter(
|
||||
(cardElement: CardElement) =>
|
||||
!cardElement.card.isCustom && !cardElement.card.isEnergy
|
||||
!cardElement.card.isCustom &&
|
||||
!cardElement.card.isEnergy &&
|
||||
!(cardElement.card.type === "manual")
|
||||
)
|
||||
);
|
||||
|
||||
@@ -151,6 +154,12 @@ export class HuiCardPicker extends LitElement {
|
||||
)
|
||||
);
|
||||
|
||||
private _manualCard = memoizeOne((cardElements: CardElement[]): CardElement =>
|
||||
cardElements.find(
|
||||
(cardElement: CardElement) => cardElement.card.type === "manual"
|
||||
)!
|
||||
);
|
||||
|
||||
private _favoriteCards(): CardElement[] {
|
||||
return this._favorites
|
||||
.map((key) => this._favoriteElement(key))
|
||||
@@ -160,9 +169,10 @@ export class HuiCardPicker extends LitElement {
|
||||
// A preview is a live DOM node, so every section a card shows up in needs
|
||||
// its own element.
|
||||
private _toCardElement(card: Card): CardElement {
|
||||
const config = card.type === "manual" ? { type: "" } : undefined;
|
||||
return {
|
||||
card,
|
||||
element: html`${until(this._renderCardElement(card), SPINNER)}`,
|
||||
element: html`${until(this._renderCardElement(card, config), SPINNER)}`,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -194,6 +204,7 @@ export class HuiCardPicker extends LitElement {
|
||||
const othersCards = this._otherCards(this._cards);
|
||||
const energyCardsItems = this._energyCards(this._cards);
|
||||
const customCardsItems = this._customCards(this._cards);
|
||||
const manualCard = this._manualCard(this._cards);
|
||||
|
||||
return html`
|
||||
<ha-input-search
|
||||
@@ -334,25 +345,7 @@ export class HuiCardPicker extends LitElement {
|
||||
}
|
||||
`
|
||||
}
|
||||
<div class="cards-container">
|
||||
<div
|
||||
class="card manual"
|
||||
@click=${this._cardPicked}
|
||||
.config=${{ type: "" }}
|
||||
>
|
||||
<div class="card-header">
|
||||
${this.hass!.localize(
|
||||
`ui.panel.lovelace.editor.card.generic.manual`
|
||||
)}
|
||||
</div>
|
||||
<div class="preview description">
|
||||
${this.hass!.localize(
|
||||
`ui.panel.lovelace.editor.card.generic.manual_description`
|
||||
)}
|
||||
</div>
|
||||
<ha-ripple></ha-ripple>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cards-container">${this._renderCard(manualCard, true)}</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
@@ -443,6 +436,13 @@ export class HuiCardPicker extends LitElement {
|
||||
)
|
||||
);
|
||||
}
|
||||
cards = cards.concat({
|
||||
type: "manual",
|
||||
name: this.hass!.localize("ui.panel.lovelace.editor.card.generic.manual"),
|
||||
description: this.hass!.localize(
|
||||
"ui.panel.lovelace.editor.card.generic.manual_description"
|
||||
),
|
||||
});
|
||||
this._cards = cards.map((card: Card) => this._toCardElement(card));
|
||||
this._suggestedCards = cards
|
||||
.filter((card: Card) => card.isSuggested)
|
||||
@@ -481,12 +481,12 @@ export class HuiCardPicker extends LitElement {
|
||||
}
|
||||
);
|
||||
|
||||
private _renderCard(cardElement: CardElement): TemplateResult {
|
||||
private _renderCard(cardElement: CardElement, wide = false): TemplateResult {
|
||||
const key = cardKey(cardElement.card);
|
||||
const favorite = this._favorites.includes(key);
|
||||
|
||||
return html`
|
||||
<div class="card" tabindex="0">
|
||||
<div class="card ${classMap({ "full-width": wide })}" tabindex="0">
|
||||
${cardElement.element}
|
||||
<ha-icon-button
|
||||
class="favorite ${classMap({ selected: favorite })}"
|
||||
@@ -832,7 +832,7 @@ export class HuiCardPicker extends LitElement {
|
||||
);
|
||||
}
|
||||
|
||||
.manual {
|
||||
.full-width {
|
||||
max-width: none;
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import type { LocalizeFunc } from "../../../../../common/translations/localize";
|
||||
import { fireEvent } from "../../../../../common/dom/fire_event";
|
||||
import "../../../../../components/ha-form/ha-form";
|
||||
import type { SchemaUnion } from "../../../../../components/ha-form/types";
|
||||
import type { HomeAssistant } from "../../../../../types";
|
||||
import type { HomeAssistant, ValueChangedEvent } from "../../../../../types";
|
||||
import type { ImageElementConfig } from "../../../elements/types";
|
||||
import type { LovelacePictureElementEditor } from "../../../types";
|
||||
import { ACTION_RELATED_CONTEXT } from "../../../components/hui-action-editor";
|
||||
@@ -159,7 +159,7 @@ export class HuiImageElementEditor
|
||||
: {}),
|
||||
}));
|
||||
|
||||
private _valueChanged(ev: CustomEvent): void {
|
||||
private _valueChanged(ev: ValueChangedEvent<ImageElementConfig>): void {
|
||||
fireEvent(this, "config-changed", { config: ev.detail.value });
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ import "../../../../components/ha-card";
|
||||
import "../../../../components/ha-form/ha-form";
|
||||
import "../../../../components/ha-icon";
|
||||
import "../../../../components/ha-switch";
|
||||
import type { HomeAssistant } from "../../../../types";
|
||||
import type { HomeAssistant, ValueChangedEvent } from "../../../../types";
|
||||
import {
|
||||
PREVIEW_CLICK_CALLBACK,
|
||||
type PictureElementsCardConfig,
|
||||
@@ -29,6 +29,7 @@ import type { LovelaceCardEditor } from "../../types";
|
||||
import "../hui-sub-element-editor";
|
||||
import { baseLovelaceCardConfig } from "../structs/base-card-struct";
|
||||
import type { EditDetailElementEvent, SubElementEditorConfig } from "../types";
|
||||
import type { UIConfigChangedEvent } from "../hui-element-editor";
|
||||
import { configElementStyle } from "./config-elements-style";
|
||||
import "../hui-picture-elements-card-row-editor";
|
||||
import type { LovelaceElementConfig } from "../../elements/types";
|
||||
@@ -228,7 +229,7 @@ export class HuiPictureElementsCardEditor
|
||||
: {}),
|
||||
}));
|
||||
|
||||
private _formChanged(ev: CustomEvent): void {
|
||||
private _formChanged(ev: ValueChangedEvent<PictureElementsCardConfig>): void {
|
||||
ev.stopPropagation();
|
||||
if (!this._config || !this.hass) {
|
||||
return;
|
||||
@@ -261,7 +262,9 @@ export class HuiPictureElementsCardEditor
|
||||
}
|
||||
}
|
||||
|
||||
private _handleSubElementChanged(ev: CustomEvent): void {
|
||||
private _handleSubElementChanged(
|
||||
ev: UIConfigChangedEvent<LovelaceElementConfig>
|
||||
): void {
|
||||
ev.stopPropagation();
|
||||
if (!this._config || !this.hass) {
|
||||
return;
|
||||
|
||||
@@ -12,7 +12,12 @@ import { LitElement, css, html, nothing } from "lit";
|
||||
import { customElement, property, query, state } from "lit/decorators";
|
||||
import { classMap } from "lit/directives/class-map";
|
||||
import { until } from "lit/directives/until";
|
||||
import { fireEvent, type HASSDomEvent } from "../../common/dom/fire_event";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import type {
|
||||
HASSDomCurrentTargetEvent,
|
||||
HASSDomEvent,
|
||||
HASSDomTargetEvent,
|
||||
} from "../../common/dom/fire_event";
|
||||
import { computeDomain } from "../../common/entity/compute_domain";
|
||||
import { computeEntityPickerDisplay } from "../../common/entity/compute_entity_name_display";
|
||||
import { supportsFeature } from "../../common/entity/supports-feature";
|
||||
@@ -582,14 +587,15 @@ export class BarMediaPlayer extends SubscribeMixin(LitElement) {
|
||||
this._volumeSlider.value = this._volumeValue;
|
||||
}
|
||||
|
||||
private _handleControlClick(e: MouseEvent): void {
|
||||
const action = (e.currentTarget! as HTMLElement).getAttribute("action")!;
|
||||
|
||||
private _handleControlClick(
|
||||
e: MouseEvent & HASSDomCurrentTargetEvent<HTMLElement>
|
||||
): void {
|
||||
const action = e.currentTarget.getAttribute("action")!;
|
||||
if (!this._browserPlayer) {
|
||||
handleMediaControlClick(
|
||||
this.hass!,
|
||||
this._stateObj!,
|
||||
(e.currentTarget as HTMLElement).getAttribute("action")!
|
||||
e.currentTarget.getAttribute("action")!
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -600,12 +606,12 @@ export class BarMediaPlayer extends SubscribeMixin(LitElement) {
|
||||
}
|
||||
}
|
||||
|
||||
private _handleMediaSeekChanged(e: Event): void {
|
||||
private _handleMediaSeekChanged(e: HASSDomTargetEvent<HaSlider>): void {
|
||||
if (this.entityId === BROWSER_PLAYER || !this._stateObj) {
|
||||
return;
|
||||
}
|
||||
|
||||
const newValue = (e.target as HaSlider).value;
|
||||
const newValue = e.target.value;
|
||||
this.hass.callService("media_player", "media_seek", {
|
||||
entity_id: this._stateObj.entity_id,
|
||||
seek_position: newValue,
|
||||
|
||||
@@ -16,7 +16,7 @@ import type {
|
||||
} from "../../data/data_entry_flow";
|
||||
import { DirtyStateProviderMixin } from "../../mixins/dirty-state-provider-mixin";
|
||||
import { haStyleDialog } from "../../resources/styles";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import type { HomeAssistant, ValueChangedEvent } from "../../types";
|
||||
|
||||
let instance = 0;
|
||||
|
||||
@@ -229,7 +229,7 @@ class HaMfaModuleSetupFlow extends DirtyStateProviderMixin<
|
||||
});
|
||||
}
|
||||
|
||||
private _stepDataChanged(ev: CustomEvent) {
|
||||
private _stepDataChanged(ev: ValueChangedEvent<Record<string, unknown>>) {
|
||||
this._stepData = ev.detail.value;
|
||||
this._updateDirtyState(this._stepData);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import type { TemplateResult } from "lit";
|
||||
import { html, LitElement } from "lit";
|
||||
import { customElement, property } from "lit/decorators";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import type { HASSDomTargetEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-switch";
|
||||
import type { HaSwitch } from "../../components/ha-switch";
|
||||
import "../../components/item/ha-row-item";
|
||||
@@ -33,8 +34,8 @@ class HaEnableShortcutsRow extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private async _checkedChanged(ev: Event) {
|
||||
const enabled = (ev.target as HaSwitch).checked;
|
||||
private async _checkedChanged(ev: HASSDomTargetEvent<HaSwitch>) {
|
||||
const enabled = ev.target.checked;
|
||||
if (enabled === this.hass.enableShortcuts) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import type { TemplateResult } from "lit";
|
||||
import { html, LitElement } from "lit";
|
||||
import { customElement, property } from "lit/decorators";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import type { HASSDomTargetEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-switch";
|
||||
import type { HaSwitch } from "../../components/ha-switch";
|
||||
import "../../components/item/ha-row-item";
|
||||
@@ -31,8 +32,8 @@ class HaForcedNarrowRow extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private async _checkedChanged(ev: Event) {
|
||||
const newValue = (ev.target as HaSwitch).checked;
|
||||
private async _checkedChanged(ev: HASSDomTargetEvent<HaSwitch>) {
|
||||
const newValue = ev.target.checked;
|
||||
if (newValue === (this.hass.dockedSidebar === "always_hidden")) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { CSSResultGroup, TemplateResult } from "lit";
|
||||
import { css, html, LitElement, nothing } from "lit";
|
||||
import { customElement, property, state } from "lit/decorators";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import type { HASSDomCurrentTargetEvent } from "../../common/dom/fire_event";
|
||||
import { copyToClipboard } from "../../common/util/copy-clipboard";
|
||||
import { withViewTransition } from "../../common/util/view-transition";
|
||||
import "../../components/ha-alert";
|
||||
@@ -11,6 +12,7 @@ import "../../components/ha-dialog";
|
||||
import "../../components/ha-dialog-footer";
|
||||
import "../../components/ha-svg-icon";
|
||||
import "../../components/input/ha-input";
|
||||
import type { HaInput } from "../../components/input/ha-input";
|
||||
import { DirtyStateProviderMixin } from "../../mixins/dirty-state-provider-mixin";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import { showToast } from "../../util/toast";
|
||||
@@ -190,8 +192,10 @@ export class HaLongLivedAccessTokenDialog extends DirtyStateProviderMixin<string
|
||||
`;
|
||||
}
|
||||
|
||||
private _nameChanged(ev: Event) {
|
||||
this._name = (ev.currentTarget as HTMLInputElement).value;
|
||||
private _nameChanged(
|
||||
ev: HASSDomCurrentTargetEvent<Omit<HaInput, "value"> & { value: string }>
|
||||
) {
|
||||
this._name = ev.currentTarget.value;
|
||||
this._errorMessage = undefined;
|
||||
this._updateDirtyState(this._name);
|
||||
}
|
||||
|
||||
@@ -5,9 +5,11 @@ import { customElement, property } from "lit/decorators";
|
||||
import memoizeOne from "memoize-one";
|
||||
import { relativeTime } from "../../common/datetime/relative_time";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import type { HASSDomCurrentTargetEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-button";
|
||||
import "../../components/ha-card";
|
||||
import "../../components/ha-icon-button";
|
||||
import type { HaIconButton } from "../../components/ha-icon-button";
|
||||
import "../../components/ha-settings-row";
|
||||
import type { RefreshToken } from "../../data/refresh_token";
|
||||
import {
|
||||
@@ -110,8 +112,10 @@ class HaLongLivedTokens extends LitElement {
|
||||
});
|
||||
}
|
||||
|
||||
private async _deleteToken(ev: Event): Promise<void> {
|
||||
const token = (ev.currentTarget as any).token;
|
||||
private async _deleteToken(
|
||||
ev: HASSDomCurrentTargetEvent<HaIconButton & { token: RefreshToken }>
|
||||
): Promise<void> {
|
||||
const token = ev.currentTarget.token;
|
||||
if (
|
||||
!(await showConfirmationDialog(this, {
|
||||
title: this.hass.localize(
|
||||
|
||||
@@ -16,6 +16,7 @@ import { fireEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-button";
|
||||
import "../../components/ha-card";
|
||||
import "../../components/ha-dropdown";
|
||||
import type { HaDropdownSelectEvent } from "../../components/ha-dropdown";
|
||||
import "../../components/ha-dropdown-item";
|
||||
import "../../components/ha-icon-button";
|
||||
import "../../components/item/ha-list-item-base";
|
||||
@@ -221,7 +222,9 @@ class HaRefreshTokens extends LitElement {
|
||||
}
|
||||
|
||||
private _handleDropdownSelect(
|
||||
ev: CustomEvent<{ item: { action: string; token: RefreshToken } }>
|
||||
ev: HaDropdownSelectEvent<string> & {
|
||||
detail: { item: { action: string; token: RefreshToken } };
|
||||
}
|
||||
) {
|
||||
if (ev.detail.item.action === "toggle_expiration") {
|
||||
this._toggleTokenExpiration(ev.detail.item.token);
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import type { TemplateResult } from "lit";
|
||||
import { html, LitElement } from "lit";
|
||||
import { customElement, property } from "lit/decorators";
|
||||
import type { HASSDomEvent } from "../../common/dom/fire_event";
|
||||
import type {
|
||||
HASSDomEvent,
|
||||
HASSDomTargetEvent,
|
||||
} from "../../common/dom/fire_event";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-switch";
|
||||
import type { HaSwitch } from "../../components/ha-switch";
|
||||
@@ -15,9 +18,9 @@ declare global {
|
||||
}
|
||||
// for add event listener
|
||||
interface HTMLElementEventMap {
|
||||
"hass-suspend-when-hidden": HASSDomEvent<{
|
||||
suspend: HomeAssistant["suspendWhenHidden"];
|
||||
}>;
|
||||
"hass-suspend-when-hidden": HASSDomEvent<
|
||||
HASSDomEvents["hass-suspend-when-hidden"]
|
||||
>;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,8 +46,8 @@ class HaSetSuspendRow extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private async _checkedChanged(ev: Event) {
|
||||
const suspend = (ev.target as HaSwitch).checked;
|
||||
private async _checkedChanged(ev: HASSDomTargetEvent<HaSwitch>) {
|
||||
const suspend = ev.target.checked;
|
||||
if (suspend === this.hass.suspendWhenHidden) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import type { TemplateResult } from "lit";
|
||||
import { html, LitElement } from "lit";
|
||||
import { customElement, property } from "lit/decorators";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import type { HASSDomTargetEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-switch";
|
||||
import type { HaSwitch } from "../../components/ha-switch";
|
||||
import "../../components/item/ha-row-item";
|
||||
@@ -30,8 +31,8 @@ class HaSetVibrateRow extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private async _checkedChanged(ev: Event) {
|
||||
const vibrate = (ev.target as HaSwitch).checked;
|
||||
private async _checkedChanged(ev: HASSDomTargetEvent<HaSwitch>) {
|
||||
const vibrate = ev.target.checked;
|
||||
if (vibrate === this.hass.vibrate) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6,16 +6,19 @@ import memoizeOne from "memoize-one";
|
||||
import { formatShortDateTimeWithConditionalYear } from "../../common/datetime/format_date_time";
|
||||
import { resolveTimeZone } from "../../common/datetime/resolve-time-zone";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import type { HASSDomTargetEvent } from "../../common/dom/fire_event";
|
||||
import { computeStateName } from "../../common/entity/compute_state_name";
|
||||
import { supportsFeature } from "../../common/entity/supports-feature";
|
||||
import { supportsMarkdownHelper } from "../../common/translations/markdown_support";
|
||||
import "../../components/ha-alert";
|
||||
import "../../components/ha-button";
|
||||
import "../../components/ha-checkbox";
|
||||
import type { HaCheckbox } from "../../components/ha-checkbox";
|
||||
import "../../components/ha-date-input";
|
||||
import "../../components/ha-dialog";
|
||||
import "../../components/ha-dialog-footer";
|
||||
import "../../components/ha-textarea";
|
||||
import type { HaTextArea } from "../../components/ha-textarea";
|
||||
import "../../components/ha-time-input";
|
||||
import "../../components/input/ha-input";
|
||||
import type { HaInput } from "../../components/input/ha-input";
|
||||
@@ -30,7 +33,7 @@ import {
|
||||
import { showConfirmationDialog } from "../../dialogs/generic/show-dialog-box";
|
||||
import { DirtyStateProviderMixin } from "../../mixins/dirty-state-provider-mixin";
|
||||
import { haStyleDialog } from "../../resources/styles";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import type { HomeAssistant, ValueChangedEvent } from "../../types";
|
||||
import type { TodoItemEditDialogParams } from "./show-dialog-todo-item-editor";
|
||||
|
||||
interface TodoItemFormState {
|
||||
@@ -166,7 +169,7 @@ class DialogTodoItemEditor extends DirtyStateProviderMixin<TodoItemFormState>()(
|
||||
<div class="flex">
|
||||
<ha-checkbox
|
||||
.checked=${this._checked}
|
||||
@change=${this._checkedCanged}
|
||||
@change=${this._checkedChanged}
|
||||
.disabled=${isCreate || !canUpdate}
|
||||
></ha-checkbox>
|
||||
<ha-input
|
||||
@@ -338,22 +341,22 @@ class DialogTodoItemEditor extends DirtyStateProviderMixin<TodoItemFormState>()(
|
||||
return new Date(tzDate.getTime());
|
||||
}
|
||||
|
||||
private _checkedCanged(ev) {
|
||||
private _checkedChanged(ev: HASSDomTargetEvent<HaCheckbox>) {
|
||||
this._checked = ev.target.checked;
|
||||
this._updateDirtyState(this._currentState());
|
||||
}
|
||||
|
||||
private _handleSummaryChanged(ev: InputEvent) {
|
||||
this._summary = (ev.target as HaInput).value ?? "";
|
||||
private _handleSummaryChanged(ev: InputEvent & HASSDomTargetEvent<HaInput>) {
|
||||
this._summary = ev.target.value ?? "";
|
||||
this._updateDirtyState(this._currentState());
|
||||
}
|
||||
|
||||
private _handleDescriptionChanged(ev) {
|
||||
private _handleDescriptionChanged(ev: HASSDomTargetEvent<HaTextArea>) {
|
||||
this._description = ev.target.value;
|
||||
this._updateDirtyState(this._currentState());
|
||||
}
|
||||
|
||||
private _dueDateChanged(ev: CustomEvent) {
|
||||
private _dueDateChanged(ev: ValueChangedEvent<string | undefined>) {
|
||||
if (!ev.detail.value) {
|
||||
this._due = undefined;
|
||||
this._updateDirtyState(this._currentState());
|
||||
@@ -364,7 +367,7 @@ class DialogTodoItemEditor extends DirtyStateProviderMixin<TodoItemFormState>()(
|
||||
this._updateDirtyState(this._currentState());
|
||||
}
|
||||
|
||||
private _dueTimeChanged(ev: CustomEvent) {
|
||||
private _dueTimeChanged(ev: ValueChangedEvent<string>) {
|
||||
this._hasTime = true;
|
||||
this._due = this._parseDate(
|
||||
`${this._formatDate(this._due || new Date())}T${ev.detail.value}`
|
||||
|
||||
@@ -15,6 +15,7 @@ import memoizeOne from "memoize-one";
|
||||
import { isComponentLoaded } from "../../common/config/is_component_loaded";
|
||||
import { storage } from "../../common/decorators/storage";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import type { HASSDomCurrentTargetEvent } from "../../common/dom/fire_event";
|
||||
import { computeStateName } from "../../common/entity/compute_state_name";
|
||||
import { supportsFeature } from "../../common/entity/supports-feature";
|
||||
import { navigate } from "../../common/navigate";
|
||||
@@ -396,8 +397,8 @@ class PanelTodo extends LitElement {
|
||||
}
|
||||
}
|
||||
|
||||
private _setEntityId(ev: Event) {
|
||||
const item = ev.currentTarget as HaDropdownItem;
|
||||
private _setEntityId(ev: HASSDomCurrentTargetEvent<HaDropdownItem>) {
|
||||
const item = ev.currentTarget;
|
||||
|
||||
this._entityId = item.value;
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@asamuzakjp/dom-selector@npm:^8.2.5":
|
||||
"@asamuzakjp/dom-selector@npm:^8.3.0":
|
||||
version: 8.3.0
|
||||
resolution: "@asamuzakjp/dom-selector@npm:8.3.0"
|
||||
dependencies:
|
||||
@@ -2499,7 +2499,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@csstools/css-syntax-patches-for-csstree@npm:^1.1.6":
|
||||
"@csstools/css-syntax-patches-for-csstree@npm:^1.1.7":
|
||||
version: 1.1.7
|
||||
resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.1.7"
|
||||
peerDependencies:
|
||||
@@ -2763,12 +2763,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/icu-messageformat-parser@npm:3.5.15":
|
||||
version: 3.5.15
|
||||
resolution: "@formatjs/icu-messageformat-parser@npm:3.5.15"
|
||||
"@formatjs/icu-messageformat-parser@npm:3.5.16":
|
||||
version: 3.5.16
|
||||
resolution: "@formatjs/icu-messageformat-parser@npm:3.5.16"
|
||||
dependencies:
|
||||
"@formatjs/icu-skeleton-parser": "npm:2.1.11"
|
||||
checksum: 10/4337a0bc8df86c498509a3a4b51fc2b4bb6e36c444447d64b5d5ca7b60b3dac676e67863e160b5269f7d35a42f3ab17d2eeeb056123120181db31c7a50f831e9
|
||||
checksum: 10/406cf08cf01a68e244c7077b726b199dde6ba4c95ecb2d807bff9ec62a9acc77b7f47fad196f02dfbd7a7b8110cccf5d5392e9693069e2484cf96f00899a728f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2779,13 +2779,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-datetimeformat@npm:7.5.2":
|
||||
version: 7.5.2
|
||||
resolution: "@formatjs/intl-datetimeformat@npm:7.5.2"
|
||||
"@formatjs/intl-datetimeformat@npm:7.6.0":
|
||||
version: 7.6.0
|
||||
resolution: "@formatjs/intl-datetimeformat@npm:7.6.0"
|
||||
dependencies:
|
||||
"@formatjs/bigdecimal": "npm:0.2.7"
|
||||
"@formatjs/intl-localematcher": "npm:0.8.13"
|
||||
checksum: 10/a9b18f890bd1fd747b6a4639a7fcc30456dfed2e78aebeca1dac245f1f2a5a20d295a9a125fc7037a7603ec257e0fadd7989ea180c68dd5a30c8ae2c429d689d
|
||||
checksum: 10/8d172390d12c0d771721e5737d4af37ed3dd3bdbb59dfbc7ac2280ee17ff0ed56a737d0b8a3ca507e40c556140b4297a28d72b33b5b3b3e9becca55d8ef26549
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2843,13 +2843,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-numberformat@npm:9.3.14":
|
||||
version: 9.3.14
|
||||
resolution: "@formatjs/intl-numberformat@npm:9.3.14"
|
||||
"@formatjs/intl-numberformat@npm:9.4.0":
|
||||
version: 9.4.0
|
||||
resolution: "@formatjs/intl-numberformat@npm:9.4.0"
|
||||
dependencies:
|
||||
"@formatjs/bigdecimal": "npm:0.2.7"
|
||||
"@formatjs/intl-localematcher": "npm:0.8.13"
|
||||
checksum: 10/7ba06936b41674cdcfa2aabc05a1dac5defbbb57a790bf8e3eb97d930750b0ec5ba715124cb3661d54015072f6877cbece5d92fa5e2ab98ba32d096c99432140
|
||||
checksum: 10/63476552f2cb9dd8530c8965bf891e9ead573813e5a42c1fc2dc7e254ff3fec15aba90ac44a4df1a875a2c2e04431e7eea643098651afaebf2f439d4a7cacea0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4208,14 +4208,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@playwright/test@npm:1.62.0":
|
||||
version: 1.62.0
|
||||
resolution: "@playwright/test@npm:1.62.0"
|
||||
"@playwright/test@npm:1.62.1":
|
||||
version: 1.62.1
|
||||
resolution: "@playwright/test@npm:1.62.1"
|
||||
dependencies:
|
||||
playwright: "npm:1.62.0"
|
||||
playwright: "npm:1.62.1"
|
||||
bin:
|
||||
playwright: cli.js
|
||||
checksum: 10/90b504f3933b97687580d7e6ba42ce9e73a9cdd41da5ae59441104b3dfa1508142ed17e5742acc70fdc2aef79078365859c6a463cebf46a8f7db9506a3ece1d6
|
||||
checksum: 10/a84fdc2b0c0f01131fa4c0f0aaebf2698a618ca4a459e3b71ebec4b0b8a5be5b7b1a3cfc063e316d4d75f403a04078d214baf69c4bcbc9606ba12be696d4ff14
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4740,65 +4740,65 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-darwin-arm64@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-darwin-arm64@npm:2.1.6"
|
||||
"@rspack/binding-darwin-arm64@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-darwin-arm64@npm:2.1.7"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-darwin-x64@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-darwin-x64@npm:2.1.6"
|
||||
"@rspack/binding-darwin-x64@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-darwin-x64@npm:2.1.7"
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-arm64-gnu@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-linux-arm64-gnu@npm:2.1.6"
|
||||
"@rspack/binding-linux-arm64-gnu@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-linux-arm64-gnu@npm:2.1.7"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-arm64-musl@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-linux-arm64-musl@npm:2.1.6"
|
||||
"@rspack/binding-linux-arm64-musl@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-linux-arm64-musl@npm:2.1.7"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-riscv64-gnu@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-linux-riscv64-gnu@npm:2.1.6"
|
||||
"@rspack/binding-linux-riscv64-gnu@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-linux-riscv64-gnu@npm:2.1.7"
|
||||
conditions: os=linux & cpu=riscv64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-riscv64-musl@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-linux-riscv64-musl@npm:2.1.6"
|
||||
"@rspack/binding-linux-riscv64-musl@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-linux-riscv64-musl@npm:2.1.7"
|
||||
conditions: os=linux & cpu=riscv64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-x64-gnu@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-linux-x64-gnu@npm:2.1.6"
|
||||
"@rspack/binding-linux-x64-gnu@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-linux-x64-gnu@npm:2.1.7"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-x64-musl@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-linux-x64-musl@npm:2.1.6"
|
||||
"@rspack/binding-linux-x64-musl@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-linux-x64-musl@npm:2.1.7"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-wasm32-wasi@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-wasm32-wasi@npm:2.1.6"
|
||||
"@rspack/binding-wasm32-wasi@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-wasm32-wasi@npm:2.1.7"
|
||||
dependencies:
|
||||
"@emnapi/core": "npm:1.11.2"
|
||||
"@emnapi/runtime": "npm:1.11.2"
|
||||
@@ -4807,43 +4807,43 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-win32-arm64-msvc@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-win32-arm64-msvc@npm:2.1.6"
|
||||
"@rspack/binding-win32-arm64-msvc@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-win32-arm64-msvc@npm:2.1.7"
|
||||
conditions: os=win32 & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-win32-ia32-msvc@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-win32-ia32-msvc@npm:2.1.6"
|
||||
"@rspack/binding-win32-ia32-msvc@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-win32-ia32-msvc@npm:2.1.7"
|
||||
conditions: os=win32 & cpu=ia32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-win32-x64-msvc@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding-win32-x64-msvc@npm:2.1.6"
|
||||
"@rspack/binding-win32-x64-msvc@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding-win32-x64-msvc@npm:2.1.7"
|
||||
conditions: os=win32 & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/binding@npm:2.1.6"
|
||||
"@rspack/binding@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/binding@npm:2.1.7"
|
||||
dependencies:
|
||||
"@rspack/binding-darwin-arm64": "npm:2.1.6"
|
||||
"@rspack/binding-darwin-x64": "npm:2.1.6"
|
||||
"@rspack/binding-linux-arm64-gnu": "npm:2.1.6"
|
||||
"@rspack/binding-linux-arm64-musl": "npm:2.1.6"
|
||||
"@rspack/binding-linux-riscv64-gnu": "npm:2.1.6"
|
||||
"@rspack/binding-linux-riscv64-musl": "npm:2.1.6"
|
||||
"@rspack/binding-linux-x64-gnu": "npm:2.1.6"
|
||||
"@rspack/binding-linux-x64-musl": "npm:2.1.6"
|
||||
"@rspack/binding-wasm32-wasi": "npm:2.1.6"
|
||||
"@rspack/binding-win32-arm64-msvc": "npm:2.1.6"
|
||||
"@rspack/binding-win32-ia32-msvc": "npm:2.1.6"
|
||||
"@rspack/binding-win32-x64-msvc": "npm:2.1.6"
|
||||
"@rspack/binding-darwin-arm64": "npm:2.1.7"
|
||||
"@rspack/binding-darwin-x64": "npm:2.1.7"
|
||||
"@rspack/binding-linux-arm64-gnu": "npm:2.1.7"
|
||||
"@rspack/binding-linux-arm64-musl": "npm:2.1.7"
|
||||
"@rspack/binding-linux-riscv64-gnu": "npm:2.1.7"
|
||||
"@rspack/binding-linux-riscv64-musl": "npm:2.1.7"
|
||||
"@rspack/binding-linux-x64-gnu": "npm:2.1.7"
|
||||
"@rspack/binding-linux-x64-musl": "npm:2.1.7"
|
||||
"@rspack/binding-wasm32-wasi": "npm:2.1.7"
|
||||
"@rspack/binding-win32-arm64-msvc": "npm:2.1.7"
|
||||
"@rspack/binding-win32-ia32-msvc": "npm:2.1.7"
|
||||
"@rspack/binding-win32-x64-msvc": "npm:2.1.7"
|
||||
dependenciesMeta:
|
||||
"@rspack/binding-darwin-arm64":
|
||||
optional: true
|
||||
@@ -4869,15 +4869,15 @@ __metadata:
|
||||
optional: true
|
||||
"@rspack/binding-win32-x64-msvc":
|
||||
optional: true
|
||||
checksum: 10/0d164b7425f448ed6b8b81e687f4a82377289476cee41553ced9532e211d216fa13429b9125f3e3f025e391709bf752983c16eb4549341a21cbd0c61510afbeb
|
||||
checksum: 10/1400d8553d2122850fc43a45b69828bcdcbccf7715381a627802e160da6f93e90ca41d0280a69d175894bc29a428a374c80157b874883363b998090dc0aff33c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/core@npm:2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@rspack/core@npm:2.1.6"
|
||||
"@rspack/core@npm:2.1.7":
|
||||
version: 2.1.7
|
||||
resolution: "@rspack/core@npm:2.1.7"
|
||||
dependencies:
|
||||
"@rspack/binding": "npm:2.1.6"
|
||||
"@rspack/binding": "npm:2.1.7"
|
||||
peerDependencies:
|
||||
"@module-federation/runtime-tools": ^0.24.1 || ^2.0.0
|
||||
"@swc/helpers": ^0.5.23
|
||||
@@ -4886,7 +4886,7 @@ __metadata:
|
||||
optional: true
|
||||
"@swc/helpers":
|
||||
optional: true
|
||||
checksum: 10/334f8e13aa3540b7320d3186250fc4e2f128711f765d2073274188f23c692d4262e7cbb88c10571626b55e480186c474bdbcb564e7fa97df803479554de855b4
|
||||
checksum: 10/84526df889fa2813cfa7dfbed71b713c47c2010b1f55da26db698a87ea11f3f433a931ec29616ff300cb63d0ea27cbe7d2b40df64abf45f9b1a484b59c94ca1a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -9904,13 +9904,13 @@ __metadata:
|
||||
"@date-fns/tz": "npm:1.5.0"
|
||||
"@egjs/hammerjs": "npm:2.0.17"
|
||||
"@eslint/js": "npm:10.0.1"
|
||||
"@formatjs/intl-datetimeformat": "npm:7.5.2"
|
||||
"@formatjs/intl-datetimeformat": "npm:7.6.0"
|
||||
"@formatjs/intl-displaynames": "npm:7.3.13"
|
||||
"@formatjs/intl-durationformat": "npm:0.10.18"
|
||||
"@formatjs/intl-getcanonicallocales": "npm:3.2.11"
|
||||
"@formatjs/intl-listformat": "npm:8.3.13"
|
||||
"@formatjs/intl-locale": "npm:5.3.10"
|
||||
"@formatjs/intl-numberformat": "npm:9.3.14"
|
||||
"@formatjs/intl-numberformat": "npm:9.4.0"
|
||||
"@formatjs/intl-pluralrules": "npm:6.3.13"
|
||||
"@formatjs/intl-relativetimeformat": "npm:12.3.13"
|
||||
"@fullcalendar/core": "npm:6.1.21"
|
||||
@@ -9937,10 +9937,10 @@ __metadata:
|
||||
"@octokit/auth-oauth-device": "npm:8.0.3"
|
||||
"@octokit/plugin-retry": "npm:8.1.0"
|
||||
"@octokit/rest": "npm:22.0.1"
|
||||
"@playwright/test": "npm:1.62.0"
|
||||
"@playwright/test": "npm:1.62.1"
|
||||
"@replit/codemirror-indentation-markers": "npm:6.5.3"
|
||||
"@rsdoctor/rspack-plugin": "npm:1.6.1"
|
||||
"@rspack/core": "npm:2.1.6"
|
||||
"@rspack/core": "npm:2.1.7"
|
||||
"@rspack/dev-server": "npm:2.1.0"
|
||||
"@swc/helpers": "npm:0.5.23"
|
||||
"@thomasloven/round-slider": "npm:0.6.0"
|
||||
@@ -10007,9 +10007,9 @@ __metadata:
|
||||
html-minifier-terser: "npm:7.2.0"
|
||||
husky: "npm:9.1.7"
|
||||
idb-keyval: "npm:6.3.0"
|
||||
intl-messageformat: "npm:11.2.12"
|
||||
intl-messageformat: "npm:11.2.13"
|
||||
js-yaml: "npm:5.2.2"
|
||||
jsdom: "npm:30.0.0"
|
||||
jsdom: "npm:30.0.1"
|
||||
jszip: "npm:3.10.1"
|
||||
leaflet: "npm:1.9.4"
|
||||
leaflet-draw: "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch"
|
||||
@@ -10355,13 +10355,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"intl-messageformat@npm:11.2.12":
|
||||
version: 11.2.12
|
||||
resolution: "intl-messageformat@npm:11.2.12"
|
||||
"intl-messageformat@npm:11.2.13":
|
||||
version: 11.2.13
|
||||
resolution: "intl-messageformat@npm:11.2.13"
|
||||
dependencies:
|
||||
"@formatjs/fast-memoize": "npm:3.1.7"
|
||||
"@formatjs/icu-messageformat-parser": "npm:3.5.15"
|
||||
checksum: 10/e9fb7dfe11f3fc34cb01e24f550f060c8c3e56a07d634b9e10a525a57df49300cf0721fc3a8b3771fb54e8a3171571815f36dd2ab9f78024bbc11b4a58f947a2
|
||||
"@formatjs/icu-messageformat-parser": "npm:3.5.16"
|
||||
checksum: 10/7da1b2e01258ae310cd3aeabd6302497a70755ef860cc666405e89ede2927f5d5995d8a6f9be556d7dfc4f7b1eb0a13b26c9633234fdb4afea762013bb25af65
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -10964,14 +10964,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsdom@npm:30.0.0":
|
||||
version: 30.0.0
|
||||
resolution: "jsdom@npm:30.0.0"
|
||||
"jsdom@npm:30.0.1":
|
||||
version: 30.0.1
|
||||
resolution: "jsdom@npm:30.0.1"
|
||||
dependencies:
|
||||
"@asamuzakjp/css-color": "npm:^6.0.5"
|
||||
"@asamuzakjp/dom-selector": "npm:^8.2.5"
|
||||
"@asamuzakjp/dom-selector": "npm:^8.3.0"
|
||||
"@bramus/specificity": "npm:^2.4.2"
|
||||
"@csstools/css-syntax-patches-for-csstree": "npm:^1.1.6"
|
||||
"@csstools/css-syntax-patches-for-csstree": "npm:^1.1.7"
|
||||
"@exodus/bytes": "npm:^1.15.1"
|
||||
css-tree: "npm:^3.2.1"
|
||||
data-urls: "npm:^7.0.0"
|
||||
@@ -10983,7 +10983,7 @@ __metadata:
|
||||
saxes: "npm:^6.0.0"
|
||||
symbol-tree: "npm:^3.2.4"
|
||||
tough-cookie: "npm:^6.0.2"
|
||||
undici: "npm:^8.7.0"
|
||||
undici: "npm:^8.9.0"
|
||||
w3c-xmlserializer: "npm:^5.0.0"
|
||||
webidl-conversions: "npm:^8.0.1"
|
||||
whatwg-mimetype: "npm:^5.0.0"
|
||||
@@ -10994,7 +10994,7 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
canvas:
|
||||
optional: true
|
||||
checksum: 10/dc73c071e67224465018733525047d05772667bd8e00a3703a6f6515238c027b6ca768bf86874a53d512fd0bb962d72cc6a6c31c1bc38e52318f9d412ad0bb90
|
||||
checksum: 10/5089ceca7d340b3beec451b7a3286f2bf38d707482e0bdcf046e63b4de3ea2e679372fbb733c5c24c1ce1cc9e70272d10e49fd1b4b146beb77b12c17c069cb36
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -12748,27 +12748,27 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"playwright-core@npm:1.62.0":
|
||||
version: 1.62.0
|
||||
resolution: "playwright-core@npm:1.62.0"
|
||||
"playwright-core@npm:1.62.1":
|
||||
version: 1.62.1
|
||||
resolution: "playwright-core@npm:1.62.1"
|
||||
bin:
|
||||
playwright-core: cli.js
|
||||
checksum: 10/1cf036e9ed51ea80d311ac25a871dddbc57d5e7e7a5ad23fc2741452aa8406c95e820901ec38aeecc6fca2ddc383ccc8acb0e2f29a4c12942dd0a1a63e7134a2
|
||||
checksum: 10/2dab88793a6a5cbfa27641664548ded72a4f869d7eab8d3541e070081b5e09595253aa3dbd42eb4e6eca1b03d96a727c60704359b5b309e71ca58b12549a4c06
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"playwright@npm:1.62.0":
|
||||
version: 1.62.0
|
||||
resolution: "playwright@npm:1.62.0"
|
||||
"playwright@npm:1.62.1":
|
||||
version: 1.62.1
|
||||
resolution: "playwright@npm:1.62.1"
|
||||
dependencies:
|
||||
fsevents: "npm:2.3.2"
|
||||
playwright-core: "npm:1.62.0"
|
||||
playwright-core: "npm:1.62.1"
|
||||
dependenciesMeta:
|
||||
fsevents:
|
||||
optional: true
|
||||
bin:
|
||||
playwright: cli.js
|
||||
checksum: 10/52401b5f2b67abcb555c1b1c229e5204a3ac72a604343a99e60b00bd0cd46ad661a9471ced4e6c3ff39de957a0b1f413810d191ce81cd40e455700d73a6a80a5
|
||||
checksum: 10/f99546873ab2545160ad5a0145fef8e2c1d805efd1ba77356f5b0ee3d8688192b3a2af08cd948bece36ca386fdfad889ef7e53b7aaad309940744c0bbccc0a19
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -15056,7 +15056,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici@npm:^8.4.1, undici@npm:^8.7.0":
|
||||
"undici@npm:^8.4.1, undici@npm:^8.9.0":
|
||||
version: 8.9.0
|
||||
resolution: "undici@npm:8.9.0"
|
||||
checksum: 10/dfad3e233087eafdf1d361acd17c4d45a9590d5db9400458f1c03f47d8f1ef68647e2109ebb982c862e50c227093abd2d5f44b154904fc0b3d22576b6e95cfe7
|
||||
|
||||
Reference in New Issue
Block a user