diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b84badc4..8de6d5a2 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -20,6 +20,7 @@ jobs:
integration-test:
runs-on: ubuntu-latest
+ needs: lint
services:
postgres:
image: postgres:12.4
@@ -52,6 +53,7 @@ jobs:
publish-gojek-mlp-ui:
if: ${{ startsWith(github.ref, 'refs/tags/') }}
runs-on: ubuntu-latest
+ needs: lint
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
diff --git a/.gitignore b/.gitignore
index 1e02cd62..065b683c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,8 @@
+# VSCode
+.vscode
+.bloop
+.metals
+*.code-workspace
+
# Binary directory
bin/
diff --git a/ui/package.json b/ui/package.json
index 1826a4d5..32cdc86e 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@gojek/mlp-ui",
- "version": "1.0.1",
+ "version": "1.1.0",
"private": true,
"repository": {
"type": "git",
diff --git a/ui/packages/app/package.json b/ui/packages/app/package.json
index 08ac0d98..7a5eb6f0 100644
--- a/ui/packages/app/package.json
+++ b/ui/packages/app/package.json
@@ -1,11 +1,11 @@
{
"name": "mlp-ui",
- "version": "1.0.1",
+ "version": "1.1.0",
"private": true,
"license": "Apache-2.0",
"dependencies": {
"@elastic/datemath": "5.0.3",
- "@elastic/eui": "27.0.0",
+ "@elastic/eui": "29.0.0",
"@gojek/mlp-ui": "1.0.1",
"@reach/router": "1.3.3",
"@sentry/browser": "5.15.5",
diff --git a/ui/packages/lib/package.json b/ui/packages/lib/package.json
index e3d56b20..5c60aec1 100644
--- a/ui/packages/lib/package.json
+++ b/ui/packages/lib/package.json
@@ -1,6 +1,6 @@
{
"name": "@gojek/mlp-ui",
- "version": "1.0.1",
+ "version": "1.1.0",
"license": "Apache-2.0",
"main": "dist/index.js",
"module": "dist/index.es.js",
@@ -30,14 +30,20 @@
"preunlink": "yarn unlink:react && yarn unlink:react-dom"
},
"dependencies": {
+ "classnames": "^2.2.6",
+ "lodash": "^4.17.20",
"prop-types": "15.7.2",
"proper-url-join": "2.1.1",
"query-string": "^6.13.1",
"react-fast-compare": "^3.2.0",
- "react-google-login": "5.1.19"
+ "react-google-login": "5.1.19",
+ "react-scroll": "^1.8.1",
+ "react-sticky": "^6.0.3",
+ "resize-observer-polyfill": "^1.5.1",
+ "yup": "^0.29.1"
},
"peerDependencies": {
- "@elastic/eui": "27.0.0",
+ "@elastic/eui": "29.0.0",
"@reach/router": "1.3.3",
"@sentry/browser": "5.15.5",
"moment": "^2.27.0",
diff --git a/ui/packages/lib/src/components/accordion_form/AccordionForm.js b/ui/packages/lib/src/components/accordion_form/AccordionForm.js
new file mode 100644
index 00000000..8db3e7fe
--- /dev/null
+++ b/ui/packages/lib/src/components/accordion_form/AccordionForm.js
@@ -0,0 +1,97 @@
+import React, { useRef } from "react";
+import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from "@elastic/eui";
+import { StepActions } from "../multi_steps_form/StepActions";
+import { Sticky, StickyContainer } from "react-sticky";
+import FormValidationContext from "../form/validation/context";
+import { MultiSectionFormValidationContextProvider } from "../form/validation/multi_section_provider";
+import {
+ AccordionFormScrollController,
+ AccordionFormSection,
+ AccordionFormSideNav
+} from ".";
+
+import "./AccordionForm.scss";
+import { useDimension } from "../../hooks";
+import { isEmpty } from "../../utils/object";
+
+export const isSectionInvalid = errors => !isEmpty(errors);
+
+export const AccordionForm = ({
+ name,
+ sections,
+ onCancel,
+ onSubmit,
+ submitLabel,
+ renderTitle
+}) => {
+ const lastSectionRef = useRef(null);
+ const { height: lastSectionHeight } = useDimension(lastSectionRef);
+
+ return (
+
+
+
+
+ {({ style, isSticky }) => (
+
+ {isSticky && }
+
+
+ )}
+
+
+
+ s.validationSchema)}
+ contexts={sections.map(s => s.validationContext)}>
+
+ {({ errors, onSubmit, isSubmitting }) => (
+
+
+
+ {sections.map((section, idx) => (
+
+
+
+
+
+ ))}
+
+
+
+
+
+
+
+ )}
+
+
+
+
+
+ );
+};
diff --git a/ui/packages/lib/src/components/accordion_form/AccordionForm.scss b/ui/packages/lib/src/components/accordion_form/AccordionForm.scss
new file mode 100644
index 00000000..da44fe95
--- /dev/null
+++ b/ui/packages/lib/src/components/accordion_form/AccordionForm.scss
@@ -0,0 +1,24 @@
+@import "~@elastic/eui/src/global_styling/variables/index";
+
+.accordionForm {
+ .accordionForm--sideNavContainer {
+ padding: $euiSize $euiSizeL;
+ border-right: 1px solid #d3dae6;
+ width: 216px;
+ }
+
+ .accordionForm--content {
+ > .euiFlexGroup > .euiFlexItem {
+ width: 90%;
+ }
+ }
+ .euiAccordionForm__button:hover,
+ .euiAccordion__button:focus {
+ text-decoration: none !important;
+ }
+
+ // https://github.com/elastic/eui/issues/3548
+ .euiAccordion__childWrapper {
+ transform: none;
+ }
+}
diff --git a/ui/packages/lib/src/components/accordion_form/AccordionFormScrollController.js b/ui/packages/lib/src/components/accordion_form/AccordionFormScrollController.js
new file mode 100644
index 00000000..f3d3f24b
--- /dev/null
+++ b/ui/packages/lib/src/components/accordion_form/AccordionFormScrollController.js
@@ -0,0 +1,32 @@
+import { useContext, useEffect, useState } from "react";
+import { FormValidationContext } from "../form/validation";
+import { slugify } from "@gojek/mlp-ui";
+import { scroller } from "react-scroll";
+import { animatedScrollConfig } from "./scroll";
+import { isSectionInvalid } from "./AccordionForm";
+
+export const AccordionFormScrollController = ({ sections }) => {
+ const [isFormSubmissionInProgress, setFormSubmissionInProgress] = useState(
+ false
+ );
+ const { isSubmitting, errors } = useContext(FormValidationContext);
+
+ useEffect(() => {
+ !!isSubmitting && setFormSubmissionInProgress(true);
+ }, [isSubmitting]);
+
+ useEffect(() => {
+ // after submission is completed, scroll to the first section that has errors
+ if (isFormSubmissionInProgress && !isSubmitting) {
+ const errorSectionIdx = errors.findIndex(isSectionInvalid);
+ if (errorSectionIdx !== -1)
+ scroller.scrollTo(
+ `${slugify(sections[errorSectionIdx].title)}`,
+ animatedScrollConfig
+ );
+ setFormSubmissionInProgress(false);
+ }
+ }, [errors, sections, isFormSubmissionInProgress, isSubmitting]);
+
+ return null;
+};
diff --git a/ui/packages/lib/src/components/accordion_form/AccordionFormSection.js b/ui/packages/lib/src/components/accordion_form/AccordionFormSection.js
new file mode 100644
index 00000000..7abb7b1c
--- /dev/null
+++ b/ui/packages/lib/src/components/accordion_form/AccordionFormSection.js
@@ -0,0 +1,27 @@
+import React from "react";
+import { Element } from "react-scroll";
+import { EuiAccordion } from "@elastic/eui";
+import { slugify } from "@gojek/mlp-ui";
+import { FormValidationContext } from "../form/validation";
+import { isSectionInvalid } from "./AccordionForm";
+
+export const AccordionFormSection = ({ section, errors, renderTitle }) => (
+
+
+
+ {section.children}
+
+
+
+);
diff --git a/ui/packages/lib/src/components/accordion_form/AccordionFormSideNav.js b/ui/packages/lib/src/components/accordion_form/AccordionFormSideNav.js
new file mode 100644
index 00000000..08b5dde3
--- /dev/null
+++ b/ui/packages/lib/src/components/accordion_form/AccordionFormSideNav.js
@@ -0,0 +1,41 @@
+import React from "react";
+import { slugify } from "@gojek/mlp-ui";
+import { EuiIcon, EuiSideNav } from "@elastic/eui";
+import { Link } from "react-scroll";
+import { animatedScrollConfig } from "./scroll";
+
+export const AccordionFormSideNav = ({ name, sections }) => {
+ const sideNav = [
+ {
+ name: name,
+ id: 0,
+ items: sections.map((section, idx) => ({
+ id: idx,
+ name: section.title,
+ renderItem: () =>
+ }))
+ }
+ ];
+
+ return ;
+};
+
+const AccordionFormSideNavItem = ({ section }) => (
+
+
+ {section.iconType && (
+
+ )}
+ {section.title}
+
+
+);
diff --git a/ui/packages/lib/src/components/accordion_form/index.js b/ui/packages/lib/src/components/accordion_form/index.js
new file mode 100644
index 00000000..58e543a1
--- /dev/null
+++ b/ui/packages/lib/src/components/accordion_form/index.js
@@ -0,0 +1,4 @@
+export * from "./AccordionForm";
+export * from "./AccordionFormSection";
+export * from "./AccordionFormSideNav";
+export * from "./AccordionFormScrollController";
diff --git a/ui/packages/lib/src/components/accordion_form/scroll.js b/ui/packages/lib/src/components/accordion_form/scroll.js
new file mode 100644
index 00000000..32cd9695
--- /dev/null
+++ b/ui/packages/lib/src/components/accordion_form/scroll.js
@@ -0,0 +1,6 @@
+export const animatedScrollConfig = {
+ smooth: true,
+ offset: 0,
+ delay: 50,
+ duration: 300
+};
diff --git a/ui/packages/lib/src/components/confirmation_modal/ConfirmationModal.js b/ui/packages/lib/src/components/confirmation_modal/ConfirmationModal.js
new file mode 100644
index 00000000..89299e13
--- /dev/null
+++ b/ui/packages/lib/src/components/confirmation_modal/ConfirmationModal.js
@@ -0,0 +1,36 @@
+import React, { Fragment } from "react";
+import { useToggle } from "@gojek/mlp-ui";
+import { EuiOverlayMask, EuiConfirmModal, EuiProgress } from "@elastic/eui";
+
+export const ConfirmationModal = ({
+ title,
+ content,
+ onConfirm,
+ confirmButtonText,
+ confirmButtonColor,
+ isLoading,
+ ...props
+}) => {
+ const [isModalVisible, toggleModalVisible] = useToggle();
+
+ return (
+
+ {props.children(toggleModalVisible)}
+
+ {isModalVisible && (
+
+
+ {content}
+ {isLoading && }
+
+
+ )}
+
+ );
+};
diff --git a/ui/packages/lib/src/components/confirmation_modal/index.js b/ui/packages/lib/src/components/confirmation_modal/index.js
new file mode 100644
index 00000000..d610d312
--- /dev/null
+++ b/ui/packages/lib/src/components/confirmation_modal/index.js
@@ -0,0 +1 @@
+export * from "./ConfirmationModal";
diff --git a/ui/packages/lib/src/components/expandable_container/ExpandableContainer.js b/ui/packages/lib/src/components/expandable_container/ExpandableContainer.js
new file mode 100644
index 00000000..05574419
--- /dev/null
+++ b/ui/packages/lib/src/components/expandable_container/ExpandableContainer.js
@@ -0,0 +1,59 @@
+import React, { Fragment, useRef } from "react";
+import { EuiButton, EuiFlexItem, EuiLink, EuiSpacer } from "@elastic/eui";
+import classNames from "classnames";
+import { useToggle } from "@gojek/mlp-ui";
+
+import "./ExpandableDescriptionList.scss";
+import { useDimension } from "../../hooks";
+
+export const ExpandableContainer = ({
+ maxHeight = 300,
+ isScrollable = true,
+ toggleKind = "button", // "button" | "text"
+ children,
+}) => {
+ const contentRef = useRef();
+ const [isExpanded, toggle] = useToggle();
+ const { height: contentHeight } = useDimension(contentRef);
+
+ return (
+
+
+
+
+
+ {contentHeight > maxHeight && (
+
+
+
+ {toggleKind === "button" ? (
+
+ {isExpanded ? "Collapse" : "Expand"}
+
+ ) : (
+
+ {isExpanded ? "Show less" : "Show more"}
+
+ )}
+
+
+ )}
+
+ );
+};
diff --git a/ui/packages/lib/src/components/expandable_container/ExpandableDescriptionList.scss b/ui/packages/lib/src/components/expandable_container/ExpandableDescriptionList.scss
new file mode 100644
index 00000000..b363efcc
--- /dev/null
+++ b/ui/packages/lib/src/components/expandable_container/ExpandableDescriptionList.scss
@@ -0,0 +1,23 @@
+@import "~@elastic/eui/src/global_styling/variables/animations";
+
+@mixin expandable-container-closed {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ overflow: hidden;
+}
+
+.expandableContainer__childWrapper {
+ @include expandable-container-closed;
+}
+
+.expandableContainer__childWrapper.scrollableContainer {
+ @include expandable-container-closed;
+ overflow-y: auto;
+}
+
+.expandableContainer.expandableContainer-isOpen {
+ .expandableContainer__childWrapper {
+ height: auto;
+ }
+}
diff --git a/ui/packages/lib/src/components/expandable_container/index.js b/ui/packages/lib/src/components/expandable_container/index.js
new file mode 100644
index 00000000..b1bd6afa
--- /dev/null
+++ b/ui/packages/lib/src/components/expandable_container/index.js
@@ -0,0 +1 @@
+export * from "./ExpandableContainer";
diff --git a/ui/packages/lib/src/components/form/combo_box/ComboboxSuggestItem.js b/ui/packages/lib/src/components/form/combo_box/ComboboxSuggestItem.js
new file mode 100644
index 00000000..2c328727
--- /dev/null
+++ b/ui/packages/lib/src/components/form/combo_box/ComboboxSuggestItem.js
@@ -0,0 +1,38 @@
+import React from "react";
+import { EuiFlexGroup, EuiFlexItem, EuiHighlight, EuiIcon } from "@elastic/eui";
+
+export const EuiComboboxSuggestItemRowHeight = 40;
+
+export const ComboboxSuggestItem = ({
+ option,
+ searchValue,
+ optionContentClassname,
+ prepend,
+ append
+}) => {
+ return (
+
+ {append ? (
+ {append}
+ ) : (
+ option.icon && (
+
+
+
+ )
+ )}
+
+
+
+ {option.label}
+
+
+
+ {prepend && (
+
+ {prepend}
+
+ )}
+
+ );
+};
diff --git a/ui/packages/lib/src/components/form/combo_box/EuiComboBoxSelect.js b/ui/packages/lib/src/components/form/combo_box/EuiComboBoxSelect.js
new file mode 100644
index 00000000..8b1a5ccd
--- /dev/null
+++ b/ui/packages/lib/src/components/form/combo_box/EuiComboBoxSelect.js
@@ -0,0 +1,46 @@
+import React, { useEffect, useState } from "react";
+import { EuiComboBox } from "@elastic/eui";
+import {
+ ComboboxSuggestItem,
+ EuiComboboxSuggestItemRowHeight
+} from "./ComboboxSuggestItem";
+
+export const EuiComboBoxSelect = ({ value, onChange, options, ...props }) => {
+ const [selected, setSelected] = useState([]);
+
+ useEffect(() => {
+ let selected = options.filter(suggestion => suggestion.label === value);
+
+ if (value && selected.length === 0) {
+ selected = [{ label: value }];
+ }
+ setSelected(selected);
+ }, [value, options, setSelected]);
+
+ return (
+ {
+ onChange(selected.length ? selected[0].label : undefined);
+ }}
+ isClearable={props.isClearable || true}
+ selectedOptions={selected}
+ rowHeight={EuiComboboxSuggestItemRowHeight}
+ onCreateOption={props.onCreateOption}
+ renderOption={(option, searchValue, optionContentClassname) => (
+
+ )}
+ prepend={props.prepend}
+ />
+ );
+};
diff --git a/ui/packages/lib/src/components/form/combo_box/index.js b/ui/packages/lib/src/components/form/combo_box/index.js
new file mode 100644
index 00000000..edfcde9f
--- /dev/null
+++ b/ui/packages/lib/src/components/form/combo_box/index.js
@@ -0,0 +1,2 @@
+export * from "./ComboboxSuggestItem";
+export * from "./EuiComboBoxSelect";
diff --git a/ui/packages/lib/src/components/form/context.js b/ui/packages/lib/src/components/form/context.js
new file mode 100644
index 00000000..ec5f8986
--- /dev/null
+++ b/ui/packages/lib/src/components/form/context.js
@@ -0,0 +1,32 @@
+import React, { useCallback, useState, useMemo } from "react";
+import { set } from "@gojek/mlp-ui/src/utils";
+import { StackableFunction } from "./functions/stackable_function";
+import { useOnChangeHandler } from "./hooks/useOnChangeHandler";
+
+export const FormContext = React.createContext({});
+
+export const FormContextProvider = ({ data: initData, ...props }) => {
+ const [data, setData] = useState(initData);
+
+ const handleChanges = useCallback(
+ (paths, value) => {
+ const path = paths.filter((part) => !!part).join(".");
+ setData((data) => {
+ set(data, path, value);
+ return Object.assign(Object.create(data), data);
+ });
+ },
+ [setData]
+ );
+
+ const rootHandler = useMemo(() => new StackableFunction([], handleChanges), [
+ handleChanges,
+ ]);
+ const { onChangeHandler, onChange } = useOnChangeHandler(rootHandler);
+
+ return (
+
+ {props.children}
+
+ );
+};
diff --git a/ui/packages/lib/src/components/form/described_form_group/DescribedFormGroup.js b/ui/packages/lib/src/components/form/described_form_group/DescribedFormGroup.js
new file mode 100644
index 00000000..3720da79
--- /dev/null
+++ b/ui/packages/lib/src/components/form/described_form_group/DescribedFormGroup.js
@@ -0,0 +1,17 @@
+import React from "react";
+import { EuiFlexGroup, EuiFlexItem, EuiText } from "@elastic/eui";
+import "./DescribedFormGroup.scss";
+
+export const DescribedFormGroup = ({ description, ...props }) => (
+
+ {props.children}
+
+ {description && (
+
+
+ {description}
+
+
+ )}
+
+);
diff --git a/ui/packages/lib/src/components/form/described_form_group/DescribedFormGroup.scss b/ui/packages/lib/src/components/form/described_form_group/DescribedFormGroup.scss
new file mode 100644
index 00000000..8035600f
--- /dev/null
+++ b/ui/packages/lib/src/components/form/described_form_group/DescribedFormGroup.scss
@@ -0,0 +1,4 @@
+.euiFlexItem--engineTypeDescription {
+ padding-top: 18px;
+ padding-left: 24px;
+}
diff --git a/ui/packages/lib/src/components/form/described_form_group/index.js b/ui/packages/lib/src/components/form/described_form_group/index.js
new file mode 100644
index 00000000..ebc64554
--- /dev/null
+++ b/ui/packages/lib/src/components/form/described_form_group/index.js
@@ -0,0 +1 @@
+export * from "./DescribedFormGroup";
diff --git a/ui/packages/lib/src/components/form/docker_image_combo_box/DockerRegistryPopover.js b/ui/packages/lib/src/components/form/docker_image_combo_box/DockerRegistryPopover.js
new file mode 100644
index 00000000..2ad72eaf
--- /dev/null
+++ b/ui/packages/lib/src/components/form/docker_image_combo_box/DockerRegistryPopover.js
@@ -0,0 +1,40 @@
+import React, { useState } from "react";
+import { EuiButtonEmpty, EuiContextMenu, EuiPopover } from "@elastic/eui";
+import { flattenPanelTree } from "@gojek/mlp-ui";
+
+export const DockerRegistryPopover = ({ value, registryOptions, onChange }) => {
+ const [isOpen, setOpen] = useState(false);
+
+ const panels = flattenPanelTree({
+ id: 0,
+ items: registryOptions.map(registry => ({
+ name: registry.inputDisplay,
+ value: registry.value,
+ icon: "logoDocker",
+ onClick: () => {
+ togglePopover();
+ onChange(registry.value);
+ }
+ }))
+ });
+
+ const togglePopover = () => setOpen(!isOpen);
+
+ return (
+
+ {registryOptions.find(o => o.value === value).inputDisplay}
+
+ }
+ isOpen={isOpen}
+ closePopover={togglePopover}
+ panelPaddingSize="s">
+
+
+ );
+};
diff --git a/ui/packages/lib/src/components/form/docker_image_combo_box/SelectDockerImageComboBox.js b/ui/packages/lib/src/components/form/docker_image_combo_box/SelectDockerImageComboBox.js
new file mode 100644
index 00000000..786c1e8e
--- /dev/null
+++ b/ui/packages/lib/src/components/form/docker_image_combo_box/SelectDockerImageComboBox.js
@@ -0,0 +1,56 @@
+import React from "react";
+import { DockerRegistryPopover } from "./DockerRegistryPopover";
+import "./SelectDockerImageComboBox.scss";
+import { EuiComboBoxSelect } from "../combo_box/EuiComboBoxSelect";
+
+const extractRegistry = (image, registries) => {
+ if (image) {
+ const registry = registries.find(o => image.startsWith(o.value));
+ if (registry && registry.value) {
+ image = image.substr(registry.value.length);
+ image && image.startsWith("/") && (image = image.substr(1));
+ return [registry.value, image];
+ }
+ }
+
+ return ["", image];
+};
+
+export const SelectDockerImageComboBox = ({
+ value,
+ registryOptions,
+ imageOptions,
+ onChange,
+ ...props
+}) => {
+ const [registry, image] = extractRegistry(value, registryOptions);
+
+ const onRegistryChange = value => {
+ onChange(value ? `${value}/${image}` : image);
+ };
+
+ const onImageChange = value => {
+ onChange(registry ? `${registry}/${value}` : value);
+ };
+
+ return (
+ onImageChange(value || "")}
+ onCreateOption={onImageChange}
+ prepend={
+
+ }
+ />
+ );
+};
diff --git a/ui/packages/lib/src/components/form/docker_image_combo_box/SelectDockerImageComboBox.scss b/ui/packages/lib/src/components/form/docker_image_combo_box/SelectDockerImageComboBox.scss
new file mode 100644
index 00000000..9057b59c
--- /dev/null
+++ b/ui/packages/lib/src/components/form/docker_image_combo_box/SelectDockerImageComboBox.scss
@@ -0,0 +1,5 @@
+@import "~@elastic/eui/src/global_styling/variables/index";
+
+.euiComboBox--dockerImage .euiFormControlLayout {
+ height: $euiFormControlHeight;
+}
diff --git a/ui/packages/lib/src/components/form/docker_image_combo_box/index.js b/ui/packages/lib/src/components/form/docker_image_combo_box/index.js
new file mode 100644
index 00000000..3267eb77
--- /dev/null
+++ b/ui/packages/lib/src/components/form/docker_image_combo_box/index.js
@@ -0,0 +1,2 @@
+export { DockerRegistryPopover } from "./DockerRegistryPopover";
+export * from "./SelectDockerImageComboBox";
diff --git a/ui/packages/lib/src/components/form/endpoint_combo_box/SelectEndpointComboBox.js b/ui/packages/lib/src/components/form/endpoint_combo_box/SelectEndpointComboBox.js
new file mode 100644
index 00000000..036e4b6a
--- /dev/null
+++ b/ui/packages/lib/src/components/form/endpoint_combo_box/SelectEndpointComboBox.js
@@ -0,0 +1,28 @@
+import React from "react";
+import { isValidUrl } from "../../../utils/validation";
+import { EuiComboBoxSelect } from "../combo_box/EuiComboBoxSelect";
+
+export const SelectEndpointComboBox = ({
+ value,
+ onChange,
+ options,
+ ...props
+}) => {
+ const onCreateOption = value => {
+ if (!isValidUrl(value)) {
+ return false;
+ }
+ onChange(value);
+ };
+
+ return (
+
+ );
+};
diff --git a/ui/packages/lib/src/components/form/endpoint_combo_box/index.js b/ui/packages/lib/src/components/form/endpoint_combo_box/index.js
new file mode 100644
index 00000000..6c3dd6d5
--- /dev/null
+++ b/ui/packages/lib/src/components/form/endpoint_combo_box/index.js
@@ -0,0 +1 @@
+export * from "./SelectEndpointComboBox";
diff --git a/ui/packages/lib/src/components/form/field_duration/EuiFieldDuration.js b/ui/packages/lib/src/components/form/field_duration/EuiFieldDuration.js
new file mode 100644
index 00000000..e47964be
--- /dev/null
+++ b/ui/packages/lib/src/components/form/field_duration/EuiFieldDuration.js
@@ -0,0 +1,28 @@
+import React from "react";
+import { EuiFieldNumber, EuiFormLabel } from "@elastic/eui";
+
+const durationRegex = /([0-9]+)(ms|s|m|h)$/;
+
+const parseDuration = value => {
+ if (value) {
+ let matches = `${value}`.match(durationRegex);
+ if (matches) {
+ return [parseInt(matches[1]), matches[2]];
+ }
+ }
+ return undefined;
+};
+
+export const EuiFieldDuration = props => {
+ const [value, timeUnit] = parseDuration(props.value) || [0, "ms"];
+
+ return (
+ props.onChange(`${e.target.value}${timeUnit}`)}
+ append={{timeUnit}}
+ />
+ );
+};
diff --git a/ui/packages/lib/src/components/form/field_duration/index.js b/ui/packages/lib/src/components/form/field_duration/index.js
new file mode 100644
index 00000000..9976f558
--- /dev/null
+++ b/ui/packages/lib/src/components/form/field_duration/index.js
@@ -0,0 +1 @@
+export * from "./EuiFieldDuration";
diff --git a/ui/packages/lib/src/components/form/functions/extensible_function.js b/ui/packages/lib/src/components/form/functions/extensible_function.js
new file mode 100644
index 00000000..2c4f2d10
--- /dev/null
+++ b/ui/packages/lib/src/components/form/functions/extensible_function.js
@@ -0,0 +1,6 @@
+export class ExtensibleFunction extends Function {
+ constructor(f) {
+ super();
+ return Object.setPrototypeOf(f, new.target.prototype);
+ }
+}
diff --git a/ui/packages/lib/src/components/form/functions/index.js b/ui/packages/lib/src/components/form/functions/index.js
new file mode 100644
index 00000000..899d6be7
--- /dev/null
+++ b/ui/packages/lib/src/components/form/functions/index.js
@@ -0,0 +1,2 @@
+export * from "./extensible_function";
+export * from "./stackable_function";
diff --git a/ui/packages/lib/src/components/form/functions/stackable_function.js b/ui/packages/lib/src/components/form/functions/stackable_function.js
new file mode 100644
index 00000000..c9faed58
--- /dev/null
+++ b/ui/packages/lib/src/components/form/functions/stackable_function.js
@@ -0,0 +1,15 @@
+import { ExtensibleFunction } from "./extensible_function";
+
+export class StackableFunction extends ExtensibleFunction {
+ constructor(args, apply) {
+ super(value => {
+ apply(args, value);
+ });
+ this.apply = apply;
+ this.args = args;
+ }
+
+ withArg(arg) {
+ return new StackableFunction([...this.args, arg], this.apply);
+ }
+}
diff --git a/ui/packages/lib/src/components/form/hooks/index.js b/ui/packages/lib/src/components/form/hooks/index.js
new file mode 100644
index 00000000..8efe9d4f
--- /dev/null
+++ b/ui/packages/lib/src/components/form/hooks/index.js
@@ -0,0 +1 @@
+export * from "./useOnChangeHandler";
diff --git a/ui/packages/lib/src/components/form/hooks/useOnChangeHandler.js b/ui/packages/lib/src/components/form/hooks/useOnChangeHandler.js
new file mode 100644
index 00000000..fbfceaba
--- /dev/null
+++ b/ui/packages/lib/src/components/form/hooks/useOnChangeHandler.js
@@ -0,0 +1,22 @@
+import { useCallback, useEffect, useRef } from "react";
+
+export const useOnChangeHandler = onChangeHandler => {
+ const nested = useRef({});
+
+ // reset nested handlers when the parent handler is changed
+ useEffect(() => {
+ nested.current = {};
+ }, [onChangeHandler]);
+
+ const onChange = useCallback(
+ arg => {
+ if (!nested.current[arg]) {
+ nested.current[arg] = onChangeHandler.withArg(arg);
+ }
+ return nested.current[arg];
+ },
+ [onChangeHandler]
+ );
+
+ return { onChangeHandler, onChange };
+};
diff --git a/ui/packages/lib/src/components/form/in_memory_table_form/InMemoryTableForm.js b/ui/packages/lib/src/components/form/in_memory_table_form/InMemoryTableForm.js
new file mode 100644
index 00000000..3a1f1a7b
--- /dev/null
+++ b/ui/packages/lib/src/components/form/in_memory_table_form/InMemoryTableForm.js
@@ -0,0 +1,49 @@
+import React, { useMemo } from "react";
+import {
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiFormRow,
+ EuiInMemoryTable,
+} from "@elastic/eui";
+import { get } from "@gojek/mlp-ui/src/utils";
+
+import "./InMemoryTableForm.scss";
+
+export const InMemoryTableForm = ({
+ errors = {},
+ renderErrorHeader = (key) => key,
+ ...props
+}) => {
+ const errorMessage = useMemo(() => {
+ return Object.keys(errors).flatMap((fieldName) => {
+ const fieldErrors = Object.keys(errors[fieldName]).flatMap(
+ (key) => get(errors[fieldName], key) || []
+ );
+ return (
+
+
+ {renderErrorHeader(fieldName)}:
+
+
+
+ {fieldErrors.map((error, idx) => (
+
+ {error}
+
+ ))}
+
+
+
+ );
+ });
+ }, [errors, renderErrorHeader]);
+
+ return (
+
+
+
+ );
+};
diff --git a/ui/packages/lib/src/components/form/in_memory_table_form/InMemoryTableForm.scss b/ui/packages/lib/src/components/form/in_memory_table_form/InMemoryTableForm.scss
new file mode 100644
index 00000000..95250b8e
--- /dev/null
+++ b/ui/packages/lib/src/components/form/in_memory_table_form/InMemoryTableForm.scss
@@ -0,0 +1,32 @@
+.euiBasicTable--inMemoryFormTable {
+ .euiTableCellContent {
+ display: grid;
+
+ .cell-first-column,
+ svg {
+ margin-right: inherit;
+ }
+ }
+
+ input[type="text"].inlineTableInput {
+ float: left;
+ padding: 0;
+ font-size: inherit !important;
+ line-height: inherit !important;
+ font-family: inherit !important;
+ height: inherit !important;
+ transition: inherit !important;
+ background-color: inherit !important;
+ box-shadow: none !important;
+ min-width: 90px;
+
+ &:focus {
+ background-size: 0 100%;
+ }
+ }
+
+ .euiTableRow--isInvalid {
+ border-left: 2px solid #bd271e;
+ background-color: #f8e9e98c;
+ }
+}
diff --git a/ui/packages/lib/src/components/form/in_memory_table_form/index.js b/ui/packages/lib/src/components/form/in_memory_table_form/index.js
new file mode 100644
index 00000000..401c9abd
--- /dev/null
+++ b/ui/packages/lib/src/components/form/in_memory_table_form/index.js
@@ -0,0 +1 @@
+export * from "./InMemoryTableForm";
diff --git a/ui/packages/lib/src/components/form/index.js b/ui/packages/lib/src/components/form/index.js
new file mode 100644
index 00000000..95f247ac
--- /dev/null
+++ b/ui/packages/lib/src/components/form/index.js
@@ -0,0 +1,11 @@
+export * from "./combo_box";
+export * from "./described_form_group";
+export * from "./docker_image_combo_box";
+export * from "./endpoint_combo_box";
+export * from "./field_duration";
+export * from "./functions";
+export * from "./hooks";
+export * from "./in_memory_table_form";
+export * from "./label_with_tooltip";
+export * from "./validation";
+export { FormContext, FormContextProvider } from "./context";
diff --git a/ui/packages/lib/src/components/form/label_with_tooltip/FormLabelWithToolTip.js b/ui/packages/lib/src/components/form/label_with_tooltip/FormLabelWithToolTip.js
new file mode 100644
index 00000000..9a5b0df5
--- /dev/null
+++ b/ui/packages/lib/src/components/form/label_with_tooltip/FormLabelWithToolTip.js
@@ -0,0 +1,16 @@
+import React from "react";
+import { EuiIcon, EuiToolTip } from "@elastic/eui";
+
+export const FormLabelWithToolTip = ({ label, content, size = "s" }) => (
+
+
+ {label}
+
+
+
+);
diff --git a/ui/packages/lib/src/components/form/label_with_tooltip/index.js b/ui/packages/lib/src/components/form/label_with_tooltip/index.js
new file mode 100644
index 00000000..f0cad42b
--- /dev/null
+++ b/ui/packages/lib/src/components/form/label_with_tooltip/index.js
@@ -0,0 +1 @@
+export * from "./FormLabelWithToolTip";
diff --git a/ui/packages/lib/src/components/form/validation/context.js b/ui/packages/lib/src/components/form/validation/context.js
new file mode 100644
index 00000000..850074bc
--- /dev/null
+++ b/ui/packages/lib/src/components/form/validation/context.js
@@ -0,0 +1,5 @@
+import React from "react";
+
+const FormValidationContext = React.createContext({});
+
+export default FormValidationContext;
diff --git a/ui/packages/lib/src/components/form/validation/errors.js b/ui/packages/lib/src/components/form/validation/errors.js
new file mode 100644
index 00000000..78ecc36f
--- /dev/null
+++ b/ui/packages/lib/src/components/form/validation/errors.js
@@ -0,0 +1,13 @@
+import { get, normalizePath, set } from "@gojek/mlp-ui/src/utils";
+
+export const extractErrors = (validationError) => {
+ let errors = {};
+ if (validationError.inner) {
+ for (let err of validationError.inner) {
+ const path = normalizePath(err.path);
+ const fieldsErrors = get(errors, path) || [];
+ set(errors, path, [...fieldsErrors, err.message]);
+ }
+ }
+ return errors;
+};
diff --git a/ui/packages/lib/src/components/form/validation/index.js b/ui/packages/lib/src/components/form/validation/index.js
new file mode 100644
index 00000000..8d43f68e
--- /dev/null
+++ b/ui/packages/lib/src/components/form/validation/index.js
@@ -0,0 +1,3 @@
+export { default as FormValidationContext } from "./context";
+export { MultiSectionFormValidationContextProvider } from "./multi_section_provider";
+export { FormValidationContextProvider } from "./provider";
diff --git a/ui/packages/lib/src/components/form/validation/multi_section_provider.js b/ui/packages/lib/src/components/form/validation/multi_section_provider.js
new file mode 100644
index 00000000..af0e9beb
--- /dev/null
+++ b/ui/packages/lib/src/components/form/validation/multi_section_provider.js
@@ -0,0 +1,84 @@
+import React, { useCallback, useContext, useEffect, useState } from "react";
+import { FormContext } from "../context";
+import FormValidationContext from "./context";
+import { extractErrors } from "./errors";
+import zip from "lodash/zip";
+
+export const MultiSectionFormValidationContextProvider = ({
+ schemas,
+ contexts,
+ onSubmit,
+ children
+}) => {
+ const { data: formData } = useContext(FormContext);
+
+ // identifies if user tried to submit this form
+ const [isTouched, setIsTouched] = useState(false);
+
+ // identifies if the form was validated
+ const [isValidated, setIsValidated] = useState(false);
+
+ // identifies if the form is in submission state
+ const [isSubmitting, setIsSubmitting] = useState(false);
+ const [errors, setErrors] = useState([]);
+
+ const isValid = errors =>
+ errors.reduce(
+ (isValid, errors) => isValid && !Object.keys(errors).length,
+ true
+ );
+
+ const onStartSubmitting = event => {
+ event && event.preventDefault();
+ setIsTouched(true);
+ setIsSubmitting(true);
+ };
+
+ const onFinishSubmitting = useCallback(() => {
+ setIsTouched(false);
+ setIsValidated(false);
+ setIsSubmitting(false);
+ onSubmit();
+ }, [onSubmit]);
+
+ useEffect(() => {
+ if (isTouched) {
+ if (schemas) {
+ Promise.all(
+ zip(schemas, contexts).map(([schema, ctx]) => {
+ return !!schema
+ ? new Promise((resolve, reject) => {
+ schema
+ .validate(formData, {
+ abortEarly: false,
+ context: ctx
+ })
+ .then(
+ () => resolve({}),
+ err => resolve(extractErrors(err))
+ );
+ })
+ : Promise.resolve({});
+ })
+ )
+ .then(setErrors)
+ .then(() => setIsValidated(true));
+ } else {
+ setIsValidated(true);
+ }
+ }
+ }, [isTouched, schemas, contexts, formData]);
+
+ useEffect(() => {
+ if (isSubmitting && isValidated) {
+ isValid(errors) ? onFinishSubmitting() : setIsSubmitting(false);
+ }
+ }, [isSubmitting, isValidated, errors, onFinishSubmitting]);
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/ui/packages/lib/src/components/form/validation/provider.js b/ui/packages/lib/src/components/form/validation/provider.js
new file mode 100644
index 00000000..c90d24a5
--- /dev/null
+++ b/ui/packages/lib/src/components/form/validation/provider.js
@@ -0,0 +1,24 @@
+import React from "react";
+import FormValidationContext from "./context";
+import { MultiSectionFormValidationContextProvider } from "./multi_section_provider";
+
+export const FormValidationContextProvider = ({
+ schema,
+ context,
+ onSubmit,
+ children
+}) => (
+
+
+ {({ onSubmit, isSubmitting, errors }) => (
+
+ {children}
+
+ )}
+
+
+);
diff --git a/ui/packages/lib/src/components/horizontal_description_list/HorizontalDescriptionList.js b/ui/packages/lib/src/components/horizontal_description_list/HorizontalDescriptionList.js
new file mode 100644
index 00000000..b1dc9ef9
--- /dev/null
+++ b/ui/packages/lib/src/components/horizontal_description_list/HorizontalDescriptionList.js
@@ -0,0 +1,24 @@
+import { EuiDescriptionList, EuiFlexGroup, EuiFlexItem } from "@elastic/eui";
+import React from "react";
+
+export const HorizontalDescriptionList = ({
+ listItems,
+ titleProps,
+ descriptionProps,
+ ...props
+}) => (
+
+ {listItems.map((item, idx) => (
+
+
+
+ ))}
+
+);
diff --git a/ui/packages/lib/src/components/horizontal_description_list/index.js b/ui/packages/lib/src/components/horizontal_description_list/index.js
new file mode 100644
index 00000000..11acb7c4
--- /dev/null
+++ b/ui/packages/lib/src/components/horizontal_description_list/index.js
@@ -0,0 +1 @@
+export * from "./HorizontalDescriptionList";
diff --git a/ui/packages/lib/src/components/index.js b/ui/packages/lib/src/components/index.js
index 30b2e96a..aa3c92b1 100644
--- a/ui/packages/lib/src/components/index.js
+++ b/ui/packages/lib/src/components/index.js
@@ -1,6 +1,14 @@
+export * from "./accordion_form";
export * from "./breadcrumbs";
+export * from "./confirmation_modal";
+export * from "./expandable_container";
+export * from "./form";
export * from "./header";
+export * from "./horizontal_description_list";
+export * from "./multi_steps_form";
export * from "./nav_drawer";
+export * from "./overlay_mask";
+export * from "./page_navigation";
export * from "./projects_dropdown";
export * from "./DateFromNow";
diff --git a/ui/packages/lib/src/components/multi_steps_form/StepActions.js b/ui/packages/lib/src/components/multi_steps_form/StepActions.js
new file mode 100644
index 00000000..0d9e775c
--- /dev/null
+++ b/ui/packages/lib/src/components/multi_steps_form/StepActions.js
@@ -0,0 +1,43 @@
+import React from "react";
+import {
+ EuiButton,
+ EuiButtonEmpty,
+ EuiFlexGroup,
+ EuiFlexItem
+} from "@elastic/eui";
+
+export const StepActions = ({
+ currentStep = 0,
+ onCancel,
+ onPrevious,
+ onSubmit,
+ submitLabel,
+ isSubmitting
+}) => {
+ return (
+
+
+ {currentStep === 0 ? (
+
+ Cancel
+
+ ) : (
+
+ Previous
+
+ )}
+
+
+
+
+ {submitLabel}
+
+
+
+ );
+};
diff --git a/ui/packages/lib/src/components/multi_steps_form/StepContent.js b/ui/packages/lib/src/components/multi_steps_form/StepContent.js
new file mode 100644
index 00000000..b2209487
--- /dev/null
+++ b/ui/packages/lib/src/components/multi_steps_form/StepContent.js
@@ -0,0 +1,10 @@
+import { EuiFlexGroup, EuiFlexItem } from "@elastic/eui";
+import React from "react";
+
+export const StepContent = ({ children, width = "75%" }) => (
+
+
+ {children}
+
+
+);
diff --git a/ui/packages/lib/src/components/multi_steps_form/StepsWizardHorizontal.js b/ui/packages/lib/src/components/multi_steps_form/StepsWizardHorizontal.js
new file mode 100644
index 00000000..a68b56ea
--- /dev/null
+++ b/ui/packages/lib/src/components/multi_steps_form/StepsWizardHorizontal.js
@@ -0,0 +1,71 @@
+import React, { useState } from "react";
+import {
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiSpacer,
+ EuiStepsHorizontal
+} from "@elastic/eui";
+import { StepContent } from "./StepContent";
+import { StepActions } from "./StepActions";
+import FormValidationContext from "../form/validation/context";
+import { FormValidationContextProvider } from "../form/validation/provider";
+
+export const StepsWizardHorizontal = ({
+ steps,
+ onCancel,
+ onSubmit,
+ submitLabel = "Done"
+}) => {
+ const [currentStep, setCurrentStep] = useState(0);
+ const isLastStep = currentStep === steps.length - 1;
+
+ const onPrevious = () => setCurrentStep(step => step - 1);
+ const onNext = () => setCurrentStep(step => step + 1);
+
+ return (
+
+
+
+ ({
+ title: step.title,
+ isSelected: idx === currentStep,
+ isComplete: idx < currentStep,
+ onClick: () => {
+ idx < currentStep && setCurrentStep(idx);
+ }
+ }))}
+ />
+
+
+
+
+
+ {steps[currentStep].children}
+
+
+
+
+
+
+
+ {({ onSubmit, isSubmitting }) => (
+
+ )}
+
+
+
+
+
+ );
+};
diff --git a/ui/packages/lib/src/components/multi_steps_form/index.js b/ui/packages/lib/src/components/multi_steps_form/index.js
new file mode 100644
index 00000000..8574c602
--- /dev/null
+++ b/ui/packages/lib/src/components/multi_steps_form/index.js
@@ -0,0 +1,3 @@
+export * from "./StepActions";
+export * from "./StepContent";
+export * from "./StepsWizardHorizontal";
diff --git a/ui/packages/lib/src/components/overlay_mask/OverlayMask.js b/ui/packages/lib/src/components/overlay_mask/OverlayMask.js
new file mode 100644
index 00000000..75e08d64
--- /dev/null
+++ b/ui/packages/lib/src/components/overlay_mask/OverlayMask.js
@@ -0,0 +1,16 @@
+import React from "react";
+
+import "./OverlayMask.scss";
+import { useDimension } from "../../hooks";
+
+export const OverlayMask = ({ parentRef, opacity = 0.5, children }) => {
+ const { width, height } = useDimension(parentRef);
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/ui/packages/lib/src/components/overlay_mask/OverlayMask.scss b/ui/packages/lib/src/components/overlay_mask/OverlayMask.scss
new file mode 100644
index 00000000..88ae923a
--- /dev/null
+++ b/ui/packages/lib/src/components/overlay_mask/OverlayMask.scss
@@ -0,0 +1,13 @@
+.overlayMask {
+ position: absolute;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ z-index: 999;
+}
diff --git a/ui/packages/lib/src/components/overlay_mask/index.js b/ui/packages/lib/src/components/overlay_mask/index.js
new file mode 100644
index 00000000..5c8611b6
--- /dev/null
+++ b/ui/packages/lib/src/components/overlay_mask/index.js
@@ -0,0 +1 @@
+export * from "./OverlayMask";
diff --git a/ui/packages/lib/src/components/page_navigation/PageNavigation.js b/ui/packages/lib/src/components/page_navigation/PageNavigation.js
new file mode 100644
index 00000000..3e421f4c
--- /dev/null
+++ b/ui/packages/lib/src/components/page_navigation/PageNavigation.js
@@ -0,0 +1,94 @@
+import React, { useState } from "react";
+import {
+ EuiContextMenuItem,
+ EuiContextMenuPanel,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiIcon,
+ EuiPopover,
+ EuiTab,
+ EuiTabs
+} from "@elastic/eui";
+
+import "./PageNavigation.scss";
+
+export const PageNavigation = ({
+ tabs,
+ actions,
+ selectedTab = "",
+ ...props
+}) => (
+
+
+
+ {tabs.map((tab, index) => (
+ props.navigate(`./${tab.id}`) })}
+ isSelected={selectedTab.startsWith(tab.id)}
+ disabled={tab.disabled}
+ key={index}>
+ {tab.name}
+
+ ))}
+
+
+ {actions && actions.length && (
+
+
+
+ )}
+
+);
+
+const MoreActionsButton = ({ actions }) => {
+ const [isPopoverOpen, setPopover] = useState(false);
+ const togglePopover = () => setPopover(isPopoverOpen => !isPopoverOpen);
+
+ const items = actions
+ .filter(item => !item.hidden)
+ .map((item, idx) => (
+ {
+ togglePopover();
+ item.onClick();
+ }}
+ disabled={item.disabled}
+ className={item.color ? `euiTextColor--${item.color}` : ""}>
+ {item.name}
+
+ ));
+
+ const button = (
+
+
+
+ More Actions
+
+
+
+
+ );
+
+ return (
+
+
+
+ );
+};
diff --git a/ui/packages/lib/src/components/page_navigation/PageNavigation.scss b/ui/packages/lib/src/components/page_navigation/PageNavigation.scss
new file mode 100644
index 00000000..4faeadbd
--- /dev/null
+++ b/ui/packages/lib/src/components/page_navigation/PageNavigation.scss
@@ -0,0 +1,6 @@
+@import "~@elastic/eui/src/global_styling/variables/index";
+@import "~@elastic/eui/src/components/context_menu/context_menu";
+
+.euiContextPanel--moreActions {
+ min-width: $euiContextMenuWidth;
+}
diff --git a/ui/packages/lib/src/components/page_navigation/index.js b/ui/packages/lib/src/components/page_navigation/index.js
new file mode 100644
index 00000000..8e471cfc
--- /dev/null
+++ b/ui/packages/lib/src/components/page_navigation/index.js
@@ -0,0 +1 @@
+export * from "./PageNavigation";
diff --git a/ui/packages/lib/src/hooks/index.js b/ui/packages/lib/src/hooks/index.js
index ff6c5161..f5114aab 100644
--- a/ui/packages/lib/src/hooks/index.js
+++ b/ui/packages/lib/src/hooks/index.js
@@ -1,3 +1,4 @@
export { useApi } from "./useApi";
+export { useDimension } from "./useDimension";
export { useMlpApi } from "./useMlpApi";
export { useToggle } from "./useToggle";
diff --git a/ui/packages/lib/src/hooks/useDimension.js b/ui/packages/lib/src/hooks/useDimension.js
new file mode 100644
index 00000000..98b3c73d
--- /dev/null
+++ b/ui/packages/lib/src/hooks/useDimension.js
@@ -0,0 +1,23 @@
+import { useRef, useState, useEffect } from "react";
+import ResizeObserver from "resize-observer-polyfill";
+
+const initialState = { width: 0, height: 0 };
+
+export const useDimension = (ref) => {
+ const [dimensions, setDimensions] = useState(initialState);
+ const resizeObserverRef = useRef(null);
+
+ useEffect(() => {
+ resizeObserverRef.current = new ResizeObserver((entries = []) => {
+ entries.forEach((entry) => {
+ const { width, height } = entry.contentRect;
+ setDimensions({ width, height });
+ });
+ });
+ if (ref.current) resizeObserverRef.current.observe(ref.current);
+ return () => {
+ if (resizeObserverRef.current) resizeObserverRef.current.disconnect();
+ };
+ }, [ref]);
+ return dimensions;
+};
diff --git a/ui/packages/lib/src/utils/index.js b/ui/packages/lib/src/utils/index.js
index 49b2eb36..7fe81aee 100644
--- a/ui/packages/lib/src/utils/index.js
+++ b/ui/packages/lib/src/utils/index.js
@@ -1,3 +1,5 @@
export { get } from "./get";
export { flattenPanelTree } from "./flattenPanelTree";
+export { normalizePath } from "./normalizePath";
+export { set } from "./set";
export { slugify } from "./slugify";
diff --git a/ui/packages/lib/src/utils/normalizePath.js b/ui/packages/lib/src/utils/normalizePath.js
new file mode 100644
index 00000000..c7cca942
--- /dev/null
+++ b/ui/packages/lib/src/utils/normalizePath.js
@@ -0,0 +1 @@
+export const normalizePath = (key) => key.replace(/\[([^}\]]+)]/g, ".$1");
diff --git a/ui/packages/lib/src/utils/object.js b/ui/packages/lib/src/utils/object.js
new file mode 100644
index 00000000..696a64fc
--- /dev/null
+++ b/ui/packages/lib/src/utils/object.js
@@ -0,0 +1 @@
+export const isEmpty = obj => !obj || !Object.keys(obj).length;
diff --git a/ui/packages/lib/src/utils/set.js b/ui/packages/lib/src/utils/set.js
new file mode 100644
index 00000000..86714747
--- /dev/null
+++ b/ui/packages/lib/src/utils/set.js
@@ -0,0 +1,17 @@
+/*eslint no-sequences: 0*/
+export const set = (obj, key, value) => {
+ let props = key.split("."),
+ arrIndex = -1;
+ props.reduce(
+ (o, d, i) => (
+ (arrIndex = d.indexOf("[") > -1 && d[d.indexOf("[") + 1]),
+ arrIndex && (d = d.slice(0, d.indexOf("["))),
+ i === props.length - 1
+ ? (o[d] = value)
+ : ((o[d] = o[d] || {}),
+ arrIndex && (Array.isArray(o[d]) || (o[d] = [o[d]])),
+ (arrIndex && o[d][arrIndex]) || o[d])
+ ),
+ obj
+ );
+};
diff --git a/ui/packages/lib/src/utils/validation.js b/ui/packages/lib/src/utils/validation.js
new file mode 100644
index 00000000..4250ff2a
--- /dev/null
+++ b/ui/packages/lib/src/utils/validation.js
@@ -0,0 +1,5 @@
+const urlRegex = /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/;
+
+export const isValidUrl = value => {
+ return value.match(urlRegex) !== null;
+};
diff --git a/ui/yarn.lock b/ui/yarn.lock
index 7c950629..06d9b251 100644
--- a/ui/yarn.lock
+++ b/ui/yarn.lock
@@ -1114,6 +1114,13 @@
dependencies:
regenerator-runtime "^0.13.4"
+"@babel/runtime@^7.10.5", "@babel/runtime@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d"
+ integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
"@babel/template@^7.10.4", "@babel/template@^7.4.0", "@babel/template@^7.8.6":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
@@ -1172,38 +1179,45 @@
dependencies:
tslib "^1.9.3"
-"@elastic/eui@27.0.0":
- version "27.0.0"
- resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-27.0.0.tgz#5d2f8fce2816376461b69e8b3c16233c4dcbf304"
- integrity sha512-Fd03m3YLabBRdfgMz22xQ2wrm5o591yKoNxsaMhbjJPFwE/dT4JxSxvXVscEZTx7ItR7zJ1vmw0dcEnHXPibPg==
+"@elastic/eui@29.0.0":
+ version "29.0.0"
+ resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-29.0.0.tgz#1c8d822c62ad5e29298a3a36f5b02fd9b32a5550"
+ integrity sha512-YsDjtN/nRA4vvWukg5FDN4iPQgHUVxDwn/JZ1mArCeMe34JwzYJlEkk6Z/+iNbJOZQNHngmV8I2TStcP8k82gg==
dependencies:
"@types/chroma-js" "^2.0.0"
- "@types/enzyme" "^3.1.13"
- "@types/lodash" "^4.14.116"
- "@types/numeral" "^0.0.25"
- "@types/react-beautiful-dnd" "^12.1.2"
- "@types/react-input-autosize" "^2.0.2"
+ "@types/lodash" "^4.14.160"
+ "@types/numeral" "^0.0.28"
+ "@types/react-beautiful-dnd" "^13.0.0"
+ "@types/react-input-autosize" "^2.2.0"
"@types/react-virtualized-auto-sizer" "^1.0.0"
- "@types/react-window" "^1.8.1"
- chroma-js "^2.0.4"
- classnames "^2.2.5"
+ "@types/react-window" "^1.8.2"
+ "@types/vfile-message" "^2.0.0"
+ chroma-js "^2.1.0"
+ classnames "^2.2.6"
highlight.js "^9.12.0"
- html "^1.0.0"
- keymirror "^0.1.1"
- lodash "^4.17.11"
+ lodash "^4.17.20"
numeral "^2.0.6"
prop-types "^15.6.0"
react-ace "^7.0.5"
react-beautiful-dnd "^13.0.0"
- react-focus-lock "^1.17.7"
+ react-dropzone "^10.2.1"
+ react-focus-on "^3.5.0"
react-input-autosize "^2.2.2"
react-is "~16.3.0"
react-virtualized-auto-sizer "^1.0.2"
react-window "^1.8.5"
- resize-observer-polyfill "^1.5.0"
+ rehype-raw "^4.0.1"
+ rehype-react "^6.0.0"
+ rehype-stringify "^6.0.1"
+ remark-emoji "^2.1.0"
+ remark-highlight.js "^5.2.0"
+ remark-parse "^7.0.2"
+ remark-rehype "^7.0.0"
tabbable "^3.0.0"
text-diff "^1.0.1"
- uuid "^3.1.0"
+ unified "^8.4.2"
+ uuid "^8.3.0"
+ vfile "^4.2.0"
"@hapi/address@2.x.x":
version "2.1.4"
@@ -1425,6 +1439,13 @@
"@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^13.0.0"
+"@mapbox/hast-util-table-cell-style@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.1.3.tgz#5b7166ae01297d72216932b245e4b2f0b642dca6"
+ integrity sha512-QsEsh5YaDvHoMQ2YHdvZy2iDnU3GgKVBTcHf6cILyoWDZtPSdlG444pL/ioPYO/GpXSfODBb9sefEetfC4v9oA==
+ dependencies:
+ unist-util-visit "^1.3.0"
+
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
@@ -1636,13 +1657,6 @@
dependencies:
"@babel/types" "^7.3.0"
-"@types/cheerio@*":
- version "0.22.21"
- resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.21.tgz#5e37887de309ba11b2e19a6e14cad7874b31a8a3"
- integrity sha512-aGI3DfswwqgKPiEOTaiHV2ZPC9KEhprpgEbJnv0fZl3SGX0cGgEva1126dGrMC6AJM6v/aihlUgJn9M5DbDZ/Q==
- dependencies:
- "@types/node" "*"
-
"@types/chroma-js@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@types/chroma-js/-/chroma-js-2.0.0.tgz#b0fc98c8625d963f14e8138e0a7961103303ab22"
@@ -1653,14 +1667,6 @@
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
-"@types/enzyme@^3.1.13":
- version "3.10.5"
- resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.5.tgz#fe7eeba3550369eed20e7fb565bfb74eec44f1f0"
- integrity sha512-R+phe509UuUYy9Tk0YlSbipRpfVtIzb/9BHn5pTEtjJTF5LXvUjrIQcZvNyANNEyFrd2YGs196PniNT1fgvOQA==
- dependencies:
- "@types/cheerio" "*"
- "@types/react" "*"
-
"@types/eslint-visitor-keys@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
@@ -1704,10 +1710,17 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==
-"@types/lodash@^4.14.116":
- version "4.14.157"
- resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.157.tgz#fdac1c52448861dfde1a2e1515dbc46e54926dc8"
- integrity sha512-Ft5BNFmv2pHDgxV5JDsndOWTRJ+56zte0ZpYLowp03tW+K+t8u8YMOzAnpuqPgzX6WO1XpDIUm7u04M8vdDiVQ==
+"@types/lodash@^4.14.160":
+ version "4.14.168"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008"
+ integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==
+
+"@types/mdast@^3.0.0":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
+ integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==
+ dependencies:
+ "@types/unist" "*"
"@types/minimatch@*":
version "3.0.3"
@@ -1719,10 +1732,10 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.22.tgz#23ea4d88189cec7d58f9e6b66f786b215eb61bdc"
integrity sha512-emeGcJvdiZ4Z3ohbmw93E/64jRzUHAItSHt8nF7M4TGgQTiWqFVGB8KNpLGFmUHmHLvjvBgFwVlqNcq+VuGv9g==
-"@types/numeral@^0.0.25":
- version "0.0.25"
- resolved "https://registry.yarnpkg.com/@types/numeral/-/numeral-0.0.25.tgz#b6f55062827a4787fe4ab151cf3412a468e65271"
- integrity sha512-ShHzHkYD+Ldw3eyttptCpUhF1/mkInWwasQkCNXZHOsJMJ/UMa8wXrxSrTJaVk0r4pLK/VnESVM0wFsfQzNEKQ==
+"@types/numeral@^0.0.28":
+ version "0.0.28"
+ resolved "https://registry.yarnpkg.com/@types/numeral/-/numeral-0.0.28.tgz#e43928f0bda10b169b6f7ecf99e3ddf836b8ebe4"
+ integrity sha512-Sjsy10w6XFHDktJJdXzBJmoondAKW+LcGpRFH+9+zXEDj0cOH8BxJuZA9vUDSMAzU1YRJlsPKmZEEiTYDlICLw==
"@types/parse-json@^4.0.0":
version "4.0.0"
@@ -1739,17 +1752,17 @@
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
-"@types/react-beautiful-dnd@^12.1.2":
- version "12.1.3"
- resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-12.1.3.tgz#4ee393e0342b3b73b5ab6221e7d75cf1abb7ad10"
- integrity sha512-QPPBg4kfodlDjx/BIar/mMcdynzZEqCsty+g3nBMF1KZKCepM0/QnqNaEmFj+129dgFGQBabF4qQHEYq5Y8mTQ==
+"@types/react-beautiful-dnd@^13.0.0":
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz#e60d3d965312fcf1516894af92dc3e9249587db4"
+ integrity sha512-by80tJ8aTTDXT256Gl+RfLRtFjYbUWOnZuEigJgNsJrSEGxvFe5eY6k3g4VIvf0M/6+xoLgfYWoWonlOo6Wqdg==
dependencies:
"@types/react" "*"
-"@types/react-input-autosize@^2.0.2":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@types/react-input-autosize/-/react-input-autosize-2.0.2.tgz#6ccdfb100c21b6096c1a04c3c3fac196b0ce61c1"
- integrity sha512-QzewaD5kog7c6w5e3dretb+50oM8RDdDvVumQKCtPjI6VHyR8lA/HxCiTrv5l9Vgbi4NCitYuix/NorOevlrng==
+"@types/react-input-autosize@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@types/react-input-autosize/-/react-input-autosize-2.2.0.tgz#d62b07567088e547500f4693ae25dce0639c1b4e"
+ integrity sha512-8NO64XLmdRKUHeteXnweVnXuuSQr5HMSa4vRyNBUKOeZlimvgHPMtRchFHVHO9k7VpDoufCFYMJ6XHJ44qMTBQ==
dependencies:
"@types/react" "*"
@@ -1760,7 +1773,7 @@
dependencies:
"@types/react" "*"
-"@types/react-window@^1.8.1":
+"@types/react-window@^1.8.2":
version "1.8.2"
resolved "https://registry.yarnpkg.com/@types/react-window/-/react-window-1.8.2.tgz#a5a6b2762ce73ffaab7911ee1397cf645f2459fe"
integrity sha512-gP1xam68Wc4ZTAee++zx6pTdDAH08rAkQrWm4B4F/y6hhmlT9Mgx2q8lTCXnrPHXsr15XjRN9+K2DLKcz44qEQ==
@@ -1787,6 +1800,18 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+ integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+
+"@types/vfile-message@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5"
+ integrity sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==
+ dependencies:
+ vfile-message "*"
+
"@types/yargs-parser@*":
version "15.0.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
@@ -2206,6 +2231,13 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+aria-hidden@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.1.2.tgz#5354315a29bffdaced3993fccd826817dc8c5272"
+ integrity sha512-WAMH9q3vRimVqP+B0q2eDvx7IPDoY17A2fWwj5atTA/zTYJCNcS6HJ5YErZ5FO3PUHhrV0y0yR1NA0dRNm913A==
+ dependencies:
+ tslib "^1.0.0"
+
aria-query@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
@@ -2386,6 +2418,11 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+attr-accept@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b"
+ integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==
+
autoprefixer@^9.6.1:
version "9.8.5"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.5.tgz#2c225de229ddafe1d1424c02791d0c3e10ccccaa"
@@ -2571,6 +2608,11 @@ babylon@^6.18.0:
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+bail@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
+ integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
+
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -3020,6 +3062,11 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+ccount@^1.0.0, ccount@^1.0.3:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
+ integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==
+
chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
@@ -3048,6 +3095,26 @@ chalk@^4.0.0, chalk@^4.1.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+character-entities-html4@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
+ integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==
+
+character-entities-legacy@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
+ integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
+
+character-entities@^1.0.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
+ integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
+
+character-reference-invalid@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
+ integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
+
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
@@ -3092,7 +3159,7 @@ chownr@^1.1.1, chownr@^1.1.2:
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
-chroma-js@^2.0.4:
+chroma-js@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.1.0.tgz#c0be48a21fe797ef8965608c1c4f911ef2da49d5"
integrity sha512-uiRdh4ZZy+UTPSrAdp8hqEdVb1EllLtTHOt5TMaOjJUvi+O54/83Fc5K2ld1P+TJX+dw5B+8/sCgzI6eaur/lg==
@@ -3129,7 +3196,7 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
-classnames@^2.2.5:
+classnames@^2.2.6:
version "2.2.6"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
@@ -3228,6 +3295,11 @@ code-point-at@^1.0.0:
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+collapse-white-space@^1.0.2:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287"
+ integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==
+
collection-visit@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
@@ -3288,6 +3360,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
+comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
+ integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
+
commander@^2.11.0, commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -3355,7 +3432,7 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-concat-stream@^1.4.7, concat-stream@^1.5.0:
+concat-stream@^1.5.0:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
@@ -4007,6 +4084,11 @@ detect-newline@^2.1.0:
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+detect-node-es@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.0.0.tgz#c0318b9e539a5256ca780dd9575c9345af05b8ed"
+ integrity sha512-S4AHriUkTX9FoFvL4G8hXDcx6t3gp2HpfCza3Q0v6S78gul2hKWifLQbeW+ZF89+hSm2ZIc/uF3J97ZgytgTRg==
+
detect-node@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
@@ -4240,6 +4322,11 @@ emojis-list@^3.0.0:
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+emoticon@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f"
+ integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==
+
encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
@@ -4755,7 +4842,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
assign-symbols "^1.0.0"
is-extendable "^1.0.1"
-extend@~3.0.2:
+extend@^3.0.0, extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
@@ -4820,6 +4907,13 @@ fast-levenshtein@~2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+fault@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13"
+ integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==
+ dependencies:
+ format "^0.2.0"
+
faye-websocket@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
@@ -4868,6 +4962,13 @@ file-loader@4.3.0:
loader-utils "^1.2.3"
schema-utils "^2.5.0"
+file-selector@^0.1.12:
+ version "0.1.19"
+ resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.1.19.tgz#8ecc9d069a6f544f2e4a096b64a8052e70ec8abf"
+ integrity sha512-kCWw3+Aai8Uox+5tHCNgMFaUdgidxvMnLWO6fM5sZ0hA2wlHP5/DHGF0ECe84BiB95qdJbKNEJhWKVDvMN+JDQ==
+ dependencies:
+ tslib "^2.0.1"
+
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
@@ -4999,10 +5100,17 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
-focus-lock@^0.6.3:
- version "0.6.8"
- resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.8.tgz#61985fadfa92f02f2ee1d90bc738efaf7f3c9f46"
- integrity sha512-vkHTluRCoq9FcsrldC0ulQHiyBYgVJB2CX53I8r0nTC6KnEij7Of0jpBspjt3/CuNb6fyoj3aOh9J2HgQUM0og==
+fn-name@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c"
+ integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA==
+
+focus-lock@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.8.1.tgz#bb36968abf77a2063fa173cb6c47b12ac8599d33"
+ integrity sha512-/LFZOIo82WDsyyv7h7oc0MJF9ACOvDRdx9rWPZ2pgMfNWu/z8hQDBtOchuB/0BVLmuFOZjV02YwUVzNsWx/EzA==
+ dependencies:
+ tslib "^1.9.3"
follow-redirects@1.5.10:
version "1.5.10"
@@ -5061,6 +5169,11 @@ form-data@~2.3.2:
combined-stream "^1.0.6"
mime-types "^2.1.12"
+format@^0.2.0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
+ integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=
+
forwarded@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
@@ -5225,6 +5338,11 @@ get-caller-file@^2.0.1:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+get-nonce@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3"
+ integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==
+
get-own-enumerable-property-symbols@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
@@ -5482,6 +5600,108 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
+hast-to-hyperscript@^7.0.0:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-7.0.4.tgz#7c4c037d9a8ea19b0a3fdb676a26448ad922353d"
+ integrity sha512-vmwriQ2H0RPS9ho4Kkbf3n3lY436QKLq6VaGA1pzBh36hBi3tm1DO9bR+kaJIbpT10UqaANDkMjxvjVfr+cnOA==
+ dependencies:
+ comma-separated-tokens "^1.0.0"
+ property-information "^5.3.0"
+ space-separated-tokens "^1.0.0"
+ style-to-object "^0.2.1"
+ unist-util-is "^3.0.0"
+ web-namespaces "^1.1.2"
+
+hast-to-hyperscript@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d"
+ integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==
+ dependencies:
+ "@types/unist" "^2.0.3"
+ comma-separated-tokens "^1.0.0"
+ property-information "^5.3.0"
+ space-separated-tokens "^1.0.0"
+ style-to-object "^0.3.0"
+ unist-util-is "^4.0.0"
+ web-namespaces "^1.0.0"
+
+hast-util-from-parse5@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c"
+ integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==
+ dependencies:
+ ccount "^1.0.3"
+ hastscript "^5.0.0"
+ property-information "^5.0.0"
+ web-namespaces "^1.1.2"
+ xtend "^4.0.1"
+
+hast-util-is-element@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425"
+ integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==
+
+hast-util-parse-selector@^2.0.0:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a"
+ integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==
+
+hast-util-raw@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-5.0.2.tgz#62288f311ec2f35e066a30d5e0277f963ad43a67"
+ integrity sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==
+ dependencies:
+ hast-util-from-parse5 "^5.0.0"
+ hast-util-to-parse5 "^5.0.0"
+ html-void-elements "^1.0.0"
+ parse5 "^5.0.0"
+ unist-util-position "^3.0.0"
+ web-namespaces "^1.0.0"
+ xtend "^4.0.0"
+ zwitch "^1.0.0"
+
+hast-util-to-html@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-6.1.0.tgz#86bcd19c3bd46af456984f8f34db16298c2b10b0"
+ integrity sha512-IlC+LG2HGv0Y8js3wqdhg9O2sO4iVpRDbHOPwXd7qgeagpGsnY49i8yyazwqS35RA35WCzrBQE/n0M6GG/ewxA==
+ dependencies:
+ ccount "^1.0.0"
+ comma-separated-tokens "^1.0.1"
+ hast-util-is-element "^1.0.0"
+ hast-util-whitespace "^1.0.0"
+ html-void-elements "^1.0.0"
+ property-information "^5.2.0"
+ space-separated-tokens "^1.0.0"
+ stringify-entities "^2.0.0"
+ unist-util-is "^3.0.0"
+ xtend "^4.0.1"
+
+hast-util-to-parse5@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-5.1.2.tgz#09d27bee9ba9348ea05a6cfcc44e02f9083969b6"
+ integrity sha512-ZgYLJu9lYknMfsBY0rBV4TJn2xiwF1fXFFjbP6EE7S0s5mS8LIKBVWzhA1MeIs1SWW6GnnE4In6c3kPb+CWhog==
+ dependencies:
+ hast-to-hyperscript "^7.0.0"
+ property-information "^5.0.0"
+ web-namespaces "^1.0.0"
+ xtend "^4.0.0"
+ zwitch "^1.0.0"
+
+hast-util-whitespace@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41"
+ integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==
+
+hastscript@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a"
+ integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==
+ dependencies:
+ comma-separated-tokens "^1.0.0"
+ hast-util-parse-selector "^2.0.0"
+ property-information "^5.0.0"
+ space-separated-tokens "^1.0.0"
+
he@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -5497,6 +5717,11 @@ highlight.js@^9.12.0:
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz#ed21aa001fe6252bb10a3d76d47573c6539fe13c"
integrity sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==
+highlight.js@~10.6.0:
+ version "10.6.0"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.6.0.tgz#0073aa71d566906965ba6e1b7be7b2682f5e18b6"
+ integrity sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==
+
hmac-drbg@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -5573,6 +5798,11 @@ html-minifier-terser@^5.0.1:
relateurl "^0.2.7"
terser "^4.6.3"
+html-void-elements@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483"
+ integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==
+
html-webpack-plugin@4.0.0-beta.11:
version "4.0.0-beta.11"
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz#3059a69144b5aecef97708196ca32f9e68677715"
@@ -5585,13 +5815,6 @@ html-webpack-plugin@4.0.0-beta.11:
tapable "^1.1.3"
util.promisify "1.0.0"
-html@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/html/-/html-1.0.0.tgz#a544fa9ea5492bfb3a2cca8210a10be7b5af1f61"
- integrity sha1-pUT6nqVJK/s6LMqCEKEL57WvH2E=
- dependencies:
- concat-stream "^1.4.7"
-
htmlparser2@^3.3.0:
version "3.10.1"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
@@ -5824,7 +6047,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -5844,6 +6067,11 @@ ini@^1.3.5:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+inline-style-parser@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
+ integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
+
inquirer@7.0.4:
version "7.0.4"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703"
@@ -5950,6 +6178,19 @@ is-accessor-descriptor@^1.0.0:
dependencies:
kind-of "^6.0.0"
+is-alphabetical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
+ integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
+
+is-alphanumerical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
+ integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
is-arguments@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
@@ -5984,6 +6225,11 @@ is-buffer@^1.0.2, is-buffer@^1.1.5:
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+is-buffer@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+ integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+
is-callable@^1.1.4, is-callable@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
@@ -6027,6 +6273,11 @@ is-date-object@^1.0.1:
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+is-decimal@^1.0.0, is-decimal@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
+ integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
+
is-descriptor@^0.1.0:
version "0.1.6"
resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
@@ -6113,6 +6364,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-hexadecimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
+ integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
+
is-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
@@ -6164,6 +6420,11 @@ is-plain-obj@^1.0.0:
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+is-plain-obj@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@@ -6232,11 +6493,21 @@ is-utf8@^0.2.0:
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+is-whitespace-character@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7"
+ integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==
+
is-windows@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+is-word-character@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230"
+ integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==
+
is-wsl@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
@@ -6898,11 +7169,6 @@ jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
array-includes "^3.1.1"
object.assign "^4.1.0"
-keymirror@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/keymirror/-/keymirror-0.1.1.tgz#918889ea13f8d0a42e7c557250eee713adc95c35"
- integrity sha1-kYiJ6hP40KQufFVyUO7nE63JXDU=
-
killable@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
@@ -7126,6 +7392,11 @@ locate-path@^5.0.0:
dependencies:
p-locate "^4.1.0"
+lodash-es@^4.17.11:
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.20.tgz#29f6332eefc60e849f869c264bc71126ad61e8f7"
+ integrity sha512-JD1COMZsq8maT6mnuz1UMV0jvYD0E0aUsSOdrr1/nAG3dhqQXwRRgeW0cSqH1U43INKcqxaiVIQNOUDld7gRDA==
+
lodash._reinterpolate@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
@@ -7166,6 +7437,16 @@ lodash.templatesettings@^4.0.0:
dependencies:
lodash._reinterpolate "^3.0.0"
+lodash.throttle@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
+ integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
+
+lodash.toarray@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
+ integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=
+
lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
@@ -7176,6 +7457,11 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
+lodash@^4.17.20:
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
+ integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
+
log-symbols@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
@@ -7220,6 +7506,14 @@ lower-case@^2.0.1:
dependencies:
tslib "^1.10.0"
+lowlight@^1.2.0:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.19.0.tgz#b8544199cafcf10c5731b21c7458c358f79a2a97"
+ integrity sha512-NIskvQ1d1ovKyUytkMpT8+8Bhq3Ub54os1Xp4RAC9uNbXH1YVRf5NERq7JNzapEe5BzUc1Cj4F0I+eLBBFj6hA==
+ dependencies:
+ fault "^1.0.0"
+ highlight.js "~10.6.0"
+
lru-cache@^4.0.1:
version "4.1.5"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
@@ -7293,6 +7587,11 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
+markdown-escapes@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
+ integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
+
md5.js@^1.3.4:
version "1.3.5"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@@ -7302,6 +7601,27 @@ md5.js@^1.3.4:
inherits "^2.0.1"
safe-buffer "^5.1.2"
+mdast-util-definitions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz#06af6c49865fc63d6d7d30125569e2f7ae3d0a86"
+ integrity sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==
+ dependencies:
+ unist-util-visit "^2.0.0"
+
+mdast-util-to-hast@^9.1.0:
+ version "9.1.2"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-9.1.2.tgz#10fa5ed9d45bf3755891e5801d0f32e2584a9423"
+ integrity sha512-OpkFLBC2VnNAb2FNKcKWu9FMbJhQKog+FCT8nuKmQNIKXyT1n3SIskE7uWDep6x+cA20QXlK5AETHQtYmQmxtQ==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.0"
+ mdast-util-definitions "^3.0.0"
+ mdurl "^1.0.0"
+ unist-builder "^2.0.0"
+ unist-util-generated "^1.0.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^2.0.0"
+
mdn-data@2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
@@ -7312,6 +7632,11 @@ mdn-data@2.0.6:
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978"
integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==
+mdurl@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
+
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
@@ -7668,6 +7993,13 @@ no-case@^3.0.3:
lower-case "^2.0.1"
tslib "^1.10.0"
+node-emoji@^1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
+ integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
+ dependencies:
+ lodash.toarray "^4.4.0"
+
node-forge@0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
@@ -8251,6 +8583,18 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
pbkdf2 "^3.0.3"
safe-buffer "^5.1.1"
+parse-entities@^1.1.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
+ integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
parse-json@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
@@ -8286,6 +8630,11 @@ parse5@5.1.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
+parse5@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+
parseurl@~1.3.2, parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -9267,6 +9616,18 @@ proper-url-join@2.1.1:
dependencies:
query-string "^6.3.0"
+property-expr@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.4.tgz#37b925478e58965031bb612ec5b3260f8241e910"
+ integrity sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg==
+
+property-information@^5.0.0, property-information@^5.2.0, property-information@^5.3.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69"
+ integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==
+ dependencies:
+ xtend "^4.0.0"
+
proxy-addr@~2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
@@ -9403,7 +9764,7 @@ raf-schd@^4.0.2:
resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0"
integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ==
-raf@^3.4.1:
+raf@^3.3.0, raf@^3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
@@ -9476,12 +9837,12 @@ react-beautiful-dnd@^13.0.0:
redux "^4.0.4"
use-memo-one "^1.1.1"
-react-clientside-effect@^1.2.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837"
- integrity sha512-nRmoyxeok5PBO6ytPvSjKp9xwXg9xagoTK1mMjwnQxqM9Hd7MNPl+LS1bOSOe+CV2+4fnEquc7H/S8QD3q697A==
+react-clientside-effect@^1.2.2:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.5.tgz#e2c4dc3c9ee109f642fac4f5b6e9bf5bcd2219a3"
+ integrity sha512-2bL8qFW1TGBHozGGbVeyvnggRpMjibeZM2536AKNENLECutp2yfs44IL8Hmpn8qjFQ2K7A9PnYf3vc7aQq/cPA==
dependencies:
- "@babel/runtime" "^7.0.0"
+ "@babel/runtime" "^7.12.13"
react-dev-utils@^10.2.1:
version "10.2.1"
@@ -9523,6 +9884,15 @@ react-dom@16.13.1:
prop-types "^15.6.2"
scheduler "^0.19.1"
+react-dropzone@^10.2.1:
+ version "10.2.2"
+ resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-10.2.2.tgz#67b4db7459589a42c3b891a82eaf9ade7650b815"
+ integrity sha512-U5EKckXVt6IrEyhMMsgmHQiWTGLudhajPPG77KFSvgsMqNEHSyGpqWvOMc5+DhEah/vH4E1n+J5weBNLd5VtyA==
+ dependencies:
+ attr-accept "^2.0.0"
+ file-selector "^0.1.12"
+ prop-types "^15.7.2"
+
react-error-overlay@^6.0.7:
version "6.0.7"
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108"
@@ -9533,15 +9903,29 @@ react-fast-compare@^3.2.0:
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==
-react-focus-lock@^1.17.7:
- version "1.19.1"
- resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-1.19.1.tgz#2f3429793edaefe2d077121f973ce5a3c7a0651a"
- integrity sha512-TPpfiack1/nF4uttySfpxPk4rGZTLXlaZl7ncZg/ELAk24Iq2B1UUaUioID8H8dneUXqznT83JTNDHDj+kwryw==
+react-focus-lock@^2.3.1:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.5.0.tgz#12e3a3940e897c26e2c2a0408cd25ea3c99b3709"
+ integrity sha512-XLxj6uTXgz0US8TmqNU2jMfnXwZG0mH2r/afQqvPEaX6nyEll5LHVcEXk2XDUQ34RVeLPkO/xK5x6c/qiuSq/A==
dependencies:
"@babel/runtime" "^7.0.0"
- focus-lock "^0.6.3"
+ focus-lock "^0.8.1"
prop-types "^15.6.2"
- react-clientside-effect "^1.2.0"
+ react-clientside-effect "^1.2.2"
+ use-callback-ref "^1.2.1"
+ use-sidecar "^1.0.1"
+
+react-focus-on@^3.5.0:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/react-focus-on/-/react-focus-on-3.5.1.tgz#b459309cbee1b0a42dac92253e434d2860a509f6"
+ integrity sha512-6iE56nYNwVU6Pke362TjqRLz/G7DBGnEugkxhPAhpXEZW5og3vhc9qDPlyiHgxoiY9kYTWjdAEFz4nJgSluANg==
+ dependencies:
+ aria-hidden "^1.1.1"
+ react-focus-lock "^2.3.1"
+ react-remove-scroll "^2.4.0"
+ react-style-singleton "^2.1.0"
+ use-callback-ref "^1.2.3"
+ use-sidecar "^1.0.1"
react-google-login@5.1.19:
version "5.1.19"
@@ -9584,6 +9968,25 @@ react-redux@^7.1.1:
prop-types "^15.7.2"
react-is "^16.9.0"
+react-remove-scroll-bar@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.2.0.tgz#d4d545a7df024f75d67e151499a6ab5ac97c8cdd"
+ integrity sha512-UU9ZBP1wdMR8qoUs7owiVcpaPwsQxUDC2lypP6mmixaGlARZa7ZIBx1jcuObLdhMOvCsnZcvetOho0wzPa9PYg==
+ dependencies:
+ react-style-singleton "^2.1.0"
+ tslib "^1.0.0"
+
+react-remove-scroll@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.4.1.tgz#e0af6126621083a5064591d367291a81b2d107f5"
+ integrity sha512-K7XZySEzOHMTq7dDwcHsZA6Y7/1uX5RsWhRXVYv8rdh+y9Qz2nMwl9RX/Mwnj/j7JstCGmxyfyC0zbVGXYh3mA==
+ dependencies:
+ react-remove-scroll-bar "^2.1.0"
+ react-style-singleton "^2.1.0"
+ tslib "^1.0.0"
+ use-callback-ref "^1.2.3"
+ use-sidecar "^1.0.1"
+
react-scripts@3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-3.4.1.tgz#f551298b5c71985cc491b9acf3c8e8c0ae3ada0a"
@@ -9644,6 +10047,31 @@ react-scripts@3.4.1:
optionalDependencies:
fsevents "2.1.2"
+react-scroll@^1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/react-scroll/-/react-scroll-1.8.1.tgz#eb4052265f1606cf60855c981ebcfed1bc3beff3"
+ integrity sha512-UAKmawFHn+c7x/DoXuHqOsQ5xwNk2Dxv7vP8Ft41K2hglPWkshcSos0tMTr8704UkFqImoUGzMTdN4vuZXoqbw==
+ dependencies:
+ lodash.throttle "^4.1.1"
+ prop-types "^15.7.2"
+
+react-sticky@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/react-sticky/-/react-sticky-6.0.3.tgz#7a18b643e1863da113d7f7036118d2a75d9ecde4"
+ integrity sha512-LNH4UJlRatOqo29/VHxDZOf6fwbgfgcHO4mkEFvrie5FuaZCSTGtug5R8NGqJ0kSnX8gHw8qZN37FcvnFBJpTQ==
+ dependencies:
+ prop-types "^15.5.8"
+ raf "^3.3.0"
+
+react-style-singleton@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.1.tgz#ce7f90b67618be2b6b94902a30aaea152ce52e66"
+ integrity sha512-jNRp07Jza6CBqdRKNgGhT3u9umWvils1xsuMOjZlghBDH2MU0PL2WZor4PGYjXpnRCa9DQSlHMs/xnABWOwYbA==
+ dependencies:
+ get-nonce "^1.0.0"
+ invariant "^2.2.4"
+ tslib "^1.0.0"
+
react-virtualized-auto-sizer@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.2.tgz#a61dd4f756458bbf63bd895a92379f9b70f803bd"
@@ -9869,11 +10297,79 @@ regjsparser@^0.6.4:
dependencies:
jsesc "~0.5.0"
+rehype-raw@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-4.0.2.tgz#5d3191689df96c8c651ce5f51a6c668d2c07b9c8"
+ integrity sha512-xQt94oXfDaO7sK9mJBtsZXkjW/jm6kArCoYN+HqKZ51O19AFHlp3Xa5UfZZ2tJkbpAZzKtgVUYvnconk9IsFuA==
+ dependencies:
+ hast-util-raw "^5.0.0"
+
+rehype-react@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/rehype-react/-/rehype-react-6.2.0.tgz#705a5b3055548848ff8a7778c978fd368b0d4425"
+ integrity sha512-XpR3p8ejdJ5CSEKqAfASIrkD+KaHLy0JOqXu9zM32tvkr1cUeM7AeidF6Q8eQ/wtMvcJb+h/L4QRwg1eFwBggQ==
+ dependencies:
+ "@mapbox/hast-util-table-cell-style" "^0.1.3"
+ hast-to-hyperscript "^9.0.0"
+
+rehype-stringify@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-6.0.1.tgz#b6aa9f84d5276c5d247c62fc1ea15983a35a4575"
+ integrity sha512-JfEPRDD4DiG7jet4md7sY07v6ACeb2x+9HWQtRPm2iA6/ic31hCv1SNBUtpolJASxQ/D8gicXiviW4TJKEMPKQ==
+ dependencies:
+ hast-util-to-html "^6.0.0"
+ xtend "^4.0.0"
+
relateurl@^0.2.7:
version "0.2.7"
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
+remark-emoji@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.1.0.tgz#69165d1181b98a54ad5d9ef811003d53d7ebc7db"
+ integrity sha512-lDddGsxXURV01WS9WAiS9rO/cedO1pvr9tahtLhr6qCGFhHG4yZSJW3Ha4Nw9Uk1hLNmUBtPC0+m45Ms+xEitg==
+ dependencies:
+ emoticon "^3.2.0"
+ node-emoji "^1.10.0"
+ unist-util-visit "^2.0.2"
+
+remark-highlight.js@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/remark-highlight.js/-/remark-highlight.js-5.2.0.tgz#6d8d22085e0c76573744b7e3706fc232269f5b02"
+ integrity sha512-5tCr1CfdXDYzR8HCAnohlr1rK8DjUTFxEZdr+QEul5o13+EOEt5RrO8U6Znf8Faj5rVLcMJtxLPq6hHrZFo33A==
+ dependencies:
+ lowlight "^1.2.0"
+ unist-util-visit "^1.0.0"
+
+remark-parse@^7.0.2:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf"
+ integrity sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==
+ dependencies:
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^1.1.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^1.0.0"
+ vfile-location "^2.0.0"
+ xtend "^4.0.1"
+
+remark-rehype@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-7.0.0.tgz#8e106e49806c69b2e9523b76d24965119e2da67b"
+ integrity sha512-uqQ/VbaTdxyu/da6npHAso6hA00cMqhA3a59RziQdOLN2KEIkPykAVy52IcmZEVTuauXO0VtpxkyCey4phtHzQ==
+ dependencies:
+ mdast-util-to-hast "^9.1.0"
+
remove-trailing-separator@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
@@ -9895,7 +10391,7 @@ repeat-element@^1.1.2:
resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
-repeat-string@^1.6.1:
+repeat-string@^1.5.4, repeat-string@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
@@ -9969,7 +10465,7 @@ requires-port@^1.0.0:
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
-resize-observer-polyfill@^1.5.0:
+resize-observer-polyfill@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
@@ -10670,6 +11166,11 @@ source-map@^0.5.0, source-map@^0.5.6:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+space-separated-tokens@^1.0.0:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
+ integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
+
spdx-correct@^3.0.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
@@ -10776,6 +11277,11 @@ stack-utils@^1.0.1:
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+state-toggle@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"
+ integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==
+
static-extend@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -10949,6 +11455,17 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
+stringify-entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-2.0.0.tgz#fa7ca6614b355fb6c28448140a20c4ede7462827"
+ integrity sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A==
+ dependencies:
+ character-entities-html4 "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.2"
+ is-hexadecimal "^1.0.0"
+
stringify-object@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
@@ -11036,6 +11553,20 @@ style-loader@0.23.1:
loader-utils "^1.1.0"
schema-utils "^1.0.0"
+style-to-object@^0.2.1:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.3.tgz#afcf42bc03846b1e311880c55632a26ad2780bcb"
+ integrity sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng==
+ dependencies:
+ inline-style-parser "0.1.1"
+
+style-to-object@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46"
+ integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==
+ dependencies:
+ inline-style-parser "0.1.1"
+
stylehacks@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
@@ -11105,6 +11636,11 @@ symbol-tree@^3.2.2:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+synchronous-promise@^2.0.13:
+ version "2.0.15"
+ resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e"
+ integrity sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==
+
tabbable@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-3.1.2.tgz#f2d16cccd01f400e38635c7181adfe0ad965a4a2"
@@ -11292,6 +11828,11 @@ toidentifier@1.0.0:
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+toposort@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+ integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
+
tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.5.0, tough-cookie@~2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
@@ -11312,6 +11853,21 @@ trim-newlines@^1.0.0:
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+trim-trailing-lines@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0"
+ integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==
+
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+ integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
+
+trough@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
+ integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
+
"true-case-path@^1.0.2":
version "1.0.3"
resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
@@ -11329,11 +11885,21 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
+tslib@^1.0.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
version "1.13.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
+tslib@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
+ integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
+
tsutils@^3.17.1:
version "3.17.1"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
@@ -11398,6 +11964,14 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+unherit@^1.0.4:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
+ integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==
+ dependencies:
+ inherits "^2.0.0"
+ xtend "^4.0.0"
+
unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@@ -11421,6 +11995,17 @@ unicode-property-aliases-ecmascript@^1.0.4:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
+unified@^8.4.2:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1"
+ integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-plain-obj "^2.0.0"
+ trough "^1.0.0"
+ vfile "^4.0.0"
+
union-value@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
@@ -11455,6 +12040,76 @@ unique-slug@^2.0.0:
dependencies:
imurmurhash "^0.1.4"
+unist-builder@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436"
+ integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==
+
+unist-util-generated@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b"
+ integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==
+
+unist-util-is@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd"
+ integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==
+
+unist-util-is@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.4.tgz#3e9e8de6af2eb0039a59f50c9b3e99698a924f50"
+ integrity sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==
+
+unist-util-position@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47"
+ integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==
+
+unist-util-remove-position@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020"
+ integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+unist-util-stringify-position@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
+ integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
+ dependencies:
+ "@types/unist" "^2.0.2"
+
+unist-util-visit-parents@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9"
+ integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==
+ dependencies:
+ unist-util-is "^3.0.0"
+
+unist-util-visit-parents@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6"
+ integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+
+unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3"
+ integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==
+ dependencies:
+ unist-util-visit-parents "^2.0.0"
+
+unist-util-visit@^2.0.0, unist-util-visit@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c"
+ integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^4.0.0"
+ unist-util-visit-parents "^3.0.0"
+
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -11520,11 +12175,24 @@ url@^0.11.0:
punycode "1.3.2"
querystring "0.2.0"
+use-callback-ref@^1.2.1, use-callback-ref@^1.2.3:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.5.tgz#6115ed242cfbaed5915499c0a9842ca2912f38a5"
+ integrity sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==
+
use-memo-one@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.1.tgz#39e6f08fe27e422a7d7b234b5f9056af313bd22c"
integrity sha512-oFfsyun+bP7RX8X2AskHNTxu+R3QdE/RC5IefMbqptmACAA/gfol1KDD5KRzPsGMa62sWxGZw+Ui43u6x4ddoQ==
+use-sidecar@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.4.tgz#38398c3723727f9f924bed2343dfa3db6aaaee46"
+ integrity sha512-A5ggIS3/qTdxCAlcy05anO2/oqXOfpmxnpRE1Jm+fHHtCvUvNSZDGqgOSAXPriBVAcw2fMFFkh5v5KqrFFhCMA==
+ dependencies:
+ detect-node-es "^1.0.0"
+ tslib "^1.9.3"
+
use@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
@@ -11577,11 +12245,16 @@ utils-merge@1.0.1:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2:
+uuid@^3.0.1, uuid@^3.3.2:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+uuid@^8.3.0:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
v8-compile-cache@^2.0.3:
version "2.1.1"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745"
@@ -11614,6 +12287,29 @@ verror@1.10.0:
core-util-is "1.0.2"
extsprintf "^1.2.0"
+vfile-location@^2.0.0:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e"
+ integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==
+
+vfile-message@*, vfile-message@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
+ integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+vfile@^4.0.0, vfile@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624"
+ integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ is-buffer "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-message "^2.0.0"
+
vlq@^0.2.2:
version "0.2.3"
resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
@@ -11690,6 +12386,11 @@ wbuf@^1.1.0, wbuf@^1.7.3:
dependencies:
minimalistic-assert "^1.0.0"
+web-namespaces@^1.0.0, web-namespaces@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec"
+ integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==
+
webidl-conversions@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@@ -12112,7 +12813,7 @@ xregexp@^4.3.0:
dependencies:
"@babel/runtime-corejs3" "^7.8.3"
-xtend@^4.0.0, xtend@~4.0.1:
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
@@ -12191,3 +12892,21 @@ yargs@^13.3.0, yargs@^13.3.2:
which-module "^2.0.0"
y18n "^4.0.0"
yargs-parser "^13.1.2"
+
+yup@^0.29.1:
+ version "0.29.3"
+ resolved "https://registry.yarnpkg.com/yup/-/yup-0.29.3.tgz#69a30fd3f1c19f5d9e31b1cf1c2b851ce8045fea"
+ integrity sha512-RNUGiZ/sQ37CkhzKFoedkeMfJM0vNQyaz+wRZJzxdKE7VfDeVKH8bb4rr7XhRLbHJz5hSjoDNwMEIaKhuMZ8gQ==
+ dependencies:
+ "@babel/runtime" "^7.10.5"
+ fn-name "~3.0.0"
+ lodash "^4.17.15"
+ lodash-es "^4.17.11"
+ property-expr "^2.0.2"
+ synchronous-promise "^2.0.13"
+ toposort "^2.0.2"
+
+zwitch@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
+ integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==