Compare commits

..

1 Commits

Author SHA1 Message Date
Bram Kragten
46cdeef4b0 Don't make dialog box full height on mobile 2021-03-02 15:49:34 +01:00
17 changed files with 239 additions and 334 deletions

View File

@@ -23,17 +23,16 @@
"license": "Apache-2.0",
"dependencies": {
"@braintree/sanitize-url": "^5.0.0",
"@codemirror/commands": "^0.18.0",
"@codemirror/gutter": "^0.18.0",
"@codemirror/highlight": "^0.18.1",
"@codemirror/history": "^0.18.0",
"@codemirror/legacy-modes": "^0.18.0",
"@codemirror/rectangular-selection": "^0.18.0",
"@codemirror/search": "^0.18.0",
"@codemirror/state": "^0.18.0",
"@codemirror/stream-parser": "^0.18.0",
"@codemirror/text": "^0.18.0",
"@codemirror/view": "^0.18.0",
"@codemirror/commands": "^0.17.0",
"@codemirror/gutter": "^0.17.0",
"@codemirror/highlight": "^0.17.0",
"@codemirror/history": "^0.17.0",
"@codemirror/legacy-modes": "^0.17.0",
"@codemirror/search": "^0.17.0",
"@codemirror/state": "^0.17.0",
"@codemirror/stream-parser": "^0.17.0",
"@codemirror/text": "^0.17.0",
"@codemirror/view": "^0.17.0",
"@formatjs/intl-getcanonicallocales": "^1.4.6",
"@formatjs/intl-pluralrules": "^3.4.10",
"@fullcalendar/common": "5.1.0",

View File

@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name="home-assistant-frontend",
version="20210302.6",
version="20210301.0",
description="The Home Assistant frontend",
url="https://github.com/home-assistant/home-assistant-polymer",
author="The Home Assistant Authors",

View File

@@ -1,17 +0,0 @@
const isTemplateRegex = new RegExp("{%|{{|{#");
export const isTemplate = (value: string): boolean =>
isTemplateRegex.test(value);
export const hasTemplate = (value: unknown): boolean => {
if (!value) {
return false;
}
if (typeof value === "string") {
return isTemplate(value);
}
if (typeof value === "object") {
const values = Array.isArray(value) ? value : Object.values(value!);
return values.some((val) => hasTemplate(val));
}
return false;
};

View File

@@ -1,3 +1,4 @@
import type { StreamLanguage } from "@codemirror/stream-parser";
import type { EditorView, KeyBinding, ViewUpdate } from "@codemirror/view";
import {
customElement,
@@ -15,6 +16,10 @@ declare global {
}
}
const modeTag = Symbol("mode");
const readOnlyTag = Symbol("readOnly");
const saveKeyBinding: KeyBinding = {
key: "Mod-s",
run: (view: EditorView) => {
@@ -37,7 +42,7 @@ export class HaCodeEditor extends UpdatingElement {
@internalProperty() private _value = "";
private _loadedCodeMirror?: typeof import("../resources/codemirror");
@internalProperty() private _langs?: Record<string, StreamLanguage<unknown>>;
public set value(value: string) {
this._value = value;
@@ -66,16 +71,16 @@ export class HaCodeEditor extends UpdatingElement {
if (changedProps.has("mode")) {
this.codemirror.dispatch({
effects: this._loadedCodeMirror!.langCompartment!.reconfigure(
this._mode
),
reconfigure: {
[modeTag]: this._mode,
},
});
}
if (changedProps.has("readOnly")) {
this.codemirror.dispatch({
effects: this._loadedCodeMirror!.readonlyCompartment!.reconfigure(
this._loadedCodeMirror!.EditorView!.editable.of(!this.readOnly)
),
reconfigure: {
[readOnlyTag]: !this.readOnly,
},
});
}
if (changedProps.has("_value") && this._value !== this.value) {
@@ -99,11 +104,13 @@ export class HaCodeEditor extends UpdatingElement {
}
private get _mode() {
return this._loadedCodeMirror!.langs[this.mode];
return this._langs![this.mode];
}
private async _load(): Promise<void> {
this._loadedCodeMirror = await loadCodeMirror();
const loaded = await loadCodeMirror();
this._langs = loaded.langs;
const shadowRoot = this.attachShadow({ mode: "open" });
@@ -117,33 +124,28 @@ export class HaCodeEditor extends UpdatingElement {
shadowRoot.appendChild(container);
this.codemirror = new this._loadedCodeMirror.EditorView({
state: this._loadedCodeMirror.EditorState.create({
this.codemirror = new loaded.EditorView({
state: loaded.EditorState.create({
doc: this._value,
extensions: [
this._loadedCodeMirror.lineNumbers(),
this._loadedCodeMirror.EditorState.allowMultipleSelections.of(true),
this._loadedCodeMirror.history(),
this._loadedCodeMirror.highlightSelectionMatches(),
this._loadedCodeMirror.highlightActiveLine(),
this._loadedCodeMirror.drawSelection(),
this._loadedCodeMirror.rectangularSelection(),
this._loadedCodeMirror.keymap.of([
...this._loadedCodeMirror.defaultKeymap,
...this._loadedCodeMirror.searchKeymap,
...this._loadedCodeMirror.historyKeymap,
...this._loadedCodeMirror.tabKeyBindings,
loaded.lineNumbers(),
loaded.history(),
loaded.highlightSelectionMatches(),
loaded.keymap.of([
...loaded.defaultKeymap,
...loaded.searchKeymap,
...loaded.historyKeymap,
...loaded.tabKeyBindings,
saveKeyBinding,
] as KeyBinding[]),
this._loadedCodeMirror.langCompartment.of(this._mode),
this._loadedCodeMirror.theme,
this._loadedCodeMirror.Prec.fallback(
this._loadedCodeMirror.highlightStyle
loaded.tagExtension(modeTag, this._mode),
loaded.theme,
loaded.Prec.fallback(loaded.highlightStyle),
loaded.tagExtension(
readOnlyTag,
loaded.EditorView.editable.of(!this.readOnly)
),
this._loadedCodeMirror.readonlyCompartment.of(
this._loadedCodeMirror.EditorView.editable.of(!this.readOnly)
),
this._loadedCodeMirror.EditorView.updateListener.of((update) =>
loaded.EditorView.updateListener.of((update) =>
this._onUpdate(update)
),
],

View File

@@ -55,7 +55,7 @@ export interface DelayActionParts {
days?: number;
}
export interface DelayAction {
delay: number | Partial<DelayActionParts> | string;
delay: number | Partial<DelayActionParts>;
}
export interface SceneAction {

View File

@@ -184,6 +184,12 @@ class DialogBox extends LitElement {
.warning {
color: var(--warning-color);
}
@media (max-width: 450px), (max-height: 500px) {
ha-dialog {
--mdc-dialog-min-height: auto;
--mdc-dialog-max-height: auto;
}
}
`,
];
}

View File

@@ -193,16 +193,12 @@ export default class HaAutomationActionRow extends LitElement {
</div>
${this._warnings
? html`<div class="warning">
${this.hass.localize("ui.errors.config.editor_not_supported")}:
UI editor is not supported for this config:
<br />
${this._warnings!.length > 0 && this._warnings![0] !== undefined
? html` <ul>
${this._warnings!.map(
(warning) => html`<li>${warning}</li>`
)}
</ul>`
: ""}
${this.hass.localize("ui.errors.config.edit_in_yaml_supported")}
<ul>
${this._warnings.map((warning) => html`<li>${warning}</li>`)}
</ul>
You can still edit your config in YAML.
</div>`
: ""}
${yamlMode
@@ -216,11 +212,7 @@ export default class HaAutomationActionRow extends LitElement {
)}
`
: ""}
<h2>
${this.hass.localize(
"ui.panel.config.automation.editor.edit_yaml"
)}
</h2>
<h2>Edit in YAML</h2>
<ha-yaml-editor
.defaultValue=${this.action}
@value-changed=${this._onYamlChange}
@@ -337,7 +329,6 @@ export default class HaAutomationActionRow extends LitElement {
}
private _switchYamlMode() {
this._warnings = undefined;
this._yamlMode = !this._yamlMode;
}

View File

@@ -1,13 +1,6 @@
import "@polymer/paper-input/paper-input";
import {
customElement,
html,
LitElement,
property,
PropertyValues,
} from "lit-element";
import { customElement, html, LitElement, property } from "lit-element";
import { fireEvent } from "../../../../../common/dom/fire_event";
import { hasTemplate } from "../../../../../common/string/has-template";
import "../../../../../components/entity/ha-entity-picker";
import { HaFormTimeData } from "../../../../../components/ha-form/ha-form";
import "../../../../../components/ha-service-picker";
@@ -21,57 +14,45 @@ export class HaDelayAction extends LitElement implements ActionElement {
@property() public action!: DelayAction;
@property() public _timeData!: HaFormTimeData;
public static get defaultConfig() {
return { delay: "" };
}
protected updated(changedProperties: PropertyValues) {
if (!changedProperties.has("action")) {
return;
}
// Check for templates in action. If found, revert to YAML mode.
if (this.action && hasTemplate(this.action)) {
fireEvent(
this,
"ui-mode-not-available",
Error(this.hass.localize("ui.errors.config.no_template_editor_support"))
);
return;
}
protected render() {
let data: HaFormTimeData = {};
if (typeof this.action.delay !== "object") {
if (typeof this.action.delay === "string" || isNaN(this.action.delay)) {
if (isNaN(this.action.delay)) {
const parts = this.action.delay?.toString().split(":") || [];
this._timeData = {
data = {
hours: Number(parts[0]) || 0,
minutes: Number(parts[1]) || 0,
seconds: Number(parts[2]) || 0,
milliseconds: Number(parts[3]) || 0,
};
} else {
this._timeData = { seconds: this.action.delay };
data = { seconds: this.action.delay };
}
return;
} else {
const { days, minutes, seconds, milliseconds } = this.action.delay;
let { hours } = this.action.delay || 0;
hours = (hours || 0) + (days || 0) * 24;
data = {
hours: hours,
minutes: minutes,
seconds: seconds,
milliseconds: milliseconds,
};
}
const { days, minutes, seconds, milliseconds } = this.action.delay;
let { hours } = this.action.delay || 0;
hours = (hours || 0) + (days || 0) * 24;
this._timeData = {
hours: hours,
minutes: minutes,
seconds: seconds,
milliseconds: milliseconds,
};
}
protected render() {
return html`<ha-time-input
.data=${this._timeData}
enableMillisecond
@value-changed=${this._valueChanged}
></ha-time-input>`;
return html`
<ha-time-input
.data=${data}
enableMillisecond
@value-changed=${this._valueChanged}
>
</ha-time-input>
`;
}
private _valueChanged(ev: CustomEvent) {

View File

@@ -16,7 +16,6 @@ import type { HomeAssistant } from "../../../../../types";
import { EntityIdOrAll } from "../../../../../common/structs/is-entity-id";
import { ActionElement } from "../ha-automation-action-row";
import "../../../../../components/ha-service-control";
import { hasTemplate } from "../../../../../common/string/has-template";
const actionStruct = object({
service: optional(string()),
@@ -47,15 +46,6 @@ export class HaServiceAction extends LitElement implements ActionElement {
assert(this.action, actionStruct);
} catch (error) {
fireEvent(this, "ui-mode-not-available", error);
return;
}
if (this.action && hasTemplate(this.action)) {
fireEvent(
this,
"ui-mode-not-available",
Error(this.hass.localize("ui.errors.config.no_template_editor_support"))
);
return;
}
if (this.action.entity_id) {
this._action = {

View File

@@ -63,11 +63,7 @@ export default class HaAutomationConditionEditor extends LitElement {
)}
`
: ""}
<h2>
${this.hass.localize(
"ui.panel.config.automation.editor.edit_yaml"
)}
</h2>
<h2>Edit in YAML</h2>
<ha-yaml-editor
.defaultValue=${this.condition}
@value-changed=${this._onYamlChange}

View File

@@ -136,11 +136,7 @@ export default class HaAutomationTriggerRow extends LitElement {
)}
`
: ""}
<h2>
${this.hass.localize(
"ui.panel.config.automation.editor.edit_yaml"
)}
</h2>
<h2>Edit in YAML</h2>
<ha-yaml-editor
.defaultValue=${this.trigger}
@value-changed=${this._onYamlChange}

View File

@@ -171,7 +171,7 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) {
[[localize('ui.panel.developer-tools.tabs.states.attributes')]]
<paper-checkbox
checked="{{_showAttributes}}"
on-change="saveAttributeCheckboxState"
on-change="{{saveAttributeCheckboxState}}"
></paper-checkbox>
</th>
</tr>

View File

@@ -234,13 +234,9 @@ export abstract class HuiElementEditor<T> extends LitElement {
<div class="warning">
${this.hass.localize("ui.errors.config.editor_not_supported")}:
<br />
${this._warnings!.length > 0 && this._warnings![0] !== undefined
? html` <ul>
${this._warnings!.map(
(warning) => html`<li>${warning}</li>`
)}
</ul>`
: ""}
<ul>
${this._warnings!.map((warning) => html`<li>${warning}</li>`)}
</ul>
${this.hass.localize("ui.errors.config.edit_in_yaml_supported")}
</div>
`
@@ -363,9 +359,6 @@ export abstract class HuiElementEditor<T> extends LitElement {
.yaml-editor {
padding: 8px 0px;
}
ha-code-editor {
--code-mirror-max-height: calc(100vh - 245px);
}
.error,
.warning,
.info {

View File

@@ -81,7 +81,7 @@ class LovelaceFullConfigEditor extends LitElement {
</div>
<mwc-button
raised
@click=${this._handleSave}
@click="${this._handleSave}"
.disabled=${!this._changed}
>${this.hass!.localize(
"ui.panel.lovelace.editor.raw_editor.save"
@@ -95,8 +95,8 @@ class LovelaceFullConfigEditor extends LitElement {
autofocus
.rtl=${computeRTL(this.hass)}
.hass=${this.hass}
@value-changed=${this._yamlChanged}
@editor-save=${this._handleSave}
@value-changed="${this._yamlChanged}"
@editor-save="${this._handleSave}"
>
</ha-code-editor>
</div>
@@ -112,7 +112,6 @@ class LovelaceFullConfigEditor extends LitElement {
protected updated(changedProps: PropertyValues) {
const oldLovelace = changedProps.get("lovelace") as Lovelace | undefined;
if (
!this._saving &&
oldLovelace &&
this.lovelace &&
oldLovelace.config !== this.lovelace.config &&
@@ -306,8 +305,8 @@ class LovelaceFullConfigEditor extends LitElement {
});
}
window.onbeforeunload = null;
this._changed = false;
this._saving = false;
this._changed = false;
}
private get yamlEditor(): HaCodeEditor {

View File

@@ -4,25 +4,20 @@ import { StreamLanguage } from "@codemirror/stream-parser";
import { jinja2 } from "@codemirror/legacy-modes/mode/jinja2";
import { yaml } from "@codemirror/legacy-modes/mode/yaml";
import { indentLess, indentMore } from "@codemirror/commands";
import { Compartment } from "@codemirror/state";
export { keymap, highlightActiveLine, drawSelection } from "@codemirror/view";
export { keymap } from "@codemirror/view";
export { CMEditorView as EditorView };
export { EditorState, Prec } from "@codemirror/state";
export { EditorState, Prec, tagExtension } from "@codemirror/state";
export { defaultKeymap } from "@codemirror/commands";
export { lineNumbers } from "@codemirror/gutter";
export { searchKeymap, highlightSelectionMatches } from "@codemirror/search";
export { history, historyKeymap } from "@codemirror/history";
export { rectangularSelection } from "@codemirror/rectangular-selection";
export const langs = {
jinja2: StreamLanguage.define(jinja2),
yaml: StreamLanguage.define(yaml),
};
export const langCompartment = new Compartment();
export const readonlyCompartment = new Compartment();
export const tabKeyBindings: KeyBinding[] = [
{ key: "Tab", run: indentMore },
{
@@ -32,44 +27,35 @@ export const tabKeyBindings: KeyBinding[] = [
];
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.3)" },
caretColor: "var(--secondary-text-color)",
height: "var(--code-mirror-height, auto)",
maxHeight: "var(--code-mirror-max-height, unset)",
},
"&.cm-focused": { outline: "none" },
$scroller: { outline: "none" },
"&.cm-focused .cm-cursor": {
borderLeftColor: "var(--secondary-text-color)",
},
$content: { caretColor: "var(--secondary-text-color)" },
"&.cm-focused .cm-selectionBackground, .cm-selectionBackground": {
$$focused: { outline: "none" },
"$$focused $cursor": { borderLeftColor: "#var(--secondary-text-color)" },
"$$focused $selectionBackground, $selectionBackground": {
backgroundColor: "rgba(var(--rgb-primary-color), 0.3)",
},
".cm-activeLine": {
backgroundColor: "rgba(var(--rgb-secondary-text-color), 0.1)",
},
".cm-scroller": { outline: "none" },
".cm-content": { caretColor: "var(--secondary-text-color)" },
".cm-panels": {
$panels: {
backgroundColor: "var(--primary-background-color)",
color: "var(--primary-text-color)",
},
".cm-panels.top": { borderBottom: "1px solid var(--divider-color)" },
".cm-panels.bottom": { borderTop: "1px solid var(--divider-color)" },
"$panels.top": { borderBottom: "1px solid var(--divider-color)" },
"$panels.bottom": { borderTop: "1px solid var(--divider-color)" },
".cm-panel.search input": { margin: "4px 4px 0" },
"$panel.search input": { margin: "4px 4px 0" },
".cm-button": {
$button: {
border: "1px solid var(--primary-color)",
padding: "0px 16px",
textTransform: "uppercase",
@@ -85,7 +71,7 @@ export const theme = CMEditorView.theme({
letterSpacing: "var(--mdc-typography-button-letter-spacing, 0.0892857em)",
},
".cm-textfield": {
$textfield: {
padding: "4px 0px 5px",
borderRadius: "0",
fontSize: "16px",
@@ -106,20 +92,20 @@ export const theme = CMEditorView.theme({
},
},
".cm-selectionMatch": {
$selectionMatch: {
backgroundColor: "rgba(var(--rgb-primary-color), 0.1)",
},
".cm-searchMatch": {
$searchMatch: {
backgroundColor: "rgba(var(--rgb-accent-color), .2)",
outline: "1px solid rgba(var(--rgb-accent-color), .4)",
},
".cm-searchMatch.selected": {
"$searchMatch.selected": {
backgroundColor: "rgba(var(--rgb-accent-color), .4)",
outline: "1px solid var(--accent-color)",
},
".cm-gutters": {
$gutters: {
backgroundColor:
"var(--paper-dialog-background-color, var(--primary-background-color))",
color: "var(--paper-dialog-color, var(--secondary-text-color))",
@@ -128,15 +114,15 @@ export const theme = CMEditorView.theme({
"1px solid var(--paper-input-container-color, var(--secondary-text-color))",
paddingRight: "1px",
},
"&.cm-focused cm-gutters": {
"$$focused $gutters": {
borderRight:
"2px solid var(--paper-input-container-focus-color, var(--primary-color))",
paddingRight: "0",
},
".cm-gutterElementags.lineNumber": { color: "inherit" },
"$gutterElementags.lineNumber": { color: "inherit" },
});
export const highlightStyle = HighlightStyle.define([
export const highlightStyle = HighlightStyle.define(
{ tag: tags.keyword, color: "var(--codemirror-keyword, #6262FF)" },
{
tag: [
@@ -207,5 +193,5 @@ export const highlightStyle = HighlightStyle.define([
{ 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)" },
]);
{ tag: tags.invalid, color: "var(--error-color)" }
);

View File

@@ -797,8 +797,7 @@
"edit_in_yaml_supported": "You can still edit your config in YAML.",
"key_missing": "Required key \"{key}\" is missing.",
"key_not_expected": "Key \"{key}\" is not expected or not supported by the visual editor.",
"key_wrong_type": "The provided value for \"{key}\" is not supported by the visual editor. We support ({type_correct}) but received ({type_wrong}).",
"no_template_editor_support": "Templates not supported in visual editor"
"key_wrong_type": "The provided value for \"{key}\" is not supported by the visual editor. We support ({type_correct}) but received ({type_wrong})."
}
},
"login-form": {
@@ -1233,8 +1232,8 @@
"queued": "Queue length",
"parallel": "Max number of parallel runs"
},
"edit_yaml": "Edit in YAML",
"edit_ui": "Edit in visual editor",
"edit_yaml": "Edit as YAML",
"edit_ui": "Edit with UI",
"copy_to_clipboard": "Copy to Clipboard",
"triggers": {
"name": "Trigger",
@@ -1245,7 +1244,7 @@
"duplicate": "Duplicate",
"delete": "[%key:ui::panel::mailbox::delete_button%]",
"delete_confirm": "Are you sure you want to delete this?",
"unsupported_platform": "No visual editor support for platform: {platform}",
"unsupported_platform": "No UI support for platform: {platform}",
"type_select": "Trigger type",
"type": {
"device": {
@@ -1347,7 +1346,7 @@
"duplicate": "[%key:ui::panel::config::automation::editor::triggers::duplicate%]",
"delete": "[%key:ui::panel::mailbox::delete_button%]",
"delete_confirm": "[%key:ui::panel::config::automation::editor::triggers::delete_confirm%]",
"unsupported_condition": "No visual editor support for condition: {condition}",
"unsupported_condition": "No UI support for condition: {condition}",
"type_select": "Condition type",
"type": {
"and": {
@@ -1423,7 +1422,7 @@
"duplicate": "[%key:ui::panel::config::automation::editor::triggers::duplicate%]",
"delete": "[%key:ui::panel::mailbox::delete_button%]",
"delete_confirm": "[%key:ui::panel::config::automation::editor::triggers::delete_confirm%]",
"unsupported_action": "No visual editor support for action: {action}",
"unsupported_action": "No UI support for action: {action}",
"type_select": "Action type",
"type": {
"service": {

252
yarn.lock
View File

@@ -1905,144 +1905,135 @@
resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-5.0.0.tgz#3ba791f37b90e7f6170d252b63aacfcae943c039"
integrity sha512-WmKrB/575EJCzbeSJR3YQ5sET5FaizeljLRw1382qVUeGqzuWBgIS+AF5a0FO51uQTrDpoRgvuHC2IWVsgwkkA==
"@codemirror/commands@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-0.18.0.tgz#10344d7d7a0fecad826e9853c1e6069d706298c6"
integrity sha512-4H63B4oqr8dmJ3VOKvMI7xrZIBJjAdtz3Z0V/Jt0HlIYTe76Omy4h9BS3b9EgyNaWjIO/Slz3KQPwihcC8uR5Q==
"@codemirror/commands@^0.17.0":
version "0.17.5"
resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-0.17.5.tgz#0912955a614e554e4fbcb347a785c5c981f12826"
integrity sha512-9B/Zq6mBkSdf+2xWoOufJutNRhFdsgA9f2w9hfI7ujwFqFLIj7QKuYt+W1LAcJufHYy5BdVCyjgCamx65yb4MA==
dependencies:
"@codemirror/language" "^0.18.0"
"@codemirror/matchbrackets" "^0.18.0"
"@codemirror/state" "^0.18.0"
"@codemirror/text" "^0.18.0"
"@codemirror/view" "^0.18.0"
"@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.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/gutter/-/gutter-0.18.0.tgz#b6fb340f7cc7b4ed1a67687e145489b3ed93098d"
integrity sha512-9hcKzBM5EjhWwrau5Xiv0ll/yOvkgiyLnH7DTsjFCUvuyfbS45WVEMhQ6C+HfsoRVR4TJqRVLJjaIktZqaAqnw==
"@codemirror/gutter@^0.17.0":
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.18.0"
"@codemirror/state" "^0.18.0"
"@codemirror/view" "^0.18.0"
"@codemirror/rangeset" "^0.17.0"
"@codemirror/state" "^0.17.0"
"@codemirror/view" "^0.17.0"
"@codemirror/highlight@^0.18.0", "@codemirror/highlight@^0.18.1":
version "0.18.1"
resolved "https://registry.yarnpkg.com/@codemirror/highlight/-/highlight-0.18.1.tgz#9ba1e842dd149b9985ee48cfdbeff6ef191378bb"
integrity sha512-SBbz6hS7/vUrgeiwTBByx/UXY8+Tkdyk7/CUq+XfgGUwPXpK8+llzBlQHa4mov46f/wAy1qoj0uobfgSjcvEpQ==
"@codemirror/highlight@^0.17.0":
version "0.17.3"
resolved "https://registry.yarnpkg.com/@codemirror/highlight/-/highlight-0.17.3.tgz#43f519ef93fa1c050ba2cd0631d9d855d9f3ec1e"
integrity sha512-pKuCQ/+CSbibK6ZO2E6YRowhf4LKERwCrSYmQyCw18Dgutt1D2d5t2fv0kziHYC7Jz3ZG2xnrsHABFjS57V6JA==
dependencies:
"@codemirror/language" "^0.18.0"
"@codemirror/rangeset" "^0.18.0"
"@codemirror/state" "^0.18.0"
"@codemirror/view" "^0.18.0"
"@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 "^4.0.0"
style-mod "^3.2.0"
"@codemirror/history@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/history/-/history-0.18.0.tgz#1267499e20f977b5b4179ec2cfd5013d78ab0cbc"
integrity sha512-oMpvu7c8GQnEn1nX98+WuVQuMEVxOPJFU1yrA22sWfqG7lkrJAv7p4geCWOpwQY9/LWw4sICkDbCeirre4BqBA==
"@codemirror/history@^0.17.0":
version "0.17.2"
resolved "https://registry.yarnpkg.com/@codemirror/history/-/history-0.17.2.tgz#d94273af95f7dbd8a0c41c370984e4bbf55d54e8"
integrity sha512-ML/FA6VJMMwsQrx7HFXaOAg/LqrLxUktE5pu230UOn0u5bxIPxbX0lLGs34994s9HPruqbCqIikSc+IfjLkFcA==
dependencies:
"@codemirror/state" "^0.18.0"
"@codemirror/view" "^0.18.0"
"@codemirror/state" "^0.17.0"
"@codemirror/view" "^0.17.0"
"@codemirror/language@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-0.18.0.tgz#16c3beaf372d0ecfcb76d708a8f55efccaa25563"
integrity sha512-gryu0Sej1vG3S3njwsJ+bhz9zLoJxZ2TahLlxpqOB3uqVGZrGDyE+GmZBnA6I3hwHvaO1O4WXKScVsKoW6HqFA==
"@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.18.0"
"@codemirror/text" "^0.18.0"
"@codemirror/view" "^0.18.0"
lezer "^0.13.4"
lezer-tree "^0.13.0"
"@codemirror/legacy-modes@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/legacy-modes/-/legacy-modes-0.18.0.tgz#64bb6819758a50ccf777e4d64d59dec0fac2e169"
integrity sha512-ME/FnBTRf+nriCB1Racmwhl3tSSnIOobhLyK0kOX6mogKdcdkRxSVpeo1fAC8DddsXqi/NKRn8GUr/vUiHefdg==
dependencies:
"@codemirror/stream-parser" "^0.18.0"
"@codemirror/matchbrackets@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/matchbrackets/-/matchbrackets-0.18.0.tgz#64a493090d942de19f15a9ed3cb0fa19ed55f18b"
integrity sha512-dPDopnZVkD54sSYdmQbyQbPdiuIA83p7XxX6Hp1ScEkOjukwCiFXiA/84x10FUTsQpUYp8bDzm7gwII119bGIw==
dependencies:
"@codemirror/language" "^0.18.0"
"@codemirror/state" "^0.18.0"
"@codemirror/view" "^0.18.0"
lezer-tree "^0.13.0"
"@codemirror/panel@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/panel/-/panel-0.18.0.tgz#79726a4506f45b5abbe31a6dd80f4cd29a810e49"
integrity sha512-wgKpe+QRjZwFKoMbMxqUFlV4j3dvgm8Q4v12SS0L6yxnFZkMsdbmowh0+pBa1Cp5iTSb0pdEOjAQaiWFZyIk9g==
dependencies:
"@codemirror/state" "^0.18.0"
"@codemirror/view" "^0.18.0"
"@codemirror/rangeset@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/rangeset/-/rangeset-0.18.0.tgz#8b3bec00c1cee8c3db3827a752a76819ead2dfab"
integrity sha512-+dpK3T6EFv2vkoAc3sTZld0N5SHZDjD3YowFYuMWn0Xw3t+u6k+JZlGBuaFTXdsLeF0auclsm0XhRUpMVuXhTg==
dependencies:
"@codemirror/state" "^0.18.0"
"@codemirror/rectangular-selection@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/rectangular-selection/-/rectangular-selection-0.18.0.tgz#87e1a4d319b5d55b4e97294e6df0070164e836c0"
integrity sha512-BQ4pp2zhXCVZNqct5LtLR3AOWVseENBF/3oOgBmwsCKH7c11NfTqIqgWG5EW8NLOXp8HP8cDm3np8eWez0VkGQ==
dependencies:
"@codemirror/state" "^0.18.0"
"@codemirror/text" "^0.18.0"
"@codemirror/view" "^0.18.0"
"@codemirror/search@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-0.18.0.tgz#aabb53d4678196e82309241753cd67403149e35d"
integrity sha512-gjg1yDz6gof0lhOEzjqofidd5tH2dwUwiyzym6E78n3tZBh/KygLKmw0B0T9a5s9JTVZtzup95i+TmcHrz2MQg==
dependencies:
"@codemirror/panel" "^0.18.0"
"@codemirror/rangeset" "^0.18.0"
"@codemirror/state" "^0.18.0"
"@codemirror/text" "^0.18.0"
"@codemirror/view" "^0.18.0"
crelt "^1.0.5"
"@codemirror/state@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-0.18.0.tgz#5bb5600c5bf32d4103b6576cd33bdb8cf926d602"
integrity sha512-E5Tgx/CVmQQdiIOoJ4xX4hy2RGqTjxbpzDifGn8wUu3Driq/uZ+ncr7M4ojWs1T83yYFevNBmPtT5vprD25vYA==
dependencies:
"@codemirror/text" "^0.18.0"
"@codemirror/stream-parser@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/stream-parser/-/stream-parser-0.18.0.tgz#d4eaf7043324bf9d20c518732a2ce2ff845256a5"
integrity sha512-qxtSBvn2kKMm0XlfJ0e7FbVIg10RsaNjX5n/jRWlK2Y0kHjk+Huk5vkkGR3vjwHDgRdfwQe/vqZtkPz3DFQpLQ==
dependencies:
"@codemirror/highlight" "^0.18.0"
"@codemirror/language" "^0.18.0"
"@codemirror/state" "^0.18.0"
"@codemirror/text" "^0.18.0"
"@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/text@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/text/-/text-0.18.0.tgz#a4a98862989ccef5545e730b269136d524c6a7c7"
integrity sha512-HMzHNIAbjCiCf3tEJMRg6ul01KPuXxQGNiHlHgAnqPguq/CX+L4Nvj5JlWQAI91Pupk18zhmM1c6eaazX4YeTg==
"@codemirror/view@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-0.18.0.tgz#3bbb95d71fd526460acb0de724846851d0f7137c"
integrity sha512-+ll9SL8dIAvaI4OMv4wZWRrW6AGUY45Al5L88KIp+bd1jFKYO1cu21UXAG25EvqYInZ4ctc6el0vYRP9A+VOrw==
"@codemirror/legacy-modes@^0.17.0":
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/rangeset" "^0.18.0"
"@codemirror/state" "^0.18.0"
"@codemirror/text" "^0.18.0"
style-mod "^4.0.0"
"@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/panel@^0.17.0":
version "0.17.1"
resolved "https://registry.yarnpkg.com/@codemirror/panel/-/panel-0.17.1.tgz#9dfd3b464c537caebec43fffbd8a283b0210d4c1"
integrity sha512-2it2Sk02eF4WFwPVoRLhr9lPGq9lwwwHZFyb4olqI6tOyTPwk6leZ4ntabYrhvjRc7gD6S6vM14KhOtjm4hjqg==
dependencies:
"@codemirror/state" "^0.17.0"
"@codemirror/view" "^0.17.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/search@^0.17.0":
version "0.17.1"
resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-0.17.1.tgz#eb6ae529093b09f92b1d62c4d0ad8d09c4e218f7"
integrity sha512-wY0KP9my/0uKQk9AU39EqmkY6zMVv2Erej5b1rRBksM78JZXzjNUl4gyhtx1/0om84IZ1ocmW8MRElkAY6r1rw==
dependencies:
"@codemirror/panel" "^0.17.0"
"@codemirror/rangeset" "^0.17.0"
"@codemirror/state" "^0.17.0"
"@codemirror/text" "^0.17.0"
"@codemirror/view" "^0.17.0"
crelt "^1.0.5"
"@codemirror/state@^0.17.0":
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":
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":
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":
version "0.17.12"
resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-0.17.12.tgz#3720323d32ad359372621f0b16f8e25a3d17a933"
integrity sha512-sHA57N2yfFQTgoOfF5OneHPAltupcSH4ps4cD3fj91F2EhWLqfzryImom8RxhJrwiE+3Kv3MiRtOXPthHIbswg==
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":
@@ -9450,13 +9441,6 @@ lezer@^0.13.0:
dependencies:
lezer-tree "^0.13.2"
lezer@^0.13.4:
version "0.13.4"
resolved "https://registry.yarnpkg.com/lezer/-/lezer-0.13.4.tgz#f0396a3447c7a8f40391623f3f47a4d95559c42f"
integrity sha512-cLQxUVY28VBBqKBt/R8CYeH57KQnIvscAnoahzvhlZTK8qxMkIyGExR6ecEpYYDX06ZhROZrEm1IiPvjLAsTig==
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"
@@ -12980,10 +12964,10 @@ 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@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.0.0.tgz#97e7c2d68b592975f2ca7a63d0dd6fcacfe35a01"
integrity sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==
style-mod@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-3.2.2.tgz#fc445fdd08bd5a513363079ba625f69b2618f31d"
integrity sha512-7X3zF+GjUSQ/opNrzuEOqM+lF+4SOkG5aWxrNw/5rwBrHytsH1Ly8/o9e6Wnqoul2lLT1Pmue63LgiE6mEZAGw==
subarg@^1.0.0:
version "1.0.0"