diff --git a/hassio/src/hassio-router.ts b/hassio/src/hassio-router.ts index 4118e82387..4e71ca7ca6 100644 --- a/hassio/src/hassio-router.ts +++ b/hassio/src/hassio-router.ts @@ -23,7 +23,7 @@ class HassioRouter extends HassRouterPage { protected routerOptions: RouterOptions = { // Hass.io has a page with tabs, so we route all non-matching routes to it. defaultPage: "dashboard", - initialLoad: () => this._fetchData(), + initialLoad: () => this._redirectIngress(), showLoading: true, routes: { dashboard: { @@ -50,7 +50,13 @@ class HassioRouter extends HassRouterPage { protected updatePageEl(el) { // the tabs page does its own routing so needs full route. - const route = el.nodeName === "HASSIO-PANEL" ? this.route : this.routeTail; + const hassioPanel = el.nodeName === "HASSIO-PANEL"; + const route = hassioPanel ? this.route : this.routeTail; + + if (hassioPanel && this.panel.config?.ingress) { + this._redirectIngress(); + return; + } el.hass = this.hass; el.narrow = this.narrow; @@ -63,15 +69,14 @@ class HassioRouter extends HassRouterPage { } } - private async _fetchData() { + private async _redirectIngress() { if (this.panel.config && this.panel.config.ingress) { - this._redirectIngress(this.panel.config.ingress); + this.route = { + prefix: "/hassio", + path: `/ingress/${this.panel.config.ingress}`, + }; } } - - private _redirectIngress(addonSlug: string) { - this.route = { prefix: "/hassio", path: `/ingress/${addonSlug}` }; - } } declare global { diff --git a/package.json b/package.json index 0956efd2c2..f189d9dce1 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,14 @@ "license": "Apache-2.0", "dependencies": { "@braintree/sanitize-url": "^5.0.0", + "@codemirror/commands": "^0.17.2", + "@codemirror/gutter": "^0.17.2", + "@codemirror/highlight": "^0.17.2", + "@codemirror/legacy-modes": "^0.17.1", + "@codemirror/state": "^0.17.1", + "@codemirror/stream-parser": "^0.17.1", + "@codemirror/text": "^0.17.2", + "@codemirror/view": "^0.17.7", "@formatjs/intl-getcanonicallocales": "^1.4.6", "@formatjs/intl-pluralrules": "^3.4.10", "@fullcalendar/common": "5.1.0", @@ -177,7 +185,7 @@ "eslint": "^6.8.0", "eslint-config-airbnb-typescript": "^7.2.1", "eslint-config-prettier": "^6.10.1", - "eslint-import-resolver-webpack": "^0.12.2", + "eslint-import-resolver-webpack": "^0.13.0", "eslint-plugin-disable": "^2.0.1", "eslint-plugin-import": "^2.20.2", "eslint-plugin-lit": "^1.2.0", @@ -213,16 +221,16 @@ "sinon": "^7.3.1", "source-map-url": "^0.4.0", "systemjs": "^6.3.2", - "terser-webpack-plugin": "^5.0.0", + "terser-webpack-plugin": "^5.1.1", "ts-lit-plugin": "^1.2.1", "ts-mocha": "^7.0.0", "typescript": "^4.0.3", "vinyl-buffer": "^1.0.1", "vinyl-source-stream": "^2.0.0", - "webpack": "5.1.3", - "webpack-cli": "4.1.0", - "webpack-dev-server": "^3.11.0", - "webpack-manifest-plugin": "~3.0.0", + "webpack": "^5.24.1", + "webpack-cli": "^4.5.0", + "webpack-dev-server": "^3.11.2", + "webpack-manifest-plugin": "^3.0.0", "workbox-build": "^5.1.3" }, "_comment": "Polymer fixed to 3.1 because 3.2 throws on logbook page", diff --git a/setup.py b/setup.py index f63d078d8b..99164374fa 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20210222.0", + version="20210224.0", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors", diff --git a/src/common/config/version.ts b/src/common/config/version.ts index affdf9d94d..640a9eec45 100644 --- a/src/common/config/version.ts +++ b/src/common/config/version.ts @@ -5,11 +5,15 @@ export const atLeastVersion = ( patch?: number ): boolean => { const [haMajor, haMinor, haPatch] = version.split(".", 3); + return ( Number(haMajor) > major || - (Number(haMajor) === major && Number(haMinor) >= minor) || + (Number(haMajor) === major && (patch === undefined + ? Number(haMinor) >= minor + : Number(haMinor) > minor)) || (patch !== undefined && - Number(haMajor) === major && Number(haMinor) === minor && + Number(haMajor) === major && + Number(haMinor) === minor && Number(haPatch) >= patch) ); }; diff --git a/src/common/entity/battery_icon.ts b/src/common/entity/battery_icon.ts index 61539c6c43..f4b1784232 100644 --- a/src/common/entity/battery_icon.ts +++ b/src/common/entity/battery_icon.ts @@ -8,12 +8,19 @@ export const batteryIcon = ( const battery = Number(batteryState.state); const battery_charging = batteryChargingState && batteryChargingState.state === "on"; + let icon = "hass:battery"; if (isNaN(battery)) { - return "hass:battery-unknown"; + if (batteryState.state === "off") { + icon += "-full"; + } else if (batteryState.state === "on") { + icon += "-alert"; + } else { + icon += "-unknown"; + } + return icon; } - let icon = "hass:battery"; const batteryRound = Math.round(battery / 10) * 10; if (battery_charging && battery > 10) { icon += `-charging-${batteryRound}`; diff --git a/src/common/style/icon_color_css.ts b/src/common/style/icon_color_css.ts index 58732e7b17..4672d0ca9c 100644 --- a/src/common/style/icon_color_css.ts +++ b/src/common/style/icon_color_css.ts @@ -15,7 +15,7 @@ export const iconColorCSS = css` ha-icon[data-domain="media_player"][data-state="on"], ha-icon[data-domain="media_player"][data-state="paused"], ha-icon[data-domain="media_player"][data-state="playing"], - ha-icon[data-domain="script"][data-state="running"], + ha-icon[data-domain="script"][data-state="on"], ha-icon[data-domain="sun"][data-state="above_horizon"], ha-icon[data-domain="switch"][data-state="on"], ha-icon[data-domain="timer"][data-state="active"], diff --git a/src/components/entity/state-badge.ts b/src/components/entity/state-badge.ts index 4711bf4dfc..0b67adcc6a 100644 --- a/src/components/entity/state-badge.ts +++ b/src/components/entity/state-badge.ts @@ -115,7 +115,7 @@ export class StateBadge extends LitElement { // eslint-disable-next-line console.warn(errorMessage); } - // lowest brighntess will be around 50% (that's pretty dark) + // lowest brightness will be around 50% (that's pretty dark) iconStyle.filter = `brightness(${(brightness + 245) / 5}%)`; } } diff --git a/src/components/ha-addon-picker.ts b/src/components/ha-addon-picker.ts new file mode 100644 index 0000000000..582eaefcff --- /dev/null +++ b/src/components/ha-addon-picker.ts @@ -0,0 +1,148 @@ +import { + customElement, + html, + internalProperty, + LitElement, + property, + query, + TemplateResult, +} from "lit-element"; +import { isComponentLoaded } from "../common/config/is_component_loaded"; +import { fireEvent } from "../common/dom/fire_event"; +import { compare } from "../common/string/compare"; +import { HassioAddonInfo } from "../data/hassio/addon"; +import { fetchHassioSupervisorInfo } from "../data/hassio/supervisor"; +import { showAlertDialog } from "../dialogs/generic/show-dialog-box"; +import { PolymerChangedEvent } from "../polymer-types"; +import { HomeAssistant } from "../types"; +import { HaComboBox } from "./ha-combo-box"; + +const rowRenderer = ( + root: HTMLElement, + _owner, + model: { item: HassioAddonInfo } +) => { + if (!root.firstElementChild) { + root.innerHTML = ` + + + +
[[item.name]]
+
[[item.slug]]
+
+
+ `; + } + + root.querySelector(".name")!.textContent = model.item.name; + root.querySelector("[secondary]")!.textContent = model.item.slug; +}; + +@customElement("ha-addon-picker") +class HaAddonPicker extends LitElement { + public hass!: HomeAssistant; + + @property() public label?: string; + + @property() public value = ""; + + @internalProperty() private _addons?: HassioAddonInfo[]; + + @property({ type: Boolean }) public disabled = false; + + @query("ha-combo-box") private _comboBox!: HaComboBox; + + public open() { + this._comboBox?.open(); + } + + public focus() { + this._comboBox?.focus(); + } + + protected firstUpdated() { + this._getAddons(); + } + + protected render(): TemplateResult { + if (!this._addons) { + return html``; + } + return html` + + `; + } + + private async _getAddons() { + try { + if (isComponentLoaded(this.hass, "hassio")) { + const supervisorInfo = await fetchHassioSupervisorInfo(this.hass); + this._addons = supervisorInfo.addons.sort((a, b) => + compare(a.name, b.name) + ); + } else { + showAlertDialog(this, { + title: this.hass.localize( + "ui.componencts.addon-picker.error.no_supervisor.title" + ), + text: this.hass.localize( + "ui.componencts.addon-picker.error.no_supervisor.description" + ), + }); + } + } catch (error) { + showAlertDialog(this, { + title: this.hass.localize( + "ui.componencts.addon-picker.error.fetch_addons.title" + ), + text: this.hass.localize( + "ui.componencts.addon-picker.error.fetch_addons.description" + ), + }); + } + } + + private get _value() { + return this.value || ""; + } + + private _addonChanged(ev: PolymerChangedEvent) { + ev.stopPropagation(); + const newValue = ev.detail.value; + + if (newValue !== this._value) { + this._setValue(newValue); + } + } + + private _setValue(value: string) { + this.value = value; + setTimeout(() => { + fireEvent(this, "value-changed", { value }); + fireEvent(this, "change"); + }, 0); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-addon-picker": HaAddonPicker; + } +} diff --git a/src/components/ha-area-picker.ts b/src/components/ha-area-picker.ts index 793a426e8f..0bf8fb199f 100644 --- a/src/components/ha-area-picker.ts +++ b/src/components/ha-area-picker.ts @@ -140,7 +140,7 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) { this._devices = devices; }), subscribeEntityRegistry(this.hass.connection!, (entities) => { - this._entities = entities; + this._entities = entities.filter((entity) => entity.area_id); }), ]; } @@ -193,11 +193,14 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) { deviceEntityLookup[entity.device_id].push(entity); } inputDevices = devices; - inputEntities = entities.filter((entity) => entity.area_id); - } else if (deviceFilter) { - inputDevices = devices; - } else if (entityFilter) { - inputEntities = entities.filter((entity) => entity.area_id); + inputEntities = entities; + } else { + if (deviceFilter) { + inputDevices = devices; + } + if (entityFilter) { + inputEntities = entities; + } } if (includeDomains) { diff --git a/src/components/ha-code-editor.ts b/src/components/ha-code-editor.ts index 50e851fd22..eb092ec02d 100644 --- a/src/components/ha-code-editor.ts +++ b/src/components/ha-code-editor.ts @@ -1,4 +1,5 @@ -import { Editor } from "codemirror"; +import type { StreamLanguage } from "@codemirror/stream-parser"; +import type { EditorView, KeyBinding, ViewUpdate } from "@codemirror/view"; import { customElement, internalProperty, @@ -15,32 +16,40 @@ declare global { } } +const modeTag = Symbol("mode"); + +const readOnlyTag = Symbol("readOnly"); + +const saveKeyBinding: KeyBinding = { + key: "Mod-s", + run: (view: EditorView) => { + fireEvent(view.dom, "editor-save"); + return true; + }, +}; + @customElement("ha-code-editor") export class HaCodeEditor extends UpdatingElement { - public codemirror?: Editor; + public codemirror?: EditorView; - @property() public mode?: string; + @property() public mode = "yaml"; @property({ type: Boolean }) public autofocus = false; @property({ type: Boolean }) public readOnly = false; - @property() public rtl = false; - @property() public error = false; @internalProperty() private _value = ""; + @internalProperty() private _langs?: Record>; + public set value(value: string) { this._value = value; } public get value(): string { - return this.codemirror ? this.codemirror.getValue() : this._value; - } - - public get hasComments(): boolean { - return !!this.shadowRoot!.querySelector("span.cm-comment"); + return this.codemirror ? this.codemirror.state.doc.toString() : this._value; } public connectedCallback() { @@ -48,7 +57,6 @@ export class HaCodeEditor extends UpdatingElement { if (!this.codemirror) { return; } - this.codemirror.refresh(); if (this.autofocus !== false) { this.codemirror.focus(); } @@ -62,17 +70,27 @@ export class HaCodeEditor extends UpdatingElement { } if (changedProps.has("mode")) { - this.codemirror.setOption("mode", this.mode); + this.codemirror.dispatch({ + reconfigure: { + [modeTag]: this._mode, + }, + }); } - if (changedProps.has("autofocus")) { - this.codemirror.setOption("autofocus", this.autofocus !== false); + if (changedProps.has("readOnly")) { + this.codemirror.dispatch({ + reconfigure: { + [readOnlyTag]: !this.readOnly, + }, + }); } if (changedProps.has("_value") && this._value !== this.value) { - this.codemirror.setValue(this._value); - } - if (changedProps.has("rtl")) { - this.codemirror.setOption("gutters", this._calcGutters()); - this._setScrollBarDirection(); + this.codemirror.dispatch({ + changes: { + from: 0, + to: this.codemirror.state.doc.length, + insert: this._value, + }, + }); } if (changedProps.has("error")) { this.classList.toggle("error-state", this.error); @@ -85,159 +103,62 @@ export class HaCodeEditor extends UpdatingElement { this._load(); } + private get _mode() { + return this._langs![this.mode]; + } + private async _load(): Promise { const loaded = await loadCodeMirror(); - const codeMirror = loaded.codeMirror; + this._langs = loaded.langs; const shadowRoot = this.attachShadow({ mode: "open" }); - shadowRoot!.innerHTML = ` - `; - this.codemirror = codeMirror(shadowRoot, { - value: this._value, - lineNumbers: true, - tabSize: 2, - mode: this.mode, - autofocus: this.autofocus !== false, - viewportMargin: Infinity, - readOnly: this.readOnly, - extraKeys: { - Tab: "indentMore", - "Shift-Tab": "indentLess", - }, - gutters: this._calcGutters(), + const container = document.createElement("span"); + + shadowRoot.appendChild(container); + + this.codemirror = new loaded.EditorView({ + state: loaded.EditorState.create({ + doc: this._value, + extensions: [ + loaded.lineNumbers(), + loaded.keymap.of([ + ...loaded.defaultKeymap, + loaded.defaultTabBinding, + saveKeyBinding, + ]), + loaded.tagExtension(modeTag, this._mode), + loaded.theme, + loaded.Prec.fallback(loaded.highlightStyle), + loaded.EditorView.updateListener.of((update) => + this._onUpdate(update) + ), + loaded.tagExtension( + readOnlyTag, + loaded.EditorView.editable.of(!this.readOnly) + ), + ], + }), + root: shadowRoot, + parent: container, }); - this._setScrollBarDirection(); - this.codemirror!.on("changes", () => this._onChange()); } private _blockKeyboardShortcuts() { this.addEventListener("keydown", (ev) => ev.stopPropagation()); } - private _onChange(): void { + private _onUpdate(update: ViewUpdate): void { + if (!update.docChanged) { + return; + } const newValue = this.value; if (newValue === this._value) { return; @@ -245,16 +166,6 @@ export class HaCodeEditor extends UpdatingElement { this._value = newValue; fireEvent(this, "value-changed", { value: this._value }); } - - private _calcGutters(): string[] { - return this.rtl ? ["rtl-gutter", "CodeMirror-linenumbers"] : []; - } - - private _setScrollBarDirection(): void { - if (this.codemirror) { - this.codemirror.getWrapperElement().classList.toggle("rtl", this.rtl); - } - } } declare global { diff --git a/src/components/ha-selector/ha-selector-addon.ts b/src/components/ha-selector/ha-selector-addon.ts new file mode 100644 index 0000000000..923fb4c29e --- /dev/null +++ b/src/components/ha-selector/ha-selector-addon.ts @@ -0,0 +1,30 @@ +import { customElement, html, LitElement, property } from "lit-element"; +import { AddonSelector } from "../../data/selector"; +import { HomeAssistant } from "../../types"; +import "../ha-addon-picker"; + +@customElement("ha-selector-addon") +export class HaAddonSelector extends LitElement { + @property() public hass!: HomeAssistant; + + @property() public selector!: AddonSelector; + + @property() public value?: any; + + @property() public label?: string; + + protected render() { + return html``; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-selector-addon": HaAddonSelector; + } +} diff --git a/src/components/ha-selector/ha-selector.ts b/src/components/ha-selector/ha-selector.ts index db071febdc..9982e33831 100644 --- a/src/components/ha-selector/ha-selector.ts +++ b/src/components/ha-selector/ha-selector.ts @@ -3,6 +3,7 @@ import { dynamicElement } from "../../common/dom/dynamic-element-directive"; import { Selector } from "../../data/selector"; import { HomeAssistant } from "../../types"; import "./ha-selector-action"; +import "./ha-selector-addon"; import "./ha-selector-area"; import "./ha-selector-boolean"; import "./ha-selector-device"; diff --git a/src/components/ha-slider.js b/src/components/ha-slider.js index f520fa20ef..995f273a12 100644 --- a/src/components/ha-slider.js +++ b/src/components/ha-slider.js @@ -79,6 +79,10 @@ class HaSlider extends PaperSliderClass { return subTemplate; } + _setImmediateValue(newImmediateValue) { + super._setImmediateValue(Math.round(newImmediateValue)); + } + _calcStep(value) { if (!this.step) { return parseFloat(value); diff --git a/src/components/ha-yaml-editor.ts b/src/components/ha-yaml-editor.ts index 2c300f4433..a702be77ac 100644 --- a/src/components/ha-yaml-editor.ts +++ b/src/components/ha-yaml-editor.ts @@ -5,20 +5,10 @@ import { internalProperty, LitElement, property, - query, TemplateResult, } from "lit-element"; import { fireEvent } from "../common/dom/fire_event"; -import { afterNextRender } from "../common/util/render-status"; import "./ha-code-editor"; -import type { HaCodeEditor } from "./ha-code-editor"; - -declare global { - // for fire event - interface HASSDomEvents { - "editor-refreshed": undefined; - } -} const isEmpty = (obj: Record): boolean => { if (typeof obj !== "object") { @@ -44,8 +34,6 @@ export class HaYamlEditor extends LitElement { @internalProperty() private _yaml = ""; - @query("ha-code-editor") private _editor?: HaCodeEditor; - public setValue(value): void { try { this._yaml = value && !isEmpty(value) ? safeDump(value) : ""; @@ -54,12 +42,6 @@ export class HaYamlEditor extends LitElement { console.error(err, value); alert(`There was an error converting to YAML: ${err}`); } - afterNextRender(() => { - if (this._editor?.codemirror) { - this._editor.codemirror.refresh(); - } - afterNextRender(() => fireEvent(this, "editor-refreshed")); - }); } protected firstUpdated(): void { diff --git a/src/components/state-history-charts.ts b/src/components/state-history-charts.ts index a8faeb80d9..49ac8049c5 100644 --- a/src/components/state-history-charts.ts +++ b/src/components/state-history-charts.ts @@ -6,6 +6,7 @@ import { html, LitElement, property, + PropertyValues, TemplateResult, } from "lit-element"; import "./state-history-chart-line"; @@ -83,6 +84,10 @@ class StateHistoryCharts extends LitElement { `; } + protected shouldUpdate(changedProps: PropertyValues): boolean { + return !(changedProps.size === 1 && changedProps.has("hass")); + } + private _isHistoryEmpty(): boolean { const historyDataEmpty = !this.historyData || diff --git a/src/data/config_entries.ts b/src/data/config_entries.ts index 925d9cc9b1..d75de78536 100644 --- a/src/data/config_entries.ts +++ b/src/data/config_entries.ts @@ -9,6 +9,7 @@ export interface ConfigEntry { connection_class: string; supports_options: boolean; supports_unload: boolean; + disabled_by: string | null; } export interface ConfigEntryMutableParams { @@ -43,6 +44,27 @@ export const reloadConfigEntry = (hass: HomeAssistant, configEntryId: string) => require_restart: boolean; }>("POST", `config/config_entries/entry/${configEntryId}/reload`); +export const disableConfigEntry = ( + hass: HomeAssistant, + configEntryId: string +) => + hass.callWS<{ + require_restart: boolean; + }>({ + type: "config_entries/disable", + entry_id: configEntryId, + disabled_by: "user", + }); + +export const enableConfigEntry = (hass: HomeAssistant, configEntryId: string) => + hass.callWS<{ + require_restart: boolean; + }>({ + type: "config_entries/disable", + entry_id: configEntryId, + disabled_by: null, + }); + export const getConfigEntrySystemOptions = ( hass: HomeAssistant, configEntryId: string diff --git a/src/data/selector.ts b/src/data/selector.ts index a3eedee92d..7722d56de8 100644 --- a/src/data/selector.ts +++ b/src/data/selector.ts @@ -1,4 +1,5 @@ export type Selector = + | AddonSelector | EntitySelector | DeviceSelector | AreaSelector @@ -30,6 +31,13 @@ export interface DeviceSelector { }; } +export interface AddonSelector { + addon: { + name?: string; + slug?: string; + }; +} + export interface AreaSelector { area: { entity?: { diff --git a/src/dialogs/more-info/controls/more-info-fan.js b/src/dialogs/more-info/controls/more-info-fan.js index a5b1b5df52..93bbe59396 100644 --- a/src/dialogs/more-info/controls/more-info-fan.js +++ b/src/dialogs/more-info/controls/more-info-fan.js @@ -52,6 +52,7 @@ class MoreInfoFan extends LocalizeMixin(EventsMixin(PolymerElement)) { caption="[[localize('ui.card.fan.speed')]]" min="0" max="100" + step="[[computePercentageStepSize(stateObj)]]" value="{{percentageSliderValue}}" on-change="percentageChanged" pin="" @@ -113,7 +114,7 @@ class MoreInfoFan extends LocalizeMixin(EventsMixin(PolymerElement)) { `; } @@ -154,6 +155,13 @@ class MoreInfoFan extends LocalizeMixin(EventsMixin(PolymerElement)) { } } + computePercentageStepSize(stateObj) { + if (stateObj.attributes.percentage_step) { + return stateObj.attributes.percentage_step; + } + return 1; + } + computeClassNames(stateObj) { return ( "more-info-fan " + diff --git a/src/panels/config/devices/ha-config-device-page.ts b/src/panels/config/devices/ha-config-device-page.ts index 9aef24e530..6c882bb6a3 100644 --- a/src/panels/config/devices/ha-config-device-page.ts +++ b/src/panels/config/devices/ha-config-device-page.ts @@ -12,13 +12,14 @@ import { import { ifDefined } from "lit-html/directives/if-defined"; import memoizeOne from "memoize-one"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; import { computeStateName } from "../../../common/entity/compute_state_name"; import { compare } from "../../../common/string/compare"; import { slugify } from "../../../common/string/slugify"; import "../../../components/entity/ha-battery-icon"; import "../../../components/ha-icon-next"; import { AreaRegistryEntry } from "../../../data/area_registry"; -import { ConfigEntry } from "../../../data/config_entries"; +import { ConfigEntry, disableConfigEntry } from "../../../data/config_entries"; import { computeDeviceName, DeviceRegistryEntry, @@ -160,6 +161,8 @@ export class HaConfigDevicePage extends LitElement { const batteryState = batteryEntity ? this.hass.states[batteryEntity.entity_id] : undefined; + const batteryIsBinary = batteryState + && computeStateDomain(batteryState) === "binary_sensor"; const batteryChargingState = batteryChargingEntity ? this.hass.states[batteryChargingEntity.entity_id] : undefined; @@ -215,7 +218,7 @@ export class HaConfigDevicePage extends LitElement { batteryState ? html`
- ${batteryState.state}% + ${batteryIsBinary ? "" : batteryState.state + "%"}
-
- - ${this.hass.localize("ui.common.enable")} - -
+ ${device.disabled_by === "user" + ? html`
+ + ${this.hass.localize("ui.common.enable")} + +
` + : ""} ` : html`` } @@ -626,6 +631,41 @@ export class HaConfigDevicePage extends LitElement { updateEntry: async (updates) => { const oldDeviceName = device.name_by_user || device.name; const newDeviceName = updates.name_by_user; + const disabled = + updates.disabled_by === "user" && device.disabled_by !== "user"; + + if (disabled) { + for (const cnfg_entry of device.config_entries) { + if ( + !this.devices.some( + (dvc) => + dvc.id !== device.id && + dvc.config_entries.includes(cnfg_entry) + ) + ) { + const config_entry = this.entries.find( + (entry) => entry.entry_id === cnfg_entry + ); + if ( + config_entry && + !config_entry.disabled_by && + // eslint-disable-next-line no-await-in-loop + (await showConfirmationDialog(this, { + title: this.hass.localize( + "ui.panel.config.devices.confirm_disable_config_entry", + "entry_name", + config_entry.title + ), + confirmText: this.hass.localize("ui.common.yes"), + dismissText: this.hass.localize("ui.common.no"), + })) + ) { + disableConfigEntry(this.hass, cnfg_entry); + delete updates.disabled_by; + } + } + } + } await updateDeviceRegistryEntry(this.hass, this.deviceId, updates); if ( diff --git a/src/panels/config/devices/ha-config-devices-dashboard.ts b/src/panels/config/devices/ha-config-devices-dashboard.ts index ca82762c01..3c09085b28 100644 --- a/src/panels/config/devices/ha-config-devices-dashboard.ts +++ b/src/panels/config/devices/ha-config-devices-dashboard.ts @@ -15,6 +15,7 @@ import { import { classMap } from "lit-html/directives/class-map"; import memoizeOne from "memoize-one"; import { HASSDomEvent } from "../../../common/dom/fire_event"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; import { navigate } from "../../../common/navigate"; import { LocalizeFunc } from "../../../common/translations/localize"; import { computeRTL } from "../../../common/util/compute_rtl"; @@ -293,9 +294,11 @@ export class HaConfigDeviceDashboard extends LitElement { batteryEntityPair && batteryEntityPair[1] ? this.hass.states[batteryEntityPair[1]] : undefined; - return battery && !isNaN(battery.state as any) + const batteryIsBinary = + battery && computeStateDomain(battery) === "binary_sensor"; + return battery && (batteryIsBinary || !isNaN(battery.state as any)) ? html` - ${battery.state}% + ${batteryIsBinary ? "" : battery.state + "%"} , ConfigEntryExtended[]] => { + ): [ + Map, + ConfigEntryExtended[], + Map + ] => { const filteredConfigEnties = this._filterConfigEntries( configEntries, filter ); const ignored: ConfigEntryExtended[] = []; + const disabled: ConfigEntryExtended[] = []; for (let i = filteredConfigEnties.length - 1; i >= 0; i--) { if (filteredConfigEnties[i].source === "ignore") { ignored.push(filteredConfigEnties.splice(i, 1)[0]); } + if (filteredConfigEnties[i].disabled_by !== null) { + disabled.push(filteredConfigEnties.splice(i, 1)[0]); + } } - return [groupByIntegration(filteredConfigEnties), ignored]; + return [ + groupByIntegration(filteredConfigEnties), + ignored, + groupByIntegration(disabled), + ]; } ); @@ -254,6 +269,7 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) { const [ groupedConfigEntries, ignoredConfigEntries, + disabledConfigEntries, ] = this._filterGroupConfigEntries(this._configEntries, this._filter); const configEntriesInProgress = this._filterConfigEntriesInProgress( this._configEntriesInProgress, @@ -289,7 +305,7 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) { + + ${this.hass.localize( + this._showDisabled + ? "ui.panel.config.integrations.disable.hide_disabled" + : "ui.panel.config.integrations.disable.show_disabled" + )} + ${!this.narrow @@ -319,6 +342,20 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) { "ui.panel.config.integrations.search" )} > + ${!this._showDisabled && disabledConfigEntries.size + ? html`
+ ${this.hass.localize( + "ui.panel.config.integrations.disable.disabled_integrations", + "number", + disabledConfigEntries.size + )} + ${this.hass.localize( + "ui.panel.config.filtering.show" + )} +
` + : ""} ` : ""} @@ -433,6 +470,21 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) { } ) : ""} + ${this._showDisabled + ? Array.from(disabledConfigEntries.entries()).map( + ([domain, items]) => + html` ` + ) + : ""} ${groupedConfigEntries.size ? Array.from(groupedConfigEntries.entries()).map( ([domain, items]) => @@ -596,10 +648,25 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) { getConfigFlowInProgressCollection(this.hass.connection).refresh(); } + private _handleMenuAction(ev: CustomEvent) { + switch (ev.detail.index) { + case 0: + this._toggleShowIgnored(); + break; + case 1: + this._toggleShowDisabled(); + break; + } + } + private _toggleShowIgnored() { this._showIgnored = !this._showIgnored; } + private _toggleShowDisabled() { + this._showDisabled = !this._showDisabled; + } + private async _removeIgnoredIntegration(ev: Event) { const entry = (ev.target! as any).entry; showConfirmationDialog(this, { @@ -767,11 +834,14 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) { margin-left: 16px; } .search { + display: flex; + align-items: center; padding: 0 16px; background: var(--sidebar-background-color); border-bottom: 1px solid var(--divider-color); } .search search-input { + flex: 1; position: relative; top: 2px; } @@ -796,6 +866,32 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) { text-overflow: ellipsis; white-space: normal; } + .active-filters { + color: var(--primary-text-color); + position: relative; + display: flex; + align-items: center; + padding: 2px 2px 2px 8px; + margin-left: 4px; + font-size: 14px; + } + .active-filters ha-icon { + color: var(--primary-color); + } + .active-filters mwc-button { + margin-left: 8px; + } + .active-filters::before { + background-color: var(--primary-color); + opacity: 0.12; + border-radius: 4px; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + content: ""; + } `, ]; } diff --git a/src/panels/config/integrations/ha-integration-card.ts b/src/panels/config/integrations/ha-integration-card.ts index 178869c026..09d9f6f859 100644 --- a/src/panels/config/integrations/ha-integration-card.ts +++ b/src/panels/config/integrations/ha-integration-card.ts @@ -9,12 +9,15 @@ import { property, TemplateResult, } from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; import { fireEvent } from "../../../common/dom/fire_event"; import { shouldHandleRequestSelectedEvent } from "../../../common/mwc/handle-request-selected-event"; import "../../../components/ha-icon-next"; import { ConfigEntry, deleteConfigEntry, + disableConfigEntry, + enableConfigEntry, reloadConfigEntry, updateConfigEntry, } from "../../../data/config_entries"; @@ -88,6 +91,8 @@ export class HaIntegrationCard extends LitElement { @property() public selectedConfigEntryId?: string; + @property({ type: Boolean }) public disabled = false; + firstUpdated(changedProps) { super.firstUpdated(changedProps); } @@ -109,7 +114,14 @@ export class HaIntegrationCard extends LitElement { private _renderGroupedIntegration(): TemplateResult { return html` - + + ${this.disabled + ? html`
+ ${this.hass.localize( + "ui.panel.config.integrations.config_entry.disable.disabled" + )} +
` + : ""}
@@ -159,6 +173,17 @@ export class HaIntegrationCard extends LitElement { @click=${this._back} >` : ""} + ${item.disabled_by + ? html`
+ ${this.hass.localize( + "ui.panel.config.integrations.config_entry.disable.disabled_cause", + "cause", + this.hass.localize( + `ui.panel.config.integrations.config_entry.disable.disabled_by.${item.disabled_by}` + ) || item.disabled_by + )} +
` + : ""}
- ${this.hass.localize( + ${item.disabled_by === "user" + ? html` + ${this.hass.localize("ui.common.enable")} + ` + : ""} + + ${this.hass.localize( "ui.panel.config.integrations.config_entry.rename" - )} + )} + ${item.domain in integrationsWithPanel ? html` `} - ${item.state === "loaded" && item.supports_unload + ${!item.disabled_by && + item.state === "loaded" && + item.supports_unload ? html` ${this.hass.localize( "ui.panel.config.integrations.config_entry.reload" )} ` : ""} + ${item.disabled_by === "user" + ? html` + ${this.hass.localize("ui.common.enable")} + ` + : html` + ${this.hass.localize("ui.common.disable")} + `} ): void { + if (!shouldHandleRequestSelectedEvent(ev)) { + return; + } + this._disableIntegration( + ((ev.target as HTMLElement).closest("ha-card") as any).configEntry + ); + } + + private _handleEnable(ev: CustomEvent): void { + if (ev.detail.source && !shouldHandleRequestSelectedEvent(ev)) { + return; + } + this._enableIntegration( + ((ev.target as HTMLElement).closest("ha-card") as any).configEntry + ); + } + private _handleSystemOptions(ev: CustomEvent): void { if (!shouldHandleRequestSelectedEvent(ev)) { return; @@ -385,6 +445,48 @@ export class HaIntegrationCard extends LitElement { }); } + private async _disableIntegration(configEntry: ConfigEntry) { + const entryId = configEntry.entry_id; + + const confirmed = await showConfirmationDialog(this, { + text: this.hass.localize( + "ui.panel.config.integrations.config_entry.disable.disable_confirm" + ), + }); + + if (!confirmed) { + return; + } + const result = await disableConfigEntry(this.hass, entryId); + if (result.require_restart) { + showAlertDialog(this, { + text: this.hass.localize( + "ui.panel.config.integrations.config_entry.disable_restart_confirm" + ), + }); + } + fireEvent(this, "entry-updated", { + entry: { ...configEntry, disabled_by: "user" }, + }); + } + + private async _enableIntegration(configEntry: ConfigEntry) { + const entryId = configEntry.entry_id; + + const result = await enableConfigEntry(this.hass, entryId); + + if (result.require_restart) { + showAlertDialog(this, { + text: this.hass.localize( + "ui.panel.config.integrations.config_entry.enable_restart_confirm" + ), + }); + } + fireEvent(this, "entry-updated", { + entry: { ...configEntry, disabled_by: null }, + }); + } + private async _removeIntegration(configEntry: ConfigEntry) { const entryId = configEntry.entry_id; @@ -397,31 +499,29 @@ export class HaIntegrationCard extends LitElement { if (!confirmed) { return; } - deleteConfigEntry(this.hass, entryId).then((result) => { - fireEvent(this, "entry-removed", { entryId }); + const result = await deleteConfigEntry(this.hass, entryId); + fireEvent(this, "entry-removed", { entryId }); - if (result.require_restart) { - showAlertDialog(this, { - text: this.hass.localize( - "ui.panel.config.integrations.config_entry.restart_confirm" - ), - }); - } - }); + if (result.require_restart) { + showAlertDialog(this, { + text: this.hass.localize( + "ui.panel.config.integrations.config_entry.restart_confirm" + ), + }); + } } private async _reloadIntegration(configEntry: ConfigEntry) { const entryId = configEntry.entry_id; - reloadConfigEntry(this.hass, entryId).then((result) => { - const locale_key = result.require_restart - ? "reload_restart_confirm" - : "reload_confirm"; - showAlertDialog(this, { - text: this.hass.localize( - `ui.panel.config.integrations.config_entry.${locale_key}` - ), - }); + const result = await reloadConfigEntry(this.hass, entryId); + const locale_key = result.require_restart + ? "reload_restart_confirm" + : "reload_confirm"; + showAlertDialog(this, { + text: this.hass.localize( + `ui.panel.config.integrations.config_entry.${locale_key}` + ), }); } @@ -461,6 +561,15 @@ export class HaIntegrationCard extends LitElement { :host(.highlight) ha-card { border: 1px solid var(--accent-color); } + .disabled { + --ha-card-border-color: var(--warning-color); + } + .disabled .header { + background: var(--warning-color); + color: var(--text-primary-color); + padding: 8px; + text-align: center; + } .card-content { padding: 16px; text-align: center; diff --git a/src/panels/developer-tools/service/developer-tools-service.ts b/src/panels/developer-tools/service/developer-tools-service.ts index 22abadf25f..aba167cf5a 100644 --- a/src/panels/developer-tools/service/developer-tools-service.ts +++ b/src/panels/developer-tools/service/developer-tools-service.ts @@ -11,6 +11,7 @@ import memoizeOne from "memoize-one"; import { LocalStorage } from "../../../common/decorators/local-storage"; import { computeDomain } from "../../../common/entity/compute_domain"; import { computeObjectId } from "../../../common/entity/compute_object_id"; +import { extractSearchParam } from "../../../common/url/search-params"; import "../../../components/buttons/ha-progress-button"; import "../../../components/entity/ha-entity-picker"; import "../../../components/ha-card"; @@ -40,7 +41,19 @@ class HaPanelDevService extends LitElement { protected firstUpdated(params) { super.firstUpdated(params); - if (!this._serviceData?.service) { + const serviceParam = extractSearchParam("service"); + if (serviceParam) { + this._serviceData = { + service: serviceParam, + target: {}, + data: {}, + }; + if (this._yamlMode) { + this.updateComplete.then(() => + this._yamlEditor?.setValue(this._serviceData) + ); + } + } else if (!this._serviceData?.service) { const domain = Object.keys(this.hass.services).sort()[0]; const service = Object.keys(this.hass.services[domain]).sort()[0]; this._serviceData = { @@ -48,6 +61,11 @@ class HaPanelDevService extends LitElement { target: {}, data: {}, }; + if (this._yamlMode) { + this.updateComplete.then(() => + this._yamlEditor?.setValue(this._serviceData) + ); + } } } @@ -140,7 +158,10 @@ class HaPanelDevService extends LitElement { )} - ${fields.map( + ${(this._yamlMode + ? fields + : this._filterSelectorFields(fields) + ).map( (field) => html`
${field.key}
${field.description} diff --git a/src/panels/developer-tools/state/developer-tools-state.js b/src/panels/developer-tools/state/developer-tools-state.js index eb5f6c580a..5992f3e39f 100644 --- a/src/panels/developer-tools/state/developer-tools-state.js +++ b/src/panels/developer-tools/state/developer-tools-state.js @@ -1,5 +1,8 @@ import "@material/mwc-button"; -import { mdiInformationOutline } from "@mdi/js"; +import { + mdiInformationOutline, + mdiClipboardTextMultipleOutline +} from "@mdi/js"; import "@polymer/paper-checkbox/paper-checkbox"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; @@ -15,6 +18,7 @@ import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import { EventsMixin } from "../../../mixins/events-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; import "../../../styles/polymer-ha-style"; +import { copyToClipboard } from "../../../common/util/copy-clipboard"; const ERROR_SENTINEL = {}; /* @@ -165,7 +169,7 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { [[localize('ui.panel.developer-tools.tabs.states.state')]] [[localize('ui.panel.developer-tools.tabs.states.attributes')]] - + @@ -205,6 +209,12 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { title="[[localize('ui.panel.developer-tools.tabs.states.more_info')]]" path="[[informationOutlineIcon()]]" > + [[entity.entity_id]] @@ -275,7 +285,7 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { _showAttributes: { type: Boolean, - value: true, + value: JSON.parse(localStorage.getItem("devToolsShowAttributes") || true), }, _entities: { @@ -296,6 +306,11 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { }; } + copyEntity(ev) { + ev.preventDefault(); + copyToClipboard(ev.model.entity.entity_id); + } + entitySelected(ev) { const state = ev.model.entity; this._entityId = state.entity_id; @@ -345,6 +360,10 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { return mdiInformationOutline; } + clipboardOutlineIcon() { + return mdiClipboardTextMultipleOutline; + } + computeEntities(hass, _entityFilter, _stateFilter, _attributeFilter) { return Object.keys(hass.states) .map(function (key) { @@ -459,6 +478,14 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { return Array.isArray(value) ? value.join(", ") : value; } + saveAttributeCheckboxState(ev) { + try { + localStorage.setItem("devToolsShowAttributes", ev.target.checked); + } catch (e) { + // Catch for Safari private mode + } + } + _computeParsedStateAttributes(stateAttributes) { try { return stateAttributes.trim() ? safeLoad(stateAttributes) : {}; diff --git a/src/panels/lovelace/components/hui-action-editor.ts b/src/panels/lovelace/components/hui-action-editor.ts index d6b57b239e..eed1d23c67 100644 --- a/src/panels/lovelace/components/hui-action-editor.ts +++ b/src/panels/lovelace/components/hui-action-editor.ts @@ -49,10 +49,15 @@ export class HuiActionEditor extends LitElement { return config.url_path || ""; } + get _service(): string { + const config = this.config as CallServiceActionConfig; + return config.service || ""; + } + private _serviceAction = memoizeOne( (config: CallServiceActionConfig): ServiceAction => { return { - service: config.service || "", + service: this._service, data: config.service_data, target: config.target, }; @@ -155,8 +160,25 @@ export class HuiActionEditor extends LitElement { } return; } + + let data; + switch (value) { + case "url": { + data = { url_path: this._url_path }; + break; + } + case "call-service": { + data = { service: this._service }; + break; + } + case "navigate": { + data = { navigation_path: this._navigation_path }; + break; + } + } + fireEvent(this, "value-changed", { - value: { action: value }, + value: { action: value, ...data }, }); } diff --git a/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts b/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts index 58ce8ceb74..d4978eda36 100755 --- a/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts +++ b/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts @@ -282,7 +282,7 @@ export class HuiDialogEditCard extends LitElement } private _opened() { - this._cardEditorEl?.refreshYamlEditor(); + this._cardEditorEl?.focusYamlEditor(); } private get _canSave(): boolean { diff --git a/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts index be9b8e943b..f6627aa73c 100644 --- a/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts @@ -61,8 +61,8 @@ export class HuiConditionalCardEditor extends LitElement this._config = config; } - public refreshYamlEditor(focus) { - this._cardEditorEl?.refreshYamlEditor(focus); + public focusYamlEditor() { + this._cardEditorEl?.focusYamlEditor(); } protected render(): TemplateResult { diff --git a/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts index b707e0f119..4f5508f96d 100644 --- a/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts @@ -54,8 +54,8 @@ export class HuiStackCardEditor extends LitElement this._config = config; } - public refreshYamlEditor(focus) { - this._cardEditorEl?.refreshYamlEditor(focus); + public focusYamlEditor() { + this._cardEditorEl?.focusYamlEditor(); } protected render(): TemplateResult { diff --git a/src/panels/lovelace/editor/hui-element-editor.ts b/src/panels/lovelace/editor/hui-element-editor.ts index 2585201c02..01fe25ec57 100644 --- a/src/panels/lovelace/editor/hui-element-editor.ts +++ b/src/panels/lovelace/editor/hui-element-editor.ts @@ -157,17 +157,14 @@ export abstract class HuiElementEditor extends LitElement { this.GUImode = !this.GUImode; } - public refreshYamlEditor(focus = false) { - if (this._configElement?.refreshYamlEditor) { - this._configElement.refreshYamlEditor(focus); + public focusYamlEditor() { + if (this._configElement?.focusYamlEditor) { + this._configElement.focusYamlEditor(); } if (!this._yamlEditor?.codemirror) { return; } - this._yamlEditor.codemirror.refresh(); - if (focus) { - this._yamlEditor.codemirror.focus(); - } + this._yamlEditor.codemirror.focus(); } protected async getConfigElement(): Promise< @@ -290,7 +287,7 @@ export abstract class HuiElementEditor extends LitElement { if (this._configElementType !== this.configElementType) { // If the type has changed, we need to load a new GUI editor - this._guiSupported = false; + this._guiSupported = undefined; this._configElement = undefined; if (!this.configElementType) { diff --git a/src/panels/lovelace/editor/types.ts b/src/panels/lovelace/editor/types.ts index c37c3e084d..762ed55d6e 100644 --- a/src/panels/lovelace/editor/types.ts +++ b/src/panels/lovelace/editor/types.ts @@ -120,13 +120,13 @@ const actionConfigStructConfirmation = union([ const actionConfigStructUrl = object({ action: literal("url"), - url_path: optional(string()), + url_path: string(), confirmation: optional(actionConfigStructConfirmation), }); const actionConfigStructService = object({ action: literal("call-service"), - service: optional(string()), + service: string(), service_data: optional(object()), target: optional( object({ @@ -140,7 +140,7 @@ const actionConfigStructService = object({ const actionConfigStructNavigate = object({ action: literal("navigate"), - navigation_path: optional(string()), + navigation_path: string(), confirmation: optional(actionConfigStructConfirmation), }); diff --git a/src/panels/lovelace/entity-rows/hui-script-entity-row.ts b/src/panels/lovelace/entity-rows/hui-script-entity-row.ts index ea348d0bdf..ede34bc208 100644 --- a/src/panels/lovelace/entity-rows/hui-script-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-script-entity-row.ts @@ -54,7 +54,8 @@ class HuiScriptEntityRow extends LitElement implements LovelaceRow { ${stateObj.state === "on" ? html` - ${(stateObj.attributes.current || 0) > 0 + ${stateObj.attributes.mode !== "single" && + (stateObj.attributes.current || 0) > 0 ? this.hass.localize( "ui.card.script.cancel_multiple", "number", diff --git a/src/panels/lovelace/entity-rows/types.ts b/src/panels/lovelace/entity-rows/types.ts index b2eb451582..9890927485 100644 --- a/src/panels/lovelace/entity-rows/types.ts +++ b/src/panels/lovelace/entity-rows/types.ts @@ -29,6 +29,8 @@ export interface WeblinkConfig { name?: string; icon?: string; url: string; + new_tab?: boolean; + download?: boolean; } export interface TextConfig { type: "text"; diff --git a/src/panels/lovelace/hui-editor.ts b/src/panels/lovelace/hui-editor.ts index cadee1956c..909dfd9d59 100644 --- a/src/panels/lovelace/hui-editor.ts +++ b/src/panels/lovelace/hui-editor.ts @@ -47,8 +47,6 @@ class LovelaceFullConfigEditor extends LitElement { @internalProperty() private _changed?: boolean; - private _generation = 1; - protected render(): TemplateResult | void { return html` @@ -133,11 +131,7 @@ class LovelaceFullConfigEditor extends LitElement { } .content { - height: calc(100vh - 68px); - } - - hui-code-editor { - height: 100%; + height: calc(100vh - var(--header-height)); } .save-button { @@ -154,15 +148,11 @@ class LovelaceFullConfigEditor extends LitElement { } private _yamlChanged() { - this._changed = !this.yamlEditor - .codemirror!.getDoc() - .isClean(this._generation); - if (this._changed && !window.onbeforeunload) { + this._changed = true; + if (!window.onbeforeunload) { window.onbeforeunload = () => { return true; }; - } else if (!this._changed && window.onbeforeunload) { - window.onbeforeunload = null; } } @@ -224,7 +214,7 @@ class LovelaceFullConfigEditor extends LitElement { return; } - if (this.yamlEditor.hasComments) { + if (/^#|\s#/gm.test(value)) { if ( !confirm( this.hass.localize( @@ -281,9 +271,6 @@ class LovelaceFullConfigEditor extends LitElement { ), }); } - this._generation = this.yamlEditor - .codemirror!.getDoc() - .changeGeneration(true); window.onbeforeunload = null; this._saving = false; this._changed = false; diff --git a/src/panels/lovelace/special-rows/hui-weblink-row.ts b/src/panels/lovelace/special-rows/hui-weblink-row.ts index fed13977c9..6cdf9cc983 100644 --- a/src/panels/lovelace/special-rows/hui-weblink-row.ts +++ b/src/panels/lovelace/special-rows/hui-weblink-row.ts @@ -7,6 +7,7 @@ import { LitElement, TemplateResult, } from "lit-element"; +import { ifDefined } from "lit-html/directives/if-defined"; import "../../../components/ha-icon"; import { HomeAssistant } from "../../../types"; import { LovelaceRow, WeblinkConfig } from "../entity-rows/types"; @@ -37,8 +38,9 @@ class HuiWeblinkRow extends LitElement implements LovelaceRow { return html`
${this._config.name}
@@ -66,6 +68,15 @@ class HuiWeblinkRow extends LitElement implements LovelaceRow { } `; } + + protected _computeTargetValue(): string | undefined { + return this._config && + (this._config.url.indexOf("://") !== -1 || + this._config.new_tab === true || + this._config.download === true) + ? "_blank" + : undefined; + } } declare global { diff --git a/src/panels/lovelace/types.ts b/src/panels/lovelace/types.ts index 437fd58fa2..292d8e00e7 100644 --- a/src/panels/lovelace/types.ts +++ b/src/panels/lovelace/types.ts @@ -86,5 +86,5 @@ export interface LovelaceGenericElementEditor extends HTMLElement { hass?: HomeAssistant; lovelace?: LovelaceConfig; setConfig(config: any): void; - refreshYamlEditor?: (focus: boolean) => void; + focusYamlEditor?: () => void; } diff --git a/src/panels/my/ha-panel-my.ts b/src/panels/my/ha-panel-my.ts index 2a9887e6c3..34933187fc 100644 --- a/src/panels/my/ha-panel-my.ts +++ b/src/panels/my/ha-panel-my.ts @@ -15,6 +15,7 @@ import { import "../../layouts/hass-error-screen"; import { isComponentLoaded } from "../../common/config/is_component_loaded"; import { domainToName } from "../../data/integration"; +import { documentationUrl } from "../../util/documentation-url"; const REDIRECTS: Redirects = { developer_states: { @@ -23,12 +24,21 @@ const REDIRECTS: Redirects = { developer_services: { redirect: "/developer-tools/service", }, + developer_call_service: { + redirect: "/developer-tools/service", + params: { + service: "string", + }, + }, developer_template: { redirect: "/developer-tools/template", }, developer_events: { redirect: "/developer-tools/event", }, + config: { + redirect: "/config", + }, cloud: { component: "cloud", redirect: "/config/cloud", @@ -42,6 +52,18 @@ const REDIRECTS: Redirects = { domain: "string", }, }, + config_mqtt: { + component: "mqtt", + redirect: "/config/mqtt", + }, + config_zha: { + component: "zha", + redirect: "/config/zha/dashboard", + }, + config_zwave_js: { + component: "zwave_js", + redirect: "/config/zwave_js/dashboard", + }, devices: { redirect: "/config/devices/dashboard", }, @@ -52,39 +74,49 @@ const REDIRECTS: Redirects = { redirect: "/config/areas/dashboard", }, blueprints: { + component: "blueprint", redirect: "/config/blueprint/dashboard", }, blueprint_import: { + component: "blueprint", redirect: "/config/blueprint/dashboard/import", params: { blueprint_url: "url", }, }, automations: { + component: "automation", redirect: "/config/automation/dashboard", }, scenes: { + component: "scene", redirect: "/config/scene/dashboard", }, scripts: { + component: "script", redirect: "/config/script/dashboard", }, helpers: { redirect: "/config/helpers", }, tags: { + component: "tags", redirect: "/config/tags", }, lovelace_dashboards: { + component: "lovelace", redirect: "/config/lovelace/dashboards", }, lovelace_resources: { + component: "lovelace", redirect: "/config/lovelace/resources", }, people: { + component: "person", redirect: "/config/person", }, zones: { + component: "zone", redirect: "/config/zone", }, users: { @@ -108,6 +140,14 @@ const REDIRECTS: Redirects = { profile: { redirect: "/profile/dashboard", }, + logbook: { + component: "logbook", + redirect: "/logbook", + }, + history: { + component: "history", + redirect: "/history", + }, }; export type ParamType = "url" | "string"; @@ -201,12 +241,16 @@ class HaPanelMy extends LitElement { ) || "This redirect is not supported."; break; case "no_supervisor": - error = - this.hass.localize( - "ui.panel.my.component_not_loaded", - "integration", - "Home Assistant Supervisor" - ) || "This redirect requires Home Assistant Supervisor."; + error = this.hass.localize( + "ui.panel.my.no_supervisor", + "docs_link", + html`
${this.hass.localize("ui.panel.my.documentation")}` + ); break; default: error = this.hass.localize("ui.panel.my.error") || "Unknown error"; diff --git a/src/resources/codemirror.ondemand.ts b/src/resources/codemirror.ondemand.ts index f2c96c641b..9ec8799229 100644 --- a/src/resources/codemirror.ondemand.ts +++ b/src/resources/codemirror.ondemand.ts @@ -1,11 +1,8 @@ -interface LoadedCodeMirror { - codeMirror: any; - codeMirrorCss: any; -} +let loaded: Promise; -let loaded: Promise; - -export const loadCodeMirror = async (): Promise => { +export const loadCodeMirror = async (): Promise< + typeof import("./codemirror") +> => { if (!loaded) { loaded = import("./codemirror"); } diff --git a/src/resources/codemirror.ts b/src/resources/codemirror.ts index de5b446029..76b26c9f32 100644 --- a/src/resources/codemirror.ts +++ b/src/resources/codemirror.ts @@ -1,14 +1,122 @@ -// @ts-ignore -import _CodeMirror, { Editor } from "codemirror"; -// @ts-ignore -import _codeMirrorCss from "codemirror/lib/codemirror.css"; -import "codemirror/mode/jinja2/jinja2"; -import "codemirror/mode/yaml/yaml"; -import { fireEvent } from "../common/dom/fire_event"; +import { HighlightStyle, tags } from "@codemirror/highlight"; +import { EditorView as CMEditorView } from "@codemirror/view"; +import { StreamLanguage } from "@codemirror/stream-parser"; +import { jinja2 } from "@codemirror/legacy-modes/mode/jinja2"; +import { yaml } from "@codemirror/legacy-modes/mode/yaml"; -// @ts-ignore -_CodeMirror.commands.save = (cm: Editor) => { - fireEvent(cm.getWrapperElement(), "editor-save"); +export { keymap } from "@codemirror/view"; +export { CMEditorView as EditorView }; +export { EditorState, Prec, tagExtension } from "@codemirror/state"; +export { defaultKeymap, defaultTabBinding } from "@codemirror/commands"; +export { lineNumbers } from "@codemirror/gutter"; + +export const langs = { + jinja2: StreamLanguage.define(jinja2), + yaml: StreamLanguage.define(yaml), }; -export const codeMirror: any = _CodeMirror; -export const codeMirrorCss: any = _codeMirrorCss; + +export const theme = CMEditorView.theme({ + $: { + color: "var(--primary-text-color)", + backgroundColor: + "var(--code-editor-background-color, var(--card-background-color))", + "& ::selection": { backgroundColor: "rgba(var(--rgb-primary-color), 0.2)" }, + caretColor: "var(--secondary-text-color)", + height: "var(--code-mirror-height, auto)", + }, + + $$focused: { outline: "none" }, + + "$$focused $cursor": { borderLeftColor: "#var(--secondary-text-color)" }, + "$$focused $selectionBackground, $selectionBackground": { + backgroundColor: "rgba(var(--rgb-primary-color), 0.2)", + }, + + $gutters: { + backgroundColor: + "var(--paper-dialog-background-color, var(--primary-background-color))", + color: "var(--paper-dialog-color, var(--secondary-text-color))", + border: "none", + borderRight: + "1px solid var(--paper-input-container-color, var(--secondary-text-color))", + }, + "$$focused $gutters": { + borderRight: + "2px solid var(--paper-input-container-focus-color, var(--primary-color))", + }, + "$gutterElementags.lineNumber": { color: "inherit" }, +}); + +export const highlightStyle = HighlightStyle.define( + { tag: tags.keyword, color: "var(--codemirror-keyword, #6262FF)" }, + { + tag: [ + tags.name, + tags.deleted, + tags.character, + tags.propertyName, + tags.macroName, + ], + color: "var(--codemirror-property, #905)", + }, + { + tag: [tags.function(tags.variableName), tags.labelName], + color: "var(--codemirror-variable, #07a)", + }, + { + tag: [tags.color, tags.constant(tags.name), tags.standard(tags.name)], + color: "var(--codemirror-qualifier, #690)", + }, + { + tag: [tags.definition(tags.name), tags.separator], + color: "var(--codemirror-def, #8DA6CE)", + }, + { + tag: [ + tags.typeName, + tags.className, + tags.number, + tags.changed, + tags.annotation, + tags.modifier, + tags.self, + tags.namespace, + ], + color: "var(--codemirror-number, #ca7841)", + }, + { + tag: [ + tags.operator, + tags.operatorKeyword, + tags.url, + tags.escape, + tags.regexp, + tags.link, + tags.special(tags.string), + ], + color: "var(--codemirror-operator, #cda869)", + }, + { tag: tags.comment, color: "var(--codemirror-comment, #777)" }, + { + tag: tags.meta, + color: "var(--codemirror-meta, var(--primary-text-color))", + }, + { tag: tags.strong, fontWeight: "bold" }, + { tag: tags.emphasis, fontStyle: "italic" }, + { + tag: tags.link, + color: "var(--primary-color)", + textDecoration: "underline", + }, + { tag: tags.heading, fontWeight: "bold" }, + { tag: tags.atom, color: "var(--codemirror-atom, #F90)" }, + { tag: tags.bool, color: "var(--codemirror-atom, #F90)" }, + { + tag: tags.special(tags.variableName), + color: "var(--codemirror-variable-2, #690)", + }, + { tag: tags.processingInstruction, color: "var(--secondary-text-color)" }, + { tag: tags.string, color: "var(--codemirror-string, #07a)" }, + { tag: tags.inserted, color: "var(--codemirror-string2, #07a)" }, + { tag: tags.invalid, color: "var(--error-color)" } +); diff --git a/src/state-summary/state-card-script.ts b/src/state-summary/state-card-script.ts index 44e14d0aee..3bb84d9933 100644 --- a/src/state-summary/state-card-script.ts +++ b/src/state-summary/state-card-script.ts @@ -33,7 +33,8 @@ export class StateCardScript extends LitElement { > ${stateObj.state === "on" ? html` - ${(stateObj.attributes.current || 0) > 0 + ${stateObj.attributes.mode !== "single" && + (stateObj.attributes.current || 0) > 0 ? this.hass.localize( "ui.card.script.cancel_multiple", "number", diff --git a/src/translations/en.json b/src/translations/en.json index 4a93556872..a6f7348bf0 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -98,7 +98,7 @@ "disabled_by": { "user": "User", "integration": "Integration", - "config_entry": "Config Entry", + "config_entry": "Config entry", "device": "Device" } }, @@ -339,8 +339,8 @@ } }, "target-picker": { - "expand_area_id": "Expand this area in the seperate devices and entities that it contains. After expanding it will not update the devices and entities when the area changes.", - "expand_device_id": "Expand this device in seperate entities. After expanding it will not update the entities when the device changes.", + "expand_area_id": "Expand this area into the separate devices and entities that it contains. After expanding, it will not update the devices and entities when the area changes.", + "expand_device_id": "Expand this device into the separate entities that it contains. After expanding, it will not update the entities when the device changes.", "remove_area_id": "Remove area", "remove_device_id": "Remove device", "remove_entity_id": "Remove entity", @@ -382,6 +382,19 @@ "failed_create_area": "Failed to create area." } }, + "addon-picker": { + "addon": "Add-on", + "error": { + "no_supervisor": { + "title": "No Supervisor", + "description": "No Supervisor found, so add-ons could not be loaded." + }, + "fetch_addons": { + "title": "Error fetching add-ons", + "description": "Fetching add-ons returned an error." + } + } + }, "picture-upload": { "label": "Picture", "unsupported_format": "Unsupported format, please choose a JPEG, PNG or GIF image." @@ -426,8 +439,8 @@ }, "service-control": { "required": "This field is required", - "target": "Target", - "target_description": "What should this service call target", + "target": "Targets", + "target_description": "What should this service use as targeted areas, devices or entities.", "service_data": "Service data" }, "related-items": { @@ -813,6 +826,8 @@ "my": { "not_supported": "This redirect is not supported by your Home Assistant instance. Check the {link} for the supported redirects and the version they where introduced.", "component_not_loaded": "This redirect is not supported by your Home Assistant instance. You need the integration {integration} to use this redirect.", + "no_supervisor": "This redirect is not supported by your Home Assistant installation. It needs either the Home Assistant Operating System or Home Assistant Supervised installation method. For more information, see the {docs_link}.", + "documentation": "documentation", "faq_link": "My Home Assistant FAQ", "error": "An unknown error occured" }, @@ -821,7 +836,8 @@ "introduction": "In this view it is possible to configure your components and Home Assistant. Not everything is possible to configure from the UI yet, but we're working on it.", "filtering": { "filtering_by": "Filtering by", - "clear": "Clear" + "clear": "Clear", + "show": "Show" }, "advanced_mode": { "hint_enable": "Missing config options? Enable advanced mode on", @@ -1819,7 +1835,7 @@ "disabled_by": { "user": "User", "integration": "Integration", - "config_entry": "Config Entry" + "config_entry": "Config entry" }, "enabled_description": "Disabled devices will not be shown and entities belonging to the device will be disabled and not added to Home Assistant.", "automation": { @@ -1870,6 +1886,7 @@ "scenes": "Scenes", "confirm_rename_entity_ids": "Do you also want to rename the entity IDs of your entities?", "confirm_rename_entity_ids_warning": "This will not change any configuration (like automations, scripts, scenes, dashboards) that is currently using these entities! You will have to update them yourself to use the new entity IDs!", + "confirm_disable_config_entry": "There are no more devices for the config entry {entry_name}, do you want to instead disable the config entry?", "disabled": "Disabled", "data_table": { "device": "Device", @@ -2027,6 +2044,11 @@ "rename_dialog": "Edit the name of this config entry", "rename_input_label": "Entry name", "search": "Search integrations", + "disable": { + "show_disabled": "Show disabled integrations", + "hide_disabled": "Hide disabled integrations", + "disabled_integrations": "{number} disabled" + }, "ignore": { "ignore": "Ignore", "confirm_ignore_title": "Ignore discovery of {name}?", @@ -2052,6 +2074,8 @@ "restart_confirm": "Restart Home Assistant to finish removing this integration", "reload_confirm": "The integration was reloaded", "reload_restart_confirm": "Restart Home Assistant to finish reloading this integration", + "disable_restart_confirm": "Restart Home Assistant to finish disabling this integration", + "enable_restart_confirm": "Restart Home Assistant to finish enabling this integration", "manuf": "by {manufacturer}", "hub": "Connected via", "firmware": "Firmware: {version}", @@ -2059,7 +2083,17 @@ "device_unavailable": "Device unavailable", "entity_unavailable": "Entity unavailable", "area": "In {area}", - "no_area": "No Area" + "no_area": "No Area", + "disable": { + "disabled": "Disabled", + "disabled_cause": "Disabled by {cause}", + "disabled_by": { + "user": "user", + "integration": "integration", + "device": "device" + }, + "disable_confirm": "Are you sure you want to disable this config entry? It's devices and entities will be disabled." + } }, "config_flow": { "aborted": "Aborted", @@ -2620,7 +2654,7 @@ "confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration?", "confirm_remove_config_text": "We will automatically generate your Lovelace UI views with your areas and devices if you remove your Lovelace UI configuration.", "confirm_unsaved_changes": "You have unsaved changes, are you sure you want to exit?", - "confirm_unsaved_comments": "Your configuration contains comment(s), these will not be saved. Do you want to continue?", + "confirm_unsaved_comments": "Your configuration might contains comment(s), these will not be saved. Do you want to continue?", "error_parse_yaml": "Unable to parse YAML: {error}", "error_invalid_config": "Your configuration is not valid: {error}", "error_save_yaml": "Unable to save YAML: {error}", @@ -3311,7 +3345,8 @@ "more_info": "More Info", "alert_entity_field": "Entity is a mandatory field", "last_updated": "[%key:ui::dialogs::more_info_control::last_updated%]", - "last_changed": "[%key:ui::dialogs::more_info_control::last_changed%]" + "last_changed": "[%key:ui::dialogs::more_info_control::last_changed%]", + "copy_id": "Copy ID to clipboard" }, "templates": { "title": "Template", diff --git a/test-mocha/common/config/version.ts b/test-mocha/common/config/version.ts new file mode 100644 index 0000000000..3fe6ef7af6 --- /dev/null +++ b/test-mocha/common/config/version.ts @@ -0,0 +1,41 @@ +import { assert } from "chai"; +import { atLeastVersion } from "../../../src/common/config/version"; + +const testTruthyData = [ + { version: "2021.1.1", major: 2021, minor: 1, patch: 1 }, + { version: "2021.1.1", major: 2021, minor: 1 }, + { version: "2021.1.1", major: 2020, minor: 12, patch: 1 }, + { version: "2021.1.1", major: 2020, minor: 12 }, + { version: "2021.1.1", major: 2021, minor: 2, patch: 0 }, + { version: "2021.1.1", major: 2021, minor: 2 }, + + { version: "2021.2.4", major: 0, minor: 113, patch: 0 }, + { version: "2021.2.4", major: 0, minor: 113 }, + + { version: "0.114.0", major: 0, minor: 113, patch: 0 }, + { version: "0.114.0", major: 0, minor: 113 }, + + { version: "2021.2.0dev.2323", major: 2021, minor: 2, patch: 0 }, + { version: "2021.2.0dev.2323", major: 2021, minor: 2 }, +]; + +const testFalsyData = [ + { version: "0.114.0", major: 0, minor: 113 }, + { version: "2021.2.0dev.2323", major: 2021, minor: 2, patch: 0 }, +]; + +describe("atLeastVersion - Truthy", () => { + testTruthyData.forEach((test) => + it(`'${test.version}' >= ${test.major},${test.minor},${test.patch}`, () => { + assert.isTrue(atLeastVersion("2021.1.1", 2021, 1)); + }) + ); +}); + +describe("atLeastVersion - Falsy", () => { + testFalsyData.forEach((test) => + it(`'${test.version}' >= ${test.major},${test.minor},${test.patch}`, () => { + assert.isTrue(atLeastVersion("2021.1.1", 2021, 1)); + }) + ); +}); diff --git a/translations/frontend/af.json b/translations/frontend/af.json index bd7bfc69af..38c7ec6665 100644 --- a/translations/frontend/af.json +++ b/translations/frontend/af.json @@ -754,7 +754,10 @@ "time": { "after": "Na", "before": "Voor", - "label": "Tyd" + "label": "Tyd", + "weekdays": { + "mon": "Maandag" + } }, "zone": { "entity": "Entiteit met plek", diff --git a/translations/frontend/ar.json b/translations/frontend/ar.json index 204afd658e..5e0e1ee8d3 100644 --- a/translations/frontend/ar.json +++ b/translations/frontend/ar.json @@ -717,7 +717,10 @@ "time": { "after": "بعد", "before": "قبل", - "label": "وقت" + "label": "وقت", + "weekdays": { + "mon": "الاثنين" + } }, "zone": { "entity": "كيان مع موقع", diff --git a/translations/frontend/bn.json b/translations/frontend/bn.json index 9cb413ce45..5661e0cef7 100644 --- a/translations/frontend/bn.json +++ b/translations/frontend/bn.json @@ -186,6 +186,15 @@ "no_blueprints": "আপনার কোনও ব্লুপ্রিন্ট নেই", "no_inputs": "এই ব্লুপ্রিন্টের কোনও ইনপুট নেই।" }, + "conditions": { + "type": { + "time": { + "weekdays": { + "mon": "সোমবার" + } + } + } + }, "triggers": { "introduction": "ট্রিগারগুলি যা অটোমেশন নিয়মের প্রক্রিয়া শুরু করে। একই নিয়মের জন্য একাধিক ট্রিগার নির্দিষ্ট করা সম্ভব। ট্রিগার শুরু হয়ে গেলে, Home Assistant এর শর্তগুলি যথাযথভাবে প্রযোজ্য হবে, যদি থাকে তবে এবং অ্যাকশন কল করবে।", "type": { diff --git a/translations/frontend/bs.json b/translations/frontend/bs.json index f3a2c84456..63ba1506b6 100644 --- a/translations/frontend/bs.json +++ b/translations/frontend/bs.json @@ -242,6 +242,15 @@ "config": { "automation": { "editor": { + "conditions": { + "type": { + "time": { + "weekdays": { + "mon": "Ponedeljak" + } + } + } + }, "triggers": { "type": { "mqtt": { diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index babcf88b73..de4995ba28 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -720,6 +720,12 @@ "week": "fa {count} {count, plural,\n one {setmana}\n other {setmanes}\n}" } }, + "service-control": { + "required": "Aquest camp és obligatori", + "service_data": "Dades del servei", + "target": "Objectiu", + "target_description": "Objectiu d'aquesta crida de servei" + }, "service-picker": { "service": "Servei" }, @@ -1152,7 +1158,7 @@ "event": { "event": "Esdeveniment:", "label": "Disparar esdeveniment", - "service_data": "Dades de servei" + "service_data": "Dades del servei" }, "repeat": { "label": "Repeteix", @@ -1988,8 +1994,10 @@ "config_flow": { "aborted": "Avortat", "close": "Tanca", + "could_not_load": "El flux de dades de configuració no s'ha pogut carregar", "created_config": "S'ha creat configuració per a {name}.", "dismiss": "Omet el diàleg", + "error": "Error", "error_saving_area": "Error desant àrea: {error}", "external_step": { "description": "Aquest pas requereix que visitis un lloc web extern per completar-lo.", @@ -1998,6 +2006,10 @@ "finish": "Finalitza", "loading_first_time": "Espera mentre s'instal·la la integració", "not_all_required_fields": "No s'han omplert tots els camps obligatoris.", + "pick_flow_step": { + "new_flow": "No, configura una altra instància de {integration}", + "title": "N'hem descobert aquests, vols configurar-los?" + }, "submit": "Envia" }, "configure": "Configurar", @@ -2857,7 +2869,9 @@ "type": "Tipus d'esdeveniment" }, "services": { + "accepts_target": "Aquest servei accepta un objectiu, per exemple: `entity_id: light.bed_light`", "alert_parsing_yaml": "S'ha produït un error analitzant el codi YAML: {data}", + "all_parameters": "Tots els paràmetres disponibles", "call_service": "Crida servei", "column_description": "Descripció", "column_example": "Exemple", @@ -2868,7 +2882,10 @@ "no_description": "No hi ha cap descripció disponible", "no_parameters": "Aquest servei no té paràmetres.", "select_service": "Selecciona un servei per veure'n la descripció", - "title": "Serveis" + "title": "Serveis", + "ui_mode": "Vés al mode d'interfície d'usuari", + "yaml_mode": "Vés al mode YAML", + "yaml_parameters": "Paràmetres només disponibles en mode YAML" }, "states": { "alert_entity_field": "L'entitat és un camp obligatori", diff --git a/translations/frontend/cy.json b/translations/frontend/cy.json index a2e7731b55..a84bc4760d 100644 --- a/translations/frontend/cy.json +++ b/translations/frontend/cy.json @@ -611,7 +611,10 @@ "time": { "after": "Ar ôl", "before": "Cyn", - "label": "Amser" + "label": "Amser", + "weekdays": { + "mon": "Dydd Llun" + } }, "zone": { "entity": "Endid gyda lleoliad", diff --git a/translations/frontend/en.json b/translations/frontend/en.json index 032cfdaade..c986f7f335 100644 --- a/translations/frontend/en.json +++ b/translations/frontend/en.json @@ -720,6 +720,12 @@ "week": "{count} {count, plural,\n one {week}\n other {weeks}\n} ago" } }, + "service-control": { + "required": "This field is required", + "service_data": "Service data", + "target": "Targets", + "target_description": "What should this service use as targeted areas, devices or entities." + }, "service-picker": { "service": "Service" }, @@ -727,8 +733,8 @@ "add_area_id": "Pick area", "add_device_id": "Pick device", "add_entity_id": "Pick entity", - "expand_area_id": "Expand this area in the seperate devices and entities that it contains. After expanding it will not update the devices and entities when the area changes.", - "expand_device_id": "Expand this device in seperate entities. After expanding it will not update the entities when the device changes.", + "expand_area_id": "Expand this area into the separate devices and entities that it contains. After expanding, it will not update the devices and entities when the area changes.", + "expand_device_id": "Expand this device into the separate entities that it contains. After expanding, it will not update the entities when the device changes.", "remove_area_id": "Remove area", "remove_device_id": "Remove device", "remove_entity_id": "Remove entity" @@ -1988,8 +1994,10 @@ "config_flow": { "aborted": "Aborted", "close": "Close", + "could_not_load": "Config flow could not be loaded", "created_config": "Created configuration for {name}.", "dismiss": "Dismiss dialog", + "error": "Error", "error_saving_area": "Error saving area: {error}", "external_step": { "description": "This step requires you to visit an external website to be completed.", @@ -1998,6 +2006,10 @@ "finish": "Finish", "loading_first_time": "Please wait while the integration is being installed", "not_all_required_fields": "Not all required fields are filled in.", + "pick_flow_step": { + "new_flow": "No, set up an other instance of {integration}", + "title": "We discovered these, want to set them up?" + }, "submit": "Submit" }, "configure": "Configure", @@ -2857,7 +2869,9 @@ "type": "Event Type" }, "services": { + "accepts_target": "This service accepts a target, for example: `entity_id: light.bed_light`", "alert_parsing_yaml": "Error parsing YAML: {data}", + "all_parameters": "All available parameters", "call_service": "Call Service", "column_description": "Description", "column_example": "Example", @@ -2868,7 +2882,10 @@ "no_description": "No description is available", "no_parameters": "This service takes no parameters.", "select_service": "Select a service to see the description", - "title": "Services" + "title": "Services", + "ui_mode": "Go to UI mode", + "yaml_mode": "Go to YAML mode", + "yaml_parameters": "Parameters only available in YAML mode" }, "states": { "alert_entity_field": "Entity is a mandatory field", diff --git a/translations/frontend/en_GB.json b/translations/frontend/en_GB.json index aa50eace64..d1acb55eae 100644 --- a/translations/frontend/en_GB.json +++ b/translations/frontend/en_GB.json @@ -7,6 +7,19 @@ }, "panel": { "config": { + "automation": { + "editor": { + "conditions": { + "type": { + "time": { + "weekdays": { + "mon": "Monday" + } + } + } + } + } + }, "integrations": { "caption": "Integrations", "configure": "Configure", diff --git a/translations/frontend/eo.json b/translations/frontend/eo.json index 23fc03e9a9..47c7a4c21c 100644 --- a/translations/frontend/eo.json +++ b/translations/frontend/eo.json @@ -74,7 +74,14 @@ } }, "conditions": { - "name": "Kondiĉo" + "name": "Kondiĉo", + "type": { + "time": { + "weekdays": { + "mon": "Lundo" + } + } + } }, "edit_ui": "Redakti kun UI", "edit_yaml": "Redakti kiel YAML", diff --git a/translations/frontend/es.json b/translations/frontend/es.json index 3fdb99dc77..7509dcad55 100644 --- a/translations/frontend/es.json +++ b/translations/frontend/es.json @@ -720,6 +720,12 @@ "week": "hace {count} {count, plural,\none {semana}\nother {semanas}\n}" } }, + "service-control": { + "required": "Este campo es obligatorio", + "service_data": "Datos de servicio", + "target": "Objetivo", + "target_description": "¿A qué debería dirigirse esta llamada de servicio?" + }, "service-picker": { "service": "Servicio" }, @@ -1988,8 +1994,10 @@ "config_flow": { "aborted": "Abortado", "close": "Cerrar", + "could_not_load": "No se pudo cargar el flujo de configuración", "created_config": "Configuración creada para {name}.", "dismiss": "Descartar diálogo", + "error": "Error", "error_saving_area": "Error al guardar el área: {error}", "external_step": { "description": "Este paso requiere que visites una web externa para ser completado.", @@ -1998,6 +2006,10 @@ "finish": "Terminar", "loading_first_time": "Por favor, espera mientras la integración está siendo instalada", "not_all_required_fields": "No se han completado todos los campos requeridos.", + "pick_flow_step": { + "new_flow": "No, configura otra instancia de {integration}", + "title": "Hemos descubierto éstas, ¿quieres configurarlas?" + }, "submit": "Enviar" }, "configure": "Configurar", @@ -2857,7 +2869,9 @@ "type": "Tipo de evento" }, "services": { + "accepts_target": "Este servicio acepta un objetivo, por ejemplo: `entity_id: light.luz_dormitorio`", "alert_parsing_yaml": "Error al analizar YAML: {data}", + "all_parameters": "Todos los parámetros disponibles", "call_service": "Llamar servicio", "column_description": "Descripción", "column_example": "Ejemplo", @@ -2868,7 +2882,10 @@ "no_description": "No hay descripción disponible.", "no_parameters": "Este servicio no toma parámetros.", "select_service": "Seleccione un servicio para ver la descripción.", - "title": "Servicios" + "title": "Servicios", + "ui_mode": "Ir al modo IU", + "yaml_mode": "Ir al modo YAML", + "yaml_parameters": "Parámetros solo disponibles en modo YAML" }, "states": { "alert_entity_field": "Entidad es un campo obligatorio", diff --git a/translations/frontend/et.json b/translations/frontend/et.json index 5fe6585fba..4ea9c5c1d2 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -720,6 +720,12 @@ "week": "{count} {count, plural,\n one {nädala}\n other {nädala}\n} eest" } }, + "service-control": { + "required": "See väli on nõutav", + "service_data": "Teenuse andmed", + "target": "Sihtmärk", + "target_description": "Mida peaks see teenus välja kutsuma" + }, "service-picker": { "service": "Teenus" }, @@ -1988,8 +1994,10 @@ "config_flow": { "aborted": "Katkestatud", "close": "Sulge", + "could_not_load": "Konfiguratsioonivoogu ei saanud laadida", "created_config": "Üksuse {name} jaoks on loodud konfiguratsioon.", "dismiss": "Loobumisdialoog", + "error": "Viga", "error_saving_area": "Viga ala salvestamisel: {error}", "external_step": { "description": "Selle etapi lõpetamine nõuab välise veebisaidi külastamist.", @@ -1998,6 +2006,10 @@ "finish": "Lõpeta", "loading_first_time": "Palun oodake kuni sidumist paigaldatakse", "not_all_required_fields": "Kõik nõutavad väljad pole täidetud.", + "pick_flow_step": { + "new_flow": "Ei, seadista teine {integration} eksemplar", + "title": "Avastasime need, kas soovid neid seadistada?" + }, "submit": "Esita" }, "configure": "Seadista", @@ -2857,7 +2869,9 @@ "type": "Sündmuse tüüp" }, "services": { + "accepts_target": "See teenus aktsepteerib sihtmärki, näiteks: \"entity_id: light.elutuba\"", "alert_parsing_yaml": "Viga YAML'i parsimisel: {data}", + "all_parameters": "Kõik saadaolevad parameetrid", "call_service": "Kutsu teenus", "column_description": "Kirjeldus", "column_example": "Näide", @@ -2868,7 +2882,10 @@ "no_description": "Kirjeldus pole saadaval", "no_parameters": "Sellel teenusel pole parameetreid.", "select_service": "Kirjelduse kuvamiseks vali teenus", - "title": "Teenused" + "title": "Teenused", + "ui_mode": "Ava kasutajaliidese režiim", + "yaml_mode": "Redigeeri YAML-is", + "yaml_parameters": "Parameetrid on saadaval ainult YAML režiimis" }, "states": { "alert_entity_field": "Olem on kohustuslik väli", diff --git a/translations/frontend/eu.json b/translations/frontend/eu.json index ee2c4d100d..16009f0bf7 100644 --- a/translations/frontend/eu.json +++ b/translations/frontend/eu.json @@ -442,7 +442,10 @@ "value_template": "Valio txantiloia" }, "time": { - "label": "Denbora" + "label": "Denbora", + "weekdays": { + "mon": "Astelehena" + } } } }, diff --git a/translations/frontend/fa.json b/translations/frontend/fa.json index e8548806e4..345de09af2 100644 --- a/translations/frontend/fa.json +++ b/translations/frontend/fa.json @@ -895,7 +895,10 @@ "time": { "after": "بعد از", "before": "قبل از", - "label": "زمان" + "label": "زمان", + "weekdays": { + "mon": "دوشنبه" + } }, "zone": { "entity": "نهاد به همراخ موقعیت", diff --git a/translations/frontend/gl.json b/translations/frontend/gl.json index 15018eec65..f2d95d3f76 100644 --- a/translations/frontend/gl.json +++ b/translations/frontend/gl.json @@ -4,10 +4,12 @@ "config": { "automation": { "editor": { - "triggers": { + "conditions": { "type": { - "mqtt": { - "label": "" + "time": { + "weekdays": { + "mon": "Luns" + } } } } diff --git a/translations/frontend/hi.json b/translations/frontend/hi.json index f71427a683..1594ad3657 100644 --- a/translations/frontend/hi.json +++ b/translations/frontend/hi.json @@ -233,7 +233,10 @@ }, "time": { "after": "बाद", - "before": "पहले" + "before": "पहले", + "weekdays": { + "mon": "सोमवार" + } } } }, diff --git a/translations/frontend/hr.json b/translations/frontend/hr.json index f2c6bd875d..284f79eda2 100644 --- a/translations/frontend/hr.json +++ b/translations/frontend/hr.json @@ -731,7 +731,10 @@ "time": { "after": "Nakon", "before": "Prije", - "label": "Vrijeme" + "label": "Vrijeme", + "weekdays": { + "mon": "ponedjeljak" + } }, "zone": { "entity": "Entitet sa lokacijom", diff --git a/translations/frontend/hy.json b/translations/frontend/hy.json index 4719d906ae..dd830ed255 100644 --- a/translations/frontend/hy.json +++ b/translations/frontend/hy.json @@ -654,7 +654,10 @@ "time": { "after": "Հետո", "before": "Նախքան", - "label": "ժամանակը" + "label": "ժամանակը", + "weekdays": { + "mon": "Երկուշաբթի" + } }, "zone": { "entity": "կազմակերպության գտնվելու վայրը", diff --git a/translations/frontend/ka.json b/translations/frontend/ka.json index 05b3ce8178..a02e33623b 100644 --- a/translations/frontend/ka.json +++ b/translations/frontend/ka.json @@ -5,6 +5,19 @@ "ui": { "panel": { "config": { + "automation": { + "editor": { + "conditions": { + "type": { + "time": { + "weekdays": { + "mon": "ორშაბათს" + } + } + } + } + } + }, "blueprint": { "add": { "file_name": "ლოკალური გეგმა-ფაილის სახელი", diff --git a/translations/frontend/lt.json b/translations/frontend/lt.json index c9af91d638..36b937a6e6 100644 --- a/translations/frontend/lt.json +++ b/translations/frontend/lt.json @@ -544,7 +544,10 @@ "time": { "after": "Po", "before": "Prieš", - "label": "Laikas" + "label": "Laikas", + "weekdays": { + "mon": "Pirmadienis" + } }, "zone": { "label": "Vieta", diff --git a/translations/frontend/lv.json b/translations/frontend/lv.json index 76e5f76906..5fd45a210a 100644 --- a/translations/frontend/lv.json +++ b/translations/frontend/lv.json @@ -874,7 +874,10 @@ "time": { "after": "Pēc", "before": "Pirms", - "label": "Laiks" + "label": "Laiks", + "weekdays": { + "mon": "Pirmdiena" + } }, "zone": { "entity": "Vienība ar atrašanos vietu", diff --git a/translations/frontend/nb.json b/translations/frontend/nb.json index 329fbe139e..374d2e462f 100644 --- a/translations/frontend/nb.json +++ b/translations/frontend/nb.json @@ -3409,6 +3409,7 @@ "playback_title": "Meldingsavspilling" }, "my": { + "component_not_loaded": "Denne viderekoblingen støttes ikke av Home Assistant-forekomsten. Du trenger integrasjonen {integration} å bruke denne viderekoblingen.", "error": "Det oppstod en ukjent feil", "faq_link": "Vanlige spørsmål om Min Home Assistant", "not_supported": "Denne viderekoblingen støttes ikke av Home Assistant-forekomsten. Se på {link} for viderekoblinger som støttes, og hvilken versjon de ble introdusert." diff --git a/translations/frontend/nl.json b/translations/frontend/nl.json index 45477dd403..b45ea1e575 100644 --- a/translations/frontend/nl.json +++ b/translations/frontend/nl.json @@ -2002,7 +2002,7 @@ }, "configure": "Configureer", "configured": "Geconfigureerd", - "confirm_new": "Wil je {integratie} instellen?", + "confirm_new": "Wil je {integration} instellen?", "description": "Beheer integraties met services, apparaten, ...", "details": "Integratiedetails", "discovered": "Ontdekt", diff --git a/translations/frontend/nn.json b/translations/frontend/nn.json index 5dca3159d8..3315fbf2b8 100644 --- a/translations/frontend/nn.json +++ b/translations/frontend/nn.json @@ -766,7 +766,10 @@ "time": { "after": "Etter", "before": "Før", - "label": "Tid" + "label": "Tid", + "weekdays": { + "mon": "mandag" + } }, "zone": { "entity": "Eining med posisjon", diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index 1f4b924df8..31cbffb0a4 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -720,6 +720,12 @@ "week": "{count} {count, plural,\n one {tydzień}\n few {tygodnie}\n many {tygodni}\n other {tygodni}\n} temu" } }, + "service-control": { + "required": "To pole jest wymagane", + "service_data": "Dane usługi", + "target": "Cel", + "target_description": "Jaki powinien być cel wywołania tej usługi" + }, "service-picker": { "service": "Usługa" }, @@ -1988,8 +1994,10 @@ "config_flow": { "aborted": "Przerwano", "close": "Zamknij", + "could_not_load": "Nie można wczytać interfejsu konfiguracji", "created_config": "Utworzono konfigurację dla {name}.", "dismiss": "Okno dialogowe odrzucenia", + "error": "Błąd", "error_saving_area": "Błąd podczas zapisywania obszaru: {error}", "external_step": { "description": "Ten krok wymaga od Ciebie odwiedzenia zewnętrznej strony.", @@ -1998,6 +2006,10 @@ "finish": "Zakończ", "loading_first_time": "Proszę czekać, trwa instalowanie integracji...", "not_all_required_fields": "Nie wszystkie wymagane pola są wypełnione.", + "pick_flow_step": { + "new_flow": "Nie, skonfiguruj inną instancję integracji {integration}", + "title": "Odkryliśmy je, chcesz je skonfigurować?" + }, "submit": "Zatwierdź" }, "configure": "Konfiguruj", @@ -2857,7 +2869,9 @@ "type": "Typ zdarzenia" }, "services": { + "accepts_target": "Ta usługa akceptuje cel, na przykład: `entity_id: light.bed_light`", "alert_parsing_yaml": "Błąd parsowania YAML: {data}", + "all_parameters": "Wszystkie dostępne parametry", "call_service": "Wywołaj usługę", "column_description": "Opis", "column_example": "Przykład", @@ -2868,7 +2882,10 @@ "no_description": "Opis nie jest dostępny", "no_parameters": "Ta usługa nie przyjmuje parametrów.", "select_service": "Wybierz usługę, aby zobaczyć opis", - "title": "Usługi" + "title": "Usługi", + "ui_mode": "Przejdź do trybu interfejsu użytkownika", + "yaml_mode": "Przejdź do trybu YAML", + "yaml_parameters": "Parametry dostępne tylko w trybie YAML" }, "states": { "alert_entity_field": "Encja jest polem obowiązkowym", diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index b8d478413b..7f62166987 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -720,6 +720,12 @@ "week": "{count} {count, plural,\n one {нед.}\n other {нед.}\n} назад" } }, + "service-control": { + "required": "Обязательное поле", + "service_data": "Данные службы", + "target": "Цель", + "target_description": "Что эта служба должна использовать в качестве цели" + }, "service-picker": { "service": "Служба" }, @@ -1152,7 +1158,7 @@ "event": { "event": "Событие:", "label": "Создание события", - "service_data": "Данные" + "service_data": "Данные службы" }, "repeat": { "label": "Повтор", @@ -1988,8 +1994,10 @@ "config_flow": { "aborted": "Отменено", "close": "Закрыть", + "could_not_load": "Не удалось загрузить мастер настройки", "created_config": "Создана конфигурация для {name}.", "dismiss": "Закрыть", + "error": "Ошибка", "error_saving_area": "Ошибка сохранения помещения: {error}", "external_step": { "description": "Для завершения этого шага требуется посетить внешний веб-сайт.", @@ -1998,6 +2006,10 @@ "finish": "Готово", "loading_first_time": "Идет установка интеграции, пожалуйста, подождите", "not_all_required_fields": "Не все обязательные поля заполнены.", + "pick_flow_step": { + "new_flow": "Нет, настроить другой экземпляр {integration}", + "title": "Это обнаружено автоматически, начать настройку?" + }, "submit": "Подтвердить" }, "configure": "Настроить", @@ -2857,7 +2869,9 @@ "type": "Событие" }, "services": { + "accepts_target": "Эта служба принимает целевой объект, например: `entity_id: light.bed_light`", "alert_parsing_yaml": "Ошибка при разборе синтаксиса YAML: {data}", + "all_parameters": "Все доступные параметры", "call_service": "Вызвать службу", "column_description": "Описание", "column_example": "Пример", @@ -2868,7 +2882,10 @@ "no_description": "Описание недоступно", "no_parameters": "Нет параметров для этой службы.", "select_service": "Выберите службу, чтобы увидеть описание.", - "title": "Службы" + "title": "Службы", + "ui_mode": "Перейти в режим формы ввода", + "yaml_mode": "Перейти в режим YAML", + "yaml_parameters": "Параметры доступны только в режиме YAML" }, "states": { "alert_entity_field": "Укажите объект.", diff --git a/translations/frontend/sk.json b/translations/frontend/sk.json index 25bcbf055f..84f3f3775d 100644 --- a/translations/frontend/sk.json +++ b/translations/frontend/sk.json @@ -666,6 +666,9 @@ "week": "Pred {count} {count, plural,\none {týždňom}\nother {týždňami}\n}" } }, + "service-control": { + "service_data": "Dáta služby" + }, "service-picker": { "service": "Služba" }, @@ -1643,6 +1646,7 @@ "close": "Zavrieť", "created_config": "Vytvorená konfigurácia pre {name}.", "dismiss": "Zrušiť dialógové okno", + "error": "Chyba", "error_saving_area": "Chyba pri ukladaní oblasti: {error}", "external_step": { "description": "Tento krok vyžaduje, aby ste navštívili externú webovú stránku, ktorá dokončí proces.", diff --git a/translations/frontend/sr-Latn.json b/translations/frontend/sr-Latn.json index 7f497faa5b..491454e91e 100644 --- a/translations/frontend/sr-Latn.json +++ b/translations/frontend/sr-Latn.json @@ -73,6 +73,15 @@ "config": { "automation": { "editor": { + "conditions": { + "type": { + "time": { + "weekdays": { + "mon": "Понедељак" + } + } + } + }, "triggers": { "type": { "mqtt": { diff --git a/translations/frontend/sr.json b/translations/frontend/sr.json index 2a32b3aca6..53e5fa78be 100644 --- a/translations/frontend/sr.json +++ b/translations/frontend/sr.json @@ -56,6 +56,15 @@ "config": { "automation": { "editor": { + "conditions": { + "type": { + "time": { + "weekdays": { + "mon": "Понедељак" + } + } + } + }, "triggers": { "learn_more": "Сазнајте више о окидачима", "type": { diff --git a/translations/frontend/ta.json b/translations/frontend/ta.json index 7445b2d66a..53f535f85d 100644 --- a/translations/frontend/ta.json +++ b/translations/frontend/ta.json @@ -239,6 +239,15 @@ "config": { "automation": { "editor": { + "conditions": { + "type": { + "time": { + "weekdays": { + "mon": "திங்கட்கிழமை" + } + } + } + }, "triggers": { "type": { "mqtt": { diff --git a/translations/frontend/te.json b/translations/frontend/te.json index 1bddd1e80b..a2c345a786 100644 --- a/translations/frontend/te.json +++ b/translations/frontend/te.json @@ -409,7 +409,10 @@ }, "time": { "after": "తరువాత", - "before": "ముందు" + "before": "ముందు", + "weekdays": { + "mon": "సోమవారం" + } } } }, diff --git a/translations/frontend/th.json b/translations/frontend/th.json index 8336fb016e..58d6851699 100644 --- a/translations/frontend/th.json +++ b/translations/frontend/th.json @@ -670,7 +670,10 @@ "time": { "after": "หลังจาก", "before": "ก่อนที่จะ", - "label": "เวลา" + "label": "เวลา", + "weekdays": { + "mon": "วันจันทร์" + } }, "zone": { "entity": "Entity พร้อมตำแหน่ง", diff --git a/translations/frontend/ur.json b/translations/frontend/ur.json index c130104798..a1e53e1448 100644 --- a/translations/frontend/ur.json +++ b/translations/frontend/ur.json @@ -37,6 +37,11 @@ "type": { "device": { "label": "آلہ" + }, + "time": { + "weekdays": { + "mon": "پیر" + } } } } diff --git a/translations/frontend/zh-Hant.json b/translations/frontend/zh-Hant.json index 25c6ddd9b5..6d3946aa80 100644 --- a/translations/frontend/zh-Hant.json +++ b/translations/frontend/zh-Hant.json @@ -720,6 +720,12 @@ "week": "{count} {count, plural,\n one {週}\n other {週}\n}以前" } }, + "service-control": { + "required": "必填欄位", + "service_data": "服務資料", + "target": "目標", + "target_description": "此服務呼叫的目標" + }, "service-picker": { "service": "服務" }, @@ -1152,7 +1158,7 @@ "event": { "event": "事件:", "label": "執行事件", - "service_data": "資料" + "service_data": "服務資料" }, "repeat": { "label": "重複", @@ -1988,8 +1994,10 @@ "config_flow": { "aborted": "已中止", "close": "關閉", + "could_not_load": "設定流程無法載入", "created_config": "新增 {name} 設定。", "dismiss": "關閉對話", + "error": "錯誤", "error_saving_area": "儲存分區錯誤:{error}", "external_step": { "description": "此步驟將需要開啟外部網站方能完成。", @@ -1998,6 +2006,10 @@ "finish": "完成", "loading_first_time": "請稍候、正在安裝整合", "not_all_required_fields": "所有所需欄位都需要填寫。", + "pick_flow_step": { + "new_flow": "不,設定另一組 {integration} 實例", + "title": "發現以下裝置,是否進行設定?" + }, "submit": "傳送" }, "configure": "設定", @@ -2857,7 +2869,9 @@ "type": "事件類別" }, "services": { + "accepts_target": "服務接受目標,例如:`entity_id: light.bed_light`", "alert_parsing_yaml": "解析 YAML 錯誤:{data}", + "all_parameters": "所有可用參數", "call_service": "執行服務", "column_description": "說明", "column_example": "範例", @@ -2868,7 +2882,10 @@ "no_description": "無描述可使用", "no_parameters": "此服務未含任何參數。", "select_service": "選擇服務以檢視其說明", - "title": "服務" + "title": "服務", + "ui_mode": "進入 UI 模式", + "yaml_mode": "進入 YAML 模式", + "yaml_parameters": "參數僅限於 YAML 模式" }, "states": { "alert_entity_field": "實體為必填欄位", diff --git a/yarn.lock b/yarn.lock index dd3bdf8903..25e3d6c924 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1905,6 +1905,114 @@ resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-5.0.0.tgz#3ba791f37b90e7f6170d252b63aacfcae943c039" integrity sha512-WmKrB/575EJCzbeSJR3YQ5sET5FaizeljLRw1382qVUeGqzuWBgIS+AF5a0FO51uQTrDpoRgvuHC2IWVsgwkkA== +"@codemirror/commands@^0.17.2": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-0.17.4.tgz#afca35595cf728eafa280d267285c8985a2f5c8b" + integrity sha512-YB1Iz5nHVZFJCB/WboNRBS7Bb6f/M/LoJQRm4AY2h1uWmSnxbr02DPX3XpTVhams7x7XNtIFtgk/Q4/wel/JXg== + dependencies: + "@codemirror/language" "^0.17.0" + "@codemirror/matchbrackets" "^0.17.0" + "@codemirror/state" "^0.17.0" + "@codemirror/text" "^0.17.0" + "@codemirror/view" "^0.17.0" + lezer-tree "^0.13.0" + +"@codemirror/gutter@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@codemirror/gutter/-/gutter-0.17.2.tgz#75c433090d05786614c0c7d14d2efae42c301151" + integrity sha512-kyfuNVg3B+yS9U3aNMK/AQ0NyOswOep8lrbldBL4BWXZ8mFzSifT3WNK887WYrEIhqeLjq5qjcsJgFyGrFR0Lg== + dependencies: + "@codemirror/rangeset" "^0.17.0" + "@codemirror/state" "^0.17.0" + "@codemirror/view" "^0.17.0" + +"@codemirror/highlight@^0.17.0", "@codemirror/highlight@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@codemirror/highlight/-/highlight-0.17.2.tgz#14825083581ed4bd8a4a06cd92a2062d5af923c8" + integrity sha512-KmSOCHjPv7yO9NAtQnqCNwjLHVwFh9InMwul0+JSsor1qLfBR1ljlmqLr7KUe9WWRnM7oD/eSuwF5uNpGtuaNw== + dependencies: + "@codemirror/language" "^0.17.0" + "@codemirror/rangeset" "^0.17.0" + "@codemirror/state" "^0.17.0" + "@codemirror/view" "^0.17.0" + lezer-tree "^0.13.0" + style-mod "^3.2.0" + +"@codemirror/language@^0.17.0": + version "0.17.5" + resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-0.17.5.tgz#77b551680f0bb8a6e40de7659e518de1e0c637a0" + integrity sha512-eFpWMv4anbinagEziYUO62mNKUFBPXeJ96HRuxYQI3yt4mJIVjzS7FkB/4VHqOcvfJYqYI3TURyu0T8MM4se2A== + dependencies: + "@codemirror/state" "^0.17.0" + "@codemirror/text" "^0.17.0" + "@codemirror/view" "^0.17.0" + lezer "^0.13.0" + lezer-tree "^0.13.0" + +"@codemirror/legacy-modes@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@codemirror/legacy-modes/-/legacy-modes-0.17.1.tgz#18a1a0f4a6b5745e521443525a243b9bc321e8ae" + integrity sha512-JafuzWLKuUfKh8rF2VYgUx+fzD4upFxV9kJuIUyv94/S9RcdrDPRU46AmfSpdumY6A9F2qQuTEc5ZLaK3g0iaw== + dependencies: + "@codemirror/stream-parser" "^0.17.0" + +"@codemirror/matchbrackets@^0.17.0": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@codemirror/matchbrackets/-/matchbrackets-0.17.2.tgz#9dd72046d7bf09550612b2553c41317ed22577b1" + integrity sha512-E4TP7lNXk7VtmvvKYH59yNx0lf5ubv7iv0Ok0uWCjxm+RIPnXiOdRoNI7rxITJcgNROOyKnuKsd6AAnmuXxDEQ== + dependencies: + "@codemirror/language" "^0.17.0" + "@codemirror/state" "^0.17.0" + "@codemirror/view" "^0.17.0" + lezer-tree "^0.13.0" + +"@codemirror/rangeset@^0.17.0": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@codemirror/rangeset/-/rangeset-0.17.1.tgz#41066bcf4b70b2c7595cb1363780688cc3f1235b" + integrity sha512-Qv8a8C5CZiUdXGvxniWdULJzXDiz5uSP5ddHFEmekGa9nNVCgdr05nH7R+h3NgJ2P40UEEOPykqXZyy8EHGggw== + dependencies: + "@codemirror/state" "^0.17.0" + +"@codemirror/state@^0.17.0", "@codemirror/state@^0.17.1": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-0.17.2.tgz#b94846def08c2258bfdf09839359c31823e663ff" + integrity sha512-3WwDsBTMkiyFKJntIZjCiyq0KKo1OaKhq8k9vG/eGRm6bYL8rPOAEvufW6AKwuK3BSAftOAHFNXXq+GRNoL7zg== + dependencies: + "@codemirror/text" "^0.17.0" + +"@codemirror/stream-parser@^0.17.0", "@codemirror/stream-parser@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@codemirror/stream-parser/-/stream-parser-0.17.1.tgz#b8508676cffac1c34c98d4004a8449d762bef6cf" + integrity sha512-toCFLbPzzXNxCjyeNtu/s5Me1xDFQp6qCS4CNfslnW3iAg86M7W4v8SJocmVO3ALAr/6Ci/ECSIN7jsGZcAitw== + dependencies: + "@codemirror/highlight" "^0.17.0" + "@codemirror/language" "^0.17.0" + "@codemirror/state" "^0.17.0" + "@codemirror/text" "^0.17.0" + lezer "^0.13.0" + lezer-tree "^0.13.0" + +"@codemirror/text@^0.17.0", "@codemirror/text@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@codemirror/text/-/text-0.17.2.tgz#7076feeaed16556b52d9b028429296ce10eb1280" + integrity sha512-KL+cM+uJPW5skyuTRoW43lOaSQq3YDNEPx5z0V/9Wsz9R9dK4kVP5NIRMUFgl9MUCQ9UxIotvgPDpz65j9wjuA== + +"@codemirror/view@^0.17.0", "@codemirror/view@^0.17.7": + version "0.17.10" + resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-0.17.10.tgz#d3bf4b2435b68c7ede784583f2c240f58ac3d5c4" + integrity sha512-Ke3mgfw1qnLekFDFYJsz8ewKa0dBnnUrlYSZd+1X1XkMaqmKZj6enbcvpW0/GnxOvGJpa+HrWCMSrRvCrlaqjA== + dependencies: + "@codemirror/rangeset" "^0.17.0" + "@codemirror/state" "^0.17.0" + "@codemirror/text" "^0.17.0" + style-mod "^3.2.0" + w3c-keyname "^2.2.4" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" + integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== + "@formatjs/ecma402-abstract@^1.2.5": version "1.2.5" resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.2.5.tgz#5a61ac1990ff2df8d1348ab12e186c1ca2a2bd71" @@ -3444,10 +3552,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/estree@^0.0.45": - version "0.0.45" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" - integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== +"@types/estree@^0.0.46": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== "@types/events@*": version "3.0.0" @@ -4133,149 +4241,125 @@ "@types/parse5" "^5.0.3" parse5 "^6.0.1" -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== +"@webassemblyjs/ast@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" + integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" + "@webassemblyjs/helper-numbers" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== +"@webassemblyjs/floating-point-hex-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" + integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== +"@webassemblyjs/helper-api-error@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" + integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== +"@webassemblyjs/helper-buffer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" + integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== +"@webassemblyjs/helper-numbers@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" + integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== dependencies: - "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== +"@webassemblyjs/helper-wasm-bytecode@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" + integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== +"@webassemblyjs/helper-wasm-section@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" + integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== dependencies: - "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== +"@webassemblyjs/ieee754@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" + integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== +"@webassemblyjs/leb128@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" + integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== +"@webassemblyjs/utf8@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" + integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== +"@webassemblyjs/wasm-edit@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" + integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-wasm-section" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-opt" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + "@webassemblyjs/wast-printer" "1.11.0" -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== +"@webassemblyjs/wasm-gen@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" + integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== +"@webassemblyjs/wasm-opt@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" + integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== +"@webassemblyjs/wasm-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" + integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== +"@webassemblyjs/wast-printer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" + integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" + "@webassemblyjs/ast" "1.11.0" "@xtuc/long" "4.2.2" "@webcomponents/shadycss@^1.5.2": @@ -4288,17 +4372,22 @@ resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.2.10.tgz#6f6bee0277833ae98d7e5b46f1e0fdb48cd5ff44" integrity sha512-5dzhUhP+h0qMiK0IWb7VNb0OGBoXO3AuI6Qi8t9PoKT50s5L1jv0xnwnLq+cFgPuTB8FLTNP8xIDmyoOsKBy9Q== -"@webpack-cli/info@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.0.2.tgz#7ba1a7cfa9efa5b51e76b20ada88ac33b0340ad3" - integrity sha512-FEfLQwmN4pXZSYSrtp+KC84rFanoCIxXFpS2wUvviDCE2fnajwxw2GXzbj83IlH4Dl8Wq8kJjavVwvxv3YJmnw== +"@webpack-cli/configtest@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.1.tgz#241aecfbdc715eee96bed447ed402e12ec171935" + integrity sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ== + +"@webpack-cli/info@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.2.tgz#ef3c0cd947a1fa083e174a59cb74e0b6195c236c" + integrity sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.0.1.tgz#28abe7dcb18224ccd4b4e2d37f70e5be66c3d6a9" - integrity sha512-WGMaTMTK6NOe29Hw1WBEok9vGLfKg5C6jWzNOS/6HH1YadR+RL+TRWRcSyc81Dzulljhk/Ree9mrDM4Np9GGOQ== +"@webpack-cli/serve@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.0.tgz#2730c770f5f1f132767c63dcaaa4ec28f8c56a6c" + integrity sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -4351,10 +4440,10 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== -acorn@^8.0.3: - version "8.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.4.tgz#7a3ae4191466a6984eee0fe3407a4f3aa9db8354" - integrity sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ== +acorn@^8.0.4: + version "8.0.5" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.5.tgz#a3bfb872a74a6a7f661bc81b9849d9cac12601b7" + integrity sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg== ajv-errors@^1.0.0: version "1.0.1" @@ -4460,7 +4549,7 @@ ansi-escapes@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: +ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== @@ -4663,7 +4752,7 @@ array-back@^3.0.1: resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== -array-back@^4.0.0, array-back@^4.0.1: +array-back@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90" integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg== @@ -5170,7 +5259,7 @@ browserslist@^4.11.1: node-releases "^1.1.53" pkg-up "^2.0.0" -browserslist@^4.12.0, browserslist@^4.14.3: +browserslist@^4.12.0: version "4.14.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015" integrity sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA== @@ -5180,6 +5269,17 @@ browserslist@^4.12.0, browserslist@^4.14.3: escalade "^3.1.0" node-releases "^1.1.61" +browserslist@^4.14.5: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + dependencies: + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" + browserslist@^4.8.3: version "4.8.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" @@ -5385,6 +5485,11 @@ caniuse-lite@^1.0.30001135: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001144.tgz#bca0fffde12f97e1127a351fec3bfc1971aa3b3d" integrity sha512-4GQTEWNMnVZVOFG3BK0xvGeaDAtiPAbG2N8yuMXuXzx/c2Vd4XoMPO8+E918zeXn5IF0FRVtGShBfkfQea2wHQ== +caniuse-lite@^1.0.30001181: + version "1.0.30001191" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001191.tgz#bacb432b6701f690c8c5f7c680166b9a9f0843d9" + integrity sha512-xJJqzyd+7GCJXkcoBiQ1GuxEiOBCLQ0aVW9HMekifZsAVGdj5eJ4mFB9fEhSHipq9IOk/QXFJUiIr9lZT+EsGw== + chai@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" @@ -5697,6 +5802,15 @@ clone-buffer@^1.0.0: resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" @@ -5812,16 +5926,6 @@ command-line-args@^5.1.1: lodash.camelcase "^4.3.0" typical "^4.0.0" -command-line-usage@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.0.tgz#f28376a3da3361ff3d36cfd31c3c22c9a64c7cb6" - integrity sha512-Ew1clU4pkUeo6AFVDFxCbnN7GIZfXl48HIOQeFQnkO3oOqvpI7wdqtLRwv9iOCZ/7A+z4csVZeiDdEcj8g6Wiw== - dependencies: - array-back "^4.0.0" - chalk "^2.4.2" - table-layout "^1.0.0" - typical "^5.2.0" - command-line-usage@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.1.tgz#c908e28686108917758a49f45efb4f02f76bc03f" @@ -5842,10 +5946,10 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== -commander@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" - integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== +commander@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" + integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== commander@~2.20.3: version "2.20.3" @@ -6120,7 +6224,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -6195,13 +6299,20 @@ debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" -debug@3.2.6, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: +debug@3.2.6, debug@^3.1.0, debug@^3.1.1: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -6549,6 +6660,11 @@ electron-to-chromium@^1.3.571: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.577.tgz#9885f3f72c6e3367010b461ff6f2d9624a929720" integrity sha512-dSb64JQSFif/pD8mpVAgSFkbVi6YHbK6JeEziwNNmXlr/Ne2rZtseFK5SM7JoWSLf6gP0gVvRGi4/2ZRhSX/rA== +electron-to-chromium@^1.3.649: + version "1.3.673" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.673.tgz#b4f81c930b388f962b7eba20d0483299aaa40913" + integrity sha512-ms+QR2ckfrrpEAjXweLx6kNCbpAl66DcW//3BZD4BV5KhUgr0RZRce1ON/9J3QyA3JO28nzgb5Xv8DnPr05ILg== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -6608,15 +6724,15 @@ enhanced-resolve@^0.9.1: memory-fs "^0.2.0" tapable "^0.1.8" -enhanced-resolve@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.2.0.tgz#3db3307a608f236f33aeea79303d32915792cbab" - integrity sha512-NZlGLl8DxmZoq0uqPPtJfsCAir68uR047+Udsh1FH4+5ydGQdMurn/A430A1BtxASVmMEuS7/XiJ5OxJ9apAzQ== +enhanced-resolve@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" + integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== dependencies: graceful-fs "^4.2.4" - tapable "^2.0.0" + tapable "^2.2.0" -enquirer@^2.3.4: +enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -6676,6 +6792,11 @@ es-module-lexer@^0.3.24, es-module-lexer@^0.3.26: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== +es-module-lexer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.0.tgz#21f4181cc8b7eee06855f1c59e6087c7bc4f77b0" + integrity sha512-iuEGihqqhKWFgh72Q/Jtch7V2t/ft8w8IPP2aEN8ArYKO+IWyo6hsi96hCdgyeEDQIV3InhYQ9BlwUFPGXrbEQ== + es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -6735,6 +6856,11 @@ escalade@^3.1.0: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" @@ -6792,10 +6918,10 @@ eslint-import-resolver-node@^0.3.2: debug "^2.6.9" resolve "^1.5.0" -eslint-import-resolver-webpack@^0.12.2: - version "0.12.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.12.2.tgz#769e86cd0c752a1536c19855ebd90aa14ce384ee" - integrity sha512-7Jnm4YAoNNkvqPaZkKdIHsKGmv8/uNnYC5QsXkiSodvX4XEEfH2AKOna98FK52fCDXm3q4HzuX+7pRMKkJ64EQ== +eslint-import-resolver-webpack@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.0.tgz#5cb19cf4b6996c8a2514aeb10f909e2c70488dc3" + integrity sha512-hZWGcmjaJZK/WSCYGI/y4+FMGQZT+cwW/1E/P4rDwFj2PbanlQHISViw4ccDJ+2wxAqjgwBfxwy3seABbVKDEw== dependencies: array-find "^1.0.0" debug "^2.6.9" @@ -6874,12 +7000,12 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" eslint-utils@^1.4.3: @@ -6977,11 +7103,23 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" @@ -7076,19 +7214,19 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" - integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== +execa@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exif-parser@^0.1.12: @@ -7287,6 +7425,11 @@ fast-url-parser@1.1.3: dependencies: punycode "^1.3.2" +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + fastq@^1.6.0: version "1.8.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" @@ -7294,17 +7437,10 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= +faye-websocket@^0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== dependencies: websocket-driver ">=0.5.1" @@ -7714,13 +7850,6 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" @@ -8280,6 +8409,11 @@ http-parser-js@>=0.4.0: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -8304,10 +8438,10 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== husky@^1.3.1: version "1.3.1" @@ -8483,7 +8617,7 @@ interpret@^1.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -interpret@^2.0.0: +interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== @@ -8995,10 +9129,10 @@ jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest-worker@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.5.0.tgz#87deee86dbbc5f98d9919e0dadf2c40e3152fa30" - integrity sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug== +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: "@types/node" "*" merge-stream "^2.0.0" @@ -9052,10 +9186,10 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== json5@^1.0.1: version "1.0.1" @@ -9262,6 +9396,18 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lezer-tree@^0.13.0, lezer-tree@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/lezer-tree/-/lezer-tree-0.13.2.tgz#00f4671309b15c27b131f637e430ce2d4d5f7065" + integrity sha512-15ZxW8TxVNAOkHIo43Iouv4zbSkQQ5chQHBpwXcD2bBFz46RB4jYLEEww5l1V0xyIx9U2clSyyrLes+hAUFrGQ== + +lezer@^0.13.0: + version "0.13.3" + resolved "https://registry.yarnpkg.com/lezer/-/lezer-0.13.3.tgz#520033a8f8be32872af1030e99ede6d9d3c6c023" + integrity sha512-DKYaqt52qx9wjxk+q+CqMMn5InqdwLrSCMqtNs+zYkl/VoTUgU8/BdmB6w/b/u7L5FCwdNybVvDS5t+1AvsD5g== + dependencies: + lezer-tree "^0.13.2" + liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" @@ -9423,10 +9569,10 @@ load-json-file@^2.0.0: pify "^2.0.0" strip-bom "^3.0.0" -loader-runner@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.1.0.tgz#f70bc0c29edbabdf2043e7ee73ccc3fe1c96b42d" - integrity sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA== +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== loader-utils@^1.1.0: version "1.2.3" @@ -10252,10 +10398,10 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-forge@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" - integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== "node-libs-browser@^1.0.0 || ^2.0.0": version "2.2.0" @@ -10319,6 +10465,11 @@ node-releases@^1.1.61: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== +node-releases@^1.1.70: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== + node-vibrant@3.2.1-alpha.1: version "3.2.1-alpha.1" resolved "https://registry.yarnpkg.com/node-vibrant/-/node-vibrant-3.2.1-alpha.1.tgz#d80a3dd22741150b804ae0d3eb99ceaf9f79980a" @@ -10396,7 +10547,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -10590,6 +10741,13 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + only@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" @@ -10705,12 +10863,12 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" - integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-try "^2.0.0" + yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" @@ -11325,6 +11483,11 @@ querystringify@^2.0.0: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -12013,7 +12176,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -12066,12 +12229,12 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^1.10.7: - version "1.10.7" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" - integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== +selfsigned@^1.10.8: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== dependencies: - node-forge "0.9.0" + node-forge "^0.10.0" semver-compare@^1.0.0: version "1.0.0" @@ -12236,6 +12399,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -12275,6 +12445,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + simple-git@^1.85.0: version "1.110.0" resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.110.0.tgz#54eb179089d055a7783d32399246cebc9d9933e9" @@ -12349,26 +12524,26 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== +sockjs-client@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.0.tgz#2f8ff5d4b659e0d092f7aba0b7c386bd2aa20add" + integrity sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q== dependencies: - debug "^3.2.5" + debug "^3.2.6" eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.4.7" -sockjs@0.3.20: - version "0.3.20" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" - integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== dependencies: - faye-websocket "^0.10.0" + faye-websocket "^0.11.3" uuid "^3.4.0" - websocket-driver "0.6.5" + websocket-driver "^0.7.4" sortablejs@^1.10.2: version "1.10.2" @@ -12756,6 +12931,11 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== +style-mod@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-3.2.1.tgz#daaa4ad2a8b2880b4c07b29c061d49b5db6cab15" + integrity sha512-cQerrMLHjR/fxC4DWC2dRrXc11hvsM7lJ2vtuMOHWU5IG7Deu5RfTbttjbY4xiRAWs3gFIZZFf694jzNPW1Ehw== + subarg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" @@ -12829,7 +13009,7 @@ systemjs@^6.3.2: resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-6.3.2.tgz#2c3407f949260fdfb3b837c191869db933d1fe0f" integrity sha512-zcALS1RIYtsQBG4fbaE+cJzKx+UoEuSM8xCkGGH99i7p7Ym3ALvhi9QrpF2lo0CMQaejqrE1GnbkuG2m/+H7ew== -table-layout@^1.0.0, table-layout@^1.0.1: +table-layout@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.1.tgz#8411181ee951278ad0638aea2f779a9ce42894f9" integrity sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q== @@ -12859,6 +13039,11 @@ tapable@^2.0.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.0.0.tgz#a49c3d6a8a2bb606e7db372b82904c970d537a08" integrity sha512-bjzn0C0RWoffnNdTzNi7rNDhs1Zlwk2tRXgk8EiHKAOX1Mag3d6T0Y5zNa7l9CJ+EoUne/0UHdwS8tMbkh9zDg== +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + tar@^4: version "4.4.8" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" @@ -12893,17 +13078,17 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terser-webpack-plugin@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.0.0.tgz#88f58d27d1c8244965c59540d3ccda1598fc958c" - integrity sha512-rf7l5a9xamIVX3enQeTl0MY2MNeZClo5yPX/tVPy22oY0nzu0b45h7JqyFi/bygqKWtzXMnml0u12mArhQPsBQ== +terser-webpack-plugin@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673" + integrity sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q== dependencies: - jest-worker "^26.5.0" - p-limit "^3.0.2" + jest-worker "^26.6.2" + p-limit "^3.1.0" schema-utils "^3.0.0" serialize-javascript "^5.0.1" source-map "^0.6.1" - terser "^5.3.5" + terser "^5.5.1" terser@^4.6.2: version "4.6.6" @@ -12914,10 +13099,10 @@ terser@^4.6.2: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.3.5: - version "5.3.7" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.7.tgz#798a4ae2e7ff67050c3e99fcc4e00725827d97e2" - integrity sha512-lJbKdfxWvjpV330U4PBZStCT9h3N9A4zZVA5Y4k9sCWXknrpdyxi1oMsRKLmQ/YDMDxSBKIh88v0SkdhdqX06w== +terser@^5.5.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.0.tgz#138cdf21c5e3100b1b3ddfddf720962f88badcd2" + integrity sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -13393,6 +13578,14 @@ url-parse@^1.4.3: querystringify "^2.0.0" requires-port "^1.0.0" +url-parse@^1.4.7: + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url-toolkit@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/url-toolkit/-/url-toolkit-2.1.6.tgz#6d03246499e519aad224c44044a4ae20544154f2" @@ -13457,10 +13650,10 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== -v8-compile-cache@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== +v8-compile-cache@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== v8flags@^3.0.1: version "3.1.2" @@ -13636,6 +13829,11 @@ vue@^2.6.10, vue@^2.6.11: resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== +w3c-keyname@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.4.tgz#4ade6916f6290224cdbd1db8ac49eab03d0eef6b" + integrity sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw== + watchpack@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.0.0.tgz#b12248f32f0fd4799b7be0802ad1f6573a45955c" @@ -13671,24 +13869,25 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-cli@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.1.0.tgz#3a8fe05326015cc92b67abea68e3c320d418b16e" - integrity sha512-NdhxXMZmoik62Y05t0h1y65LjBM7BwFPq311ihXuMM3RY6dlc4KkCTyHLzTuBEc+bqq6d3xh+CWmU0xRexNJBA== +webpack-cli@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.5.0.tgz#b5213b84adf6e1f5de6391334c9fa53a48850466" + integrity sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q== dependencies: - "@webpack-cli/info" "^1.0.2" - "@webpack-cli/serve" "^1.0.1" - ansi-escapes "^4.3.1" + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.0.1" + "@webpack-cli/info" "^1.2.2" + "@webpack-cli/serve" "^1.3.0" colorette "^1.2.1" - command-line-usage "^6.1.0" - commander "^6.0.0" - enquirer "^2.3.4" - execa "^4.0.0" + commander "^7.0.0" + enquirer "^2.3.6" + execa "^5.0.0" + fastest-levenshtein "^1.0.12" import-local "^3.0.2" - interpret "^2.0.0" + interpret "^2.2.0" rechoir "^0.7.0" - v8-compile-cache "^2.1.0" - webpack-merge "^4.2.2" + v8-compile-cache "^2.2.0" + webpack-merge "^5.7.3" webpack-dev-middleware@^3.7.2: version "3.7.2" @@ -13701,10 +13900,10 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" - integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== +webpack-dev-server@^3.11.2: + version "3.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -13726,11 +13925,11 @@ webpack-dev-server@^3.11.0: p-retry "^3.0.1" portfinder "^1.0.26" schema-utils "^1.0.0" - selfsigned "^1.10.7" + selfsigned "^1.10.8" semver "^6.3.0" serve-index "^1.9.1" - sockjs "0.3.20" - sockjs-client "1.4.0" + sockjs "^0.3.21" + sockjs-client "^1.5.0" spdy "^4.0.2" strip-ansi "^3.0.1" supports-color "^6.1.0" @@ -13756,22 +13955,15 @@ webpack-manifest-plugin@^3.0.0: tapable "^2.0.0" webpack-sources "^2.2.0" -webpack-merge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== +webpack-merge@^5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" + integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== dependencies: - lodash "^4.17.15" + clone-deep "^4.0.1" + wildcard "^2.0.0" -webpack-sources@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.0.1.tgz#1467f6e692ddce91e88b8044c44347b1087bbd4f" - integrity sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - -webpack-sources@^2.2.0: +webpack-sources@^2.1.1, webpack-sources@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== @@ -13779,42 +13971,34 @@ webpack-sources@^2.2.0: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.1.3.tgz#a6e4fd250ef2513f94844ae5d8f7570215a2ac49" - integrity sha512-bNBF5EOpt5a6NeCBFu0+8KJtG61cVmOb2b/a5tPNRLz3OWgDpHMbmnDkaSm3nf/UQ6ufw4PWYGVsVOAi8UfL2A== +webpack@^5.24.1: + version "5.24.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.24.1.tgz#6b7730bfba1ee94b05d05ef7c32743a35105a744" + integrity sha512-eg+6OIt6npUSwbhRQY6XffAixEUSARBf+WAWOxrZwOB4jRbbpMXlridFy/Yt7N0U20Ry1vp/nnDbtN7l1rUdIA== dependencies: "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.45" - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^8.0.3" - browserslist "^4.14.3" + "@types/estree" "^0.0.46" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/wasm-edit" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + acorn "^8.0.4" + browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.2.0" - eslint-scope "^5.1.0" + enhanced-resolve "^5.7.0" + es-module-lexer "^0.4.0" + eslint-scope "^5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.4" json-parse-better-errors "^1.0.2" - loader-runner "^4.1.0" + loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - pkg-dir "^4.2.0" schema-utils "^3.0.0" - tapable "^2.0.0" - terser-webpack-plugin "^5.0.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.1" watchpack "^2.0.0" - webpack-sources "^2.0.1" - -websocket-driver@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" - integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= - dependencies: - websocket-extensions ">=0.1.1" + webpack-sources "^2.1.1" websocket-driver@>=0.5.1: version "0.7.0" @@ -13824,6 +14008,15 @@ websocket-driver@>=0.5.1: http-parser-js ">=0.4.0" websocket-extensions ">=0.1.1" +websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + websocket-extensions@>=0.1.1: version "0.1.4" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" @@ -13881,6 +14074,11 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -14275,6 +14473,11 @@ yn@^2.0.0: resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + yup@^0.26.10: version "0.26.10" resolved "https://registry.yarnpkg.com/yup/-/yup-0.26.10.tgz#3545839663289038faf25facfc07e11fd67c0cb1"