mirror of
https://github.com/home-assistant/frontend.git
synced 2026-01-02 05:17:20 +00:00
Compare commits
116 Commits
quick-bar-
...
secondary-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72fb0c3539 | ||
|
|
8d317d1e2c | ||
|
|
9acad2e83c | ||
|
|
9099c5a92c | ||
|
|
60c4d60d66 | ||
|
|
e8a4cde643 | ||
|
|
148eab31b6 | ||
|
|
9f7683021e | ||
|
|
549bd25f5c | ||
|
|
eb74dd541a | ||
|
|
4c84c7b54f | ||
|
|
3a8f964ebd | ||
|
|
211ddcf7a4 | ||
|
|
021e5f5ce0 | ||
|
|
5b0bd9d577 | ||
|
|
d839152fd1 | ||
|
|
407cb79805 | ||
|
|
7817ebe983 | ||
|
|
7e58cedd49 | ||
|
|
06334a039c | ||
|
|
6e5853a1c0 | ||
|
|
f4f4520773 | ||
|
|
94453dfba5 | ||
|
|
0ce0247a2c | ||
|
|
ce8cabbad9 | ||
|
|
0802841606 | ||
|
|
cb93e1b741 | ||
|
|
30c383a2fc | ||
|
|
73ee235fef | ||
|
|
31603ea7b2 | ||
|
|
17c1043cfc | ||
|
|
da255dce40 | ||
|
|
0c68072f8f | ||
|
|
d197fd8f76 | ||
|
|
a961a87872 | ||
|
|
cc96c707b9 | ||
|
|
4b73713f2a | ||
|
|
c001102f15 | ||
|
|
c1e5e0bfcb | ||
|
|
a1412e90fd | ||
|
|
f6f40c1679 | ||
|
|
d77bebe96b | ||
|
|
1260af0b45 | ||
|
|
1d37eec411 | ||
|
|
5a52f83358 | ||
|
|
60724eb952 | ||
|
|
de5778079e | ||
|
|
f3710650f2 | ||
|
|
feb35dbc4f | ||
|
|
ee9e101fa6 | ||
|
|
24b16360a6 | ||
|
|
109c81a00d | ||
|
|
eaa1ddbf61 | ||
|
|
b11cb57a1e | ||
|
|
87b5f58779 | ||
|
|
8dac53c672 | ||
|
|
d0966bf35a | ||
|
|
6ba4fc0808 | ||
|
|
bd582ff816 | ||
|
|
d34bf83da0 | ||
|
|
b0cfb31bf3 | ||
|
|
6c39e5d2c5 | ||
|
|
7b51e71092 | ||
|
|
8a82483685 | ||
|
|
bb691fa7a2 | ||
|
|
2232db9c0f | ||
|
|
5375665dc6 | ||
|
|
480122f40a | ||
|
|
ee5c54030a | ||
|
|
b73f50e864 | ||
|
|
b9836073b7 | ||
|
|
a40512e0b5 | ||
|
|
b2122570fb | ||
|
|
885f9333d2 | ||
|
|
f812e7e9fb | ||
|
|
64dad39f6e | ||
|
|
df0fb423ed | ||
|
|
4c3156f290 | ||
|
|
ecdf374902 | ||
|
|
3e924e0cde | ||
|
|
6fb71e12c8 | ||
|
|
6138aa5489 | ||
|
|
61e865d3a6 | ||
|
|
febcbf6242 | ||
|
|
6a2fac6a9e | ||
|
|
b60c5467fc | ||
|
|
ecd563406e | ||
|
|
d5b66315e2 | ||
|
|
5b1719fc6e | ||
|
|
add22cf2e9 | ||
|
|
21509191fa | ||
|
|
1a73cccf0d | ||
|
|
407d68250a | ||
|
|
38b7bd18bb | ||
|
|
a00e944a35 | ||
|
|
481569804e | ||
|
|
a1d7e270ff | ||
|
|
225ccf1d2f | ||
|
|
4a5e1f9f3f | ||
|
|
b27b7210fd | ||
|
|
acd5181449 | ||
|
|
b6b2d03a80 | ||
|
|
7aee2b7cb7 | ||
|
|
df1914cb7a | ||
|
|
6706d5904d | ||
|
|
221aefd764 | ||
|
|
670057e8e6 | ||
|
|
427e46201c | ||
|
|
fd1240f335 | ||
|
|
aa7670cb59 | ||
|
|
468139229c | ||
|
|
39752f0e3f | ||
|
|
4d850d067f | ||
|
|
bcae64df88 | ||
|
|
690fd5a061 | ||
|
|
ac56c6df9a |
24
package.json
24
package.json
@@ -37,15 +37,15 @@
|
||||
"@codemirror/view": "6.39.7",
|
||||
"@date-fns/tz": "1.4.1",
|
||||
"@egjs/hammerjs": "2.0.17",
|
||||
"@formatjs/intl-datetimeformat": "7.0.6",
|
||||
"@formatjs/intl-displaynames": "7.0.6",
|
||||
"@formatjs/intl-durationformat": "0.8.6",
|
||||
"@formatjs/intl-getcanonicallocales": "3.0.4",
|
||||
"@formatjs/intl-listformat": "8.0.6",
|
||||
"@formatjs/intl-locale": "5.0.6",
|
||||
"@formatjs/intl-numberformat": "9.0.7",
|
||||
"@formatjs/intl-pluralrules": "6.0.6",
|
||||
"@formatjs/intl-relativetimeformat": "12.0.7",
|
||||
"@formatjs/intl-datetimeformat": "7.1.0",
|
||||
"@formatjs/intl-displaynames": "7.1.0",
|
||||
"@formatjs/intl-durationformat": "0.9.0",
|
||||
"@formatjs/intl-getcanonicallocales": "3.1.0",
|
||||
"@formatjs/intl-listformat": "8.1.0",
|
||||
"@formatjs/intl-locale": "5.1.0",
|
||||
"@formatjs/intl-numberformat": "9.1.0",
|
||||
"@formatjs/intl-pluralrules": "6.1.0",
|
||||
"@formatjs/intl-relativetimeformat": "12.1.0",
|
||||
"@fullcalendar/core": "6.1.20",
|
||||
"@fullcalendar/daygrid": "6.1.20",
|
||||
"@fullcalendar/interaction": "6.1.20",
|
||||
@@ -85,7 +85,7 @@
|
||||
"@mdi/js": "7.4.47",
|
||||
"@mdi/svg": "7.4.47",
|
||||
"@replit/codemirror-indentation-markers": "6.5.3",
|
||||
"@swc/helpers": "0.5.17",
|
||||
"@swc/helpers": "0.5.18",
|
||||
"@thomasloven/round-slider": "0.6.0",
|
||||
"@tsparticles/engine": "3.9.1",
|
||||
"@tsparticles/preset-links": "3.2.0",
|
||||
@@ -112,7 +112,7 @@
|
||||
"hls.js": "1.6.15",
|
||||
"home-assistant-js-websocket": "9.6.0",
|
||||
"idb-keyval": "6.2.2",
|
||||
"intl-messageformat": "11.0.6",
|
||||
"intl-messageformat": "11.0.7",
|
||||
"js-yaml": "4.1.1",
|
||||
"leaflet": "1.9.4",
|
||||
"leaflet-draw": "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch",
|
||||
@@ -199,7 +199,7 @@
|
||||
"gulp-rename": "2.1.0",
|
||||
"html-minifier-terser": "7.2.0",
|
||||
"husky": "9.1.7",
|
||||
"jsdom": "27.3.0",
|
||||
"jsdom": "27.4.0",
|
||||
"jszip": "3.10.1",
|
||||
"lint-staged": "16.2.7",
|
||||
"lit-analyzer": "2.0.3",
|
||||
|
||||
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "home-assistant-frontend"
|
||||
version = "20251203.0"
|
||||
version = "20251229.0"
|
||||
license = "Apache-2.0"
|
||||
license-files = ["LICENSE*"]
|
||||
description = "The Home Assistant frontend"
|
||||
|
||||
@@ -86,9 +86,11 @@ class HaMenuButton extends LitElement {
|
||||
: this.narrow;
|
||||
|
||||
const oldShowButton =
|
||||
oldNarrow || oldHass?.dockedSidebar === "always_hidden";
|
||||
oldHass?.kioskMode === false &&
|
||||
(oldNarrow || oldHass?.dockedSidebar === "always_hidden");
|
||||
const showButton =
|
||||
this.narrow || this.hass.dockedSidebar === "always_hidden";
|
||||
this.hass.kioskMode === false &&
|
||||
(this.narrow || this.hass.dockedSidebar === "always_hidden");
|
||||
|
||||
if (this.hasUpdated && oldShowButton === showButton) {
|
||||
return;
|
||||
|
||||
@@ -42,7 +42,11 @@ class HaNavigationList extends LitElement {
|
||||
class=${page.iconColor ? "icon-background" : ""}
|
||||
.style="background-color: ${page.iconColor || "undefined"}"
|
||||
>
|
||||
<ha-svg-icon .path=${page.iconPath}></ha-svg-icon>
|
||||
<ha-svg-icon
|
||||
.path=${page.iconPath}
|
||||
.secondaryPath=${page.iconSecondaryPath}
|
||||
.viewBox=${page.iconViewBox}
|
||||
></ha-svg-icon>
|
||||
</div>
|
||||
<span slot="headline">${page.name}</span>
|
||||
${this.hasSecondary
|
||||
|
||||
@@ -59,28 +59,10 @@ export const handleExternalMessage = (
|
||||
|
||||
if (msg.command === "restart") {
|
||||
hassMainEl.hass.connection.reconnect(true);
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "navigate") {
|
||||
navigate(msg.payload.path, msg.payload.options);
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "notifications/show") {
|
||||
fireEvent(hassMainEl, "hass-show-notifications");
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "sidebar/toggle") {
|
||||
if (mainWindow.history.state?.open) {
|
||||
bus.fireMessage({
|
||||
@@ -92,12 +74,6 @@ export const handleExternalMessage = (
|
||||
return true;
|
||||
}
|
||||
fireEvent(hassMainEl, "hass-toggle-menu");
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "sidebar/show") {
|
||||
if (mainWindow.history.state?.open) {
|
||||
bus.fireMessage({
|
||||
@@ -109,56 +85,29 @@ export const handleExternalMessage = (
|
||||
return true;
|
||||
}
|
||||
fireEvent(hassMainEl, "hass-toggle-menu", { open: true });
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "automation/editor/show") {
|
||||
showAutomationEditor(msg.payload?.config);
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "improv/discovered_device") {
|
||||
fireEvent(window, "improv-discovered-device", msg.payload);
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "improv/device_setup_done") {
|
||||
fireEvent(window, "improv-device-setup-done");
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "bar_code/scan_result") {
|
||||
barCodeListeners.forEach((listener) => listener(msg));
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "bar_code/aborted") {
|
||||
barCodeListeners.forEach((listener) => listener(msg));
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
} else if (msg.command === "kiosk_mode/set") {
|
||||
fireEvent(window, "hass-kiosk-mode", { enable: msg.payload.enable });
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
bus.fireMessage({
|
||||
id: msg.id,
|
||||
type: "result",
|
||||
success: true,
|
||||
result: null,
|
||||
});
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
|
||||
@@ -301,6 +301,15 @@ export interface EMIncomingMessageImprovDeviceSetupDone extends EMMessage {
|
||||
command: "improv/device_setup_done";
|
||||
}
|
||||
|
||||
export interface EMIncomingMessageKioskModeSet {
|
||||
id: number;
|
||||
type: "command";
|
||||
command: "kiosk_mode/set";
|
||||
payload: {
|
||||
enable: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export type EMIncomingMessageCommands =
|
||||
| EMIncomingMessageRestart
|
||||
| EMIncomingMessageNavigate
|
||||
@@ -311,7 +320,8 @@ export type EMIncomingMessageCommands =
|
||||
| EMIncomingMessageBarCodeScanResult
|
||||
| EMIncomingMessageBarCodeScanAborted
|
||||
| EMIncomingMessageImprovDeviceDiscovered
|
||||
| EMIncomingMessageImprovDeviceSetupDone;
|
||||
| EMIncomingMessageImprovDeviceSetupDone
|
||||
| EMIncomingMessageKioskModeSet;
|
||||
|
||||
type EMIncomingMessage =
|
||||
| EMMessageResultSuccess
|
||||
|
||||
@@ -282,6 +282,7 @@ export const provideHass = (
|
||||
dockedSidebar: "auto",
|
||||
vibrate: true,
|
||||
debugConnection: false,
|
||||
kioskMode: false,
|
||||
suspendWhenHidden: false,
|
||||
moreInfoEntityId: null as any,
|
||||
// @ts-ignore
|
||||
|
||||
@@ -23,6 +23,8 @@ export interface PageNavigation {
|
||||
core?: boolean;
|
||||
advancedOnly?: boolean;
|
||||
iconPath?: string;
|
||||
iconSecondaryPath?: string;
|
||||
iconViewBox?: string;
|
||||
description?: string;
|
||||
iconColor?: string;
|
||||
info?: any;
|
||||
|
||||
@@ -44,7 +44,8 @@ export class HomeAssistantMain extends LitElement {
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
const sidebarNarrow = this._sidebarNarrow || this._externalSidebar;
|
||||
const sidebarNarrow =
|
||||
this._sidebarNarrow || this._externalSidebar || this.hass.kioskMode;
|
||||
|
||||
const isPanelReady =
|
||||
this.hass.panels && this.hass.userData && this.hass.systemData;
|
||||
@@ -133,7 +134,7 @@ export class HomeAssistantMain extends LitElement {
|
||||
toggleAttribute(
|
||||
this,
|
||||
"modal",
|
||||
this._sidebarNarrow || this._externalSidebar
|
||||
this._sidebarNarrow || this._externalSidebar || this.hass.kioskMode
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ class DialogImportBlueprint extends LitElement {
|
||||
</div>
|
||||
<ha-button
|
||||
appearance="plain"
|
||||
slot="primaryAction"
|
||||
slot="secondaryAction"
|
||||
@click=${this.closeDialog}
|
||||
.disabled=${this._saving}
|
||||
>
|
||||
|
||||
@@ -8,7 +8,7 @@ import {
|
||||
} from "@mdi/js";
|
||||
import type { UnsubscribeFunc } from "home-assistant-js-websocket";
|
||||
import type { CSSResultGroup, PropertyValues, TemplateResult } from "lit";
|
||||
import { css, html, LitElement } from "lit";
|
||||
import { css, html, LitElement, nothing } from "lit";
|
||||
import { customElement, property, state } from "lit/decorators";
|
||||
import memoizeOne from "memoize-one";
|
||||
import { isComponentLoaded } from "../../../common/config/is_component_loaded";
|
||||
@@ -39,7 +39,6 @@ import {
|
||||
} from "../../../dialogs/quick-bar/show-dialog-quick-bar";
|
||||
import { showRestartDialog } from "../../../dialogs/restart/show-dialog-restart";
|
||||
import { showShortcutsDialog } from "../../../dialogs/shortcuts/show-shortcuts-dialog";
|
||||
import type { PageNavigation } from "../../../layouts/hass-tabs-subpage";
|
||||
import { SubscribeMixin } from "../../../mixins/subscribe-mixin";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
import type { HomeAssistant } from "../../../types";
|
||||
@@ -155,8 +154,6 @@ class HaConfigDashboard extends SubscribeMixin(LitElement) {
|
||||
|
||||
@property({ attribute: false }) public cloudStatus?: CloudStatus;
|
||||
|
||||
@property({ attribute: false }) public showAdvanced = false;
|
||||
|
||||
@state() private _tip?: string;
|
||||
|
||||
@state() private _repairsIssues: { issues: RepairsIssue[]; total: number } = {
|
||||
@@ -164,21 +161,24 @@ class HaConfigDashboard extends SubscribeMixin(LitElement) {
|
||||
total: 0,
|
||||
};
|
||||
|
||||
private _pages = memoizeOne((cloudStatus, isCloudLoaded) => {
|
||||
const pages: PageNavigation[] = [];
|
||||
if (isCloudLoaded) {
|
||||
pages.push({
|
||||
component: "cloud",
|
||||
path: "/config/cloud",
|
||||
name: "Home Assistant Cloud",
|
||||
info: cloudStatus,
|
||||
iconPath: mdiCloudLock,
|
||||
iconColor: "#3B808E",
|
||||
translationKey: "cloud",
|
||||
});
|
||||
}
|
||||
return [...pages, ...configSections.dashboard];
|
||||
});
|
||||
private _pages = memoizeOne((cloudStatus, isCloudLoaded) => [
|
||||
isCloudLoaded
|
||||
? [
|
||||
{
|
||||
component: "cloud",
|
||||
path: "/config/cloud",
|
||||
name: "Home Assistant Cloud",
|
||||
info: cloudStatus,
|
||||
iconPath: mdiCloudLock,
|
||||
iconColor: "#3B808E",
|
||||
translationKey: "cloud",
|
||||
},
|
||||
...configSections.dashboard,
|
||||
]
|
||||
: configSections.dashboard,
|
||||
configSections.dashboard_2,
|
||||
configSections.dashboard_3,
|
||||
]);
|
||||
|
||||
public hassSubscribe(): UnsubscribeFunc[] {
|
||||
return [
|
||||
@@ -308,18 +308,22 @@ class HaConfigDashboard extends SubscribeMixin(LitElement) {
|
||||
: ""}
|
||||
</ha-card>`
|
||||
: ""}
|
||||
|
||||
<ha-card outlined>
|
||||
<ha-config-navigation
|
||||
.hass=${this.hass}
|
||||
.narrow=${this.narrow}
|
||||
.showAdvanced=${this.showAdvanced}
|
||||
.pages=${this._pages(
|
||||
this.cloudStatus,
|
||||
isComponentLoaded(this.hass, "cloud")
|
||||
)}
|
||||
></ha-config-navigation>
|
||||
</ha-card>
|
||||
${this._pages(
|
||||
this.cloudStatus,
|
||||
isComponentLoaded(this.hass, "cloud")
|
||||
).map((categoryPages) =>
|
||||
categoryPages.length === 0
|
||||
? nothing
|
||||
: html`
|
||||
<ha-card outlined>
|
||||
<ha-config-navigation
|
||||
.hass=${this.hass}
|
||||
.narrow=${this.narrow}
|
||||
.pages=${categoryPages}
|
||||
></ha-config-navigation>
|
||||
</ha-card>
|
||||
`
|
||||
)}
|
||||
<ha-tip .hass=${this.hass}>${this._tip}</ha-tip>
|
||||
</ha-config-section>
|
||||
</ha-top-app-bar-fixed>
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
mdiAccount,
|
||||
mdiBackupRestore,
|
||||
mdiBadgeAccountHorizontal,
|
||||
mdiBluetooth,
|
||||
mdiCellphoneCog,
|
||||
mdiCog,
|
||||
mdiDatabase,
|
||||
@@ -25,10 +26,13 @@ import {
|
||||
mdiScrewdriver,
|
||||
mdiScriptText,
|
||||
mdiShape,
|
||||
mdiLan,
|
||||
mdiSofa,
|
||||
mdiTools,
|
||||
mdiUpdate,
|
||||
mdiViewDashboard,
|
||||
mdiZigbee,
|
||||
mdiZWave,
|
||||
} from "@mdi/js";
|
||||
import type { UnsubscribeFunc } from "home-assistant-js-websocket";
|
||||
import type { PropertyValues } from "lit";
|
||||
@@ -101,6 +105,62 @@ export const configSections: Record<string, PageNavigation[]> = {
|
||||
iconPath: mdiMicrophone,
|
||||
iconColor: "#3263C3",
|
||||
},
|
||||
],
|
||||
dashboard_2: [
|
||||
{
|
||||
path: "/config/zha",
|
||||
name: "Zigbee",
|
||||
iconPath: mdiZigbee,
|
||||
iconColor: "#E74011",
|
||||
component: "zha",
|
||||
translationKey: "zha",
|
||||
},
|
||||
{
|
||||
path: "/config/zwave_js",
|
||||
name: "Z-Wave",
|
||||
iconPath: mdiZWave,
|
||||
iconColor: "#153163",
|
||||
component: "zwave_js",
|
||||
translationKey: "zwave_js",
|
||||
},
|
||||
{
|
||||
path: "/knx",
|
||||
name: "KNX",
|
||||
iconPath: mdiLan,
|
||||
iconColor: "#4EAA66",
|
||||
component: "knx",
|
||||
translationKey: "knx",
|
||||
},
|
||||
{
|
||||
path: "/config/thread",
|
||||
name: "Thread",
|
||||
iconPath:
|
||||
"M82.498,0C37.008,0,0,37.008,0,82.496c0,45.181,36.51,81.977,81.573,82.476V82.569l-27.002-0.002 c-8.023,0-14.554,6.53-14.554,14.561c0,8.023,6.531,14.551,14.554,14.551v17.98c-17.939,0-32.534-14.595-32.534-32.531 c0-17.944,14.595-32.543,32.534-32.543l27.002,0.004v-9.096c0-14.932,12.146-27.08,27.075-27.08 c14.932,0,27.082,12.148,27.082,27.08c0,14.931-12.15,27.08-27.082,27.08l-9.097-0.001v80.641 C136.889,155.333,165,122.14,165,82.496C165,37.008,127.99,0,82.498,0z",
|
||||
iconSecondaryPath:
|
||||
"M117.748 55.493C117.748 50.477 113.666 46.395 108.648 46.395C103.633 46.395 99.551 50.477 99.551 55.493V64.59L108.648 64.591C113.666 64.591 117.748 60.51 117.748 55.493Z",
|
||||
iconViewBox: "0 0 165 165",
|
||||
iconColor: "#ED7744",
|
||||
component: "thread",
|
||||
translationKey: "thread",
|
||||
},
|
||||
{
|
||||
path: "/config/bluetooth",
|
||||
name: "Bluetooth",
|
||||
iconPath: mdiBluetooth,
|
||||
iconColor: "#0082FC",
|
||||
component: "bluetooth",
|
||||
translationKey: "bluetooth",
|
||||
},
|
||||
{
|
||||
path: "/insteon",
|
||||
name: "Insteon",
|
||||
iconPath:
|
||||
"M82.5108 43.8917H82.7152C107.824 43.8917 129.241 28.1166 137.629 5.95738L105.802 0L82.5108 43.8917ZM82.5108 43.8917H82.3065C57.1975 43.8917 35.7811 28.1352 27.3928 5.95738H27.3742L59.2015 0L82.5108 43.8917ZM43.8903 82.4951V82.2908C43.8903 57.1805 28.1158 35.7636 5.95718 27.3751L0 59.2037L43.8903 82.4951ZM43.8903 82.4951V82.6989C43.8903 107.809 28.1343 129.226 5.95718 137.615V137.633L0 105.805L43.8903 82.4951ZM165 59.2037L159.043 27.3751V27.3936C136.865 35.7822 121.11 57.1991 121.11 82.3094V82.5133V82.7176V82.7363C121.11 107.846 136.884 129.263 159.043 137.652L165 105.823L121.11 82.5133L165 59.2037ZM137.628 159.043L105.8 165L82.4912 121.108H82.695C107.804 121.108 129.221 136.865 137.609 159.043H137.628ZM82.4912 121.108L59.1818 165L27.3545 159.043C35.7428 136.884 57.1592 121.108 82.2682 121.108H82.2868H82.4912Z",
|
||||
iconViewBox: "0 0 165 165",
|
||||
iconColor: "#E4002C",
|
||||
component: "insteon",
|
||||
translationKey: "insteon",
|
||||
},
|
||||
{
|
||||
path: "/config/tags",
|
||||
translationKey: "tags",
|
||||
@@ -108,6 +168,8 @@ export const configSections: Record<string, PageNavigation[]> = {
|
||||
iconColor: "#616161",
|
||||
component: "tag",
|
||||
},
|
||||
],
|
||||
dashboard_3: [
|
||||
{
|
||||
path: "/config/person",
|
||||
translationKey: "people",
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { customElement, property } from "lit/decorators";
|
||||
import { navigate } from "../../../../../common/navigate";
|
||||
import type { RouterOptions } from "../../../../../layouts/hass-router-page";
|
||||
import { HassRouterPage } from "../../../../../layouts/hass-router-page";
|
||||
import type { HomeAssistant } from "../../../../../types";
|
||||
@@ -12,10 +11,6 @@ class ZHAConfigDashboardRouter extends HassRouterPage {
|
||||
|
||||
@property({ type: Boolean }) public narrow = false;
|
||||
|
||||
private _configEntry = new URLSearchParams(window.location.search).get(
|
||||
"config_entry"
|
||||
);
|
||||
|
||||
protected routerOptions: RouterOptions = {
|
||||
defaultPage: "dashboard",
|
||||
showLoading: true,
|
||||
@@ -52,7 +47,6 @@ class ZHAConfigDashboardRouter extends HassRouterPage {
|
||||
el.hass = this.hass;
|
||||
el.isWide = this.isWide;
|
||||
el.narrow = this.narrow;
|
||||
el.configEntryId = this._configEntry;
|
||||
if (this._currentPage === "group") {
|
||||
el.groupId = this.routeTail.path.substr(1);
|
||||
} else if (this._currentPage === "device") {
|
||||
@@ -60,17 +54,6 @@ class ZHAConfigDashboardRouter extends HassRouterPage {
|
||||
} else if (this._currentPage === "visualization") {
|
||||
el.zoomedDeviceIdFromURL = this.routeTail.path.substr(1);
|
||||
}
|
||||
|
||||
const searchParams = new URLSearchParams(window.location.search);
|
||||
if (this._configEntry && !searchParams.has("config_entry")) {
|
||||
searchParams.append("config_entry", this._configEntry);
|
||||
navigate(
|
||||
`${this.routeTail.prefix}${
|
||||
this.routeTail.path
|
||||
}?${searchParams.toString()}`,
|
||||
{ replace: true }
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ class ZHAConfigDashboard extends LitElement {
|
||||
|
||||
@property({ attribute: "is-wide", type: Boolean }) public isWide = false;
|
||||
|
||||
@property({ attribute: false }) public configEntryId?: string;
|
||||
@state() private _configEntry?: ConfigEntry;
|
||||
|
||||
@state() private _configuration?: ZHAConfiguration;
|
||||
|
||||
@@ -95,6 +95,7 @@ class ZHAConfigDashboard extends LitElement {
|
||||
super.firstUpdated(changedProperties);
|
||||
if (this.hass) {
|
||||
this.hass.loadBackendTranslation("config_panel", "zha", false);
|
||||
this._fetchConfigEntry();
|
||||
this._fetchConfiguration();
|
||||
this._fetchSettings();
|
||||
this._fetchDevicesAndUpdateStatus();
|
||||
@@ -110,7 +111,6 @@ class ZHAConfigDashboard extends LitElement {
|
||||
.narrow=${this.narrow}
|
||||
.route=${this.route}
|
||||
.tabs=${zhaTabs}
|
||||
back-path="/config/integrations"
|
||||
has-fab
|
||||
>
|
||||
<div class="container">
|
||||
@@ -151,28 +151,26 @@ class ZHAConfigDashboard extends LitElement {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
${this.configEntryId
|
||||
? html`<div class="card-actions">
|
||||
<ha-button
|
||||
href=${`/config/devices/dashboard?historyBack=1&config_entry=${this.configEntryId}`}
|
||||
appearance="plain"
|
||||
size="small"
|
||||
>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.devices.caption"
|
||||
)}</ha-button
|
||||
>
|
||||
<ha-button
|
||||
appearance="plain"
|
||||
size="small"
|
||||
href=${`/config/entities/dashboard?historyBack=1&config_entry=${this.configEntryId}`}
|
||||
>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.entities.caption"
|
||||
)}</ha-button
|
||||
>
|
||||
</div>`
|
||||
: ""}
|
||||
<div class="card-actions">
|
||||
<ha-button
|
||||
href=${`/config/devices/dashboard?historyBack=1&config_entry=${this._configEntry?.entry_id}`}
|
||||
appearance="plain"
|
||||
size="small"
|
||||
>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.devices.caption"
|
||||
)}</ha-button
|
||||
>
|
||||
<ha-button
|
||||
appearance="plain"
|
||||
size="small"
|
||||
href=${`/config/entities/dashboard?historyBack=1&config_entry=${this._configEntry?.entry_id}`}
|
||||
>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.entities.caption"
|
||||
)}</ha-button
|
||||
>
|
||||
</div>
|
||||
</ha-card>
|
||||
<ha-card
|
||||
class="network-settings"
|
||||
@@ -321,6 +319,15 @@ class ZHAConfigDashboard extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private async _fetchConfigEntry(): Promise<void> {
|
||||
const configEntries = await getConfigEntries(this.hass, {
|
||||
domain: "zha",
|
||||
});
|
||||
if (configEntries.length) {
|
||||
this._configEntry = configEntries[0];
|
||||
}
|
||||
}
|
||||
|
||||
private async _fetchConfiguration(): Promise<void> {
|
||||
this._configuration = await fetchZHAConfiguration(this.hass!);
|
||||
}
|
||||
@@ -399,20 +406,11 @@ class ZHAConfigDashboard extends LitElement {
|
||||
fileDownload(backupJSON, `${basename}.json`);
|
||||
}
|
||||
|
||||
private async _openOptionFlow() {
|
||||
if (!this.configEntryId) {
|
||||
private _openOptionFlow() {
|
||||
if (!this._configEntry) {
|
||||
return;
|
||||
}
|
||||
|
||||
const configEntries: ConfigEntry[] = await getConfigEntries(this.hass, {
|
||||
domain: "zha",
|
||||
});
|
||||
|
||||
const configEntry = configEntries.find(
|
||||
(entry) => entry.entry_id === this.configEntryId
|
||||
);
|
||||
|
||||
showOptionsFlowDialog(this, configEntry!);
|
||||
showOptionsFlowDialog(this, this._configEntry);
|
||||
}
|
||||
|
||||
private _dataChanged(ev) {
|
||||
|
||||
@@ -25,6 +25,8 @@ class HaPanelDevEvent extends LitElement {
|
||||
|
||||
@state() private _isValid = true;
|
||||
|
||||
@state() private _selectedEventType = "";
|
||||
|
||||
protected render(): TemplateResult {
|
||||
return html`
|
||||
<div
|
||||
@@ -89,7 +91,10 @@ class HaPanelDevEvent extends LitElement {
|
||||
</div>
|
||||
</ha-card>
|
||||
|
||||
<event-subscribe-card .hass=${this.hass}></event-subscribe-card>
|
||||
<event-subscribe-card
|
||||
.hass=${this.hass}
|
||||
.selectedEventType=${this._selectedEventType}
|
||||
></event-subscribe-card>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@@ -109,6 +114,7 @@ class HaPanelDevEvent extends LitElement {
|
||||
|
||||
private _eventSelected(ev) {
|
||||
this._eventType = ev.detail.eventType;
|
||||
this._selectedEventType = ev.detail.eventType;
|
||||
}
|
||||
|
||||
private _eventTypeChanged(ev) {
|
||||
|
||||
@@ -15,6 +15,8 @@ import type { HomeAssistant } from "../../../types";
|
||||
class EventSubscribeCard extends LitElement {
|
||||
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||
|
||||
@property({ attribute: false }) public selectedEventType = "";
|
||||
|
||||
@state() private _eventType = "";
|
||||
|
||||
@state() private _subscribed?: () => void;
|
||||
@@ -36,6 +38,18 @@ class EventSubscribeCard extends LitElement {
|
||||
}
|
||||
}
|
||||
|
||||
protected willUpdate(changedProperties: Map<string, any>) {
|
||||
super.willUpdate(changedProperties);
|
||||
|
||||
if (
|
||||
changedProperties.has("selectedEventType") &&
|
||||
this.selectedEventType &&
|
||||
!this._subscribed
|
||||
) {
|
||||
this._eventType = this.selectedEventType;
|
||||
}
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
return html`
|
||||
<ha-card
|
||||
|
||||
@@ -186,7 +186,7 @@ export class HuiEnergyDevicesGraphCard
|
||||
params.value[0] as number,
|
||||
this.hass.locale,
|
||||
params.value < 0.1 ? { maximumFractionDigits: 3 } : undefined
|
||||
)} kWh`;
|
||||
)} kWh ${params.percent ? `(${params.percent} %)` : ""}`;
|
||||
return `${title}${params.marker} ${params.seriesName}: <div style="direction:ltr; display: inline;">${value}</div>`;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,11 +28,16 @@ import type { HomeAssistant, ValueChangedEvent } from "../../../../types";
|
||||
import { DEFAULT_HOURS_TO_SHOW, DEFAULT_ZOOM } from "../../cards/hui-map-card";
|
||||
import type { MapCardConfig, MapEntityConfig } from "../../cards/types";
|
||||
import "../../components/hui-entity-editor";
|
||||
import type { EntityConfig } from "../../entity-rows/types";
|
||||
import "../hui-sub-element-editor";
|
||||
import type {
|
||||
EditDetailElementEvent,
|
||||
SubElementEditorConfig,
|
||||
EntitiesEditorEvent,
|
||||
} from "../types";
|
||||
import type { HASSDomEvent } from "../../../../common/dom/fire_event";
|
||||
import type { LovelaceCardEditor } from "../../types";
|
||||
import { processEditorEntities } from "../process-editor-entities";
|
||||
import { baseLovelaceCardConfig } from "../structs/base-card-struct";
|
||||
import type { EntitiesEditorEvent } from "../types";
|
||||
import { configElementStyle } from "./config-elements-style";
|
||||
|
||||
export const mapEntitiesConfigStruct = union([
|
||||
@@ -76,13 +81,20 @@ const cardConfigStruct = assign(
|
||||
|
||||
const themeModes = ["auto", "light", "dark"] as const;
|
||||
|
||||
const SUB_SCHEMA = [
|
||||
{ name: "entity", selector: { entity: {} }, required: true },
|
||||
{ name: "name", selector: { text: {} } },
|
||||
] as const;
|
||||
|
||||
@customElement("hui-map-card-editor")
|
||||
export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
|
||||
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||
|
||||
@state() private _config?: MapCardConfig;
|
||||
|
||||
@state() private _configEntities?: EntityConfig[];
|
||||
@state() private _subElementEditorConfig?: SubElementEditorConfig;
|
||||
|
||||
@state() private _configEntities?: MapEntityConfig[];
|
||||
|
||||
@state() private _possibleGeoSources?: { value: string; label?: string }[];
|
||||
|
||||
@@ -150,7 +162,7 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
|
||||
|
||||
this._config = config;
|
||||
this._configEntities = config.entities
|
||||
? processEditorEntities(config.entities)
|
||||
? (processEditorEntities(config.entities) as MapEntityConfig[])
|
||||
: [];
|
||||
}
|
||||
|
||||
@@ -167,6 +179,19 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
|
||||
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>
|
||||
`;
|
||||
}
|
||||
|
||||
return html`
|
||||
<ha-form
|
||||
.hass=${this.hass}
|
||||
@@ -180,7 +205,9 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
|
||||
.hass=${this.hass}
|
||||
.entities=${this._configEntities}
|
||||
.entityFilter=${hasLocation}
|
||||
can-edit
|
||||
@entities-changed=${this._entitiesValueChanged}
|
||||
@edit-detail-element=${this._editDetailElement}
|
||||
></hui-entity-editor>
|
||||
|
||||
<h3>
|
||||
@@ -203,6 +230,36 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
|
||||
`;
|
||||
}
|
||||
|
||||
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 MapEntityConfig;
|
||||
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 as any[]
|
||||
) as MapEntityConfig[];
|
||||
|
||||
fireEvent(this, "config-changed", { config });
|
||||
}
|
||||
|
||||
private _selectSchema = memoizeOne(
|
||||
(options, localize: LocalizeFunc): SelectSelector => ({
|
||||
select: {
|
||||
@@ -229,7 +286,9 @@ export class HuiMapCardEditor extends LitElement implements LovelaceCardEditor {
|
||||
if (ev.detail && ev.detail.entities) {
|
||||
this._config = { ...this._config!, entities: ev.detail.entities };
|
||||
|
||||
this._configEntities = processEditorEntities(this._config.entities || []);
|
||||
this._configEntities = processEditorEntities(
|
||||
this._config.entities || []
|
||||
) as MapEntityConfig[];
|
||||
fireEvent(this, "config-changed", { config: this._config! });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,7 +263,8 @@ class HUIRoot extends LitElement {
|
||||
{
|
||||
icon: mdiPlus,
|
||||
key: "ui.panel.lovelace.menu.add",
|
||||
visible: !this._editMode && this.hass.user?.is_admin,
|
||||
visible:
|
||||
!this._editMode && this.hass.user?.is_admin && !this.hass.kioskMode,
|
||||
overflow: this.narrow,
|
||||
subItems: [
|
||||
{
|
||||
@@ -301,7 +302,7 @@ class HUIRoot extends LitElement {
|
||||
key: "ui.panel.lovelace.menu.search_entities",
|
||||
buttonAction: this._showQuickBar,
|
||||
overflowAction: this._handleShowQuickBar,
|
||||
visible: !this._editMode,
|
||||
visible: !this._editMode && !this.hass.kioskMode,
|
||||
overflow: this.narrow,
|
||||
suffix:
|
||||
this.hass.enableShortcuts && !isMobileClient ? "(E)" : undefined,
|
||||
@@ -349,7 +350,8 @@ class HUIRoot extends LitElement {
|
||||
visible:
|
||||
!this._editMode &&
|
||||
this.hass!.user?.is_admin &&
|
||||
!this.hass!.config.recovery_mode,
|
||||
!this.hass!.config.recovery_mode &&
|
||||
!this.hass.kioskMode,
|
||||
overflow: true,
|
||||
overflow_can_promote: true,
|
||||
},
|
||||
|
||||
@@ -77,6 +77,7 @@ export const connectionMixin = <T extends Constructor<HassBaseEl>>(
|
||||
resources: null as any,
|
||||
localize: () => "",
|
||||
translationMetadata,
|
||||
kioskMode: false,
|
||||
dockedSidebar: "docked",
|
||||
vibrate: true,
|
||||
debugConnection: __DEV__,
|
||||
|
||||
@@ -11,10 +11,12 @@ declare global {
|
||||
// for fire event
|
||||
interface HASSDomEvents {
|
||||
"hass-dock-sidebar": DockSidebarParams;
|
||||
"hass-kiosk-mode": { enable: boolean };
|
||||
}
|
||||
// for add event listener
|
||||
interface HTMLElementEventMap {
|
||||
"hass-dock-sidebar": HASSDomEvent<DockSidebarParams>;
|
||||
"hass-kiosk-mode": HASSDomEvent<HASSDomEvents["hass-kiosk-mode"]>;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,5 +28,8 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
this._updateHass({ dockedSidebar: ev.detail.dock });
|
||||
storeState(this.hass!);
|
||||
});
|
||||
window.addEventListener("hass-kiosk-mode", (ev) => {
|
||||
this._updateHass({ kioskMode: ev.detail.enable });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2333,6 +2333,27 @@
|
||||
},
|
||||
"cloud": {
|
||||
"secondary": "Loading..."
|
||||
},
|
||||
"zwave_js": {
|
||||
"secondary": "Sub-GHz mesh protocol"
|
||||
},
|
||||
"zha": {
|
||||
"secondary": "Low-power mesh network"
|
||||
},
|
||||
"matter": {
|
||||
"secondary": "Cross-vendor smart home standard"
|
||||
},
|
||||
"thread": {
|
||||
"secondary": "Mesh network often used for Matter devices"
|
||||
},
|
||||
"bluetooth": {
|
||||
"secondary": "Local device connectivity"
|
||||
},
|
||||
"knx": {
|
||||
"secondary": "Building automation standard"
|
||||
},
|
||||
"insteon": {
|
||||
"secondary": "Dual-mesh home automation"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
|
||||
@@ -250,6 +250,7 @@ export interface HomeAssistant {
|
||||
enableShortcuts: boolean;
|
||||
vibrate: boolean;
|
||||
debugConnection: boolean;
|
||||
kioskMode: boolean;
|
||||
dockedSidebar: "docked" | "always_hidden" | "auto";
|
||||
moreInfoEntityId: string | null;
|
||||
user?: CurrentUser;
|
||||
|
||||
221
yarn.lock
221
yarn.lock
@@ -1670,6 +1670,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@exodus/bytes@npm:^1.6.0":
|
||||
version: 1.6.0
|
||||
resolution: "@exodus/bytes@npm:1.6.0"
|
||||
peerDependencies:
|
||||
"@exodus/crypto": ^1.0.0-rc.4
|
||||
peerDependenciesMeta:
|
||||
"@exodus/crypto":
|
||||
optional: true
|
||||
checksum: 10/4066bc5f2b7782fabdad4cac707031cbe7c3491bcd38f28e3b5144d687f858e834aaa9b0bcbe9685f1ccfaf4dc747172e82f28cf361e9623448ec80ab755b198
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@floating-ui/core@npm:^1.7.3":
|
||||
version: 1.7.3
|
||||
resolution: "@floating-ui/core@npm:1.7.3"
|
||||
@@ -1696,15 +1708,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/ecma402-abstract@npm:3.0.5":
|
||||
version: 3.0.5
|
||||
resolution: "@formatjs/ecma402-abstract@npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract@npm:3.0.6":
|
||||
version: 3.0.6
|
||||
resolution: "@formatjs/ecma402-abstract@npm:3.0.6"
|
||||
dependencies:
|
||||
"@formatjs/fast-memoize": "npm:3.0.1"
|
||||
"@formatjs/intl-localematcher": "npm:0.7.3"
|
||||
decimal.js: "npm:^10.4.3"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/e4024acc5b480e130542aff7a420058071aa1fe6a45a3aee049d6ed76b0b0afdfa8b259f9d124b9f210c9f6a3a3aafdae28a8eb285697fd31d5aabd173fe2c67
|
||||
checksum: 10/d1747a4a1f1b3b749727f226c94f9f698e1761a9c486fe9091ada3010886a85410a5230772bc19cd468fc8af55809e90d2cbb3e045460d3488ae5d9bc391e5a5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1717,100 +1729,100 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/icu-messageformat-parser@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@formatjs/icu-messageformat-parser@npm:3.1.1"
|
||||
"@formatjs/icu-messageformat-parser@npm:3.2.0":
|
||||
version: 3.2.0
|
||||
resolution: "@formatjs/icu-messageformat-parser@npm:3.2.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/icu-skeleton-parser": "npm:2.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/icu-skeleton-parser": "npm:2.0.6"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/95334b35144e0b0655531b5f5b87876df9d7ce03c52530007687236dfdb6850414494e49394f72273adb75be49994cfcacd455e9a8e352228103eb8610a0a20b
|
||||
checksum: 10/0b381dfa74b1a31490b18ec1325155d308d229c3dc1105496c4b0f7e501ea14ff3780a6e437fd47d2b57cd2591a8341823a83c95a4b1c92f0a12cedfafcceeb9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/icu-skeleton-parser@npm:2.0.5":
|
||||
version: 2.0.5
|
||||
resolution: "@formatjs/icu-skeleton-parser@npm:2.0.5"
|
||||
"@formatjs/icu-skeleton-parser@npm:2.0.6":
|
||||
version: 2.0.6
|
||||
resolution: "@formatjs/icu-skeleton-parser@npm:2.0.6"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/efdf7be708b9c49719ac110d4072f86360b0bc708547d994916dcf52e3c9581e01a8973ddc75fa3a426a3745f4ada001d8406e2e0cb29a5677f13a94687456e2
|
||||
checksum: 10/f1504406691eacfaab95eb88a4360f9dbddb991a919f8f9fe8d7cbf0cae85072c159b7198e159c5eaf8c4797d1e97f1c6a27300bd19f35241b5ee9aa089418af
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-datetimeformat@npm:7.0.6":
|
||||
version: 7.0.6
|
||||
resolution: "@formatjs/intl-datetimeformat@npm:7.0.6"
|
||||
"@formatjs/intl-datetimeformat@npm:7.1.0":
|
||||
version: 7.1.0
|
||||
resolution: "@formatjs/intl-datetimeformat@npm:7.1.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/intl-localematcher": "npm:0.7.3"
|
||||
decimal.js: "npm:^10.4.3"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/d22b17d45eccbc36bb043b44e6d67dd3af638c619009e501297dd7ae4abb115fb85284e99982198f61e15a3b3692db5fe6322bb166ffe2e55e64377cfaec2fc7
|
||||
checksum: 10/0230f22155dbfdc246bd668135134bc612808d88c46450b7f0a57959f7cb7945f5333051e95f101979411e5658380c511b8047642e7befde7a36efa32a6d5dfa
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-displaynames@npm:7.0.6":
|
||||
version: 7.0.6
|
||||
resolution: "@formatjs/intl-displaynames@npm:7.0.6"
|
||||
"@formatjs/intl-displaynames@npm:7.1.0":
|
||||
version: 7.1.0
|
||||
resolution: "@formatjs/intl-displaynames@npm:7.1.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/intl-localematcher": "npm:0.7.3"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/3a076c6a897e26f4df96404f9f56d43d5455b5158fe12347c7714d6f6310bb5a4001ae850bce5ce1c8249a2950ec895d8367bd2653d8e44fdc393e18ed15230e
|
||||
checksum: 10/6069ab76045c3ae765c888f636ddacf2617effc8826cc33589339b0e512629db66dd24c6f8bf2c3723fa5aa64a9d66b8e82acd0cb3327134e77abf400619c25a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-durationformat@npm:0.8.6":
|
||||
version: 0.8.6
|
||||
resolution: "@formatjs/intl-durationformat@npm:0.8.6"
|
||||
"@formatjs/intl-durationformat@npm:0.9.0":
|
||||
version: 0.9.0
|
||||
resolution: "@formatjs/intl-durationformat@npm:0.9.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/intl-localematcher": "npm:0.7.3"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/862985b520ce3300c615ec009dd5c547066f006807083fa8581a69e59974739308114278698a47703eb1a7e4f286437ab4f93e4e42ad1314021579d79de89497
|
||||
checksum: 10/f656e634d1b33fd9cf810c60187e34655c3c6cfd119dc1c6d00b9fdf46ab9edf550179effd49f5bee908ad7a20943cac463e426fa3bb557ee1a43f8301d12b55
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-enumerator@npm:2.0.5":
|
||||
version: 2.0.5
|
||||
resolution: "@formatjs/intl-enumerator@npm:2.0.5"
|
||||
"@formatjs/intl-enumerator@npm:2.1.0":
|
||||
version: 2.1.0
|
||||
resolution: "@formatjs/intl-enumerator@npm:2.1.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/7ded562362814b1bd5a100e4213d2405efff907bb647315464f9dc50e986a5ddd2fe8f96f2f7b50aff690c428d14b1a03fe0549ac0f0f60b4b42b3a3a5f04332
|
||||
checksum: 10/5a3392d14fd010d2aa400e08870d50a3099dc20e96fb827bb1e9391aec51319a5c6a06ea8ea516c164f1e3a552202b52cd67ec0b61af15eef64f7ca6bf4b965b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-getcanonicallocales@npm:3.0.4":
|
||||
version: 3.0.4
|
||||
resolution: "@formatjs/intl-getcanonicallocales@npm:3.0.4"
|
||||
"@formatjs/intl-getcanonicallocales@npm:3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "@formatjs/intl-getcanonicallocales@npm:3.1.0"
|
||||
dependencies:
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/e97f0b9439ace5aa3c519cd885978197dcb2490d765c85ce1124ed93c641754cb99686693667c790406a65dfcce509c67adcc677e6f5d5c8a248cbede0efdecd
|
||||
checksum: 10/4a99a8153b12b526a3115b614c8d7c0126c161d48dabb1a4938dd03c2aafb36db056a9ea5c2e160ee5449bce0a11b1e50a86bd5f548f93c73377c6b184b8bc4d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-listformat@npm:8.0.6":
|
||||
version: 8.0.6
|
||||
resolution: "@formatjs/intl-listformat@npm:8.0.6"
|
||||
"@formatjs/intl-listformat@npm:8.1.0":
|
||||
version: 8.1.0
|
||||
resolution: "@formatjs/intl-listformat@npm:8.1.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/intl-localematcher": "npm:0.7.3"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/87b4e81ae12cb9c0f4473b5691819c2619c64bd6166e16d9394289ed54089c2c46e2431b37c810e032c212767164b840293210be06d7928dba314fb7df506cd5
|
||||
checksum: 10/b63bf22c79cb7108a32da10737bd11f00e61ed6a37ec9f16656578d51ce8411005e95d5eaba243e90670259b2ab067a654e8f9c7739e07eff980eb7433618e94
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-locale@npm:5.0.6":
|
||||
version: 5.0.6
|
||||
resolution: "@formatjs/intl-locale@npm:5.0.6"
|
||||
"@formatjs/intl-locale@npm:5.1.0":
|
||||
version: 5.1.0
|
||||
resolution: "@formatjs/intl-locale@npm:5.1.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/intl-enumerator": "npm:2.0.5"
|
||||
"@formatjs/intl-getcanonicallocales": "npm:3.0.4"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/intl-enumerator": "npm:2.1.0"
|
||||
"@formatjs/intl-getcanonicallocales": "npm:3.1.0"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/35595e5a80362ae08759fde6246078ab8d2c1c388a1a01845f881647693a4ba176ef1c841f93a3c2945662bac27f1a63ef20df7808efd3eeb75815b7d7e951d3
|
||||
checksum: 10/833b2624d64801078704df577a94c7326d68bc77f838faec68c7db66313a525bf46604472263ef6554a10aa076148253c29ddc161e9dffc9773218b2b20e4673
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1824,38 +1836,38 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-numberformat@npm:9.0.7":
|
||||
version: 9.0.7
|
||||
resolution: "@formatjs/intl-numberformat@npm:9.0.7"
|
||||
"@formatjs/intl-numberformat@npm:9.1.0":
|
||||
version: 9.1.0
|
||||
resolution: "@formatjs/intl-numberformat@npm:9.1.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/intl-localematcher": "npm:0.7.3"
|
||||
decimal.js: "npm:^10.4.3"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/a95fb965a904f54c9289db4e6b35d437ea5fe953763f57b4f21539fedd7648c868d90bcb66d14143fd557fb0795524c091605eaa3afcddc9c9fdfd5996b9ed60
|
||||
checksum: 10/85e78885cc8d7324fd2cfe6aba50d88fb2eee9058692faa304aaa2fe742d304a7ed02b0f4b4503004335bfb0d1d0110e42f18341225fac59ba6416b8efd654c1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-pluralrules@npm:6.0.6":
|
||||
version: 6.0.6
|
||||
resolution: "@formatjs/intl-pluralrules@npm:6.0.6"
|
||||
"@formatjs/intl-pluralrules@npm:6.1.0":
|
||||
version: 6.1.0
|
||||
resolution: "@formatjs/intl-pluralrules@npm:6.1.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/intl-localematcher": "npm:0.7.3"
|
||||
decimal.js: "npm:^10.4.3"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/1eccba52d33aae3a9664c2ef99f0f463e31c4ff3c9382b6b1c9485b74a72aee847a975efb74d01271b4841b7eaad8b847b27863bb74d8e50c410ea0ef27fadb6
|
||||
checksum: 10/c6e66e1e1236d09518208805392b834a35708fe15e45269f9ab2af916c7c43da9e5046e55f908f3531b3ced9ad293b9ca8151d91e648d318f438d542077e3c6b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@formatjs/intl-relativetimeformat@npm:12.0.7":
|
||||
version: 12.0.7
|
||||
resolution: "@formatjs/intl-relativetimeformat@npm:12.0.7"
|
||||
"@formatjs/intl-relativetimeformat@npm:12.1.0":
|
||||
version: 12.1.0
|
||||
resolution: "@formatjs/intl-relativetimeformat@npm:12.1.0"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/intl-localematcher": "npm:0.7.3"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/d86fe41a767fe62ca59334a7dc99909e9edd61ac0a2d6f778e744820e9ed0a2108769f38f59161610cfbd1449833b2ea01568d5aecf342de005c66f364c0d4cf
|
||||
checksum: 10/0ef13a7544d01bf2aaffd91ab766f11c98516128ff6eaec718471599ab482a068b82be96c06770ac4b34ddddccc1f7631662eef9999744468c0cedec229b267e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4212,12 +4224,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/helpers@npm:0.5.17":
|
||||
version: 0.5.17
|
||||
resolution: "@swc/helpers@npm:0.5.17"
|
||||
"@swc/helpers@npm:0.5.18":
|
||||
version: 0.5.18
|
||||
resolution: "@swc/helpers@npm:0.5.18"
|
||||
dependencies:
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/1fc8312a78f1f99c8ec838585445e99763eeebff2356100738cdfdb8ad47d2d38df678ee6edd93a90fe319ac52da67adc14ac00eb82b606c5fb8ebc5d06ec2a2
|
||||
checksum: 10/03c7efa3e62d965fddd0baea98ee7a4c3ba7fa58187f07f26ec8d86740572f5ffd6f7517578a1d3201f64c85399be1538eba4dd30cef79d073060ecb101d753c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -9001,15 +9013,15 @@ __metadata:
|
||||
"@codemirror/view": "npm:6.39.7"
|
||||
"@date-fns/tz": "npm:1.4.1"
|
||||
"@egjs/hammerjs": "npm:2.0.17"
|
||||
"@formatjs/intl-datetimeformat": "npm:7.0.6"
|
||||
"@formatjs/intl-displaynames": "npm:7.0.6"
|
||||
"@formatjs/intl-durationformat": "npm:0.8.6"
|
||||
"@formatjs/intl-getcanonicallocales": "npm:3.0.4"
|
||||
"@formatjs/intl-listformat": "npm:8.0.6"
|
||||
"@formatjs/intl-locale": "npm:5.0.6"
|
||||
"@formatjs/intl-numberformat": "npm:9.0.7"
|
||||
"@formatjs/intl-pluralrules": "npm:6.0.6"
|
||||
"@formatjs/intl-relativetimeformat": "npm:12.0.7"
|
||||
"@formatjs/intl-datetimeformat": "npm:7.1.0"
|
||||
"@formatjs/intl-displaynames": "npm:7.1.0"
|
||||
"@formatjs/intl-durationformat": "npm:0.9.0"
|
||||
"@formatjs/intl-getcanonicallocales": "npm:3.1.0"
|
||||
"@formatjs/intl-listformat": "npm:8.1.0"
|
||||
"@formatjs/intl-locale": "npm:5.1.0"
|
||||
"@formatjs/intl-numberformat": "npm:9.1.0"
|
||||
"@formatjs/intl-pluralrules": "npm:6.1.0"
|
||||
"@formatjs/intl-relativetimeformat": "npm:12.1.0"
|
||||
"@fullcalendar/core": "npm:6.1.20"
|
||||
"@fullcalendar/daygrid": "npm:6.1.20"
|
||||
"@fullcalendar/interaction": "npm:6.1.20"
|
||||
@@ -9056,7 +9068,7 @@ __metadata:
|
||||
"@rsdoctor/rspack-plugin": "npm:1.4.0"
|
||||
"@rspack/core": "npm:1.6.8"
|
||||
"@rspack/dev-server": "npm:1.1.4"
|
||||
"@swc/helpers": "npm:0.5.17"
|
||||
"@swc/helpers": "npm:0.5.18"
|
||||
"@thomasloven/round-slider": "npm:0.6.0"
|
||||
"@tsparticles/engine": "npm:3.9.1"
|
||||
"@tsparticles/preset-links": "npm:3.2.0"
|
||||
@@ -9124,9 +9136,9 @@ __metadata:
|
||||
html-minifier-terser: "npm:7.2.0"
|
||||
husky: "npm:9.1.7"
|
||||
idb-keyval: "npm:6.2.2"
|
||||
intl-messageformat: "npm:11.0.6"
|
||||
intl-messageformat: "npm:11.0.7"
|
||||
js-yaml: "npm:4.1.1"
|
||||
jsdom: "npm:27.3.0"
|
||||
jsdom: "npm:27.4.0"
|
||||
jszip: "npm:3.10.1"
|
||||
leaflet: "npm:1.9.4"
|
||||
leaflet-draw: "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch"
|
||||
@@ -9209,12 +9221,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"html-encoding-sniffer@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "html-encoding-sniffer@npm:4.0.0"
|
||||
"html-encoding-sniffer@npm:^6.0.0":
|
||||
version: 6.0.0
|
||||
resolution: "html-encoding-sniffer@npm:6.0.0"
|
||||
dependencies:
|
||||
whatwg-encoding: "npm:^3.1.1"
|
||||
checksum: 10/e86efd493293a5671b8239bd099d42128433bb3c7b0fdc7819282ef8e118a21f5dead0ad6f358e024a4e5c84f17ebb7a9b36075220fac0a6222b207248bede6f
|
||||
"@exodus/bytes": "npm:^1.6.0"
|
||||
checksum: 10/97392e45d8aff57f180f62a1b12e62201c8451af68424b8bc3196f78e273891f2df285e5be43a3f28c7ba4badf9524ef305db65c4e4935a9e796afc86d9654b8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -9389,7 +9401,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3":
|
||||
"iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3":
|
||||
version: 0.6.3
|
||||
resolution: "iconv-lite@npm:0.6.3"
|
||||
dependencies:
|
||||
@@ -9531,15 +9543,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"intl-messageformat@npm:11.0.6":
|
||||
version: 11.0.6
|
||||
resolution: "intl-messageformat@npm:11.0.6"
|
||||
"intl-messageformat@npm:11.0.7":
|
||||
version: 11.0.7
|
||||
resolution: "intl-messageformat@npm:11.0.7"
|
||||
dependencies:
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.5"
|
||||
"@formatjs/ecma402-abstract": "npm:3.0.6"
|
||||
"@formatjs/fast-memoize": "npm:3.0.1"
|
||||
"@formatjs/icu-messageformat-parser": "npm:3.1.1"
|
||||
"@formatjs/icu-messageformat-parser": "npm:3.2.0"
|
||||
tslib: "npm:^2.8.0"
|
||||
checksum: 10/cccbd0bb4143f0691e1583d453e1952b5015228ce51bffaa621d44fc4963a7bca362a6711078061283a3eead8e7f24a076834b4a4de6b0fe5d601f6403073261
|
||||
checksum: 10/e0f7c93db02a24aaa66c56cea8838abbbc20aa0dc08a0db784d9f575c6440a7b05bf40294678d4216b0d6dad1264b037096308d1a06f11e2052b4455d6cb8ea5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -10185,16 +10197,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsdom@npm:27.3.0":
|
||||
version: 27.3.0
|
||||
resolution: "jsdom@npm:27.3.0"
|
||||
"jsdom@npm:27.4.0":
|
||||
version: 27.4.0
|
||||
resolution: "jsdom@npm:27.4.0"
|
||||
dependencies:
|
||||
"@acemir/cssom": "npm:^0.9.28"
|
||||
"@asamuzakjp/dom-selector": "npm:^6.7.6"
|
||||
"@exodus/bytes": "npm:^1.6.0"
|
||||
cssstyle: "npm:^5.3.4"
|
||||
data-urls: "npm:^6.0.0"
|
||||
decimal.js: "npm:^10.6.0"
|
||||
html-encoding-sniffer: "npm:^4.0.0"
|
||||
html-encoding-sniffer: "npm:^6.0.0"
|
||||
http-proxy-agent: "npm:^7.0.2"
|
||||
https-proxy-agent: "npm:^7.0.6"
|
||||
is-potential-custom-element-name: "npm:^1.0.1"
|
||||
@@ -10204,7 +10217,6 @@ __metadata:
|
||||
tough-cookie: "npm:^6.0.0"
|
||||
w3c-xmlserializer: "npm:^5.0.0"
|
||||
webidl-conversions: "npm:^8.0.0"
|
||||
whatwg-encoding: "npm:^3.1.1"
|
||||
whatwg-mimetype: "npm:^4.0.0"
|
||||
whatwg-url: "npm:^15.1.0"
|
||||
ws: "npm:^8.18.3"
|
||||
@@ -10214,7 +10226,7 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
canvas:
|
||||
optional: true
|
||||
checksum: 10/c650e954df04a80e7309984450ce764ae2a840810b9575b20204194dee3c5cff42e65526519cb58b946ffe66a058b7b763bad4814b3903a9c86a2c1651b8b74b
|
||||
checksum: 10/7c6db85ab91183b95204648e086cfc09ecee36d9e8fee0bb5d68e27543eca632de0af6d43de461176a7823820543d5c53561778af5f712b1a1cd28bfac084d51
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -14801,15 +14813,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-encoding@npm:^3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "whatwg-encoding@npm:3.1.1"
|
||||
dependencies:
|
||||
iconv-lite: "npm:0.6.3"
|
||||
checksum: 10/bbef815eb67f91487c7f2ef96329743f5fd8357d7d62b1119237d25d41c7e452dff8197235b2d3c031365a17f61d3bb73ca49d0ed1582475aa4a670815e79534
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-fetch@npm:^3.4.1":
|
||||
version: 3.6.20
|
||||
resolution: "whatwg-fetch@npm:3.6.20"
|
||||
|
||||
Reference in New Issue
Block a user