mirror of
https://github.com/home-assistant/frontend.git
synced 2025-10-08 03:09:40 +00:00
Compare commits
39 Commits
remove-tec
...
energy-pie
Author | SHA1 | Date | |
---|---|---|---|
![]() |
1d45c6c3fa | ||
![]() |
9f40b344ec | ||
![]() |
046d87d828 | ||
![]() |
165f265694 | ||
![]() |
ec3c8b616f | ||
![]() |
36daad1a10 | ||
![]() |
0d3315936e | ||
![]() |
2d6d0300b8 | ||
![]() |
3c15fc32b3 | ||
![]() |
552691e200 | ||
![]() |
91258c86c1 | ||
![]() |
3750a378cd | ||
![]() |
3231316b27 | ||
![]() |
ed467991cf | ||
![]() |
c208431956 | ||
![]() |
12d3304c72 | ||
![]() |
49f5512dd4 | ||
![]() |
aaa95266b6 | ||
![]() |
246100809d | ||
![]() |
6efca93186 | ||
![]() |
6280647b9a | ||
![]() |
2ff52c6c29 | ||
![]() |
d038e11170 | ||
![]() |
8925b39fe5 | ||
![]() |
beeef65506 | ||
![]() |
994c1b5751 | ||
![]() |
6823c647b6 | ||
![]() |
866b478dc0 | ||
![]() |
d746dc5752 | ||
![]() |
5f53e1e71c | ||
![]() |
3da82df093 | ||
![]() |
4cedfffb71 | ||
![]() |
1e1514e7da | ||
![]() |
60e07075bc | ||
![]() |
c998086474 | ||
![]() |
53be0a3fa2 | ||
![]() |
d69c46c80c | ||
![]() |
0c2a7bfed0 | ||
![]() |
afdd232e38 |
2
.github/workflows/release.yaml
vendored
2
.github/workflows/release.yaml
vendored
@@ -75,7 +75,7 @@ jobs:
|
|||||||
|
|
||||||
# home-assistant/wheels doesn't support SHA pinning
|
# home-assistant/wheels doesn't support SHA pinning
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: home-assistant/wheels@2025.07.0
|
uses: home-assistant/wheels@2025.09.1
|
||||||
with:
|
with:
|
||||||
abi: cp313
|
abi: cp313
|
||||||
tag: musllinux_1_2
|
tag: musllinux_1_2
|
||||||
|
@@ -75,7 +75,7 @@ export const castDemoEntities: () => Entity[] = () =>
|
|||||||
longitude: 4.8903147,
|
longitude: 4.8903147,
|
||||||
radius: 100,
|
radius: 100,
|
||||||
friendly_name: "Home",
|
friendly_name: "Home",
|
||||||
icon: "hass:home",
|
icon: "mdi:home",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"input_number.harmonyvolume": {
|
"input_number.harmonyvolume": {
|
||||||
@@ -88,7 +88,7 @@ export const castDemoEntities: () => Entity[] = () =>
|
|||||||
step: 1,
|
step: 1,
|
||||||
mode: "slider",
|
mode: "slider",
|
||||||
friendly_name: "Volume",
|
friendly_name: "Volume",
|
||||||
icon: "hass:volume-high",
|
icon: "mdi:volume-high",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"climate.upstairs": {
|
"climate.upstairs": {
|
||||||
|
@@ -56,7 +56,7 @@ export const castDemoLovelace: () => LovelaceConfig = () => {
|
|||||||
type: "weblink",
|
type: "weblink",
|
||||||
url: "/lovelace/climate",
|
url: "/lovelace/climate",
|
||||||
name: "Climate controls",
|
name: "Climate controls",
|
||||||
icon: "hass:arrow-right",
|
icon: "mdi:arrow-right",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -76,7 +76,7 @@ export const castDemoLovelace: () => LovelaceConfig = () => {
|
|||||||
type: "weblink",
|
type: "weblink",
|
||||||
url: "/lovelace/overview",
|
url: "/lovelace/overview",
|
||||||
name: "Back",
|
name: "Back",
|
||||||
icon: "hass:arrow-left",
|
icon: "mdi:arrow-left",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@@ -143,7 +143,7 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
|
|||||||
state: "on",
|
state: "on",
|
||||||
attributes: {
|
attributes: {
|
||||||
friendly_name: "Home Automation",
|
friendly_name: "Home Automation",
|
||||||
icon: "hass:home-automation",
|
icon: "mdi:home-automation",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"input_boolean.tvtime": {
|
"input_boolean.tvtime": {
|
||||||
|
@@ -4,7 +4,7 @@ export const demoLovelaceArsaboo: DemoConfig["lovelace"] = (localize) => ({
|
|||||||
title: "Home Assistant",
|
title: "Home Assistant",
|
||||||
views: [
|
views: [
|
||||||
{
|
{
|
||||||
icon: "hass:home-assistant",
|
icon: "mdi:home-assistant",
|
||||||
id: "home",
|
id: "home",
|
||||||
title: "Home",
|
title: "Home",
|
||||||
cards: [
|
cards: [
|
||||||
|
@@ -1236,7 +1236,7 @@ export const demoLovelaceJimpower: DemoConfig["lovelace"] = () => ({
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
path: "security",
|
path: "security",
|
||||||
icon: "hass:shield-home",
|
icon: "mdi:shield-home",
|
||||||
name: "Security",
|
name: "Security",
|
||||||
background:
|
background:
|
||||||
'center / cover no-repeat url("/assets/jimpower/background-15.jpg") fixed',
|
'center / cover no-repeat url("/assets/jimpower/background-15.jpg") fixed',
|
||||||
|
10
package.json
10
package.json
@@ -28,13 +28,13 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "7.28.4",
|
"@babel/runtime": "7.28.4",
|
||||||
"@braintree/sanitize-url": "7.1.1",
|
"@braintree/sanitize-url": "7.1.1",
|
||||||
"@codemirror/autocomplete": "6.18.7",
|
"@codemirror/autocomplete": "6.19.0",
|
||||||
"@codemirror/commands": "6.8.1",
|
"@codemirror/commands": "6.8.1",
|
||||||
"@codemirror/language": "6.11.3",
|
"@codemirror/language": "6.11.3",
|
||||||
"@codemirror/legacy-modes": "6.5.1",
|
"@codemirror/legacy-modes": "6.5.1",
|
||||||
"@codemirror/search": "6.5.11",
|
"@codemirror/search": "6.5.11",
|
||||||
"@codemirror/state": "6.5.2",
|
"@codemirror/state": "6.5.2",
|
||||||
"@codemirror/view": "6.38.3",
|
"@codemirror/view": "6.38.4",
|
||||||
"@date-fns/tz": "1.4.1",
|
"@date-fns/tz": "1.4.1",
|
||||||
"@egjs/hammerjs": "2.0.17",
|
"@egjs/hammerjs": "2.0.17",
|
||||||
"@formatjs/intl-datetimeformat": "6.18.0",
|
"@formatjs/intl-datetimeformat": "6.18.0",
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
"@fullcalendar/list": "6.1.19",
|
"@fullcalendar/list": "6.1.19",
|
||||||
"@fullcalendar/luxon3": "6.1.19",
|
"@fullcalendar/luxon3": "6.1.19",
|
||||||
"@fullcalendar/timegrid": "6.1.19",
|
"@fullcalendar/timegrid": "6.1.19",
|
||||||
"@home-assistant/webawesome": "3.0.0-beta.4.ha.3",
|
"@home-assistant/webawesome": "3.0.0-beta.6.ha.0",
|
||||||
"@lezer/highlight": "1.2.1",
|
"@lezer/highlight": "1.2.1",
|
||||||
"@lit-labs/motion": "1.0.9",
|
"@lit-labs/motion": "1.0.9",
|
||||||
"@lit-labs/observers": "2.0.6",
|
"@lit-labs/observers": "2.0.6",
|
||||||
@@ -157,7 +157,7 @@
|
|||||||
"@octokit/auth-oauth-device": "8.0.1",
|
"@octokit/auth-oauth-device": "8.0.1",
|
||||||
"@octokit/plugin-retry": "8.0.1",
|
"@octokit/plugin-retry": "8.0.1",
|
||||||
"@octokit/rest": "22.0.0",
|
"@octokit/rest": "22.0.0",
|
||||||
"@rsdoctor/rspack-plugin": "1.2.3",
|
"@rsdoctor/rspack-plugin": "1.3.1",
|
||||||
"@rspack/core": "1.5.7",
|
"@rspack/core": "1.5.7",
|
||||||
"@rspack/dev-server": "1.1.4",
|
"@rspack/dev-server": "1.1.4",
|
||||||
"@types/babel__plugin-transform-runtime": "7.9.5",
|
"@types/babel__plugin-transform-runtime": "7.9.5",
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
"husky": "9.1.7",
|
"husky": "9.1.7",
|
||||||
"jsdom": "27.0.0",
|
"jsdom": "27.0.0",
|
||||||
"jszip": "3.10.1",
|
"jszip": "3.10.1",
|
||||||
"lint-staged": "16.2.1",
|
"lint-staged": "16.2.3",
|
||||||
"lit-analyzer": "2.0.3",
|
"lit-analyzer": "2.0.3",
|
||||||
"lodash.merge": "4.6.2",
|
"lodash.merge": "4.6.2",
|
||||||
"lodash.template": "4.5.0",
|
"lodash.template": "4.5.0",
|
||||||
|
@@ -18,6 +18,7 @@ export const FIXED_DOMAIN_STATES = {
|
|||||||
"pending",
|
"pending",
|
||||||
"triggered",
|
"triggered",
|
||||||
],
|
],
|
||||||
|
alert: ["on", "off", "idle"],
|
||||||
assist_satellite: ["idle", "listening", "responding", "processing"],
|
assist_satellite: ["idle", "listening", "responding", "processing"],
|
||||||
automation: ["on", "off"],
|
automation: ["on", "off"],
|
||||||
binary_sensor: ["on", "off"],
|
binary_sensor: ["on", "off"],
|
||||||
|
@@ -40,6 +40,7 @@ const STATE_COLORED_DOMAIN = new Set([
|
|||||||
"vacuum",
|
"vacuum",
|
||||||
"valve",
|
"valve",
|
||||||
"water_heater",
|
"water_heater",
|
||||||
|
"weather",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
export const stateColorCss = (stateObj: HassEntity, state?: string) => {
|
export const stateColorCss = (stateObj: HassEntity, state?: string) => {
|
||||||
|
@@ -32,6 +32,8 @@ export const numberFormatToLocale = (
|
|||||||
return ["de", "es", "it"]; // Use German with fallback to Spanish then Italian formatting 1.234.567,89
|
return ["de", "es", "it"]; // Use German with fallback to Spanish then Italian formatting 1.234.567,89
|
||||||
case NumberFormat.space_comma:
|
case NumberFormat.space_comma:
|
||||||
return ["fr", "sv", "cs"]; // Use French with fallback to Swedish and Czech formatting 1 234 567,89
|
return ["fr", "sv", "cs"]; // Use French with fallback to Swedish and Czech formatting 1 234 567,89
|
||||||
|
case NumberFormat.quote_decimal:
|
||||||
|
return ["de-CH"]; // Use German (Switzerland) formatting 1'234'567.89
|
||||||
case NumberFormat.system:
|
case NumberFormat.system:
|
||||||
return undefined;
|
return undefined;
|
||||||
default:
|
default:
|
||||||
|
@@ -6,6 +6,8 @@ import { computeDomain } from "../../common/entity/compute_domain";
|
|||||||
import { stateColorProperties } from "../../common/entity/state_color";
|
import { stateColorProperties } from "../../common/entity/state_color";
|
||||||
import { UNAVAILABLE, UNKNOWN } from "../../data/entity";
|
import { UNAVAILABLE, UNKNOWN } from "../../data/entity";
|
||||||
import { computeCssValue } from "../../resources/css-variables";
|
import { computeCssValue } from "../../resources/css-variables";
|
||||||
|
import { computeStateDomain } from "../../common/entity/compute_state_domain";
|
||||||
|
import { FIXED_DOMAIN_STATES } from "../../common/entity/get_states";
|
||||||
|
|
||||||
const DOMAIN_STATE_SHADES: Record<string, Record<string, number>> = {
|
const DOMAIN_STATE_SHADES: Record<string, Record<string, number>> = {
|
||||||
media_player: {
|
media_player: {
|
||||||
@@ -51,6 +53,28 @@ function computeTimelineStateColor(
|
|||||||
let colorIndex = 0;
|
let colorIndex = 0;
|
||||||
const stateColorMap = new Map<string, string>();
|
const stateColorMap = new Map<string, string>();
|
||||||
|
|
||||||
|
function computeTimelineEnumColor(
|
||||||
|
state: string,
|
||||||
|
computedStyles: CSSStyleDeclaration,
|
||||||
|
stateObj?: HassEntity
|
||||||
|
): string | undefined {
|
||||||
|
if (!stateObj) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
const domain = computeStateDomain(stateObj);
|
||||||
|
const states =
|
||||||
|
FIXED_DOMAIN_STATES[domain] ||
|
||||||
|
(domain === "sensor" &&
|
||||||
|
stateObj.attributes.device_class === "enum" &&
|
||||||
|
stateObj.attributes.options) ||
|
||||||
|
[];
|
||||||
|
const idx = states.indexOf(state);
|
||||||
|
if (idx === -1) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return getGraphColorByIndex(idx, computedStyles);
|
||||||
|
}
|
||||||
|
|
||||||
function computeTimeLineGenericColor(
|
function computeTimeLineGenericColor(
|
||||||
state: string,
|
state: string,
|
||||||
computedStyles: CSSStyleDeclaration
|
computedStyles: CSSStyleDeclaration
|
||||||
@@ -71,6 +95,7 @@ export function computeTimelineColor(
|
|||||||
): string {
|
): string {
|
||||||
return (
|
return (
|
||||||
computeTimelineStateColor(state, computedStyles, stateObj) ||
|
computeTimelineStateColor(state, computedStyles, stateObj) ||
|
||||||
|
computeTimelineEnumColor(state, computedStyles, stateObj) ||
|
||||||
computeTimeLineGenericColor(state, computedStyles)
|
computeTimeLineGenericColor(state, computedStyles)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -112,7 +112,7 @@ export class HaEntityToggle extends LitElement {
|
|||||||
if (!this.hass || !this.stateObj) {
|
if (!this.hass || !this.stateObj) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
const stateDomain = computeStateDomain(this.stateObj);
|
const stateDomain = computeStateDomain(this.stateObj);
|
||||||
let serviceDomain;
|
let serviceDomain;
|
||||||
let service;
|
let service;
|
||||||
|
@@ -62,7 +62,7 @@ export class HaColorTempSelector extends LitElement {
|
|||||||
"--ha-slider-background": `linear-gradient( to var(--float-end), ${gradient})`,
|
"--ha-slider-background": `linear-gradient( to var(--float-end), ${gradient})`,
|
||||||
})}
|
})}
|
||||||
labeled
|
labeled
|
||||||
icon="hass:thermometer"
|
icon="mdi:thermometer"
|
||||||
.caption=${this.label || ""}
|
.caption=${this.label || ""}
|
||||||
.min=${min}
|
.min=${min}
|
||||||
.max=${max}
|
.max=${max}
|
||||||
|
@@ -15,7 +15,7 @@ export class HaSwitch extends SwitchBase {
|
|||||||
super.firstUpdated();
|
super.firstUpdated();
|
||||||
this.addEventListener("change", () => {
|
this.addEventListener("change", () => {
|
||||||
if (this.haptic) {
|
if (this.haptic) {
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -28,6 +28,6 @@ declare global {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const forwardHaptic = (hapticType: HapticType) => {
|
export const forwardHaptic = (node: HTMLElement, hapticType: HapticType) => {
|
||||||
fireEvent(window, "haptic", hapticType);
|
fireEvent(node, "haptic", hapticType);
|
||||||
};
|
};
|
||||||
|
@@ -66,9 +66,9 @@ export const getPanelIcon = (panel: PanelInfo): string | null => {
|
|||||||
if (!panel.icon) {
|
if (!panel.icon) {
|
||||||
switch (panel.component_name) {
|
switch (panel.component_name) {
|
||||||
case "profile":
|
case "profile":
|
||||||
return "hass:account";
|
return "mdi:account";
|
||||||
case "lovelace":
|
case "lovelace":
|
||||||
return "hass:view-dashboard";
|
return "mdi:view-dashboard";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,6 +6,7 @@ export enum NumberFormat {
|
|||||||
system = "system",
|
system = "system",
|
||||||
comma_decimal = "comma_decimal",
|
comma_decimal = "comma_decimal",
|
||||||
decimal_comma = "decimal_comma",
|
decimal_comma = "decimal_comma",
|
||||||
|
quote_decimal = "quote_decimal",
|
||||||
space_comma = "space_comma",
|
space_comma = "space_comma",
|
||||||
none = "none",
|
none = "none",
|
||||||
}
|
}
|
||||||
|
@@ -110,7 +110,7 @@ class LightRgbColorPicker extends LitElement {
|
|||||||
? html`<ha-labeled-slider
|
? html`<ha-labeled-slider
|
||||||
labeled
|
labeled
|
||||||
.caption=${this.hass.localize("ui.card.light.color_brightness")}
|
.caption=${this.hass.localize("ui.card.light.color_brightness")}
|
||||||
icon="hass:brightness-7"
|
icon="mdi:brightness-7"
|
||||||
min="0"
|
min="0"
|
||||||
max="100"
|
max="100"
|
||||||
.value=${this._colorBrightnessSliderValue}
|
.value=${this._colorBrightnessSliderValue}
|
||||||
@@ -122,7 +122,7 @@ class LightRgbColorPicker extends LitElement {
|
|||||||
<ha-labeled-slider
|
<ha-labeled-slider
|
||||||
labeled
|
labeled
|
||||||
.caption=${this.hass.localize("ui.card.light.white_value")}
|
.caption=${this.hass.localize("ui.card.light.white_value")}
|
||||||
icon="hass:file-word-box"
|
icon="mdi:file-word-box"
|
||||||
min="0"
|
min="0"
|
||||||
max="100"
|
max="100"
|
||||||
.name=${"wv"}
|
.name=${"wv"}
|
||||||
@@ -136,7 +136,7 @@ class LightRgbColorPicker extends LitElement {
|
|||||||
<ha-labeled-slider
|
<ha-labeled-slider
|
||||||
labeled
|
labeled
|
||||||
.caption=${this.hass.localize("ui.card.light.cold_white_value")}
|
.caption=${this.hass.localize("ui.card.light.cold_white_value")}
|
||||||
icon="hass:file-word-box-outline"
|
icon="mdi:file-word-box-outline"
|
||||||
min="0"
|
min="0"
|
||||||
max="100"
|
max="100"
|
||||||
.name=${"cw"}
|
.name=${"cw"}
|
||||||
@@ -146,7 +146,7 @@ class LightRgbColorPicker extends LitElement {
|
|||||||
<ha-labeled-slider
|
<ha-labeled-slider
|
||||||
labeled
|
labeled
|
||||||
.caption=${this.hass.localize("ui.card.light.warm_white_value")}
|
.caption=${this.hass.localize("ui.card.light.warm_white_value")}
|
||||||
icon="hass:file-word-box"
|
icon="mdi:file-word-box"
|
||||||
min="0"
|
min="0"
|
||||||
max="100"
|
max="100"
|
||||||
.name=${"ww"}
|
.name=${"ww"}
|
||||||
|
@@ -42,7 +42,7 @@ class MoreInfoFan extends LitElement {
|
|||||||
|
|
||||||
private _toggle = () => {
|
private _toggle = () => {
|
||||||
const service = this.stateObj?.state === "on" ? "turn_off" : "turn_on";
|
const service = this.stateObj?.state === "on" ? "turn_off" : "turn_on";
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
this.hass.callService("fan", service, {
|
this.hass.callService("fan", service, {
|
||||||
entity_id: this.stateObj!.entity_id,
|
entity_id: this.stateObj!.entity_id,
|
||||||
});
|
});
|
||||||
|
@@ -310,7 +310,7 @@ class MoreInfoLight extends LitElement {
|
|||||||
|
|
||||||
private _toggle = () => {
|
private _toggle = () => {
|
||||||
const service = this.stateObj?.state === "on" ? "turn_off" : "turn_on";
|
const service = this.stateObj?.state === "on" ? "turn_off" : "turn_on";
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
this.hass.callService("light", service, {
|
this.hass.callService("light", service, {
|
||||||
entity_id: this.stateObj!.entity_id,
|
entity_id: this.stateObj!.entity_id,
|
||||||
});
|
});
|
||||||
|
@@ -258,7 +258,10 @@ class MoreInfoMediaPlayer extends LitElement {
|
|||||||
|
|
||||||
const stateObj = this.stateObj;
|
const stateObj = this.stateObj;
|
||||||
const controls = computeMediaControls(stateObj, true);
|
const controls = computeMediaControls(stateObj, true);
|
||||||
const coverUrl = stateObj.attributes.entity_picture || "";
|
const coverUrl =
|
||||||
|
stateObj.attributes.entity_picture_local ||
|
||||||
|
stateObj.attributes.entity_picture ||
|
||||||
|
"";
|
||||||
const playerObj = new HassMediaPlayerEntity(this.hass, this.stateObj);
|
const playerObj = new HassMediaPlayerEntity(this.hass, this.stateObj);
|
||||||
|
|
||||||
const position = Math.max(Math.floor(playerObj.currentProgress || 0), 0);
|
const position = Math.max(Math.floor(playerObj.currentProgress || 0), 0);
|
||||||
|
@@ -60,28 +60,28 @@ export const demoPanels: Panels = {
|
|||||||
// Uncomment when we are ready to stub the history API
|
// Uncomment when we are ready to stub the history API
|
||||||
// history: {
|
// history: {
|
||||||
// component_name: "history",
|
// component_name: "history",
|
||||||
// icon: "hass:poll-box",
|
// icon: "mdi:chart-box",
|
||||||
// title: "history",
|
// title: "history",
|
||||||
// config: null,
|
// config: null,
|
||||||
// url_path: "history",
|
// url_path: "history",
|
||||||
// },
|
// },
|
||||||
map: {
|
map: {
|
||||||
component_name: "lovelace",
|
component_name: "lovelace",
|
||||||
icon: "hass:tooltip-account",
|
icon: "mdi:tooltip-account",
|
||||||
title: "map",
|
title: "map",
|
||||||
config: { mode: "storage" },
|
config: { mode: "storage" },
|
||||||
url_path: "map",
|
url_path: "map",
|
||||||
},
|
},
|
||||||
energy: {
|
energy: {
|
||||||
component_name: "energy",
|
component_name: "energy",
|
||||||
icon: "hass:lightning-bolt",
|
icon: "mdi:lightning-bolt",
|
||||||
title: "energy",
|
title: "energy",
|
||||||
config: null,
|
config: null,
|
||||||
url_path: "energy",
|
url_path: "energy",
|
||||||
},
|
},
|
||||||
// config: {
|
// config: {
|
||||||
// component_name: "config",
|
// component_name: "config",
|
||||||
// icon: "hass:cog",
|
// icon: "mdi:cog",
|
||||||
// title: "config",
|
// title: "config",
|
||||||
// config: null,
|
// config: null,
|
||||||
// url_path: "config",
|
// url_path: "config",
|
||||||
|
@@ -210,10 +210,10 @@ export class ZHAClusterAttributes extends LitElement {
|
|||||||
this._readingAttribute = true;
|
this._readingAttribute = true;
|
||||||
try {
|
try {
|
||||||
this._attributeValue = await readAttributeValue(this.hass, data);
|
this._attributeValue = await readAttributeValue(this.hass, data);
|
||||||
forwardHaptic("success");
|
forwardHaptic(this, "success");
|
||||||
button.actionSuccess();
|
button.actionSuccess();
|
||||||
} catch (_err: any) {
|
} catch (_err: any) {
|
||||||
forwardHaptic("failure");
|
forwardHaptic(this, "failure");
|
||||||
button.actionError();
|
button.actionError();
|
||||||
} finally {
|
} finally {
|
||||||
this._readingAttribute = false;
|
this._readingAttribute = false;
|
||||||
|
@@ -10,6 +10,7 @@ import type { PropertyValues } from "lit";
|
|||||||
import { LitElement, html, nothing } from "lit";
|
import { LitElement, html, nothing } from "lit";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
import memoizeOne from "memoize-one";
|
import memoizeOne from "memoize-one";
|
||||||
|
import { styleMap } from "lit/directives/style-map";
|
||||||
import { computeCssColor } from "../../../common/color/compute-color";
|
import { computeCssColor } from "../../../common/color/compute-color";
|
||||||
import { formatShortDateTime } from "../../../common/datetime/format_date_time";
|
import { formatShortDateTime } from "../../../common/datetime/format_date_time";
|
||||||
import { storage } from "../../../common/decorators/storage";
|
import { storage } from "../../../common/decorators/storage";
|
||||||
@@ -104,13 +105,14 @@ export class HaConfigLabels extends LitElement {
|
|||||||
template: (label) =>
|
template: (label) =>
|
||||||
label.color
|
label.color
|
||||||
? html`<div
|
? html`<div
|
||||||
style="
|
style=${styleMap({
|
||||||
background-color: ${computeCssColor(label.color)};
|
backgroundColor: computeCssColor(label.color),
|
||||||
border-radius: 10px;
|
borderRadius: "10px",
|
||||||
border: 1px solid var(--outline-color);
|
border: "1px solid var(--outline-color)",
|
||||||
box-sizing: border-box;
|
boxSizing: "border-box",
|
||||||
width: 20px;
|
width: "20px",
|
||||||
height: 20px;"
|
height: "20px",
|
||||||
|
})}
|
||||||
></div>`
|
></div>`
|
||||||
: nothing,
|
: nothing,
|
||||||
},
|
},
|
||||||
|
@@ -283,13 +283,7 @@ export class DialogLovelaceDashboardDetail extends LitElement {
|
|||||||
}
|
}
|
||||||
this.closeDialog();
|
this.closeDialog();
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
const errorMessage = err?.message;
|
this._error = { base: err?.message || "Unknown error" };
|
||||||
if (errorMessage.includes(". Got")) {
|
|
||||||
const splitMessage = errorMessage.split(". Got");
|
|
||||||
this._error = { base: splitMessage[0] };
|
|
||||||
} else {
|
|
||||||
this._error = { base: errorMessage ?? "Unknown error" };
|
|
||||||
}
|
|
||||||
} finally {
|
} finally {
|
||||||
this._submitting = false;
|
this._submitting = false;
|
||||||
}
|
}
|
||||||
|
@@ -275,7 +275,7 @@ export class HaConfigLovelaceDashboards extends LitElement {
|
|||||||
const isDefault = defaultUrlPath === "lovelace";
|
const isDefault = defaultUrlPath === "lovelace";
|
||||||
const result: DataTableItem[] = [
|
const result: DataTableItem[] = [
|
||||||
{
|
{
|
||||||
icon: "hass:view-dashboard",
|
icon: "mdi:view-dashboard",
|
||||||
title: this.hass.localize("panel.states"),
|
title: this.hass.localize("panel.states"),
|
||||||
default: isDefault,
|
default: isDefault,
|
||||||
show_in_sidebar: isDefault,
|
show_in_sidebar: isDefault,
|
||||||
@@ -288,7 +288,7 @@ export class HaConfigLovelaceDashboards extends LitElement {
|
|||||||
];
|
];
|
||||||
if (isComponentLoaded(this.hass, "energy")) {
|
if (isComponentLoaded(this.hass, "energy")) {
|
||||||
result.push({
|
result.push({
|
||||||
icon: "hass:lightning-bolt",
|
icon: "mdi:lightning-bolt",
|
||||||
title: this.hass.localize(`ui.panel.config.dashboard.energy.main`),
|
title: this.hass.localize(`ui.panel.config.dashboard.energy.main`),
|
||||||
show_in_sidebar: true,
|
show_in_sidebar: true,
|
||||||
mode: "storage",
|
mode: "storage",
|
||||||
|
@@ -1087,7 +1087,7 @@ ${rejected
|
|||||||
name: computeStateName(scene),
|
name: computeStateName(scene),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
};
|
};
|
||||||
|
|
||||||
private _deleteConfirm(scene: SceneEntity): void {
|
private _deleteConfirm(scene: SceneEntity): void {
|
||||||
|
@@ -443,7 +443,7 @@ class HaPanelDevAction extends LitElement {
|
|||||||
const button = ev.currentTarget as HaProgressButton;
|
const button = ev.currentTarget as HaProgressButton;
|
||||||
|
|
||||||
if (this._yamlMode && !this._yamlValid) {
|
if (this._yamlMode && !this._yamlValid) {
|
||||||
forwardHaptic("failure");
|
forwardHaptic(this, "failure");
|
||||||
button.actionError();
|
button.actionError();
|
||||||
this._error = this.hass.localize(
|
this._error = this.hass.localize(
|
||||||
"ui.panel.developer-tools.tabs.actions.errors.yaml.invalid_yaml"
|
"ui.panel.developer-tools.tabs.actions.errors.yaml.invalid_yaml"
|
||||||
@@ -465,7 +465,7 @@ class HaPanelDevAction extends LitElement {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (this._error !== undefined) {
|
if (this._error !== undefined) {
|
||||||
forwardHaptic("failure");
|
forwardHaptic(this, "failure");
|
||||||
button.actionError();
|
button.actionError();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -534,7 +534,7 @@ class HaPanelDevAction extends LitElement {
|
|||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forwardHaptic("failure");
|
forwardHaptic(this, "failure");
|
||||||
button.actionError();
|
button.actionError();
|
||||||
|
|
||||||
let localizedErrorMessage: string | undefined;
|
let localizedErrorMessage: string | undefined;
|
||||||
|
@@ -177,7 +177,7 @@ class HuiAreaControlsCardFeature
|
|||||||
.map((entityId) => this.hass!.states[entityId] as HassEntity | undefined)
|
.map((entityId) => this.hass!.states[entityId] as HassEntity | undefined)
|
||||||
.filter((v): v is HassEntity => Boolean(v));
|
.filter((v): v is HassEntity => Boolean(v));
|
||||||
|
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
toggleGroupEntities(this.hass, entities);
|
toggleGroupEntities(this.hass, entities);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -69,7 +69,7 @@ class HuiLockCommandsCardFeature
|
|||||||
if (!this.hass || !this._stateObj || !service) {
|
if (!this.hass || !this._stateObj || !service) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
callProtectedLockService(this, this.hass, this._stateObj, service);
|
callProtectedLockService(this, this.hass, this._stateObj, service);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -112,7 +112,7 @@ class HuiToggleCardFeature extends LitElement implements LovelaceCardFeature {
|
|||||||
if (!this.hass || !this._stateObj) {
|
if (!this.hass || !this._stateObj) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
const stateDomain = computeDomain(this._stateObj.entity_id);
|
const stateDomain = computeDomain(this._stateObj.entity_id);
|
||||||
const serviceDomain = stateDomain;
|
const serviceDomain = stateDomain;
|
||||||
const service = turnOn ? "turn_on" : "turn_off";
|
const service = turnOn ? "turn_on" : "turn_off";
|
||||||
|
@@ -2,15 +2,21 @@ import type { UnsubscribeFunc } from "home-assistant-js-websocket";
|
|||||||
import type { PropertyValues } from "lit";
|
import type { PropertyValues } from "lit";
|
||||||
import { css, html, LitElement, nothing } from "lit";
|
import { css, html, LitElement, nothing } from "lit";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
|
import { mdiChartDonut, mdiChartBar } from "@mdi/js";
|
||||||
import { classMap } from "lit/directives/class-map";
|
import { classMap } from "lit/directives/class-map";
|
||||||
import memoizeOne from "memoize-one";
|
import memoizeOne from "memoize-one";
|
||||||
import type { BarSeriesOption } from "echarts/charts";
|
import type { BarSeriesOption, PieSeriesOption } from "echarts/charts";
|
||||||
|
import { PieChart } from "echarts/charts";
|
||||||
import type { ECElementEvent } from "echarts/types/dist/shared";
|
import type { ECElementEvent } from "echarts/types/dist/shared";
|
||||||
import { getGraphColorByIndex } from "../../../../common/color/colors";
|
import { getGraphColorByIndex } from "../../../../common/color/colors";
|
||||||
import { formatNumber } from "../../../../common/number/format_number";
|
import { formatNumber } from "../../../../common/number/format_number";
|
||||||
import "../../../../components/chart/ha-chart-base";
|
import "../../../../components/chart/ha-chart-base";
|
||||||
import type { EnergyData } from "../../../../data/energy";
|
import type { EnergyData } from "../../../../data/energy";
|
||||||
import { getEnergyDataCollection } from "../../../../data/energy";
|
import {
|
||||||
|
computeConsumptionData,
|
||||||
|
getEnergyDataCollection,
|
||||||
|
getSummedData,
|
||||||
|
} from "../../../../data/energy";
|
||||||
import {
|
import {
|
||||||
calculateStatisticSumGrowth,
|
calculateStatisticSumGrowth,
|
||||||
getStatisticLabel,
|
getStatisticLabel,
|
||||||
@@ -25,6 +31,8 @@ import type { ECOption } from "../../../../resources/echarts";
|
|||||||
import "../../../../components/ha-card";
|
import "../../../../components/ha-card";
|
||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
import { measureTextWidth } from "../../../../util/text";
|
import { measureTextWidth } from "../../../../util/text";
|
||||||
|
import "../../../../components/ha-icon-button";
|
||||||
|
import { storage } from "../../../../common/decorators/storage";
|
||||||
|
|
||||||
@customElement("hui-energy-devices-graph-card")
|
@customElement("hui-energy-devices-graph-card")
|
||||||
export class HuiEnergyDevicesGraphCard
|
export class HuiEnergyDevicesGraphCard
|
||||||
@@ -35,10 +43,20 @@ export class HuiEnergyDevicesGraphCard
|
|||||||
|
|
||||||
@state() private _config?: EnergyDevicesGraphCardConfig;
|
@state() private _config?: EnergyDevicesGraphCardConfig;
|
||||||
|
|
||||||
@state() private _chartData: BarSeriesOption[] = [];
|
@state() private _chartData: (BarSeriesOption | PieSeriesOption)[] = [];
|
||||||
|
|
||||||
@state() private _data?: EnergyData;
|
@state() private _data?: EnergyData;
|
||||||
|
|
||||||
|
@state()
|
||||||
|
@storage({
|
||||||
|
key: "energy-devices-graph-chart-type",
|
||||||
|
state: true,
|
||||||
|
subscribe: false,
|
||||||
|
})
|
||||||
|
private _chartType: "bar" | "pie" = "bar";
|
||||||
|
|
||||||
|
private _compoundStats: string[] = [];
|
||||||
|
|
||||||
protected hassSubscribeRequiredHostProps = ["_config"];
|
protected hassSubscribeRequiredHostProps = ["_config"];
|
||||||
|
|
||||||
public hassSubscribe(): UnsubscribeFunc[] {
|
public hassSubscribe(): UnsubscribeFunc[] {
|
||||||
@@ -75,9 +93,16 @@ export class HuiEnergyDevicesGraphCard
|
|||||||
|
|
||||||
return html`
|
return html`
|
||||||
<ha-card>
|
<ha-card>
|
||||||
${this._config.title
|
<div class="card-header">
|
||||||
? html`<h1 class="card-header">${this._config.title}</h1>`
|
<span>${this._config.title ? this._config.title : nothing}</span>
|
||||||
: ""}
|
<ha-icon-button
|
||||||
|
path=${this._chartType === "pie" ? mdiChartBar : mdiChartDonut}
|
||||||
|
label=${this.hass.localize(
|
||||||
|
"ui.panel.lovelace.cards.energy.energy_devices_graph.change_chart_type"
|
||||||
|
)}
|
||||||
|
@click=${this._handleChartTypeChange}
|
||||||
|
></ha-icon-button>
|
||||||
|
</div>
|
||||||
<div
|
<div
|
||||||
class="content ${classMap({
|
class="content ${classMap({
|
||||||
"has-header": !!this._config.title,
|
"has-header": !!this._config.title,
|
||||||
@@ -86,9 +111,10 @@ export class HuiEnergyDevicesGraphCard
|
|||||||
<ha-chart-base
|
<ha-chart-base
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
.data=${this._chartData}
|
.data=${this._chartData}
|
||||||
.options=${this._createOptions(this._chartData)}
|
.options=${this._createOptions(this._chartData, this._chartType)}
|
||||||
.height=${`${(this._chartData[0]?.data?.length || 0) * 28 + 50}px`}
|
.height=${`${Math.max(300, (this._chartData[0]?.data?.length || 0) * 28 + 50)}px`}
|
||||||
@chart-click=${this._handleChartClick}
|
@chart-click=${this._handleChartClick}
|
||||||
|
.extraComponents=${[PieChart]}
|
||||||
></ha-chart-base>
|
></ha-chart-base>
|
||||||
</div>
|
</div>
|
||||||
</ha-card>
|
</ha-card>
|
||||||
@@ -97,71 +123,86 @@ export class HuiEnergyDevicesGraphCard
|
|||||||
|
|
||||||
private _renderTooltip(params: any) {
|
private _renderTooltip(params: any) {
|
||||||
const title = `<h4 style="text-align: center; margin: 0;">${this._getDeviceName(
|
const title = `<h4 style="text-align: center; margin: 0;">${this._getDeviceName(
|
||||||
params.value[1]
|
params.name
|
||||||
)}</h4>`;
|
)}</h4>`;
|
||||||
const value = `${formatNumber(
|
const value = `${formatNumber(
|
||||||
params.value[0] as number,
|
params.value[0] as number,
|
||||||
this.hass.locale,
|
this.hass.locale,
|
||||||
params.value[0] < 0.1 ? { maximumFractionDigits: 3 } : undefined
|
params.value < 0.1 ? { maximumFractionDigits: 3 } : undefined
|
||||||
)} kWh`;
|
)} kWh`;
|
||||||
return `${title}${params.marker} ${params.seriesName}: ${value}`;
|
return `${title}${params.marker} ${params.seriesName}: ${value}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _createOptions = memoizeOne((data: BarSeriesOption[]): ECOption => {
|
private _createOptions = memoizeOne(
|
||||||
const isMobile = window.matchMedia(
|
(
|
||||||
"all and (max-width: 450px), all and (max-height: 500px)"
|
data: (BarSeriesOption | PieSeriesOption)[],
|
||||||
).matches;
|
chartType: "bar" | "pie"
|
||||||
return {
|
): ECOption => {
|
||||||
xAxis: {
|
const options: ECOption = {
|
||||||
type: "value",
|
grid: {
|
||||||
name: "kWh",
|
top: 5,
|
||||||
},
|
left: 5,
|
||||||
yAxis: {
|
right: 40,
|
||||||
type: "category",
|
bottom: 0,
|
||||||
inverse: true,
|
containLabel: true,
|
||||||
triggerEvent: true,
|
|
||||||
// take order from data
|
|
||||||
data: data[0]?.data?.map((d: any) => d.value[1]),
|
|
||||||
axisLabel: {
|
|
||||||
formatter: this._getDeviceName.bind(this),
|
|
||||||
overflow: "truncate",
|
|
||||||
fontSize: 12,
|
|
||||||
margin: 5,
|
|
||||||
width: Math.min(
|
|
||||||
isMobile ? 100 : 200,
|
|
||||||
Math.max(
|
|
||||||
...(data[0]?.data?.map(
|
|
||||||
(d: any) =>
|
|
||||||
measureTextWidth(this._getDeviceName(d.value[1]), 12) + 5
|
|
||||||
) || [])
|
|
||||||
)
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
},
|
tooltip: {
|
||||||
grid: {
|
show: true,
|
||||||
top: 5,
|
formatter: this._renderTooltip.bind(this),
|
||||||
left: 5,
|
},
|
||||||
right: 40,
|
xAxis: { show: false },
|
||||||
bottom: 0,
|
yAxis: { show: false },
|
||||||
containLabel: true,
|
};
|
||||||
},
|
if (chartType === "bar") {
|
||||||
tooltip: {
|
const isMobile = window.matchMedia(
|
||||||
show: true,
|
"all and (max-width: 450px), all and (max-height: 500px)"
|
||||||
formatter: this._renderTooltip.bind(this),
|
).matches;
|
||||||
},
|
options.xAxis = {
|
||||||
};
|
show: true,
|
||||||
});
|
type: "value",
|
||||||
|
name: "kWh",
|
||||||
|
};
|
||||||
|
options.yAxis = {
|
||||||
|
show: true,
|
||||||
|
type: "category",
|
||||||
|
inverse: true,
|
||||||
|
triggerEvent: true,
|
||||||
|
// take order from data
|
||||||
|
data: data[0]?.data?.map((d: any) => d.name),
|
||||||
|
axisLabel: {
|
||||||
|
formatter: this._getDeviceName.bind(this),
|
||||||
|
overflow: "truncate",
|
||||||
|
fontSize: 12,
|
||||||
|
margin: 5,
|
||||||
|
width: Math.min(
|
||||||
|
isMobile ? 100 : 200,
|
||||||
|
Math.max(
|
||||||
|
...(data[0]?.data?.map(
|
||||||
|
(d: any) =>
|
||||||
|
measureTextWidth(this._getDeviceName(d.name), 12) + 5
|
||||||
|
) || [])
|
||||||
|
)
|
||||||
|
),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
private _getDeviceName(statisticId: string): string {
|
private _getDeviceName(statisticId: string): string {
|
||||||
|
const suffix = this._compoundStats.includes(statisticId)
|
||||||
|
? ` (${this.hass.localize("ui.panel.lovelace.cards.energy.energy_devices_graph.untracked")})`
|
||||||
|
: "";
|
||||||
return (
|
return (
|
||||||
this._data?.prefs.device_consumption.find(
|
(this._data?.prefs.device_consumption.find(
|
||||||
(d) => d.stat_consumption === statisticId
|
(d) => d.stat_consumption === statisticId
|
||||||
)?.name ||
|
)?.name ||
|
||||||
getStatisticLabel(
|
getStatisticLabel(
|
||||||
this.hass,
|
this.hass,
|
||||||
statisticId,
|
statisticId,
|
||||||
this._data?.statsMetadata[statisticId]
|
this._data?.statsMetadata[statisticId]
|
||||||
)
|
)) + suffix
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,51 +210,105 @@ export class HuiEnergyDevicesGraphCard
|
|||||||
const data = energyData.stats;
|
const data = energyData.stats;
|
||||||
const compareData = energyData.statsCompare;
|
const compareData = energyData.statsCompare;
|
||||||
|
|
||||||
const chartData: NonNullable<BarSeriesOption["data"]> = [];
|
const chartData: NonNullable<(BarSeriesOption | PieSeriesOption)["data"]> =
|
||||||
const chartDataCompare: NonNullable<BarSeriesOption["data"]> = [];
|
[];
|
||||||
|
const chartDataCompare: NonNullable<
|
||||||
|
(BarSeriesOption | PieSeriesOption)["data"]
|
||||||
|
> = [];
|
||||||
|
|
||||||
const datasets: BarSeriesOption[] = [
|
const datasets: (BarSeriesOption | PieSeriesOption)[] = [
|
||||||
{
|
{
|
||||||
type: "bar",
|
type: this._chartType,
|
||||||
|
radius: [compareData ? "50%" : "40%", "70%"],
|
||||||
|
universalTransition: true,
|
||||||
name: this.hass.localize(
|
name: this.hass.localize(
|
||||||
"ui.panel.lovelace.cards.energy.energy_devices_graph.energy_usage"
|
"ui.panel.lovelace.cards.energy.energy_devices_graph.energy_usage"
|
||||||
),
|
),
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
borderRadius: [0, 4, 4, 0],
|
borderRadius: this._chartType === "bar" ? [0, 4, 4, 0] : 4,
|
||||||
},
|
},
|
||||||
data: chartData,
|
data: chartData,
|
||||||
barWidth: compareData ? 10 : 20,
|
barWidth: compareData ? 10 : 20,
|
||||||
cursor: "default",
|
cursor: "default",
|
||||||
},
|
minShowLabelAngle: 15,
|
||||||
|
label:
|
||||||
|
this._chartType === "pie"
|
||||||
|
? {
|
||||||
|
formatter: ({ name }) => this._getDeviceName(name),
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
} as BarSeriesOption | PieSeriesOption,
|
||||||
];
|
];
|
||||||
|
|
||||||
if (compareData) {
|
if (compareData) {
|
||||||
datasets.push({
|
datasets.push({
|
||||||
type: "bar",
|
type: this._chartType,
|
||||||
|
radius: ["30%", "50%"],
|
||||||
|
universalTransition: true,
|
||||||
name: this.hass.localize(
|
name: this.hass.localize(
|
||||||
"ui.panel.lovelace.cards.energy.energy_devices_graph.previous_energy_usage"
|
"ui.panel.lovelace.cards.energy.energy_devices_graph.previous_energy_usage"
|
||||||
),
|
),
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
borderRadius: [0, 4, 4, 0],
|
borderRadius: this._chartType === "bar" ? [0, 4, 4, 0] : 4,
|
||||||
},
|
},
|
||||||
data: chartDataCompare,
|
data: chartDataCompare,
|
||||||
barWidth: 10,
|
barWidth: 10,
|
||||||
cursor: "default",
|
cursor: "default",
|
||||||
});
|
label: this._chartType === "pie" ? { show: false } : undefined,
|
||||||
|
emphasis:
|
||||||
|
this._chartType === "pie"
|
||||||
|
? {
|
||||||
|
focus: "series",
|
||||||
|
blurScope: "global",
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
} as BarSeriesOption | PieSeriesOption);
|
||||||
}
|
}
|
||||||
|
|
||||||
const computedStyle = getComputedStyle(this);
|
const computedStyle = getComputedStyle(this);
|
||||||
|
|
||||||
energyData.prefs.device_consumption.forEach((device, id) => {
|
this._compoundStats = energyData.prefs.device_consumption
|
||||||
const value =
|
.map((d) => d.included_in_stat)
|
||||||
|
.filter(Boolean) as string[];
|
||||||
|
|
||||||
|
const devices = energyData.prefs.device_consumption;
|
||||||
|
const devicesTotals: Record<string, number> = {};
|
||||||
|
devices.forEach((device) => {
|
||||||
|
devicesTotals[device.stat_consumption] =
|
||||||
device.stat_consumption in data
|
device.stat_consumption in data
|
||||||
? calculateStatisticSumGrowth(data[device.stat_consumption]) || 0
|
? calculateStatisticSumGrowth(data[device.stat_consumption]) || 0
|
||||||
: 0;
|
: 0;
|
||||||
const color = getGraphColorByIndex(id, computedStyle);
|
});
|
||||||
|
const devicesTotalsCompare: Record<string, number> = {};
|
||||||
|
if (compareData) {
|
||||||
|
devices.forEach((device) => {
|
||||||
|
devicesTotalsCompare[device.stat_consumption] =
|
||||||
|
device.stat_consumption in compareData
|
||||||
|
? calculateStatisticSumGrowth(
|
||||||
|
compareData[device.stat_consumption]
|
||||||
|
) || 0
|
||||||
|
: 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
devices.forEach((device, idx) => {
|
||||||
|
let value = devicesTotals[device.stat_consumption];
|
||||||
|
if (!this._config?.hide_compound_stats) {
|
||||||
|
const childSum = devices.reduce((acc, d) => {
|
||||||
|
if (d.included_in_stat === device.stat_consumption) {
|
||||||
|
return acc + devicesTotals[d.stat_consumption];
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
}, 0);
|
||||||
|
value -= Math.min(value, childSum);
|
||||||
|
} else if (this._compoundStats.includes(device.stat_consumption)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const color = getGraphColorByIndex(idx, computedStyle);
|
||||||
|
|
||||||
chartData.push({
|
chartData.push({
|
||||||
id,
|
id: device.stat_consumption,
|
||||||
value: [value, device.stat_consumption],
|
value: [value, device.stat_consumption] as any,
|
||||||
|
name: device.stat_consumption,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: color + "7F",
|
color: color + "7F",
|
||||||
borderColor: color,
|
borderColor: color,
|
||||||
@@ -221,16 +316,24 @@ export class HuiEnergyDevicesGraphCard
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (compareData) {
|
if (compareData) {
|
||||||
const compareValue =
|
let compareValue =
|
||||||
device.stat_consumption in compareData
|
device.stat_consumption in compareData
|
||||||
? calculateStatisticSumGrowth(
|
? calculateStatisticSumGrowth(
|
||||||
compareData[device.stat_consumption]
|
compareData[device.stat_consumption]
|
||||||
) || 0
|
) || 0
|
||||||
: 0;
|
: 0;
|
||||||
|
const compareChildSum = devices.reduce((acc, d) => {
|
||||||
|
if (d.included_in_stat === device.stat_consumption) {
|
||||||
|
return acc + devicesTotalsCompare[d.stat_consumption];
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
}, 0);
|
||||||
|
compareValue -= Math.min(compareValue, compareChildSum);
|
||||||
|
|
||||||
chartDataCompare.push({
|
chartDataCompare.push({
|
||||||
id,
|
id: device.stat_consumption,
|
||||||
value: [compareValue, device.stat_consumption],
|
value: [compareValue, device.stat_consumption] as any,
|
||||||
|
name: device.stat_consumption,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: color + "32",
|
color: color + "32",
|
||||||
borderColor: color + "7F",
|
borderColor: color + "7F",
|
||||||
@@ -240,11 +343,62 @@ export class HuiEnergyDevicesGraphCard
|
|||||||
});
|
});
|
||||||
|
|
||||||
chartData.sort((a: any, b: any) => b.value[0] - a.value[0]);
|
chartData.sort((a: any, b: any) => b.value[0] - a.value[0]);
|
||||||
|
if (compareData) {
|
||||||
|
datasets[1].data = chartData.map((d) =>
|
||||||
|
chartDataCompare.find((d2) => (d2 as any).id === d.id)
|
||||||
|
) as typeof chartDataCompare;
|
||||||
|
}
|
||||||
|
|
||||||
chartData.length = Math.min(
|
datasets.forEach((dataset) => {
|
||||||
this._config?.max_devices || Infinity,
|
dataset.data!.length = Math.min(
|
||||||
chartData.length
|
this._config?.max_devices || Infinity,
|
||||||
);
|
dataset.data!.length
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (this._chartType === "pie") {
|
||||||
|
const { summedData } = getSummedData(energyData);
|
||||||
|
const { consumption } = computeConsumptionData(summedData);
|
||||||
|
const totalUsed = consumption.total.used_total;
|
||||||
|
const showUntracked =
|
||||||
|
"from_grid" in summedData ||
|
||||||
|
"solar" in summedData ||
|
||||||
|
"from_battery" in summedData;
|
||||||
|
const untracked = showUntracked
|
||||||
|
? totalUsed -
|
||||||
|
chartData.reduce((acc: number, d: any) => acc + d.value[0], 0)
|
||||||
|
: 0;
|
||||||
|
datasets.push({
|
||||||
|
type: "pie",
|
||||||
|
radius: ["0%", compareData ? "30%" : "40%"],
|
||||||
|
name: this.hass.localize(
|
||||||
|
"ui.panel.lovelace.cards.energy.energy_devices_graph.total_energy_usage"
|
||||||
|
),
|
||||||
|
data: [totalUsed],
|
||||||
|
label: {
|
||||||
|
show: true,
|
||||||
|
position: "center",
|
||||||
|
color: computedStyle.getPropertyValue("--secondary-text-color"),
|
||||||
|
fontSize: computedStyle.getPropertyValue("--ha-font-size-l"),
|
||||||
|
lineHeight: 24,
|
||||||
|
fontWeight: "bold",
|
||||||
|
formatter: `{a}\n${formatNumber(totalUsed, this.hass.locale)} kWh`,
|
||||||
|
},
|
||||||
|
cursor: "default",
|
||||||
|
itemStyle: {
|
||||||
|
color: "rgba(0, 0, 0, 0)",
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
formatter: () =>
|
||||||
|
untracked > 0
|
||||||
|
? this.hass.localize(
|
||||||
|
"ui.panel.lovelace.cards.energy.energy_devices_graph.includes_untracked",
|
||||||
|
{ num: formatNumber(untracked, this.hass.locale) }
|
||||||
|
)
|
||||||
|
: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this._chartData = datasets;
|
this._chartData = datasets;
|
||||||
await this.updateComplete;
|
await this.updateComplete;
|
||||||
@@ -259,11 +413,26 @@ export class HuiEnergyDevicesGraphCard
|
|||||||
fireEvent(this, "hass-more-info", {
|
fireEvent(this, "hass-more-info", {
|
||||||
entityId: e.detail.value as string,
|
entityId: e.detail.value as string,
|
||||||
});
|
});
|
||||||
|
} else if (
|
||||||
|
e.detail.seriesType === "pie" &&
|
||||||
|
e.detail.event?.target?.type === "tspan" // label
|
||||||
|
) {
|
||||||
|
fireEvent(this, "hass-more-info", {
|
||||||
|
entityId: (e.detail.data as any).id as string,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _handleChartTypeChange(): void {
|
||||||
|
this._chartType = this._chartType === "pie" ? "bar" : "pie";
|
||||||
|
this._getStatistics(this._data!);
|
||||||
|
}
|
||||||
|
|
||||||
static styles = css`
|
static styles = css`
|
||||||
.card-header {
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
}
|
}
|
||||||
.content {
|
.content {
|
||||||
@@ -275,6 +444,11 @@ export class HuiEnergyDevicesGraphCard
|
|||||||
ha-chart-base {
|
ha-chart-base {
|
||||||
--chart-max-height: none;
|
--chart-max-height: none;
|
||||||
}
|
}
|
||||||
|
ha-icon-button {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
color: var(--secondary-text-color);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
import type { PropertyValues } from "lit";
|
import type { PropertyValues } from "lit";
|
||||||
import { css, html, LitElement, nothing } from "lit";
|
import { css, html, LitElement, nothing } from "lit";
|
||||||
|
import { classMap } from "lit/directives/class-map";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
import { getColorByIndex } from "../../../common/color/colors";
|
import { getColorByIndex } from "../../../common/color/colors";
|
||||||
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
||||||
@@ -16,7 +17,11 @@ import type {
|
|||||||
import "../../calendar/ha-full-calendar";
|
import "../../calendar/ha-full-calendar";
|
||||||
import { findEntities } from "../common/find-entities";
|
import { findEntities } from "../common/find-entities";
|
||||||
import "../components/hui-warning";
|
import "../components/hui-warning";
|
||||||
import type { LovelaceCard, LovelaceCardEditor } from "../types";
|
import type {
|
||||||
|
LovelaceCard,
|
||||||
|
LovelaceCardEditor,
|
||||||
|
LovelaceGridOptions,
|
||||||
|
} from "../types";
|
||||||
import type { CalendarCardConfig } from "./types";
|
import type { CalendarCardConfig } from "./types";
|
||||||
|
|
||||||
@customElement("hui-calendar-card")
|
@customElement("hui-calendar-card")
|
||||||
@@ -48,6 +53,8 @@ export class HuiCalendarCard extends LitElement implements LovelaceCard {
|
|||||||
|
|
||||||
@property({ attribute: false }) public hass?: HomeAssistant;
|
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||||
|
|
||||||
|
@property({ attribute: false }) public layout?: string;
|
||||||
|
|
||||||
@state() private _events: CalendarEvent[] = [];
|
@state() private _events: CalendarEvent[] = [];
|
||||||
|
|
||||||
@state() private _config?: CalendarCardConfig;
|
@state() private _config?: CalendarCardConfig;
|
||||||
@@ -88,7 +95,16 @@ export class HuiCalendarCard extends LitElement implements LovelaceCard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public getCardSize(): number {
|
public getCardSize(): number {
|
||||||
return this._config?.header ? 1 : 0 + 11;
|
return 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
public getGridOptions(): LovelaceGridOptions {
|
||||||
|
return {
|
||||||
|
rows: 6,
|
||||||
|
columns: 12,
|
||||||
|
min_columns: 4,
|
||||||
|
min_rows: 4,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public connectedCallback(): void {
|
public connectedCallback(): void {
|
||||||
@@ -118,6 +134,10 @@ export class HuiCalendarCard extends LitElement implements LovelaceCard {
|
|||||||
<ha-card>
|
<ha-card>
|
||||||
<div class="header">${this._config.title}</div>
|
<div class="header">${this._config.title}</div>
|
||||||
<ha-full-calendar
|
<ha-full-calendar
|
||||||
|
class=${classMap({
|
||||||
|
"is-grid": this.layout === "grid",
|
||||||
|
"is-panel": this.layout === "panel",
|
||||||
|
})}
|
||||||
.narrow=${this._narrow}
|
.narrow=${this._narrow}
|
||||||
.events=${this._events}
|
.events=${this._events}
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
@@ -224,6 +244,11 @@ export class HuiCalendarCard extends LitElement implements LovelaceCard {
|
|||||||
ha-full-calendar {
|
ha-full-calendar {
|
||||||
--calendar-height: 400px;
|
--calendar-height: 400px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ha-full-calendar.is-grid,
|
||||||
|
ha-full-calendar.is-panel {
|
||||||
|
height: calc(100% - 16px);
|
||||||
|
}
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -231,6 +231,7 @@ export class HuiMarkdownCard extends LitElement implements LovelaceCard {
|
|||||||
static styles = css`
|
static styles = css`
|
||||||
ha-card {
|
ha-card {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
ha-alert {
|
ha-alert {
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
|
@@ -176,6 +176,7 @@ export interface EnergyDevicesGraphCardConfig extends EnergyCardBaseConfig {
|
|||||||
type: "energy-devices-graph";
|
type: "energy-devices-graph";
|
||||||
title?: string;
|
title?: string;
|
||||||
max_devices?: number;
|
max_devices?: number;
|
||||||
|
hide_compound_stats?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface EnergyDevicesDetailGraphCardConfig
|
export interface EnergyDevicesDetailGraphCardConfig
|
||||||
@@ -282,7 +283,7 @@ export interface GlanceConfigEntity extends ConfigEntity {
|
|||||||
image?: string;
|
image?: string;
|
||||||
show_state?: boolean;
|
show_state?: boolean;
|
||||||
state_color?: boolean;
|
state_color?: boolean;
|
||||||
format: TimestampRenderingFormat;
|
format?: TimestampRenderingFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GlanceCardConfig extends LovelaceCardConfig {
|
export interface GlanceCardConfig extends LovelaceCardConfig {
|
||||||
|
@@ -53,7 +53,7 @@ export const handleAction = async (
|
|||||||
(e) => e.user === hass!.user?.id
|
(e) => e.user === hass!.user?.id
|
||||||
))
|
))
|
||||||
) {
|
) {
|
||||||
forwardHaptic("warning");
|
forwardHaptic(node, "warning");
|
||||||
|
|
||||||
let serviceName;
|
let serviceName;
|
||||||
if (
|
if (
|
||||||
@@ -107,7 +107,7 @@ export const handleAction = async (
|
|||||||
"ui.panel.lovelace.cards.actions.no_entity_more_info"
|
"ui.panel.lovelace.cards.actions.no_entity_more_info"
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
forwardHaptic("failure");
|
forwardHaptic(node, "failure");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -122,7 +122,7 @@ export const handleAction = async (
|
|||||||
"ui.panel.lovelace.cards.actions.no_navigation_path"
|
"ui.panel.lovelace.cards.actions.no_navigation_path"
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
forwardHaptic("failure");
|
forwardHaptic(node, "failure");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "url": {
|
case "url": {
|
||||||
@@ -132,21 +132,21 @@ export const handleAction = async (
|
|||||||
showToast(node, {
|
showToast(node, {
|
||||||
message: hass.localize("ui.panel.lovelace.cards.actions.no_url"),
|
message: hass.localize("ui.panel.lovelace.cards.actions.no_url"),
|
||||||
});
|
});
|
||||||
forwardHaptic("failure");
|
forwardHaptic(node, "failure");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "toggle": {
|
case "toggle": {
|
||||||
if (config.entity) {
|
if (config.entity) {
|
||||||
toggleEntity(hass, config.entity!);
|
toggleEntity(hass, config.entity!);
|
||||||
forwardHaptic("light");
|
forwardHaptic(node, "light");
|
||||||
} else {
|
} else {
|
||||||
showToast(node, {
|
showToast(node, {
|
||||||
message: hass.localize(
|
message: hass.localize(
|
||||||
"ui.panel.lovelace.cards.actions.no_entity_toggle"
|
"ui.panel.lovelace.cards.actions.no_entity_toggle"
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
forwardHaptic("failure");
|
forwardHaptic(node, "failure");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -156,7 +156,7 @@ export const handleAction = async (
|
|||||||
showToast(node, {
|
showToast(node, {
|
||||||
message: hass.localize("ui.panel.lovelace.cards.actions.no_action"),
|
message: hass.localize("ui.panel.lovelace.cards.actions.no_action"),
|
||||||
});
|
});
|
||||||
forwardHaptic("failure");
|
forwardHaptic(node, "failure");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const [domain, service] = (actionConfig.perform_action ||
|
const [domain, service] = (actionConfig.perform_action ||
|
||||||
@@ -167,7 +167,7 @@ export const handleAction = async (
|
|||||||
actionConfig.data ?? actionConfig.service_data,
|
actionConfig.data ?? actionConfig.service_data,
|
||||||
actionConfig.target
|
actionConfig.target
|
||||||
);
|
);
|
||||||
forwardHaptic("light");
|
forwardHaptic(node, "light");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "assist": {
|
case "assist": {
|
||||||
|
@@ -58,7 +58,7 @@ class HuiEntitiesToggle extends LitElement {
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
private _callService(ev: MouseEvent): void {
|
private _callService(ev: MouseEvent): void {
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
const turnOn = (ev.target as HaSwitch).checked;
|
const turnOn = (ev.target as HaSwitch).checked;
|
||||||
turnOnOffEntities(this.hass!, this._toggleEntities!, turnOn!);
|
turnOnOffEntities(this.hass!, this._toggleEntities!, turnOn!);
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { mdiDrag } from "@mdi/js";
|
import { mdiClose, mdiDrag, mdiPencil } from "@mdi/js";
|
||||||
import { css, html, LitElement, nothing } from "lit";
|
import { css, html, LitElement, nothing } from "lit";
|
||||||
import { customElement, property } from "lit/decorators";
|
import { customElement, property } from "lit/decorators";
|
||||||
import { repeat } from "lit/directives/repeat";
|
import { repeat } from "lit/directives/repeat";
|
||||||
@@ -12,6 +12,7 @@ import "../../../components/ha-icon-button";
|
|||||||
import "../../../components/ha-sortable";
|
import "../../../components/ha-sortable";
|
||||||
import type { HomeAssistant } from "../../../types";
|
import type { HomeAssistant } from "../../../types";
|
||||||
import type { EntityConfig } from "../entity-rows/types";
|
import type { EntityConfig } from "../entity-rows/types";
|
||||||
|
import { computeRTL } from "../../../common/util/compute_rtl";
|
||||||
|
|
||||||
@customElement("hui-entity-editor")
|
@customElement("hui-entity-editor")
|
||||||
export class HuiEntityEditor extends LitElement {
|
export class HuiEntityEditor extends LitElement {
|
||||||
@@ -24,6 +25,8 @@ export class HuiEntityEditor extends LitElement {
|
|||||||
|
|
||||||
@property() public label?: string;
|
@property() public label?: string;
|
||||||
|
|
||||||
|
@property({ attribute: "can-edit", type: Boolean }) public canEdit?;
|
||||||
|
|
||||||
private _entityKeys = new WeakMap<EntityConfig, string>();
|
private _entityKeys = new WeakMap<EntityConfig, string>();
|
||||||
|
|
||||||
private _getKey(action: EntityConfig) {
|
private _getKey(action: EntityConfig) {
|
||||||
@@ -34,6 +37,70 @@ export class HuiEntityEditor extends LitElement {
|
|||||||
return this._entityKeys.get(action)!;
|
return this._entityKeys.get(action)!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _renderItem(item: EntityConfig, index: number) {
|
||||||
|
const stateObj = this.hass!.states[item.entity];
|
||||||
|
|
||||||
|
const entityName =
|
||||||
|
stateObj && this.hass!.formatEntityName(stateObj, "entity");
|
||||||
|
const deviceName =
|
||||||
|
stateObj && this.hass!.formatEntityName(stateObj, "device");
|
||||||
|
const areaName = stateObj && this.hass!.formatEntityName(stateObj, "area");
|
||||||
|
|
||||||
|
const isRTL = computeRTL(this.hass!);
|
||||||
|
|
||||||
|
const primary = item.name || entityName || deviceName || item.entity;
|
||||||
|
const secondary = [areaName, entityName ? deviceName : undefined]
|
||||||
|
.filter(Boolean)
|
||||||
|
.join(isRTL ? " ◂ " : " ▸ ");
|
||||||
|
|
||||||
|
return html`
|
||||||
|
<ha-md-list-item class="item">
|
||||||
|
<ha-svg-icon class="handle" .path=${mdiDrag} slot="start"></ha-svg-icon>
|
||||||
|
|
||||||
|
<div slot="headline" class="label">${primary}</div>
|
||||||
|
${secondary
|
||||||
|
? html`<div slot="supporting-text" class="description">
|
||||||
|
${secondary}
|
||||||
|
</div>`
|
||||||
|
: nothing}
|
||||||
|
<ha-icon-button
|
||||||
|
slot="end"
|
||||||
|
.item=${item}
|
||||||
|
.index=${index}
|
||||||
|
.label=${this.hass!.localize("ui.common.edit")}
|
||||||
|
.path=${mdiPencil}
|
||||||
|
@click=${this._editItem}
|
||||||
|
></ha-icon-button>
|
||||||
|
<ha-icon-button
|
||||||
|
slot="end"
|
||||||
|
.index=${index}
|
||||||
|
.label=${this.hass!.localize("ui.common.delete")}
|
||||||
|
.path=${mdiClose}
|
||||||
|
@click=${this._deleteItem}
|
||||||
|
></ha-icon-button>
|
||||||
|
</ha-md-list-item>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _editItem(ev) {
|
||||||
|
const index = (ev.currentTarget as any).index;
|
||||||
|
fireEvent(this, "edit-detail-element", {
|
||||||
|
subElementConfig: {
|
||||||
|
index,
|
||||||
|
type: "row",
|
||||||
|
elementConfig: this.entities![index],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private _deleteItem(ev) {
|
||||||
|
const index = ev.target.index;
|
||||||
|
const newConfigEntities = this.entities!.slice(0, index).concat(
|
||||||
|
this.entities!.slice(index + 1)
|
||||||
|
);
|
||||||
|
fireEvent(this, "entities-changed", { entities: newConfigEntities });
|
||||||
|
}
|
||||||
|
|
||||||
protected render() {
|
protected render() {
|
||||||
if (!this.entities) {
|
if (!this.entities) {
|
||||||
return nothing;
|
return nothing;
|
||||||
@@ -47,29 +114,48 @@ export class HuiEntityEditor extends LitElement {
|
|||||||
this.hass!.localize("ui.panel.lovelace.editor.card.config.required") +
|
this.hass!.localize("ui.panel.lovelace.editor.card.config.required") +
|
||||||
")"}
|
")"}
|
||||||
</h3>
|
</h3>
|
||||||
<ha-sortable handle-selector=".handle" @item-moved=${this._entityMoved}>
|
${this.canEdit
|
||||||
<div class="entities">
|
? html`
|
||||||
${repeat(
|
<div class="items-container">
|
||||||
this.entities,
|
<ha-sortable
|
||||||
(entityConf) => this._getKey(entityConf),
|
handle-selector=".handle"
|
||||||
(entityConf, index) => html`
|
draggable-selector=".item"
|
||||||
<div class="entity" data-entity-id=${entityConf.entity}>
|
@item-moved=${this._entityMoved}
|
||||||
<div class="handle">
|
>
|
||||||
<ha-svg-icon .path=${mdiDrag}></ha-svg-icon>
|
<ha-md-list>
|
||||||
</div>
|
${this.entities.map((item, index) =>
|
||||||
<ha-entity-picker
|
this._renderItem(item, index)
|
||||||
.hass=${this.hass}
|
)}
|
||||||
.value=${entityConf.entity}
|
</ha-md-list>
|
||||||
.index=${index}
|
</ha-sortable>
|
||||||
.entityFilter=${this.entityFilter}
|
</div>
|
||||||
@value-changed=${this._valueChanged}
|
`
|
||||||
allow-custom-entity
|
: html` <ha-sortable
|
||||||
></ha-entity-picker>
|
handle-selector=".handle"
|
||||||
</div>
|
@item-moved=${this._entityMoved}
|
||||||
`
|
>
|
||||||
)}
|
<div class="entities">
|
||||||
</div>
|
${repeat(
|
||||||
</ha-sortable>
|
this.entities,
|
||||||
|
(entityConf) => this._getKey(entityConf),
|
||||||
|
(entityConf, index) => html`
|
||||||
|
<div class="entity" data-entity-id=${entityConf.entity}>
|
||||||
|
<div class="handle">
|
||||||
|
<ha-svg-icon .path=${mdiDrag}></ha-svg-icon>
|
||||||
|
</div>
|
||||||
|
<ha-entity-picker
|
||||||
|
.hass=${this.hass}
|
||||||
|
.value=${entityConf.entity}
|
||||||
|
.index=${index}
|
||||||
|
.entityFilter=${this.entityFilter}
|
||||||
|
@value-changed=${this._valueChanged}
|
||||||
|
allow-custom-entity
|
||||||
|
></ha-entity-picker>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</ha-sortable>`}
|
||||||
<ha-entity-picker
|
<ha-entity-picker
|
||||||
class="add-entity"
|
class="add-entity"
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
@@ -148,6 +234,35 @@ export class HuiEntityEditor extends LitElement {
|
|||||||
.entity ha-entity-picker {
|
.entity ha-entity-picker {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
}
|
}
|
||||||
|
ha-md-list {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
ha-md-list-item {
|
||||||
|
border: 1px solid var(--divider-color);
|
||||||
|
border-radius: 8px;
|
||||||
|
--ha-md-list-item-gap: 0;
|
||||||
|
--md-list-item-top-space: 0;
|
||||||
|
--md-list-item-bottom-space: 0;
|
||||||
|
--md-list-item-leading-space: 12px;
|
||||||
|
--md-list-item-trailing-space: 4px;
|
||||||
|
--md-list-item-two-line-container-height: 48px;
|
||||||
|
--md-list-item-one-line-container-height: 48px;
|
||||||
|
}
|
||||||
|
.handle {
|
||||||
|
cursor: move;
|
||||||
|
padding: 8px;
|
||||||
|
margin-inline-start: -8px;
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
ha-md-list-item .label,
|
||||||
|
ha-md-list-item .description {
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,6 +31,8 @@ export class HuiGenericEntityRowEditor
|
|||||||
{
|
{
|
||||||
@property({ attribute: false }) public hass?: HomeAssistant;
|
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||||
|
|
||||||
|
@property({ attribute: false }) public schema?;
|
||||||
|
|
||||||
@state() private _config?: EntitiesCardEntityConfig;
|
@state() private _config?: EntitiesCardEntityConfig;
|
||||||
|
|
||||||
public setConfig(config: EntitiesCardEntityConfig): void {
|
public setConfig(config: EntitiesCardEntityConfig): void {
|
||||||
@@ -87,7 +89,8 @@ export class HuiGenericEntityRowEditor
|
|||||||
return nothing;
|
return nothing;
|
||||||
}
|
}
|
||||||
|
|
||||||
const schema = this._schema(this._config.entity, this.hass.localize);
|
const schema =
|
||||||
|
this.schema || this._schema(this._config.entity, this.hass.localize);
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<ha-form
|
<ha-form
|
||||||
|
@@ -13,6 +13,9 @@ import {
|
|||||||
} from "superstruct";
|
} from "superstruct";
|
||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
import "../../../../components/ha-form/ha-form";
|
import "../../../../components/ha-form/ha-form";
|
||||||
|
import "../hui-sub-element-editor";
|
||||||
|
import type { EditDetailElementEvent, SubElementEditorConfig } from "../types";
|
||||||
|
import type { HASSDomEvent } from "../../../../common/dom/fire_event";
|
||||||
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
||||||
import type { HomeAssistant } from "../../../../types";
|
import type { HomeAssistant } from "../../../../types";
|
||||||
import type { ConfigEntity, GlanceCardConfig } from "../../cards/types";
|
import type { ConfigEntity, GlanceCardConfig } from "../../cards/types";
|
||||||
@@ -21,6 +24,7 @@ import type { LovelaceCardEditor } from "../../types";
|
|||||||
import { processEditorEntities } from "../process-editor-entities";
|
import { processEditorEntities } from "../process-editor-entities";
|
||||||
import { baseLovelaceCardConfig } from "../structs/base-card-struct";
|
import { baseLovelaceCardConfig } from "../structs/base-card-struct";
|
||||||
import { entitiesConfigStruct } from "../structs/entities-struct";
|
import { entitiesConfigStruct } from "../structs/entities-struct";
|
||||||
|
import type { EntityConfig } from "../../entity-rows/types";
|
||||||
|
|
||||||
const cardConfigStruct = assign(
|
const cardConfigStruct = assign(
|
||||||
baseLovelaceCardConfig,
|
baseLovelaceCardConfig,
|
||||||
@@ -36,6 +40,49 @@ const cardConfigStruct = assign(
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const SUB_SCHEMA = [
|
||||||
|
{ name: "entity", selector: { entity: {} }, required: true },
|
||||||
|
{
|
||||||
|
type: "grid",
|
||||||
|
name: "",
|
||||||
|
schema: [
|
||||||
|
{ name: "name", selector: { text: {} } },
|
||||||
|
{
|
||||||
|
name: "icon",
|
||||||
|
selector: {
|
||||||
|
icon: {},
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
icon_entity: "entity",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ name: "show_last_changed", selector: { boolean: {} } },
|
||||||
|
{ name: "show_state", selector: { boolean: {} }, default: true },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "tap_action",
|
||||||
|
selector: {
|
||||||
|
ui_action: {
|
||||||
|
default_action: "more-info",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "",
|
||||||
|
type: "optional_actions",
|
||||||
|
flatten: true,
|
||||||
|
schema: (["hold_action", "double_tap_action"] as const).map((action) => ({
|
||||||
|
name: action,
|
||||||
|
selector: {
|
||||||
|
ui_action: {
|
||||||
|
default_action: "none" as const,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})),
|
||||||
|
},
|
||||||
|
] as const;
|
||||||
|
|
||||||
const SCHEMA = [
|
const SCHEMA = [
|
||||||
{ name: "title", selector: { text: {} } },
|
{ name: "title", selector: { text: {} } },
|
||||||
{
|
{
|
||||||
@@ -68,6 +115,8 @@ export class HuiGlanceCardEditor
|
|||||||
|
|
||||||
@state() private _config?: GlanceCardConfig;
|
@state() private _config?: GlanceCardConfig;
|
||||||
|
|
||||||
|
@state() private _subElementEditorConfig?: SubElementEditorConfig;
|
||||||
|
|
||||||
@state() private _configEntities?: ConfigEntity[];
|
@state() private _configEntities?: ConfigEntity[];
|
||||||
|
|
||||||
public setConfig(config: GlanceCardConfig): void {
|
public setConfig(config: GlanceCardConfig): void {
|
||||||
@@ -81,6 +130,19 @@ export class HuiGlanceCardEditor
|
|||||||
return nothing;
|
return nothing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._subElementEditorConfig) {
|
||||||
|
return html`
|
||||||
|
<hui-sub-element-editor
|
||||||
|
.hass=${this.hass}
|
||||||
|
.config=${this._subElementEditorConfig}
|
||||||
|
.schema=${SUB_SCHEMA}
|
||||||
|
@go-back=${this._goBack}
|
||||||
|
@config-changed=${this._handleSubEntityChanged}
|
||||||
|
>
|
||||||
|
</hui-sub-element-editor>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
show_name: true,
|
show_name: true,
|
||||||
show_icon: true,
|
show_icon: true,
|
||||||
@@ -98,12 +160,42 @@ export class HuiGlanceCardEditor
|
|||||||
></ha-form>
|
></ha-form>
|
||||||
<hui-entity-editor
|
<hui-entity-editor
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
|
can-edit
|
||||||
.entities=${this._configEntities}
|
.entities=${this._configEntities}
|
||||||
@entities-changed=${this._entitiesChanged}
|
@entities-changed=${this._entitiesChanged}
|
||||||
|
@edit-detail-element=${this._editDetailElement}
|
||||||
></hui-entity-editor>
|
></hui-entity-editor>
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _goBack(): void {
|
||||||
|
this._subElementEditorConfig = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _editDetailElement(ev: HASSDomEvent<EditDetailElementEvent>): void {
|
||||||
|
this._subElementEditorConfig = ev.detail.subElementConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _handleSubEntityChanged(ev: CustomEvent): void {
|
||||||
|
ev.stopPropagation();
|
||||||
|
|
||||||
|
const index = this._subElementEditorConfig!.index!;
|
||||||
|
|
||||||
|
const newEntities = this._configEntities!.concat();
|
||||||
|
const newConfig = ev.detail.config as EntityConfig;
|
||||||
|
this._subElementEditorConfig = {
|
||||||
|
...this._subElementEditorConfig!,
|
||||||
|
elementConfig: newConfig,
|
||||||
|
};
|
||||||
|
newEntities[index] = newConfig;
|
||||||
|
let config = this._config!;
|
||||||
|
config = { ...config, entities: newEntities };
|
||||||
|
this._config = config;
|
||||||
|
this._configEntities = processEditorEntities(config.entities);
|
||||||
|
|
||||||
|
fireEvent(this, "config-changed", { config });
|
||||||
|
}
|
||||||
|
|
||||||
private _valueChanged(ev: CustomEvent): void {
|
private _valueChanged(ev: CustomEvent): void {
|
||||||
const config = ev.detail.value;
|
const config = ev.detail.value;
|
||||||
fireEvent(this, "config-changed", { config });
|
fireEvent(this, "config-changed", { config });
|
||||||
|
@@ -18,6 +18,9 @@ import type { SchemaUnion } from "../../../../components/ha-form/types";
|
|||||||
import type { HomeAssistant } from "../../../../types";
|
import type { HomeAssistant } from "../../../../types";
|
||||||
import type { HistoryGraphCardConfig } from "../../cards/types";
|
import type { HistoryGraphCardConfig } from "../../cards/types";
|
||||||
import "../../components/hui-entity-editor";
|
import "../../components/hui-entity-editor";
|
||||||
|
import "../hui-sub-element-editor";
|
||||||
|
import type { EditDetailElementEvent, SubElementEditorConfig } from "../types";
|
||||||
|
import type { HASSDomEvent } from "../../../../common/dom/fire_event";
|
||||||
import type { EntityConfig } from "../../entity-rows/types";
|
import type { EntityConfig } from "../../entity-rows/types";
|
||||||
import type { LovelaceCardEditor } from "../../types";
|
import type { LovelaceCardEditor } from "../../types";
|
||||||
import { processEditorEntities } from "../process-editor-entities";
|
import { processEditorEntities } from "../process-editor-entities";
|
||||||
@@ -40,6 +43,11 @@ const cardConfigStruct = assign(
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const SUB_SCHEMA = [
|
||||||
|
{ name: "entity", selector: { entity: {} }, required: true },
|
||||||
|
{ name: "name", selector: { text: {} } },
|
||||||
|
] as const;
|
||||||
|
|
||||||
@customElement("hui-history-graph-card-editor")
|
@customElement("hui-history-graph-card-editor")
|
||||||
export class HuiHistoryGraphCardEditor
|
export class HuiHistoryGraphCardEditor
|
||||||
extends LitElement
|
extends LitElement
|
||||||
@@ -49,6 +57,8 @@ export class HuiHistoryGraphCardEditor
|
|||||||
|
|
||||||
@state() private _config?: HistoryGraphCardConfig;
|
@state() private _config?: HistoryGraphCardConfig;
|
||||||
|
|
||||||
|
@state() private _subElementEditorConfig?: SubElementEditorConfig;
|
||||||
|
|
||||||
@state() private _configEntities?: EntityConfig[];
|
@state() private _configEntities?: EntityConfig[];
|
||||||
|
|
||||||
public setConfig(config: HistoryGraphCardConfig): void {
|
public setConfig(config: HistoryGraphCardConfig): void {
|
||||||
@@ -110,6 +120,19 @@ export class HuiHistoryGraphCardEditor
|
|||||||
return nothing;
|
return nothing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._subElementEditorConfig) {
|
||||||
|
return html`
|
||||||
|
<hui-sub-element-editor
|
||||||
|
.hass=${this.hass}
|
||||||
|
.config=${this._subElementEditorConfig}
|
||||||
|
.schema=${SUB_SCHEMA}
|
||||||
|
@go-back=${this._goBack}
|
||||||
|
@config-changed=${this._handleSubEntityChanged}
|
||||||
|
>
|
||||||
|
</hui-sub-element-editor>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
const schema = this._schema(
|
const schema = this._schema(
|
||||||
this._config!.min_y_axis !== undefined ||
|
this._config!.min_y_axis !== undefined ||
|
||||||
this._config!.max_y_axis !== undefined
|
this._config!.max_y_axis !== undefined
|
||||||
@@ -126,11 +149,41 @@ export class HuiHistoryGraphCardEditor
|
|||||||
<hui-entity-editor
|
<hui-entity-editor
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
.entities=${this._configEntities}
|
.entities=${this._configEntities}
|
||||||
|
can-edit
|
||||||
@entities-changed=${this._entitiesChanged}
|
@entities-changed=${this._entitiesChanged}
|
||||||
|
@edit-detail-element=${this._editDetailElement}
|
||||||
></hui-entity-editor>
|
></hui-entity-editor>
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _goBack(): void {
|
||||||
|
this._subElementEditorConfig = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _editDetailElement(ev: HASSDomEvent<EditDetailElementEvent>): void {
|
||||||
|
this._subElementEditorConfig = ev.detail.subElementConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _handleSubEntityChanged(ev: CustomEvent): void {
|
||||||
|
ev.stopPropagation();
|
||||||
|
|
||||||
|
const index = this._subElementEditorConfig!.index!;
|
||||||
|
|
||||||
|
const newEntities = this._configEntities!.concat();
|
||||||
|
const newConfig = ev.detail.config as EntityConfig;
|
||||||
|
this._subElementEditorConfig = {
|
||||||
|
...this._subElementEditorConfig!,
|
||||||
|
elementConfig: newConfig,
|
||||||
|
};
|
||||||
|
newEntities[index] = newConfig;
|
||||||
|
let config = this._config!;
|
||||||
|
config = { ...config, entities: newEntities };
|
||||||
|
this._config = config;
|
||||||
|
this._configEntities = processEditorEntities(config.entities);
|
||||||
|
|
||||||
|
fireEvent(this, "config-changed", { config });
|
||||||
|
}
|
||||||
|
|
||||||
private _valueChanged(ev: CustomEvent): void {
|
private _valueChanged(ev: CustomEvent): void {
|
||||||
fireEvent(this, "config-changed", { config: ev.detail.value });
|
fireEvent(this, "config-changed", { config: ev.detail.value });
|
||||||
}
|
}
|
||||||
|
@@ -57,6 +57,8 @@ export abstract class HuiElementEditor<
|
|||||||
|
|
||||||
@property({ attribute: false }) public context?: C;
|
@property({ attribute: false }) public context?: C;
|
||||||
|
|
||||||
|
@property({ attribute: false }) public schema?;
|
||||||
|
|
||||||
@state() private _config?: T;
|
@state() private _config?: T;
|
||||||
|
|
||||||
@state() private _configElement?: LovelaceGenericElementEditor;
|
@state() private _configElement?: LovelaceGenericElementEditor;
|
||||||
@@ -312,6 +314,9 @@ export abstract class HuiElementEditor<
|
|||||||
if (this._configElement && changedProperties.has("context")) {
|
if (this._configElement && changedProperties.has("context")) {
|
||||||
this._configElement.context = this.context;
|
this._configElement.context = this.context;
|
||||||
}
|
}
|
||||||
|
if (this._configElement && changedProperties.has("schema")) {
|
||||||
|
this._configElement.schema = this.schema;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private _handleUIConfigChanged(ev: UIConfigChangedEvent<T>) {
|
private _handleUIConfigChanged(ev: UIConfigChangedEvent<T>) {
|
||||||
@@ -399,6 +404,7 @@ export abstract class HuiElementEditor<
|
|||||||
configElement.lovelace = this.lovelace;
|
configElement.lovelace = this.lovelace;
|
||||||
}
|
}
|
||||||
configElement.context = this.context;
|
configElement.context = this.context;
|
||||||
|
configElement.schema = this.schema;
|
||||||
configElement.addEventListener("config-changed", (ev) =>
|
configElement.addEventListener("config-changed", (ev) =>
|
||||||
this._handleUIConfigChanged(ev as UIConfigChangedEvent<T>)
|
this._handleUIConfigChanged(ev as UIConfigChangedEvent<T>)
|
||||||
);
|
);
|
||||||
|
@@ -27,6 +27,8 @@ export class HuiSubElementEditor extends LitElement {
|
|||||||
|
|
||||||
@property({ attribute: false }) public config!: SubElementEditorConfig;
|
@property({ attribute: false }) public config!: SubElementEditorConfig;
|
||||||
|
|
||||||
|
@property({ attribute: false }) public schema?;
|
||||||
|
|
||||||
@state() private _guiModeAvailable = true;
|
@state() private _guiModeAvailable = true;
|
||||||
|
|
||||||
@state() private _guiMode = true;
|
@state() private _guiMode = true;
|
||||||
@@ -89,6 +91,7 @@ export class HuiSubElementEditor extends LitElement {
|
|||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
.value=${this.config.elementConfig}
|
.value=${this.config.elementConfig}
|
||||||
.context=${this.config.context}
|
.context=${this.config.context}
|
||||||
|
.schema=${this.schema}
|
||||||
@config-changed=${this._handleConfigChanged}
|
@config-changed=${this._handleConfigChanged}
|
||||||
@GUImode-changed=${this._handleGUIModeChanged}
|
@GUImode-changed=${this._handleGUIModeChanged}
|
||||||
></hui-row-element-editor>
|
></hui-row-element-editor>
|
||||||
|
@@ -18,6 +18,8 @@ export const entitiesConfigStruct = union([
|
|||||||
hold_action: optional(actionConfigStruct),
|
hold_action: optional(actionConfigStruct),
|
||||||
double_tap_action: optional(actionConfigStruct),
|
double_tap_action: optional(actionConfigStruct),
|
||||||
confirmation: optional(actionConfigStructConfirmation),
|
confirmation: optional(actionConfigStructConfirmation),
|
||||||
|
show_last_changed: optional(boolean()),
|
||||||
|
show_state: optional(boolean()),
|
||||||
}),
|
}),
|
||||||
string(),
|
string(),
|
||||||
]);
|
]);
|
||||||
|
@@ -103,7 +103,7 @@ class HuiInputSelectEntityRow extends LitElement implements LovelaceRow {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
|
|
||||||
setInputSelectOption(this.hass!, stateObj.entity_id, option);
|
setInputSelectOption(this.hass!, stateObj.entity_id, option);
|
||||||
}
|
}
|
||||||
|
@@ -104,7 +104,7 @@ class HuiSelectEntityRow extends LitElement implements LovelaceRow {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
|
|
||||||
setSelectOption(this.hass!, stateObj.entity_id, option);
|
setSelectOption(this.hass!, stateObj.entity_id, option);
|
||||||
}
|
}
|
||||||
|
@@ -17,7 +17,7 @@ class HuiWeblinkRow extends LitElement implements LovelaceRow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._config = {
|
this._config = {
|
||||||
icon: "hass:link",
|
icon: "mdi:link",
|
||||||
name: config.url,
|
name: config.url,
|
||||||
...config,
|
...config,
|
||||||
};
|
};
|
||||||
|
@@ -169,6 +169,7 @@ export interface LovelaceGenericElementEditor<C = any> extends HTMLElement {
|
|||||||
hass?: HomeAssistant;
|
hass?: HomeAssistant;
|
||||||
lovelace?: LovelaceConfig;
|
lovelace?: LovelaceConfig;
|
||||||
context?: C;
|
context?: C;
|
||||||
|
schema?: any;
|
||||||
setConfig(config: any): void;
|
setConfig(config: any): void;
|
||||||
focusYamlEditor?: () => void;
|
focusYamlEditor?: () => void;
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
import type { ActionDetail } from "@material/mwc-list";
|
|
||||||
import {
|
import {
|
||||||
mdiAndroid,
|
mdiAndroid,
|
||||||
mdiApple,
|
mdiApple,
|
||||||
@@ -15,7 +14,8 @@ import memoizeOne from "memoize-one";
|
|||||||
import { relativeTime } from "../../common/datetime/relative_time";
|
import { relativeTime } from "../../common/datetime/relative_time";
|
||||||
import { fireEvent } from "../../common/dom/fire_event";
|
import { fireEvent } from "../../common/dom/fire_event";
|
||||||
import "../../components/ha-button";
|
import "../../components/ha-button";
|
||||||
import "../../components/ha-button-menu";
|
import "../../components/ha-md-button-menu";
|
||||||
|
import "../../components/ha-md-menu-item";
|
||||||
import "../../components/ha-card";
|
import "../../components/ha-card";
|
||||||
import "../../components/ha-icon-button";
|
import "../../components/ha-icon-button";
|
||||||
import "../../components/ha-label";
|
import "../../components/ha-label";
|
||||||
@@ -146,20 +146,19 @@ class HaRefreshTokens extends LitElement {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<ha-button-menu
|
<ha-md-button-menu positioning="popover">
|
||||||
corner="BOTTOM_END"
|
|
||||||
menu-corner="END"
|
|
||||||
@action=${this._handleAction}
|
|
||||||
.token=${token}
|
|
||||||
>
|
|
||||||
<ha-icon-button
|
<ha-icon-button
|
||||||
slot="trigger"
|
slot="trigger"
|
||||||
.label=${this.hass.localize("ui.common.menu")}
|
.label=${this.hass.localize("ui.common.menu")}
|
||||||
.path=${mdiDotsVertical}
|
.path=${mdiDotsVertical}
|
||||||
></ha-icon-button>
|
></ha-icon-button>
|
||||||
<ha-list-item graphic="icon">
|
<ha-md-menu-item
|
||||||
|
graphic="icon"
|
||||||
|
@click=${this._toggleTokenExpiration}
|
||||||
|
.token=${token}
|
||||||
|
>
|
||||||
<ha-svg-icon
|
<ha-svg-icon
|
||||||
slot="graphic"
|
slot="start"
|
||||||
.path=${token.expire_at
|
.path=${token.expire_at
|
||||||
? mdiClockRemoveOutline
|
? mdiClockRemoveOutline
|
||||||
: mdiClockCheckOutline}
|
: mdiClockCheckOutline}
|
||||||
@@ -171,20 +170,24 @@ class HaRefreshTokens extends LitElement {
|
|||||||
: this.hass.localize(
|
: this.hass.localize(
|
||||||
"ui.panel.profile.refresh_tokens.enable_token_expiration"
|
"ui.panel.profile.refresh_tokens.enable_token_expiration"
|
||||||
)}
|
)}
|
||||||
</ha-list-item>
|
</ha-md-menu-item>
|
||||||
<ha-list-item
|
<ha-md-menu-item
|
||||||
graphic="icon"
|
graphic="icon"
|
||||||
class="warning"
|
class="warning"
|
||||||
.disabled=${token.is_current}
|
.disabled=${token.is_current}
|
||||||
|
@click=${this._deleteToken}
|
||||||
|
.token=${token}
|
||||||
>
|
>
|
||||||
<ha-svg-icon
|
<ha-svg-icon
|
||||||
class="warning"
|
class="warning"
|
||||||
slot="graphic"
|
slot="start"
|
||||||
.path=${mdiDelete}
|
.path=${mdiDelete}
|
||||||
></ha-svg-icon>
|
></ha-svg-icon>
|
||||||
${this.hass.localize("ui.common.delete")}
|
<div slot="headline">
|
||||||
</ha-list-item>
|
${this.hass.localize("ui.common.delete")}
|
||||||
</ha-button-menu>
|
</div>
|
||||||
|
</ha-md-menu-item>
|
||||||
|
</ha-md-button-menu>
|
||||||
</div>
|
</div>
|
||||||
</ha-settings-row>
|
</ha-settings-row>
|
||||||
`
|
`
|
||||||
@@ -207,19 +210,8 @@ class HaRefreshTokens extends LitElement {
|
|||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async _handleAction(ev: CustomEvent<ActionDetail>) {
|
private async _toggleTokenExpiration(ev): Promise<void> {
|
||||||
const token = (ev.currentTarget as any).token;
|
const token = (ev.currentTarget as any).token as RefreshToken;
|
||||||
switch (ev.detail.index) {
|
|
||||||
case 0:
|
|
||||||
this._toggleTokenExpiration(token);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
this._deleteToken(token);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async _toggleTokenExpiration(token: RefreshToken): Promise<void> {
|
|
||||||
const enable = !token.expire_at;
|
const enable = !token.expire_at;
|
||||||
if (!enable) {
|
if (!enable) {
|
||||||
if (
|
if (
|
||||||
@@ -260,7 +252,8 @@ class HaRefreshTokens extends LitElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async _deleteToken(token: RefreshToken): Promise<void> {
|
private async _deleteToken(ev): Promise<void> {
|
||||||
|
const token = (ev.currentTarget as any).token as RefreshToken;
|
||||||
if (
|
if (
|
||||||
!(await showConfirmationDialog(this, {
|
!(await showConfirmationDialog(this, {
|
||||||
title: this.hass.localize(
|
title: this.hass.localize(
|
||||||
@@ -332,8 +325,8 @@ class HaRefreshTokens extends LitElement {
|
|||||||
ha-icon-button {
|
ha-icon-button {
|
||||||
color: var(--primary-text-color);
|
color: var(--primary-text-color);
|
||||||
}
|
}
|
||||||
ha-list-item[disabled],
|
ha-md-list-item[disabled],
|
||||||
ha-list-item[disabled] ha-svg-icon {
|
ha-md-list-item[disabled] ha-svg-icon {
|
||||||
color: var(--disabled-text-color) !important;
|
color: var(--disabled-text-color) !important;
|
||||||
}
|
}
|
||||||
ha-settings-row .current-session {
|
ha-settings-row .current-session {
|
||||||
|
@@ -39,7 +39,7 @@ class HaSetVibrateRow extends LitElement {
|
|||||||
fireEvent(this, "hass-vibrate", {
|
fireEvent(this, "hass-vibrate", {
|
||||||
vibrate,
|
vibrate,
|
||||||
});
|
});
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,7 +14,15 @@ import {
|
|||||||
polyfillTimeZoneData,
|
polyfillTimeZoneData,
|
||||||
} from "./locale-data-polyfill";
|
} from "./locale-data-polyfill";
|
||||||
|
|
||||||
|
let polyfilled = false;
|
||||||
|
|
||||||
|
const _polyfillTimeZoneData = polyfillTimeZoneData;
|
||||||
|
|
||||||
const polyfillIntl = async () => {
|
const polyfillIntl = async () => {
|
||||||
|
if (polyfilled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
polyfilled = true;
|
||||||
const locale = getLocalLanguage();
|
const locale = getLocalLanguage();
|
||||||
const polyfills: Promise<unknown>[] = [];
|
const polyfills: Promise<unknown>[] = [];
|
||||||
if (shouldPolyfillGetCanonicalLocales()) {
|
if (shouldPolyfillGetCanonicalLocales()) {
|
||||||
@@ -26,7 +34,7 @@ const polyfillIntl = async () => {
|
|||||||
if (shouldPolyfillDateTimeFormat(locale)) {
|
if (shouldPolyfillDateTimeFormat(locale)) {
|
||||||
polyfills.push(
|
polyfills.push(
|
||||||
import("@formatjs/intl-datetimeformat/polyfill-force").then(() =>
|
import("@formatjs/intl-datetimeformat/polyfill-force").then(() =>
|
||||||
polyfillTimeZoneData()
|
_polyfillTimeZoneData()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -58,7 +66,7 @@ const polyfillIntl = async () => {
|
|||||||
if (polyfills.length === 0) {
|
if (polyfills.length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await Promise.all(polyfills).then(() =>
|
await Promise.allSettled(polyfills).then(() =>
|
||||||
// Load the default language
|
// Load the default language
|
||||||
polyfillLocaleData(locale)
|
polyfillLocaleData(locale)
|
||||||
);
|
);
|
||||||
|
@@ -184,6 +184,21 @@ export const colorStyles = css`
|
|||||||
--state-water_heater-heat_pump-color: var(--orange-color);
|
--state-water_heater-heat_pump-color: var(--orange-color);
|
||||||
--state-water_heater-high_demand-color: var(--deep-orange-color);
|
--state-water_heater-high_demand-color: var(--deep-orange-color);
|
||||||
--state-water_heater-performance-color: var(--deep-orange-color);
|
--state-water_heater-performance-color: var(--deep-orange-color);
|
||||||
|
--state-weather-clear_night-color: var(--deep-purple-color);
|
||||||
|
--state-weather-cloudy-color: var(--light-grey-color);
|
||||||
|
--state-weather-exceptional-color: var(--red-color);
|
||||||
|
--state-weather-fog-color: var(--grey-color);
|
||||||
|
--state-weather-hail-color: var(--cyan-color);
|
||||||
|
--state-weather-lightning_rainy-color: var(--lime-color);
|
||||||
|
--state-weather-lightning-color: var(--yellow-color);
|
||||||
|
--state-weather-partlycloudy-color: var(--blue-grey-color);
|
||||||
|
--state-weather-pouring-color: var(--indigo-color);
|
||||||
|
--state-weather-rainy-color: var(--blue-color);
|
||||||
|
--state-weather-snowy_rainy-color: var(--light-blue-color);
|
||||||
|
--state-weather-snowy-color: #c0e0ff;
|
||||||
|
--state-weather-sunny-color: var(--amber-color);
|
||||||
|
--state-weather-windy_variant-color: var(--green-color);
|
||||||
|
--state-weather-windy-color: var(--green-color);
|
||||||
|
|
||||||
/* history colors */
|
/* history colors */
|
||||||
--history-unknown-color: var(--dark-grey-color);
|
--history-unknown-color: var(--dark-grey-color);
|
||||||
|
@@ -20,7 +20,7 @@ export const coreStyles = css`
|
|||||||
--ha-border-radius-circle: 50%;
|
--ha-border-radius-circle: 50%;
|
||||||
--ha-border-radius-square: 0;
|
--ha-border-radius-square: 0;
|
||||||
|
|
||||||
# Spacing
|
/* Spacing */
|
||||||
--ha-space-0: 0px;
|
--ha-space-0: 0px;
|
||||||
--ha-space-1: 4px;
|
--ha-space-1: 4px;
|
||||||
--ha-space-2: 8px;
|
--ha-space-2: 8px;
|
||||||
@@ -34,7 +34,7 @@ export const coreStyles = css`
|
|||||||
--ha-space-10: 40px;
|
--ha-space-10: 40px;
|
||||||
--ha-space-11: 44px;
|
--ha-space-11: 44px;
|
||||||
--ha-space-12: 48px;
|
--ha-space-12: 48px;
|
||||||
--ha-space-13: 44px;
|
--ha-space-13: 52px;
|
||||||
--ha-space-14: 56px;
|
--ha-space-14: 56px;
|
||||||
--ha-space-15: 60px;
|
--ha-space-15: 60px;
|
||||||
--ha-space-16: 64px;
|
--ha-space-16: 64px;
|
||||||
|
@@ -40,7 +40,7 @@ export class HaStateControlCoverToggle extends LitElement {
|
|||||||
if (!this.hass || !this.stateObj) {
|
if (!this.hass || !this.stateObj) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
|
|
||||||
await this.hass.callService(
|
await this.hass.callService(
|
||||||
"cover",
|
"cover",
|
||||||
|
@@ -46,7 +46,7 @@ export class HaStateControlToggle extends LitElement {
|
|||||||
if (!this.hass || !this.stateObj) {
|
if (!this.hass || !this.stateObj) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
const stateDomain = computeDomain(this.stateObj.entity_id);
|
const stateDomain = computeDomain(this.stateObj.entity_id);
|
||||||
let serviceDomain;
|
let serviceDomain;
|
||||||
let service;
|
let service;
|
||||||
|
@@ -68,7 +68,7 @@ export class HaStateControlLockToggle extends LitElement {
|
|||||||
if (!this.hass || !this.stateObj) {
|
if (!this.hass || !this.stateObj) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
fireEvent(this, "lock-service-called");
|
fireEvent(this, "lock-service-called");
|
||||||
callProtectedLockService(
|
callProtectedLockService(
|
||||||
this,
|
this,
|
||||||
|
@@ -40,7 +40,7 @@ export class HaStateControlValveToggle extends LitElement {
|
|||||||
if (!this.hass || !this.stateObj) {
|
if (!this.hass || !this.stateObj) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forwardHaptic("light");
|
forwardHaptic(this, "light");
|
||||||
|
|
||||||
await this.hass.callService(
|
await this.hass.callService(
|
||||||
"valve",
|
"valve",
|
||||||
|
@@ -127,7 +127,7 @@ export const connectionMixin = <T extends Constructor<HassBaseEl>>(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (notifyOnError) {
|
if (notifyOnError) {
|
||||||
forwardHaptic("failure");
|
forwardHaptic(this, "failure");
|
||||||
const lokalize = await this.hass!.loadBackendTranslation(
|
const lokalize = await this.hass!.loadBackendTranslation(
|
||||||
"exceptions",
|
"exceptions",
|
||||||
err.translation_domain
|
err.translation_domain
|
||||||
|
@@ -7025,7 +7025,11 @@
|
|||||||
},
|
},
|
||||||
"energy_devices_graph": {
|
"energy_devices_graph": {
|
||||||
"energy_usage": "Energy usage",
|
"energy_usage": "Energy usage",
|
||||||
"previous_energy_usage": "Previous energy usage"
|
"previous_energy_usage": "Previous energy usage",
|
||||||
|
"total_energy_usage": "Total energy usage",
|
||||||
|
"change_chart_type": "Change chart type",
|
||||||
|
"untracked": "untracked",
|
||||||
|
"includes_untracked": "Includes {num} kWh of untracked energy"
|
||||||
},
|
},
|
||||||
"energy_devices_detail_graph": {
|
"energy_devices_detail_graph": {
|
||||||
"untracked_consumption": "Untracked consumption",
|
"untracked_consumption": "Untracked consumption",
|
||||||
@@ -7720,6 +7724,7 @@
|
|||||||
"show_icon": "Show icon",
|
"show_icon": "Show icon",
|
||||||
"show_name": "Show name",
|
"show_name": "Show name",
|
||||||
"show_state": "Show state",
|
"show_state": "Show state",
|
||||||
|
"show_last_changed": "Show last changed",
|
||||||
"tap_action": "Tap behavior",
|
"tap_action": "Tap behavior",
|
||||||
"interactions": "Interactions",
|
"interactions": "Interactions",
|
||||||
"title": "Title",
|
"title": "Title",
|
||||||
@@ -8440,6 +8445,7 @@
|
|||||||
"system": "Use system locale",
|
"system": "Use system locale",
|
||||||
"comma_decimal": "1,234,567.89",
|
"comma_decimal": "1,234,567.89",
|
||||||
"decimal_comma": "1.234.567,89",
|
"decimal_comma": "1.234.567,89",
|
||||||
|
"quote_decimal": "1'234'567.89",
|
||||||
"space_comma": "1 234 567,89",
|
"space_comma": "1 234 567,89",
|
||||||
"none": "None"
|
"none": "None"
|
||||||
}
|
}
|
||||||
|
492
yarn.lock
492
yarn.lock
@@ -1217,15 +1217,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@codemirror/autocomplete@npm:6.18.7":
|
"@codemirror/autocomplete@npm:6.19.0":
|
||||||
version: 6.18.7
|
version: 6.19.0
|
||||||
resolution: "@codemirror/autocomplete@npm:6.18.7"
|
resolution: "@codemirror/autocomplete@npm:6.19.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@codemirror/language": "npm:^6.0.0"
|
"@codemirror/language": "npm:^6.0.0"
|
||||||
"@codemirror/state": "npm:^6.0.0"
|
"@codemirror/state": "npm:^6.0.0"
|
||||||
"@codemirror/view": "npm:^6.17.0"
|
"@codemirror/view": "npm:^6.17.0"
|
||||||
"@lezer/common": "npm:^1.0.0"
|
"@lezer/common": "npm:^1.0.0"
|
||||||
checksum: 10/e50e3345d7d33e762d9abd2e6b1ea4ff54afe1630310464a5ddb42cab52fd5bac783ec0dc8a328cb746be6a7f9f711b6fcd8ef311af123511e8307b4c056cb9d
|
checksum: 10/791def23bcf5cc278e821a15462f73233b74c2c40db52a95c41f8b3bff693276e2ebaf0fdac892a44d86a6697a55c352efe3a608ccdf25ee7bbf7ac6cce179ea
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -1284,15 +1284,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@codemirror/view@npm:6.38.3, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0":
|
"@codemirror/view@npm:6.38.4, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0":
|
||||||
version: 6.38.3
|
version: 6.38.4
|
||||||
resolution: "@codemirror/view@npm:6.38.3"
|
resolution: "@codemirror/view@npm:6.38.4"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@codemirror/state": "npm:^6.5.0"
|
"@codemirror/state": "npm:^6.5.0"
|
||||||
crelt: "npm:^1.0.6"
|
crelt: "npm:^1.0.6"
|
||||||
style-mod: "npm:^4.1.0"
|
style-mod: "npm:^4.1.0"
|
||||||
w3c-keyname: "npm:^2.2.4"
|
w3c-keyname: "npm:^2.2.4"
|
||||||
checksum: 10/2df41450399cbac0eaf06dba822418dd6926e48344b9255902248075ef040c957dfe97fe842a755e284a2fd4a66dc17b9638385f46ad74e926baac2e797335a2
|
checksum: 10/86b3894e9e7c2113aabb1db8684d0520378339c194fa56a688fc26cd7d40336bb9df1f5f19f68309d95f14b80ecf0b70c0ffe5e43f2ec11c4bab18f2d5ee4494
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -1351,10 +1351,10 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@ctrl/tinycolor@npm:^4.1.0":
|
"@ctrl/tinycolor@npm:4.1.0":
|
||||||
version: 4.2.0
|
version: 4.1.0
|
||||||
resolution: "@ctrl/tinycolor@npm:4.2.0"
|
resolution: "@ctrl/tinycolor@npm:4.1.0"
|
||||||
checksum: 10/1be14de7d7e8184c0bc5c8d7e3486cc8186e6702e8ca899c7239f328bb1df9a15d1575e2af7b4c6ba020727fa78f5a9f887555971f30a2890cece9e4253a9d3a
|
checksum: 10/e64569399139ef0abd2eb0ec9fb7267dfd7820f7ad7d4567a63e5fc35e5cfdcb8ecdb3bad65cb9244b47ba6c77bc51085826c00e981acf263a3221dc89343adc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -1940,11 +1940,11 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@home-assistant/webawesome@npm:3.0.0-beta.4.ha.3":
|
"@home-assistant/webawesome@npm:3.0.0-beta.6.ha.0":
|
||||||
version: 3.0.0-beta.4.ha.3
|
version: 3.0.0-beta.6.ha.0
|
||||||
resolution: "@home-assistant/webawesome@npm:3.0.0-beta.4.ha.3"
|
resolution: "@home-assistant/webawesome@npm:3.0.0-beta.6.ha.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ctrl/tinycolor": "npm:^4.1.0"
|
"@ctrl/tinycolor": "npm:4.1.0"
|
||||||
"@floating-ui/dom": "npm:^1.6.13"
|
"@floating-ui/dom": "npm:^1.6.13"
|
||||||
"@lit/react": "npm:^1.0.8"
|
"@lit/react": "npm:^1.0.8"
|
||||||
"@shoelace-style/animations": "npm:^1.2.0"
|
"@shoelace-style/animations": "npm:^1.2.0"
|
||||||
@@ -1953,8 +1953,7 @@ __metadata:
|
|||||||
lit: "npm:^3.2.1"
|
lit: "npm:^3.2.1"
|
||||||
nanoid: "npm:^5.1.5"
|
nanoid: "npm:^5.1.5"
|
||||||
qr-creator: "npm:^1.0.0"
|
qr-creator: "npm:^1.0.0"
|
||||||
style-observer: "npm:^0.0.7"
|
checksum: 10/ec9d74585b544e5755f7b2644a0d7f9318b5776bedf51430c8f8729918fddb6e54cce46acace674960383385362846cc4c0f2da5245fa622bce8c54733a31865
|
||||||
checksum: 10/b9241821ed471ccbad86b0ea4697a2d41395f05fdc26f46e5edbc7f6b5eeab5d248251ef702326312ded00d5bf850ce0dcdcf7cd5e2e542b9d9cb9a84f3726da
|
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -3633,13 +3632,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@polka/url@npm:^1.0.0-next.24":
|
|
||||||
version: 1.0.0-next.29
|
|
||||||
resolution: "@polka/url@npm:1.0.0-next.29"
|
|
||||||
checksum: 10/69ca11ab15a4ffec7f0b07fcc4e1f01489b3d9683a7e1867758818386575c60c213401259ba3705b8a812228d17e2bfd18e6f021194d943fff4bca389c9d4f28
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"@polymer/polymer@npm:^3.0.0":
|
"@polymer/polymer@npm:^3.0.0":
|
||||||
version: 3.5.2
|
version: 3.5.2
|
||||||
resolution: "@polymer/polymer@npm:3.5.2"
|
resolution: "@polymer/polymer@npm:3.5.2"
|
||||||
@@ -3906,115 +3898,87 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rsbuild/plugin-check-syntax@npm:1.3.0":
|
"@rsdoctor/client@npm:1.3.1":
|
||||||
version: 1.3.0
|
version: 1.3.1
|
||||||
resolution: "@rsbuild/plugin-check-syntax@npm:1.3.0"
|
resolution: "@rsdoctor/client@npm:1.3.1"
|
||||||
dependencies:
|
checksum: 10/6885dd7e16f2172ddf5d4c901275af77640402f1b5cfd41b0eab6e695cad423bda2909a5b13dc68e864e9d9df4440587b8a3403138437c20b6e3bb15d0c83b04
|
||||||
acorn: "npm:^8.14.0"
|
|
||||||
browserslist-to-es-version: "npm:^1.0.0"
|
|
||||||
htmlparser2: "npm:10.0.0"
|
|
||||||
picocolors: "npm:^1.1.1"
|
|
||||||
source-map: "npm:^0.7.4"
|
|
||||||
peerDependencies:
|
|
||||||
"@rsbuild/core": 1.x
|
|
||||||
peerDependenciesMeta:
|
|
||||||
"@rsbuild/core":
|
|
||||||
optional: true
|
|
||||||
checksum: 10/8fc3729ba91324b936cb46eaeaf6dcc2d8b45d7d00f821af3fed3c14cb38e9174d61f199236658be3ef1046231d80ecc506404f577acc0c057f94711bf10d9da
|
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rsdoctor/client@npm:1.2.3":
|
"@rsdoctor/core@npm:1.3.1":
|
||||||
version: 1.2.3
|
version: 1.3.1
|
||||||
resolution: "@rsdoctor/client@npm:1.2.3"
|
resolution: "@rsdoctor/core@npm:1.3.1"
|
||||||
checksum: 10/4e02c72ded9f7cfa5dc9e224513d4f0cb4d36908fbd62353170148516ad742cd4c9573e2ee90b335d243f8c56f33b2bbd0cc51a3b65000f1a166c2b4c8dd9bd7
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"@rsdoctor/core@npm:1.2.3":
|
|
||||||
version: 1.2.3
|
|
||||||
resolution: "@rsdoctor/core@npm:1.2.3"
|
|
||||||
dependencies:
|
dependencies:
|
||||||
"@rsbuild/plugin-check-syntax": "npm:1.3.0"
|
"@rsdoctor/graph": "npm:1.3.1"
|
||||||
"@rsdoctor/graph": "npm:1.2.3"
|
"@rsdoctor/sdk": "npm:1.3.1"
|
||||||
"@rsdoctor/sdk": "npm:1.2.3"
|
"@rsdoctor/types": "npm:1.3.1"
|
||||||
"@rsdoctor/types": "npm:1.2.3"
|
"@rsdoctor/utils": "npm:1.3.1"
|
||||||
"@rsdoctor/utils": "npm:1.2.3"
|
browserslist-load-config: "npm:^1.0.1"
|
||||||
axios: "npm:^1.11.0"
|
|
||||||
browserslist-load-config: "npm:^1.0.0"
|
|
||||||
enhanced-resolve: "npm:5.12.0"
|
enhanced-resolve: "npm:5.12.0"
|
||||||
filesize: "npm:^10.1.6"
|
filesize: "npm:^10.1.6"
|
||||||
fs-extra: "npm:^11.1.1"
|
fs-extra: "npm:^11.1.1"
|
||||||
lodash: "npm:^4.17.21"
|
lodash-es: "npm:^4.17.21"
|
||||||
path-browserify: "npm:1.0.1"
|
|
||||||
semver: "npm:^7.7.2"
|
semver: "npm:^7.7.2"
|
||||||
source-map: "npm:^0.7.4"
|
source-map: "npm:^0.7.6"
|
||||||
checksum: 10/45c39b966fb879f8770ced60d47d16b42098fc6642064bc528c6b1a9cd0724210b0af5f17f031ae9738884c75b034ea402f34f3d2737e608ce3ebef08fb6909c
|
checksum: 10/40f4de3680202487ff094cd97664035c19c8bd802ff9adbd4c3947c53b08e738eac65e22b45514ca1cd2640305451c53d1efd23a0097674d4af0391698eff9a7
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rsdoctor/graph@npm:1.2.3":
|
"@rsdoctor/graph@npm:1.3.1":
|
||||||
version: 1.2.3
|
version: 1.3.1
|
||||||
resolution: "@rsdoctor/graph@npm:1.2.3"
|
resolution: "@rsdoctor/graph@npm:1.3.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@rsdoctor/types": "npm:1.2.3"
|
"@rsdoctor/types": "npm:1.3.1"
|
||||||
"@rsdoctor/utils": "npm:1.2.3"
|
"@rsdoctor/utils": "npm:1.3.1"
|
||||||
lodash.unionby: "npm:^4.8.0"
|
lodash.unionby: "npm:^4.8.0"
|
||||||
source-map: "npm:^0.7.4"
|
path-browserify: "npm:1.0.1"
|
||||||
checksum: 10/fea12dfdad880f440ea2c3a06c95a92dcbcd78efac6ff03af50c56e40007239b63303ae267ca00e1360e2af559513173cdd0743c7635721cb8ac16e19cda170d
|
source-map: "npm:^0.7.6"
|
||||||
|
checksum: 10/7ae4abd2bd630e2589975df3e34d029921c2ff34c9f62961aff73c384dbb7e94d24faf2bf3f5118860f56b9bab2a5cd4b5185c178ce91f8a0852a258a854602c
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rsdoctor/rspack-plugin@npm:1.2.3":
|
"@rsdoctor/rspack-plugin@npm:1.3.1":
|
||||||
version: 1.2.3
|
version: 1.3.1
|
||||||
resolution: "@rsdoctor/rspack-plugin@npm:1.2.3"
|
resolution: "@rsdoctor/rspack-plugin@npm:1.3.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@rsdoctor/core": "npm:1.2.3"
|
"@rsdoctor/core": "npm:1.3.1"
|
||||||
"@rsdoctor/graph": "npm:1.2.3"
|
"@rsdoctor/graph": "npm:1.3.1"
|
||||||
"@rsdoctor/sdk": "npm:1.2.3"
|
"@rsdoctor/sdk": "npm:1.3.1"
|
||||||
"@rsdoctor/types": "npm:1.2.3"
|
"@rsdoctor/types": "npm:1.3.1"
|
||||||
"@rsdoctor/utils": "npm:1.2.3"
|
"@rsdoctor/utils": "npm:1.3.1"
|
||||||
lodash: "npm:^4.17.21"
|
lodash-es: "npm:^4.17.21"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@rspack/core": "*"
|
"@rspack/core": "*"
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
"@rspack/core":
|
"@rspack/core":
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10/59abb902046fb791a754e02b0eff5e1674417cfc3f6556d164fc6bed0af0eb0aa52bc087c0b0e8d1c42659d4cbaffd497550376799cbedbae4f4f76882b26924
|
checksum: 10/94759bf214102e8acffeaaeb89d8274301f0b420274bf6f26afa736ac915f029e02e33cbc4f9f977d208e20a5e38bf3d812a1147be830dcd25a49755ff111d6d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rsdoctor/sdk@npm:1.2.3":
|
"@rsdoctor/sdk@npm:1.3.1":
|
||||||
version: 1.2.3
|
version: 1.3.1
|
||||||
resolution: "@rsdoctor/sdk@npm:1.2.3"
|
resolution: "@rsdoctor/sdk@npm:1.3.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@rsdoctor/client": "npm:1.2.3"
|
"@rsdoctor/client": "npm:1.3.1"
|
||||||
"@rsdoctor/graph": "npm:1.2.3"
|
"@rsdoctor/graph": "npm:1.3.1"
|
||||||
"@rsdoctor/types": "npm:1.2.3"
|
"@rsdoctor/types": "npm:1.3.1"
|
||||||
"@rsdoctor/utils": "npm:1.2.3"
|
"@rsdoctor/utils": "npm:1.3.1"
|
||||||
"@types/fs-extra": "npm:^11.0.4"
|
safer-buffer: "npm:2.1.2"
|
||||||
body-parser: "npm:1.20.3"
|
|
||||||
cors: "npm:2.8.5"
|
|
||||||
dayjs: "npm:1.11.13"
|
|
||||||
fs-extra: "npm:^11.1.1"
|
|
||||||
json-cycle: "npm:^1.5.0"
|
|
||||||
open: "npm:^8.4.2"
|
|
||||||
sirv: "npm:2.0.4"
|
|
||||||
socket.io: "npm:4.8.1"
|
socket.io: "npm:4.8.1"
|
||||||
source-map: "npm:^0.7.4"
|
tapable: "npm:2.2.3"
|
||||||
tapable: "npm:2.2.2"
|
checksum: 10/194efba86d15e86d81de3b1a747c3e82874f69c4e3f1f96e9f36f8a83cabbcc6371729498e2ab82724550f376dd2630849c435841031a0c139406aeb4b472d06
|
||||||
checksum: 10/3d39ff6a4cd074080b517a6daccf480d88b4f75bd0148748b64f5bd074a05e30a1de74c526d1d6e764a7b7763abc83e53e9ac717eb09cf786eb721b411609a5c
|
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rsdoctor/types@npm:1.2.3":
|
"@rsdoctor/types@npm:1.3.1":
|
||||||
version: 1.2.3
|
version: 1.3.1
|
||||||
resolution: "@rsdoctor/types@npm:1.2.3"
|
resolution: "@rsdoctor/types@npm:1.3.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/connect": "npm:3.4.38"
|
"@types/connect": "npm:3.4.38"
|
||||||
"@types/estree": "npm:1.0.5"
|
"@types/estree": "npm:1.0.5"
|
||||||
"@types/tapable": "npm:2.2.7"
|
"@types/tapable": "npm:2.2.7"
|
||||||
source-map: "npm:^0.7.4"
|
source-map: "npm:^0.7.6"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@rspack/core": "*"
|
"@rspack/core": "*"
|
||||||
webpack: 5.x
|
webpack: 5.x
|
||||||
@@ -4023,32 +3987,30 @@ __metadata:
|
|||||||
optional: true
|
optional: true
|
||||||
webpack:
|
webpack:
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10/e2971d683ee0b138387e383f7d171c573e97ad2b91a906dc7a2e091a3b17cf83a4d5c921f69de6929d408c1c87cc9b2b409235ad5b02d7b8a15506137b04e568
|
checksum: 10/e058017b77b4b58c22c39a0f1177e6cabdedbdebc355f936bbc6be3ace51279d0cd078e2cab19543a5fe2d4cff3e9980f076c4d18bd70ab3d393d5ce0dd1eb89
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rsdoctor/utils@npm:1.2.3":
|
"@rsdoctor/utils@npm:1.3.1":
|
||||||
version: 1.2.3
|
version: 1.3.1
|
||||||
resolution: "@rsdoctor/utils@npm:1.2.3"
|
resolution: "@rsdoctor/utils@npm:1.3.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame": "npm:7.26.2"
|
"@babel/code-frame": "npm:7.26.2"
|
||||||
"@rsdoctor/types": "npm:1.2.3"
|
"@rsdoctor/types": "npm:1.3.1"
|
||||||
"@types/estree": "npm:1.0.5"
|
"@types/estree": "npm:1.0.5"
|
||||||
acorn: "npm:^8.10.0"
|
acorn: "npm:^8.10.0"
|
||||||
acorn-import-attributes: "npm:^1.9.5"
|
acorn-import-attributes: "npm:^1.9.5"
|
||||||
acorn-walk: "npm:8.3.4"
|
acorn-walk: "npm:8.3.4"
|
||||||
connect: "npm:3.7.0"
|
|
||||||
deep-eql: "npm:4.1.4"
|
deep-eql: "npm:4.1.4"
|
||||||
envinfo: "npm:7.14.0"
|
envinfo: "npm:7.14.0"
|
||||||
filesize: "npm:^10.1.6"
|
|
||||||
fs-extra: "npm:^11.1.1"
|
fs-extra: "npm:^11.1.1"
|
||||||
get-port: "npm:5.1.1"
|
get-port: "npm:5.1.1"
|
||||||
json-stream-stringify: "npm:3.0.1"
|
json-stream-stringify: "npm:3.0.1"
|
||||||
lines-and-columns: "npm:2.0.4"
|
lines-and-columns: "npm:2.0.4"
|
||||||
picocolors: "npm:^1.1.1"
|
picocolors: "npm:^1.1.1"
|
||||||
rslog: "npm:^1.2.9"
|
rslog: "npm:^1.2.11"
|
||||||
strip-ansi: "npm:^6.0.1"
|
strip-ansi: "npm:^6.0.1"
|
||||||
checksum: 10/4e6bcce13fd81872766e18eea97439d9bd117b2aba275e2a5a9ff7ec4d65c3ad44b8535ee3adcec70d16969865f4a53144dc692af6f66aaacedd656f63b2da57
|
checksum: 10/ebe1a7233179bf9be0272959c16fc2fc89c37c2cc2553973002889ab8432697f2bee6308dc1c82208ddb1d13d875be6341b9a985d9fe18536af381989200dc48
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -4647,16 +4609,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@types/fs-extra@npm:^11.0.4":
|
|
||||||
version: 11.0.4
|
|
||||||
resolution: "@types/fs-extra@npm:11.0.4"
|
|
||||||
dependencies:
|
|
||||||
"@types/jsonfile": "npm:*"
|
|
||||||
"@types/node": "npm:*"
|
|
||||||
checksum: 10/acc4c1eb0cde7b1f23f3fe6eb080a14832d8fa9dc1761aa444c5e2f0f6b6fa657ed46ebae32fb580a6700fc921b6165ce8ac3e3ba030c3dd15f10ad4dd4cae98
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"@types/geojson@npm:*":
|
"@types/geojson@npm:*":
|
||||||
version: 7946.0.16
|
version: 7946.0.16
|
||||||
resolution: "@types/geojson@npm:7946.0.16"
|
resolution: "@types/geojson@npm:7946.0.16"
|
||||||
@@ -4722,15 +4674,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@types/jsonfile@npm:*":
|
|
||||||
version: 6.1.4
|
|
||||||
resolution: "@types/jsonfile@npm:6.1.4"
|
|
||||||
dependencies:
|
|
||||||
"@types/node": "npm:*"
|
|
||||||
checksum: 10/309fda20eb5f1cf68f2df28931afdf189c5e7e6bec64ac783ce737bb98908d57f6f58757ad5da9be37b815645a6f914e2d4f3ac66c574b8fe1ba6616284d0e97
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"@types/leaflet-draw@npm:1.0.13":
|
"@types/leaflet-draw@npm:1.0.13":
|
||||||
version: 1.0.13
|
version: 1.0.13
|
||||||
resolution: "@types/leaflet-draw@npm:1.0.13"
|
resolution: "@types/leaflet-draw@npm:1.0.13"
|
||||||
@@ -5643,7 +5586,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.15.0, acorn@npm:^8.5.0":
|
"acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.15.0, acorn@npm:^8.5.0":
|
||||||
version: 8.15.0
|
version: 8.15.0
|
||||||
resolution: "acorn@npm:8.15.0"
|
resolution: "acorn@npm:8.15.0"
|
||||||
bin:
|
bin:
|
||||||
@@ -6063,13 +6006,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"asynckit@npm:^0.4.0":
|
|
||||||
version: 0.4.0
|
|
||||||
resolution: "asynckit@npm:0.4.0"
|
|
||||||
checksum: 10/3ce727cbc78f69d6a4722517a58ee926c8c21083633b1d3fdf66fd688f6c127a53a592141bd4866f9b63240a86e9d8e974b13919450bd17fa33c2d22c4558ad8
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"at-least-node@npm:^1.0.0":
|
"at-least-node@npm:^1.0.0":
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
resolution: "at-least-node@npm:1.0.0"
|
resolution: "at-least-node@npm:1.0.0"
|
||||||
@@ -6093,17 +6029,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"axios@npm:^1.11.0":
|
|
||||||
version: 1.12.2
|
|
||||||
resolution: "axios@npm:1.12.2"
|
|
||||||
dependencies:
|
|
||||||
follow-redirects: "npm:^1.15.6"
|
|
||||||
form-data: "npm:^4.0.4"
|
|
||||||
proxy-from-env: "npm:^1.1.0"
|
|
||||||
checksum: 10/886a79770594eaad76493fecf90344b567bd956240609b5dcd09bd0afe8d3e6f1ad6d3257a93a483b6192b409d4b673d9515a34619e3e3ed1b2c0ec2a83b20ba
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"b4a@npm:^1.6.4":
|
"b4a@npm:^1.6.4":
|
||||||
version: 1.7.1
|
version: 1.7.1
|
||||||
resolution: "b4a@npm:1.7.1"
|
resolution: "b4a@npm:1.7.1"
|
||||||
@@ -6368,22 +6293,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"browserslist-load-config@npm:^1.0.0":
|
"browserslist-load-config@npm:^1.0.1":
|
||||||
version: 1.0.1
|
version: 1.0.1
|
||||||
resolution: "browserslist-load-config@npm:1.0.1"
|
resolution: "browserslist-load-config@npm:1.0.1"
|
||||||
checksum: 10/872d2978d2546eb02920b7124d8269e10b3a8d26c1426f1ca844c0d4db53929789d1df5acd0b322b464af18264b58d0f3038a54656fe160c6dc1ab18b2d9491f
|
checksum: 10/872d2978d2546eb02920b7124d8269e10b3a8d26c1426f1ca844c0d4db53929789d1df5acd0b322b464af18264b58d0f3038a54656fe160c6dc1ab18b2d9491f
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"browserslist-to-es-version@npm:^1.0.0":
|
|
||||||
version: 1.1.1
|
|
||||||
resolution: "browserslist-to-es-version@npm:1.1.1"
|
|
||||||
dependencies:
|
|
||||||
browserslist: "npm:^4.25.1"
|
|
||||||
checksum: 10/efce2f27e67bda030ee3957f6df5aaa8594ee5cf017d3567f1226f6abcea7c3840c1ba73105b6bd661c5f57339e44c6819804609e1f064cfdfb8d53894a9f777
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"browserslist-useragent-regexp@npm:4.1.3":
|
"browserslist-useragent-regexp@npm:4.1.3":
|
||||||
version: 4.1.3
|
version: 4.1.3
|
||||||
resolution: "browserslist-useragent-regexp@npm:4.1.3"
|
resolution: "browserslist-useragent-regexp@npm:4.1.3"
|
||||||
@@ -6402,7 +6318,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"browserslist@npm:^4.24.0, browserslist@npm:^4.25.1, browserslist@npm:^4.25.3":
|
"browserslist@npm:^4.24.0, browserslist@npm:^4.25.3":
|
||||||
version: 4.26.2
|
version: 4.26.2
|
||||||
resolution: "browserslist@npm:4.26.2"
|
resolution: "browserslist@npm:4.26.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -6834,15 +6750,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"combined-stream@npm:^1.0.8":
|
|
||||||
version: 1.0.8
|
|
||||||
resolution: "combined-stream@npm:1.0.8"
|
|
||||||
dependencies:
|
|
||||||
delayed-stream: "npm:~1.0.0"
|
|
||||||
checksum: 10/2e969e637d05d09fa50b02d74c83a1186f6914aae89e6653b62595cc75a221464f884f55f231b8f4df7a49537fba60bdc0427acd2bf324c09a1dbb84837e36e4
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"comlink@npm:4.4.2":
|
"comlink@npm:4.4.2":
|
||||||
version: 4.4.2
|
version: 4.4.2
|
||||||
resolution: "comlink@npm:4.4.2"
|
resolution: "comlink@npm:4.4.2"
|
||||||
@@ -6939,18 +6846,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"connect@npm:3.7.0":
|
|
||||||
version: 3.7.0
|
|
||||||
resolution: "connect@npm:3.7.0"
|
|
||||||
dependencies:
|
|
||||||
debug: "npm:2.6.9"
|
|
||||||
finalhandler: "npm:1.1.2"
|
|
||||||
parseurl: "npm:~1.3.3"
|
|
||||||
utils-merge: "npm:1.0.1"
|
|
||||||
checksum: 10/f94818b198cc662092276ef6757dd825c59c8469c8064583525e7b81d39a3af86a01c7cb76107dfa0295dfc52b27a7ae1c40ea0e0a10189c3f8776cf08ce3a4e
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"consola@npm:^3.2.3":
|
"consola@npm:^3.2.3":
|
||||||
version: 3.4.2
|
version: 3.4.2
|
||||||
resolution: "consola@npm:3.4.2"
|
resolution: "consola@npm:3.4.2"
|
||||||
@@ -7042,7 +6937,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"cors@npm:2.8.5, cors@npm:~2.8.5":
|
"cors@npm:~2.8.5":
|
||||||
version: 2.8.5
|
version: 2.8.5
|
||||||
resolution: "cors@npm:2.8.5"
|
resolution: "cors@npm:2.8.5"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -7176,13 +7071,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"dayjs@npm:1.11.13":
|
|
||||||
version: 1.11.13
|
|
||||||
resolution: "dayjs@npm:1.11.13"
|
|
||||||
checksum: 10/7374d63ab179b8d909a95e74790def25c8986e329ae989840bacb8b1888be116d20e1c4eee75a69ea0dfbae13172efc50ef85619d304ee7ca3c01d5878b704f5
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"debug@npm:2.6.9":
|
"debug@npm:2.6.9":
|
||||||
version: 2.6.9
|
version: 2.6.9
|
||||||
resolution: "debug@npm:2.6.9"
|
resolution: "debug@npm:2.6.9"
|
||||||
@@ -7327,13 +7215,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"define-lazy-prop@npm:^2.0.0":
|
|
||||||
version: 2.0.0
|
|
||||||
resolution: "define-lazy-prop@npm:2.0.0"
|
|
||||||
checksum: 10/0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"define-lazy-prop@npm:^3.0.0":
|
"define-lazy-prop@npm:^3.0.0":
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
resolution: "define-lazy-prop@npm:3.0.0"
|
resolution: "define-lazy-prop@npm:3.0.0"
|
||||||
@@ -7367,13 +7248,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"delayed-stream@npm:~1.0.0":
|
|
||||||
version: 1.0.0
|
|
||||||
resolution: "delayed-stream@npm:1.0.0"
|
|
||||||
checksum: 10/46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"depd@npm:2.0.0":
|
"depd@npm:2.0.0":
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
resolution: "depd@npm:2.0.0"
|
resolution: "depd@npm:2.0.0"
|
||||||
@@ -7473,17 +7347,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"dom-serializer@npm:^2.0.0":
|
|
||||||
version: 2.0.0
|
|
||||||
resolution: "dom-serializer@npm:2.0.0"
|
|
||||||
dependencies:
|
|
||||||
domelementtype: "npm:^2.3.0"
|
|
||||||
domhandler: "npm:^5.0.2"
|
|
||||||
entities: "npm:^4.2.0"
|
|
||||||
checksum: 10/e3bf9027a64450bca0a72297ecdc1e3abb7a2912268a9f3f5d33a2e29c1e2c3502c6e9f860fc6625940bfe0cfb57a44953262b9e94df76872fdfb8151097eeb3
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"dom5@npm:^3.0.1":
|
"dom5@npm:^3.0.1":
|
||||||
version: 3.0.1
|
version: 3.0.1
|
||||||
resolution: "dom5@npm:3.0.1"
|
resolution: "dom5@npm:3.0.1"
|
||||||
@@ -7495,33 +7358,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"domelementtype@npm:^2.3.0":
|
|
||||||
version: 2.3.0
|
|
||||||
resolution: "domelementtype@npm:2.3.0"
|
|
||||||
checksum: 10/ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3":
|
|
||||||
version: 5.0.3
|
|
||||||
resolution: "domhandler@npm:5.0.3"
|
|
||||||
dependencies:
|
|
||||||
domelementtype: "npm:^2.3.0"
|
|
||||||
checksum: 10/809b805a50a9c6884a29f38aec0a4e1b4537f40e1c861950ed47d10b049febe6b79ab72adaeeebb3cc8fc1cd33f34e97048a72a9265103426d93efafa78d3e96
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"domutils@npm:^3.2.1":
|
|
||||||
version: 3.2.2
|
|
||||||
resolution: "domutils@npm:3.2.2"
|
|
||||||
dependencies:
|
|
||||||
dom-serializer: "npm:^2.0.0"
|
|
||||||
domelementtype: "npm:^2.3.0"
|
|
||||||
domhandler: "npm:^5.0.3"
|
|
||||||
checksum: 10/2e08842151aa406f50fe5e6d494f4ec73c2373199fa00d1f77b56ec604e566b7f226312ae35ab8160bb7f27a27c7285d574c8044779053e499282ca9198be210
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"dot-case@npm:^3.0.4":
|
"dot-case@npm:^3.0.4":
|
||||||
version: 3.0.4
|
version: 3.0.4
|
||||||
resolution: "dot-case@npm:3.0.4"
|
resolution: "dot-case@npm:3.0.4"
|
||||||
@@ -7713,7 +7549,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"entities@npm:^4.2.0, entities@npm:^4.4.0":
|
"entities@npm:^4.4.0":
|
||||||
version: 4.5.0
|
version: 4.5.0
|
||||||
resolution: "entities@npm:4.5.0"
|
resolution: "entities@npm:4.5.0"
|
||||||
checksum: 10/ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48
|
checksum: 10/ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48
|
||||||
@@ -8615,21 +8451,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"finalhandler@npm:1.1.2":
|
|
||||||
version: 1.1.2
|
|
||||||
resolution: "finalhandler@npm:1.1.2"
|
|
||||||
dependencies:
|
|
||||||
debug: "npm:2.6.9"
|
|
||||||
encodeurl: "npm:~1.0.2"
|
|
||||||
escape-html: "npm:~1.0.3"
|
|
||||||
on-finished: "npm:~2.3.0"
|
|
||||||
parseurl: "npm:~1.3.3"
|
|
||||||
statuses: "npm:~1.5.0"
|
|
||||||
unpipe: "npm:~1.0.0"
|
|
||||||
checksum: 10/351e99a889abf149eb3edb24568586469feeb3019f5eafb9b31e632a5ad886f12a5595a221508245e6a37da69ae866c9fb411eb541a844238e2c900f63ac1576
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"finalhandler@npm:1.3.1":
|
"finalhandler@npm:1.3.1":
|
||||||
version: 1.3.1
|
version: 1.3.1
|
||||||
resolution: "finalhandler@npm:1.3.1"
|
resolution: "finalhandler@npm:1.3.1"
|
||||||
@@ -8721,7 +8542,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.6":
|
"follow-redirects@npm:^1.0.0":
|
||||||
version: 1.15.11
|
version: 1.15.11
|
||||||
resolution: "follow-redirects@npm:1.15.11"
|
resolution: "follow-redirects@npm:1.15.11"
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
@@ -8766,19 +8587,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"form-data@npm:^4.0.4":
|
|
||||||
version: 4.0.4
|
|
||||||
resolution: "form-data@npm:4.0.4"
|
|
||||||
dependencies:
|
|
||||||
asynckit: "npm:^0.4.0"
|
|
||||||
combined-stream: "npm:^1.0.8"
|
|
||||||
es-set-tostringtag: "npm:^2.1.0"
|
|
||||||
hasown: "npm:^2.0.2"
|
|
||||||
mime-types: "npm:^2.1.12"
|
|
||||||
checksum: 10/a4b62e21932f48702bc468cc26fb276d186e6b07b557e3dd7cc455872bdbb82db7db066844a64ad3cf40eaf3a753c830538183570462d3649fdfd705601cbcfb
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"forwarded@npm:0.2.0":
|
"forwarded@npm:0.2.0":
|
||||||
version: 0.2.0
|
version: 0.2.0
|
||||||
resolution: "forwarded@npm:0.2.0"
|
resolution: "forwarded@npm:0.2.0"
|
||||||
@@ -9373,13 +9181,13 @@ __metadata:
|
|||||||
"@babel/runtime": "npm:7.28.4"
|
"@babel/runtime": "npm:7.28.4"
|
||||||
"@braintree/sanitize-url": "npm:7.1.1"
|
"@braintree/sanitize-url": "npm:7.1.1"
|
||||||
"@bundle-stats/plugin-webpack-filter": "npm:4.21.3"
|
"@bundle-stats/plugin-webpack-filter": "npm:4.21.3"
|
||||||
"@codemirror/autocomplete": "npm:6.18.7"
|
"@codemirror/autocomplete": "npm:6.19.0"
|
||||||
"@codemirror/commands": "npm:6.8.1"
|
"@codemirror/commands": "npm:6.8.1"
|
||||||
"@codemirror/language": "npm:6.11.3"
|
"@codemirror/language": "npm:6.11.3"
|
||||||
"@codemirror/legacy-modes": "npm:6.5.1"
|
"@codemirror/legacy-modes": "npm:6.5.1"
|
||||||
"@codemirror/search": "npm:6.5.11"
|
"@codemirror/search": "npm:6.5.11"
|
||||||
"@codemirror/state": "npm:6.5.2"
|
"@codemirror/state": "npm:6.5.2"
|
||||||
"@codemirror/view": "npm:6.38.3"
|
"@codemirror/view": "npm:6.38.4"
|
||||||
"@date-fns/tz": "npm:1.4.1"
|
"@date-fns/tz": "npm:1.4.1"
|
||||||
"@egjs/hammerjs": "npm:2.0.17"
|
"@egjs/hammerjs": "npm:2.0.17"
|
||||||
"@formatjs/intl-datetimeformat": "npm:6.18.0"
|
"@formatjs/intl-datetimeformat": "npm:6.18.0"
|
||||||
@@ -9397,7 +9205,7 @@ __metadata:
|
|||||||
"@fullcalendar/list": "npm:6.1.19"
|
"@fullcalendar/list": "npm:6.1.19"
|
||||||
"@fullcalendar/luxon3": "npm:6.1.19"
|
"@fullcalendar/luxon3": "npm:6.1.19"
|
||||||
"@fullcalendar/timegrid": "npm:6.1.19"
|
"@fullcalendar/timegrid": "npm:6.1.19"
|
||||||
"@home-assistant/webawesome": "npm:3.0.0-beta.4.ha.3"
|
"@home-assistant/webawesome": "npm:3.0.0-beta.6.ha.0"
|
||||||
"@lezer/highlight": "npm:1.2.1"
|
"@lezer/highlight": "npm:1.2.1"
|
||||||
"@lit-labs/motion": "npm:1.0.9"
|
"@lit-labs/motion": "npm:1.0.9"
|
||||||
"@lit-labs/observers": "npm:2.0.6"
|
"@lit-labs/observers": "npm:2.0.6"
|
||||||
@@ -9434,7 +9242,7 @@ __metadata:
|
|||||||
"@octokit/plugin-retry": "npm:8.0.1"
|
"@octokit/plugin-retry": "npm:8.0.1"
|
||||||
"@octokit/rest": "npm:22.0.0"
|
"@octokit/rest": "npm:22.0.0"
|
||||||
"@replit/codemirror-indentation-markers": "npm:6.5.3"
|
"@replit/codemirror-indentation-markers": "npm:6.5.3"
|
||||||
"@rsdoctor/rspack-plugin": "npm:1.2.3"
|
"@rsdoctor/rspack-plugin": "npm:1.3.1"
|
||||||
"@rspack/core": "npm:1.5.7"
|
"@rspack/core": "npm:1.5.7"
|
||||||
"@rspack/dev-server": "npm:1.1.4"
|
"@rspack/dev-server": "npm:1.1.4"
|
||||||
"@swc/helpers": "npm:0.5.17"
|
"@swc/helpers": "npm:0.5.17"
|
||||||
@@ -9514,7 +9322,7 @@ __metadata:
|
|||||||
leaflet: "npm:1.9.4"
|
leaflet: "npm:1.9.4"
|
||||||
leaflet-draw: "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch"
|
leaflet-draw: "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch"
|
||||||
leaflet.markercluster: "npm:1.5.3"
|
leaflet.markercluster: "npm:1.5.3"
|
||||||
lint-staged: "npm:16.2.1"
|
lint-staged: "npm:16.2.3"
|
||||||
lit: "npm:3.3.1"
|
lit: "npm:3.3.1"
|
||||||
lit-analyzer: "npm:2.0.3"
|
lit-analyzer: "npm:2.0.3"
|
||||||
lit-html: "npm:3.3.1"
|
lit-html: "npm:3.3.1"
|
||||||
@@ -9642,18 +9450,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"htmlparser2@npm:10.0.0":
|
|
||||||
version: 10.0.0
|
|
||||||
resolution: "htmlparser2@npm:10.0.0"
|
|
||||||
dependencies:
|
|
||||||
domelementtype: "npm:^2.3.0"
|
|
||||||
domhandler: "npm:^5.0.3"
|
|
||||||
domutils: "npm:^3.2.1"
|
|
||||||
entities: "npm:^6.0.0"
|
|
||||||
checksum: 10/768870f0e020dca19dc45df206cb6ac466c5dba6566c8fca4ca880347eed409f9977028d08644ac516bca8628ac9c7ded5a3847dc3ee1c043f049abf9e817154
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"http-cache-semantics@npm:^4.1.1":
|
"http-cache-semantics@npm:^4.1.1":
|
||||||
version: 4.2.0
|
version: 4.2.0
|
||||||
resolution: "http-cache-semantics@npm:4.2.0"
|
resolution: "http-cache-semantics@npm:4.2.0"
|
||||||
@@ -10055,7 +9851,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1":
|
"is-docker@npm:^2.0.0":
|
||||||
version: 2.2.1
|
version: 2.2.1
|
||||||
resolution: "is-docker@npm:2.2.1"
|
resolution: "is-docker@npm:2.2.1"
|
||||||
bin:
|
bin:
|
||||||
@@ -10647,13 +10443,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"json-cycle@npm:^1.5.0":
|
|
||||||
version: 1.5.0
|
|
||||||
resolution: "json-cycle@npm:1.5.0"
|
|
||||||
checksum: 10/4ce7594eb8f42e820c708ceaed12759168c4d29f91e0f8e213909331f7fd12b765a3b9c4a5e8f0e72bc25d5ed2a380211ff3ec95c3ba1cbb2cb5c68ea396ae9f
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"json-schema-traverse@npm:^0.4.1":
|
"json-schema-traverse@npm:^0.4.1":
|
||||||
version: 0.4.1
|
version: 0.4.1
|
||||||
resolution: "json-schema-traverse@npm:0.4.1"
|
resolution: "json-schema-traverse@npm:0.4.1"
|
||||||
@@ -10868,9 +10657,9 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"lint-staged@npm:16.2.1":
|
"lint-staged@npm:16.2.3":
|
||||||
version: 16.2.1
|
version: 16.2.3
|
||||||
resolution: "lint-staged@npm:16.2.1"
|
resolution: "lint-staged@npm:16.2.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
commander: "npm:^14.0.1"
|
commander: "npm:^14.0.1"
|
||||||
listr2: "npm:^9.0.4"
|
listr2: "npm:^9.0.4"
|
||||||
@@ -10881,7 +10670,7 @@ __metadata:
|
|||||||
yaml: "npm:^2.8.1"
|
yaml: "npm:^2.8.1"
|
||||||
bin:
|
bin:
|
||||||
lint-staged: bin/lint-staged.js
|
lint-staged: bin/lint-staged.js
|
||||||
checksum: 10/b604de3ca27a067e45c5f0e0780ca46f5617e9f6ac3895297dee087d62742bbcd9f9e910300c15c599e1f06900666469b73e036e3fe3153ccedef314ce791dd5
|
checksum: 10/7c83cb478aa8004eecc8c91d633abe2865ffc037957ae9ee2669e49b76b76fe3512ba431277efc29cec7a38641e7d8a62f3378a41b624c88bde6fbef5524e2cb
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -10978,6 +10767,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"lodash-es@npm:^4.17.21":
|
||||||
|
version: 4.17.21
|
||||||
|
resolution: "lodash-es@npm:4.17.21"
|
||||||
|
checksum: 10/03f39878ea1e42b3199bd3f478150ab723f93cc8730ad86fec1f2804f4a07c6e30deaac73cad53a88e9c3db33348bb8ceeb274552390e7a75d7849021c02df43
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"lodash._reinterpolate@npm:^3.0.0":
|
"lodash._reinterpolate@npm:^3.0.0":
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
resolution: "lodash._reinterpolate@npm:3.0.0"
|
resolution: "lodash._reinterpolate@npm:3.0.0"
|
||||||
@@ -11302,15 +11098,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"mime-types@npm:^2.1.12, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
|
|
||||||
version: 2.1.35
|
|
||||||
resolution: "mime-types@npm:2.1.35"
|
|
||||||
dependencies:
|
|
||||||
mime-db: "npm:1.52.0"
|
|
||||||
checksum: 10/89aa9651b67644035de2784a6e665fc685d79aba61857e02b9c8758da874a754aed4a9aced9265f5ed1171fd934331e5516b84a7f0218031b6fa0270eca1e51a
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"mime-types@npm:^3.0.1":
|
"mime-types@npm:^3.0.1":
|
||||||
version: 3.0.1
|
version: 3.0.1
|
||||||
resolution: "mime-types@npm:3.0.1"
|
resolution: "mime-types@npm:3.0.1"
|
||||||
@@ -11320,6 +11107,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
|
||||||
|
version: 2.1.35
|
||||||
|
resolution: "mime-types@npm:2.1.35"
|
||||||
|
dependencies:
|
||||||
|
mime-db: "npm:1.52.0"
|
||||||
|
checksum: 10/89aa9651b67644035de2784a6e665fc685d79aba61857e02b9c8758da874a754aed4a9aced9265f5ed1171fd934331e5516b84a7f0218031b6fa0270eca1e51a
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"mime@npm:1.6.0":
|
"mime@npm:1.6.0":
|
||||||
version: 1.6.0
|
version: 1.6.0
|
||||||
resolution: "mime@npm:1.6.0"
|
resolution: "mime@npm:1.6.0"
|
||||||
@@ -11476,13 +11272,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"mrmime@npm:^2.0.0":
|
|
||||||
version: 2.0.1
|
|
||||||
resolution: "mrmime@npm:2.0.1"
|
|
||||||
checksum: 10/1f966e2c05b7264209c4149ae50e8e830908eb64dd903535196f6ad72681fa109b794007288a3c2814f7a1ecf9ca192769909c0c374d974d604a8de5fc095d4a
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"ms@npm:2.0.0":
|
"ms@npm:2.0.0":
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
resolution: "ms@npm:2.0.0"
|
resolution: "ms@npm:2.0.0"
|
||||||
@@ -11833,15 +11622,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"on-finished@npm:~2.3.0":
|
|
||||||
version: 2.3.0
|
|
||||||
resolution: "on-finished@npm:2.3.0"
|
|
||||||
dependencies:
|
|
||||||
ee-first: "npm:1.1.1"
|
|
||||||
checksum: 10/1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"on-headers@npm:~1.1.0":
|
"on-headers@npm:~1.1.0":
|
||||||
version: 1.1.0
|
version: 1.1.0
|
||||||
resolution: "on-headers@npm:1.1.0"
|
resolution: "on-headers@npm:1.1.0"
|
||||||
@@ -11888,17 +11668,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"open@npm:^8.4.2":
|
|
||||||
version: 8.4.2
|
|
||||||
resolution: "open@npm:8.4.2"
|
|
||||||
dependencies:
|
|
||||||
define-lazy-prop: "npm:^2.0.0"
|
|
||||||
is-docker: "npm:^2.1.1"
|
|
||||||
is-wsl: "npm:^2.2.0"
|
|
||||||
checksum: 10/acd81a1d19879c818acb3af2d2e8e9d81d17b5367561e623248133deb7dd3aefaed527531df2677d3e6aaf0199f84df57b6b2262babff8bf46ea0029aac536c9
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"optionator@npm:^0.9.3":
|
"optionator@npm:^0.9.3":
|
||||||
version: 0.9.4
|
version: 0.9.4
|
||||||
resolution: "optionator@npm:0.9.4"
|
resolution: "optionator@npm:0.9.4"
|
||||||
@@ -12423,13 +12192,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"proxy-from-env@npm:^1.1.0":
|
|
||||||
version: 1.1.0
|
|
||||||
resolution: "proxy-from-env@npm:1.1.0"
|
|
||||||
checksum: 10/f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"punycode@npm:2.3.1, punycode@npm:^2.1.0, punycode@npm:^2.3.1":
|
"punycode@npm:2.3.1, punycode@npm:^2.1.0, punycode@npm:^2.3.1":
|
||||||
version: 2.3.1
|
version: 2.3.1
|
||||||
resolution: "punycode@npm:2.3.1"
|
resolution: "punycode@npm:2.3.1"
|
||||||
@@ -13004,7 +12766,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"rslog@npm:^1.2.9":
|
"rslog@npm:^1.2.11":
|
||||||
version: 1.2.11
|
version: 1.2.11
|
||||||
resolution: "rslog@npm:1.2.11"
|
resolution: "rslog@npm:1.2.11"
|
||||||
checksum: 10/218e2e233cfc9944fd7635c3c90bd045abd4c08c54a649e9c44ebc5c06c239f3990fd9d946608f70af5eb69e1ccbf3a0fbd46933c405fae46849af976d55d53e
|
checksum: 10/218e2e233cfc9944fd7635c3c90bd045abd4c08c54a649e9c44ebc5c06c239f3990fd9d946608f70af5eb69e1ccbf3a0fbd46933c405fae46849af976d55d53e
|
||||||
@@ -13089,7 +12851,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0":
|
"safer-buffer@npm:2.1.2, safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0":
|
||||||
version: 2.1.2
|
version: 2.1.2
|
||||||
resolution: "safer-buffer@npm:2.1.2"
|
resolution: "safer-buffer@npm:2.1.2"
|
||||||
checksum: 10/7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83
|
checksum: 10/7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83
|
||||||
@@ -13433,17 +13195,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"sirv@npm:2.0.4":
|
|
||||||
version: 2.0.4
|
|
||||||
resolution: "sirv@npm:2.0.4"
|
|
||||||
dependencies:
|
|
||||||
"@polka/url": "npm:^1.0.0-next.24"
|
|
||||||
mrmime: "npm:^2.0.0"
|
|
||||||
totalist: "npm:^3.0.0"
|
|
||||||
checksum: 10/24f42cf06895017e589c9d16fc3f1c6c07fe8b0dbafce8a8b46322cfba67b7f2498610183954cb0e9d089c8cb60002a7ee7e8bca6a91a0d7042bfbc3473c95c3
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"slash@npm:^5.1.0":
|
"slash@npm:^5.1.0":
|
||||||
version: 5.1.0
|
version: 5.1.0
|
||||||
resolution: "slash@npm:5.1.0"
|
resolution: "slash@npm:5.1.0"
|
||||||
@@ -13587,7 +13338,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"source-map@npm:^0.7.4":
|
"source-map@npm:^0.7.6":
|
||||||
version: 0.7.6
|
version: 0.7.6
|
||||||
resolution: "source-map@npm:0.7.6"
|
resolution: "source-map@npm:0.7.6"
|
||||||
checksum: 10/c8d2da7c57c14f3fd7568f764b39ad49bbf9dd7632b86df3542b31fed117d4af2fb74a4f886fc06baf7a510fee68e37998efc3080aacdac951c36211dc29a7a3
|
checksum: 10/c8d2da7c57c14f3fd7568f764b39ad49bbf9dd7632b86df3542b31fed117d4af2fb74a4f886fc06baf7a510fee68e37998efc3080aacdac951c36211dc29a7a3
|
||||||
@@ -13704,7 +13455,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"statuses@npm:>= 1.4.0 < 2, statuses@npm:~1.5.0":
|
"statuses@npm:>= 1.4.0 < 2":
|
||||||
version: 1.5.0
|
version: 1.5.0
|
||||||
resolution: "statuses@npm:1.5.0"
|
resolution: "statuses@npm:1.5.0"
|
||||||
checksum: 10/c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c
|
checksum: 10/c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c
|
||||||
@@ -13984,13 +13735,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"style-observer@npm:^0.0.7":
|
|
||||||
version: 0.0.7
|
|
||||||
resolution: "style-observer@npm:0.0.7"
|
|
||||||
checksum: 10/bb57f98bae4463c1e1b57234f8ffe72ec0de27fb08b032c1919910129c210aacd1ddd615432b9453d491e10d3b719cf6c2a68a97165ca55d6fc9b86c0fca37fb
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"style-observer@npm:^0.0.8":
|
"style-observer@npm:^0.0.8":
|
||||||
version: 0.0.8
|
version: 0.0.8
|
||||||
resolution: "style-observer@npm:0.0.8"
|
resolution: "style-observer@npm:0.0.8"
|
||||||
@@ -14058,10 +13802,10 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"tapable@npm:2.2.2":
|
"tapable@npm:2.2.3, tapable@npm:^2.2.0":
|
||||||
version: 2.2.2
|
version: 2.2.3
|
||||||
resolution: "tapable@npm:2.2.2"
|
resolution: "tapable@npm:2.2.3"
|
||||||
checksum: 10/065a0dc44aba1b32020faa1c27c719e8f76e5345347515d8494bf158524f36e9f22ad9eaa5b5494f9d5d67bf0640afdd5698505948c46d720b6b7e69d19349a6
|
checksum: 10/15e0472f662e40ea865cee2664163d4809c14369777c6b6dec27e3163dd24f8f3e4f3bf59c629e772402aec9a45e7daf40f9df9606b7304722d3c81f3b49235d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -14072,13 +13816,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"tapable@npm:^2.2.0":
|
|
||||||
version: 2.2.3
|
|
||||||
resolution: "tapable@npm:2.2.3"
|
|
||||||
checksum: 10/15e0472f662e40ea865cee2664163d4809c14369777c6b6dec27e3163dd24f8f3e4f3bf59c629e772402aec9a45e7daf40f9df9606b7304722d3c81f3b49235d
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"tar@npm:7.5.1, tar@npm:^7.4.3":
|
"tar@npm:7.5.1, tar@npm:^7.4.3":
|
||||||
version: 7.5.1
|
version: 7.5.1
|
||||||
resolution: "tar@npm:7.5.1"
|
resolution: "tar@npm:7.5.1"
|
||||||
@@ -14360,13 +14097,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"totalist@npm:^3.0.0":
|
|
||||||
version: 3.0.1
|
|
||||||
resolution: "totalist@npm:3.0.1"
|
|
||||||
checksum: 10/5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"tough-cookie@npm:^6.0.0":
|
"tough-cookie@npm:^6.0.0":
|
||||||
version: 6.0.0
|
version: 6.0.0
|
||||||
resolution: "tough-cookie@npm:6.0.0"
|
resolution: "tough-cookie@npm:6.0.0"
|
||||||
|
Reference in New Issue
Block a user