mirror of
https://github.com/home-assistant/frontend.git
synced 2025-12-06 08:07:23 +00:00
Compare commits
15 Commits
copilot/mi
...
view-trans
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e0209e45c1 | ||
|
|
4a2127b489 | ||
|
|
ef82bc2abb | ||
|
|
92e3864f63 | ||
|
|
a4af975bb3 | ||
|
|
025ffd7b56 | ||
|
|
3ea4a28931 | ||
|
|
3b092b834e | ||
|
|
ed8ccbe12c | ||
|
|
420f88f73a | ||
|
|
086aa5fa28 | ||
|
|
cca4cc512b | ||
|
|
8eb65f327a | ||
|
|
f3495feacb | ||
|
|
2161bcfa3f |
@@ -157,8 +157,8 @@
|
||||
"@octokit/auth-oauth-device": "8.0.3",
|
||||
"@octokit/plugin-retry": "8.0.3",
|
||||
"@octokit/rest": "22.0.1",
|
||||
"@rsdoctor/rspack-plugin": "1.3.11",
|
||||
"@rspack/core": "1.6.5",
|
||||
"@rsdoctor/rspack-plugin": "1.3.12",
|
||||
"@rspack/core": "1.6.6",
|
||||
"@rspack/dev-server": "1.1.4",
|
||||
"@types/babel__plugin-transform-runtime": "7.9.5",
|
||||
"@types/chromecast-caf-receiver": "6.0.22",
|
||||
@@ -217,7 +217,7 @@
|
||||
"terser-webpack-plugin": "5.3.14",
|
||||
"ts-lit-plugin": "2.0.2",
|
||||
"typescript": "5.9.3",
|
||||
"typescript-eslint": "8.48.0",
|
||||
"typescript-eslint": "8.48.1",
|
||||
"vite-tsconfig-paths": "5.1.4",
|
||||
"vitest": "4.0.14",
|
||||
"webpack-stats-plugin": "1.1.3",
|
||||
|
||||
@@ -2,17 +2,15 @@ import type { TemplateResult } from "lit";
|
||||
import { css, html, LitElement, nothing } from "lit";
|
||||
import { customElement, property } from "lit/decorators";
|
||||
import { repeat } from "lit/directives/repeat";
|
||||
import type { LabelRegistryEntry } from "../../data/label_registry";
|
||||
import { computeCssColor } from "../../common/color/compute-color";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import { stopPropagation } from "../../common/dom/stop_propagation";
|
||||
import { stringCompare } from "../../common/string/compare";
|
||||
import type { LabelRegistryEntry } from "../../data/label_registry";
|
||||
import "../chips/ha-chip-set";
|
||||
import "../ha-dropdown";
|
||||
import "../ha-dropdown-item";
|
||||
import type { HaDropdownItem } from "../ha-dropdown-item";
|
||||
import "../ha-icon";
|
||||
import "../ha-label";
|
||||
import { stringCompare } from "../../common/string/compare";
|
||||
import "../chips/ha-chip-set";
|
||||
import "../ha-button-menu";
|
||||
import "../ha-icon";
|
||||
import "../ha-list-item";
|
||||
|
||||
@customElement("ha-data-table-labels")
|
||||
class HaDataTableLabels extends LitElement {
|
||||
@@ -28,11 +26,12 @@ class HaDataTableLabels extends LitElement {
|
||||
(label) => this._renderLabel(label, true)
|
||||
)}
|
||||
${labels.length > 2
|
||||
? html`<ha-dropdown
|
||||
? html`<ha-button-menu
|
||||
absolute
|
||||
role="button"
|
||||
tabindex="0"
|
||||
@click=${stopPropagation}
|
||||
@wa-select=${this._handleDropdownSelect}
|
||||
@click=${this._handleIconOverflowMenuOpened}
|
||||
@closed=${this._handleIconOverflowMenuClosed}
|
||||
>
|
||||
<ha-label slot="trigger" class="plus" dense>
|
||||
+${labels.length - 2}
|
||||
@@ -41,12 +40,12 @@ class HaDataTableLabels extends LitElement {
|
||||
labels.slice(2),
|
||||
(label) => label.label_id,
|
||||
(label) => html`
|
||||
<ha-dropdown-item .value=${label.label_id} .item=${label}>
|
||||
<ha-list-item @click=${this._labelClicked} .item=${label}>
|
||||
${this._renderLabel(label, false)}
|
||||
</ha-dropdown-item>
|
||||
</ha-list-item>
|
||||
`
|
||||
)}
|
||||
</ha-dropdown>`
|
||||
</ha-button-menu>`
|
||||
: nothing}
|
||||
</ha-chip-set>
|
||||
`;
|
||||
@@ -82,12 +81,21 @@ class HaDataTableLabels extends LitElement {
|
||||
fireEvent(this, "label-clicked", { label });
|
||||
}
|
||||
|
||||
private _handleDropdownSelect(
|
||||
ev: CustomEvent<{ item: HaDropdownItem & { item?: LabelRegistryEntry } }>
|
||||
) {
|
||||
const label = ev.detail?.item?.item;
|
||||
if (label) {
|
||||
fireEvent(this, "label-clicked", { label });
|
||||
protected _handleIconOverflowMenuOpened(e) {
|
||||
e.stopPropagation();
|
||||
// If this component is used inside a data table, the z-index of the row
|
||||
// needs to be increased. Otherwise the ha-button-menu would be displayed
|
||||
// underneath the next row in the table.
|
||||
const row = this.closest(".mdc-data-table__row") as HTMLDivElement | null;
|
||||
if (row) {
|
||||
row.style.zIndex = "1";
|
||||
}
|
||||
}
|
||||
|
||||
protected _handleIconOverflowMenuClosed() {
|
||||
const row = this.closest(".mdc-data-table__row") as HTMLDivElement | null;
|
||||
if (row) {
|
||||
row.style.zIndex = "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,6 +114,9 @@ class HaDataTableLabels extends LitElement {
|
||||
--ha-label-background-color: var(--color, var(--grey-color));
|
||||
--ha-label-background-opacity: 0.5;
|
||||
}
|
||||
ha-button-menu {
|
||||
border-radius: 10px;
|
||||
}
|
||||
.plus {
|
||||
--ha-label-background-color: transparent;
|
||||
border: 1px solid var(--divider-color);
|
||||
|
||||
@@ -99,10 +99,7 @@ class HaMarkdownElement extends ReactiveElement {
|
||||
}
|
||||
);
|
||||
|
||||
render(
|
||||
elements.map((e) => h(unsafeHTML(e))),
|
||||
this.renderRoot
|
||||
);
|
||||
render(h(unsafeHTML(elements.join(""))), this.renderRoot);
|
||||
|
||||
this._resize();
|
||||
|
||||
|
||||
@@ -25,11 +25,11 @@ export class HaMarkdown extends LitElement {
|
||||
|
||||
@property({ type: Boolean }) public cache = false;
|
||||
|
||||
@query("ha-markdown-element") private _markdownElement!: ReactiveElement;
|
||||
@query("ha-markdown-element") private _markdownElement?: ReactiveElement;
|
||||
|
||||
protected async getUpdateComplete() {
|
||||
const result = await super.getUpdateComplete();
|
||||
await this._markdownElement.updateComplete;
|
||||
await this._markdownElement?.updateComplete;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,13 +9,13 @@ import { customElement, property, query, state } from "lit/decorators";
|
||||
import { prepareZXingModule } from "barcode-detector";
|
||||
import type QrScanner from "qr-scanner";
|
||||
import { fireEvent } from "../common/dom/fire_event";
|
||||
import { stopPropagation } from "../common/dom/stop_propagation";
|
||||
import { addExternalBarCodeListener } from "../external_app/external_app_entrypoint";
|
||||
import type { HomeAssistant } from "../types";
|
||||
import "./ha-alert";
|
||||
import "./ha-button";
|
||||
import "./ha-dropdown";
|
||||
import "./ha-dropdown-item";
|
||||
import type { HaDropdownItem } from "./ha-dropdown-item";
|
||||
import "./ha-button-menu";
|
||||
import "./ha-list-item";
|
||||
import "./ha-spinner";
|
||||
import "./ha-textfield";
|
||||
import type { HaTextField } from "./ha-textfield";
|
||||
@@ -52,8 +52,6 @@ class HaQrScanner extends LitElement {
|
||||
|
||||
@state() private _warning?: string;
|
||||
|
||||
@state() private _selectedCamera?: string;
|
||||
|
||||
private _qrScanner?: QrScanner;
|
||||
|
||||
private _qrNotFoundCount = 0;
|
||||
@@ -123,7 +121,7 @@ class HaQrScanner extends LitElement {
|
||||
!this._error &&
|
||||
this._cameras &&
|
||||
this._cameras.length > 1
|
||||
? html`<ha-dropdown @wa-select=${this._handleDropdownSelect}>
|
||||
? html`<ha-button-menu fixed @closed=${stopPropagation}>
|
||||
<ha-icon-button
|
||||
slot="trigger"
|
||||
.label=${this.hass.localize(
|
||||
@@ -133,17 +131,15 @@ class HaQrScanner extends LitElement {
|
||||
></ha-icon-button>
|
||||
${this._cameras!.map(
|
||||
(camera) => html`
|
||||
<ha-dropdown-item
|
||||
<ha-list-item
|
||||
.value=${camera.id}
|
||||
class=${this._selectedCamera === camera.id
|
||||
? "selected"
|
||||
: ""}
|
||||
@click=${this._cameraChanged}
|
||||
>
|
||||
${camera.label}
|
||||
</ha-dropdown-item>
|
||||
</ha-list-item>
|
||||
`
|
||||
)}
|
||||
</ha-dropdown>`
|
||||
</ha-button-menu>`
|
||||
: nothing}
|
||||
</div>`
|
||||
: html`<ha-alert alert-type="warning">
|
||||
@@ -209,9 +205,6 @@ class HaQrScanner extends LitElement {
|
||||
|
||||
private async _listCameras(qrScanner: typeof QrScanner): Promise<void> {
|
||||
this._cameras = await qrScanner.listCameras(true);
|
||||
if (this._cameras.length > 0) {
|
||||
this._selectedCamera = this._cameras[0].id;
|
||||
}
|
||||
}
|
||||
|
||||
private _qrCodeError = (err: any) => {
|
||||
@@ -259,12 +252,8 @@ class HaQrScanner extends LitElement {
|
||||
this._qrCodeScanned(this._manualInput!.value);
|
||||
}
|
||||
|
||||
private _handleDropdownSelect(ev: CustomEvent<{ item: HaDropdownItem }>) {
|
||||
const cameraId = ev.detail?.item?.value;
|
||||
if (cameraId) {
|
||||
this._selectedCamera = cameraId;
|
||||
this._qrScanner?.setCamera(cameraId);
|
||||
}
|
||||
private _cameraChanged(ev: CustomEvent): void {
|
||||
this._qrScanner?.setCamera((ev.target as any).value);
|
||||
}
|
||||
|
||||
private _openExternalScanner() {
|
||||
@@ -370,7 +359,7 @@ class HaQrScanner extends LitElement {
|
||||
#canvas-container {
|
||||
position: relative;
|
||||
}
|
||||
ha-icon-button {
|
||||
ha-button-menu {
|
||||
position: absolute;
|
||||
bottom: 8px;
|
||||
right: 8px;
|
||||
@@ -380,9 +369,6 @@ class HaQrScanner extends LitElement {
|
||||
color: white;
|
||||
border-radius: var(--ha-border-radius-circle);
|
||||
}
|
||||
ha-dropdown-item.selected {
|
||||
font-weight: var(--ha-font-weight-bold);
|
||||
}
|
||||
.row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
} from "lit/decorators";
|
||||
import { ifDefined } from "lit/directives/if-defined";
|
||||
import { fireEvent } from "../common/dom/fire_event";
|
||||
import { ScrollableFadeMixin } from "../mixins/scrollable-fade-mixin";
|
||||
import { haStyleScrollbar } from "../resources/styles";
|
||||
import type { HomeAssistant } from "../types";
|
||||
import "./ha-dialog-header";
|
||||
@@ -72,7 +73,7 @@ export type DialogWidth = "small" | "medium" | "large" | "full";
|
||||
* @see https://github.com/home-assistant/frontend/issues/27143
|
||||
*/
|
||||
@customElement("ha-wa-dialog")
|
||||
export class HaWaDialog extends LitElement {
|
||||
export class HaWaDialog extends ScrollableFadeMixin(LitElement) {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
||||
@property({ attribute: "aria-labelledby" })
|
||||
@@ -113,6 +114,10 @@ export class HaWaDialog extends LitElement {
|
||||
@state()
|
||||
private _bodyScrolled = false;
|
||||
|
||||
protected get scrollableElement(): HTMLElement | null {
|
||||
return this.bodyContainer;
|
||||
}
|
||||
|
||||
protected updated(
|
||||
changedProperties: Map<string | number | symbol, unknown>
|
||||
): void {
|
||||
@@ -161,8 +166,11 @@ export class HaWaDialog extends LitElement {
|
||||
<slot name="headerActionItems" slot="actionItems"></slot>
|
||||
</ha-dialog-header>
|
||||
</slot>
|
||||
<div class="body ha-scrollbar" @scroll=${this._handleBodyScroll}>
|
||||
<slot></slot>
|
||||
<div class="content-wrapper">
|
||||
<div class="body ha-scrollbar" @scroll=${this._handleBodyScroll}>
|
||||
<slot></slot>
|
||||
</div>
|
||||
${this.renderScrollableFades()}
|
||||
</div>
|
||||
<slot name="footer" slot="footer"></slot>
|
||||
</wa-dialog>
|
||||
@@ -199,165 +207,179 @@ export class HaWaDialog extends LitElement {
|
||||
this._bodyScrolled = (ev.target as HTMLDivElement).scrollTop > 0;
|
||||
}
|
||||
|
||||
static styles = [
|
||||
haStyleScrollbar,
|
||||
css`
|
||||
wa-dialog {
|
||||
--full-width: var(--ha-dialog-width-full, min(95vw, var(--safe-width)));
|
||||
--width: min(var(--ha-dialog-width-md, 580px), var(--full-width));
|
||||
--spacing: var(--dialog-content-padding, var(--ha-space-6));
|
||||
--show-duration: var(--ha-dialog-show-duration, 200ms);
|
||||
--hide-duration: var(--ha-dialog-hide-duration, 200ms);
|
||||
--ha-dialog-surface-background: var(
|
||||
--card-background-color,
|
||||
var(--ha-color-surface-default)
|
||||
);
|
||||
--wa-color-surface-raised: var(
|
||||
--ha-dialog-surface-background,
|
||||
var(--card-background-color, var(--ha-color-surface-default))
|
||||
);
|
||||
--wa-panel-border-radius: var(
|
||||
--ha-dialog-border-radius,
|
||||
var(--ha-border-radius-3xl)
|
||||
);
|
||||
max-width: var(--ha-dialog-max-width, var(--safe-width));
|
||||
}
|
||||
static get styles() {
|
||||
return [
|
||||
...super.styles,
|
||||
haStyleScrollbar,
|
||||
css`
|
||||
wa-dialog {
|
||||
--full-width: var(
|
||||
--ha-dialog-width-full,
|
||||
min(95vw, var(--safe-width))
|
||||
);
|
||||
--width: min(var(--ha-dialog-width-md, 580px), var(--full-width));
|
||||
--spacing: var(--dialog-content-padding, var(--ha-space-6));
|
||||
--show-duration: var(--ha-dialog-show-duration, 200ms);
|
||||
--hide-duration: var(--ha-dialog-hide-duration, 200ms);
|
||||
--ha-dialog-surface-background: var(
|
||||
--card-background-color,
|
||||
var(--ha-color-surface-default)
|
||||
);
|
||||
--wa-color-surface-raised: var(
|
||||
--ha-dialog-surface-background,
|
||||
var(--card-background-color, var(--ha-color-surface-default))
|
||||
);
|
||||
--wa-panel-border-radius: var(
|
||||
--ha-dialog-border-radius,
|
||||
var(--ha-border-radius-3xl)
|
||||
);
|
||||
max-width: var(--ha-dialog-max-width, var(--safe-width));
|
||||
}
|
||||
|
||||
:host([width="small"]) wa-dialog {
|
||||
--width: min(var(--ha-dialog-width-sm, 320px), var(--full-width));
|
||||
}
|
||||
:host([width="small"]) wa-dialog {
|
||||
--width: min(var(--ha-dialog-width-sm, 320px), var(--full-width));
|
||||
}
|
||||
|
||||
:host([width="large"]) wa-dialog {
|
||||
--width: min(var(--ha-dialog-width-lg, 1024px), var(--full-width));
|
||||
}
|
||||
:host([width="large"]) wa-dialog {
|
||||
--width: min(var(--ha-dialog-width-lg, 1024px), var(--full-width));
|
||||
}
|
||||
|
||||
:host([width="full"]) wa-dialog {
|
||||
--width: var(--full-width);
|
||||
}
|
||||
:host([width="full"]) wa-dialog {
|
||||
--width: var(--full-width);
|
||||
}
|
||||
|
||||
wa-dialog::part(dialog) {
|
||||
min-width: var(--width, var(--full-width));
|
||||
max-width: var(--width, var(--full-width));
|
||||
max-height: var(
|
||||
--ha-dialog-max-height,
|
||||
calc(var(--safe-height) - var(--ha-space-20))
|
||||
);
|
||||
min-height: var(--ha-dialog-min-height);
|
||||
margin-top: var(--dialog-surface-margin-top, auto);
|
||||
/* Used to offset the dialog from the safe areas when space is limited */
|
||||
transform: translate(
|
||||
calc(
|
||||
var(--safe-area-offset-left, var(--ha-space-0)) - var(
|
||||
--safe-area-offset-right,
|
||||
var(--ha-space-0)
|
||||
)
|
||||
),
|
||||
calc(
|
||||
var(--safe-area-offset-top, var(--ha-space-0)) - var(
|
||||
--safe-area-offset-bottom,
|
||||
var(--ha-space-0)
|
||||
)
|
||||
)
|
||||
);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
wa-dialog::part(dialog) {
|
||||
min-width: var(--width, var(--full-width));
|
||||
max-width: var(--width, var(--full-width));
|
||||
max-height: var(
|
||||
--ha-dialog-max-height,
|
||||
calc(var(--safe-height) - var(--ha-space-20))
|
||||
);
|
||||
min-height: var(--ha-dialog-min-height);
|
||||
margin-top: var(--dialog-surface-margin-top, auto);
|
||||
/* Used to offset the dialog from the safe areas when space is limited */
|
||||
transform: translate(
|
||||
calc(
|
||||
var(--safe-area-offset-left, var(--ha-space-0)) - var(
|
||||
--safe-area-offset-right,
|
||||
var(--ha-space-0)
|
||||
)
|
||||
),
|
||||
calc(
|
||||
var(--safe-area-offset-top, var(--ha-space-0)) - var(
|
||||
--safe-area-offset-bottom,
|
||||
var(--ha-space-0)
|
||||
)
|
||||
)
|
||||
);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media all and (max-width: 450px), all and (max-height: 500px) {
|
||||
:host([type="standard"]) {
|
||||
--ha-dialog-border-radius: var(--ha-space-0);
|
||||
@media all and (max-width: 450px), all and (max-height: 500px) {
|
||||
:host([type="standard"]) {
|
||||
--ha-dialog-border-radius: var(--ha-space-0);
|
||||
|
||||
wa-dialog {
|
||||
/* Make the container fill the whole screen width and not the safe width */
|
||||
--full-width: var(--ha-dialog-width-full, 100vw);
|
||||
--width: var(--full-width);
|
||||
}
|
||||
wa-dialog {
|
||||
/* Make the container fill the whole screen width and not the safe width */
|
||||
--full-width: var(--ha-dialog-width-full, 100vw);
|
||||
--width: var(--full-width);
|
||||
}
|
||||
|
||||
wa-dialog::part(dialog) {
|
||||
/* Make the dialog fill the whole screen height and not the safe height */
|
||||
min-height: var(--ha-dialog-min-height, 100vh);
|
||||
min-height: var(--ha-dialog-min-height, 100dvh);
|
||||
max-height: var(--ha-dialog-max-height, 100vh);
|
||||
max-height: var(--ha-dialog-max-height, 100dvh);
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
/* Use safe area as padding instead of the container size */
|
||||
padding-top: var(--safe-area-inset-top);
|
||||
padding-bottom: var(--safe-area-inset-bottom);
|
||||
padding-left: var(--safe-area-inset-left);
|
||||
padding-right: var(--safe-area-inset-right);
|
||||
/* Reset the transform to center the dialog */
|
||||
transform: none;
|
||||
wa-dialog::part(dialog) {
|
||||
/* Make the dialog fill the whole screen height and not the safe height */
|
||||
min-height: var(--ha-dialog-min-height, 100vh);
|
||||
min-height: var(--ha-dialog-min-height, 100dvh);
|
||||
max-height: var(--ha-dialog-max-height, 100vh);
|
||||
max-height: var(--ha-dialog-max-height, 100dvh);
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
/* Use safe area as padding instead of the container size */
|
||||
padding-top: var(--safe-area-inset-top);
|
||||
padding-bottom: var(--safe-area-inset-bottom);
|
||||
padding-left: var(--safe-area-inset-left);
|
||||
padding-right: var(--safe-area-inset-right);
|
||||
/* Reset the transform to center the dialog */
|
||||
transform: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header-title-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.header-title-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.header-title {
|
||||
margin: 0;
|
||||
margin-bottom: 0;
|
||||
color: var(--ha-dialog-header-title-color, var(--primary-text-color));
|
||||
font-size: var(
|
||||
--ha-dialog-header-title-font-size,
|
||||
var(--ha-font-size-2xl)
|
||||
);
|
||||
line-height: var(
|
||||
--ha-dialog-header-title-line-height,
|
||||
var(--ha-line-height-condensed)
|
||||
);
|
||||
font-weight: var(
|
||||
--ha-dialog-header-title-font-weight,
|
||||
var(--ha-font-weight-normal)
|
||||
);
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
margin-right: var(--ha-space-3);
|
||||
}
|
||||
.header-title {
|
||||
margin: 0;
|
||||
margin-bottom: 0;
|
||||
color: var(--ha-dialog-header-title-color, var(--primary-text-color));
|
||||
font-size: var(
|
||||
--ha-dialog-header-title-font-size,
|
||||
var(--ha-font-size-2xl)
|
||||
);
|
||||
line-height: var(
|
||||
--ha-dialog-header-title-line-height,
|
||||
var(--ha-line-height-condensed)
|
||||
);
|
||||
font-weight: var(
|
||||
--ha-dialog-header-title-font-weight,
|
||||
var(--ha-font-weight-normal)
|
||||
);
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
margin-right: var(--ha-space-3);
|
||||
}
|
||||
|
||||
wa-dialog::part(body) {
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
wa-dialog::part(body) {
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.body {
|
||||
position: var(--dialog-content-position, relative);
|
||||
padding: 0 var(--dialog-content-padding, var(--ha-space-6))
|
||||
var(--dialog-content-padding, var(--ha-space-6))
|
||||
var(--dialog-content-padding, var(--ha-space-6));
|
||||
overflow: auto;
|
||||
flex-grow: 1;
|
||||
}
|
||||
:host([flexcontent]) .body {
|
||||
max-width: 100%;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.content-wrapper {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
wa-dialog::part(footer) {
|
||||
padding: var(--ha-space-0);
|
||||
}
|
||||
.body {
|
||||
position: var(--dialog-content-position, relative);
|
||||
padding: 0 var(--dialog-content-padding, var(--ha-space-6))
|
||||
var(--dialog-content-padding, var(--ha-space-6))
|
||||
var(--dialog-content-padding, var(--ha-space-6));
|
||||
overflow: auto;
|
||||
flex-grow: 1;
|
||||
}
|
||||
:host([flexcontent]) .body {
|
||||
max-width: 100%;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
::slotted([slot="footer"]) {
|
||||
display: flex;
|
||||
padding: var(--ha-space-3) var(--ha-space-4) var(--ha-space-4)
|
||||
var(--ha-space-4);
|
||||
gap: var(--ha-space-3);
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
`,
|
||||
];
|
||||
wa-dialog::part(footer) {
|
||||
padding: var(--ha-space-0);
|
||||
}
|
||||
|
||||
::slotted([slot="footer"]) {
|
||||
display: flex;
|
||||
padding: var(--ha-space-3) var(--ha-space-4) var(--ha-space-4)
|
||||
var(--ha-space-4);
|
||||
gap: var(--ha-space-3);
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
||||
@@ -11,7 +11,7 @@ import {
|
||||
isLastDayOfMonth,
|
||||
addYears,
|
||||
} from "date-fns";
|
||||
import type { Collection } from "home-assistant-js-websocket";
|
||||
import type { Collection, HassEntity } from "home-assistant-js-websocket";
|
||||
import { getCollection } from "home-assistant-js-websocket";
|
||||
import memoizeOne from "memoize-one";
|
||||
import {
|
||||
@@ -1361,3 +1361,37 @@ export const calculateSolarConsumedGauge = (
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get current power value from entity state, normalized to kW
|
||||
* @param stateObj - The entity state object to get power value from
|
||||
* @returns Power value in kW, or 0 if entity not found or invalid
|
||||
*/
|
||||
export const getPowerFromState = (stateObj: HassEntity): number | undefined => {
|
||||
if (!stateObj) {
|
||||
return undefined;
|
||||
}
|
||||
const value = parseFloat(stateObj.state);
|
||||
if (isNaN(value)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// Normalize to kW based on unit of measurement (case-sensitive)
|
||||
// Supported units: GW, kW, MW, mW, TW, W
|
||||
const unit = stateObj.attributes.unit_of_measurement;
|
||||
switch (unit) {
|
||||
case "W":
|
||||
return value / 1000;
|
||||
case "mW":
|
||||
return value / 1000000;
|
||||
case "MW":
|
||||
return value * 1000;
|
||||
case "GW":
|
||||
return value * 1000000;
|
||||
case "TW":
|
||||
return value * 1000000000;
|
||||
default:
|
||||
// Assume kW if no unit or unit is kW
|
||||
return value;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@ import "../components/ha-svg-icon";
|
||||
import "../components/ha-tab";
|
||||
import { haStyleScrollbar } from "../resources/styles";
|
||||
import type { HomeAssistant, Route } from "../types";
|
||||
import { withViewTransition } from "../common/util/view-transition";
|
||||
|
||||
export interface PageNavigation {
|
||||
path: string;
|
||||
@@ -112,9 +113,11 @@ class HassTabsSubpage extends LitElement {
|
||||
|
||||
public willUpdate(changedProperties: PropertyValues) {
|
||||
if (changedProperties.has("route")) {
|
||||
this._activeTab = this.tabs.find((tab) =>
|
||||
`${this.route.prefix}${this.route.path}`.includes(tab.path)
|
||||
);
|
||||
withViewTransition(() => {
|
||||
this._activeTab = this.tabs.find((tab) =>
|
||||
`${this.route.prefix}${this.route.path}`.includes(tab.path)
|
||||
);
|
||||
});
|
||||
}
|
||||
super.willUpdate(changedProperties);
|
||||
}
|
||||
|
||||
@@ -64,8 +64,15 @@ export class HaStopAction extends LitElement implements ActionElement {
|
||||
|
||||
private _responseChanged(ev: Event) {
|
||||
ev.stopPropagation();
|
||||
const newAction = { ...this.action };
|
||||
const newValue = (ev.target as any).value;
|
||||
if (newValue) {
|
||||
newAction.response_variable = newValue;
|
||||
} else {
|
||||
delete newAction.response_variable;
|
||||
}
|
||||
fireEvent(this, "value-changed", {
|
||||
value: { ...this.action, response_variable: (ev.target as any).value },
|
||||
value: newAction,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import "../../../../components/ha-dialog";
|
||||
import "../../../../components/ha-formfield";
|
||||
import "../../../../components/ha-radio";
|
||||
import "../../../../components/ha-button";
|
||||
import "../../../../components/ha-markdown";
|
||||
import type { HaRadio } from "../../../../components/ha-radio";
|
||||
import "../../../../components/ha-textfield";
|
||||
import type { GasSourceTypeEnergyPreference } from "../../../../data/energy";
|
||||
@@ -109,6 +110,15 @@ export class DialogEnergyGasSettings
|
||||
? `${this.hass.config.currency}/${this._pickedDisplayUnit}`
|
||||
: undefined;
|
||||
|
||||
const pickedUnitClass =
|
||||
this._pickedDisplayUnit &&
|
||||
this._energy_units?.includes(this._pickedDisplayUnit)
|
||||
? "energy"
|
||||
: this._pickedDisplayUnit &&
|
||||
this._gas_units?.includes(this._pickedDisplayUnit)
|
||||
? "volume"
|
||||
: undefined;
|
||||
|
||||
const externalSource =
|
||||
this._source.stat_energy_from &&
|
||||
isExternalStatistic(this._source.stat_energy_from);
|
||||
@@ -213,9 +223,33 @@ export class DialogEnergyGasSettings
|
||||
.hass=${this.hass}
|
||||
include-domains='["sensor", "input_number"]'
|
||||
.value=${this._source.entity_energy_price}
|
||||
.label=${`${this.hass.localize(
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.config.energy.gas.dialog.cost_entity_input"
|
||||
)} ${unitPrice ? ` (${unitPrice})` : ""}`}
|
||||
)}
|
||||
.helper=${pickedUnitClass
|
||||
? html`<ha-markdown
|
||||
.content=${this.hass.localize(
|
||||
"ui.panel.config.energy.gas.dialog.cost_entity_helper",
|
||||
pickedUnitClass === "energy"
|
||||
? {
|
||||
currency: this.hass.config.currency,
|
||||
class: this.hass.localize(
|
||||
"ui.panel.config.energy.gas.dialog.cost_entity_helper_energy"
|
||||
),
|
||||
unit1: "kWh",
|
||||
unit2: "Wh",
|
||||
}
|
||||
: {
|
||||
currency: this.hass.config.currency,
|
||||
class: this.hass.localize(
|
||||
"ui.panel.config.energy.gas.dialog.cost_entity_helper_volume"
|
||||
),
|
||||
unit1: "m³",
|
||||
unit2: "ft³",
|
||||
}
|
||||
)}
|
||||
></ha-markdown>`
|
||||
: nothing}
|
||||
@value-changed=${this._priceEntityChanged}
|
||||
></ha-entity-picker>`
|
||||
: ""}
|
||||
|
||||
@@ -9,6 +9,7 @@ import "../../../../components/ha-dialog";
|
||||
import "../../../../components/ha-button";
|
||||
import "../../../../components/ha-formfield";
|
||||
import "../../../../components/ha-radio";
|
||||
import "../../../../components/ha-markdown";
|
||||
import type { HaRadio } from "../../../../components/ha-radio";
|
||||
import "../../../../components/ha-textfield";
|
||||
import type { WaterSourceTypeEnergyPreference } from "../../../../data/energy";
|
||||
@@ -16,11 +17,7 @@ import {
|
||||
emptyWaterEnergyPreference,
|
||||
energyStatisticHelpUrl,
|
||||
} from "../../../../data/energy";
|
||||
import {
|
||||
getDisplayUnit,
|
||||
getStatisticMetadata,
|
||||
isExternalStatistic,
|
||||
} from "../../../../data/recorder";
|
||||
import { isExternalStatistic } from "../../../../data/recorder";
|
||||
import { getSensorDeviceClassConvertibleUnits } from "../../../../data/sensor";
|
||||
import type { HassDialog } from "../../../../dialogs/make-dialog-manager";
|
||||
import { haStyle, haStyleDialog } from "../../../../resources/styles";
|
||||
@@ -40,8 +37,6 @@ export class DialogEnergyWaterSettings
|
||||
|
||||
@state() private _costs?: "no-costs" | "number" | "entity" | "statistic";
|
||||
|
||||
@state() private _pickedDisplayUnit?: string | null;
|
||||
|
||||
@state() private _water_units?: string[];
|
||||
|
||||
@state() private _error?: string;
|
||||
@@ -55,11 +50,6 @@ export class DialogEnergyWaterSettings
|
||||
this._source = params.source
|
||||
? { ...params.source }
|
||||
: emptyWaterEnergyPreference();
|
||||
this._pickedDisplayUnit = getDisplayUnit(
|
||||
this.hass,
|
||||
params.source?.stat_energy_from,
|
||||
params.metadata
|
||||
);
|
||||
this._costs = this._source.entity_energy_price
|
||||
? "entity"
|
||||
: this._source.number_energy_price
|
||||
@@ -79,7 +69,6 @@ export class DialogEnergyWaterSettings
|
||||
this._params = undefined;
|
||||
this._source = undefined;
|
||||
this._error = undefined;
|
||||
this._pickedDisplayUnit = undefined;
|
||||
this._excludeList = undefined;
|
||||
fireEvent(this, "dialog-closed", { dialog: this.localName });
|
||||
return true;
|
||||
@@ -92,10 +81,6 @@ export class DialogEnergyWaterSettings
|
||||
|
||||
const pickableUnit = this._water_units?.join(", ") || "";
|
||||
|
||||
const unitPriceSensor = this._pickedDisplayUnit
|
||||
? `${this.hass.config.currency}/${this._pickedDisplayUnit}`
|
||||
: undefined;
|
||||
|
||||
const unitPriceFixed = `${this.hass.config.currency}/${
|
||||
this.hass.config.unit_system.volume === "gal" ? "gal" : "m³"
|
||||
}`;
|
||||
@@ -202,9 +187,15 @@ export class DialogEnergyWaterSettings
|
||||
.hass=${this.hass}
|
||||
include-domains='["sensor", "input_number"]'
|
||||
.value=${this._source.entity_energy_price}
|
||||
.label=${`${this.hass.localize(
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.config.energy.water.dialog.cost_entity_input"
|
||||
)}${unitPriceSensor ? ` (${unitPriceSensor})` : ""}`}
|
||||
)}
|
||||
.helper=${html`<ha-markdown
|
||||
.content=${this.hass.localize(
|
||||
"ui.panel.config.energy.water.dialog.cost_entity_helper",
|
||||
{ currency: this.hass.config.currency }
|
||||
)}
|
||||
></ha-markdown>`}
|
||||
@value-changed=${this._priceEntityChanged}
|
||||
></ha-entity-picker>`
|
||||
: ""}
|
||||
@@ -287,16 +278,6 @@ export class DialogEnergyWaterSettings
|
||||
}
|
||||
|
||||
private async _statisticChanged(ev: CustomEvent<{ value: string }>) {
|
||||
if (ev.detail.value) {
|
||||
const metadata = await getStatisticMetadata(this.hass, [ev.detail.value]);
|
||||
this._pickedDisplayUnit = getDisplayUnit(
|
||||
this.hass,
|
||||
ev.detail.value,
|
||||
metadata[0]
|
||||
);
|
||||
} else {
|
||||
this._pickedDisplayUnit = undefined;
|
||||
}
|
||||
if (isExternalStatistic(ev.detail.value) && this._costs !== "statistic") {
|
||||
this._costs = "no-costs";
|
||||
}
|
||||
|
||||
@@ -4,12 +4,10 @@ import { css, html, LitElement } from "lit";
|
||||
import { customElement, property, query, state } from "lit/decorators";
|
||||
import { isComponentLoaded } from "../../../common/config/is_component_loaded";
|
||||
import { navigate } from "../../../common/navigate";
|
||||
import { stringCompare } from "../../../common/string/compare";
|
||||
import { extractSearchParam } from "../../../common/url/search-params";
|
||||
import "../../../components/ha-button";
|
||||
import "../../../components/ha-dropdown";
|
||||
import "../../../components/ha-dropdown-item";
|
||||
import type { HaDropdownItem } from "../../../components/ha-dropdown-item";
|
||||
import "../../../components/ha-button-menu";
|
||||
import "../../../components/ha-list-item";
|
||||
import "../../../components/search-input";
|
||||
import type { LogProvider } from "../../../data/error_log";
|
||||
import { fetchHassioAddonsInfo } from "../../../data/hassio/addon";
|
||||
@@ -20,6 +18,7 @@ import type { HomeAssistant, Route } from "../../../types";
|
||||
import "./error-log-card";
|
||||
import "./system-log-card";
|
||||
import type { SystemLogCard } from "./system-log-card";
|
||||
import { stringCompare } from "../../../common/string/compare";
|
||||
|
||||
const logProviders: LogProvider[] = [
|
||||
{
|
||||
@@ -118,10 +117,7 @@ export class HaConfigLogs extends LitElement {
|
||||
>
|
||||
${isComponentLoaded(this.hass, "hassio")
|
||||
? html`
|
||||
<ha-dropdown
|
||||
slot="toolbar-icon"
|
||||
@wa-select=${this._handleDropdownSelect}
|
||||
>
|
||||
<ha-button-menu slot="toolbar-icon">
|
||||
<ha-button slot="trigger" appearance="filled">
|
||||
<ha-svg-icon slot="end" .path=${mdiChevronDown}></ha-svg-icon>
|
||||
${this._logProviders.find(
|
||||
@@ -130,17 +126,16 @@ export class HaConfigLogs extends LitElement {
|
||||
</ha-button>
|
||||
${this._logProviders.map(
|
||||
(provider) => html`
|
||||
<ha-dropdown-item
|
||||
.value=${provider.key}
|
||||
class=${provider.key === this._selectedLogProvider
|
||||
? "selected"
|
||||
: ""}
|
||||
<ha-list-item
|
||||
?selected=${provider.key === this._selectedLogProvider}
|
||||
.provider=${provider.key}
|
||||
@click=${this._selectProvider}
|
||||
>
|
||||
${provider.name}
|
||||
</ha-dropdown-item>
|
||||
</ha-list-item>
|
||||
`
|
||||
)}
|
||||
</ha-dropdown>
|
||||
</ha-button-menu>
|
||||
`
|
||||
: ""}
|
||||
${search}
|
||||
@@ -175,12 +170,8 @@ export class HaConfigLogs extends LitElement {
|
||||
this._detail = !this._detail;
|
||||
}
|
||||
|
||||
private _handleDropdownSelect(ev: CustomEvent<{ item: HaDropdownItem }>) {
|
||||
const provider = ev.detail?.item?.value;
|
||||
if (!provider) {
|
||||
return;
|
||||
}
|
||||
this._selectedLogProvider = provider;
|
||||
private _selectProvider(ev) {
|
||||
this._selectedLogProvider = (ev.currentTarget as any).provider;
|
||||
this._filter = "";
|
||||
navigate(`/config/logs?provider=${this._selectedLogProvider}`);
|
||||
}
|
||||
@@ -263,7 +254,7 @@ export class HaConfigLogs extends LitElement {
|
||||
direction: ltr;
|
||||
}
|
||||
@media all and (max-width: 870px) {
|
||||
ha-dropdown {
|
||||
ha-button-menu {
|
||||
max-width: 50%;
|
||||
}
|
||||
ha-button {
|
||||
@@ -274,8 +265,8 @@ export class HaConfigLogs extends LitElement {
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
ha-dropdown-item.selected {
|
||||
font-weight: var(--ha-font-weight-bold);
|
||||
ha-list-item[selected] {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
||||
@@ -4,6 +4,7 @@ import type { CSSResultGroup, TemplateResult } from "lit";
|
||||
import { css, html, LitElement } from "lit";
|
||||
import { customElement, property } from "lit/decorators";
|
||||
import { navigate } from "../../common/navigate";
|
||||
import { withViewTransition } from "../../common/util/view-transition";
|
||||
import "../../components/ha-button-menu";
|
||||
import "../../components/ha-icon-button";
|
||||
import "../../components/ha-list-item";
|
||||
@@ -116,7 +117,9 @@ class PanelDeveloperTools extends LitElement {
|
||||
return;
|
||||
}
|
||||
if (newPage !== this._page) {
|
||||
navigate(`/developer-tools/${newPage}`);
|
||||
withViewTransition(() => {
|
||||
navigate(`/developer-tools/${newPage}`);
|
||||
});
|
||||
} else {
|
||||
scrollTo({ behavior: "smooth", top: 0 });
|
||||
}
|
||||
|
||||
@@ -6,7 +6,10 @@ import { classMap } from "lit/directives/class-map";
|
||||
import "../../../../components/ha-card";
|
||||
import "../../../../components/ha-svg-icon";
|
||||
import type { EnergyData, EnergyPreferences } from "../../../../data/energy";
|
||||
import { getEnergyDataCollection } from "../../../../data/energy";
|
||||
import {
|
||||
getEnergyDataCollection,
|
||||
getPowerFromState,
|
||||
} from "../../../../data/energy";
|
||||
import { SubscribeMixin } from "../../../../mixins/subscribe-mixin";
|
||||
import type { HomeAssistant } from "../../../../types";
|
||||
import type { LovelaceCard, LovelaceGridOptions } from "../../types";
|
||||
@@ -724,33 +727,7 @@ class HuiPowerSankeyCard
|
||||
// Track this entity for state change detection
|
||||
this._entities.add(entityId);
|
||||
|
||||
const stateObj = this.hass.states[entityId];
|
||||
if (!stateObj) {
|
||||
return 0;
|
||||
}
|
||||
const value = parseFloat(stateObj.state);
|
||||
if (isNaN(value)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Normalize to kW based on unit of measurement (case-sensitive)
|
||||
// Supported units: GW, kW, MW, mW, TW, W
|
||||
const unit = stateObj.attributes.unit_of_measurement;
|
||||
switch (unit) {
|
||||
case "W":
|
||||
return value / 1000;
|
||||
case "mW":
|
||||
return value / 1000000;
|
||||
case "MW":
|
||||
return value * 1000;
|
||||
case "GW":
|
||||
return value * 1000000;
|
||||
case "TW":
|
||||
return value * 1000000000;
|
||||
default:
|
||||
// Assume kW if no unit or unit is kW
|
||||
return value;
|
||||
}
|
||||
return getPowerFromState(this.hass.states[entityId]) ?? 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,10 @@ import { LinearGradient } from "../../../../resources/echarts/echarts";
|
||||
import "../../../../components/chart/ha-chart-base";
|
||||
import "../../../../components/ha-card";
|
||||
import type { EnergyData } from "../../../../data/energy";
|
||||
import { getEnergyDataCollection } from "../../../../data/energy";
|
||||
import {
|
||||
getEnergyDataCollection,
|
||||
getPowerFromState,
|
||||
} from "../../../../data/energy";
|
||||
import type { StatisticValue } from "../../../../data/recorder";
|
||||
import type { FrontendLocaleData } from "../../../../data/translation";
|
||||
import { SubscribeMixin } from "../../../../mixins/subscribe-mixin";
|
||||
@@ -197,6 +200,7 @@ export class HuiPowerSourcesGraphCard
|
||||
},
|
||||
};
|
||||
|
||||
const now = Date.now();
|
||||
Object.keys(statIds).forEach((key, keyIndex) => {
|
||||
if (statIds[key].stats.length) {
|
||||
const colorHex = computedStyles.getPropertyValue(statIds[key].color);
|
||||
@@ -204,7 +208,14 @@ export class HuiPowerSourcesGraphCard
|
||||
// Echarts is supposed to handle that but it is bugged when you use it together with stacking.
|
||||
// The interpolation breaks the stacking, so this positive/negative is a workaround
|
||||
const { positive, negative } = this._processData(
|
||||
statIds[key].stats.map((id: string) => energyData.stats[id] ?? [])
|
||||
statIds[key].stats.map((id: string) => {
|
||||
const stats = energyData.stats[id] ?? [];
|
||||
const currentState = getPowerFromState(this.hass.states[id]);
|
||||
if (currentState !== undefined) {
|
||||
stats.push({ start: now, end: now, mean: currentState });
|
||||
}
|
||||
return stats;
|
||||
})
|
||||
);
|
||||
datasets.push({
|
||||
...commonSeriesOptions,
|
||||
|
||||
@@ -80,12 +80,6 @@ export class HuiCalendarCard extends LitElement implements LovelaceCard {
|
||||
throw new Error("Entities need to be an array");
|
||||
}
|
||||
|
||||
const computedStyles = getComputedStyle(this);
|
||||
this._calendars = config!.entities.map((entity, idx) => ({
|
||||
entity_id: entity,
|
||||
backgroundColor: getColorByIndex(idx, computedStyles),
|
||||
}));
|
||||
|
||||
if (this._config?.entities !== config.entities) {
|
||||
this._fetchCalendarEvents();
|
||||
}
|
||||
@@ -93,6 +87,20 @@ export class HuiCalendarCard extends LitElement implements LovelaceCard {
|
||||
this._config = { initial_view: "dayGridMonth", ...config };
|
||||
}
|
||||
|
||||
public willUpdate(changedProps: PropertyValues): void {
|
||||
super.willUpdate(changedProps);
|
||||
if (
|
||||
!this.hasUpdated ||
|
||||
(changedProps.has("_config") && this._config?.entities)
|
||||
) {
|
||||
const computedStyles = getComputedStyle(this);
|
||||
this._calendars = this._config!.entities.map((entity, idx) => ({
|
||||
entity_id: entity,
|
||||
backgroundColor: getColorByIndex(idx, computedStyles),
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
public getCardSize(): number {
|
||||
return 12;
|
||||
}
|
||||
|
||||
@@ -96,8 +96,6 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
|
||||
`;
|
||||
}
|
||||
|
||||
const entityState = Number(stateObj.state);
|
||||
|
||||
if (stateObj.state === UNAVAILABLE) {
|
||||
return html`
|
||||
<hui-warning
|
||||
@@ -164,7 +162,7 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
|
||||
.unit_of_measurement ||
|
||||
""}
|
||||
style=${styleMap({
|
||||
"--gauge-color": this._computeSeverity(entityState),
|
||||
"--gauge-color": this._computeSeverity(Number(valueToDisplay)),
|
||||
})}
|
||||
.needle=${this._config!.needle}
|
||||
.levels=${this._config!.needle ? this._severityLevels() : undefined}
|
||||
|
||||
@@ -94,7 +94,10 @@ class HuiMapCard extends LitElement implements LovelaceCard {
|
||||
}
|
||||
});
|
||||
|
||||
return locationEntities.filter((entity) => !personSources.has(entity));
|
||||
return locationEntities.filter(
|
||||
(entityId) =>
|
||||
!hass.entities?.[entityId]?.hidden && !personSources.has(entityId)
|
||||
);
|
||||
}
|
||||
|
||||
public setConfig(config: MapCardConfig): void {
|
||||
|
||||
@@ -99,6 +99,7 @@ import type { HUIView } from "./views/hui-view";
|
||||
import "./views/hui-view-background";
|
||||
import "./views/hui-view-container";
|
||||
import { UndoRedoController } from "../../common/controllers/undo-redo-controller";
|
||||
import { withViewTransition } from "../../common/util/view-transition";
|
||||
|
||||
interface ActionItem {
|
||||
icon: string;
|
||||
@@ -1235,7 +1236,9 @@ class HUIRoot extends LitElement {
|
||||
const viewIndex = Number(ev.detail.name);
|
||||
if (viewIndex !== this._curView) {
|
||||
const path = this.config.views[viewIndex].path || viewIndex;
|
||||
this._navigateToView(path);
|
||||
withViewTransition(() => {
|
||||
this._navigateToView(path);
|
||||
});
|
||||
} else if (!this._editMode) {
|
||||
scrollTo({ behavior: "smooth", top: 0 });
|
||||
}
|
||||
|
||||
@@ -3206,6 +3206,9 @@
|
||||
"cost_stat_input": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_stat_input%]",
|
||||
"cost_entity": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_entity%]",
|
||||
"cost_entity_input": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_entity_input%]",
|
||||
"cost_entity_helper": "Any entity with a unit of `{currency}/(valid {class} unit)` (e.g. `{currency}/{unit1}` or `{currency}/{unit2}`) may be used and will be automatically converted.",
|
||||
"cost_entity_helper_energy": "energy",
|
||||
"cost_entity_helper_volume": "volume",
|
||||
"cost_number": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_number%]",
|
||||
"cost_number_input": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_number%]",
|
||||
"gas_usage": "Gas usage"
|
||||
@@ -3229,6 +3232,7 @@
|
||||
"cost_stat_input": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_stat_input%]",
|
||||
"cost_entity": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_entity%]",
|
||||
"cost_entity_input": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_entity_input%]",
|
||||
"cost_entity_helper": "Any entity with a unit of `{currency}/(valid water unit)` (e.g. `{currency}/gal` or `{currency}/m³`) may be used and will be automatically converted.",
|
||||
"cost_number": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_number%]",
|
||||
"cost_number_input": "[%key:ui::panel::config::energy::grid::flow_dialog::from::cost_number%]",
|
||||
"water_usage": "Water usage"
|
||||
|
||||
404
yarn.lock
404
yarn.lock
@@ -3312,58 +3312,58 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@module-federation/error-codes@npm:0.21.4":
|
||||
version: 0.21.4
|
||||
resolution: "@module-federation/error-codes@npm:0.21.4"
|
||||
checksum: 10/18b0ecdba0de4cd5b202f1f5e5aa76273de0e4513ba91b8e39a2a5b00ff6471f694c88d591624b0913a0c3b4c9a6112da29dc7eebbdc562e5455b591f1d70b31
|
||||
"@module-federation/error-codes@npm:0.21.6":
|
||||
version: 0.21.6
|
||||
resolution: "@module-federation/error-codes@npm:0.21.6"
|
||||
checksum: 10/6ded1ecab780f1f9ec46a59adb200e75cdf11580d70aa79dd75d71fbbf276615690da277ea67aa1ceb5bc88386f5708cc1d2ba5526be5c9ff02397a6123e36bf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@module-federation/runtime-core@npm:0.21.4":
|
||||
version: 0.21.4
|
||||
resolution: "@module-federation/runtime-core@npm:0.21.4"
|
||||
"@module-federation/runtime-core@npm:0.21.6":
|
||||
version: 0.21.6
|
||||
resolution: "@module-federation/runtime-core@npm:0.21.6"
|
||||
dependencies:
|
||||
"@module-federation/error-codes": "npm:0.21.4"
|
||||
"@module-federation/sdk": "npm:0.21.4"
|
||||
checksum: 10/b90fe4147cd3302ea6b02098ff2bed7437425609ba0eb4d7b649b3643837810239f06f532af092a53f9b47e8fae1aeef84cfd964431fa4ab2fd4a800ad796d23
|
||||
"@module-federation/error-codes": "npm:0.21.6"
|
||||
"@module-federation/sdk": "npm:0.21.6"
|
||||
checksum: 10/85efa2042d6f3a7cf0e4971b991472d4339d88f6f15684afb6d451f19ed934e225b2510c86b7bb4d2c5f64253ed7b0175f08c17f95bfc2b9929930a8a03fff1e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@module-federation/runtime-tools@npm:0.21.4":
|
||||
version: 0.21.4
|
||||
resolution: "@module-federation/runtime-tools@npm:0.21.4"
|
||||
"@module-federation/runtime-tools@npm:0.21.6":
|
||||
version: 0.21.6
|
||||
resolution: "@module-federation/runtime-tools@npm:0.21.6"
|
||||
dependencies:
|
||||
"@module-federation/runtime": "npm:0.21.4"
|
||||
"@module-federation/webpack-bundler-runtime": "npm:0.21.4"
|
||||
checksum: 10/1e453268122070e5512c1d74cb8b4efb87cd2c1b46daba1736dfee16b2e8332a779f8168dcb3f84e17eade31f965168df63dae487ccfb74b0469c32af1895675
|
||||
"@module-federation/runtime": "npm:0.21.6"
|
||||
"@module-federation/webpack-bundler-runtime": "npm:0.21.6"
|
||||
checksum: 10/36e7ccab948e11f310e87397a1a2185b56064e5691e553b34173686e2bc7372ec710e5ad48c026eb28c85b168765788b743aa2111513f3b57118b47636312dd1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@module-federation/runtime@npm:0.21.4":
|
||||
version: 0.21.4
|
||||
resolution: "@module-federation/runtime@npm:0.21.4"
|
||||
"@module-federation/runtime@npm:0.21.6":
|
||||
version: 0.21.6
|
||||
resolution: "@module-federation/runtime@npm:0.21.6"
|
||||
dependencies:
|
||||
"@module-federation/error-codes": "npm:0.21.4"
|
||||
"@module-federation/runtime-core": "npm:0.21.4"
|
||||
"@module-federation/sdk": "npm:0.21.4"
|
||||
checksum: 10/ae262bfe1643a381e571d7dff459108da3046eea04cc3dae85dce745dd294ef8a30f70098ffa602c266b8c5878c859dd2fcde787773303dac35f77fa6ed32ae4
|
||||
"@module-federation/error-codes": "npm:0.21.6"
|
||||
"@module-federation/runtime-core": "npm:0.21.6"
|
||||
"@module-federation/sdk": "npm:0.21.6"
|
||||
checksum: 10/93fd9bb284630933cab7e4bc070d648b56272f3636038c05eec7d1e3eeb189be3ccebe5f8ecc450197ee992d2616ed282d54e673ec0acd63adee4faddf80b144
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@module-federation/sdk@npm:0.21.4":
|
||||
version: 0.21.4
|
||||
resolution: "@module-federation/sdk@npm:0.21.4"
|
||||
checksum: 10/74c9ee2a057babf4f2638f8644a6eee6bd2c76441440dcc3855fb01a0e527e88518b8cc9c2d6d8f6b28858e34e40a3a966c03bb5d42897b9ea9163985edfa159
|
||||
"@module-federation/sdk@npm:0.21.6":
|
||||
version: 0.21.6
|
||||
resolution: "@module-federation/sdk@npm:0.21.6"
|
||||
checksum: 10/effc4aa932e2f06742bda8f02aaec84e138f5512b50f18c38b051490020b20d3d8edf7ece853fccffc1f78a0b43dec78e69bf02150e7e2801d5ce03c3ee367b9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@module-federation/webpack-bundler-runtime@npm:0.21.4":
|
||||
version: 0.21.4
|
||||
resolution: "@module-federation/webpack-bundler-runtime@npm:0.21.4"
|
||||
"@module-federation/webpack-bundler-runtime@npm:0.21.6":
|
||||
version: 0.21.6
|
||||
resolution: "@module-federation/webpack-bundler-runtime@npm:0.21.6"
|
||||
dependencies:
|
||||
"@module-federation/runtime": "npm:0.21.4"
|
||||
"@module-federation/sdk": "npm:0.21.4"
|
||||
checksum: 10/a4f2a7ca7765651023af88f38ded9580b553cd8c6a88bc9056ec4dc58656a3d438f0498750462f424bf3aeaa5a3c7b6fd8189b7c7c76d084736474455838cb55
|
||||
"@module-federation/runtime": "npm:0.21.6"
|
||||
"@module-federation/sdk": "npm:0.21.6"
|
||||
checksum: 10/a5ceb72ee3867acad5d7d3c654eb568068b1d5288f60ce9301bdc9f56effa5a4c26a732a2cec7176a81b87139566cd51dd8dfbc6112da05d47b870fa3ad3ba1f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -3893,22 +3893,22 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rsdoctor/client@npm:1.3.11":
|
||||
version: 1.3.11
|
||||
resolution: "@rsdoctor/client@npm:1.3.11"
|
||||
checksum: 10/17b769e8b6ae23e508816be05fb5b9ab235bd4380f2bc3ff7a8add8ae088eee0663627a637d695f304841fb708f19b245ab20a4924f3b0b9f35e341649028490
|
||||
"@rsdoctor/client@npm:1.3.12":
|
||||
version: 1.3.12
|
||||
resolution: "@rsdoctor/client@npm:1.3.12"
|
||||
checksum: 10/3abd14af2bd9a34da2199bad3a9c9aef34381beebebf3d0aceb90e4e9dc9ea19e804372bcdb8e082888dedb268fe544b658537c510df7ae9160df822ced9712f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rsdoctor/core@npm:1.3.11":
|
||||
version: 1.3.11
|
||||
resolution: "@rsdoctor/core@npm:1.3.11"
|
||||
"@rsdoctor/core@npm:1.3.12":
|
||||
version: 1.3.12
|
||||
resolution: "@rsdoctor/core@npm:1.3.12"
|
||||
dependencies:
|
||||
"@rsbuild/plugin-check-syntax": "npm:1.5.0"
|
||||
"@rsdoctor/graph": "npm:1.3.11"
|
||||
"@rsdoctor/sdk": "npm:1.3.11"
|
||||
"@rsdoctor/types": "npm:1.3.11"
|
||||
"@rsdoctor/utils": "npm:1.3.11"
|
||||
"@rsdoctor/graph": "npm:1.3.12"
|
||||
"@rsdoctor/sdk": "npm:1.3.12"
|
||||
"@rsdoctor/types": "npm:1.3.12"
|
||||
"@rsdoctor/utils": "npm:1.3.12"
|
||||
browserslist-load-config: "npm:^1.0.1"
|
||||
enhanced-resolve: "npm:5.12.0"
|
||||
es-toolkit: "npm:^1.41.0"
|
||||
@@ -3916,59 +3916,59 @@ __metadata:
|
||||
fs-extra: "npm:^11.1.1"
|
||||
semver: "npm:^7.7.3"
|
||||
source-map: "npm:^0.7.6"
|
||||
checksum: 10/1e11f76f00ef4148743c5b5ef8dcefdc57f658ffefcf6de6455888b4546000ebf6a9d03623734bbb7e3b5cd619bb460c668c38e6ffa0f747890018bbc3fc005a
|
||||
checksum: 10/fda3d1a0acb0e57888a5bbe28649c1b439951e915d6411982116bdaabb72185d4f339009fd748681fe1c9c341c3c46fad597b587d8c3273b2024d682f6b40aca
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rsdoctor/graph@npm:1.3.11":
|
||||
version: 1.3.11
|
||||
resolution: "@rsdoctor/graph@npm:1.3.11"
|
||||
"@rsdoctor/graph@npm:1.3.12":
|
||||
version: 1.3.12
|
||||
resolution: "@rsdoctor/graph@npm:1.3.12"
|
||||
dependencies:
|
||||
"@rsdoctor/types": "npm:1.3.11"
|
||||
"@rsdoctor/utils": "npm:1.3.11"
|
||||
"@rsdoctor/types": "npm:1.3.12"
|
||||
"@rsdoctor/utils": "npm:1.3.12"
|
||||
es-toolkit: "npm:^1.41.0"
|
||||
path-browserify: "npm:1.0.1"
|
||||
source-map: "npm:^0.7.6"
|
||||
checksum: 10/e32444685f98cad184eb9d07bc9ebd4a3668c6dfaa352ce6912cabc4cdc63bdf15efc57a3d145b35e14724215230bd6657b7b8de30aa2c674a64c2c7983a3739
|
||||
checksum: 10/38b07882c0e90fc9a97c68ee571f7b649c454624d403e8745ef85b6c2ad2c698f922aa1fb313a23cc1ceadfe391f48b23d381f73cf089ab5762a14a095dd26f3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rsdoctor/rspack-plugin@npm:1.3.11":
|
||||
version: 1.3.11
|
||||
resolution: "@rsdoctor/rspack-plugin@npm:1.3.11"
|
||||
"@rsdoctor/rspack-plugin@npm:1.3.12":
|
||||
version: 1.3.12
|
||||
resolution: "@rsdoctor/rspack-plugin@npm:1.3.12"
|
||||
dependencies:
|
||||
"@rsdoctor/core": "npm:1.3.11"
|
||||
"@rsdoctor/graph": "npm:1.3.11"
|
||||
"@rsdoctor/sdk": "npm:1.3.11"
|
||||
"@rsdoctor/types": "npm:1.3.11"
|
||||
"@rsdoctor/utils": "npm:1.3.11"
|
||||
"@rsdoctor/core": "npm:1.3.12"
|
||||
"@rsdoctor/graph": "npm:1.3.12"
|
||||
"@rsdoctor/sdk": "npm:1.3.12"
|
||||
"@rsdoctor/types": "npm:1.3.12"
|
||||
"@rsdoctor/utils": "npm:1.3.12"
|
||||
peerDependencies:
|
||||
"@rspack/core": "*"
|
||||
peerDependenciesMeta:
|
||||
"@rspack/core":
|
||||
optional: true
|
||||
checksum: 10/973626b9387d85814839c7a8f08b21b60da079c4f755dd5ada5fae8aba61910d27ead333c35d3f9154ba71253c420bed43481bd68c09dae618d42f47a6d8c080
|
||||
checksum: 10/2825034e62d89d9e9eeb5d4fa68ab3b19a12ee6b270fb103fd694e649dcaccfe08016879271c5d2cd2ee961179df43e9b124f965d2933b24dfaadc98441c2cc3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rsdoctor/sdk@npm:1.3.11":
|
||||
version: 1.3.11
|
||||
resolution: "@rsdoctor/sdk@npm:1.3.11"
|
||||
"@rsdoctor/sdk@npm:1.3.12":
|
||||
version: 1.3.12
|
||||
resolution: "@rsdoctor/sdk@npm:1.3.12"
|
||||
dependencies:
|
||||
"@rsdoctor/client": "npm:1.3.11"
|
||||
"@rsdoctor/graph": "npm:1.3.11"
|
||||
"@rsdoctor/types": "npm:1.3.11"
|
||||
"@rsdoctor/utils": "npm:1.3.11"
|
||||
"@rsdoctor/client": "npm:1.3.12"
|
||||
"@rsdoctor/graph": "npm:1.3.12"
|
||||
"@rsdoctor/types": "npm:1.3.12"
|
||||
"@rsdoctor/utils": "npm:1.3.12"
|
||||
safer-buffer: "npm:2.1.2"
|
||||
socket.io: "npm:4.8.1"
|
||||
tapable: "npm:2.2.3"
|
||||
checksum: 10/6e98b51259178af26cad8852a2ac4f35a404a34978d60262f6100320b02c47fdcd11df2080c384d765eca28edfed65c8f0e1b49bf6cdac462d5c0cff0ec599f9
|
||||
checksum: 10/5b60197500b73b1ae671565a2c2886a40df36fcf0e7277457840f569cb845d2c725fbfe43a4f6496ac5a26d749e0249e1a2a79bdb582a0fe16beeaa9bea0cdaa
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rsdoctor/types@npm:1.3.11":
|
||||
version: 1.3.11
|
||||
resolution: "@rsdoctor/types@npm:1.3.11"
|
||||
"@rsdoctor/types@npm:1.3.12":
|
||||
version: 1.3.12
|
||||
resolution: "@rsdoctor/types@npm:1.3.12"
|
||||
dependencies:
|
||||
"@types/connect": "npm:3.4.38"
|
||||
"@types/estree": "npm:1.0.5"
|
||||
@@ -3982,16 +3982,16 @@ __metadata:
|
||||
optional: true
|
||||
webpack:
|
||||
optional: true
|
||||
checksum: 10/383cc2182737d6a9ab49a43f826bc16c5a2688f1135fe44586b835153c24fcae1bac5ea16683d252df91ec269608aa8e8926c07b0ed17f3d954e7a17d30a4650
|
||||
checksum: 10/1d8891362056332289dfefd22a9ab0daf977ef8d82cffa1bc2abf507423ddf628242188b826bcf34e8fd908bb1b22f093c840675e77593a7f93e671e91261c5f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rsdoctor/utils@npm:1.3.11":
|
||||
version: 1.3.11
|
||||
resolution: "@rsdoctor/utils@npm:1.3.11"
|
||||
"@rsdoctor/utils@npm:1.3.12":
|
||||
version: 1.3.12
|
||||
resolution: "@rsdoctor/utils@npm:1.3.12"
|
||||
dependencies:
|
||||
"@babel/code-frame": "npm:7.26.2"
|
||||
"@rsdoctor/types": "npm:1.3.11"
|
||||
"@rsdoctor/types": "npm:1.3.12"
|
||||
"@types/estree": "npm:1.0.5"
|
||||
acorn: "npm:^8.10.0"
|
||||
acorn-import-attributes: "npm:^1.9.5"
|
||||
@@ -4005,96 +4005,96 @@ __metadata:
|
||||
picocolors: "npm:^1.1.1"
|
||||
rslog: "npm:^1.2.11"
|
||||
strip-ansi: "npm:^6.0.1"
|
||||
checksum: 10/f5d1bc0dbfc39753adbe2ee89d524a97d7568c6e1ad8059e479993fdb79e4b753e6cfb714bf641e5f336071215cb76c9b965a2ea004944d6c137e60d8285a1e7
|
||||
checksum: 10/24d46e84abf2f85514f9feabb44db9b7a1e9e161052c8cdb8edc561db797928fd0d257249e1fb228f2b9346dc446e0ec59e03d46307f5b1e4bf5554a73274ee6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-darwin-arm64@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-darwin-arm64@npm:1.6.5"
|
||||
"@rspack/binding-darwin-arm64@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-darwin-arm64@npm:1.6.6"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-darwin-x64@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-darwin-x64@npm:1.6.5"
|
||||
"@rspack/binding-darwin-x64@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-darwin-x64@npm:1.6.6"
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-arm64-gnu@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-linux-arm64-gnu@npm:1.6.5"
|
||||
"@rspack/binding-linux-arm64-gnu@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-linux-arm64-gnu@npm:1.6.6"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-arm64-musl@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-linux-arm64-musl@npm:1.6.5"
|
||||
"@rspack/binding-linux-arm64-musl@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-linux-arm64-musl@npm:1.6.6"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-x64-gnu@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-linux-x64-gnu@npm:1.6.5"
|
||||
"@rspack/binding-linux-x64-gnu@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-linux-x64-gnu@npm:1.6.6"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-linux-x64-musl@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-linux-x64-musl@npm:1.6.5"
|
||||
"@rspack/binding-linux-x64-musl@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-linux-x64-musl@npm:1.6.6"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-wasm32-wasi@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-wasm32-wasi@npm:1.6.5"
|
||||
"@rspack/binding-wasm32-wasi@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-wasm32-wasi@npm:1.6.6"
|
||||
dependencies:
|
||||
"@napi-rs/wasm-runtime": "npm:1.0.7"
|
||||
conditions: cpu=wasm32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-win32-arm64-msvc@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-win32-arm64-msvc@npm:1.6.5"
|
||||
"@rspack/binding-win32-arm64-msvc@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-win32-arm64-msvc@npm:1.6.6"
|
||||
conditions: os=win32 & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-win32-ia32-msvc@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-win32-ia32-msvc@npm:1.6.5"
|
||||
"@rspack/binding-win32-ia32-msvc@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-win32-ia32-msvc@npm:1.6.6"
|
||||
conditions: os=win32 & cpu=ia32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding-win32-x64-msvc@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding-win32-x64-msvc@npm:1.6.5"
|
||||
"@rspack/binding-win32-x64-msvc@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding-win32-x64-msvc@npm:1.6.6"
|
||||
conditions: os=win32 & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/binding@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/binding@npm:1.6.5"
|
||||
"@rspack/binding@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/binding@npm:1.6.6"
|
||||
dependencies:
|
||||
"@rspack/binding-darwin-arm64": "npm:1.6.5"
|
||||
"@rspack/binding-darwin-x64": "npm:1.6.5"
|
||||
"@rspack/binding-linux-arm64-gnu": "npm:1.6.5"
|
||||
"@rspack/binding-linux-arm64-musl": "npm:1.6.5"
|
||||
"@rspack/binding-linux-x64-gnu": "npm:1.6.5"
|
||||
"@rspack/binding-linux-x64-musl": "npm:1.6.5"
|
||||
"@rspack/binding-wasm32-wasi": "npm:1.6.5"
|
||||
"@rspack/binding-win32-arm64-msvc": "npm:1.6.5"
|
||||
"@rspack/binding-win32-ia32-msvc": "npm:1.6.5"
|
||||
"@rspack/binding-win32-x64-msvc": "npm:1.6.5"
|
||||
"@rspack/binding-darwin-arm64": "npm:1.6.6"
|
||||
"@rspack/binding-darwin-x64": "npm:1.6.6"
|
||||
"@rspack/binding-linux-arm64-gnu": "npm:1.6.6"
|
||||
"@rspack/binding-linux-arm64-musl": "npm:1.6.6"
|
||||
"@rspack/binding-linux-x64-gnu": "npm:1.6.6"
|
||||
"@rspack/binding-linux-x64-musl": "npm:1.6.6"
|
||||
"@rspack/binding-wasm32-wasi": "npm:1.6.6"
|
||||
"@rspack/binding-win32-arm64-msvc": "npm:1.6.6"
|
||||
"@rspack/binding-win32-ia32-msvc": "npm:1.6.6"
|
||||
"@rspack/binding-win32-x64-msvc": "npm:1.6.6"
|
||||
dependenciesMeta:
|
||||
"@rspack/binding-darwin-arm64":
|
||||
optional: true
|
||||
@@ -4116,23 +4116,23 @@ __metadata:
|
||||
optional: true
|
||||
"@rspack/binding-win32-x64-msvc":
|
||||
optional: true
|
||||
checksum: 10/1a2c9ef1865e92f36615ff997b336c42dca84584e487d43b739a2485108463db860f798e4a7a400a5b6a6e3ce1d7ba7c0fe01fcb55e11c153be6b521264c284e
|
||||
checksum: 10/37b69398a0679c25e0479b6eb11ea2c110a8b57367af2c808a473d19d58c9dd09e7763b3dfbec06284d6863e7a301d71509128fe22da2b0c57c06b718f67e66a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rspack/core@npm:1.6.5":
|
||||
version: 1.6.5
|
||||
resolution: "@rspack/core@npm:1.6.5"
|
||||
"@rspack/core@npm:1.6.6":
|
||||
version: 1.6.6
|
||||
resolution: "@rspack/core@npm:1.6.6"
|
||||
dependencies:
|
||||
"@module-federation/runtime-tools": "npm:0.21.4"
|
||||
"@rspack/binding": "npm:1.6.5"
|
||||
"@module-federation/runtime-tools": "npm:0.21.6"
|
||||
"@rspack/binding": "npm:1.6.6"
|
||||
"@rspack/lite-tapable": "npm:1.1.0"
|
||||
peerDependencies:
|
||||
"@swc/helpers": ">=0.5.1"
|
||||
peerDependenciesMeta:
|
||||
"@swc/helpers":
|
||||
optional: true
|
||||
checksum: 10/4dc7b25b8b0535ce0dad8e7dfc8d8d4b031c3b626d93110e927a012f9564644f771b22838bc0b94f2e30a6408c6ddaf183e0c159e2bfa997b823688ad21c3a5c
|
||||
checksum: 10/e706c19085729f52f3e80c6945edc32def2091270fc9a15d6aea336754719d0bdce93e62dae3a675c412b5e433cc2fc093591d74e731722196d0de2ff269b198
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4945,106 +4945,106 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/eslint-plugin@npm:8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/eslint-plugin@npm:8.48.0"
|
||||
"@typescript-eslint/eslint-plugin@npm:8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/eslint-plugin@npm:8.48.1"
|
||||
dependencies:
|
||||
"@eslint-community/regexpp": "npm:^4.10.0"
|
||||
"@typescript-eslint/scope-manager": "npm:8.48.0"
|
||||
"@typescript-eslint/type-utils": "npm:8.48.0"
|
||||
"@typescript-eslint/utils": "npm:8.48.0"
|
||||
"@typescript-eslint/visitor-keys": "npm:8.48.0"
|
||||
"@typescript-eslint/scope-manager": "npm:8.48.1"
|
||||
"@typescript-eslint/type-utils": "npm:8.48.1"
|
||||
"@typescript-eslint/utils": "npm:8.48.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:8.48.1"
|
||||
graphemer: "npm:^1.4.0"
|
||||
ignore: "npm:^7.0.0"
|
||||
natural-compare: "npm:^1.4.0"
|
||||
ts-api-utils: "npm:^2.1.0"
|
||||
peerDependencies:
|
||||
"@typescript-eslint/parser": ^8.48.0
|
||||
"@typescript-eslint/parser": ^8.48.1
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: ">=4.8.4 <6.0.0"
|
||||
checksum: 10/c9cd87c72da7bb7f6175fdb53a4c08a26e61a3d9d1024960d193276217b37ca1e8e12328a57751ed9380475e11e198f9715e172126ea7d3b3da9948d225db92b
|
||||
checksum: 10/3ccf420805fb8adb2f3059fa26eb9c6211c0624966d8c8654a1bd586bf87f30be0c62524dfd785185ef573bedd91c42ec3c98c23aed5d60cb9ac583dd9334bc8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/parser@npm:8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/parser@npm:8.48.0"
|
||||
"@typescript-eslint/parser@npm:8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/parser@npm:8.48.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager": "npm:8.48.0"
|
||||
"@typescript-eslint/types": "npm:8.48.0"
|
||||
"@typescript-eslint/typescript-estree": "npm:8.48.0"
|
||||
"@typescript-eslint/visitor-keys": "npm:8.48.0"
|
||||
"@typescript-eslint/scope-manager": "npm:8.48.1"
|
||||
"@typescript-eslint/types": "npm:8.48.1"
|
||||
"@typescript-eslint/typescript-estree": "npm:8.48.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:8.48.1"
|
||||
debug: "npm:^4.3.4"
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: ">=4.8.4 <6.0.0"
|
||||
checksum: 10/5919642345c79a43e57a85e0e69d1f56b5756b3fdb3586ec6371969604f589adc188338c8f12a787456edc3b38c70586d8209cffcf45e35e5a5ebd497c5f4257
|
||||
checksum: 10/d8409c9ede4b1cd2ad0e10e94bb00c54f79352f7d54c97bf24419cb983c19b9f6097e6c31b217ce7ec5cfc9a48117e732d9f88ce0cb8c0ccf7fc3faecdf854a3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/project-service@npm:8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/project-service@npm:8.48.0"
|
||||
"@typescript-eslint/project-service@npm:8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/project-service@npm:8.48.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/tsconfig-utils": "npm:^8.48.0"
|
||||
"@typescript-eslint/types": "npm:^8.48.0"
|
||||
"@typescript-eslint/tsconfig-utils": "npm:^8.48.1"
|
||||
"@typescript-eslint/types": "npm:^8.48.1"
|
||||
debug: "npm:^4.3.4"
|
||||
peerDependencies:
|
||||
typescript: ">=4.8.4 <6.0.0"
|
||||
checksum: 10/5853a2f57bf8a26b70c1fe5a906c1890ad4f0fca127218a7805161fc9ad547af97f4a600f32f5acdf2f2312b156affca2bea84af9a433215cbcc2056b6a27c77
|
||||
checksum: 10/66ecc7ef9572748860517cde7fbfc335d05ca8c99dcf13ac6d728ac93388d90cdc3ebe2ff33a85c0a03487b3c1c4e36c6e3fe413ee16d8fb003621cb58e65e52
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/scope-manager@npm:8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/scope-manager@npm:8.48.0"
|
||||
"@typescript-eslint/scope-manager@npm:8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/scope-manager@npm:8.48.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/types": "npm:8.48.0"
|
||||
"@typescript-eslint/visitor-keys": "npm:8.48.0"
|
||||
checksum: 10/963af7af235e940467504969c565b359ca454a156eba0d5af2e4fd9cca4294947187e1a85107ff05801688ac85b5767d2566414cbef47a03c23f7b46527decca
|
||||
"@typescript-eslint/types": "npm:8.48.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:8.48.1"
|
||||
checksum: 10/5040246220f9872ec47633297b7896ed5587af3163e06ddcb7ca0dcf1e171f359bd4f1c82f794a6adfecbccfb5ef437d51b522321034603c93ba1993c407bdf2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/tsconfig-utils@npm:8.48.0, @typescript-eslint/tsconfig-utils@npm:^8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/tsconfig-utils@npm:8.48.0"
|
||||
"@typescript-eslint/tsconfig-utils@npm:8.48.1, @typescript-eslint/tsconfig-utils@npm:^8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/tsconfig-utils@npm:8.48.1"
|
||||
peerDependencies:
|
||||
typescript: ">=4.8.4 <6.0.0"
|
||||
checksum: 10/e480cd80498c4119a8c5bc413a22abf4bf365b3674ff95f5513292ede31e4fd8118f50d76a786de702696396a43c0c7a4d0c2ccd1c2c7db61bd941ba74495021
|
||||
checksum: 10/830bcd0e7628441f91899e8e24aaed66d32a239babcc205aba1d08c08ff5a636d8c04f96d9873578df59d7468fc4c5df032667764b3b2ee0a733af36fca21c4a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/type-utils@npm:8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/type-utils@npm:8.48.0"
|
||||
"@typescript-eslint/type-utils@npm:8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/type-utils@npm:8.48.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/types": "npm:8.48.0"
|
||||
"@typescript-eslint/typescript-estree": "npm:8.48.0"
|
||||
"@typescript-eslint/utils": "npm:8.48.0"
|
||||
"@typescript-eslint/types": "npm:8.48.1"
|
||||
"@typescript-eslint/typescript-estree": "npm:8.48.1"
|
||||
"@typescript-eslint/utils": "npm:8.48.1"
|
||||
debug: "npm:^4.3.4"
|
||||
ts-api-utils: "npm:^2.1.0"
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: ">=4.8.4 <6.0.0"
|
||||
checksum: 10/dfda42624d534f9fed270bd5c76c9c0bb879cccd3dfbfc2977c84489860fbc204f10bca5c69f3ac856cc4342c12f8947293e7449d3391af289620d7ec79ced0d
|
||||
checksum: 10/6cf9370ac5437e2d64c71964646aed9e6c1ea3c7bb473258b50ae422106461d290f4215b9435b892a2dd563e3c31feb3169532375513b56b7e48f4a425283091
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/types@npm:8.48.0, @typescript-eslint/types@npm:^8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/types@npm:8.48.0"
|
||||
checksum: 10/cd14a7ecd1cb6af94e059a713357b9521ffab08b2793a7d33abda7006816e77f634d49d1ec6f1b99b47257a605347d691bd02b2b11477c9c328f2a27f52a664f
|
||||
"@typescript-eslint/types@npm:8.48.1, @typescript-eslint/types@npm:^8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/types@npm:8.48.1"
|
||||
checksum: 10/1aa1e3f25b429bcebd9eb45b5252d950f1b24dbc6014a47dff8d00547e2e1ac47f351846fb996b6ebd49da37a85394051d36191cbbbf2c431b8db9d95afd198d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/typescript-estree@npm:8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/typescript-estree@npm:8.48.0"
|
||||
"@typescript-eslint/typescript-estree@npm:8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/typescript-estree@npm:8.48.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/project-service": "npm:8.48.0"
|
||||
"@typescript-eslint/tsconfig-utils": "npm:8.48.0"
|
||||
"@typescript-eslint/types": "npm:8.48.0"
|
||||
"@typescript-eslint/visitor-keys": "npm:8.48.0"
|
||||
"@typescript-eslint/project-service": "npm:8.48.1"
|
||||
"@typescript-eslint/tsconfig-utils": "npm:8.48.1"
|
||||
"@typescript-eslint/types": "npm:8.48.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:8.48.1"
|
||||
debug: "npm:^4.3.4"
|
||||
minimatch: "npm:^9.0.4"
|
||||
semver: "npm:^7.6.0"
|
||||
@@ -5052,32 +5052,32 @@ __metadata:
|
||||
ts-api-utils: "npm:^2.1.0"
|
||||
peerDependencies:
|
||||
typescript: ">=4.8.4 <6.0.0"
|
||||
checksum: 10/8ee6b9e98dd72d567b8842a695578b2098bd8cdcf5628d2819407a52b533a5a139ba9a5620976641bc4553144a1b971d75f2df218a7c281fe674df25835e9e22
|
||||
checksum: 10/485aa44d22453396dbe61c560c6f583bf876f971d9e70773093cd729279f88184cf5793bf706033bbd8465cce6f9d045b63574727d58d5996519c29e1adbbfe5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/utils@npm:8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/utils@npm:8.48.0"
|
||||
"@typescript-eslint/utils@npm:8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/utils@npm:8.48.1"
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils": "npm:^4.7.0"
|
||||
"@typescript-eslint/scope-manager": "npm:8.48.0"
|
||||
"@typescript-eslint/types": "npm:8.48.0"
|
||||
"@typescript-eslint/typescript-estree": "npm:8.48.0"
|
||||
"@typescript-eslint/scope-manager": "npm:8.48.1"
|
||||
"@typescript-eslint/types": "npm:8.48.1"
|
||||
"@typescript-eslint/typescript-estree": "npm:8.48.1"
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: ">=4.8.4 <6.0.0"
|
||||
checksum: 10/980b9faeaae0357bd7c002b15ab3bbcb7d5e4558be5df7980cf5221b41570a1a7b7d71ea2fcc8b1387f6c0db948d01468e6dcb31230d6757e28ac2ee5d8be4cf
|
||||
checksum: 10/34afe5cf78020b682473e6529d6268eb8015bdb020a3c5303c4abb230d4d7c39e6fc8b9df58d1f0f35a1ceeb5d6182e71e42fe7a28dde8ffc31f8560f2dacc7c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/visitor-keys@npm:8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "@typescript-eslint/visitor-keys@npm:8.48.0"
|
||||
"@typescript-eslint/visitor-keys@npm:8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "@typescript-eslint/visitor-keys@npm:8.48.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/types": "npm:8.48.0"
|
||||
"@typescript-eslint/types": "npm:8.48.1"
|
||||
eslint-visitor-keys: "npm:^4.2.1"
|
||||
checksum: 10/f9eaff8225b3b00e486e0221bd596b08a3ed463f31fab88221256908f6208c48f745281b7b92e6358d25e1dbdc37c6c2f4b42503403c24b071165bafd9a35d52
|
||||
checksum: 10/63aa165c57e6b38700adf84da2e90537577cdeb69d05031e3e70785fa412d96d539dc4c1696a0b7bc93284613f8b92fb1bb40f6068bb75347a942120b246ac60
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -9250,8 +9250,8 @@ __metadata:
|
||||
"@octokit/plugin-retry": "npm:8.0.3"
|
||||
"@octokit/rest": "npm:22.0.1"
|
||||
"@replit/codemirror-indentation-markers": "npm:6.5.3"
|
||||
"@rsdoctor/rspack-plugin": "npm:1.3.11"
|
||||
"@rspack/core": "npm:1.6.5"
|
||||
"@rsdoctor/rspack-plugin": "npm:1.3.12"
|
||||
"@rspack/core": "npm:1.6.6"
|
||||
"@rspack/dev-server": "npm:1.1.4"
|
||||
"@swc/helpers": "npm:0.5.17"
|
||||
"@thomasloven/round-slider": "npm:0.6.0"
|
||||
@@ -9360,7 +9360,7 @@ __metadata:
|
||||
tinykeys: "npm:3.0.0"
|
||||
ts-lit-plugin: "npm:2.0.2"
|
||||
typescript: "npm:5.9.3"
|
||||
typescript-eslint: "npm:8.48.0"
|
||||
typescript-eslint: "npm:8.48.1"
|
||||
ua-parser-js: "npm:2.0.6"
|
||||
vite-tsconfig-paths: "npm:5.1.4"
|
||||
vitest: "npm:4.0.14"
|
||||
@@ -14321,18 +14321,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript-eslint@npm:8.48.0":
|
||||
version: 8.48.0
|
||||
resolution: "typescript-eslint@npm:8.48.0"
|
||||
"typescript-eslint@npm:8.48.1":
|
||||
version: 8.48.1
|
||||
resolution: "typescript-eslint@npm:8.48.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin": "npm:8.48.0"
|
||||
"@typescript-eslint/parser": "npm:8.48.0"
|
||||
"@typescript-eslint/typescript-estree": "npm:8.48.0"
|
||||
"@typescript-eslint/utils": "npm:8.48.0"
|
||||
"@typescript-eslint/eslint-plugin": "npm:8.48.1"
|
||||
"@typescript-eslint/parser": "npm:8.48.1"
|
||||
"@typescript-eslint/typescript-estree": "npm:8.48.1"
|
||||
"@typescript-eslint/utils": "npm:8.48.1"
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: ">=4.8.4 <6.0.0"
|
||||
checksum: 10/9be54df60faf3b5a6d255032b4478170b6f64e38b8396475a2049479d1e3c1f5a23a18bb4d2d6ff685ef92ff8f2af28215772fe33b48148a8cf83a724d0778d1
|
||||
checksum: 10/2b5318d74f9b8c4cd5d253b4d5249a184a0c5ed9eaf998a604c0d7b816acdc04f40570964d35fc5c93d40171ed3d95b8eef721578b7bedc8433607f4f7e59520
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
Reference in New Issue
Block a user