Compare commits

...

17 Commits

Author SHA1 Message Date
Paul Bottein 282710dacd Add confirm dialog when deleting a badge 2024-10-16 14:56:38 +02:00
Petar Petrov 4d9e9aaead Updated design for integration icons (#22393)
* Show if a custom integration overwrites a core integration

* use 1 icon and change tooltip and color

* Updated design for integration icons

* add color for `overwrites_built_in`
2024-10-16 10:17:36 +02:00
Petar Petrov 82ec308be0 Show if a custom integration overwrites a core integration (#22295) 2024-10-16 09:28:33 +02:00
renovate[bot] dcafbcb06c Update dependency @bundle-stats/plugin-webpack-filter to v4.16.0 (#22386)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 09:16:28 +02:00
ildar170975 aa5f8dc082 Change background for collapsible rows in data tables (#22372)
Update ha-data-table.ts
2024-10-16 09:10:32 +02:00
renovate[bot] 4dcae9c69c Update formatjs monorepo (#22374)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 09:08:32 +02:00
ildar170975 13a1af97da box-shadow for stack in panel: fix typo (#22384)
Update hui-stack-card.ts
2024-10-16 09:07:37 +02:00
Julian e3c435fd78 Fix type in matter integration translation "end_device" (#22390)
fixes: #22292
2024-10-16 09:06:46 +02:00
Paulus Schoutsen a32dee7071 Discovered integration: configure -> add (#22387) 2024-10-15 21:35:16 +02:00
Paulus Schoutsen c098858b73 Protocol integrations always link to devices page (#22388) 2024-10-15 21:34:47 +02:00
Paulus Schoutsen 9e509e3bc9 Update Assist config page (#22338) 2024-10-15 21:32:21 +02:00
Paulus Schoutsen 79ac2a72fa Protocol integrations always link to devices page 2024-10-15 18:12:14 +00:00
karwosts b063840f46 Update devtools/statistics for renamed issue type (#22371) 2024-10-15 15:09:07 +02:00
renovate[bot] 4366308b2b Update dependency mocha to v10.7.3 (#21212)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-15 13:51:40 +02:00
renovate[bot] 126826e52c Update dependency instant-mocha to v1.5.3 (#22373)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-15 12:59:00 +02:00
Bram Kragten e31af5d31b Forward change event in password field (#22377) 2024-10-15 12:07:12 +02:00
Stefan Agner fca97cd734 Prefer Thread border router instance name (#22378)
Instead of using the model name (which is the same for all border
routers of the same make and model), use the instance name as the
border router name.

Builds on https://github.com/home-assistant/core/pull/127253.
2024-10-15 11:48:45 +02:00
26 changed files with 641 additions and 476 deletions
+13 -13
View File
@@ -35,14 +35,14 @@
"@codemirror/state": "6.4.1",
"@codemirror/view": "6.34.1",
"@egjs/hammerjs": "2.0.17",
"@formatjs/intl-datetimeformat": "6.13.0",
"@formatjs/intl-displaynames": "6.6.9",
"@formatjs/intl-getcanonicallocales": "2.3.0",
"@formatjs/intl-listformat": "7.5.8",
"@formatjs/intl-locale": "4.0.1",
"@formatjs/intl-numberformat": "8.11.0",
"@formatjs/intl-pluralrules": "5.2.15",
"@formatjs/intl-relativetimeformat": "11.2.15",
"@formatjs/intl-datetimeformat": "6.14.0",
"@formatjs/intl-displaynames": "6.6.10",
"@formatjs/intl-getcanonicallocales": "2.3.1",
"@formatjs/intl-listformat": "7.5.9",
"@formatjs/intl-locale": "4.0.2",
"@formatjs/intl-numberformat": "8.12.0",
"@formatjs/intl-pluralrules": "5.2.16",
"@formatjs/intl-relativetimeformat": "11.2.16",
"@fullcalendar/core": "6.1.15",
"@fullcalendar/daygrid": "6.1.15",
"@fullcalendar/interaction": "6.1.15",
@@ -114,7 +114,7 @@
"hls.js": "patch:hls.js@npm%3A1.5.7#~/.yarn/patches/hls.js-npm-1.5.7-f5bbd3d060.patch",
"home-assistant-js-websocket": "9.4.0",
"idb-keyval": "6.2.1",
"intl-messageformat": "10.6.0",
"intl-messageformat": "10.7.0",
"js-yaml": "4.1.0",
"leaflet": "1.9.4",
"leaflet-draw": "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch",
@@ -157,7 +157,7 @@
"@babel/plugin-transform-runtime": "7.25.7",
"@babel/preset-env": "7.25.8",
"@babel/preset-typescript": "7.25.7",
"@bundle-stats/plugin-webpack-filter": "4.15.1",
"@bundle-stats/plugin-webpack-filter": "4.16.0",
"@koa/cors": "5.0.0",
"@lokalise/node-api": "12.7.0",
"@octokit/auth-oauth-device": "7.1.1",
@@ -180,7 +180,7 @@
"@types/leaflet-draw": "1.0.11",
"@types/lodash.merge": "4.6.9",
"@types/luxon": "3.4.2",
"@types/mocha": "10.0.7",
"@types/mocha": "10.0.9",
"@types/qrcode": "1.5.5",
"@types/serve-handler": "6.1.4",
"@types/sortablejs": "1.15.8",
@@ -216,7 +216,7 @@
"gulp-zopfli-green": "6.0.2",
"html-minifier-terser": "7.2.0",
"husky": "9.1.6",
"instant-mocha": "1.5.2",
"instant-mocha": "1.5.3",
"jszip": "3.10.1",
"lint-staged": "15.2.10",
"lit-analyzer": "2.0.3",
@@ -224,7 +224,7 @@
"lodash.template": "4.5.0",
"magic-string": "0.30.12",
"map-stream": "0.0.7",
"mocha": "10.5.0",
"mocha": "10.7.3",
"object-hash": "3.0.0",
"open": "10.1.0",
"pinst": "3.0.0",
@@ -1200,6 +1200,7 @@ export class HaDataTable extends LitElement {
display: flex;
align-items: center;
cursor: pointer;
background-color: var(--primary-background-color);
}
.group-header ha-icon-button {
+7
View File
@@ -118,6 +118,7 @@ export class HaPasswordField extends LitElement {
.type=${this._unmaskedPassword ? "text" : "password"}
.suffix=${html`<div style="width: 24px"></div>`}
@input=${this._handleInputChange}
@change=${this._reDispatchEvent}
></ha-textfield>
<ha-icon-button
toggles
@@ -156,6 +157,12 @@ export class HaPasswordField extends LitElement {
this.value = ev.target.value;
}
@eventOptions({ passive: true })
private _reDispatchEvent(oldEvent: Event) {
const newEvent = new Event(oldEvent.type, oldEvent);
this.dispatchEvent(newEvent);
}
static styles = css`
:host {
display: block;
+1
View File
@@ -22,6 +22,7 @@ export type IntegrationType =
export interface IntegrationManifest {
is_built_in: boolean;
overwrites_built_in?: boolean;
domain: string;
name: string;
config_flow: boolean;
+2
View File
@@ -11,6 +11,7 @@ export interface Integration {
iot_class?: string;
supported_by?: string;
is_built_in?: boolean;
overwrites_built_in?: boolean;
single_config_entry?: boolean;
}
@@ -23,6 +24,7 @@ export interface Brand {
integrations?: Integrations;
iot_standards?: IotStandards[];
is_built_in?: boolean;
overwrites_built_in?: boolean;
}
export interface Brands {
+1
View File
@@ -1,6 +1,7 @@
import { HomeAssistant } from "../types";
export interface ThreadRouter {
instance_name: string;
addresses: [string];
border_agent_id: string | null;
brand: "google" | "apple" | "homeassistant";
@@ -8,7 +8,6 @@ import "../../components/ha-tts-voice-picker";
import {
AssistPipeline,
listAssistPipelines,
setAssistPipelinePreferred,
updateAssistPipeline,
} from "../../data/assist_pipeline";
import {
@@ -17,13 +16,13 @@ import {
setWakeWords,
} from "../../data/assist_satellite";
import { fetchCloudStatus } from "../../data/cloud";
import { InputSelectEntity } from "../../data/input_select";
import { setSelectOption } from "../../data/select";
import { showVoiceAssistantPipelineDetailDialog } from "../../panels/config/voice-assistants/show-dialog-voice-assistant-pipeline-detail";
import "../../panels/lovelace/entity-rows/hui-select-entity-row";
import { HomeAssistant } from "../../types";
import { AssistantSetupStyles } from "./styles";
import { STEP } from "./voice-assistant-setup-dialog";
import { setSelectOption } from "../../data/select";
import { InputSelectEntity } from "../../data/input_select";
@customElement("ha-voice-assistant-setup-step-success")
export class HaVoiceAssistantSetupStepSuccess extends LitElement {
@@ -233,7 +232,7 @@ export class HaVoiceAssistantSetupStepSuccess extends LitElement {
}
private async _openPipeline() {
const [pipeline, preferred_pipeline] = await this._getPipeline();
const [pipeline] = await this._getPipeline();
if (!pipeline) {
return;
@@ -245,13 +244,9 @@ export class HaVoiceAssistantSetupStepSuccess extends LitElement {
cloudActiveSubscription:
cloudStatus.logged_in && cloudStatus.active_subscription,
pipeline,
preferred: pipeline.id === preferred_pipeline,
updatePipeline: async (values) => {
await updateAssistPipeline(this.hass!, pipeline!.id, values);
},
setPipelinePreferred: async () => {
await setAssistPipelinePreferred(this.hass!, pipeline!.id);
},
hideWakeWord: true,
});
}
@@ -69,6 +69,7 @@ export interface IntegrationListItem {
supported_by?: string;
cloud?: boolean;
is_built_in?: boolean;
overwrites_built_in?: boolean;
is_add?: boolean;
single_config_entry?: boolean;
}
@@ -211,6 +212,7 @@ class AddIntegrationDialog extends LitElement {
iot_standards: supportedIntegration.iot_standards,
supported_by: integration.supported_by,
is_built_in: supportedIntegration.is_built_in !== false,
overwrites_built_in: integration.overwrites_built_in,
cloud: supportedIntegration.iot_class?.startsWith("cloud_"),
single_config_entry: integration.single_config_entry,
});
@@ -232,6 +234,7 @@ class AddIntegrationDialog extends LitElement {
? Object.keys(integration.integrations)
: undefined,
is_built_in: integration.is_built_in !== false,
overwrites_built_in: integration.overwrites_built_in,
});
} else if (filter && "integration_type" in integration) {
// Integration without a config flow
@@ -240,6 +243,7 @@ class AddIntegrationDialog extends LitElement {
name: integration.name || domainToName(localize, domain),
config_flow: integration.config_flow,
is_built_in: integration.is_built_in !== false,
overwrites_built_in: integration.overwrites_built_in,
cloud: integration.iot_class?.startsWith("cloud_"),
});
}
@@ -44,9 +44,9 @@ export class HaConfigFlowCard extends LitElement {
unelevated
@click=${this._continueFlow}
.label=${this.hass.localize(
`ui.panel.config.integrations.${
attention ? "reconfigure" : "configure"
}`
attention
? "ui.panel.config.integrations.reconfigure"
: "ui.common.add"
)}
></ha-button>
${DISCOVERY_SOURCES.includes(this.flow.context.source) &&
@@ -484,9 +484,7 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) {
unelevated
.flow=${flow}
@click=${this._continueFlow}
.label=${this.hass.localize(
"ui.panel.config.integrations.configure"
)}
.label=${this.hass.localize("ui.common.add")}
></ha-button>
</ha-md-list-item>`
)}
@@ -1,5 +1,5 @@
import "@lrnwebcomponents/simple-tooltip/simple-tooltip";
import { mdiCloud, mdiFileCodeOutline, mdiPackageVariant } from "@mdi/js";
import { mdiFileCodeOutline, mdiPackageVariant, mdiWeb } from "@mdi/js";
import {
CSSResultGroup,
LitElement,
@@ -28,6 +28,7 @@ import { haStyle } from "../../../resources/styles";
import type { HomeAssistant } from "../../../types";
import type { ConfigEntryExtended } from "./ha-config-integrations";
import "./ha-integration-header";
import { PROTOCOL_INTEGRATIONS } from "../../../common/integrations/protocolIntegrationPicked";
@customElement("ha-integration-card")
export class HaIntegrationCard extends LitElement {
@@ -116,7 +117,10 @@ export class HaIntegrationCard extends LitElement {
<div class="card-actions">
${devices.length > 0
? html`<a
href=${devices.length === 1
href=${devices.length === 1 &&
// Always link to device page for protocol integrations to show Add Device button
// @ts-expect-error
!PROTOCOL_INTEGRATIONS.includes(this.domain)
? `/config/devices/device/${devices[0].id}`
: `/config/devices/dashboard?historyBack=1&domain=${this.domain}`}
>
@@ -157,21 +161,27 @@ export class HaIntegrationCard extends LitElement {
: html`<div class="spacer"></div>`}
<div class="icons">
${this.manifest && !this.manifest.is_built_in
? html`<span class="icon custom">
? html`<span
class="icon ${this.manifest.overwrites_built_in
? "overwrites"
: "custom"}"
>
<ha-svg-icon .path=${mdiPackageVariant}></ha-svg-icon>
<simple-tooltip
animation-delay="0"
.position=${computeRTL(this.hass) ? "right" : "left"}
offset="4"
>${this.hass.localize(
"ui.panel.config.integrations.config_entry.custom_integration"
this.manifest.overwrites_built_in
? "ui.panel.config.integrations.config_entry.custom_overwrites_core"
: "ui.panel.config.integrations.config_entry.custom_integration"
)}</simple-tooltip
>
</span>`
: nothing}
${this.manifest && this.manifest.iot_class?.startsWith("cloud_")
? html`<div class="icon cloud">
<ha-svg-icon .path=${mdiCloud}></ha-svg-icon>
<ha-svg-icon .path=${mdiWeb}></ha-svg-icon>
<simple-tooltip
animation-delay="0"
.position=${computeRTL(this.hass) ? "right" : "left"}
@@ -344,25 +354,21 @@ export class HaIntegrationCard extends LitElement {
display: flex;
}
.icon {
border-radius: 50%;
color: var(--text-primary-color);
color: var(--label-badge-grey);
padding: 4px;
margin-left: 8px;
margin-inline-start: 8px;
margin-inline-end: initial;
}
.icon.cloud {
background: var(--info-color);
}
.icon.custom {
background: var(--warning-color);
color: var(--warning-color);
}
.icon.yaml {
background: var(--label-badge-grey);
.icon.overwrites {
color: var(--error-color);
}
.icon ha-svg-icon {
width: 16px;
height: 16px;
width: 24px;
height: 24px;
display: block;
}
simple-tooltip {
@@ -3,7 +3,7 @@ import {
ListItemBase,
} from "@material/mwc-list/mwc-list-item-base";
import { styles } from "@material/mwc-list/mwc-list-item.css";
import { mdiCloudOutline, mdiOpenInNew, mdiPackageVariant } from "@mdi/js";
import { mdiFileCodeOutline, mdiPackageVariant, mdiWeb } from "@mdi/js";
import { css, CSSResultGroup, html, nothing } from "lit";
import { customElement, property } from "lit/decorators";
import { classMap } from "lit/directives/class-map";
@@ -72,7 +72,7 @@ export class HaIntegrationListItem extends ListItemBase {
return html`<span class="mdc-deprecated-list-item__meta material-icons">
${this.integration.cloud
? html`<span
><ha-svg-icon .path=${mdiCloudOutline}></ha-svg-icon
><ha-svg-icon .path=${mdiWeb}></ha-svg-icon
><simple-tooltip animation-delay="0" position="left"
>${this.hass.localize(
"ui.panel.config.integrations.config_entry.depends_on_cloud"
@@ -82,10 +82,15 @@ export class HaIntegrationListItem extends ListItemBase {
: ""}
${!this.integration.is_built_in
? html`<span
class=${this.integration.overwrites_built_in
? "overwrites"
: "custom"}
><ha-svg-icon .path=${mdiPackageVariant}></ha-svg-icon
><simple-tooltip animation-delay="0" position="left"
>${this.hass.localize(
"ui.panel.config.integrations.config_entry.custom_integration"
this.integration.overwrites_built_in
? "ui.panel.config.integrations.config_entry.custom_overwrites_core"
: "ui.panel.config.integrations.config_entry.custom_integration"
)}</simple-tooltip
></span
>`
@@ -99,7 +104,7 @@ export class HaIntegrationListItem extends ListItemBase {
"ui.panel.config.integrations.config_entry.yaml_only"
)}</simple-tooltip
><ha-svg-icon
.path=${mdiOpenInNew}
.path=${mdiFileCodeOutline}
class="open-in-new"
></ha-svg-icon
></span>`
@@ -159,6 +164,12 @@ export class HaIntegrationListItem extends ListItemBase {
--mdc-icon-size: 22px;
padding: 1px;
}
.custom {
color: var(--warning-color);
}
.overwrites {
color: var(--error-color);
}
`,
];
}
@@ -234,7 +234,8 @@ export class ThreadConfigPanel extends SubscribeMixin(LitElement) {
@error=${this._onImageError}
@load=${this._onImageLoad}
/>
${router.model_name ||
${router.instance_name ||
router.model_name ||
router.server?.replace(".local.", "") ||
""}
<span slot="secondary">${router.server}</span>
+135 -42
View File
@@ -1,13 +1,22 @@
import "@material/mwc-list/mwc-list";
import { mdiHelpCircle, mdiPlus, mdiStar } from "@mdi/js";
import {
mdiBug,
mdiCommentProcessingOutline,
mdiDotsVertical,
mdiHelpCircle,
mdiPlus,
mdiStar,
mdiTrashCan,
} from "@mdi/js";
import { CSSResultGroup, LitElement, PropertyValues, css, html } from "lit";
import { customElement, property, state } from "lit/decorators";
import memoizeOne from "memoize-one";
import { formatLanguageCode } from "../../../common/language/format_language";
import "../../../components/ha-alert";
import "../../../components/ha-button";
import "../../../components/ha-button-menu";
import "../../../components/ha-card";
import "../../../components/ha-icon-next";
import "../../../components/ha-icon-button";
import "../../../components/ha-list-item";
import "../../../components/ha-svg-icon";
import "../../../components/ha-switch";
@@ -23,11 +32,16 @@ import {
} from "../../../data/assist_pipeline";
import { CloudStatus } from "../../../data/cloud";
import { ExposeEntitySettings } from "../../../data/expose";
import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box";
import {
showAlertDialog,
showConfirmationDialog,
} from "../../../dialogs/generic/show-dialog-box";
import type { HomeAssistant } from "../../../types";
import { brandsUrl } from "../../../util/brands-url";
import { documentationUrl } from "../../../util/documentation-url";
import { showVoiceAssistantPipelineDetailDialog } from "./show-dialog-voice-assistant-pipeline-detail";
import { showVoiceCommandDialog } from "../../../dialogs/voice-command-dialog/show-ha-voice-command-dialog";
import { stopPropagation } from "../../../common/dom/stop_propagation";
@customElement("assist-pref")
export class AssistPref extends LitElement {
@@ -101,20 +115,71 @@ export class AssistPref extends LitElement {
twoline
hasMeta
role="button"
@click=${this._editPipeline}
.id=${pipeline.id}
@click=${this._editPipeline}
>
${pipeline.name}
<span>
${pipeline.name}
${this._preferred === pipeline.id
? html`<ha-svg-icon .path=${mdiStar}></ha-svg-icon>`
: ""}
</span>
<span slot="secondary">
${formatLanguageCode(pipeline.language, this.hass.locale)}
</span>
${this._preferred === pipeline.id
? html`<ha-svg-icon
slot="meta"
.path=${mdiStar}
></ha-svg-icon>`
: ""}
<ha-icon-next slot="meta"></ha-icon-next>
<ha-button-menu fixed slot="meta" @click=${stopPropagation}>
<ha-icon-button
slot="trigger"
.label=${this.hass!.localize(
"ui.panel.lovelace.editor.menu.open"
)}
.path=${mdiDotsVertical}
></ha-icon-button>
<ha-list-item
graphic="icon"
.id=${pipeline.id}
@request-selected=${this._talkWithPipeline}
>
${this.hass!.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.start_conversation"
)}
<ha-svg-icon
slot="graphic"
.path=${mdiCommentProcessingOutline}
></ha-svg-icon>
</ha-list-item>
<ha-list-item
graphic="icon"
.disabled=${this._preferred === pipeline.id}
.id=${pipeline.id}
@request-selected=${this._setPreferredPipeline}
>
${this.hass.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.detail.set_as_preferred"
)}
<ha-svg-icon slot="graphic" .path=${mdiStar}></ha-svg-icon>
</ha-list-item>
<a href=${`/config/voice-assistants/debug/${pipeline.id}`}>
<ha-list-item graphic="icon">
${this.hass.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.detail.debug"
)}
<ha-svg-icon slot="graphic" .path=${mdiBug}></ha-svg-icon>
</ha-list-item>
</a>
<ha-list-item
class="danger"
graphic="icon"
.id=${pipeline.id}
@request-selected=${this._deletePipeline}
>
${this.hass.localize("ui.common.delete")}
<ha-svg-icon
slot="graphic"
.path=${mdiTrashCan}
></ha-svg-icon>
</ha-list-item>
</ha-button-menu>
</ha-list-item>
`
)}
@@ -157,6 +222,49 @@ export class AssistPref extends LitElement {
`;
}
private _talkWithPipeline(ev) {
const id = ev.currentTarget.id as string;
showVoiceCommandDialog(this, this.hass, { pipeline_id: id });
}
private async _setPreferredPipeline(ev) {
const id = ev.currentTarget.id as string;
await setAssistPipelinePreferred(this.hass!, id);
this._preferred = id;
}
private async _deletePipeline(ev) {
const id = ev.currentTarget.id as string;
if (this._preferred === id) {
showAlertDialog(this, {
text: this.hass!.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.delete.error_preferred"
),
});
return;
}
const pipeline = this._pipelines.find((res) => res.id === id);
if (
!(await showConfirmationDialog(this, {
title: this.hass!.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.delete.confirm_title",
{ name: pipeline!.name }
),
text: this.hass!.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.delete.confirm_text",
{ name: pipeline!.name }
),
confirmText: this.hass!.localize("ui.common.delete"),
destructive: true,
}))
) {
return;
}
await deleteAssistPipeline(this.hass!, pipeline!.id);
this._pipelines = this._pipelines!.filter((res) => res !== pipeline);
}
private _editPipeline(ev) {
const id = ev.currentTarget.id as string;
@@ -173,7 +281,6 @@ export class AssistPref extends LitElement {
cloudActiveSubscription:
this.cloudStatus?.logged_in && this.cloudStatus.active_subscription,
pipeline,
preferred: pipeline?.id === this._preferred,
createPipeline: async (values) => {
const created = await createAssistPipeline(this.hass!, values);
this._pipelines = this._pipelines!.concat(created);
@@ -188,32 +295,6 @@ export class AssistPref extends LitElement {
res === pipeline ? updated : res
);
},
setPipelinePreferred: async () => {
await setAssistPipelinePreferred(this.hass!, pipeline!.id);
this._preferred = pipeline!.id;
},
deletePipeline: async () => {
if (
!(await showConfirmationDialog(this, {
title: this.hass!.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.delete.confirm_title",
{ name: pipeline!.name }
),
text: this.hass!.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.delete.confirm_text",
{ name: pipeline!.name }
),
confirmText: this.hass!.localize("ui.common.delete"),
destructive: true,
}))
) {
return false;
}
await deleteAssistPipeline(this.hass!, pipeline!.id);
this._pipelines = this._pipelines!.filter((res) => res !== pipeline);
return true;
},
});
}
@@ -242,11 +323,23 @@ export class AssistPref extends LitElement {
ha-list-item {
--mdc-list-item-meta-size: auto;
--mdc-list-item-meta-display: flex;
--mdc-list-side-padding-right: 8px;
}
ha-svg-icon,
ha-icon-next {
width: 24px;
ha-list-item.danger {
color: var(--error-color);
border-top: 1px solid var(--divider-color);
}
ha-button-menu a {
text-decoration: none;
}
ha-svg-icon {
color: currentColor;
width: 16px;
}
.add {
margin: 0 16px 16px;
}
@@ -1,16 +1,7 @@
import {
mdiBug,
mdiClose,
mdiDotsVertical,
mdiStar,
mdiStarOutline,
} from "@mdi/js";
import { mdiClose } from "@mdi/js";
import { css, CSSResultGroup, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../common/dom/fire_event";
import { stopPropagation } from "../../../common/dom/stop_propagation";
import { shouldHandleRequestSelectedEvent } from "../../../common/mwc/handle-request-selected-event";
import { navigate } from "../../../common/navigate";
import "../../../components/ha-button";
import "../../../components/ha-dialog-header";
import "../../../components/ha-form/ha-form";
@@ -38,8 +29,6 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement {
@state() private _data?: Partial<AssistPipeline>;
@state() private _preferred?: boolean;
@state() private _cloudActive?: boolean;
@state() private _error?: Record<string, string>;
@@ -54,7 +43,6 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement {
this._cloudActive = this._params.cloudActiveSubscription;
if (this._params.pipeline) {
this._data = this._params.pipeline;
this._preferred = this._params.preferred;
return;
}
@@ -129,39 +117,6 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement {
.path=${mdiClose}
></ha-icon-button>
<span slot="title" .title=${title}>${title}</span>
${this._params.pipeline?.id
? html`
<ha-icon-button
slot="actionItems"
.label=${this.hass.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.detail.set_as_preferred"
)}
.path=${this._preferred ? mdiStar : mdiStarOutline}
@click=${this._setPreferred}
.disabled=${Boolean(this._preferred)}
></ha-icon-button>
<ha-button-menu
corner="BOTTOM_END"
menuCorner="END"
slot="actionItems"
@closed=${stopPropagation}
fixed
>
<ha-icon-button
slot="trigger"
.label=${this.hass.localize("ui.common.menu")}
.path=${mdiDotsVertical}
></ha-icon-button>
<ha-list-item graphic="icon" @request-selected=${this._debug}>
${this.hass.localize(
"ui.panel.config.voice_assistants.assistants.pipeline.detail.debug"
)}
<ha-svg-icon slot="graphic" .path=${mdiBug}></ha-svg-icon>
</ha-list-item>
</ha-button-menu>
`
: nothing}
</ha-dialog-header>
<div class="content">
${this._error
@@ -173,7 +128,7 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement {
.supportedLanguages=${this._supportedLanguages}
keys="name,language"
@value-changed=${this._valueChanged}
dialogInitialFocus
?dialogInitialFocus=${!this._params.pipeline?.id}
></assist-pipeline-detail-config>
<assist-pipeline-detail-conversation
.hass=${this.hass}
@@ -224,18 +179,6 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement {
@value-changed=${this._valueChanged}
></assist-pipeline-detail-wakeword>`}
</div>
${this._params.pipeline?.id && this._params.deletePipeline
? html`
<ha-button
slot="secondaryAction"
class="warning"
.disabled=${this._preferred || this._submitting}
@click=${this._deletePipeline}
>
${this.hass.localize("ui.common.delete")}
</ha-button>
`
: nothing}
<ha-button
slot="primaryAction"
@click=${this._updatePipeline}
@@ -299,40 +242,6 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement {
}
}
private async _setPreferred() {
this._submitting = true;
try {
await this._params!.setPipelinePreferred();
this._preferred = true;
} catch (err: any) {
this._error = err?.message || "Unknown error";
} finally {
this._submitting = false;
}
}
private _debug(ev) {
if (!shouldHandleRequestSelectedEvent(ev)) return;
navigate(`/config/voice-assistants/debug/${this._params!.pipeline!.id}`);
this.closeDialog();
}
private async _deletePipeline() {
if (!this._params?.deletePipeline) {
return;
}
this._submitting = true;
try {
if (await this._params!.deletePipeline()) {
this.closeDialog();
}
} catch (err: any) {
this._error = err?.message || "Unknown error";
} finally {
this._submitting = false;
}
}
static get styles(): CSSResultGroup {
return [
haStyleDialog,
@@ -7,12 +7,9 @@ import {
export interface VoiceAssistantPipelineDetailsDialogParams {
cloudActiveSubscription?: boolean;
pipeline?: AssistPipeline;
preferred?: boolean;
hideWakeWord?: boolean;
updatePipeline: (updates: AssistPipelineMutableParams) => Promise<unknown>;
setPipelinePreferred: () => Promise<unknown>;
createPipeline?: (values: AssistPipelineMutableParams) => Promise<unknown>;
deletePipeline?: () => Promise<boolean>;
}
export const loadVoiceAssistantPipelineDetailDialog = () =>
@@ -49,7 +49,7 @@ import { showConfirmationDialog } from "../../lovelace/custom-card-helpers";
import { fixStatisticsIssue } from "./fix-statistics";
import { showStatisticsAdjustSumDialog } from "./show-dialog-statistics-adjust-sum";
const FIX_ISSUES_ORDER = {
const FIX_ISSUES_ORDER: Record<StatisticsValidationResult["type"], number> = {
no_state: 0,
entity_no_longer_recorded: 1,
entity_not_recorded: 1,
@@ -57,10 +57,10 @@ const FIX_ISSUES_ORDER = {
units_changed: 3,
};
const FIXABLE_ISSUES = [
const FIXABLE_ISSUES: StatisticsValidationResult["type"][] = [
"no_state",
"entity_no_longer_recorded",
"unsupported_state_class",
"state_class_removed",
"units_changed",
];
+1 -1
View File
@@ -109,7 +109,7 @@ export abstract class HuiStackCard<T extends StackCardConfig = StackCardConfig>
:host([ispanel]) #root {
--ha-card-border-radius: var(--restore-card-border-radius);
--ha-card-border-width: var(--restore-card-border-width);
--ha-card-box-shadow: var(--restore-card-border-shadow);
--ha-card-box-shadow: var(--restore-card-box-shadow);
}
`;
}
@@ -180,14 +180,14 @@ export class HuiBadgeEditMode extends LitElement {
this._cutBadge();
break;
case 3:
this._deleteBadge();
this._deleteBadge(true);
break;
}
}
private _cutBadge(): void {
this._copyBadge();
this._deleteBadge();
this._deleteBadge(false);
}
private _copyBadge(): void {
@@ -220,8 +220,8 @@ export class HuiBadgeEditMode extends LitElement {
fireEvent(this, "ll-edit-badge", { path: this.path! });
}
private _deleteBadge(): void {
fireEvent(this, "ll-delete-badge", { path: this.path! });
private _deleteBadge(confirm: boolean): void {
fireEvent(this, "ll-delete-badge", { path: this.path!, confirm });
}
static get styles(): CSSResultGroup {
@@ -0,0 +1,104 @@
import deepFreeze from "deep-freeze";
import { css, CSSResultGroup, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../common/dom/fire_event";
import type { LovelaceBadgeConfig } from "../../../../data/lovelace/config/badge";
import { haStyleDialog } from "../../../../resources/styles";
import type { HomeAssistant } from "../../../../types";
import "../../badges/hui-badge";
import type { DeleteBadgeDialogParams } from "./show-delete-badge-dialog";
@customElement("hui-dialog-delete-badge")
export class HuiDialogDeleteBadge extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@state() private _params?: DeleteBadgeDialogParams;
@state() private _badgeConfig?: LovelaceBadgeConfig;
public async showDialog(params: DeleteBadgeDialogParams): Promise<void> {
this._params = params;
this._badgeConfig = params.badgeConfig;
if (!Object.isFrozen(this._badgeConfig)) {
this._badgeConfig = deepFreeze(this._badgeConfig);
}
}
public closeDialog(): void {
this._params = undefined;
this._badgeConfig = undefined;
fireEvent(this, "dialog-closed", { dialog: this.localName });
}
protected render() {
if (!this._params) {
return nothing;
}
return html`
<ha-dialog
open
@closed=${this.closeDialog}
.heading=${this.hass.localize(
"ui.panel.lovelace.badges.confirm_delete"
)}
>
<div>
${this._badgeConfig
? html`
<div class="element-preview">
<hui-badge
.hass=${this.hass}
.config=${this._badgeConfig}
preview
></hui-badge>
</div>
`
: ""}
</div>
<mwc-button
slot="secondaryAction"
@click=${this.closeDialog}
dialogInitialFocus
>
${this.hass!.localize("ui.common.cancel")}
</mwc-button>
<mwc-button slot="primaryAction" class="warning" @click=${this._delete}>
${this.hass!.localize("ui.common.delete")}
</mwc-button>
</ha-dialog>
`;
}
static get styles(): CSSResultGroup {
return [
haStyleDialog,
css`
.element-preview {
position: relative;
max-width: 500px;
display: block;
width: 100%;
display: flex;
}
hui-badge {
margin: 4px auto;
}
`,
];
}
private _delete(): void {
if (!this._params?.deleteBadge) {
return;
}
this._params.deleteBadge();
this.closeDialog();
}
}
declare global {
interface HTMLElementTagNameMap {
"hui-dialog-delete-badge": HuiDialogDeleteBadge;
}
}
@@ -0,0 +1,21 @@
import { fireEvent } from "../../../../common/dom/fire_event";
import { LovelaceBadgeConfig } from "../../../../data/lovelace/config/badge";
export interface DeleteBadgeDialogParams {
deleteBadge: () => void;
badgeConfig?: LovelaceBadgeConfig;
}
export const importDeleteBadgeDialog = () =>
import("./hui-dialog-delete-badge");
export const showDeleteBadgeDialog = (
element: HTMLElement,
deleteBadgeDialogParams: DeleteBadgeDialogParams
): void => {
fireEvent(element, "show-dialog", {
dialogTag: "hui-dialog-delete-badge",
dialogImport: importDeleteBadgeDialog,
dialogParams: deleteBadgeDialogParams,
});
};
+2 -2
View File
@@ -372,13 +372,13 @@ export const deleteBadge = (
config: LovelaceConfig,
path: LovelaceCardPath
): LovelaceConfig => {
const { cardIndex } = parseLovelaceCardPath(path);
const { cardIndex: badgeIndex } = parseLovelaceCardPath(path);
const containerPath = getLovelaceContainerPath(path);
const badges = findLovelaceItems("badges", config, containerPath);
const newBadges = (badges ?? []).filter(
(_origConf, ind) => ind !== cardIndex
(_origConf, ind) => ind !== badgeIndex
);
const newConfig = updateLovelaceItems(
@@ -0,0 +1,47 @@
import { ensureBadgeConfig } from "../../../data/lovelace/config/badge";
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
import { HomeAssistant } from "../../../types";
import { showDeleteSuccessToast } from "../../../util/toast-deleted-success";
import { Lovelace } from "../types";
import { showDeleteBadgeDialog } from "./badge-editor/show-delete-badge-dialog";
import { deleteBadge, insertBadge } from "./config-util";
import {
LovelaceCardPath,
findLovelaceItems,
getLovelaceContainerPath,
parseLovelaceCardPath,
} from "./lovelace-path";
export async function confDeleteBadge(
element: HTMLElement,
hass: HomeAssistant,
lovelace: Lovelace,
path: LovelaceCardPath
): Promise<void> {
const { cardIndex: badgeIndex } = parseLovelaceCardPath(path);
const containerPath = getLovelaceContainerPath(path);
const badges = findLovelaceItems("badges", lovelace.config, containerPath);
const badgeConfig = ensureBadgeConfig(badges![badgeIndex]);
showDeleteBadgeDialog(element, {
badgeConfig,
deleteBadge: async () => {
try {
const newLovelace = deleteBadge(lovelace.config, path);
await lovelace.saveConfig(newLovelace);
const action = async () => {
await lovelace.saveConfig(
insertBadge(newLovelace, path, badgeConfig)
);
};
showDeleteSuccessToast(element, hass!, action);
} catch (err: any) {
showAlertDialog(element, {
text: `Deleting failed: ${err.message}`,
});
}
},
});
}
+8 -3
View File
@@ -37,6 +37,7 @@ import { generateLovelaceViewStrategy } from "../strategies/get-strategy";
import type { Lovelace } from "../types";
import { DEFAULT_VIEW_LAYOUT, PANEL_VIEW_LAYOUT } from "./const";
import { showCreateBadgeDialog } from "../editor/badge-editor/show-create-badge-dialog";
import { confDeleteBadge } from "../editor/delete-badge";
declare global {
// for fire event
@@ -46,7 +47,7 @@ declare global {
"ll-delete-card": { path: LovelaceCardPath; confirm: boolean };
"ll-create-badge": undefined;
"ll-edit-badge": { path: LovelaceCardPath };
"ll-delete-badge": { path: LovelaceCardPath };
"ll-delete-badge": { path: LovelaceCardPath; confirm: boolean };
}
interface HTMLElementEventMap {
"ll-create-card": HASSDomEvent<HASSDomEvents["ll-create-card"]>;
@@ -348,8 +349,12 @@ export class HUIView extends ReactiveElement {
});
});
this._layoutElement.addEventListener("ll-delete-badge", (ev) => {
const newLovelace = deleteBadge(this.lovelace!.config, ev.detail.path);
this.lovelace.saveConfig(newLovelace);
if (ev.detail.confirm) {
confDeleteBadge(this, this.hass!, this.lovelace!, ev.detail.path);
} else {
const newLovelace = deleteBadge(this.lovelace!.config, ev.detail.path);
this.lovelace.saveConfig(newLovelace);
}
});
}
+11 -5
View File
@@ -2616,8 +2616,10 @@
"assist_devices": "{number} Assist {number, plural,\n one {device}\n other {devices}\n}",
"delete": {
"confirm_title": "Delete {name}?",
"confirm_text": "{name} will be permanently deleted."
"confirm_text": "{name} will be permanently deleted.",
"error_preferred": "You cannot delete the preferred assistant"
},
"start_conversation": "Start conversation",
"devices": {
"title": "Assist devices",
"device": "Device",
@@ -4402,8 +4404,9 @@
}
},
"custom_integration": "Custom integration",
"depends_on_cloud": "Depends on the cloud",
"yaml_only": "Needs manual configuration",
"custom_overwrites_core": "Custom integration that replaces a core component",
"depends_on_cloud": "Depends on Internet connection",
"yaml_only": "This integration cannot be setup from the UI",
"no_config_flow": "This integration was not set up from the UI",
"disabled_polling": "Automatic polling for updated data disabled",
"debug_logging_enabled": "Debug logging enabled",
@@ -5107,7 +5110,7 @@
"unknown": "Unknown"
},
"node_type": {
"end_device": "End-device",
"end_device": "End device",
"sleepy_end_device": "Sleepy end device",
"routing_end_device": "Routing end device",
"bridge": "Bridge",
@@ -5357,7 +5360,7 @@
}
},
"cards": {
"confirm_delete": "Are you sure you want to delete this card?",
"confirm_delete": "Delete card?",
"show_more_info": "Show more information",
"actions": {
"action_confirmation": "Are you sure you want to run action ''{action}''?",
@@ -5493,6 +5496,9 @@
"default_heading": "Kitchen"
}
},
"badges": {
"confirm_delete": "Delete badge?"
},
"unused_entities": {
"title": "Unused entities",
"available_entities": "These are the entities that you have available, but are not in your dashboard yet.",
+229 -273
View File
@@ -1255,12 +1255,12 @@ __metadata:
languageName: node
linkType: hard
"@bundle-stats/plugin-webpack-filter@npm:4.15.1":
version: 4.15.1
resolution: "@bundle-stats/plugin-webpack-filter@npm:4.15.1"
"@bundle-stats/plugin-webpack-filter@npm:4.16.0":
version: 4.16.0
resolution: "@bundle-stats/plugin-webpack-filter@npm:4.16.0"
peerDependencies:
core-js: ^3.0.0
checksum: 10/68162315c41ea9f49632c92f0d44a149835fb9f8004cac2b1431f49f2fab6302b2d5863cd1453cc271cf79db343343aaabac9836b511d63e41f7d28362bbbccb
checksum: 10/e9542d8fb1dba9c921ecb02824c71f2ca20d31f984d2280711ef7d1389edc39b077e6edc5f79d4d3c3335ef8660b2fd3553415d185c38654b303823b4eddd6cc
languageName: node
linkType: hard
@@ -1412,150 +1412,150 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/ecma402-abstract@npm:2.1.0":
version: 2.1.0
resolution: "@formatjs/ecma402-abstract@npm:2.1.0"
dependencies:
"@formatjs/fast-memoize": "npm:2.2.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/8e25d2739c03913c61f0ec12a71ab7baf03386cff540e7470bee73e78e4fe9f09c9dfa860223f1177acdcfd0fa341041d25b2fe4e0a77e7209d0680831982bac
languageName: node
linkType: hard
"@formatjs/fast-memoize@npm:2.2.0":
"@formatjs/ecma402-abstract@npm:2.2.0":
version: 2.2.0
resolution: "@formatjs/fast-memoize@npm:2.2.0"
resolution: "@formatjs/ecma402-abstract@npm:2.2.0"
dependencies:
tslib: "npm:^2.4.0"
checksum: 10/8697fe72a7ece252d600a7d08105f2a2f758e2dd96f54ac0a4c508b1205a559fc08835635e1f8e5ca9dcc3ee61ce1fca4a0e7047b402f29fc96051e293a280ff
"@formatjs/fast-memoize": "npm:2.2.1"
"@formatjs/intl-localematcher": "npm:0.5.5"
tslib: "npm:^2.7.0"
checksum: 10/f836dfa8787c8d0d2022f7c77fd15025a402ee519f9cb6e68dfce2b937956059e4f96b6059c40506c7260d93bdfd0517001b568cdbea8db08b439ce5d21f437e
languageName: node
linkType: hard
"@formatjs/icu-messageformat-parser@npm:2.7.9":
version: 2.7.9
resolution: "@formatjs/icu-messageformat-parser@npm:2.7.9"
"@formatjs/fast-memoize@npm:2.2.1":
version: 2.2.1
resolution: "@formatjs/fast-memoize@npm:2.2.1"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/icu-skeleton-parser": "npm:1.8.3"
tslib: "npm:^2.4.0"
checksum: 10/8bffac5e5b832e18786f383fb60966cfa53da7c94aa9bc5e1b19bb4772aacbfbccd128e599395d1a3a1642930debfc41c6198a178437d98b9a8804dd875c6755
tslib: "npm:^2.7.0"
checksum: 10/7bb12904d4c93cfae17006388b26d97cc0e32fef5af510f80974437382cd13a88b439b4407d96b6646af1806977cf34113f3dc8f1c96b28f73856700ee7857fd
languageName: node
linkType: hard
"@formatjs/icu-skeleton-parser@npm:1.8.3":
version: 1.8.3
resolution: "@formatjs/icu-skeleton-parser@npm:1.8.3"
"@formatjs/icu-messageformat-parser@npm:2.7.10":
version: 2.7.10
resolution: "@formatjs/icu-messageformat-parser@npm:2.7.10"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
tslib: "npm:^2.4.0"
checksum: 10/9105170d65d6793be39f5b085c295bd773e5254c781e5d2c3ad389f21c96afaee1fc7f126b7d36a75a044283458f1cd9a4abdd0b8cca9241e72161fa71e2020b
"@formatjs/ecma402-abstract": "npm:2.2.0"
"@formatjs/icu-skeleton-parser": "npm:1.8.4"
tslib: "npm:^2.7.0"
checksum: 10/26b1a7108ebd4f1c3e79580b31b3e651f056d7eb2114e81d7b9d3358b366aa647443f63c6c014a2c7228bb698f5289861d5de92d862caa36ec2d85ddc36ef87d
languageName: node
linkType: hard
"@formatjs/intl-datetimeformat@npm:6.13.0":
version: 6.13.0
resolution: "@formatjs/intl-datetimeformat@npm:6.13.0"
"@formatjs/icu-skeleton-parser@npm:1.8.4":
version: 1.8.4
resolution: "@formatjs/icu-skeleton-parser@npm:1.8.4"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/a9d2451b1c4a8fa12628d5645dc710a853796c686072407f3e313527c11a61129bf5c65de912dc8f3f30780e5cc25ae9f6739903ec7a36d17a070b56b33a7314
"@formatjs/ecma402-abstract": "npm:2.2.0"
tslib: "npm:^2.7.0"
checksum: 10/15610bdbf7b8405191a41f044ccd2ba152364690b20a23bec32b98764e3de44029bb03cb897ef0bce0c2f1643ba2333dc79e99724f2619a69154c13617eb27af
languageName: node
linkType: hard
"@formatjs/intl-displaynames@npm:6.6.9":
version: 6.6.9
resolution: "@formatjs/intl-displaynames@npm:6.6.9"
"@formatjs/intl-datetimeformat@npm:6.14.0":
version: 6.14.0
resolution: "@formatjs/intl-datetimeformat@npm:6.14.0"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/b235a85fb0295b64e9b7bb033309aff0652bd06695c08ead38a5c717464c59e99d2003a50b8e936a627dd7e772254b9fd5da165a24f42c3c5c292fdcf67cb9af
"@formatjs/ecma402-abstract": "npm:2.2.0"
"@formatjs/intl-localematcher": "npm:0.5.5"
tslib: "npm:^2.7.0"
checksum: 10/f65905ac223ad16d8ba94815b1af72059fac428411d159c700b36214dbcc59d7bf64c6000212ac0381a8894e6ff4e823b4d28e4f83f7f83fb0f8de2cb75d76e7
languageName: node
linkType: hard
"@formatjs/intl-enumerator@npm:1.5.0":
version: 1.5.0
resolution: "@formatjs/intl-enumerator@npm:1.5.0"
"@formatjs/intl-displaynames@npm:6.6.10":
version: 6.6.10
resolution: "@formatjs/intl-displaynames@npm:6.6.10"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
tslib: "npm:^2.4.0"
checksum: 10/92beee0112200d8d89838d048cdd489eb8f53ea0ff739ee7a7126f66468d6179b4fa98a95e3398efa981fffaac51faf7a3c06bcef2fc3f51ea8d4b33a25cd232
"@formatjs/ecma402-abstract": "npm:2.2.0"
"@formatjs/intl-localematcher": "npm:0.5.5"
tslib: "npm:^2.7.0"
checksum: 10/03f7c8c79b1facd29522b4f2691553ca2679828f7f5a0982e123159f748deca362c5a9c49106a53eeebe5952432b027f835004acb579f0676ec70b93945745d6
languageName: node
linkType: hard
"@formatjs/intl-getcanonicallocales@npm:2.3.0":
version: 2.3.0
resolution: "@formatjs/intl-getcanonicallocales@npm:2.3.0"
"@formatjs/intl-enumerator@npm:1.6.0":
version: 1.6.0
resolution: "@formatjs/intl-enumerator@npm:1.6.0"
dependencies:
tslib: "npm:^2.4.0"
checksum: 10/eea750091e62dbe2ed892f84204e4b814096c3524daf957f0b2dbd6634541a58c9b9eb353ca5a740fd8f7c635fb0c0b14118d46322a1fb7281ebe200f6e3604a
"@formatjs/ecma402-abstract": "npm:2.2.0"
tslib: "npm:^2.7.0"
checksum: 10/df2e7f6c9dab63e319c9bbfbc30b9fad7f77c4d95b4e16e474374684d2ba186dbd81c262c50cb16417af2941cbb5a39b1c2a71572037d1a513b501f9365d3fe6
languageName: node
linkType: hard
"@formatjs/intl-listformat@npm:7.5.8":
version: 7.5.8
resolution: "@formatjs/intl-listformat@npm:7.5.8"
"@formatjs/intl-getcanonicallocales@npm:2.3.1":
version: 2.3.1
resolution: "@formatjs/intl-getcanonicallocales@npm:2.3.1"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/761de6c738758550ea3007bac20cda648aaa45e114597c0ecdd30624c2eafbc76b5003ae011a6fe96c797b747a745aad4c88347a81aa0e5ab640e8636bd6fbb2
tslib: "npm:^2.7.0"
checksum: 10/e78e095490eecdc088f055a5161c491b94f41dc396591534cc8791940acb1fc7cdcc8cdabfbf941ed6c4f2926fc4b9d9ba4abf1060099f137a9ba0f28070dea8
languageName: node
linkType: hard
"@formatjs/intl-locale@npm:4.0.1":
version: 4.0.1
resolution: "@formatjs/intl-locale@npm:4.0.1"
"@formatjs/intl-listformat@npm:7.5.9":
version: 7.5.9
resolution: "@formatjs/intl-listformat@npm:7.5.9"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/intl-enumerator": "npm:1.5.0"
"@formatjs/intl-getcanonicallocales": "npm:2.3.0"
tslib: "npm:^2.4.0"
checksum: 10/6f3412064fc314d964a3196bd4b16fab677ffa8dd64e45e4324d108a4e177a10a60dddd5224deccb1d35405207f3e1ab4d2a626e8d77bf2c812fb8e752b21140
"@formatjs/ecma402-abstract": "npm:2.2.0"
"@formatjs/intl-localematcher": "npm:0.5.5"
tslib: "npm:^2.7.0"
checksum: 10/24e6b0ce7d16a584aedc596cd781f302b9a84082489b2b0c49db15dbab1393c35210487e33c5e5c13f70e0796afc5998efca734fb84ebc541172b1463e3c7300
languageName: node
linkType: hard
"@formatjs/intl-localematcher@npm:0.5.4":
version: 0.5.4
resolution: "@formatjs/intl-localematcher@npm:0.5.4"
"@formatjs/intl-locale@npm:4.0.2":
version: 4.0.2
resolution: "@formatjs/intl-locale@npm:4.0.2"
dependencies:
tslib: "npm:^2.4.0"
checksum: 10/780cb29b42e1ea87f2eb5db268577fcdc53da52d9f096871f3a1bb78603b4ba81d208ea0b0b9bc21548797c941ce435321f62d2522795b83b740f90b0ceb5778
"@formatjs/ecma402-abstract": "npm:2.2.0"
"@formatjs/intl-enumerator": "npm:1.6.0"
"@formatjs/intl-getcanonicallocales": "npm:2.3.1"
tslib: "npm:^2.7.0"
checksum: 10/dfc7b9ae05c84e6d64ff607501ae976b3e7282c0f6534d73cd1e0e9479995826bcf971d8e2bb97f34cc121c7306b54c6398204c4630ab1451a2ea7992b662c5f
languageName: node
linkType: hard
"@formatjs/intl-numberformat@npm:8.11.0":
version: 8.11.0
resolution: "@formatjs/intl-numberformat@npm:8.11.0"
"@formatjs/intl-localematcher@npm:0.5.5":
version: 0.5.5
resolution: "@formatjs/intl-localematcher@npm:0.5.5"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/ca08753068ae375f9c1a6be871005fe64b758005aa54ae8c083ea9efa7ae023a06312031d1bf03b9f022005e3aba2796c1fc183efe0c172bd4eea562301aec91
tslib: "npm:^2.7.0"
checksum: 10/179069eb3a23510e17f118efa3b6a9873f18683977cb813e57ef08cba09bbac73fce13f42c557deb62d3da4f32a8c7ad7d522aae4f1b41625835ce564e59e750
languageName: node
linkType: hard
"@formatjs/intl-pluralrules@npm:5.2.15":
version: 5.2.15
resolution: "@formatjs/intl-pluralrules@npm:5.2.15"
"@formatjs/intl-numberformat@npm:8.12.0":
version: 8.12.0
resolution: "@formatjs/intl-numberformat@npm:8.12.0"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/8a6c756afeca3d1cb5b9f93a479993e6f036341ea32264a4542e6f65488733f9c97dc8457ba6d3d049de7160177040e47bb51f8dbbc5268e22d6800ef5d90802
"@formatjs/ecma402-abstract": "npm:2.2.0"
"@formatjs/intl-localematcher": "npm:0.5.5"
tslib: "npm:^2.7.0"
checksum: 10/f8e39177a850696690b7d7a4c3af3134094dfd657554e44ecc454fe59d34fd446063d27c5ece2ed6812266139da14a33823207ab406cbb31abe57892bd5e9343
languageName: node
linkType: hard
"@formatjs/intl-relativetimeformat@npm:11.2.15":
version: 11.2.15
resolution: "@formatjs/intl-relativetimeformat@npm:11.2.15"
"@formatjs/intl-pluralrules@npm:5.2.16":
version: 5.2.16
resolution: "@formatjs/intl-pluralrules@npm:5.2.16"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/intl-localematcher": "npm:0.5.4"
tslib: "npm:^2.4.0"
checksum: 10/a7890892cd52e37c427982a700d7613cd6a68f73e9c0bf785e9841442b37ba491d1eded3fe6df8ad4ccba4754ad6b5e9b3cc082a5d227b2988a8b6709775bea5
"@formatjs/ecma402-abstract": "npm:2.2.0"
"@formatjs/intl-localematcher": "npm:0.5.5"
tslib: "npm:^2.7.0"
checksum: 10/82133f1b4d5224ed95838e8b8d7a9f84a8829b41268cf5d352fa4cc6574767c7c0cdadff9c4ae242c3597dff53dd55a803f9f994dcc7f484130a5808b36d2987
languageName: node
linkType: hard
"@formatjs/intl-relativetimeformat@npm:11.2.16":
version: 11.2.16
resolution: "@formatjs/intl-relativetimeformat@npm:11.2.16"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.2.0"
"@formatjs/intl-localematcher": "npm:0.5.5"
tslib: "npm:^2.7.0"
checksum: 10/9c9b9f624948b51c3a3dcae88e27931a20032e78cef717bc2a54405c9a65de3239e8a2f9b1f9f10e0340bb4724dcfbbd2f9309fbca9d8ac4b8fb24feff04c8f8
languageName: node
linkType: hard
@@ -4157,10 +4157,10 @@ __metadata:
languageName: node
linkType: hard
"@types/mocha@npm:10.0.7":
version: 10.0.7
resolution: "@types/mocha@npm:10.0.7"
checksum: 10/4494871e8a867633d818b00d6f29d47379f9e23655b89ca728166ff2f0a406b97d376fcc3e7a570a3840f72abb03c886c5e66f50ae0f018376e4dc10ed179564
"@types/mocha@npm:10.0.9":
version: 10.0.9
resolution: "@types/mocha@npm:10.0.9"
checksum: 10/aa34e61e6373c5a9e8f904302fc736c04d6757f079d8500689c589b610e8b8e28bdefc2da398569e6328c6b1e6dc5a59fb485211b2bacb465c2aad04d822c28c
languageName: node
linkType: hard
@@ -5248,13 +5248,6 @@ __metadata:
languageName: node
linkType: hard
"ansi-colors@npm:4.1.1":
version: 4.1.1
resolution: "ansi-colors@npm:4.1.1"
checksum: 10/e862fddd0a9ca88f1e7c9312ea70674cec3af360c994762309f6323730525e92c77d2715ee5f08aa8f438b7ca18efe378af647f501fc92b15b8e4b3b52d09db4
languageName: node
linkType: hard
"ansi-colors@npm:^1.0.1":
version: 1.1.0
resolution: "ansi-colors@npm:1.1.0"
@@ -5264,6 +5257,13 @@ __metadata:
languageName: node
linkType: hard
"ansi-colors@npm:^4.1.3":
version: 4.1.3
resolution: "ansi-colors@npm:4.1.3"
checksum: 10/43d6e2fc7b1c6e4dc373de708ee76311ec2e0433e7e8bd3194e7ff123ea6a747428fc61afdcf5969da5be3a5f0fd054602bec56fc0ebe249ce2fcde6e649e3c2
languageName: node
linkType: hard
"ansi-escapes@npm:^4.3.2":
version: 4.3.2
resolution: "ansi-escapes@npm:4.3.2"
@@ -5820,7 +5820,7 @@ __metadata:
languageName: node
linkType: hard
"browser-stdout@npm:1.3.1":
"browser-stdout@npm:^1.3.1":
version: 1.3.1
resolution: "browser-stdout@npm:1.3.1"
checksum: 10/ac70a84e346bb7afc5045ec6f22f6a681b15a4057447d4cc1c48a25c6dedb302a49a46dd4ddfb5cdd9c96e0c905a8539be1b98ae7bc440512152967009ec7015
@@ -6629,7 +6629,7 @@ __metadata:
languageName: node
linkType: hard
"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:~4.3.6":
"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:~4.3.6":
version: 4.3.7
resolution: "debug@npm:4.3.7"
dependencies:
@@ -6641,18 +6641,6 @@ __metadata:
languageName: node
linkType: hard
"debug@npm:4.3.4":
version: 4.3.4
resolution: "debug@npm:4.3.4"
dependencies:
ms: "npm:2.1.2"
peerDependenciesMeta:
supports-color:
optional: true
checksum: 10/0073c3bcbd9cb7d71dd5f6b55be8701af42df3e56e911186dfa46fac3a5b9eb7ce7f377dd1d3be6db8977221f8eb333d945216f645cf56f6b688cd484837d255
languageName: node
linkType: hard
"debug@npm:^3.1.0, debug@npm:^3.2.7":
version: 3.2.7
resolution: "debug@npm:3.2.7"
@@ -6861,10 +6849,10 @@ __metadata:
languageName: node
linkType: hard
"diff@npm:5.0.0":
version: 5.0.0
resolution: "diff@npm:5.0.0"
checksum: 10/4a179a75b17cbb420eb9145be913f9ddb34b47cb2ba4301e80ae745122826a468f02ca8f5e56945958de26ace594899c8381acb6659c88e7803ef078b53d690c
"diff@npm:^5.2.0":
version: 5.2.0
resolution: "diff@npm:5.2.0"
checksum: 10/01b7b440f83a997350a988e9d2f558366c0f90f15be19f4aa7f1bb3109a4e153dfc3b9fbf78e14ea725717017407eeaa2271e3896374a0181e8f52445740846d
languageName: node
linkType: hard
@@ -7259,13 +7247,6 @@ __metadata:
languageName: node
linkType: hard
"escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0":
version: 4.0.0
resolution: "escape-string-regexp@npm:4.0.0"
checksum: 10/98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5
languageName: node
linkType: hard
"escape-string-regexp@npm:^1.0.5":
version: 1.0.5
resolution: "escape-string-regexp@npm:1.0.5"
@@ -7273,6 +7254,13 @@ __metadata:
languageName: node
linkType: hard
"escape-string-regexp@npm:^4.0.0":
version: 4.0.0
resolution: "escape-string-regexp@npm:4.0.0"
checksum: 10/98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5
languageName: node
linkType: hard
"eslint-config-airbnb-base@npm:15.0.0, eslint-config-airbnb-base@npm:^15.0.0":
version: 15.0.0
resolution: "eslint-config-airbnb-base@npm:15.0.0"
@@ -7921,16 +7909,6 @@ __metadata:
languageName: node
linkType: hard
"find-up@npm:5.0.0, find-up@npm:^5.0.0":
version: 5.0.0
resolution: "find-up@npm:5.0.0"
dependencies:
locate-path: "npm:^6.0.0"
path-exists: "npm:^4.0.0"
checksum: 10/07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095
languageName: node
linkType: hard
"find-up@npm:^4.0.0, find-up@npm:^4.1.0":
version: 4.1.0
resolution: "find-up@npm:4.1.0"
@@ -7941,6 +7919,16 @@ __metadata:
languageName: node
linkType: hard
"find-up@npm:^5.0.0":
version: 5.0.0
resolution: "find-up@npm:5.0.0"
dependencies:
locate-path: "npm:^6.0.0"
path-exists: "npm:^4.0.0"
checksum: 10/07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095
languageName: node
linkType: hard
"find-up@npm:^6.3.0":
version: 6.3.0
resolution: "find-up@npm:6.3.0"
@@ -8343,19 +8331,6 @@ __metadata:
languageName: node
linkType: hard
"glob@npm:8.1.0":
version: 8.1.0
resolution: "glob@npm:8.1.0"
dependencies:
fs.realpath: "npm:^1.0.0"
inflight: "npm:^1.0.4"
inherits: "npm:2"
minimatch: "npm:^5.0.1"
once: "npm:^1.3.0"
checksum: 10/9aab1c75eb087c35dbc41d1f742e51d0507aa2b14c910d96fb8287107a10a22f4bbdce26fc0a3da4c69a20f7b26d62f1640b346a4f6e6becfff47f335bb1dc5e
languageName: node
linkType: hard
"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7, glob@npm:^10.4.1":
version: 10.4.5
resolution: "glob@npm:10.4.5"
@@ -8386,6 +8361,19 @@ __metadata:
languageName: node
linkType: hard
"glob@npm:^8.1.0":
version: 8.1.0
resolution: "glob@npm:8.1.0"
dependencies:
fs.realpath: "npm:^1.0.0"
inflight: "npm:^1.0.4"
inherits: "npm:2"
minimatch: "npm:^5.0.1"
once: "npm:^1.3.0"
checksum: 10/9aab1c75eb087c35dbc41d1f742e51d0507aa2b14c910d96fb8287107a10a22f4bbdce26fc0a3da4c69a20f7b26d62f1640b346a4f6e6becfff47f335bb1dc5e
languageName: node
linkType: hard
"global-modules@npm:^1.0.0":
version: 1.0.0
resolution: "global-modules@npm:1.0.0"
@@ -8672,7 +8660,7 @@ __metadata:
languageName: node
linkType: hard
"he@npm:1.2.0, he@npm:^1.2.0":
"he@npm:^1.2.0":
version: 1.2.0
resolution: "he@npm:1.2.0"
bin:
@@ -8707,7 +8695,7 @@ __metadata:
"@babel/preset-typescript": "npm:7.25.7"
"@babel/runtime": "npm:7.25.7"
"@braintree/sanitize-url": "npm:7.1.0"
"@bundle-stats/plugin-webpack-filter": "npm:4.15.1"
"@bundle-stats/plugin-webpack-filter": "npm:4.16.0"
"@codemirror/autocomplete": "npm:6.18.1"
"@codemirror/commands": "npm:6.7.0"
"@codemirror/language": "npm:6.10.3"
@@ -8716,14 +8704,14 @@ __metadata:
"@codemirror/state": "npm:6.4.1"
"@codemirror/view": "npm:6.34.1"
"@egjs/hammerjs": "npm:2.0.17"
"@formatjs/intl-datetimeformat": "npm:6.13.0"
"@formatjs/intl-displaynames": "npm:6.6.9"
"@formatjs/intl-getcanonicallocales": "npm:2.3.0"
"@formatjs/intl-listformat": "npm:7.5.8"
"@formatjs/intl-locale": "npm:4.0.1"
"@formatjs/intl-numberformat": "npm:8.11.0"
"@formatjs/intl-pluralrules": "npm:5.2.15"
"@formatjs/intl-relativetimeformat": "npm:11.2.15"
"@formatjs/intl-datetimeformat": "npm:6.14.0"
"@formatjs/intl-displaynames": "npm:6.6.10"
"@formatjs/intl-getcanonicallocales": "npm:2.3.1"
"@formatjs/intl-listformat": "npm:7.5.9"
"@formatjs/intl-locale": "npm:4.0.2"
"@formatjs/intl-numberformat": "npm:8.12.0"
"@formatjs/intl-pluralrules": "npm:5.2.16"
"@formatjs/intl-relativetimeformat": "npm:11.2.16"
"@fullcalendar/core": "npm:6.1.15"
"@fullcalendar/daygrid": "npm:6.1.15"
"@fullcalendar/interaction": "npm:6.1.15"
@@ -8792,7 +8780,7 @@ __metadata:
"@types/leaflet-draw": "npm:1.0.11"
"@types/lodash.merge": "npm:4.6.9"
"@types/luxon": "npm:3.4.2"
"@types/mocha": "npm:10.0.7"
"@types/mocha": "npm:10.0.9"
"@types/qrcode": "npm:1.5.5"
"@types/serve-handler": "npm:6.1.4"
"@types/sortablejs": "npm:1.15.8"
@@ -8853,8 +8841,8 @@ __metadata:
html-minifier-terser: "npm:7.2.0"
husky: "npm:9.1.6"
idb-keyval: "npm:6.2.1"
instant-mocha: "npm:1.5.2"
intl-messageformat: "npm:10.6.0"
instant-mocha: "npm:1.5.3"
intl-messageformat: "npm:10.7.0"
js-yaml: "npm:4.1.0"
jszip: "npm:3.10.1"
leaflet: "npm:1.9.4"
@@ -8869,7 +8857,7 @@ __metadata:
map-stream: "npm:0.0.7"
marked: "npm:14.1.2"
memoize-one: "npm:6.0.0"
mocha: "npm:10.5.0"
mocha: "npm:10.7.3"
node-vibrant: "npm:3.2.1-alpha.1"
object-hash: "npm:3.0.0"
open: "npm:10.1.0"
@@ -9262,9 +9250,9 @@ __metadata:
languageName: node
linkType: hard
"instant-mocha@npm:1.5.2":
version: 1.5.2
resolution: "instant-mocha@npm:1.5.2"
"instant-mocha@npm:1.5.3":
version: 1.5.3
resolution: "instant-mocha@npm:1.5.3"
dependencies:
"@cspotcode/source-map-support": "npm:^0.8.1"
fs-require: "npm:^1.6.0"
@@ -9275,7 +9263,7 @@ __metadata:
webpack: 4 || 5
bin:
instant-mocha: dist/cli.js
checksum: 10/e7b045aba1c16e32af6a1e401cd34323cdefc0f2d00dc0ed45c7b96f2ed29ab179987deb43614acf99bae59e69c222adb8a4eac67eae823b357495cd4113f8a7
checksum: 10/c3ba6728c0bd1cf876c9c2fe1fecbe1df370cebb1709d0fd1addf001369f435c8091d4a704ec9dd5ee15b919ceb63624cec5d46760db2d1c2d6a6952c72f9e16
languageName: node
linkType: hard
@@ -9304,15 +9292,15 @@ __metadata:
languageName: node
linkType: hard
"intl-messageformat@npm:10.6.0":
version: 10.6.0
resolution: "intl-messageformat@npm:10.6.0"
"intl-messageformat@npm:10.7.0":
version: 10.7.0
resolution: "intl-messageformat@npm:10.7.0"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.1.0"
"@formatjs/fast-memoize": "npm:2.2.0"
"@formatjs/icu-messageformat-parser": "npm:2.7.9"
tslib: "npm:^2.4.0"
checksum: 10/14e6eeaebfbbcd8c7032a6dab623438575aa4407b509cac5ee69b126209faf0f0717e566e223fa60608d7dd5f4ec5459d0dd9c6c89adda302cb008d67b536466
"@formatjs/ecma402-abstract": "npm:2.2.0"
"@formatjs/fast-memoize": "npm:2.2.1"
"@formatjs/icu-messageformat-parser": "npm:2.7.10"
tslib: "npm:^2.7.0"
checksum: 10/78b4c3fe6d05b1cea66f2207255e6f25e4e9f6dd4f0b9ed00b2f3a85dfd2f55e4fe7d24faf2123463213685116368384b85dde3573447bb8e86e81e41344eef7
languageName: node
linkType: hard
@@ -10483,7 +10471,7 @@ __metadata:
languageName: node
linkType: hard
"log-symbols@npm:4.1.0":
"log-symbols@npm:^4.1.0":
version: 4.1.0
resolution: "log-symbols@npm:4.1.0"
dependencies:
@@ -10800,15 +10788,6 @@ __metadata:
languageName: node
linkType: hard
"minimatch@npm:5.0.1":
version: 5.0.1
resolution: "minimatch@npm:5.0.1"
dependencies:
brace-expansion: "npm:^2.0.1"
checksum: 10/2656580f18d9f38ada186196fcc72dc9076d70f7227adc664e72614d464e075dc4ae3936e6742519e09e336996ef33c6035e606888b12f65ca7fda792ddd2085
languageName: node
linkType: hard
"minimatch@npm:^10.0.0":
version: 10.0.1
resolution: "minimatch@npm:10.0.1"
@@ -10818,7 +10797,7 @@ __metadata:
languageName: node
linkType: hard
"minimatch@npm:^5.0.1":
"minimatch@npm:^5.0.1, minimatch@npm:^5.1.6":
version: 5.1.6
resolution: "minimatch@npm:5.1.6"
dependencies:
@@ -10973,34 +10952,34 @@ __metadata:
languageName: node
linkType: hard
"mocha@npm:10.5.0":
version: 10.5.0
resolution: "mocha@npm:10.5.0"
"mocha@npm:10.7.3":
version: 10.7.3
resolution: "mocha@npm:10.7.3"
dependencies:
ansi-colors: "npm:4.1.1"
browser-stdout: "npm:1.3.1"
ansi-colors: "npm:^4.1.3"
browser-stdout: "npm:^1.3.1"
chokidar: "npm:^3.5.3"
debug: "npm:4.3.4"
diff: "npm:5.0.0"
escape-string-regexp: "npm:4.0.0"
find-up: "npm:5.0.0"
glob: "npm:8.1.0"
he: "npm:1.2.0"
js-yaml: "npm:4.1.0"
log-symbols: "npm:4.1.0"
minimatch: "npm:5.0.1"
ms: "npm:2.1.3"
serialize-javascript: "npm:6.0.0"
strip-json-comments: "npm:3.1.1"
supports-color: "npm:8.1.1"
workerpool: "npm:6.2.1"
yargs: "npm:16.2.0"
yargs-parser: "npm:20.2.4"
yargs-unparser: "npm:2.0.0"
debug: "npm:^4.3.5"
diff: "npm:^5.2.0"
escape-string-regexp: "npm:^4.0.0"
find-up: "npm:^5.0.0"
glob: "npm:^8.1.0"
he: "npm:^1.2.0"
js-yaml: "npm:^4.1.0"
log-symbols: "npm:^4.1.0"
minimatch: "npm:^5.1.6"
ms: "npm:^2.1.3"
serialize-javascript: "npm:^6.0.2"
strip-json-comments: "npm:^3.1.1"
supports-color: "npm:^8.1.1"
workerpool: "npm:^6.5.1"
yargs: "npm:^16.2.0"
yargs-parser: "npm:^20.2.9"
yargs-unparser: "npm:^2.0.0"
bin:
_mocha: bin/_mocha
mocha: bin/mocha.js
checksum: 10/64f5aace4a5b7eed23d8bcfaf1eacdaafbffdc5e3ee977ecb32ace8f91733b1520b8342ce02d7101e8d7b8bd4008e055e4f4f63a0e4a3da81baf0e41566a07ab
checksum: 10/5757aeb320df2507338bfba41731070ce16d27177c5876672fff4bcc4f7b7bcf1afe6ec761bfded43a5d28032d7b797b8b905b5b44c9420203f3ee71457732c1
languageName: node
linkType: hard
@@ -11011,13 +10990,6 @@ __metadata:
languageName: node
linkType: hard
"ms@npm:2.1.2":
version: 2.1.2
resolution: "ms@npm:2.1.2"
checksum: 10/673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f
languageName: node
linkType: hard
"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3":
version: 2.1.3
resolution: "ms@npm:2.1.3"
@@ -12739,15 +12711,6 @@ __metadata:
languageName: node
linkType: hard
"serialize-javascript@npm:6.0.0":
version: 6.0.0
resolution: "serialize-javascript@npm:6.0.0"
dependencies:
randombytes: "npm:^2.1.0"
checksum: 10/ed3dabfbb565c48c9eb1ca8fe58f0d256902ab70a8a605be634ddd68388d5f728bb0bd1268e94fab628748ba8ad8392f01b05f3cbe1e4878b5c58c669fd3d1b4
languageName: node
linkType: hard
"serialize-javascript@npm:^4.0.0":
version: 4.0.0
resolution: "serialize-javascript@npm:4.0.0"
@@ -12757,7 +12720,7 @@ __metadata:
languageName: node
linkType: hard
"serialize-javascript@npm:^6.0.1":
"serialize-javascript@npm:^6.0.1, serialize-javascript@npm:^6.0.2":
version: 6.0.2
resolution: "serialize-javascript@npm:6.0.2"
dependencies:
@@ -13393,7 +13356,7 @@ __metadata:
languageName: node
linkType: hard
"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.1":
"strip-json-comments@npm:^3.1.1":
version: 3.1.1
resolution: "strip-json-comments@npm:3.1.1"
checksum: 10/492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443
@@ -13424,15 +13387,6 @@ __metadata:
languageName: node
linkType: hard
"supports-color@npm:8.1.1, supports-color@npm:^8.0.0":
version: 8.1.1
resolution: "supports-color@npm:8.1.1"
dependencies:
has-flag: "npm:^4.0.0"
checksum: 10/157b534df88e39c5518c5e78c35580c1eca848d7dbaf31bbe06cdfc048e22c7ff1a9d046ae17b25691128f631a51d9ec373c1b740c12ae4f0de6e292037e4282
languageName: node
linkType: hard
"supports-color@npm:^5.3.0":
version: 5.5.0
resolution: "supports-color@npm:5.5.0"
@@ -13451,6 +13405,15 @@ __metadata:
languageName: node
linkType: hard
"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1":
version: 8.1.1
resolution: "supports-color@npm:8.1.1"
dependencies:
has-flag: "npm:^4.0.0"
checksum: 10/157b534df88e39c5518c5e78c35580c1eca848d7dbaf31bbe06cdfc048e22c7ff1a9d046ae17b25691128f631a51d9ec373c1b740c12ae4f0de6e292037e4282
languageName: node
linkType: hard
"supports-preserve-symlinks-flag@npm:^1.0.0":
version: 1.0.0
resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
@@ -13819,7 +13782,7 @@ __metadata:
languageName: node
linkType: hard
"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.2, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0":
"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.2, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.7.0":
version: 2.7.0
resolution: "tslib@npm:2.7.0"
checksum: 10/9a5b47ddac65874fa011c20ff76db69f97cf90c78cff5934799ab8894a5342db2d17b4e7613a087046bc1d133d21547ddff87ac558abeec31ffa929c88b7fce6
@@ -15140,10 +15103,10 @@ __metadata:
languageName: node
linkType: hard
"workerpool@npm:6.2.1":
version: 6.2.1
resolution: "workerpool@npm:6.2.1"
checksum: 10/3e637f76320cab92eaeffa4fbefb351db02e20aa29245d8ee05fa7c088780ef7b4446bfafff2668a22fd94b7d9d97c7020117036ac77a76370ecea278b9a9b91
"workerpool@npm:^6.5.1":
version: 6.5.1
resolution: "workerpool@npm:6.5.1"
checksum: 10/b1b00139fe62f2ebec556a2af8085bf6e7502ad26cf2a4dcb34fb4408b2e68aa12c88b0a50cb463b24f2806d60fa491fc0da933b56ec3b53646aeec0025d14cb
languageName: node
linkType: hard
@@ -15327,13 +15290,6 @@ __metadata:
languageName: node
linkType: hard
"yargs-parser@npm:20.2.4":
version: 20.2.4
resolution: "yargs-parser@npm:20.2.4"
checksum: 10/db8f251ae40e24782d5c089ed86883ba3c0ce7f3c174002a67ec500802f928df9d505fea5d04829769221ce20b0f69f6fb1138fbb2e2fb102e3e9d426d20edab
languageName: node
linkType: hard
"yargs-parser@npm:^18.1.2":
version: 18.1.3
resolution: "yargs-parser@npm:18.1.3"
@@ -15344,7 +15300,7 @@ __metadata:
languageName: node
linkType: hard
"yargs-parser@npm:^20.2.2":
"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.9":
version: 20.2.9
resolution: "yargs-parser@npm:20.2.9"
checksum: 10/0188f430a0f496551d09df6719a9132a3469e47fe2747208b1dd0ab2bb0c512a95d0b081628bbca5400fb20dbf2fabe63d22badb346cecadffdd948b049f3fcc
@@ -15358,7 +15314,7 @@ __metadata:
languageName: node
linkType: hard
"yargs-unparser@npm:2.0.0":
"yargs-unparser@npm:^2.0.0":
version: 2.0.0
resolution: "yargs-unparser@npm:2.0.0"
dependencies:
@@ -15370,21 +15326,6 @@ __metadata:
languageName: node
linkType: hard
"yargs@npm:16.2.0, yargs@npm:^16.2.0":
version: 16.2.0
resolution: "yargs@npm:16.2.0"
dependencies:
cliui: "npm:^7.0.2"
escalade: "npm:^3.1.1"
get-caller-file: "npm:^2.0.5"
require-directory: "npm:^2.1.1"
string-width: "npm:^4.2.0"
y18n: "npm:^5.0.5"
yargs-parser: "npm:^20.2.2"
checksum: 10/807fa21211d2117135d557f95fcd3c3d390530cda2eca0c840f1d95f0f40209dcfeb5ec18c785a1f3425896e623e3b2681e8bb7b6600060eda1c3f4804e7957e
languageName: node
linkType: hard
"yargs@npm:^15.3.1":
version: 15.4.1
resolution: "yargs@npm:15.4.1"
@@ -15404,6 +15345,21 @@ __metadata:
languageName: node
linkType: hard
"yargs@npm:^16.2.0":
version: 16.2.0
resolution: "yargs@npm:16.2.0"
dependencies:
cliui: "npm:^7.0.2"
escalade: "npm:^3.1.1"
get-caller-file: "npm:^2.0.5"
require-directory: "npm:^2.1.1"
string-width: "npm:^4.2.0"
y18n: "npm:^5.0.5"
yargs-parser: "npm:^20.2.2"
checksum: 10/807fa21211d2117135d557f95fcd3c3d390530cda2eca0c840f1d95f0f40209dcfeb5ec18c785a1f3425896e623e3b2681e8bb7b6600060eda1c3f4804e7957e
languageName: node
linkType: hard
"yargs@npm:^17.5.1, yargs@npm:^17.7.2":
version: 17.7.2
resolution: "yargs@npm:17.7.2"