From 0899ace0374541337d44e81455945efb7e1586e0 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Sun, 23 May 2021 15:15:42 +0300 Subject: [PATCH] Restyling extensions page with tailwindcss (#2796) * Setting up tailwind and css modules env Signed-off-by: Alex Andreev * Using tailwind with scss files also Signed-off-by: Alex Andreev * Introducing react-table Signed-off-by: Alex Andreev * Spread extensions to smaller components Signed-off-by: Alex Andreev * Add table sorting Signed-off-by: Alex Andreev * Fixing inputs line-height Signed-off-by: Alex Andreev * Fine-tuning page view Signed-off-by: Alex Andreev * Align table rows Signed-off-by: Alex Andreev * Adding extension notice Signed-off-by: Alex Andreev * Fine-tuning overall styling Signed-off-by: Alex Andreev * Adding a extensions placeholder Signed-off-by: Alex Andreev * Updating MaterialIcons font Signed-off-by: Alex Andreev * Aligning not found state Signed-off-by: Alex Andreev * Making extension components observable Signed-off-by: Alex Andreev * Fixing search input cross icon Signed-off-by: Alex Andreev * Fix drag-n-drop indication Signed-off-by: Alex Andreev * Fixing extension name sorting Signed-off-by: Alex Andreev * Fix linter Signed-off-by: Alex Andreev * Fixing tests Signed-off-by: Alex Andreev * Ignoring ts files to tailwind purge Signed-off-by: Alex Andreev * Cleaning up Signed-off-by: Alex Andreev * Renaming Table -> ReactTable Signed-off-by: Alex Andreev * Fixing integration tests Signed-off-by: Alex Andreev * Moving tailwind imports into app.scss Signed-off-by: Alex Andreev * Moving userExtensionList() out from extension-loader Signed-off-by: Alex Andreev * Transform extension list to array Signed-off-by: Alex Andreev * Expand install input placeholder a bit Signed-off-by: Alex Andreev --- integration/__tests__/app.tests.ts | 8 +- package.json | 8 +- postcss.config.js | 28 + src/extensions/extension-loader.ts | 2 +- .../+extensions/__tests__/extensions.test.tsx | 19 +- .../+extensions/extension-install.store.ts | 26 +- .../components/+extensions/extensions.scss | 48 +- .../components/+extensions/extensions.tsx | 224 ++--- .../components/+extensions/install.module.css | 7 + .../components/+extensions/install.tsx | 100 +++ .../installed-extensions.module.css | 25 + .../+extensions/installed-extensions.tsx | 169 ++++ .../components/+extensions/notice.module.css | 27 + .../components/+extensions/notice.tsx | 36 + src/renderer/components/app.scss | 3 + src/renderer/components/app.tsx | 1 - src/renderer/components/button/button.scss | 4 + .../components/hotbar/hotbar-cell.tsx | 2 +- .../components/input/drop-file-input.scss | 7 +- .../components/input/drop-file-input.tsx | 8 +- src/renderer/components/input/input.scss | 1 + .../components/input/search-input.scss | 7 +- .../components/layout/page-layout.scss | 22 +- src/renderer/components/list/list.module.css | 8 + src/renderer/components/list/list.tsx | 65 ++ src/renderer/components/select/select.scss | 1 + .../components/table/react-table.module.css | 43 + src/renderer/components/table/react-table.tsx | 109 +++ src/renderer/fonts/MaterialIcons-Regular.ttf | Bin 230384 -> 285724 bytes tailwind.config.js | 35 + tsconfig.json | 3 +- types/mocks.d.ts | 4 + types/react-table.config.d.ts | 141 +++ webpack.renderer.ts | 14 +- yarn.lock | 832 +++++++++++++++--- 35 files changed, 1677 insertions(+), 360 deletions(-) create mode 100644 postcss.config.js create mode 100644 src/renderer/components/+extensions/install.module.css create mode 100644 src/renderer/components/+extensions/install.tsx create mode 100644 src/renderer/components/+extensions/installed-extensions.module.css create mode 100644 src/renderer/components/+extensions/installed-extensions.tsx create mode 100644 src/renderer/components/+extensions/notice.module.css create mode 100644 src/renderer/components/+extensions/notice.tsx create mode 100644 src/renderer/components/list/list.module.css create mode 100644 src/renderer/components/list/list.tsx create mode 100644 src/renderer/components/table/react-table.module.css create mode 100644 src/renderer/components/table/react-table.tsx create mode 100644 tailwind.config.js create mode 100644 types/react-table.config.d.ts diff --git a/integration/__tests__/app.tests.ts b/integration/__tests__/app.tests.ts index d433513f1e..7b8ff11435 100644 --- a/integration/__tests__/app.tests.ts +++ b/integration/__tests__/app.tests.ts @@ -57,17 +57,17 @@ describe("Lens integration tests", () => { const appName: string = process.platform === "darwin" ? "OpenLens" : "File"; await app.electron.ipcRenderer.send("test-menu-item-click", appName, "Preferences"); - await app.client.waitUntilTextExists("[data-testid=application-header]", "APPLICATION"); + await app.client.waitUntilTextExists("[data-testid=application-header]", "Application"); }); it("shows all tabs and their contents", async () => { await app.client.click("[data-testid=application-tab]"); await app.client.click("[data-testid=proxy-tab]"); - await app.client.waitUntilTextExists("[data-testid=proxy-header]", "PROXY"); + await app.client.waitUntilTextExists("[data-testid=proxy-header]", "Proxy"); await app.client.click("[data-testid=kube-tab]"); - await app.client.waitUntilTextExists("[data-testid=kubernetes-header]", "KUBERNETES"); + await app.client.waitUntilTextExists("[data-testid=kubernetes-header]", "Kubernetes"); await app.client.click("[data-testid=telemetry-tab]"); - await app.client.waitUntilTextExists("[data-testid=telemetry-header]", "TELEMETRY"); + await app.client.waitUntilTextExists("[data-testid=telemetry-header]", "Telemetry"); }); it("ensures helm repos", async () => { diff --git a/package.json b/package.json index 804c1f1f90..17bcc79742 100644 --- a/package.json +++ b/package.json @@ -241,7 +241,7 @@ }, "devDependencies": { "@emeraldpay/hashicon-react": "^0.4.0", - "@material-ui/core": "^4.10.1", + "@material-ui/core": "^4.11.4", "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.57", "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", @@ -280,6 +280,7 @@ "@types/react-dom": "^17.0.0", "@types/react-router-dom": "^5.1.6", "@types/react-select": "^3.0.13", + "@types/react-table": "^7.7.0", "@types/react-window": "^1.8.2", "@types/readable-stream": "^2.3.9", "@types/request": "^2.48.5", @@ -336,6 +337,8 @@ "nodemon": "^2.0.4", "open": "^7.3.1", "patch-package": "^6.2.2", + "postcss": "^8.2.14", + "postcss-loader": "~3.0.0", "postinstall-postinstall": "^2.1.0", "prettier": "^2.2.0", "progress-bar-webpack-plugin": "^2.1.0", @@ -346,11 +349,13 @@ "react-router-dom": "^5.2.0", "react-select": "^3.1.0", "react-select-event": "^5.1.0", + "react-table": "^7.7.0", "react-window": "^1.8.5", "sass-loader": "^8.0.2", "sharp": "^0.26.1", "spectron": "11.0.0", "style-loader": "^1.2.1", + "tailwindcss": "^2.1.2", "ts-jest": "26.3.0", "ts-loader": "^7.0.5", "ts-node": "^8.10.2", @@ -359,6 +364,7 @@ "typedoc-plugin-markdown": "^2.4.0", "typeface-roboto": "^0.0.75", "typescript": "4.0.2", + "typescript-plugin-css-modules": "^3.2.0", "url-loader": "^4.1.0", "webpack": "^4.44.2", "webpack-cli": "^3.3.11", diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000000..2ae5d843b6 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +const tailwindcss = require("tailwindcss"); + +module.exports = { + plugins: [ + tailwindcss("./tailwind.config.js") + ], +}; diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index b024ddd761..923093c595 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -61,7 +61,7 @@ export class ExtensionLoader extends Singleton { whenLoaded = when(() => this.isLoaded); @computed get userExtensions(): Map { - const extensions = this.extensions.toJS(); + const extensions = this.toJSON(); extensions.forEach((ext, extId) => { if (ext.isBundled) { diff --git a/src/renderer/components/+extensions/__tests__/extensions.test.tsx b/src/renderer/components/+extensions/__tests__/extensions.test.tsx index 5aee03bb6e..40a523d8a3 100644 --- a/src/renderer/components/+extensions/__tests__/extensions.test.tsx +++ b/src/renderer/components/+extensions/__tests__/extensions.test.tsx @@ -88,9 +88,13 @@ describe("Extensions", () => { ExtensionDiscovery.getInstance().isLoaded = true; const res = render(<>); + const table = res.getByTestId("extensions-table"); + const menuTrigger = table.querySelector("div[role=row]:first-of-type .actions .Icon"); - expect(res.getByText("Disable").closest("button")).not.toBeDisabled(); - expect(res.getByText("Uninstall").closest("button")).not.toBeDisabled(); + fireEvent.click(menuTrigger); + + expect(res.getByText("Disable")).toHaveAttribute("aria-disabled", "false"); + expect(res.getByText("Uninstall")).toHaveAttribute("aria-disabled", "false"); fireEvent.click(res.getByText("Uninstall")); @@ -99,8 +103,9 @@ describe("Extensions", () => { await waitFor(() => { expect(ExtensionDiscovery.getInstance().uninstallExtension).toHaveBeenCalled(); - expect(res.getByText("Disable").closest("button")).toBeDisabled(); - expect(res.getByText("Uninstall").closest("button")).toBeDisabled(); + fireEvent.click(menuTrigger); + expect(res.getByText("Disable")).toHaveAttribute("aria-disabled", "true"); + expect(res.getByText("Uninstall")).toHaveAttribute("aria-disabled", "true"); }, { timeout: 30000, }); @@ -111,7 +116,7 @@ describe("Extensions", () => { (fse.unlink as jest.MockedFunction).mockReturnValue(Promise.resolve() as any); - fireEvent.change(res.getByPlaceholderText("Path or URL to an extension package", { + fireEvent.change(res.getByPlaceholderText("File path or URL", { exact: false }), { target: { @@ -134,8 +139,6 @@ describe("Extensions", () => { ExtensionDiscovery.getInstance().isLoaded = true; const { container } = render(); - waitFor(() => - expect(container.querySelector(".Spinner")).not.toBeInTheDocument() - ); + expect(container.querySelector(".Spinner")).not.toBeInTheDocument(); }); }); diff --git a/src/renderer/components/+extensions/extension-install.store.ts b/src/renderer/components/+extensions/extension-install.store.ts index 79ba16fa01..c02bb482fd 100644 --- a/src/renderer/components/+extensions/extension-install.store.ts +++ b/src/renderer/components/+extensions/extension-install.store.ts @@ -210,31 +210,45 @@ export class ExtensionInstallationStateStore { return ExtensionInstallationStateStore.InstallingExtensions.size; } + /** + * The current number of extensions uninstalling + */ + static get uninstalling(): number { + return ExtensionInstallationStateStore.UninstallingExtensions.size; + } + /** * If there is at least one extension currently installing */ - @computed static get anyInstalling(): boolean { + static get anyInstalling(): boolean { return ExtensionInstallationStateStore.installing > 0; } + /** + * If there is at least one extension currently ininstalling + */ + static get anyUninstalling(): boolean { + return ExtensionInstallationStateStore.uninstalling > 0; + } + /** * The current number of extensions preinstalling */ - @computed static get preinstalling(): number { + static get preinstalling(): number { return ExtensionInstallationStateStore.PreInstallIds.size; } /** * If there is at least one extension currently downloading */ - @computed static get anyPreinstalling(): boolean { + static get anyPreinstalling(): boolean { return ExtensionInstallationStateStore.preinstalling > 0; } /** - * If there is at least one installing or preinstalling step taking place - */ - @computed static get anyPreInstallingOrInstalling(): boolean { + * If there is at least one installing or preinstalling step taking place + */ + static get anyPreInstallingOrInstalling(): boolean { return ExtensionInstallationStateStore.anyInstalling || ExtensionInstallationStateStore.anyPreinstalling; } } diff --git a/src/renderer/components/+extensions/extensions.scss b/src/renderer/components/+extensions/extensions.scss index 13b9be1f2f..0369eb4798 100644 --- a/src/renderer/components/+extensions/extensions.scss +++ b/src/renderer/components/+extensions/extensions.scss @@ -21,52 +21,16 @@ .PageLayout.Extensions { $spacing: $padding * 2; - --width: 50%; + width: 100%; - h2 { - margin-bottom: $padding; - } + .contentRegion { + .content { + max-width: 740px; - .no-extensions { - --flex-gap: #{$padding}; - padding: $padding; - - code { - font-size: $font-size-small; - } - } - - .install-extension { - margin: $spacing * 2 0; - } - - .installed-extensions { - --flex-gap: #{$spacing}; - - .extension { - padding: $padding $spacing; - background: $layoutBackground; - border-radius: $radius; - - .actions > button:not(:last-child) { - margin-right: $spacing / 2; - } - - h5, h6 { - color: var(--textColorSecondary); + > section { + height: 100%; } } - - > .spinner-wrapper { - display: flex; - justify-content: center; - } - } - - .SearchInput { - --spacing: 10px; - - max-width: none; } } diff --git a/src/renderer/components/+extensions/extensions.tsx b/src/renderer/components/+extensions/extensions.tsx index 93923d3093..e050475fce 100644 --- a/src/renderer/components/+extensions/extensions.tsx +++ b/src/renderer/components/+extensions/extensions.tsx @@ -20,33 +20,47 @@ */ import "./extensions.scss"; + import { remote, shell } from "electron"; import fse from "fs-extra"; -import { computed, observable, reaction, when } from "mobx"; +import _ from "lodash"; +import { observable, reaction, when } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import os from "os"; import path from "path"; import React from "react"; -import { autobind, disposer, Disposer, downloadFile, downloadJson, ExtendableDisposer, extractTar, listTarEntries, noop, readFileFromTar } from "../../../common/utils"; -import { docsUrl } from "../../../common/vars"; +import { SemVer } from "semver"; +import URLParse from "url-parse"; + +import { + Disposer, + disposer, + downloadFile, + downloadJson, + ExtendableDisposer, + extractTar, + listTarEntries, + noop, + readFileFromTar, +} from "../../../common/utils"; import { ExtensionDiscovery, InstalledExtension, manifestFilename } from "../../../extensions/extension-discovery"; import { ExtensionLoader } from "../../../extensions/extension-loader"; -import { extensionDisplayName, LensExtensionId, LensExtensionManifest, sanitizeExtensionName } from "../../../extensions/lens-extension"; +import { + extensionDisplayName, + LensExtensionId, + LensExtensionManifest, + sanitizeExtensionName, +} from "../../../extensions/lens-extension"; import logger from "../../../main/logger"; -import { prevDefault } from "../../utils"; import { Button } from "../button"; import { ConfirmDialog } from "../confirm-dialog"; -import { Icon } from "../icon"; -import { DropFileInput, Input, InputValidator, InputValidators, SearchInput } from "../input"; +import { DropFileInput, InputValidators } from "../input"; import { PageLayout } from "../layout/page-layout"; -import { SubTitle } from "../layout/sub-title"; import { Notifications } from "../notifications"; -import { Spinner } from "../spinner/spinner"; -import { TooltipPosition } from "../tooltip"; import { ExtensionInstallationState, ExtensionInstallationStateStore } from "./extension-install.store"; -import URLParse from "url-parse"; -import { SemVer } from "semver"; -import _ from "lodash"; +import { Install } from "./install"; +import { InstalledExtensions } from "./installed-extensions"; +import { Notice } from "./notice"; function getMessageFromError(error: any): string { if (!error || typeof error !== "object") { @@ -89,6 +103,22 @@ interface InstallRequestValidated { tempFile: string; // temp system path to packed extension for unpacking } +function setExtensionEnabled(id: LensExtensionId, isEnabled: boolean): void { + const extension = ExtensionLoader.getInstance().getExtension(id); + + if (extension) { + extension.isEnabled = isEnabled; + } +} + +function enableExtension(id: LensExtensionId) { + setExtensionEnabled(id, true); +} + +function disableExtension(id: LensExtensionId) { + setExtensionEnabled(id, false); +} + async function uninstallExtension(extensionId: LensExtensionId): Promise { const loader = ExtensionLoader.getInstance(); const { manifest } = loader.getExtension(extensionId); @@ -465,32 +495,8 @@ async function installFromSelectFileDialog() { @observer export class Extensions extends React.Component { - private static installInputValidators = [ - InputValidators.isUrl, - InputValidators.isPath, - InputValidators.isExtensionNameInstall, - ]; - - private static installInputValidator: InputValidator = { - message: "Invalid URL, absolute path, or extension name", - validate: (value: string) => ( - Extensions.installInputValidators.some(({ validate }) => validate(value)) - ), - }; - - @observable search = ""; @observable installPath = ""; - @computed get searchedForExtensions() { - const searchText = this.search.toLowerCase(); - - return Array.from(ExtensionLoader.getInstance().userExtensions.values()) - .filter(({ manifest: { name, description }}) => ( - name.toLowerCase().includes(searchText) - || description?.toLowerCase().includes(searchText) - )); - } - componentDidMount() { // TODO: change this after upgrading to mobx6 as that versions' reactions have this functionality let prevSize = ExtensionLoader.getInstance().userExtensions.size; @@ -509,138 +515,34 @@ export class Extensions extends React.Component { ]); } - renderNoExtensionsHelpText() { - if (this.search) { - return

No search results found

; - } - - return ( -

- There are no installed extensions. - See list of available extensions. -

- ); - } - - renderNoExtensions() { - return ( -
- -
- {this.renderNoExtensionsHelpText()} -
-
- ); - } - - @autobind() - renderExtension(extension: InstalledExtension) { - const { id, isEnabled, manifest } = extension; - const { name, description, version } = manifest; - const isUninstalling = ExtensionInstallationStateStore.isExtensionUninstalling(id); - - return ( -
-
-
{name}
-
{version}
-

{description}

-
-
- { - isEnabled - ? - : - } - -
-
- ); - } - - renderExtensions() { - if (!ExtensionDiscovery.getInstance().isLoaded) { - return
; - } - - const { searchedForExtensions } = this; - - if (!searchedForExtensions.length) { - return this.renderNoExtensions(); - } - - return ( - <> - {...searchedForExtensions.map(this.renderExtension)} - - ); - } - render() { - const { installPath } = this; + const extensions = Array.from(ExtensionLoader.getInstance().userExtensions.values()); return ( -

Lens Extensions

-
- Add new features and functionality via Lens Extensions. - Check out documentation to learn more or see the list of available extensions. -
+
+

Extensions

-
- -
- this.installPath = value} - onSubmit={() => installFromInput(this.installPath)} - iconLeft="link" - iconRight={ - - } - /> -
-
+ -

Installed Extensions

-
- this.search = value} + this.installPath = value} + installFromInput={() => installFromInput(this.installPath)} + installFromSelectFileDialog={installFromSelectFileDialog} + installPath={this.installPath} /> - {this.renderExtensions()} -
+ + {extensions.length > 0 &&
} + + +
); diff --git a/src/renderer/components/+extensions/install.module.css b/src/renderer/components/+extensions/install.module.css new file mode 100644 index 0000000000..1cb5b5175a --- /dev/null +++ b/src/renderer/components/+extensions/install.module.css @@ -0,0 +1,7 @@ +.icon { + @apply h-5 w-5 mr-3 cursor-pointer; +} + +.icon:hover { + color: var(--textColorAccent); +} \ No newline at end of file diff --git a/src/renderer/components/+extensions/install.tsx b/src/renderer/components/+extensions/install.tsx new file mode 100644 index 0000000000..d07533d3ba --- /dev/null +++ b/src/renderer/components/+extensions/install.tsx @@ -0,0 +1,100 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import styles from "./install.module.css"; +import React from "react"; +import { prevDefault } from "../../utils"; +import { Button } from "../button"; +import { Icon } from "../icon"; +import { Input, InputValidator, InputValidators } from "../input"; +import { SubTitle } from "../layout/sub-title"; +import { TooltipPosition } from "../tooltip"; +import { ExtensionInstallationStateStore } from "./extension-install.store"; +import { observer } from "mobx-react"; + +interface Props { + installPath: string; + supportedFormats: string[]; + onChange: (path: string) => void; + installFromInput: () => void; + installFromSelectFileDialog: () => void; +} + +const installInputValidators = [ + InputValidators.isUrl, + InputValidators.isPath, + InputValidators.isExtensionNameInstall, +]; + +const installInputValidator: InputValidator = { + message: "Invalid URL, absolute path, or extension name", + validate: (value: string) => ( + installInputValidators.some(({ validate }) => validate(value)) + ), +}; + +export const Install = observer((props: Props) => { + const { installPath, supportedFormats, onChange, installFromInput, installFromSelectFileDialog } = props; + + return ( +
+ +
+
+ + } + /> +
+
+
+
+ + Pro-Tip: you can drag-n-drop tarball-file to this area + +
+ ); +}); + diff --git a/src/renderer/components/+extensions/installed-extensions.module.css b/src/renderer/components/+extensions/installed-extensions.module.css new file mode 100644 index 0000000000..831ece9024 --- /dev/null +++ b/src/renderer/components/+extensions/installed-extensions.module.css @@ -0,0 +1,25 @@ +.extensionName { + @apply font-bold; + color: var(--textColorAccent); +} + +.extensionDescription { + @apply mt-1; +} + +.enabled { + color: var(--colorOk); +} + +.title { + margin-bottom: 0!important; +} + +.noItemsIcon { + @apply opacity-10; + --size: 180px; +} + +.frozenRow { + @apply opacity-30 pointer-events-none; +} \ No newline at end of file diff --git a/src/renderer/components/+extensions/installed-extensions.tsx b/src/renderer/components/+extensions/installed-extensions.tsx new file mode 100644 index 0000000000..f896f410fd --- /dev/null +++ b/src/renderer/components/+extensions/installed-extensions.tsx @@ -0,0 +1,169 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import styles from "./installed-extensions.module.css"; +import React, { useMemo } from "react"; +import { ExtensionDiscovery, InstalledExtension } from "../../../extensions/extension-discovery"; +import { Icon } from "../icon"; +import { List } from "../list/list"; +import { MenuActions, MenuItem } from "../menu"; +import { Spinner } from "../spinner"; +import { ExtensionInstallationStateStore } from "./extension-install.store"; +import { cssNames } from "../../utils"; +import { observer } from "mobx-react"; +import type { Row } from "react-table"; +import type { LensExtensionId } from "../../../extensions/lens-extension"; + +interface Props { + extensions: InstalledExtension[]; + enable: (id: LensExtensionId) => void; + disable: (id: LensExtensionId) => void; + uninstall: (extension: InstalledExtension) => void; +} + +function getStatus(isEnabled: boolean) { + return isEnabled ? "Enabled" : "Disabled"; +} + +export const InstalledExtensions = observer(({ extensions, uninstall, enable, disable }: Props) => { + const filters = [ + (extension: InstalledExtension) => extension.manifest.name, + (extension: InstalledExtension) => getStatus(extension.isEnabled), + (extension: InstalledExtension) => extension.manifest.version, + ]; + + const columns = useMemo( + () => [ + { + Header: "Name", + accessor: "extension", + width: 200, + sortType: (rowA: Row, rowB: Row) => { // Custom sorting for extension name + const nameA = extensions[rowA.index].manifest.name; + const nameB = extensions[rowB.index].manifest.name; + + if (nameA > nameB) return -1; + if (nameB > nameA) return 1; + + return 0; + }, + }, + { + Header: "Version", + accessor: "version", + }, + { + Header: "Status", + accessor: "status" + }, + { + Header: "", + accessor: "actions", + disableSortBy: true, + width: 20, + className: "actions" + } + ], [] + ); + + const data = useMemo( + () => { + return extensions.map(extension => { + const { id, isEnabled, manifest } = extension; + const { name, description, version } = manifest; + const isUninstalling = ExtensionInstallationStateStore.isExtensionUninstalling(id); + + return { + extension: ( +
+
+
{name}
+
{description}
+
+
+ ), + version, + status: ( +
+ {getStatus(isEnabled)} +
+ ), + actions: ( + + {isEnabled ? ( + disable(id)} + > + + Disable + + ) : ( + enable(id)} + > + + Enable + + )} + uninstall(extension)} + > + + Uninstall + + + ) + }; + }); + }, [extensions, ExtensionInstallationStateStore.anyUninstalling] + ); + + if (!ExtensionDiscovery.getInstance().isLoaded) { + return
; + } + + if (extensions.length == 0) { + return ( +
+ +

+ There are no extensions installed. +

+

Please use the form above to install or drag tarbar-file here.

+
+ ); + } + + return ( +
+ Installed extensions} + columns={columns} + data={data} + items={extensions} + filters={filters} + /> +
+ ); +}); diff --git a/src/renderer/components/+extensions/notice.module.css b/src/renderer/components/+extensions/notice.module.css new file mode 100644 index 0000000000..81b90c48ad --- /dev/null +++ b/src/renderer/components/+extensions/notice.module.css @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +.notice { + @apply p-8 flex flex-col gap-2 mb-14 mt-3 rounded-lg; + background-color: var(--inputControlBackground); + border: 1px solid var(--boxShadow); + color: var(--textColorTertiary); +} \ No newline at end of file diff --git a/src/renderer/components/+extensions/notice.tsx b/src/renderer/components/+extensions/notice.tsx new file mode 100644 index 0000000000..d224b65a7d --- /dev/null +++ b/src/renderer/components/+extensions/notice.tsx @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import styles from "./notice.module.css"; +import React from "react"; +import { docsUrl } from "../../../common/vars"; + +export function Notice() { + return ( +
+

+ Add new features via Lens Extensions.{" "} + Check out docs{" "} + and list of available extensions. +

+
+ ); +} diff --git a/src/renderer/components/app.scss b/src/renderer/components/app.scss index c5db9c6adf..b4c15b89fd 100755 --- a/src/renderer/components/app.scss +++ b/src/renderer/components/app.scss @@ -19,6 +19,9 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; @import "~flex.box"; @import "fonts"; diff --git a/src/renderer/components/app.tsx b/src/renderer/components/app.tsx index f04fb46c5c..16a1603d63 100755 --- a/src/renderer/components/app.tsx +++ b/src/renderer/components/app.tsx @@ -18,7 +18,6 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - import React from "react"; import { observable } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; diff --git a/src/renderer/components/button/button.scss b/src/renderer/components/button/button.scss index ed75093202..0b8fd90d99 100644 --- a/src/renderer/components/button/button.scss +++ b/src/renderer/components/button/button.scss @@ -112,6 +112,10 @@ } } + &:focus { + outline: none; + } + &:focus:not(:active) { transition: box-shadow 350ms; box-shadow: inset 0 0 0 2px rgba(255, 255, 255, .5); diff --git a/src/renderer/components/hotbar/hotbar-cell.tsx b/src/renderer/components/hotbar/hotbar-cell.tsx index e3328dcbed..e22eed14f0 100644 --- a/src/renderer/components/hotbar/hotbar-cell.tsx +++ b/src/renderer/components/hotbar/hotbar-cell.tsx @@ -28,7 +28,7 @@ import { cssNames } from "../../utils"; interface Props extends HTMLAttributes { children?: ReactNode; index: number; - innerRef?: React.LegacyRef; + innerRef?: React.Ref; } export function HotbarCell({ innerRef, children, className, ...rest }: Props) { diff --git a/src/renderer/components/input/drop-file-input.scss b/src/renderer/components/input/drop-file-input.scss index 5a6aae99c8..aa0ca4f9c1 100644 --- a/src/renderer/components/input/drop-file-input.scss +++ b/src/renderer/components/input/drop-file-input.scss @@ -21,10 +21,7 @@ .DropFileInput { &.droppable { - box-shadow: 0 0 0 5px $primary; // fixme: might not work sometimes - - > * { - pointer-events: none; - } + box-shadow: inset 0 0 0 6px $primary; + transition: all 0.3s; } } \ No newline at end of file diff --git a/src/renderer/components/input/drop-file-input.tsx b/src/renderer/components/input/drop-file-input.tsx index 1062e1ce06..9fac543a80 100644 --- a/src/renderer/components/input/drop-file-input.tsx +++ b/src/renderer/components/input/drop-file-input.tsx @@ -39,15 +39,21 @@ export interface DropFileMeta { @observer export class DropFileInput extends React.Component { @observable dropAreaActive = false; + dragCounter = 0; // Counter preventing firing onDragLeave() too early (https://stackoverflow.com/questions/7110353/html5-dragleave-fired-when-hovering-a-child-element) @autobind() onDragEnter() { + this.dragCounter++; this.dropAreaActive = true; } @autobind() onDragLeave() { - this.dropAreaActive = false; + this.dragCounter--; + + if (this.dragCounter == 0) { + this.dropAreaActive = false; + } } @autobind() diff --git a/src/renderer/components/input/input.scss b/src/renderer/components/input/input.scss index a31d27cdfb..224fec829c 100644 --- a/src/renderer/components/input/input.scss +++ b/src/renderer/components/input/input.scss @@ -50,6 +50,7 @@ position: relative; padding: $padding /4 * 3 0; border-bottom: 1px solid $halfGray; + line-height: 1; &:after { content: ""; diff --git a/src/renderer/components/input/search-input.scss b/src/renderer/components/input/search-input.scss index d5d82e7d0c..2c9149c2cc 100644 --- a/src/renderer/components/input/search-input.scss +++ b/src/renderer/components/input/search-input.scss @@ -30,12 +30,13 @@ color: inherit; background: none; border: none; - border-radius: $radius; - box-shadow: 0 0 0 1px $halfGray; + border-radius: var(--border-radius); + box-shadow: 0 0 0 1px var(--halfGray); padding: var(--spacing); .Icon { - height: $margin * 2; + height: calc(var(--margin) * 2); + width: calc(var(--margin) * 2); } } diff --git a/src/renderer/components/layout/page-layout.scss b/src/renderer/components/layout/page-layout.scss index 39d39efbf3..8b2c30494e 100644 --- a/src/renderer/components/layout/page-layout.scss +++ b/src/renderer/components/layout/page-layout.scss @@ -111,6 +111,10 @@ &.active { background-color: var(--navSelectedBackground); } + + > .label { + width: 100%; + } } } } @@ -171,10 +175,6 @@ } } - a { - color: var(--colorInfo); - } - section { display: flex; flex-direction: column; @@ -189,16 +189,26 @@ h1, h2 { color: var(--textColorAccent); - text-transform: uppercase; + } + + h1 { + color: var(--textColorAccent); + font-size: 22px; + font-weight: bold; + margin-bottom: 10px; } h2 { - font-size: 16px; + font-size: 18px; line-height: 20px; font-weight: 600; margin-bottom: 20px; } + a { + color: var(--colorInfo); + } + .hint { margin-top: 8px; font-size: 14px; diff --git a/src/renderer/components/list/list.module.css b/src/renderer/components/list/list.module.css new file mode 100644 index 0000000000..49226031bf --- /dev/null +++ b/src/renderer/components/list/list.module.css @@ -0,0 +1,8 @@ +.notFound { + @apply flex items-center justify-center h-24; + color: var(--textColorDimmed); +} + +.searchInput>label { + box-shadow: none!important; +} \ No newline at end of file diff --git a/src/renderer/components/list/list.tsx b/src/renderer/components/list/list.tsx new file mode 100644 index 0000000000..309d702ef8 --- /dev/null +++ b/src/renderer/components/list/list.tsx @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import styles from "./list.module.css"; +import React, { useState } from "react"; +import { SearchInput } from "../input"; + +import type { UseTableOptions } from "react-table"; +import { ReactTable } from "../table/react-table"; +export type SearchFilter = (item: object) => string | number; + +interface Props extends UseTableOptions { + items: object[]; + filters: SearchFilter[]; + title?: React.ReactNode; +} + +export function List({ columns, data, title, items, filters, }: Props) { + const [search, setSearch] = useState(""); + const query = search.toLowerCase(); + + const filteredData = data.filter((item, index) => ( + filters.some(getText => String(getText(items[index])).toLowerCase().includes(query)) + )); + + return ( + <> +
+
+ {title} +
+
+ +
+
+ + {filteredData.length == 0 && ( +
No data found
+ )} + + ); +} diff --git a/src/renderer/components/select/select.scss b/src/renderer/components/select/select.scss index 753e9c8949..55fddec850 100644 --- a/src/renderer/components/select/select.scss +++ b/src/renderer/components/select/select.scss @@ -52,6 +52,7 @@ html { min-height: 0; box-shadow: 0 0 0 1px $halfGray; cursor: pointer; + line-height: 1; &--is-focused { box-shadow: 0 0 0 1px $primary; diff --git a/src/renderer/components/table/react-table.module.css b/src/renderer/components/table/react-table.module.css new file mode 100644 index 0000000000..0d6ab78560 --- /dev/null +++ b/src/renderer/components/table/react-table.module.css @@ -0,0 +1,43 @@ +.table { + border-spacing: 0; + border-top: thin solid var(--hrColor); +} + +.thead { + @apply overflow-hidden font-bold; + border-bottom: thin solid var(--hrColor); + color: var(--textColorAccent); + padding-top: 7px; + height: 33px; +} + +.thead .tr { + margin: 0 var(--margin); +} + +.tr { + margin: calc(var(--margin) * 1.6) var(--margin); +} + +.th { + @apply relative whitespace-nowrap; + padding: 0 var(--padding); +} + +.headIcon { + font-weight: normal; + color: var(--textColorAccent); +} + +.disabledArrow { + opacity: 0.3; +} + +.td { + @apply flex items-center; + padding: 0 var(--padding); +} + +.actions { + @apply justify-end; +} \ No newline at end of file diff --git a/src/renderer/components/table/react-table.tsx b/src/renderer/components/table/react-table.tsx new file mode 100644 index 0000000000..016ad16337 --- /dev/null +++ b/src/renderer/components/table/react-table.tsx @@ -0,0 +1,109 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import styles from "./react-table.module.css"; +import React from "react"; +import { useCallback, useMemo } from "react"; +import { useFlexLayout, useSortBy, useTable, UseTableOptions } from "react-table"; +import { Icon } from "../icon"; +import { cssNames } from "../../utils"; + +interface Props extends UseTableOptions { + headless?: boolean; +} + +export function ReactTable({ columns, data, headless }: Props) { + const defaultColumn = useMemo( + () => ({ + minWidth: 20, + width: 100, + }), + [] + ); + + const { + getTableProps, + getTableBodyProps, + headerGroups, + rows, + prepareRow, + } = useTable( + { + columns, + data, + defaultColumn, + }, + useFlexLayout, + useSortBy, + ); + + const RenderRow = useCallback( + ({ index, style }) => { + const row = rows[index]; + + prepareRow(row); + + return ( +
+ {row.cells.map((cell, index) => ( +
+ {cell.render("Cell")} +
+ ))} +
+ ); + }, + [columns, prepareRow, rows] + ); + + return ( +
+ {!headless &&
+ {headerGroups.map(headerGroup => ( +
+ {headerGroup.headers.map(column => ( +
+ {column.render("Header")} + {/* Sort direction indicator */} + + {column.isSorted + ? column.isSortedDesc + ? + : + : !column.disableSortBy && } + +
+ ))} +
+ ))} +
} + +
+ {rows.map((row, index) => RenderRow({index}))} +
+
+ ); +} diff --git a/src/renderer/fonts/MaterialIcons-Regular.ttf b/src/renderer/fonts/MaterialIcons-Regular.ttf index e50801b3b620af91f824c7655df7d064db05b764..453b3e4cbcb0e98b6a67789c0220fdcf2d229323 100644 GIT binary patch delta 79282 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

ll`9F@6FmT+YZey-zKj|7E9k=zc5WaBp$yB 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 diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000000..7c1c91de4e --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +module.exports = { + purge: ["src/**/*.tsx"], + darkMode: "class", + theme: { + fontFamily: { + sans: ["Roboto", "Helvetica", "Arial", "sans-serif"], + }, + extend: {}, + }, + variants: { + extend: {}, + }, + plugins: [], +}; diff --git a/tsconfig.json b/tsconfig.json index 2d72839134..e0cf840d06 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,7 +30,8 @@ "node_modules/*", "types/*" ] - } + }, + "plugins": [{ "name": "typescript-plugin-css-modules" }] }, "ts-node": { "compilerOptions": { diff --git a/types/mocks.d.ts b/types/mocks.d.ts index f29ca29975..4c013fc930 100644 --- a/types/mocks.d.ts +++ b/types/mocks.d.ts @@ -36,3 +36,7 @@ declare module "*.ttf" { const content: string; export = content; } +declare module "*.module.css" { + const classes: { [key: string]: string }; + export default classes; +} diff --git a/types/react-table.config.d.ts b/types/react-table.config.d.ts new file mode 100644 index 0000000000..0f2515699b --- /dev/null +++ b/types/react-table.config.d.ts @@ -0,0 +1,141 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import { + UseColumnOrderInstanceProps, + UseColumnOrderState, + UseExpandedHooks, + UseExpandedInstanceProps, + UseExpandedOptions, + UseExpandedRowProps, + UseExpandedState, + UseFiltersColumnOptions, + UseFiltersColumnProps, + UseFiltersInstanceProps, + UseFiltersOptions, + UseFiltersState, + UseGlobalFiltersColumnOptions, + UseGlobalFiltersInstanceProps, + UseGlobalFiltersOptions, + UseGlobalFiltersState, + UseGroupByCellProps, + UseGroupByColumnOptions, + UseGroupByColumnProps, + UseGroupByHooks, + UseGroupByInstanceProps, + UseGroupByOptions, + UseGroupByRowProps, + UseGroupByState, + UsePaginationInstanceProps, + UsePaginationOptions, + UsePaginationState, + UseResizeColumnsColumnOptions, + UseResizeColumnsColumnProps, + UseResizeColumnsOptions, + UseResizeColumnsState, + UseRowSelectHooks, + UseRowSelectInstanceProps, + UseRowSelectOptions, + UseRowSelectRowProps, + UseRowSelectState, + UseRowStateCellProps, + UseRowStateInstanceProps, + UseRowStateOptions, + UseRowStateRowProps, + UseRowStateState, + UseSortByColumnOptions, + UseSortByColumnProps, + UseSortByHooks, + UseSortByInstanceProps, + UseSortByOptions, + UseSortByState +} from "react-table"; + +declare module "react-table" { + // take this file as-is, or comment out the sections that don't apply to your plugin configuration + + export interface TableOptions> + extends UseExpandedOptions, + UseFiltersOptions, + UseGlobalFiltersOptions, + UseGroupByOptions, + UsePaginationOptions, + UseResizeColumnsOptions, + UseRowSelectOptions, + UseRowStateOptions, + UseSortByOptions, + // note that having Record here allows you to add anything to the options, this matches the spirit of the + // underlying js library, but might be cleaner if it's replaced by a more specific type that matches your + // feature set, this is a safe default. + Record {} + + export interface Hooks = Record> + extends UseExpandedHooks, + UseGroupByHooks, + UseRowSelectHooks, + UseSortByHooks {} + + export interface TableInstance = Record> + extends UseColumnOrderInstanceProps, + UseExpandedInstanceProps, + UseFiltersInstanceProps, + UseGlobalFiltersInstanceProps, + UseGroupByInstanceProps, + UsePaginationInstanceProps, + UseRowSelectInstanceProps, + UseRowStateInstanceProps, + UseSortByInstanceProps {} + + export interface TableState = Record> + extends UseColumnOrderState, + UseExpandedState, + UseFiltersState, + UseGlobalFiltersState, + UseGroupByState, + UsePaginationState, + UseResizeColumnsState, + UseRowSelectState, + UseRowStateState, + UseSortByState {} + + export interface ColumnInterface = Record> + extends UseFiltersColumnOptions, + UseGlobalFiltersColumnOptions, + UseGroupByColumnOptions, + UseResizeColumnsColumnOptions, + UseSortByColumnOptions {} + + export interface ColumnInstance = Record> + extends UseFiltersColumnProps, + UseGroupByColumnProps, + UseResizeColumnsColumnProps, + UseSortByColumnProps {} + + export interface Cell = Record> + extends UseGroupByCellProps, + UseRowStateCellProps {} + + export interface Row = Record> + extends UseExpandedRowProps, + UseGroupByRowProps, + UseRowSelectRowProps, + UseRowStateRowProps {} +} diff --git a/webpack.renderer.ts b/webpack.renderer.ts index 9387619dca..eafc636a5c 100755 --- a/webpack.renderer.ts +++ b/webpack.renderer.ts @@ -120,14 +120,20 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura { test: /\.s?css$/, use: [ - // https://webpack.js.org/plugins/mini-css-extract-plugin/ isDevelopment ? "style-loader" : MiniCssExtractPlugin.loader, { loader: "css-loader", options: { - sourceMap: isDevelopment + modules: { + auto: true, + mode: "local", + localIdentName: "[name]__[local]--[hash:base64:5]", + } }, }, + { + loader: "postcss-loader" + }, { loader: "sass-loader", options: { @@ -139,9 +145,9 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura ] }, } - }, + } ] - } + }, ] }, diff --git a/yarn.lock b/yarn.lock index 1839db4d2b..df3bd7602d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -449,6 +449,13 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@fullhuman/postcss-purgecss@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz#47af7b87c9bfb3de4bc94a38f875b928fffdf339" + integrity sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA== + dependencies: + purgecss "^3.1.3" + "@hapi/address@4.x.x": version "4.0.1" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-4.0.1.tgz#267301ddf7bc453718377a6fb3832a2f04a721dd" @@ -820,22 +827,22 @@ dependencies: cross-spawn "^7.0.1" -"@material-ui/core@^4.10.1": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.10.1.tgz#e3db4ca55d2af6cc23a1159ef5c32ad97c43c39c" - integrity sha512-bJb/07JFTht0oSjoWMu0j7r1mx4EbJ2ZHx+OKiY+i6IYW/4JPZ1J6rZuFS2b9jT+slSONPZaZq/kHitbE5lcig== +"@material-ui/core@^4.11.4": + version "4.11.4" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.4.tgz#4fb9fe5dec5dcf780b687e3a40cff78b2b9640a4" + integrity sha512-oqb+lJ2Dl9HXI9orc6/aN8ZIAMkeThufA5iZELf2LQeBn2NtjVilF5D2w7e9RpntAzDb4jK5DsVhkfOvFY/8fg== dependencies: "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.10.0" - "@material-ui/system" "^4.9.14" - "@material-ui/types" "^5.1.0" - "@material-ui/utils" "^4.9.12" + "@material-ui/styles" "^4.11.4" + "@material-ui/system" "^4.11.3" + "@material-ui/types" "5.1.0" + "@material-ui/utils" "^4.11.2" "@types/react-transition-group" "^4.2.0" clsx "^1.0.4" hoist-non-react-statics "^3.3.2" popper.js "1.16.1-lts" prop-types "^15.7.2" - react-is "^16.8.0" + react-is "^16.8.0 || ^17.0.0" react-transition-group "^4.4.0" "@material-ui/icons@^4.11.2": @@ -856,39 +863,39 @@ prop-types "^15.7.2" react-is "^16.8.0 || ^17.0.0" -"@material-ui/styles@^4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.10.0.tgz#2406dc23aa358217aa8cc772e6237bd7f0544071" - integrity sha512-XPwiVTpd3rlnbfrgtEJ1eJJdFCXZkHxy8TrdieaTvwxNYj42VnnCyFzxYeNW9Lhj4V1oD8YtQ6S5Gie7bZDf7Q== +"@material-ui/styles@^4.11.4": + version "4.11.4" + resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.4.tgz#eb9dfccfcc2d208243d986457dff025497afa00d" + integrity sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew== dependencies: "@babel/runtime" "^7.4.4" "@emotion/hash" "^0.8.0" - "@material-ui/types" "^5.1.0" - "@material-ui/utils" "^4.9.6" + "@material-ui/types" "5.1.0" + "@material-ui/utils" "^4.11.2" clsx "^1.0.4" csstype "^2.5.2" hoist-non-react-statics "^3.3.2" - jss "^10.0.3" - jss-plugin-camel-case "^10.0.3" - jss-plugin-default-unit "^10.0.3" - jss-plugin-global "^10.0.3" - jss-plugin-nested "^10.0.3" - jss-plugin-props-sort "^10.0.3" - jss-plugin-rule-value-function "^10.0.3" - jss-plugin-vendor-prefixer "^10.0.3" + jss "^10.5.1" + jss-plugin-camel-case "^10.5.1" + jss-plugin-default-unit "^10.5.1" + jss-plugin-global "^10.5.1" + jss-plugin-nested "^10.5.1" + jss-plugin-props-sort "^10.5.1" + jss-plugin-rule-value-function "^10.5.1" + jss-plugin-vendor-prefixer "^10.5.1" prop-types "^15.7.2" -"@material-ui/system@^4.9.14": - version "4.9.14" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.9.14.tgz#4b00c48b569340cefb2036d0596b93ac6c587a5f" - integrity sha512-oQbaqfSnNlEkXEziDcJDDIy8pbvwUmZXWNqlmIwDqr/ZdCK8FuV3f4nxikUh7hvClKV2gnQ9djh5CZFTHkZj3w== +"@material-ui/system@^4.11.3": + version "4.11.3" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.11.3.tgz#466bc14c9986798fd325665927c963eb47cc4143" + integrity sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw== dependencies: "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.9.6" + "@material-ui/utils" "^4.11.2" csstype "^2.5.2" prop-types "^15.7.2" -"@material-ui/types@^5.1.0": +"@material-ui/types@5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== @@ -902,15 +909,6 @@ prop-types "^15.7.2" react-is "^16.8.0 || ^17.0.0" -"@material-ui/utils@^4.9.12", "@material-ui/utils@^4.9.6": - version "4.9.12" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.9.12.tgz#0d639f1c1ed83fffb2ae10c21d15a938795d9e65" - integrity sha512-/0rgZPEOcZq5CFA4+4n6Q6zk7fi8skHhH2Bcra8R3epoJEYy5PL55LuMazPtPH1oKeRausDV/Omz4BbgFsn1HQ== - dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0" - "@nodelib/fs.scandir@2.1.3": version "2.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" @@ -1403,6 +1401,16 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/json-schema@^7.0.5": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/jsonpath@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@types/jsonpath/-/jsonpath-0.2.0.tgz#13c62db22a34d9c411364fac79fd374d63445aa1" @@ -1625,6 +1633,13 @@ "@types/react-dom" "*" "@types/react-transition-group" "*" +"@types/react-table@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@types/react-table/-/react-table-7.7.0.tgz#cb441a03af7303efd570b816b5ed0ea4d35ce705" + integrity sha512-xx2PJO9a0FEY7s96KWmadrhWNGxkNZgMnoKbXKPepqzz4FHKVds1tPDqWOU7NpP+dAsRli/wn0ysZ4MxWZI4Nw== + dependencies: + "@types/react" "*" + "@types/react-transition-group@*", "@types/react-transition-group@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d" @@ -2212,6 +2227,20 @@ acorn-jsx@^5.2.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== +acorn-node@^1.6.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + acorn-walk@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" @@ -2222,6 +2251,11 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn@^7.0.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + acorn@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe" @@ -2279,6 +2313,11 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.5.5: version "6.12.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" @@ -2861,6 +2900,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3254,7 +3298,7 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -bytes@3.1.0: +bytes@3.1.0, bytes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== @@ -3334,6 +3378,25 @@ call-limit@^1.1.1: resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" integrity sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ== +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3347,6 +3410,11 @@ camel-case@^4.1.1: pascal-case "^3.1.1" tslib "^1.10.0" +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -3466,6 +3534,21 @@ chartjs-color@^2.1.0: chartjs-color-string "^0.6.0" color-convert "^1.9.3" +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -3772,6 +3855,14 @@ color-string@^1.5.2: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-string@^1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" + integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + color@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" @@ -3788,6 +3879,19 @@ color@^3.1.2: color-convert "^1.9.1" color-string "^1.5.2" +color@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + colornames@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96" @@ -3853,6 +3957,11 @@ commander@^5.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +commander@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -4020,6 +4129,13 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +copy-anything@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.3.tgz#842407ba02466b0df844819bbe3baebbe5d45d87" + integrity sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ== + dependencies: + is-what "^3.12.0" + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -4057,6 +4173,16 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" @@ -4210,25 +4336,25 @@ css-element-queries@^1.2.3: integrity sha512-QK9uovYmKTsV2GXWQiMOByVNrLn2qz6m3P7vWpOR4IdD6I3iXoDw5qtgJEN3Xq7gIbdHVKvzHjdAtcl+4Arc4Q== css-loader@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz#95ac16468e1adcd95c844729e0bb167639eb0bcf" - integrity sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== dependencies: camelcase "^5.3.1" cssesc "^3.0.0" icss-utils "^4.1.1" loader-utils "^1.2.3" normalize-path "^3.0.0" - postcss "^7.0.27" + postcss "^7.0.32" postcss-modules-extract-imports "^2.0.0" postcss-modules-local-by-default "^3.0.2" postcss-modules-scope "^2.2.0" postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.3" - schema-utils "^2.6.6" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" semver "^6.3.0" -css-parse@^2.0.0: +css-parse@^2.0.0, css-parse@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= @@ -4245,6 +4371,19 @@ css-select@^1.1.0: domutils "1.5.1" nth-check "~1.0.1" +css-selector-tokenizer@^0.7.0: + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +css-unit-converter@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" + integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== + css-value@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" @@ -4314,7 +4453,7 @@ cssstyle@^2.2.0: dependencies: cssom "~0.3.6" -csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.7, csstype@^2.6.5, csstype@^2.6.7: +csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.7, csstype@^2.6.7: version "2.6.10" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== @@ -4371,7 +4510,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" -debug@3.1.0: +debug@3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== @@ -4541,6 +4680,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -4612,6 +4756,15 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== +detective@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" + integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== + dependencies: + acorn-node "^1.6.1" + defined "^1.0.0" + minimist "^1.1.1" + dev-null@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/dev-null/-/dev-null-0.1.1.tgz#5a205ce3c2b2ef77b6238d6ba179eb74c6a0e818" @@ -4634,6 +4787,11 @@ diagnostics@^1.1.1: enabled "1.0.x" kuler "1.0.x" +didyoumean@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" + integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= + diff-sequences@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" @@ -4680,6 +4838,11 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + dmg-builder@22.10.5: version "22.10.5" resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.10.5.tgz#65a33c106ead5a350c7de8997c546559bd6e0e7c" @@ -5132,6 +5295,13 @@ errlop@^4.0.0: resolved "https://registry.yarnpkg.com/errlop/-/errlop-4.1.0.tgz#8e7b8f4f1bf0a6feafce4d14f0c0cf4bf5ef036b" integrity sha512-vul6gGBuVt0M2TPi1/WrcL86+Hb3Q2Tpu3TME3sbVhZrYf7J1ZMHCodI25RQKCVurh56qTfvgM0p3w5cT4reSQ== +errno@^0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -5752,6 +5922,18 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" +fast-glob@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -5767,6 +5949,11 @@ fast-safe-stringify@^2.0.4: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + fastq@^1.6.0: version "1.9.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" @@ -6187,6 +6374,11 @@ fsevents@^2.1.2, fsevents@~2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + fstream@^1.0.0, fstream@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" @@ -6228,6 +6420,13 @@ gaze@^1.0.0, gaze@~1.1.2: dependencies: globule "^1.0.0" +generic-names@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" + integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc= + dependencies: + loader-utils "^0.2.16" + genfun@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" @@ -6320,6 +6519,21 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= + dependencies: + is-glob "^2.0.0" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -6803,6 +7017,11 @@ html-minifier-terser@^5.0.1: relateurl "^0.2.7" terser "^4.6.3" +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + html-webpack-plugin@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz#53bf8f6d696c4637d5b656d3d9863d89ce8174fd" @@ -6970,6 +7189,13 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +icss-utils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-3.0.1.tgz#ee70d3ae8cac38c6be5ed91e851b27eed343ad0f" + integrity sha1-7nDTroysOMa+XtkehRsn7tNDrQ8= + dependencies: + postcss "^6.0.2" + icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" @@ -7021,6 +7247,11 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -7031,6 +7262,21 @@ immer@^8.0.1: resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-fresh@^3.0.0, import-fresh@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" @@ -7047,6 +7293,13 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -7083,6 +7336,13 @@ include-media@^1.4.9: resolved "https://registry.yarnpkg.com/include-media/-/include-media-1.4.9.tgz#d0020b7be3eb2d54868a20943595ce380e0bc43b" integrity sha1-0AILe+PrLVSGiiCUNZXOOA4LxDs= +indefinite-observable@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-2.0.1.tgz#574af29bfbc17eb5947793797bddc94c9d859400" + integrity sha512-G8vgmork+6H9S8lUAg1gtXEj2JxIQTo0g2PbFiYOdjkziSI0F7UYBiVwhZRuixhBCNGczAls34+5HJPyZysvxQ== + dependencies: + symbol-observable "1.2.0" + indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" @@ -7372,11 +7632,21 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + is-docker@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= + is-electron@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.0.tgz#8943084f09e8b731b3a7a0298a7b5d56f6b7eef0" @@ -7394,6 +7664,11 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -7426,6 +7701,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-glob@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -7630,6 +7912,11 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-what@^3.12.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -8378,6 +8665,11 @@ json5@2.x, json5@^2.1.2: dependencies: minimist "^1.2.5" +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -8430,73 +8722,74 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jss-plugin-camel-case@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.2.0.tgz#ff60104a8b951a1faec12884bf7fd63a36946e4f" - integrity sha512-N5RF3TV+ejKfnq1I/wfp4uj8IVgJCRw4LZQyxW6XiYr6qX2CJsrVvF/lxYIkEL/C19Lgso5D7zy1uxlRWJWGjQ== +jss-plugin-camel-case@^10.5.1: + version "10.6.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.6.0.tgz#93d2cd704bf0c4af70cc40fb52d74b8a2554b170" + integrity sha512-JdLpA3aI/npwj3nDMKk308pvnhoSzkW3PXlbgHAzfx0yHWnPPVUjPhXFtLJzgKZge8lsfkUxvYSQ3X2OYIFU6A== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.2.0" + jss "10.6.0" -jss-plugin-default-unit@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.2.0.tgz#d8defa4f04c33d4fa9e047709a28f058bdc7385a" - integrity sha512-uni8vfNiCUffm+C26+bhEVX9bWiI1f+bzdDJ3hsgRD1cLey5qZ8zVR6IVa2OVWTG7mMN2eOdG2GxpSCOEuG54Q== +jss-plugin-default-unit@^10.5.1: + version "10.6.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.6.0.tgz#af47972486819b375f0f3a9e0213403a84b5ef3b" + integrity sha512-7y4cAScMHAxvslBK2JRK37ES9UT0YfTIXWgzUWD5euvR+JR3q+o8sQKzBw7GmkQRfZijrRJKNTiSt1PBsLI9/w== dependencies: "@babel/runtime" "^7.3.1" - jss "10.2.0" + jss "10.6.0" -jss-plugin-global@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.2.0.tgz#fda990bf9880c394eeb06969b3809a88ad5d0aa0" - integrity sha512-l2Y1sRXnhMgw7Hq0iH8loWaokIdmXSCD6BE9uporzt48K/cEAkiy1Qx7oeuBE5wHahlOeIASZRGQlm09u5ckrA== +jss-plugin-global@^10.5.1: + version "10.6.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.6.0.tgz#3e8011f760f399cbadcca7f10a485b729c50e3ed" + integrity sha512-I3w7ji/UXPi3VuWrTCbHG9rVCgB4yoBQLehGDTmsnDfXQb3r1l3WIdcO8JFp9m0YMmyy2CU7UOV6oPI7/Tmu+w== dependencies: "@babel/runtime" "^7.3.1" - jss "10.2.0" + jss "10.6.0" -jss-plugin-nested@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.2.0.tgz#834cbd1c22c3a87287022c4edc6566db021cc9fc" - integrity sha512-4pO6fiWMbtEp8eJlBUaS1vg1bFjCBZsN1Kl0mVqX5jdQJ/7hvKWsX2pIKGFIu9eOcyr30Nacy6NxGiAlYJjbFA== +jss-plugin-nested@^10.5.1: + version "10.6.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.6.0.tgz#5f83c5c337d3b38004834e8426957715a0251641" + integrity sha512-fOFQWgd98H89E6aJSNkEh2fAXquC9aZcAVjSw4q4RoQ9gU++emg18encR4AT4OOIFl4lQwt5nEyBBRn9V1Rk8g== dependencies: "@babel/runtime" "^7.3.1" - jss "10.2.0" + jss "10.6.0" tiny-warning "^1.0.2" -jss-plugin-props-sort@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.2.0.tgz#c7dd7fc3e951a9fd08e4597db4af054c54a76483" - integrity sha512-ihJwnaFLdyfTz6azGkz3WEwLkrh1p4X8PKBdCYaIsTnbNcCh/aULzxI7PkVjkd2Z/zCVK2CFfw3EE4Wxhwo1XQ== +jss-plugin-props-sort@^10.5.1: + version "10.6.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.6.0.tgz#297879f35f9fe21196448579fee37bcde28ce6bc" + integrity sha512-oMCe7hgho2FllNc60d9VAfdtMrZPo9n1Iu6RNa+3p9n0Bkvnv/XX5San8fTPujrTBScPqv9mOE0nWVvIaohNuw== dependencies: "@babel/runtime" "^7.3.1" - jss "10.2.0" + jss "10.6.0" -jss-plugin-rule-value-function@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.2.0.tgz#5a129ebfff57e47b3ee3f1fa7b1b7e6025605b02" - integrity sha512-16Y612DFhOCdMVTQYMxPuGQr7YIxcy6ehrQV408z8njYajc1Qtpc9JVl/wmTJFIYVRKfY9/0HQXSxD3Z3Gn0Hw== +jss-plugin-rule-value-function@^10.5.1: + version "10.6.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.6.0.tgz#3c1a557236a139d0151e70a82c810ccce1c1c5ea" + integrity sha512-TKFqhRTDHN1QrPTMYRlIQUOC2FFQb271+AbnetURKlGvRl/eWLswcgHQajwuxI464uZk91sPiTtdGi7r7XaWfA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.2.0" + jss "10.6.0" tiny-warning "^1.0.2" -jss-plugin-vendor-prefixer@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.2.0.tgz#d279376792454db85a6719a431fe0666e1b690cb" - integrity sha512-r6HytNgrGPAbW+vrcRtY+nOMLaEwBz8HSDtsuQFU06bAH4+NOK34QRxie4jOepLAmmbpjxWt6f4c8CUFGmiFCA== +jss-plugin-vendor-prefixer@^10.5.1: + version "10.6.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.6.0.tgz#e1fcd499352846890c38085b11dbd7aa1c4f2c78" + integrity sha512-doJ7MouBXT1lypLLctCwb4nJ6lDYqrTfVS3LtXgox42Xz0gXusXIIDboeh6UwnSmox90QpVnub7au8ybrb0krQ== dependencies: "@babel/runtime" "^7.3.1" css-vendor "^2.0.8" - jss "10.2.0" + jss "10.6.0" -jss@10.2.0, jss@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.2.0.tgz#5f0b18dc506172ca0306f49d9222ee333800cf34" - integrity sha512-WyG2Jm8nEbYHIVx0UIitgS7R1SXwWpQ1p+SHeI2HNrNR/DSEBXR8l0XYqNdVOCvKnFDPwVWVW7EFlhPh0tYA2w== +jss@10.6.0, jss@^10.5.1: + version "10.6.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.6.0.tgz#d92ff9d0f214f65ca1718591b68e107be4774149" + integrity sha512-n7SHdCozmxnzYGXBHe0NsO0eUf9TvsHVq2MXvi4JmTn3x5raynodDVE/9VQmBdWFyyj9HpHZ2B4xNZ7MMy7lkw== dependencies: "@babel/runtime" "^7.3.1" - csstype "^2.6.5" + csstype "^3.0.2" + indefinite-observable "^2.0.1" is-in-browser "^1.1.3" tiny-warning "^1.0.2" @@ -8625,6 +8918,22 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +less@^3.11.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" + integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw== + dependencies: + copy-anything "^2.0.1" + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + native-request "^1.0.5" + source-map "~0.6.0" + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -8827,6 +9136,16 @@ loader-utils@1.2.3: emojis-list "^2.0.0" json5 "^1.0.1" +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" @@ -8907,6 +9226,11 @@ lodash._root@~3.0.0: resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -8927,6 +9251,16 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +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.topath@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009" + integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak= + lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -8942,7 +9276,7 @@ lodash.without@~4.4.0: resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -9051,7 +9385,7 @@ make-dir@^1.0.0, make-dir@^1.3.0: dependencies: pify "^3.0.0" -make-dir@^2.0.0: +make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -9297,7 +9631,7 @@ mime-types@^2.1.12, mime-types@^2.1.26, mime-types@~2.1.17, mime-types@~2.1.19, dependencies: mime-db "1.44.0" -mime@1.6.0: +mime@1.6.0, mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -9451,7 +9785,7 @@ mkdirp-classic@^0.5.2: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@1.x, mkdirp@^1.0.3: +mkdirp@1.x, mkdirp@^1.0.3, mkdirp@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -9499,6 +9833,11 @@ mock-fs@^4.12.0: resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.12.0.tgz#a5d50b12d2d75e5bec9dac3b67ffe3c41d31ade4" integrity sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ== +modern-normalize@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/modern-normalize/-/modern-normalize-1.1.0.tgz#da8e80140d9221426bd4f725c6e11283d34f90b7" + integrity sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA== + moment-timezone@^0.5.33: version "0.5.33" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" @@ -9578,6 +9917,11 @@ nan@^2.12.1, nan@^2.13.2, nan@^2.14.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== +nanoid@^3.1.22: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -9600,6 +9944,11 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +native-request@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.0.8.tgz#8f66bf606e0f7ea27c0e5995eb2f5d03e33ae6fb" + integrity sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag== + native-url@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" @@ -9652,6 +10001,13 @@ node-addon-api@^3.0.2: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.2.tgz#04bc7b83fd845ba785bb6eae25bc857e1ef75681" integrity sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg== +node-emoji@^1.8.1: + 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-fetch-npm@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" @@ -10227,6 +10583,11 @@ object-hash@^2.0.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== +object-hash@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09" + integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== + object-inspect@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" @@ -10742,6 +11103,16 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.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" @@ -11012,6 +11383,69 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-filter-plugins@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-3.0.1.tgz#9d226e946d56542ab7c26123053459a331df545d" + integrity sha512-tRKbW4wWBEkSSFuJtamV2wkiV9rj6Yy7P3Y13+zaynlPEEZt8EgYKn3y/RBpMeIhNmHXFlSdzofml65hD5OafA== + dependencies: + postcss "^6.0.14" + +postcss-functions@^3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e" + integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4= + dependencies: + glob "^7.1.2" + object-assign "^4.1.1" + postcss "^6.0.9" + postcss-value-parser "^3.3.0" + +postcss-icss-keyframes@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/postcss-icss-keyframes/-/postcss-icss-keyframes-0.2.1.tgz#80c4455e0112b0f2f9c3c05ac7515062bb9ff295" + integrity sha1-gMRFXgESsPL5w8Bax1FQYruf8pU= + dependencies: + icss-utils "^3.0.1" + postcss "^6.0.2" + postcss-value-parser "^3.3.0" + +postcss-icss-selectors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-icss-selectors/-/postcss-icss-selectors-2.0.3.tgz#27fa1afcaab6c602c866cbb298f3218e9bc1c9b3" + integrity sha1-J/oa/Kq2xgLIZsuymPMhjpvBybM= + dependencies: + css-selector-tokenizer "^0.7.0" + generic-names "^1.0.2" + icss-utils "^3.0.1" + lodash "^4.17.4" + postcss "^6.0.2" + +postcss-js@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-3.0.3.tgz#2f0bd370a2e8599d45439f6970403b5873abda33" + integrity sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw== + dependencies: + camelcase-css "^2.0.1" + postcss "^8.1.6" + +postcss-load-config@^2.0.0, postcss-load-config@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + postcss-modules-extract-imports@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" @@ -11020,14 +11454,14 @@ postcss-modules-extract-imports@^2.0.0: postcss "^7.0.5" postcss-modules-local-by-default@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" - integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== dependencies: icss-utils "^4.1.1" - postcss "^7.0.16" + postcss "^7.0.32" postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.0" + postcss-value-parser "^4.1.0" postcss-modules-scope@^2.2.0: version "2.2.0" @@ -11045,7 +11479,22 @@ postcss-modules-values@^3.0.0: icss-utils "^4.0.0" postcss "^7.0.6" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: +postcss-nested@5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.5.tgz#f0a107d33a9fab11d7637205f5321e27223e3603" + integrity sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.4: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4" + integrity sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== @@ -11054,20 +11503,43 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.3: +postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" - integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== +postcss@^6.0.14, postcss@^6.0.2, postcss@^6.0.9: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.1.6, postcss@^8.2.1, postcss@^8.2.14: + version "8.2.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.14.tgz#dcf313eb8247b3ce8078d048c0e8262ca565ad2b" + integrity sha512-+jD0ZijcvyCqPQo/m/CW0UcARpdFylq04of+Q7RKX6f/Tu+dvpUI/9Sp81+i6/vJThnOBX09Quw0ZLOVwpzX3w== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.22" + source-map "^0.6.1" + postinstall-postinstall@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" @@ -11167,6 +11639,11 @@ pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" +pretty-hrtime@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -11357,6 +11834,16 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" +purgecss@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-3.1.3.tgz#26987ec09d12eeadc318e22f6e5a9eb0be094f41" + integrity sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ== + dependencies: + commander "^6.0.0" + glob "^7.0.0" + postcss "^8.2.1" + postcss-selector-parser "^6.0.2" + q@~1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -11418,6 +11905,11 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + qw@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" @@ -11510,7 +12002,7 @@ react-input-autosize@^2.2.2: dependencies: prop-types "^15.5.8" -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -11587,6 +12079,11 @@ react-select@^3.1.0: react-input-autosize "^2.2.2" react-transition-group "^4.3.0" +react-table@^7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/react-table/-/react-table-7.7.0.tgz#e2ce14d7fe3a559f7444e9ecfe8231ea8373f912" + integrity sha512-jBlj70iBwOTvvImsU9t01LjFjy4sXEtclBovl3mTiqjz23Reu0DKnRza4zlLtOPACx6j2/7MrQIthIK1Wi+LIA== + react-transition-group@^4.3.0, react-transition-group@^4.4.0: version "4.4.1" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" @@ -11835,6 +12332,14 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reduce-css-calc@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" + integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== + dependencies: + css-unit-converter "^1.1.1" + postcss-value-parser "^3.3.0" + redux@^4.0.0, redux@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" @@ -12008,6 +12513,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +reserved-words@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -12222,7 +12732,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -12270,7 +12780,14 @@ sass-loader@^8.0.2: schema-utils "^2.6.1" semver "^6.3.0" -sax@^1.2.4: +sass@^1.26.5: + version "1.32.12" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.12.tgz#a2a47ad0f1c168222db5206444a30c12457abb9f" + integrity sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA== + dependencies: + chokidar ">=3.0.0 <4.0.0" + +sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -12299,7 +12816,16 @@ schema-utils@1.0.0, schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6: +schema-utils@^2.6.1, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^2.6.5: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== @@ -13234,12 +13760,26 @@ strip-outer@^1.0.1: escape-string-regexp "^1.0.2" style-loader@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" - integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== dependencies: loader-utils "^2.0.0" - schema-utils "^2.6.6" + schema-utils "^2.7.0" + +stylus@^0.54.7: + version "0.54.8" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" + integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg== + dependencies: + css-parse "~2.0.0" + debug "~3.1.0" + glob "^7.1.6" + mkdirp "~1.0.4" + safer-buffer "^2.1.2" + sax "~1.2.4" + semver "^6.3.0" + source-map "^0.7.3" sumchecker@^3.0.1: version "3.0.1" @@ -13260,7 +13800,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -13289,7 +13829,7 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -symbol-observable@^1.2.0: +symbol-observable@1.2.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -13309,6 +13849,39 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +tailwindcss@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-2.1.2.tgz#29402bf73a445faedd03df6d3b177e7b52b7c4a1" + integrity sha512-T5t+wwd+/hsOyRw2HJuFuv0LTUm3MUdHm2DJ94GPVgzqwPPFa9XxX0KlwLWupUuiOUj6uiKURCzYPHFcuPch/w== + dependencies: + "@fullhuman/postcss-purgecss" "^3.1.3" + bytes "^3.0.0" + chalk "^4.1.0" + chokidar "^3.5.1" + color "^3.1.3" + detective "^5.2.0" + didyoumean "^1.2.1" + dlv "^1.1.3" + fast-glob "^3.2.5" + fs-extra "^9.1.0" + html-tags "^3.1.0" + lodash "^4.17.21" + lodash.topath "^4.5.2" + modern-normalize "^1.0.0" + node-emoji "^1.8.1" + normalize-path "^3.0.0" + object-hash "^2.1.1" + parse-glob "^3.0.4" + postcss-functions "^3" + postcss-js "^3.0.3" + postcss-nested "5.0.5" + postcss-selector-parser "^6.0.4" + postcss-value-parser "^4.1.0" + pretty-hrtime "^1.0.3" + quick-lru "^5.1.1" + reduce-css-calc "^2.1.8" + resolve "^1.20.0" + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -13711,6 +14284,16 @@ ts-node@^8.10.2: source-map-support "^0.5.17" yn "3.1.1" +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@^1.10.0, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" @@ -13863,6 +14446,25 @@ typeface-roboto@^0.0.75: resolved "https://registry.yarnpkg.com/typeface-roboto/-/typeface-roboto-0.0.75.tgz#98d5ba35ec234bbc7172374c8297277099cc712b" integrity sha512-VrR/IiH00Z1tFP4vDGfwZ1esNqTiDMchBEXYY9kilT6wRGgFoCAlgkEUMHb1E3mB0FsfZhv756IF0+R+SFPfdg== +typescript-plugin-css-modules@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/typescript-plugin-css-modules/-/typescript-plugin-css-modules-3.2.0.tgz#44241064395d565f242689b96eb50bf413e68ddf" + integrity sha512-oMe5IDKuPvLBOeaYupAqqq8UMTu7Jo5e0InqkQSSKXuZCcRm0+LQfUVMyM62IFpgzxHLuN32a7YdBxAaSXZrRQ== + dependencies: + dotenv "^8.2.0" + icss-utils "^4.1.1" + less "^3.11.1" + lodash.camelcase "^4.3.0" + postcss "^7.0.27" + postcss-filter-plugins "^3.0.1" + postcss-icss-keyframes "^0.2.1" + postcss-icss-selectors "^2.0.3" + postcss-load-config "^2.1.0" + reserved-words "^0.1.2" + sass "^1.26.5" + stylus "^0.54.7" + tsconfig-paths "^3.9.0" + typescript@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" @@ -14130,7 +14732,7 @@ utf8-byte-length@^1.0.1: resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -14750,7 +15352,7 @@ xmldom@^0.5.0: resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.5.0.tgz#193cb96b84aa3486127ea6272c4596354cb4962e" integrity sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA== -xtend@^4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.2, 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==