mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
20230302.0 (#15678)
This commit is contained in:
commit
a57609380a
@ -117,7 +117,11 @@ module.exports.babelOptions = ({ latestBuild, isProdBuild }) => ({
|
|||||||
"template-html-minifier",
|
"template-html-minifier",
|
||||||
{
|
{
|
||||||
modules: {
|
modules: {
|
||||||
lit: ["html", "svg", { name: "css", encapsulation: "style" }],
|
lit: [
|
||||||
|
"html",
|
||||||
|
{ name: "svg", encapsulation: "svg" },
|
||||||
|
{ name: "css", encapsulation: "style" },
|
||||||
|
],
|
||||||
"@polymer/polymer/lib/utils/html-tag": ["html"],
|
"@polymer/polymer/lib/utils/html-tag": ["html"],
|
||||||
},
|
},
|
||||||
strictCSS: true,
|
strictCSS: true,
|
||||||
|
@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "home-assistant-frontend"
|
name = "home-assistant-frontend"
|
||||||
version = "20230301.0"
|
version = "20230302.0"
|
||||||
license = {text = "Apache-2.0"}
|
license = {text = "Apache-2.0"}
|
||||||
description = "The Home Assistant frontend"
|
description = "The Home Assistant frontend"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
@ -77,6 +77,26 @@ export const formatNumber = (
|
|||||||
).format(Number(num));
|
).format(Number(num));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
!Number.isNaN(Number(num)) &&
|
||||||
|
num !== "" &&
|
||||||
|
localeOptions?.number_format === NumberFormat.none &&
|
||||||
|
Intl &&
|
||||||
|
(options?.maximumFractionDigits != null ||
|
||||||
|
options?.minimumFractionDigits != null)
|
||||||
|
) {
|
||||||
|
// If NumberFormat is none, just set the digits options for precision and use en-US format without grouping.
|
||||||
|
return new Intl.NumberFormat(
|
||||||
|
"en-US",
|
||||||
|
getDefaultFormatOptions(num, {
|
||||||
|
useGrouping: false,
|
||||||
|
maximumFractionDigits: options?.maximumFractionDigits,
|
||||||
|
minimumFractionDigits: options?.minimumFractionDigits,
|
||||||
|
})
|
||||||
|
).format(Number(num));
|
||||||
|
}
|
||||||
|
|
||||||
if (typeof num === "string") {
|
if (typeof num === "string") {
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,9 @@ export class HaMoreInfoToggle extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected render(): TemplateResult {
|
protected render(): TemplateResult {
|
||||||
const color = stateColorCss(this.stateObj);
|
const onColor = stateColorCss(this.stateObj, "on");
|
||||||
|
const offColor = stateColorCss(this.stateObj, "off");
|
||||||
|
|
||||||
const isOn = this.stateObj.state === "on";
|
const isOn = this.stateObj.state === "on";
|
||||||
const isOff = this.stateObj.state === "off";
|
const isOff = this.stateObj.state === "off";
|
||||||
|
|
||||||
@ -82,7 +84,7 @@ export class HaMoreInfoToggle extends LitElement {
|
|||||||
active: isOn,
|
active: isOn,
|
||||||
})}
|
})}
|
||||||
style=${styleMap({
|
style=${styleMap({
|
||||||
"--color": color,
|
"--color": onColor,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<ha-svg-icon .path=${this.iconPathOn || mdiFlash}></ha-svg-icon>
|
<ha-svg-icon .path=${this.iconPathOn || mdiFlash}></ha-svg-icon>
|
||||||
@ -97,7 +99,7 @@ export class HaMoreInfoToggle extends LitElement {
|
|||||||
active: isOff,
|
active: isOff,
|
||||||
})}
|
})}
|
||||||
style=${styleMap({
|
style=${styleMap({
|
||||||
"--color": color,
|
"--color": offColor,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<ha-svg-icon .path=${this.iconPathOff || mdiFlashOff}></ha-svg-icon>
|
<ha-svg-icon .path=${this.iconPathOff || mdiFlashOff}></ha-svg-icon>
|
||||||
@ -117,7 +119,8 @@ export class HaMoreInfoToggle extends LitElement {
|
|||||||
@change=${this._valueChanged}
|
@change=${this._valueChanged}
|
||||||
.ariaLabel=${this.hass.localize("ui.dialogs.more_info_control.toggle")}
|
.ariaLabel=${this.hass.localize("ui.dialogs.more_info_control.toggle")}
|
||||||
style=${styleMap({
|
style=${styleMap({
|
||||||
"--control-switch-on-color": color,
|
"--control-switch-on-color": onColor,
|
||||||
|
"--control-switch-off-color": offColor,
|
||||||
})}
|
})}
|
||||||
.disabled=${this.stateObj.state === UNAVAILABLE}
|
.disabled=${this.stateObj.state === UNAVAILABLE}
|
||||||
>
|
>
|
||||||
|
@ -16,7 +16,12 @@ export const EDITABLE_DOMAINS_WITH_ID = ["scene", "automation"];
|
|||||||
* */
|
* */
|
||||||
export const EDITABLE_DOMAINS_WITH_UNIQUE_ID = ["script"];
|
export const EDITABLE_DOMAINS_WITH_UNIQUE_ID = ["script"];
|
||||||
/** Domains with with new more info design. */
|
/** Domains with with new more info design. */
|
||||||
export const DOMAINS_WITH_NEW_MORE_INFO = ["light", "siren", "switch"];
|
export const DOMAINS_WITH_NEW_MORE_INFO = [
|
||||||
|
"input_boolean",
|
||||||
|
"light",
|
||||||
|
"siren",
|
||||||
|
"switch",
|
||||||
|
];
|
||||||
/** Domains with separate more info dialog. */
|
/** Domains with separate more info dialog. */
|
||||||
export const DOMAINS_WITH_MORE_INFO = [
|
export const DOMAINS_WITH_MORE_INFO = [
|
||||||
"alarm_control_panel",
|
"alarm_control_panel",
|
||||||
@ -29,6 +34,7 @@ export const DOMAINS_WITH_MORE_INFO = [
|
|||||||
"fan",
|
"fan",
|
||||||
"group",
|
"group",
|
||||||
"humidifier",
|
"humidifier",
|
||||||
|
"input_boolean",
|
||||||
"input_datetime",
|
"input_datetime",
|
||||||
"light",
|
"light",
|
||||||
"lock",
|
"lock",
|
||||||
|
51
src/dialogs/more-info/controls/more-info-input_boolean.ts
Normal file
51
src/dialogs/more-info/controls/more-info-input_boolean.ts
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import { mdiPower, mdiPowerOff } from "@mdi/js";
|
||||||
|
import { HassEntity } from "home-assistant-js-websocket";
|
||||||
|
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
||||||
|
import { customElement, property } from "lit/decorators";
|
||||||
|
import "../../../components/ha-attributes";
|
||||||
|
import type { HomeAssistant } from "../../../types";
|
||||||
|
import { moreInfoControlStyle } from "../components/ha-more-info-control-style";
|
||||||
|
import "../components/ha-more-info-state-header";
|
||||||
|
import "../components/ha-more-info-toggle";
|
||||||
|
|
||||||
|
@customElement("more-info-input_boolean")
|
||||||
|
class MoreInfoInputBoolean extends LitElement {
|
||||||
|
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||||
|
|
||||||
|
@property({ attribute: false }) public stateObj?: HassEntity;
|
||||||
|
|
||||||
|
protected render(): TemplateResult | null {
|
||||||
|
if (!this.hass || !this.stateObj) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return html`
|
||||||
|
<ha-more-info-state-header
|
||||||
|
.hass=${this.hass}
|
||||||
|
.stateObj=${this.stateObj}
|
||||||
|
></ha-more-info-state-header>
|
||||||
|
<div class="controls">
|
||||||
|
<ha-more-info-toggle
|
||||||
|
.stateObj=${this.stateObj}
|
||||||
|
.hass=${this.hass}
|
||||||
|
.iconPathOn=${mdiPower}
|
||||||
|
.iconPathOff=${mdiPowerOff}
|
||||||
|
></ha-more-info-toggle>
|
||||||
|
</div>
|
||||||
|
<ha-attributes
|
||||||
|
.hass=${this.hass}
|
||||||
|
.stateObj=${this.stateObj}
|
||||||
|
></ha-attributes>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
static get styles(): CSSResultGroup {
|
||||||
|
return moreInfoControlStyle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface HTMLElementTagNameMap {
|
||||||
|
"more-info-input_boolean": MoreInfoInputBoolean;
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
import { mdiVolumeHigh, mdiVolumeOff } from "@mdi/js";
|
import { mdiVolumeHigh, mdiVolumeOff } from "@mdi/js";
|
||||||
|
import { HassEntity } from "home-assistant-js-websocket";
|
||||||
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
||||||
import { customElement, property } from "lit/decorators";
|
import { customElement, property } from "lit/decorators";
|
||||||
import "../../../components/ha-attributes";
|
import "../../../components/ha-attributes";
|
||||||
import { LightEntity } from "../../../data/light";
|
|
||||||
import type { HomeAssistant } from "../../../types";
|
import type { HomeAssistant } from "../../../types";
|
||||||
import { moreInfoControlStyle } from "../components/ha-more-info-control-style";
|
import { moreInfoControlStyle } from "../components/ha-more-info-control-style";
|
||||||
import "../components/ha-more-info-state-header";
|
import "../components/ha-more-info-state-header";
|
||||||
@ -12,7 +12,7 @@ import "../components/ha-more-info-toggle";
|
|||||||
class MoreInfoSiren extends LitElement {
|
class MoreInfoSiren extends LitElement {
|
||||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||||
|
|
||||||
@property({ attribute: false }) public stateObj?: LightEntity;
|
@property({ attribute: false }) public stateObj?: HassEntity;
|
||||||
|
|
||||||
protected render(): TemplateResult | null {
|
protected render(): TemplateResult | null {
|
||||||
if (!this.hass || !this.stateObj) {
|
if (!this.hass || !this.stateObj) {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { mdiPower, mdiPowerOff } from "@mdi/js";
|
import { mdiPower, mdiPowerOff } from "@mdi/js";
|
||||||
|
import { HassEntity } from "home-assistant-js-websocket";
|
||||||
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
||||||
import { customElement, property } from "lit/decorators";
|
import { customElement, property } from "lit/decorators";
|
||||||
import "../../../components/ha-attributes";
|
import "../../../components/ha-attributes";
|
||||||
import { LightEntity } from "../../../data/light";
|
|
||||||
import type { HomeAssistant } from "../../../types";
|
import type { HomeAssistant } from "../../../types";
|
||||||
import { moreInfoControlStyle } from "../components/ha-more-info-control-style";
|
import { moreInfoControlStyle } from "../components/ha-more-info-control-style";
|
||||||
import "../components/ha-more-info-state-header";
|
import "../components/ha-more-info-state-header";
|
||||||
@ -12,7 +12,7 @@ import "../components/ha-more-info-toggle";
|
|||||||
class MoreInfoSwitch extends LitElement {
|
class MoreInfoSwitch extends LitElement {
|
||||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||||
|
|
||||||
@property({ attribute: false }) public stateObj?: LightEntity;
|
@property({ attribute: false }) public stateObj?: HassEntity;
|
||||||
|
|
||||||
protected render(): TemplateResult | null {
|
protected render(): TemplateResult | null {
|
||||||
if (!this.hass || !this.stateObj) {
|
if (!this.hass || !this.stateObj) {
|
||||||
|
@ -16,6 +16,7 @@ const LAZY_LOADED_MORE_INFO_CONTROL = {
|
|||||||
fan: () => import("./controls/more-info-fan"),
|
fan: () => import("./controls/more-info-fan"),
|
||||||
group: () => import("./controls/more-info-group"),
|
group: () => import("./controls/more-info-group"),
|
||||||
humidifier: () => import("./controls/more-info-humidifier"),
|
humidifier: () => import("./controls/more-info-humidifier"),
|
||||||
|
input_boolean: () => import("./controls/more-info-input_boolean"),
|
||||||
input_datetime: () => import("./controls/more-info-input_datetime"),
|
input_datetime: () => import("./controls/more-info-input_datetime"),
|
||||||
light: () => import("./controls/more-info-light"),
|
light: () => import("./controls/more-info-light"),
|
||||||
lock: () => import("./controls/more-info-lock"),
|
lock: () => import("./controls/more-info-lock"),
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { HassEntity } from "home-assistant-js-websocket";
|
import { HassEntity } from "home-assistant-js-websocket";
|
||||||
import { PropertyValues } from "lit";
|
import { PropertyValues } from "lit";
|
||||||
import { EntityRegistryEntry } from "../../../data/entity_registry";
|
import { EntityRegistryDisplayEntry } from "../../../data/entity_registry";
|
||||||
import { HomeAssistant } from "../../../types";
|
import { HomeAssistant } from "../../../types";
|
||||||
import { processConfigEntities } from "./process-config-entities";
|
import { processConfigEntities } from "./process-config-entities";
|
||||||
|
|
||||||
@ -37,24 +37,19 @@ function compareEntityState(
|
|||||||
return oldState !== newState;
|
return oldState !== newState;
|
||||||
}
|
}
|
||||||
|
|
||||||
function compareEntityEntryOptions(
|
function compareEntityDisplayEntry(
|
||||||
oldHass: HomeAssistant,
|
oldHass: HomeAssistant,
|
||||||
newHass: HomeAssistant,
|
newHass: HomeAssistant,
|
||||||
entityId: string
|
entityId: string
|
||||||
) {
|
) {
|
||||||
const oldEntry = oldHass.entities[entityId] as
|
const oldEntry = oldHass.entities[entityId] as
|
||||||
| EntityRegistryEntry
|
| EntityRegistryDisplayEntry
|
||||||
| undefined;
|
| undefined;
|
||||||
const newEntry = newHass.entities[entityId] as
|
const newEntry = newHass.entities[entityId] as
|
||||||
| EntityRegistryEntry
|
| EntityRegistryDisplayEntry
|
||||||
| undefined;
|
| undefined;
|
||||||
|
|
||||||
return (
|
return oldEntry?.display_precision !== newEntry?.display_precision;
|
||||||
oldEntry?.options?.sensor?.display_precision !==
|
|
||||||
newEntry?.options?.sensor?.display_precision ||
|
|
||||||
oldEntry?.options?.sensor?.suggested_display_precision !==
|
|
||||||
newEntry?.options?.sensor?.suggested_display_precision
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if config or Entity changed
|
// Check if config or Entity changed
|
||||||
@ -71,7 +66,7 @@ export function hasConfigOrEntityChanged(
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
compareEntityState(oldHass, newHass, element._config!.entity) ||
|
compareEntityState(oldHass, newHass, element._config!.entity) ||
|
||||||
compareEntityEntryOptions(oldHass, newHass, element._config!.entity)
|
compareEntityDisplayEntry(oldHass, newHass, element._config!.entity)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +91,7 @@ export function hasConfigOrEntitiesChanged(
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
compareEntityState(oldHass, newHass, entity.entity) ||
|
compareEntityState(oldHass, newHass, entity.entity) ||
|
||||||
compareEntityEntryOptions(oldHass, newHass, entity.entity)
|
compareEntityDisplayEntry(oldHass, newHass, entity.entity)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1053,13 +1053,13 @@
|
|||||||
"failed": "Failed to reboot system"
|
"failed": "Failed to reboot system"
|
||||||
},
|
},
|
||||||
"shutdown": {
|
"shutdown": {
|
||||||
"title": "Shutdown system",
|
"title": "Shut down system",
|
||||||
"description": "Shutdown the system running Home Assistant and all Add-ons.",
|
"description": "Shut down the system running Home Assistant and all Add-ons.",
|
||||||
"confirm_title": "Shutdown system?",
|
"confirm_title": "Shut down system?",
|
||||||
"confirm_description": "This will shutdown the complete system which includes Home Assistant and all Add-ons.",
|
"confirm_description": "This will shut down the complete system which includes Home Assistant and all Add-ons.",
|
||||||
"confirm_action": "Shutdown",
|
"confirm_action": "Shut down",
|
||||||
"shutting_down": "Shutting down system",
|
"shutting_down": "Shutting down system",
|
||||||
"failed": "Failed to shutdown system"
|
"failed": "Failed to shut down system"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"aliases": {
|
"aliases": {
|
||||||
|
@ -69,6 +69,33 @@ describe("formatNumber", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("Formats number with fraction digits options if number format is none", () => {
|
||||||
|
assert.strictEqual(
|
||||||
|
formatNumber(
|
||||||
|
1234.5,
|
||||||
|
{ ...defaultLocale, number_format: NumberFormat.none },
|
||||||
|
{
|
||||||
|
minimumFractionDigits: 2,
|
||||||
|
maximumFractionDigits: 2,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
"1234.50"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Do not formats number with others options if number format is none", () => {
|
||||||
|
assert.strictEqual(
|
||||||
|
formatNumber(
|
||||||
|
1234.5,
|
||||||
|
{ ...defaultLocale, number_format: NumberFormat.none },
|
||||||
|
{
|
||||||
|
useGrouping: true,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
"1234.5"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("Sets only the maximumFractionDigits format option when none are provided for a number value", () => {
|
it("Sets only the maximumFractionDigits format option when none are provided for a number value", () => {
|
||||||
assert.deepEqual(getDefaultFormatOptions(1234.5), {
|
assert.deepEqual(getDefaultFormatOptions(1234.5), {
|
||||||
maximumFractionDigits: 2,
|
maximumFractionDigits: 2,
|
||||||
|
27
yarn.lock
27
yarn.lock
@ -6060,12 +6060,12 @@ __metadata:
|
|||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"bl@npm:^1.2.1":
|
"bl@npm:^1.2.1":
|
||||||
version: 1.2.2
|
version: 1.2.3
|
||||||
resolution: "bl@npm:1.2.2"
|
resolution: "bl@npm:1.2.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
readable-stream: ^2.3.5
|
readable-stream: ^2.3.5
|
||||||
safe-buffer: ^5.1.1
|
safe-buffer: ^5.1.1
|
||||||
checksum: aaa95591dbed4af648167093308c26a8d2cb17b0061525e7ba55e6fc238f172bc3d0874996e1cc61d6333423eb582c02cae53a081380b73c61de2fb510e300a2
|
checksum: 123f097989ce2fa9087ce761cd41176aaaec864e28f7dfe5c7dab8ae16d66d9844f849c3ad688eb357e3c5e4f49b573e3c0780bb8bc937206735a3b6f8569a5f
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -6931,12 +6931,12 @@ __metadata:
|
|||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"copy-props@npm:^2.0.1":
|
"copy-props@npm:^2.0.1":
|
||||||
version: 2.0.4
|
version: 2.0.5
|
||||||
resolution: "copy-props@npm:2.0.4"
|
resolution: "copy-props@npm:2.0.5"
|
||||||
dependencies:
|
dependencies:
|
||||||
each-props: ^1.3.0
|
each-props: ^1.3.2
|
||||||
is-plain-object: ^2.0.1
|
is-plain-object: ^5.0.0
|
||||||
checksum: 48a8cd2374f222a58eeacbe268fd52f96a039e632ee96cc3f8fe1fbb00699b76032cee47c073882aec44fcc1e2096685e811e1c65995bcfefae739b5f2b2a2a4
|
checksum: e05bbd4b020fb19f3ce9edce51478d41283397af7ac393297859e2014f518d96e3e2d47ff84736e7c46c17f03fee58c5cef16a8a2420237b069873e5cfe80672
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -7438,7 +7438,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"each-props@npm:^1.3.0":
|
"each-props@npm:^1.3.2":
|
||||||
version: 1.3.2
|
version: 1.3.2
|
||||||
resolution: "each-props@npm:1.3.2"
|
resolution: "each-props@npm:1.3.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -12402,7 +12402,7 @@ fsevents@~2.3.2:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"object.assign@npm:^4.0.4, object.assign@npm:^4.1.2, object.assign@npm:^4.1.4":
|
"object.assign@npm:^4.0.4, object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.4":
|
||||||
version: 4.1.4
|
version: 4.1.4
|
||||||
resolution: "object.assign@npm:4.1.4"
|
resolution: "object.assign@npm:4.1.4"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -16793,11 +16793,12 @@ typescript@^3.8.3:
|
|||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"yargs-parser@npm:^5.0.0":
|
"yargs-parser@npm:^5.0.0":
|
||||||
version: 5.0.0
|
version: 5.0.1
|
||||||
resolution: "yargs-parser@npm:5.0.0"
|
resolution: "yargs-parser@npm:5.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
camelcase: ^3.0.0
|
camelcase: ^3.0.0
|
||||||
checksum: 5580caa20c4f012a681269377940d89db37563c24b2abeca08c9e616385eb9d16517fd26f58dd9796a6f12b7bc91e54ec0c46f313eac310ad80fcd12ddb1ec63
|
object.assign: ^4.1.0
|
||||||
|
checksum: 8eff7f3653afc9185cb917ee034d189c1ba4bc0fd5005c9588442e25557e9bf69c7331663a6f9a2bb897cd4c1544ba9675ed3335133e19e660a3086fedc259db
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user