Compare commits

..

9 Commits

Author SHA1 Message Date
Paul Bottein
431e533929 20250925.0 (#27170) 2025-09-25 10:48:30 +02:00
Paul Bottein
02c845cbc6 Bumped version to 20250925.0 2025-09-25 10:47:41 +02:00
Paul Bottein
628111ed20 Bumped version to 20250924.1 2025-09-25 10:46:44 +02:00
Paul Bottein
e825a9c02f Smooth animation of the sidebar resizing handle (#27166) 2025-09-25 10:46:36 +02:00
Paul Bottein
7a35bddf36 Fix safe padding for bottom sheet and add scroll lock (#27165) 2025-09-25 10:46:35 +02:00
Norbert Rittel
ad69270af8 Use "Add (person)" instead of "New person" / "Create" (#27161)
* Update dialog-person-detail.ts

* Update en.json
2025-09-25 10:46:34 +02:00
Paulus Schoutsen
404edf9483 Avoid invalid entities in common controls (#27158) 2025-09-25 10:46:33 +02:00
Paul Bottein
a166b4e9b6 Do not show error message when action has no response in dev tools (#27156) 2025-09-25 10:46:32 +02:00
Paul Bottein
7a285f11db 20250924.0 (#27155) 2025-09-24 17:15:37 +02:00
10 changed files with 255 additions and 207 deletions

View File

@@ -158,7 +158,7 @@
"@octokit/plugin-retry": "8.0.1",
"@octokit/rest": "22.0.0",
"@rsdoctor/rspack-plugin": "1.2.3",
"@rspack/core": "1.5.6",
"@rspack/core": "1.5.5",
"@rspack/dev-server": "1.1.4",
"@types/babel__plugin-transform-runtime": "7.9.5",
"@types/chromecast-caf-receiver": "6.0.24",
@@ -203,7 +203,7 @@
"husky": "9.1.7",
"jsdom": "27.0.0",
"jszip": "3.10.1",
"lint-staged": "16.2.0",
"lint-staged": "16.1.6",
"lit-analyzer": "2.0.3",
"lodash.merge": "4.6.2",
"lodash.template": "4.5.0",
@@ -213,7 +213,7 @@
"rspack-manifest-plugin": "5.1.0",
"serve": "14.2.5",
"sinon": "21.0.0",
"tar": "7.4.4",
"tar": "7.4.3",
"terser-webpack-plugin": "5.3.14",
"ts-lit-plugin": "2.0.2",
"typescript": "5.9.2",

View File

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "home-assistant-frontend"
version = "20250924.0"
version = "20250925.0"
license = "Apache-2.0"
license-files = ["LICENSE*"]
description = "The Home Assistant frontend"

View File

@@ -1,22 +1,21 @@
import type { LineSeriesOption } from "echarts";
export function downSampleLineData<
T extends [number, number] | NonNullable<LineSeriesOption["data"]>[number],
>(
data: T[] | undefined,
maxDetails: number,
export function downSampleLineData(
data: LineSeriesOption["data"],
chartWidth: number,
minX?: number,
maxX?: number
): T[] {
if (!data) {
return [];
) {
if (!data || data.length < 10) {
return data;
}
if (data.length <= maxDetails) {
const width = chartWidth * window.devicePixelRatio;
if (data.length <= width) {
return data;
}
const min = minX ?? getPointData(data[0]!)[0];
const max = maxX ?? getPointData(data[data.length - 1]!)[0];
const step = Math.ceil((max - min) / Math.floor(maxDetails));
const step = Math.floor((max - min) / width);
const frames = new Map<
number,
{
@@ -48,7 +47,7 @@ export function downSampleLineData<
}
// Convert frames back to points
const result: T[] = [];
const result: typeof data = [];
for (const [_i, frame] of frames) {
// Use min/max points to preserve visual accuracy
// The order of the data must be preserved so max may be before min

View File

@@ -804,7 +804,7 @@ export class HaChartBase extends LitElement {
sampling: undefined,
data: downSampleLineData(
data as LineSeriesOption["data"],
this.clientWidth * window.devicePixelRatio,
this.clientWidth,
minX,
maxX
),

View File

@@ -18,8 +18,6 @@ export class HaTabGroupTab extends Tab {
opacity: 0.8;
color: inherit;
--wa-space-l: 16px;
}
:host([active]:not([disabled])) {

View File

@@ -43,8 +43,6 @@ class HuiHistoryChartCardFeature
@state() private _coordinates?: [number, number][];
@state() private _yAxisOrigin?: number;
private _interval?: number;
static getStubConfig(): TrendGraphCardFeatureConfig {
@@ -107,10 +105,7 @@ class HuiHistoryChartCardFeature
`;
}
return html`
<hui-graph-base
.coordinates=${this._coordinates}
.yAxisOrigin=${this._yAxisOrigin}
></hui-graph-base>
<hui-graph-base .coordinates=${this._coordinates}></hui-graph-base>
`;
}
@@ -128,15 +123,14 @@ class HuiHistoryChartCardFeature
return subscribeHistoryStatesTimeWindow(
this.hass!,
(historyStates) => {
const { points, yAxisOrigin } =
this._coordinates =
coordinatesMinimalResponseCompressedState(
historyStates[this.context!.entity_id!],
this.clientWidth,
this.clientHeight,
this.clientWidth / 5 // sample to 1 point per 5 pixels
);
this._coordinates = points;
this._yAxisOrigin = yAxisOrigin;
hourToShow,
500,
2,
undefined
) || [];
},
hourToShow,
[this.context!.entity_id!]

View File

@@ -1,85 +1,134 @@
import { downSampleLineData } from "../../../../components/chart/down-sample";
import { strokeWidth } from "../../../../data/graph";
import type { EntityHistoryState } from "../../../../data/history";
const average = (items: any[]): number =>
items.reduce((sum, entry) => sum + parseFloat(entry.state), 0) / items.length;
const lastValue = (items: any[]): number =>
parseFloat(items[items.length - 1].state) || 0;
const calcPoints = (
history: [number, number][],
history: any,
hours: number,
width: number,
height: number,
limits?: { minX?: number; maxX?: number; minY?: number; maxY?: number }
) => {
let yAxisOrigin = height;
let minY = limits?.minY ?? history[0][1];
let maxY = limits?.maxY ?? history[0][1];
const minX = limits?.minX ?? history[0][0];
const maxX = limits?.maxX ?? history[history.length - 1][0];
history.forEach(([_, stateValue]) => {
if (stateValue < minY) {
minY = stateValue;
} else if (stateValue > maxY) {
maxY = stateValue;
}
});
const rangeY = maxY - minY || minY * 0.1;
if (maxY < 0) {
// all values are negative
// add margin
maxY += rangeY * 0.1;
maxY = Math.min(0, maxY);
yAxisOrigin = 0;
} else if (minY < 0) {
// some values are negative
yAxisOrigin = (maxY / (maxY - minY || 1)) * height;
} else {
// all values are positive
// add margin
minY -= rangeY * 0.1;
minY = Math.max(0, minY);
detail: number,
min: number,
max: number
): [number, number][] => {
const coords = [] as [number, number][];
const height = 80;
let yRatio = (max - min) / height;
yRatio = yRatio !== 0 ? yRatio : height;
let xRatio = width / (hours - (detail === 1 ? 1 : 0));
xRatio = isFinite(xRatio) ? xRatio : width;
let first = history.filter(Boolean)[0];
if (detail > 1) {
first = first.filter(Boolean)[0];
}
const yDenom = maxY - minY || 1;
const xDenom = maxX - minX || 1;
const points: [number, number][] = history.map((point) => {
const x = ((point[0] - minX) / xDenom) * width;
const y = height - ((point[1] - minY) / yDenom) * height;
return [x, y];
});
points.push([width, points[points.length - 1][1]]);
return { points, yAxisOrigin };
let last = [average(first), lastValue(first)];
const getY = (value: number): number =>
height + strokeWidth / 2 - (value - min) / yRatio;
const getCoords = (item: any[], i: number, offset = 0, depth = 1) => {
if (depth > 1 && item) {
return item.forEach((subItem, index) =>
getCoords(subItem, i, index, depth - 1)
);
}
const x = xRatio * (i + offset / 6);
if (item) {
last = [average(item), lastValue(item)];
}
const y = getY(item ? last[0] : last[1]);
return coords.push([x, y]);
};
for (let i = 0; i < history.length; i += 1) {
getCoords(history[i], i, 0, detail);
}
coords.push([width, getY(last[1])]);
return coords;
};
export const coordinates = (
history: [number, number][],
history: any,
hours: number,
width: number,
height: number,
maxDetails: number,
limits?: { minX?: number; maxX?: number; minY?: number; maxY?: number }
) => {
history = history.filter((item) => !Number.isNaN(item[1]));
detail: number,
limits?: { min?: number; max?: number }
): [number, number][] | undefined => {
history.forEach((item) => {
item.state = Number(item.state);
});
history = history.filter((item) => !Number.isNaN(item.state));
const sampledData: [number, number][] = downSampleLineData(
history,
maxDetails,
limits?.minX,
limits?.maxX
);
return calcPoints(sampledData, width, height, limits);
const min =
limits?.min !== undefined
? limits.min
: Math.min(...history.map((item) => item.state));
const max =
limits?.max !== undefined
? limits.max
: Math.max(...history.map((item) => item.state));
const now = new Date().getTime();
const reduce = (res, item, point) => {
const age = now - new Date(item.last_changed).getTime();
let key = Math.abs(age / (1000 * 3600) - hours);
if (point) {
key = (key - Math.floor(key)) * 60;
key = Number((Math.round(key / 10) * 10).toString()[0]);
} else {
key = Math.floor(key);
}
if (!res[key]) {
res[key] = [];
}
res[key].push(item);
return res;
};
history = history.reduce((res, item) => reduce(res, item, false), []);
if (detail > 1) {
history = history.map((entry) =>
entry.reduce((res, item) => reduce(res, item, true), [])
);
}
if (!history.length) {
return undefined;
}
return calcPoints(history, hours, width, detail, min, max);
};
interface NumericEntityHistoryState {
state: number;
last_changed: number;
}
export const coordinatesMinimalResponseCompressedState = (
history: EntityHistoryState[] | undefined,
history: EntityHistoryState[],
hours: number,
width: number,
height: number,
maxDetails: number,
limits?: { minX?: number; maxX?: number; minY?: number; maxY?: number }
) => {
if (!history?.length) {
return { points: [], yAxisOrigin: 0 };
detail: number,
limits?: { min?: number; max?: number }
): [number, number][] | undefined => {
if (!history) {
return undefined;
}
const mappedHistory: [number, number][] = history.map((item) => [
const numericHistory: NumericEntityHistoryState[] = history.map((item) => ({
state: Number(item.s),
// With minimal response and compressed state, we don't have last_changed,
// so we use last_updated since its always the same as last_changed since
// we already filtered out states that are the same.
item.lu * 1000,
Number(item.s),
]);
return coordinates(mappedHistory, width, height, maxDetails, limits);
last_changed: item.lu * 1000,
}));
return coordinates(numericHistory, hours, width, detail, limits);
};

View File

@@ -6,26 +6,20 @@ import { getPath } from "../common/graph/get-path";
@customElement("hui-graph-base")
export class HuiGraphBase extends LitElement {
@property({ attribute: false }) public coordinates?: number[][];
@property({ attribute: "y-axis-origin", type: Number })
public yAxisOrigin?: number;
@property() public coordinates?: any;
@state() private _path?: string;
protected render(): TemplateResult {
const width = this.clientWidth || 500;
const height = this.clientHeight || width / 5;
const yAxisOrigin = this.yAxisOrigin ?? height;
return html`
${this._path
? svg`<svg width="100%" height="100%" viewBox="0 0 ${width} ${height}" preserveAspectRatio="none">
? svg`<svg width="100%" height="100%" viewBox="0 0 500 100" preserveAspectRatio="none">
<g>
<mask id="fill">
<path
class='fill'
fill='white'
d="${this._path} L ${width}, ${yAxisOrigin} L 0, ${yAxisOrigin} z"
d="${this._path} L 500, 100 L 0, 100 z"
/>
</mask>
<rect height="100%" width="100%" id="fill-rect" fill="var(--accent-color)" mask="url(#fill)"></rect>
@@ -44,7 +38,7 @@ export class HuiGraphBase extends LitElement {
<rect height="100%" width="100%" id="rect" fill="var(--accent-color)" mask="url(#line)"></rect>
</g>
</svg>`
: svg`<svg width="100%" height="100%" viewBox="0 0 ${width} ${height}"></svg>`}
: svg`<svg width="100%" height="100%" viewBox="0 0 500 100"></svg>`}
`;
}

View File

@@ -153,20 +153,14 @@ export class HuiGraphHeaderFooter
// Message came in before we had a chance to unload
return;
}
const width = this.clientWidth || this.offsetWidth;
// sample to 1 point per hour or 1 point per 5 pixels
const maxDetails =
this._config.detail! > 1
? Math.max(width / 5, this._config.hours_to_show!)
: this._config.hours_to_show!;
const { points } = coordinatesMinimalResponseCompressedState(
combinedHistory[this._config.entity],
width,
width / 5,
maxDetails,
{ minY: this._config.limits?.min, maxY: this._config.limits?.max }
);
this._coordinates = points;
this._coordinates =
coordinatesMinimalResponseCompressedState(
combinedHistory[this._config.entity],
this._config.hours_to_show!,
500,
this._config.detail!,
this._config.limits
) || [];
},
this._config.hours_to_show!,
[this._config.entity]

192
yarn.lock
View File

@@ -4052,92 +4052,92 @@ __metadata:
languageName: node
linkType: hard
"@rspack/binding-darwin-arm64@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-darwin-arm64@npm:1.5.6"
"@rspack/binding-darwin-arm64@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-darwin-arm64@npm:1.5.5"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@rspack/binding-darwin-x64@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-darwin-x64@npm:1.5.6"
"@rspack/binding-darwin-x64@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-darwin-x64@npm:1.5.5"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@rspack/binding-linux-arm64-gnu@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-linux-arm64-gnu@npm:1.5.6"
"@rspack/binding-linux-arm64-gnu@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-linux-arm64-gnu@npm:1.5.5"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@rspack/binding-linux-arm64-musl@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-linux-arm64-musl@npm:1.5.6"
"@rspack/binding-linux-arm64-musl@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-linux-arm64-musl@npm:1.5.5"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@rspack/binding-linux-x64-gnu@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-linux-x64-gnu@npm:1.5.6"
"@rspack/binding-linux-x64-gnu@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-linux-x64-gnu@npm:1.5.5"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@rspack/binding-linux-x64-musl@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-linux-x64-musl@npm:1.5.6"
"@rspack/binding-linux-x64-musl@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-linux-x64-musl@npm:1.5.5"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@rspack/binding-wasm32-wasi@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-wasm32-wasi@npm:1.5.6"
"@rspack/binding-wasm32-wasi@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-wasm32-wasi@npm:1.5.5"
dependencies:
"@napi-rs/wasm-runtime": "npm:^1.0.5"
conditions: cpu=wasm32
languageName: node
linkType: hard
"@rspack/binding-win32-arm64-msvc@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-win32-arm64-msvc@npm:1.5.6"
"@rspack/binding-win32-arm64-msvc@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-win32-arm64-msvc@npm:1.5.5"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@rspack/binding-win32-ia32-msvc@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-win32-ia32-msvc@npm:1.5.6"
"@rspack/binding-win32-ia32-msvc@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-win32-ia32-msvc@npm:1.5.5"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@rspack/binding-win32-x64-msvc@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding-win32-x64-msvc@npm:1.5.6"
"@rspack/binding-win32-x64-msvc@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding-win32-x64-msvc@npm:1.5.5"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@rspack/binding@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/binding@npm:1.5.6"
"@rspack/binding@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/binding@npm:1.5.5"
dependencies:
"@rspack/binding-darwin-arm64": "npm:1.5.6"
"@rspack/binding-darwin-x64": "npm:1.5.6"
"@rspack/binding-linux-arm64-gnu": "npm:1.5.6"
"@rspack/binding-linux-arm64-musl": "npm:1.5.6"
"@rspack/binding-linux-x64-gnu": "npm:1.5.6"
"@rspack/binding-linux-x64-musl": "npm:1.5.6"
"@rspack/binding-wasm32-wasi": "npm:1.5.6"
"@rspack/binding-win32-arm64-msvc": "npm:1.5.6"
"@rspack/binding-win32-ia32-msvc": "npm:1.5.6"
"@rspack/binding-win32-x64-msvc": "npm:1.5.6"
"@rspack/binding-darwin-arm64": "npm:1.5.5"
"@rspack/binding-darwin-x64": "npm:1.5.5"
"@rspack/binding-linux-arm64-gnu": "npm:1.5.5"
"@rspack/binding-linux-arm64-musl": "npm:1.5.5"
"@rspack/binding-linux-x64-gnu": "npm:1.5.5"
"@rspack/binding-linux-x64-musl": "npm:1.5.5"
"@rspack/binding-wasm32-wasi": "npm:1.5.5"
"@rspack/binding-win32-arm64-msvc": "npm:1.5.5"
"@rspack/binding-win32-ia32-msvc": "npm:1.5.5"
"@rspack/binding-win32-x64-msvc": "npm:1.5.5"
dependenciesMeta:
"@rspack/binding-darwin-arm64":
optional: true
@@ -4159,23 +4159,23 @@ __metadata:
optional: true
"@rspack/binding-win32-x64-msvc":
optional: true
checksum: 10/852113a80ff7396257426a6a3a6c6fd47f5743c7304b90de9d348ed0496e5f335bcc0617f857be2d9e836fa610dd7a3952a1a834b756a228c4913acb78a3d3fa
checksum: 10/65b71796a3e8f1bc5a374253aafc128076cf1b02ac0ae8484eff897420152f1863c153dd9195ba84a8d2c4a41ab8a41d590b0645308f6035ab188c9c3d33b214
languageName: node
linkType: hard
"@rspack/core@npm:1.5.6":
version: 1.5.6
resolution: "@rspack/core@npm:1.5.6"
"@rspack/core@npm:1.5.5":
version: 1.5.5
resolution: "@rspack/core@npm:1.5.5"
dependencies:
"@module-federation/runtime-tools": "npm:0.18.0"
"@rspack/binding": "npm:1.5.6"
"@rspack/binding": "npm:1.5.5"
"@rspack/lite-tapable": "npm:1.0.1"
peerDependencies:
"@swc/helpers": ">=0.5.1"
peerDependenciesMeta:
"@swc/helpers":
optional: true
checksum: 10/50814815c63b611c2e9a7724dfa194e8b52e7232fa18637ef17c6de79c36ceb798f1fd7501e869b24a4f4f4ab6c198c5ce43884be81e7421c82a0e4880dc9600
checksum: 10/864e16e3370ee09cbe26a29220a59392f10e61b8ae1e258139c9939c2ecc20c8899e92357e67bdb81603ce102baa46e5bef916de3b39000828d40c54158ab816
languageName: node
linkType: hard
@@ -6621,7 +6621,7 @@ __metadata:
languageName: node
linkType: hard
"chalk@npm:^5.0.1":
"chalk@npm:^5.0.1, chalk@npm:^5.6.0":
version: 5.6.2
resolution: "chalk@npm:5.6.2"
checksum: 10/1b2f48f6fba1370670d5610f9cd54c391d6ede28f4b7062dd38244ea5768777af72e5be6b74fb6c6d54cb84c4a2dff3f3afa9b7cb5948f7f022cfd3d087989e0
@@ -6850,13 +6850,6 @@ __metadata:
languageName: node
linkType: hard
"commander@npm:14.0.1":
version: 14.0.1
resolution: "commander@npm:14.0.1"
checksum: 10/783115e9403caeca29c0fcbd4e0358f70c67760e4e4933f3453fcdd5ddba2ec44173c8da5213d7ce5e404f51c7e71203a42c548164dbe27b668b32a8981577f1
languageName: node
linkType: hard
"commander@npm:^10.0.0":
version: 10.0.1
resolution: "commander@npm:10.0.1"
@@ -6864,6 +6857,13 @@ __metadata:
languageName: node
linkType: hard
"commander@npm:^14.0.0":
version: 14.0.1
resolution: "commander@npm:14.0.1"
checksum: 10/783115e9403caeca29c0fcbd4e0358f70c67760e4e4933f3453fcdd5ddba2ec44173c8da5213d7ce5e404f51c7e71203a42c548164dbe27b668b32a8981577f1
languageName: node
linkType: hard
"commander@npm:^2.20.0, commander@npm:^2.20.3":
version: 2.20.3
resolution: "commander@npm:2.20.3"
@@ -9435,7 +9435,7 @@ __metadata:
"@octokit/rest": "npm:22.0.0"
"@replit/codemirror-indentation-markers": "npm:6.5.3"
"@rsdoctor/rspack-plugin": "npm:1.2.3"
"@rspack/core": "npm:1.5.6"
"@rspack/core": "npm:1.5.5"
"@rspack/dev-server": "npm:1.1.4"
"@swc/helpers": "npm:0.5.17"
"@thomasloven/round-slider": "npm:0.6.0"
@@ -9514,7 +9514,7 @@ __metadata:
leaflet: "npm:1.9.4"
leaflet-draw: "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch"
leaflet.markercluster: "npm:1.5.3"
lint-staged: "npm:16.2.0"
lint-staged: "npm:16.1.6"
lit: "npm:3.3.1"
lit-analyzer: "npm:2.0.3"
lit-html: "npm:3.3.1"
@@ -9539,7 +9539,7 @@ __metadata:
sortablejs: "patch:sortablejs@npm%3A1.15.6#~/.yarn/patches/sortablejs-npm-1.15.6-3235a8f83b.patch"
stacktrace-js: "npm:2.0.2"
superstruct: "npm:2.0.2"
tar: "npm:7.4.4"
tar: "npm:7.4.3"
terser-webpack-plugin: "npm:5.3.14"
tinykeys: "npm:3.0.0"
ts-lit-plugin: "npm:2.0.2"
@@ -10861,6 +10861,13 @@ __metadata:
languageName: node
linkType: hard
"lilconfig@npm:^3.1.3":
version: 3.1.3
resolution: "lilconfig@npm:3.1.3"
checksum: 10/b932ce1af94985f0efbe8896e57b1f814a48c8dbd7fc0ef8469785c6303ed29d0090af3ccad7e36b626bfca3a4dc56cc262697e9a8dd867623cf09a39d54e4c3
languageName: node
linkType: hard
"lines-and-columns@npm:2.0.4":
version: 2.0.4
resolution: "lines-and-columns@npm:2.0.4"
@@ -10868,24 +10875,27 @@ __metadata:
languageName: node
linkType: hard
"lint-staged@npm:16.2.0":
version: 16.2.0
resolution: "lint-staged@npm:16.2.0"
"lint-staged@npm:16.1.6":
version: 16.1.6
resolution: "lint-staged@npm:16.1.6"
dependencies:
commander: "npm:14.0.1"
listr2: "npm:9.0.4"
micromatch: "npm:4.0.8"
nano-spawn: "npm:1.0.3"
pidtree: "npm:0.6.0"
string-argv: "npm:0.3.2"
yaml: "npm:2.8.1"
chalk: "npm:^5.6.0"
commander: "npm:^14.0.0"
debug: "npm:^4.4.1"
lilconfig: "npm:^3.1.3"
listr2: "npm:^9.0.3"
micromatch: "npm:^4.0.8"
nano-spawn: "npm:^1.0.2"
pidtree: "npm:^0.6.0"
string-argv: "npm:^0.3.2"
yaml: "npm:^2.8.1"
bin:
lint-staged: bin/lint-staged.js
checksum: 10/809a42e21f2634c1a3e718dfb25786275a13b51c0cfaef6bb4bed509c656d31ee9b3e6231df55223b4b60cb37e4b5e3ebd958b239cabb529d2d07253cf7e1726
checksum: 10/922b4392ae5d3d56130e4eba706c2fa6151d5da5e21f57ab601b1d6ce9cc635ceb5e4c3dc00e7da83ba8f0cb244b82604469c7ea1470b1e6b6ea0fc12454aa08
languageName: node
linkType: hard
"listr2@npm:9.0.4":
"listr2@npm:^9.0.3":
version: 9.0.4
resolution: "listr2@npm:9.0.4"
dependencies:
@@ -11262,7 +11272,7 @@ __metadata:
languageName: node
linkType: hard
"micromatch@npm:4.0.8, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.8":
"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.8":
version: 4.0.8
resolution: "micromatch@npm:4.0.8"
dependencies:
@@ -11467,12 +11477,21 @@ __metadata:
languageName: node
linkType: hard
"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0":
version: 3.1.0
resolution: "minizlib@npm:3.1.0"
"minizlib@npm:^3.0.1":
version: 3.0.2
resolution: "minizlib@npm:3.0.2"
dependencies:
minipass: "npm:^7.1.2"
checksum: 10/f47365cc2cb7f078cbe7e046eb52655e2e7e97f8c0a9a674f4da60d94fb0624edfcec9b5db32e8ba5a99a5f036f595680ae6fe02a262beaa73026e505cc52f99
checksum: 10/c075bed1594f68dcc8c35122333520112daefd4d070e5d0a228bd4cf5580e9eed3981b96c0ae1d62488e204e80fd27b2b9d0068ca9a5ef3993e9565faf63ca41
languageName: node
linkType: hard
"mkdirp@npm:^3.0.1":
version: 3.0.1
resolution: "mkdirp@npm:3.0.1"
bin:
mkdirp: dist/cjs/src/bin.js
checksum: 10/16fd79c28645759505914561e249b9a1f5fe3362279ad95487a4501e4467abeb714fd35b95307326b8fd03f3c7719065ef11a6f97b7285d7888306d1bd2232ba
languageName: node
linkType: hard
@@ -11516,7 +11535,7 @@ __metadata:
languageName: node
linkType: hard
"nano-spawn@npm:1.0.3":
"nano-spawn@npm:^1.0.2":
version: 1.0.3
resolution: "nano-spawn@npm:1.0.3"
checksum: 10/72c56e68ae733c81c459a338fd51e2aa3be06b1cca746c2abe83df7acfac7eee008b01833f5a8781f4ac9fc1eafd23036a44755257a669dfcc2ff2453850822a
@@ -12240,7 +12259,7 @@ __metadata:
languageName: node
linkType: hard
"pidtree@npm:0.6.0":
"pidtree@npm:^0.6.0":
version: 0.6.0
resolution: "pidtree@npm:0.6.0"
bin:
@@ -13767,7 +13786,7 @@ __metadata:
languageName: node
linkType: hard
"string-argv@npm:0.3.2":
"string-argv@npm:^0.3.2":
version: 0.3.2
resolution: "string-argv@npm:0.3.2"
checksum: 10/f9d3addf887026b4b5f997a271149e93bf71efc8692e7dc0816e8807f960b18bcb9787b45beedf0f97ff459575ee389af3f189d8b649834cac602f2e857e75af
@@ -14079,16 +14098,17 @@ __metadata:
languageName: node
linkType: hard
"tar@npm:7.4.4, tar@npm:^7.4.3":
version: 7.4.4
resolution: "tar@npm:7.4.4"
"tar@npm:7.4.3, tar@npm:^7.4.3":
version: 7.4.3
resolution: "tar@npm:7.4.3"
dependencies:
"@isaacs/fs-minipass": "npm:^4.0.0"
chownr: "npm:^3.0.0"
minipass: "npm:^7.1.2"
minizlib: "npm:^3.1.0"
minizlib: "npm:^3.0.1"
mkdirp: "npm:^3.0.1"
yallist: "npm:^5.0.0"
checksum: 10/be7d95e019b029ac507e7cd4b23c243ba896b67d0837c4f53d18c32a5014a24b7b247e982f4d47147b8d637c491b35cc122e19e29246137ecb2b88a495aaf1fb
checksum: 10/12a2a4fc6dee23e07cc47f1aeb3a14a1afd3f16397e1350036a8f4cdfee8dcac7ef5978337a4e7b2ac2c27a9a6d46388fc2088ea7c80cb6878c814b1425f8ecf
languageName: node
linkType: hard
@@ -16006,7 +16026,7 @@ __metadata:
languageName: node
linkType: hard
"yaml@npm:2.8.1":
"yaml@npm:^2.8.1":
version: 2.8.1
resolution: "yaml@npm:2.8.1"
bin: