diff --git a/.gitignore b/.gitignore index 487e9b742..9a809d748 100644 --- a/.gitignore +++ b/.gitignore @@ -67,4 +67,5 @@ dist *.iml .idea/ -docs/ \ No newline at end of file +docs/ +storybook-static diff --git a/.prettierignore b/.prettierignore index 4028ec8e4..8ba8008ef 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,7 @@ dist/ README.md -docs/ \ No newline at end of file +docs/ +*.svg +*.ico +*.ejs +packages/esm-styleguide/src/**/*.html diff --git a/.travis.yml b/.travis.yml index c700bb647..6e3566c93 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,13 +5,13 @@ script: - npx lerna bootstrap - npx lerna run lint - npx lerna run test - - npx lerna run build - npx lerna run typescript + - npx lerna run build - echo "Folder name in Digital Ocean Spaces - $TRAVIS_COMMIT" - - mkdir -p dist/@openmrs/esm-module-config/$TRAVIS_COMMIT - - mv packages/esm-config/dist/*.* dist/@openmrs/esm-module-config/$TRAVIS_COMMIT/ - - mkdir -p dist/@openmrs/esm-extension-manager/$TRAVIS_COMMIT - - mv packages/esm-extension-manager/dist/*.* dist/@openmrs/esm-extension-manager/$TRAVIS_COMMIT/ + - mkdir -p dist/@openmrs/esm-app-shell/$TRAVIS_COMMIT + - mkdir -p dist/@openmrs/esm-app-shell/latest + - cp packages/esm-app-shell/dist/*.* dist/@openmrs/esm-app-shell/$TRAVIS_COMMIT/ + - cp packages/esm-app-shell/dist/*.* dist/@openmrs/esm-app-shell/latest/ deploy: provider: s3 access_key_id: "$DIGITAL_OCEAN_SPACES_KEY_ID" @@ -24,12 +24,3 @@ deploy: acl: public_read on: branch: master -after_deploy: - - echo "Updating import map to point to new version of @openmrs/esm-extension-manager" - - statuscode=$(curl --output /dev/null --write-out %{http_code} -u $DEPLOYER_USERNAME:$DEPLOYER_PASSWORD -d '{ "service":"@openmrs/esm-extension-manager","url":"https://spa-modules.nyc3.digitaloceanspaces.com/@openmrs/esm-extension-manager/'$TRAVIS_COMMIT'/openmrs-esm-extension-manager.js" }' -X PATCH $DEPLOYER_HOST/services\?env=prod -H "Accept:application/json" -H "Content-Type:application/json") - - echo "Deployment Status Code (esm-extension-manager) --> ${statuscode}" - - if [ "$statuscode" -ne 200 ]; then travis_terminate "$statuscode"; fi - - echo "Updating import map to point to new version of @openmrs/esm-module-config" - - statuscode=$(curl --output /dev/null --write-out %{http_code} -u $DEPLOYER_USERNAME:$DEPLOYER_PASSWORD -d '{ "service":"@openmrs/esm-module-config","url":"https://spa-modules.nyc3.digitaloceanspaces.com/@openmrs/esm-module-config/'$TRAVIS_COMMIT'/openmrs-esm-module-config.js" }' -X PATCH $DEPLOYER_HOST/services\?env=prod -H "Accept:application/json" -H "Content-Type:application/json") - - echo "Deployment Status Code (esm-config) --> ${statuscode}" - - if [ "$statuscode" -ne 200 ]; then travis_terminate "$statuscode"; fi diff --git a/README.md b/README.md index 9e2332dc2..503971ac8 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,46 @@ # OpenMRS Frontend Core -This is a [Lerna](https://lerna.js.org/) project containing the core -packages for the OpenMRS Frontend. These packages handle the -"cross-cutting concerns" described in the -[Domain Decomposition](https://wiki.openmrs.org/display/projects/MFE+Domain+Decomposition) -document. +This is a [Lerna](https://lerna.js.org/) project containing the core packages for the OpenMRS Frontend. These packages handle the "cross-cutting concerns" described in the [Domain Decomposition](https://wiki.openmrs.org/display/projects/MFE+Domain+Decomposition) document. +- [@openmrs/esm-api](packages/esm-api) - [@openmrs/esm-app-shell](packages/esm-app-shell) - [@openmrs/esm-config](packages/esm-config) +- [@openmrs/esm-error-handling](packages/esm-error-handling) - [@openmrs/esm-extension-manager](packages/esm-extension-manager) +- [@openmrs/esm-styleguide](packages/esm-styleguide) ## Getting Started +To install and setup the repository just use the following command: + +```sh +npx lerna bootstrap +``` + +For working with the app shell you don't need to have the repository cloned. You can also just use the `run-openmrs` directly. + +```sh +npx run-openmrs ``` -npm install -g lerna -npm install -lerna bootstrap + +This is a command line utility for running (or building) the app shell in isolation. In particular, it deals with everything that touches the development, distribution, and deployment of an app shell. + +## Possibilities + +The new architecture offers a couple of interesting possibilities. We go into them one by one. + +### Proxying OpenMRS Backends + +We can now proxy *any* backend. For instance, using the backend of the demo instance we just run: + +```sh +npx run-openmrs debug --backend https://demo.openmrs.org/ +``` + +There are a couple of interesting public instances: + +```sh +https://qa-refapp.openmrs.org/ +https://demo.openmrs.org/ +https://openmrs-spa.org/ ``` diff --git a/package.json b/package.json index 0dad88b5c..97b6397c8 100644 --- a/package.json +++ b/package.json @@ -3,17 +3,19 @@ "private": true, "husky": { "hooks": { - "pre-commit": "pretty-quick --staged && concurrently -n lint,test,typescript 'lerna run lint' 'lerna run test' 'lerna run typescript'" + "pre-commit": "pretty-quick --staged && lerna run lint && lerna run test && lerna run typescript" } }, "workspaces": [ "packages/*" ], "scripts": { + "run:shell": "lerna run watch --scope @openmrs/esm-app-shell --stream", + "run:omrs": "run-openmrs", + "verify": "lerna run lint && lerna run test && lerna run typescript", "prettier": "prettier 'packages/**/src/**/*' --write" }, "devDependencies": { - "@types/jest": "^26.0.10", "@babel/core": "^7.11.4", "@babel/preset-env": "^7.11.0", "@babel/preset-react": "^7.10.4", @@ -22,23 +24,34 @@ "@testing-library/jest-dom": "^5.11.0", "@testing-library/react": "^10.4.3", "@testing-library/user-event": "^12.0.11", + "@types/jest": "^26.0.10", + "autoprefixer": "^9.6.1", "browserslist-config-openmrs": "^1.0.1", "babel-eslint": "^11.0.0-beta.2", "babel-jest": "^26.3.0", "babel-loader": "^8.1.0", "clean-webpack-plugin": "^3.0.0", - "concurrently": "^5.3.0", - "eslint": "^7.7.0", + "copy-webpack-plugin": "6.1.1", + "css-loader": "^3.2.0", + "cssnano": "^4.1.10", + "ejs": "^2.6.2", + "eslint": "^7.10.0", "eslint-config-prettier": "^6.11.0", "eslint-config-ts-react-important-stuff": "^3.0.0", "eslint-plugin-prettier": "^3.1.4", + "file-loader": "^4.2.0", "fork-ts-checker-webpack-plugin": "^5.1.0", + "html-webpack-plugin": "^4.5.0", "husky": "^4.2.5", "jest": "^26.4.2", "jest-cli": "^26.4.2", "lerna": "^3.20.2", + "mini-css-extract-plugin": "^0.8.0", + "postcss-loader": "^4.0.2", "prettier": "^2.0.5", "pretty-quick": "^3.0.0", + "raw-loader": "^3.1.0", + "style-loader": "^1.0.0", "ts-loader": "^8.0.3", "typescript": "^4.0.2", "webpack": "^4.44.1", diff --git a/packages/esm-extension-manager/.babelrc b/packages/esm-api/.babelrc similarity index 100% rename from packages/esm-extension-manager/.babelrc rename to packages/esm-api/.babelrc diff --git a/packages/esm-api/README.md b/packages/esm-api/README.md new file mode 100644 index 000000000..1f250a7e0 --- /dev/null +++ b/packages/esm-api/README.md @@ -0,0 +1,143 @@ +# openmrs-esm-api + +An [OpenMRS Microfrontend](https://wiki.openmrs.org/display/projects/Frontend+-+SPA+and+Microfrontends). + +## What is this? + +openmrs-esm-api is an [in-browser javascript module](https://github.com/openmrs/openmrs-rfc-frontend/blob/master/text/0002-modules.md) that exports functions that interact with the OpenMRS API. + +## How do I use it? + +```js +import { openmrsFetch, openmrsObservableFetch, getCurrentUser, fhir } from '@openmrs/esm-api'; +openmrsFetch('/ws/rest/v1/session').then(response => { + console.log(response.data.authenticated) +} +``` + +## Contributing / Development + +[Instructions for local development](https://wiki.openmrs.org/display/projects/Setup+local+development+environment+for+OpenMRS+SPA) + +## API + +The following functions are exported from the @openmrs/esm-api module: + +## openmrsFetch(url, init): Promise + +The openmrsFetch function is a wrapper around the [browser's built-in fetch function](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch), with extra handling for OpenMRS-specific API behaviors, such as request headers, authentication, authorization, and the API urls. + +##### Arguments + +1. url (required): A string url to make the request to. Note that the openmrs base url (by default "/openmrs") will be automatically prepended to the URL, so there is no need to include it. +2. init (optional): A [fetch init object](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Syntax). Note that the `body` property does not need to be JSON.stringify()'ed because openmrsFetch will do that for you. + +##### Return value + +A [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) that resolves with a [Response object](https://developer.mozilla.org/en-US/docs/Web/API/Response). Note that the openmrs version of the Response object has already downloaded the HTTP response body as json, and has an additional `data` property with the HTTP response json as a javascript object. + +### Example + +```js +import { openmrsFetch } from '@openmrs/esm-api' +const abortController = new AbortController(); +openmrsFetch('/ws/rest/v1/session', {signal: abortController.signal}) + .then(response => { + console.log(response.data.authenticated) + }) + .catch(err => { + console.error(err.status); + }) +abortController.abort(); +openmrsFetch('/ws/rest/v1/session', { + method: 'POST', + body: { + username: 'hi', + password: 'there', + } +}) +``` + +### Cancellation + +To cancel a network request, use an [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort). It is best practice to cancel your network requests when the user navigates away from a page while the request is pending request, to free up memory and network resources and to prevent race conditions. + +## openmrsObservableFetch(url, init): Observable + +The openmrsObservableFetch function is a wrapper around openmrsFetch that returns an [Observable](https://rxjs-dev.firebaseapp.com/guide/observable) instead of a promise. It exists in case using an Observable is preferred or more convenient than a promise. + +##### Arguments + +The arguments to openmrsObservableFetch are exactly the same as the arguments to openmrsFetch. + +##### Return value + +An Observable that produces exactly one Response object. The response object is exactly the same as for openmrsFetch. + +### Example + +```js +import { openmrsObservableFetch } from '@openmrs/esm-api' +const subscription = openmrsObservableFetch('/ws/rest/v1/session').subscribe( + response => console.log(response.data), + err => {throw err}, + () => console.log('finished') +) +subscription.unsubscribe() +``` + +### Cancellation + +To cancel the network request, simply call `subscription.unsubscribe();` + +## fhir + +The `fhir` object is [an instance of fhir.js](https://github.com/FHIR/fhir.js) that can be used to call FHIR-compliant OpenMRS APIs. See [the docs for fhir.js](https://github.com/FHIR/fhir.js) for more info and example usage. + +## getCurrentUser(): Observable + +The getCurrentUser function returns an observable that produces **zero or more values, over time**. It will produce zero values by default if the user is not logged in. And it will provide a first value when the logged in user is fetched from the server. Subsequent values will be produced whenever the user object is updated. + +###### Arguments + +1. options (optional): An object with includeAuthStatus boolean property that defaults to false. When includeAuthStatus is set to true, the entire response object from the API will be provided. When includeAuthStatus is set to false, only the user property of the response object will be provided. + +###### Return value + +An Observable that produces zero or more values (as described above). The values produced will be a user object (if includeAuthStatus is set to false) or an object with a session and authenticated property (if includeAuthStatus is set to true). + +### Example + +```js +import { getCurrentUser } from '@openmrs/esm-api' +const subscription = getCurrentUser().subscribe( + user => console.log(user) +) +subscription.unsubscribe() +getCurrentUser({includeAuthStatus: true}).subscribe( + data => console.log(data.authenticated) +) +``` + +### Be sure to unsubscribe when your component unmounts + +Otherwise your code will continue getting updates to the user object even after the UI component is gone from the screen. This is a memory leak and source of bugs. + +## refetchCurrentUser(): Observable + +The refetchCurrentUser function causes a network request to redownload the user. All subscribers to the current user will be notified of the new users once the new version of the user object is downloaded. + +###### Arguments + +None + +###### Return value + +An observable exactly the same as if you had called `getCurrentUser()`. + +#### Example + +```js +import { refetchCurrentUser } from '@openmrs/esm-api' +refetchCurrentUser() +``` diff --git a/packages/esm-api/__mocks__/openmrs-esm-error-handling.mock.ts b/packages/esm-api/__mocks__/openmrs-esm-error-handling.mock.ts new file mode 100644 index 000000000..90f8c5781 --- /dev/null +++ b/packages/esm-api/__mocks__/openmrs-esm-error-handling.mock.ts @@ -0,0 +1,2 @@ +export function createErrorHandler() {} +export function reportError() {} diff --git a/packages/esm-api/__mocks__/openmrs-esm-module-config.mock.ts b/packages/esm-api/__mocks__/openmrs-esm-module-config.mock.ts new file mode 100644 index 000000000..6eb6e5f0f --- /dev/null +++ b/packages/esm-api/__mocks__/openmrs-esm-module-config.mock.ts @@ -0,0 +1,5 @@ +export const defineConfigSchema = jest.fn(); + +export const getConfig = jest + .fn() + .mockResolvedValue({ redirectAuthFailure: { enabled: false } }); diff --git a/packages/esm-api/__mocks__/single-spa.mock.ts b/packages/esm-api/__mocks__/single-spa.mock.ts new file mode 100644 index 000000000..881abc3ae --- /dev/null +++ b/packages/esm-api/__mocks__/single-spa.mock.ts @@ -0,0 +1 @@ +export const navigateToUrl = jest.fn(); diff --git a/packages/esm-api/jest.config.js b/packages/esm-api/jest.config.js new file mode 100644 index 000000000..c8f0ece12 --- /dev/null +++ b/packages/esm-api/jest.config.js @@ -0,0 +1,13 @@ +module.exports = { + transform: { + "^.+\\.tsx?$": "babel-jest", + }, + moduleNameMapper: { + "lodash-es": "lodash", + "@openmrs/esm-error-handling": + "/__mocks__/openmrs-esm-error-handling.mock.ts", + "@openmrs/esm-config": + "/__mocks__/openmrs-esm-module-config.mock.ts", + "single-spa": "/__mocks__/single-spa.mock.ts", + }, +}; diff --git a/packages/esm-api/package.json b/packages/esm-api/package.json new file mode 100644 index 000000000..0249c3321 --- /dev/null +++ b/packages/esm-api/package.json @@ -0,0 +1,51 @@ +{ + "name": "@openmrs/esm-api", + "version": "3.1.0", + "license": "MPL-2.0", + "description": "The javascript module for interacting with the OpenMRS API", + "browser": "dist/openmrs-esm-api.js", + "main": "src/index.ts", + "source": true, + "scripts": { + "test": "jest --config jest.config.js --passWithNoTests", + "build": "webpack --mode=production", + "typescript": "tsc", + "lint": "eslint src --ext ts,tsx" + }, + "directories": { + "lib": "dist", + "src": "src" + }, + "browserslist": [ + "extends browserslist-config-openmrs" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/openmrs/openmrs-esm-core.git" + }, + "bugs": { + "url": "https://github.com/openmrs/openmrs-esm-core/issues" + }, + "homepage": "https://github.com/openmrs/openmrs-esm-core#readme", + "dependencies": { + "fhir.js": "0.0.22", + "lodash-es": "^4.17.15", + "systemjs-webpack-interop": "^2.1.2", + "unistore": "^3.5.2" + }, + "peerDependencies": { + "@openmrs/esm-config": "*", + "@openmrs/esm-error-handling": "*", + "react": "16.x", + "single-spa": "4.x" + }, + "devDependencies": { + "@openmrs/esm-config": "^0.3.0", + "@openmrs/esm-error-handling": "^1.3.0", + "@types/fhir": "0.0.31", + "@types/react": "^16.9.46", + "react": "^16.13.1", + "rxjs": "^6.5.3", + "single-spa": "^4.4.1" + } +} diff --git a/packages/esm-api/src/fhir.ts b/packages/esm-api/src/fhir.ts new file mode 100644 index 000000000..7c5f0dec8 --- /dev/null +++ b/packages/esm-api/src/fhir.ts @@ -0,0 +1,42 @@ +import { openmrsFetch, FetchHeaders, OpenmrsFetchError } from "./openmrs-fetch"; +import type { FhirClient } from "./types/fhir"; + +export const fhirBaseUrl = `/ws/fhir2/R4`; + +const makeFhir = require("fhir.js/src/fhir.js"); +const openmrsFhirAdapter = { + http(requestObj: FHIRRequestObj) { + return openmrsFetch(requestObj.url, { + method: requestObj.method, + headers: requestObj.headers, + }).then( + (response) => { + return { + status: response.status, + headers: response.headers, + data: response.data, + config: requestObj, + }; + }, + (err: OpenmrsFetchError) => { + return { + status: err.response.status, + headers: err.response.headers, + data: err.responseBody, + config: requestObj, + }; + } + ); + }, +}; + +export const fhir: FhirClient = makeFhir( + { baseUrl: fhirBaseUrl }, + openmrsFhirAdapter +); + +export interface FHIRRequestObj { + url: string; + method: string; + headers: FetchHeaders; +} diff --git a/packages/esm-api/src/index.ts b/packages/esm-api/src/index.ts new file mode 100644 index 000000000..52dd4280f --- /dev/null +++ b/packages/esm-api/src/index.ts @@ -0,0 +1,15 @@ +export * from "./shared-api-objects/user-has-access-react.component"; +export * from "./shared-api-objects/extension-slot-react.component"; + +export * from "./types"; +export * from "./openmrs-fetch"; +export * from "./fhir"; +export * from "./setup"; +export * from "./state"; + +export * from "./shared-api-objects/current-user"; +export * from "./shared-api-objects/current-patient"; +export * from "./shared-api-objects/use-current-patient.hook"; + +export * from "./openmrs-backend-dependencies"; +export * from "./workspace/workspace.resource"; diff --git a/packages/esm-api/src/openmrs-backend-dependencies.ts b/packages/esm-api/src/openmrs-backend-dependencies.ts new file mode 100644 index 000000000..c5bdb54ef --- /dev/null +++ b/packages/esm-api/src/openmrs-backend-dependencies.ts @@ -0,0 +1,4 @@ +export const backendDependencies = { + "webservices.rest": "2.24.0", + fhir2: "1.0.0-SNAPSHOT", +}; diff --git a/packages/esm-api/src/openmrs-fetch.test.ts b/packages/esm-api/src/openmrs-fetch.test.ts new file mode 100644 index 000000000..348bde2cf --- /dev/null +++ b/packages/esm-api/src/openmrs-fetch.test.ts @@ -0,0 +1,298 @@ +import { openmrsFetch, openmrsObservableFetch } from "./openmrs-fetch"; +import { isObservable } from "rxjs"; + +import { navigateToUrl as mockNavigateToUrl } from "single-spa"; +import { getConfig as mockGetConfig } from "@openmrs/esm-config"; + +describe("openmrsFetch", () => { + beforeEach(() => { + // @ts-ignore + window.openmrsBase = "/openmrs"; + // @ts-ignore + window.getOpenmrsSpaBase = () => "/openmrs/spa/"; + window.fetch = jest.fn(); + Object.defineProperty(window, "location", { + writable: true, + value: { assign: jest.fn() }, + }); + }); + + afterEach(() => { + // @ts-ignore + delete window.openmrsBase; + // @ts-ignore + delete window.getOpenmrsSpaBase; + }); + + it(`throws an error if you don't pass in a url string`, () => { + // @ts-ignore + expect(() => openmrsFetch()).toThrowError(/first argument/); + // @ts-ignore + expect(() => openmrsFetch({})).toThrowError(/first argument/); + }); + + it(`throws an error if you pass in an invalid fetchInit object`, () => { + // @ts-ignore + expect(() => openmrsFetch("/session", "invalid second arg")).toThrowError( + /second argument/ + ); + + // @ts-ignore + expect(() => openmrsFetch("/session", 123)).toThrowError(/second argument/); + }); + + it(`throws an Error if there is no openmrsBase`, () => { + // @ts-ignore + delete window.openmrsBase; + + expect(() => openmrsFetch("/session")).toThrowError(/openmrsBase/); + }); + + it(`calls window.fetch with the correct arguments for a basic GET request`, () => { + // @ts-ignore + window.fetch.mockReturnValue(new Promise(() => {})); + openmrsFetch("/ws/rest/v1/session"); + expect(window.fetch).toHaveBeenCalledWith("/openmrs/ws/rest/v1/session", { + headers: { Accept: "application/json" }, + }); + }); + + it(`calls window.fetch correctly for requests that have a request body`, () => { + // @ts-ignore + window.fetch.mockReturnValue(new Promise(() => {})); + const requestBody = { some: "json" }; + openmrsFetch("/ws/rest/v1/session", { + method: "POST", + body: requestBody, + }); + expect(window.fetch).toHaveBeenCalledWith("/openmrs/ws/rest/v1/session", { + headers: { Accept: "application/json" }, + body: JSON.stringify(requestBody), + method: "POST", + }); + }); + + it(`allows you to specify your own Accept request header`, () => { + // @ts-ignore + window.fetch.mockReturnValue(new Promise(() => {})); + const requestBody = { some: "json" }; + openmrsFetch("/ws/rest/v1/session", { + headers: { + Accept: "application/xml", + }, + }); + expect(window.fetch).toHaveBeenCalledWith("/openmrs/ws/rest/v1/session", { + headers: { Accept: "application/xml" }, + }); + }); + + it(`allows you to specify no Accept request header to be sent`, () => { + // @ts-ignore + window.fetch.mockReturnValue(new Promise(() => {})); + openmrsFetch("/ws/rest/v1/session", { + headers: { + // specifically null on purpose + Accept: null, + }, + }); + expect(window.fetch).toHaveBeenCalledWith("/openmrs/ws/rest/v1/session", { + headers: {}, + }); + }); + + it(`returns a promise that resolves with a json object when the request succeeds`, () => { + // @ts-ignore + window.fetch.mockReturnValue( + Promise.resolve({ + ok: true, + status: 200, + json: () => Promise.resolve({ value: "hi" }), + }) + ); + + return openmrsFetch("/ws/rest/v1/session").then((response) => { + expect(response.status).toBe(200); + expect(response.data).toEqual({ value: "hi" }); + }); + }); + + it(`returns a promise that resolves with null when the request succeeds with HTTP 204`, () => { + // @ts-ignore + window.fetch.mockReturnValue( + Promise.resolve({ + ok: true, + status: 204, + json: () => Promise.reject(Error("No json for HTTP 204's!!")), + }) + ); + + return openmrsFetch("/ws/rest/v1/session").then((response) => { + expect(response.status).toBe(204); + expect(response.data).toEqual(null); + }); + }); + + it(`gives you an amazing error when the server responds with a 500 that has json`, () => { + // @ts-ignore + window.fetch.mockReturnValue( + Promise.resolve({ + ok: false, + status: 500, + statusText: "Internal Server Error", + text: () => + Promise.resolve( + JSON.stringify({ + error: "The server is dead", + }) + ), + }) + ); + + return openmrsFetch("/ws/rest/v1/session") + .then((data) => { + fail("Promise shouldn't resolve when server responds with 500"); + }) + .catch((err) => { + expect(err.message).toMatch( + /Server responded with 500 \(Internal Server Error\)/ + ); + expect(err.message).toMatch(/\/ws\/rest\/v1\/session/); + expect(err.responseBody).toEqual({ error: "The server is dead" }); + expect(err.response.status).toBe(500); + }); + }); + + it(`gives you an amazing error when the server responds with a 400 that doesn't have json`, () => { + // @ts-ignore + window.fetch.mockReturnValue( + Promise.resolve({ + ok: false, + status: 400, + statusText: "You goofed up", + text: () => Promise.resolve("a string response body"), + }) + ); + + return openmrsFetch("/ws/rest/v1/session") + .then((data) => { + fail("Promise shouldn't resolve when server responds with 400"); + }) + .catch((err) => { + expect(err.message).toMatch( + /Server responded with 400 \(You goofed up\)/ + ); + expect(err.message).toMatch(/\/ws\/rest\/v1\/session/); + expect(err.responseBody).toEqual("a string response body"); + expect(err.response.status).toBe(400); + }); + }); + + it(`navigates to spa login page when the server responds with a 401`, () => { + (mockGetConfig as any).mockResolvedValueOnce({ + redirectAuthFailure: { + enabled: true, + url: "/openmrs/spa/login", + errors: [401], + resolvePromise: true, + }, + }); + + // @ts-ignore + window.fetch.mockReturnValue( + Promise.resolve({ + ok: false, + status: 401, + statusText: "You are not authorized", + text: () => Promise.resolve("a string response body"), + }) + ); + + return openmrsFetch("/ws/rest/v1/session").then((data) => { + //@ts-ignore + expect(mockNavigateToUrl.mock.calls[0][0]).toBe("/openmrs/spa/login"); + }); + }); + + it(`redirects to openmrs login page when the server responds with a 401`, () => { + (mockGetConfig as any).mockResolvedValueOnce({ + redirectAuthFailure: { + enabled: true, + url: "/openmrs/login", + errors: [401], + resolvePromise: true, + }, + }); + + // @ts-ignore + window.fetch.mockReturnValue( + Promise.resolve({ + ok: false, + status: 401, + statusText: "You are not authorized", + text: () => Promise.resolve("a string response body"), + }) + ); + + return openmrsFetch("/ws/rest/v1/session").then((data) => { + //@ts-ignore + expect(window.location.assign.mock.calls[0][0]).toBe("/openmrs/login"); + }); + }); +}); + +describe("openmrsObservableFetch", () => { + beforeEach(() => { + // @ts-ignore + window.openmrsBase = "/openmrs"; + window.fetch = jest.fn(); + }); + + it(`calls window.fetch with the correct arguments for a basic GET request`, (done) => { + // @ts-ignore + window.fetch.mockReturnValue( + Promise.resolve({ + ok: true, + status: 200, + json: () => Promise.resolve({ value: "hi" }), + }) + ); + + const observable = openmrsObservableFetch("/ws/rest/v1/session"); + expect(isObservable(observable)).toBe(true); + + observable.subscribe( + (response) => { + expect(response.data).toEqual({ value: "hi" }); + done(); + }, + (err) => { + fail(err); + } + ); + + expect(window.fetch).toHaveBeenCalled(); + // @ts-ignore + expect(window.fetch.mock.calls[0][0]).toEqual( + "/openmrs/ws/rest/v1/session" + ); + // @ts-ignore + expect(window.fetch.mock.calls[0][1].headers.Accept).toEqual( + "application/json" + ); + }); + + it(`aborts the fetch request when subscription is unsubscribed`, () => { + // @ts-ignore + window.fetch.mockReturnValue(new Promise(() => {})); + + const subscription = openmrsObservableFetch( + "/ws/rest/v1/session" + ).subscribe(); + // @ts-ignore + const abortSignal: AbortSignal = window.fetch.mock.calls[0][1].signal; + expect(abortSignal.aborted).toBe(false); + + subscription.unsubscribe(); + expect(abortSignal.aborted).toBe(true); + }); +}); diff --git a/packages/esm-api/src/openmrs-fetch.ts b/packages/esm-api/src/openmrs-fetch.ts new file mode 100644 index 000000000..e1506a084 --- /dev/null +++ b/packages/esm-api/src/openmrs-fetch.ts @@ -0,0 +1,220 @@ +import { Observable } from "rxjs"; +import { navigateToUrl } from "single-spa"; +import isPlainObject from "lodash-es/isPlainObject"; +import { getConfig } from "@openmrs/esm-config"; +import { FetchResponse } from "./types"; + +export function openmrsFetch( + url: string, + fetchInit: FetchConfig = {} +): Promise> { + if (typeof url !== "string") { + throw Error( + "The first argument to @openmrs/api's openmrsFetch function must be a url string" + ); + } + + if (typeof fetchInit !== "object") { + throw Error( + "The second argument to @openmrs/api's openmrsFetch function must be a plain object." + ); + } + + // @ts-ignore + if (!window.openmrsBase) { + throw Error( + "@openmrs/api is running in a browser that doesn't have window.openmrsBase, which is provided by openmrs-module-spa's HTML file." + ); + } + + // Prefix the url with the openmrs spa base + // @ts-ignore + url = window.openmrsBase + url; + + // We're going to need some headers + if (!fetchInit.headers) { + fetchInit.headers = {}; + } + + /* Automatically stringify javascript objects being sent in the + * request body. + */ + if (isPlainObject(fetchInit.body)) { + fetchInit.body = JSON.stringify(fetchInit.body); + } + + /* Add a request header to tell the server to respond with json, + * since frontend code almost always wants json and the OpenMRS + * server won't give you json unless you explicitly ask for it. + * If a different Accept header is preferred, pass it into the fetchInit. + * If no Accept header is desired, pass it in explicitly as null. + */ + if (typeof fetchInit.headers.Accept === "undefined") { + fetchInit.headers.Accept = "application/json"; + } + + if (fetchInit.headers.Accept === null) { + delete fetchInit.headers.Accept; + } + + /* We capture the stacktrace before making the request, so that if an error occurs we can + * log a full stacktrace that includes the code that made the request and handled the response + * Otherwise, we could run into situations where the stacktrace doesn't even show which code + * called @openmrs/api. + */ + const requestStacktrace = Error(); + + return window.fetch(url, fetchInit as RequestInit).then(async (r) => { + const response = r as FetchResponse; + if (response.ok) { + if (response.status === 204) { + /* HTTP 204 - No Content + * We should not try to download the empty response as json. Instead, + * we return null since there is no response body. + */ + response.data = (null as unknown) as T; + return response; + } else { + // HTTP 200s - The request succeeded + return response.json().then((data) => { + response.data = data; + return response; + }); + } + } else { + /* HTTP response status is not in 200s. Usually this will mean + * either HTTP 400s (bad request from browser) or HTTP 500s (server error) + * Our goal is to come up with best possible stacktrace and error message + * to help developers understand the problem and debug + */ + + /* + *Redirect to given url when redirect on auth failure is enabled + */ + const { redirectAuthFailure } = await getConfig("@openmrs/esm-api"); + if ( + redirectAuthFailure.enabled && + redirectAuthFailure.errors.indexOf(response.status) >= 0 + ) { + const navigatesWithInSpa = (url) => { + // @ts-ignore + return url.startsWith(window.getOpenmrsSpaBase()); + }; + + navigatesWithInSpa(redirectAuthFailure.url) + ? navigateToUrl(redirectAuthFailure.url) + : location.assign(redirectAuthFailure.url); + + /* We sometimes don't really want this promise to resolve since there's no response data, + * nor do we want it to reject because that would trigger error handling. We instead + * want it to remain in pending status while the navigation occurs. + */ + return redirectAuthFailure.resolvePromise + ? ((Promise.resolve() as unknown) as Promise) + : new Promise((resolve) => {}); + } else { + // Attempt to download a response body, if it has one + return response.text().then( + (responseText) => { + let responseBody = responseText; + try { + responseBody = JSON.parse(responseText); + } catch (err) { + // Server didn't respond with json, so just go with the response text string + } + + /* Make the fetch promise go into "rejected" status, with the best + * possible stacktrace and error message. + */ + throw new OpenmrsFetchError( + url, + response, + responseBody, + requestStacktrace + ); + }, + (err) => { + /* We weren't able to download a response body for this error. + * Time to just give the best possible stacktrace and error message. + */ + throw new OpenmrsFetchError(url, response, null, requestStacktrace); + } + ); + } + } + }); +} + +export function openmrsObservableFetch( + url: string, + fetchInit: FetchConfig = {} +) { + if (typeof fetchInit !== "object") { + throw Error( + "The second argument to openmrsObservableFetch must be either omitted or an object" + ); + } + + const abortController = new AbortController(); + + fetchInit.signal = abortController.signal; + + return new Observable>((observer) => { + let hasResponse = false; + + openmrsFetch(url, fetchInit).then( + (response) => { + hasResponse = true; + observer.next(response); + observer.complete(); + }, + (err) => { + hasResponse = true; + observer.error(err); + } + ); + + return () => { + if (!hasResponse) { + abortController.abort(); + } + }; + }); +} + +export class OpenmrsFetchError extends Error { + constructor( + url: string, + response: Response, + responseBody: ResponseBody | null, + requestStacktrace: Error + ) { + super(); + this.message = `Server responded with ${response.status} (${response.statusText}) for url ${url}. Check err.responseBody or network tab in dev tools for more info`; + requestStacktrace.message = this.message; + this.responseBody = responseBody; + this.response = response; + this.stack = `Stacktrace for outgoing request:\n${requestStacktrace.stack}\nStacktrace for incoming response:\n${this.stack}`; + } + response: Response; + responseBody: string | FetchResponseJson | null; +} + +interface FetchConfig extends Omit, "headers"> { + headers?: FetchHeaders; + body?: FetchBody | string; +} + +type ResponseBody = string | FetchResponseJson; + +export interface FetchHeaders { + [key: string]: string | null; +} + +interface FetchBody { + [key: string]: any; +} + +interface FetchResponseJson { + [key: string]: any; +} diff --git a/packages/esm-extension-manager/src/set-public-path.ts b/packages/esm-api/src/set-public-path.ts similarity index 54% rename from packages/esm-extension-manager/src/set-public-path.ts rename to packages/esm-api/src/set-public-path.ts index 3795067f8..974444832 100644 --- a/packages/esm-extension-manager/src/set-public-path.ts +++ b/packages/esm-api/src/set-public-path.ts @@ -1,3 +1,3 @@ import { setPublicPath } from "systemjs-webpack-interop"; -setPublicPath("@openmrs/esm-extension-manager"); +setPublicPath("@openmrs/esm-api"); diff --git a/packages/esm-api/src/setup.ts b/packages/esm-api/src/setup.ts new file mode 100644 index 000000000..4708d8464 --- /dev/null +++ b/packages/esm-api/src/setup.ts @@ -0,0 +1,24 @@ +import { defineConfigSchema } from "@openmrs/esm-config"; +import { refetchCurrentUser } from "./shared-api-objects/current-user"; + +export function setupApiModule() { + defineConfigSchema("@openmrs/esm-api", { + redirectAuthFailure: { + enabled: { + default: true, + }, + url: { + //@ts-ignore + default: window.getOpenmrsSpaBase() + "login", + }, + errors: { + default: [401], + }, + resolvePromise: { + default: false, + }, + }, + }); + + refetchCurrentUser(); +} diff --git a/packages/esm-api/src/shared-api-objects/current-patient.test.ts b/packages/esm-api/src/shared-api-objects/current-patient.test.ts new file mode 100644 index 000000000..c00991847 --- /dev/null +++ b/packages/esm-api/src/shared-api-objects/current-patient.test.ts @@ -0,0 +1,82 @@ +import { getCurrentPatient } from "./current-patient"; +import { fhir } from "../fhir"; +import { first } from "rxjs/operators"; + +jest.mock("../fhir", () => ({ + fhir: { + read: jest.fn(), + }, +})); + +describe("current patient", () => { + beforeEach(() => { + (fhir.read as jest.MockedFunction).mockReset(); + }); + + it("fetches the correct patient from a patient chart URL", () => { + (fhir.read as jest.MockedFunction).mockReturnValueOnce( + Promise.resolve({ + data: {}, + }) + ); + + window.history.pushState({}, document.title, `/patient/12/chart`); + window.dispatchEvent(new CustomEvent("single-spa:routing-event")); + + return getCurrentPatient() + .pipe(first()) + .toPromise() + .then(() => { + expect(fhir.read as jest.MockedFunction).toHaveBeenCalledWith({ + type: "Patient", + patient: "12", + }); + }); + }); + + it("fetches the correct patient from the patient home URL", () => { + (fhir.read as jest.MockedFunction).mockReturnValueOnce( + Promise.resolve({ + data: {}, + }) + ); + + window.history.pushState({}, document.title, `/patient/34`); + window.dispatchEvent(new CustomEvent("single-spa:routing-event")); + + return getCurrentPatient() + .pipe(first()) + .toPromise() + .then(() => { + expect(fhir.read as jest.MockedFunction).toHaveBeenCalledWith({ + type: "Patient", + patient: "34", + }); + }); + }); + + it("can handle dashes and alphanumeric characters in the patient uuid", () => { + (fhir.read as jest.MockedFunction).mockReturnValueOnce( + Promise.resolve({ + data: {}, + }) + ); + + window.history.pushState( + {}, + document.title, + `/patient/34-asdsd-234243h342` + ); + window.dispatchEvent(new CustomEvent("single-spa:routing-event")); + + return getCurrentPatient() + .pipe(first()) + .toPromise() + .then(() => { + expect(fhir.read as jest.MockedFunction).toHaveBeenCalledWith({ + type: "Patient", + patient: "34-asdsd-234243h342", + }); + }); + }); +}); diff --git a/packages/esm-api/src/shared-api-objects/current-patient.ts b/packages/esm-api/src/shared-api-objects/current-patient.ts new file mode 100644 index 000000000..db913a940 --- /dev/null +++ b/packages/esm-api/src/shared-api-objects/current-patient.ts @@ -0,0 +1,75 @@ +import { ReplaySubject, Observable } from "rxjs"; +import { fhir } from "../fhir"; +import { mergeAll, filter, map } from "rxjs/operators"; +import { FetchResponse } from "../types"; + +let currentPatientUuid: string; +const currentPatientUuidSubject = new ReplaySubject(1); +const currentPatientSubject = new ReplaySubject< + Promise<{ data: fhir.Patient }> +>(1); + +window.addEventListener("single-spa:routing-event", () => { + const u = getPatientUuidFromUrl(); + + if (u && u !== currentPatientUuid) { + currentPatientUuid = u; + currentPatientUuidSubject.next(u); + + if (u) { + currentPatientSubject.next( + fhir.read({ + type: "Patient", + patient: currentPatientUuid, + }) + ); + } + } +}); + +function getPatientUuidFromUrl() { + const match = /\/patient\/([a-zA-Z0-9\-]+)\/?/.exec(location.pathname); + return match && match[1]; +} + +function getCurrentPatient(): Observable; +function getCurrentPatient( + opts: PatientWithFullResponse +): Observable>; +function getCurrentPatient(opts: OnlyThePatient): Observable; +function getCurrentPatient( + opts: CurrentPatientOptions = { includeConfig: false } +): Observable { + const result = currentPatientSubject.asObservable().pipe( + mergeAll(), + map((r) => (opts.includeConfig ? r : r.data)), + filter(Boolean) + ); + return result as Observable; +} + +export { getCurrentPatient }; + +export function refetchCurrentPatient() { + currentPatientSubject.next( + fhir.read({ type: "Patient", patient: currentPatientUuid }) + ); +} + +export function getCurrentPatientUuid(): Observable { + return currentPatientUuidSubject.asObservable(); +} + +export type CurrentPatient = fhir.Patient | FetchResponse; + +interface CurrentPatientOptions { + includeConfig?: boolean; +} +interface PatientWithFullResponse extends CurrentPatientOptions { + includeConfig: true; +} +interface OnlyThePatient extends CurrentPatientOptions { + includeConfig: false; +} + +export type PatientUuid = string | null; diff --git a/packages/esm-api/src/shared-api-objects/current-user.ts b/packages/esm-api/src/shared-api-objects/current-user.ts new file mode 100644 index 000000000..675cce189 --- /dev/null +++ b/packages/esm-api/src/shared-api-objects/current-user.ts @@ -0,0 +1,68 @@ +import { Observable, ReplaySubject } from "rxjs"; +import { filter, map, tap, mergeAll } from "rxjs/operators"; +import { openmrsFetch } from "../openmrs-fetch"; +import { + LoggedInUserFetchResponse, + LoggedInUser, + CurrentUserWithResponseOption, + UnauthenticatedUser, + CurrentUserWithoutResponseOption, + CurrentUserOptions, +} from "../types"; + +const userSubject = new ReplaySubject>(1); +let lastFetchTimeMillis = 0; + +function getCurrentUser(): Observable; +function getCurrentUser( + opts: CurrentUserWithResponseOption +): Observable; +function getCurrentUser( + opts: CurrentUserWithoutResponseOption +): Observable; +function getCurrentUser( + opts: CurrentUserOptions = { includeAuthStatus: false } +): Observable { + if (lastFetchTimeMillis < Date.now() - 1000 * 60) { + refetchCurrentUser(); + } + + return userSubject.asObservable().pipe( + mergeAll(), + tap(setUserLanguage), + map((r: LoggedInUserFetchResponse) => + opts.includeAuthStatus ? r.data : r.data.user + ), + filter(Boolean) + ) as Observable; +} + +function setUserLanguage(sessionResponse: LoggedInUserFetchResponse) { + if (sessionResponse?.data?.user?.userProperties?.defaultLocale) { + const locale = sessionResponse.data.user.userProperties.defaultLocale; + const htmlLang = document.documentElement.getAttribute("lang"); + if (locale != htmlLang) { + document.documentElement.setAttribute("lang", locale); + } + } +} + +function userHasPrivilege(requiredPrivilege: string, user: LoggedInUser) { + return user.privileges.find((p) => requiredPrivilege === p.display); +} + +function isSuperUser(user: LoggedInUser) { + const superUserRole = "System Developer"; + return user.roles.find((role) => role.display === superUserRole); +} + +export { getCurrentUser }; + +export function refetchCurrentUser() { + lastFetchTimeMillis = Date.now(); + userSubject.next(openmrsFetch("/ws/rest/v1/session")); +} + +export function userHasAccess(requiredPrivilege: string, user: LoggedInUser) { + return userHasPrivilege(requiredPrivilege, user) || isSuperUser(user); +} diff --git a/packages/esm-api/src/shared-api-objects/extension-slot-react.component.tsx b/packages/esm-api/src/shared-api-objects/extension-slot-react.component.tsx new file mode 100644 index 000000000..47672130e --- /dev/null +++ b/packages/esm-api/src/shared-api-objects/extension-slot-react.component.tsx @@ -0,0 +1,38 @@ +import React from "react"; + +export interface ExtensionSlotReactProps { + name: string; + params: any; +} + +declare global { + interface Window { + renderOpenmrsExtension( + target: HTMLElement, + name: string, + params: any + ): CancelLoading; + } +} + +interface CancelLoading { + (): void; +} + +/** + * @deprecated Use the import from @openmrs/esm-extensions instead! + */ +export const ExtensionSlotReact: React.FC = ({ + name, + params, +}) => { + const ref = React.useRef(null); + + React.useEffect(() => { + if (ref.current) { + return window.renderOpenmrsExtension(ref.current, name, params); + } + }, [name, params]); + + return ; +}; diff --git a/packages/esm-api/src/shared-api-objects/use-current-patient.hook.test.tsx b/packages/esm-api/src/shared-api-objects/use-current-patient.hook.test.tsx new file mode 100644 index 000000000..5cf8a4ac1 --- /dev/null +++ b/packages/esm-api/src/shared-api-objects/use-current-patient.hook.test.tsx @@ -0,0 +1,83 @@ +import React from "react"; +import { + getCurrentPatient, + getCurrentPatientUuid, + CurrentPatient, + PatientUuid, +} from "./current-patient"; +import { never, of, throwError } from "rxjs"; +import { useCurrentPatient } from "./use-current-patient.hook"; +import { render } from "@testing-library/react"; + +const mockedGetPatient = (getCurrentPatient as unknown) as jest.MockedFunction< + any +>; +const mockedGetPatientUuid = (getCurrentPatientUuid as unknown) as jest.MockedFunction< + any +>; + +jest.mock("./current-patient", () => ({ + getCurrentPatient: jest.fn(), + getCurrentPatientUuid: jest.fn(), +})); + +describe(`useCurrentPatient`, () => { + beforeEach(() => { + mockedGetPatient.mockReset(); + mockedGetPatientUuid.mockReset(); + }); + + it(`starts off with the patient loading`, () => { + mockedGetPatient.mockReturnValueOnce(never()); + mockedGetPatientUuid.mockReturnValueOnce(never()); + const wrapper = render(); + expect(wrapper.getByText("loadingPatient")).toBeTruthy(); + expect(wrapper.getByText("noPatient")).toBeTruthy(); + expect(wrapper.getByText("noPatientUuid")).toBeTruthy(); + expect(wrapper.getByText("noErr")).toBeTruthy(); + }); + + it(`it first sets the patientUuid`, () => { + mockedGetPatient.mockReturnValueOnce(never()); + mockedGetPatientUuid.mockReturnValueOnce(of("thePatientUuid")); + const wrapper = render(); + expect(wrapper.getByText("loadingPatient")).toBeTruthy(); + expect(wrapper.getByText("noPatient")).toBeTruthy(); + expect(wrapper.getByText("thePatientUuid")).toBeTruthy(); + expect(wrapper.getByText("noErr")).toBeTruthy(); + }); + + it(`it eventually sets both the patientUuid and patient`, () => { + mockedGetPatient.mockReturnValueOnce(of("thePatient")); + mockedGetPatientUuid.mockReturnValueOnce(of("thePatientUuid")); + const wrapper = render(); + expect(wrapper.getByText("notLoadingPatient")).toBeTruthy(); + expect(wrapper.getByText("thePatient")).toBeTruthy(); + expect(wrapper.getByText("thePatientUuid")).toBeTruthy(); + expect(wrapper.getByText("noErr")).toBeTruthy(); + }); + + it(`it sets the error if one occurs`, () => { + mockedGetPatient.mockReturnValueOnce( + throwError(Error("Could not find patient")) + ); + mockedGetPatientUuid.mockReturnValueOnce(of("thePatientUuid")); + const wrapper = render(); + expect(wrapper.getByText("notLoadingPatient")).toBeTruthy(); + expect(wrapper.getByText("noPatient")).toBeTruthy(); + expect(wrapper.getByText("thePatientUuid")).toBeTruthy(); + expect(wrapper.getByText("Could not find patient")).toBeTruthy(); + }); +}); + +function RenderPatientValues() { + const [isLoadingPatient, patient, patientUuid, err] = useCurrentPatient(); + return ( + <> +
{isLoadingPatient ? "loadingPatient" : "notLoadingPatient"}
+
{patient || "noPatient"}
+
{patientUuid || "noPatientUuid"}
+
{err ? err.message : "noErr"}
+ + ); +} diff --git a/packages/esm-api/src/shared-api-objects/use-current-patient.hook.ts b/packages/esm-api/src/shared-api-objects/use-current-patient.hook.ts new file mode 100644 index 000000000..a510bda93 --- /dev/null +++ b/packages/esm-api/src/shared-api-objects/use-current-patient.hook.ts @@ -0,0 +1,115 @@ +import React from "react"; +import { + getCurrentPatient, + getCurrentPatientUuid, + PatientUuid, +} from "./current-patient"; +import { createErrorHandler, reportError } from "@openmrs/esm-error-handling"; + +/* This React hook returns the current patient, as specified by the current route. It returns + * all the information needed to render a loading state, error state, and normal/success state. + */ +export function useCurrentPatient(): [ + boolean, + NullablePatient, + PatientUuid, + Error | null +] { + const [state, dispatch] = React.useReducer(reducer, initialState); + + React.useEffect(() => { + const sub = getCurrentPatientUuid().subscribe( + (uuid) => dispatch({ type: ActionTypes.newUuid, uuid }), + createErrorHandler() + ); + return () => { + sub.unsubscribe(); + }; + }, []); + + React.useEffect(() => { + const subscription = getCurrentPatient().subscribe( + (patient) => dispatch({ type: ActionTypes.newPatient, patient }), + (err) => { + dispatch({ type: ActionTypes.patientLoadError, err }); + reportError(err); + } + ); + return () => { + subscription.unsubscribe(); + }; + }, []); + + return [state.isLoadingPatient, state.patient, state.patientUuid, state.err]; +} + +function reducer( + state: CurrentPatientState, + action: Action +): CurrentPatientState { + switch (action.type) { + case ActionTypes.newUuid: + return { + ...state, + patientUuid: action.uuid, + patient: null, + isLoadingPatient: true, + err: null, + }; + case ActionTypes.newPatient: + return { + ...state, + patient: action.patient, + isLoadingPatient: false, + err: null, + }; + case ActionTypes.patientLoadError: + return { + ...state, + patient: null, + isLoadingPatient: false, + err: action.err, + }; + default: + throw Error(); + } +} + +const initialState: CurrentPatientState = { + patientUuid: null, + patient: null, + isLoadingPatient: true, + err: null, +}; + +type NullablePatient = fhir.Patient | null; + +type CurrentPatientState = { + patientUuid: PatientUuid; + patient: NullablePatient; + isLoadingPatient: boolean; + err: Error | null; +}; + +type NewUuid = { + type: ActionTypes.newUuid; + uuid: PatientUuid; +}; + +type NewPatient = { + type: ActionTypes.newPatient; + patient: fhir.Patient; +}; + +type PatientLoadError = { + type: ActionTypes.patientLoadError; + err: Error | null; +}; + +type Action = NewUuid | NewPatient | PatientLoadError; + +enum ActionTypes { + newUuid = "newUuid", + newPatient = "newPatient", + patientLoadError = "patientLoadError", +} diff --git a/packages/esm-api/src/shared-api-objects/user-has-access-react.component.tsx b/packages/esm-api/src/shared-api-objects/user-has-access-react.component.tsx new file mode 100644 index 000000000..704ac8685 --- /dev/null +++ b/packages/esm-api/src/shared-api-objects/user-has-access-react.component.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import { getCurrentUser, userHasAccess } from "./current-user"; +import { LoggedInUser } from "../types"; + +export interface UserHasAccessReactProps { + privilege: string; +} + +export const UserHasAccessReact: React.FC = ({ + privilege, + children, +}) => { + const [user, setUser] = React.useState(null); + + React.useEffect(() => { + const subscription = getCurrentUser({ + includeAuthStatus: false, + }).subscribe(setUser); + return () => subscription.unsubscribe(); + }, []); + + if (user && userHasAccess(privilege, user)) { + return <>{children}; + } + + return null; +}; diff --git a/packages/esm-api/src/state.ts b/packages/esm-api/src/state.ts new file mode 100644 index 000000000..4132bbc93 --- /dev/null +++ b/packages/esm-api/src/state.ts @@ -0,0 +1,65 @@ +import createStore, { Store } from "unistore"; + +interface StoreEntity { + value: Store; + active: boolean; +} + +const availableStores: Record = {}; + +export function createGlobalStore( + name: string, + initialState: TState +): Store { + const available = availableStores[name]; + + if (available) { + if (available.active) { + console.error( + "Cannot override an existing store. Make sure that stores are only created once." + ); + } else { + available.value = createStore(initialState); + } + + available.active = true; + return available.value; + } else { + const store = createStore(initialState); + + availableStores[name] = { + value: store, + active: true, + }; + + return store; + } +} + +export function getGlobalStore( + name: string, + fallbackState?: TState +): Store { + const available = availableStores[name]; + + if (!available) { + const store = createStore(fallbackState); + availableStores[name] = { + value: store, + active: false, + }; + return store; + } + + return available.value; +} + +export interface AppState {} + +export function createAppState(initialState: AppState) { + return createGlobalStore("app", initialState); +} + +export function getAppState() { + return getGlobalStore("app", {}); +} diff --git a/packages/esm-api/src/types/fhir.ts b/packages/esm-api/src/types/fhir.ts new file mode 100644 index 000000000..ab01dd9ba --- /dev/null +++ b/packages/esm-api/src/types/fhir.ts @@ -0,0 +1,171 @@ +/* +Originally taken from https://github.com/FHIR/fhir.js/blob/ec82ccfc125e05dbb645f47c100fe60f2c34bb73/src/fhir.d.ts +Has been adapted to be even better - if we can get fhir.js to publish a good version to npm with better typedefs, +we can remove this file in favor of the one they maintain +*/ + +type ClientFn = (...args: any[]) => Promise<{ data: any }>; +type ResourceName = + | "DomainResource" + | "Organization" + | "Location" + | "HealthcareService" + | "Practitioner" + | "Patient" + | "RelatedPerson" + | "Device" + | "Account" + | "AllergyIntolerance" + | "Schedule" + | "Slot" + | "Appointment" + | "AppointmentResponse" + | "AuditEvent" + | "Basic" + | "BodySite" + | "Substance" + | "Medication" + | "Group" + | "Specimen" + | "DeviceComponent" + | "DeviceMetric" + | "ValueSet" + | "Questionnaire" + | "QuestionnaireResponse" + | "Observation" + | "FamilyMemberHistory" + | "DocumentReference" + | "DiagnosticOrder" + | "ProcedureRequest" + | "ReferralRequest" + | "Procedure" + | "ImagingStudy" + | "ImagingObjectSelection" + | "Media" + | "DiagnosticReport" + | "CommunicationRequest" + | "DeviceUseRequest" + | "MedicationOrder" + | "NutritionOrder" + | "Order" + | "ProcessRequest" + | "SupplyRequest" + | "VisionPrescription" + | "ClinicalImpression" + | "Condition" + | "EpisodeOfCare" + | "Encounter" + | "MedicationStatement" + | "RiskAssessment" + | "Goal" + | "CarePlan" + | "Composition" + | "Contract" + | "Coverage" + | "ClaimResponse" + | "Claim" + | "Communication" + | "StructureDefinition" + | "ConceptMap" + | "OperationDefinition" + | "Conformance" + | "DataElement" + | "DetectedIssue" + | "DeviceUseStatement" + | "DocumentManifest" + | "EligibilityRequest" + | "EligibilityResponse" + | "EnrollmentRequest" + | "EnrollmentResponse" + | "ExplanationOfBenefit" + | "Flag" + | "Immunization" + | "ImmunizationRecommendation" + | "ImplementationGuide" + | "List" + | "MedicationAdministration" + | "MedicationDispense" + | "OperationOutcome" + | "MessageHeader" + | "NamingSystem" + | "OrderResponse" + | "PaymentNotice" + | "PaymentReconciliation" + | "Person" + | "ProcessResponse" + | "Provenance" + | "SearchParameter" + | "Subscription" + | "SupplyDelivery" + | "TestScript" + | "Binary" + | "Bundle" + | "Parameters"; +interface QueryOptions { + $include?: { [key: string]: string | string[] }; + [key: string]: any; +} + +declare function Create(content: { + resource: T; +}): Promise<{ data: T }>; +declare function Create(content: { + type: "Binary"; + data: Buffer; +}): Promise<{ data: fhir.Binary }>; +declare function Create(content: { + type: ResourceName; + data: T; +}): Promise<{ data: T }>; + +declare function Read(content: { + type: ResourceName; + id?: string; + patient?: string; +}): Promise<{ data: T }>; + +declare function Patch(content: { + type: ResourceName; + id: string; + data: Array<{ + op: "replace" | "add" | "remove"; + path: string; + value: string | object; + }>; +}): Promise<{ data: fhir.OperationOutcome }>; + +declare function Update(content: { + resource: T; +}): Promise<{ data: T }>; + +declare function Search(content: { + type: ResourceName; + count?: number; + query?: QueryOptions; +}): Promise<{ data: fhir.Bundle }>; + +declare function NextPage(content: { + type: ResourceName; + bundle: fhir.Bundle; +}): Promise<{ data: fhir.Bundle }>; + +export interface FhirClient { + conformance: ClientFn; + document: ClientFn; + profile: ClientFn; + transaction: ClientFn; + history: ClientFn; + typeHistory: ClientFn; + resourceHistory: ClientFn; + read: typeof Read; + vread: ClientFn; + delete: ClientFn; + create: typeof Create; + validate: ClientFn; + search: typeof Search; + update: typeof Update; + nextPage: typeof NextPage; + prevPage: ClientFn; + resolve: ClientFn; + patch: typeof Patch; +} diff --git a/packages/esm-api/src/types/index.ts b/packages/esm-api/src/types/index.ts new file mode 100644 index 000000000..d5f61df15 --- /dev/null +++ b/packages/esm-api/src/types/index.ts @@ -0,0 +1,60 @@ +export interface FetchResponse extends Response { + data: T; +} + +export interface CurrentUserOptions { + includeAuthStatus?: boolean; +} + +export interface CurrentUserWithResponseOption extends CurrentUserOptions { + includeAuthStatus: true; +} + +export interface CurrentUserWithoutResponseOption extends CurrentUserOptions { + includeAuthStatus: false; +} + +export interface LoggedInUser { + uuid: string; + display: string; + username: string; + systemId: string; + userProperties: any; + person: Person; + privileges: Privilege[]; + roles: Role[]; + retired: boolean; + locale: string; + allowedLocales: string[]; + [anythingElse: string]: any; +} + +export interface UnauthenticatedUser { + sessionId: string; + authenticated: boolean; + user?: LoggedInUser; +} + +export interface Person { + uuid: string; + display: string; + links: any[]; +} + +export interface Privilege { + uuid: string; + display: string; + links: any[]; +} + +export interface Role { + uuid: string; + display: string; + links: any[]; +} + +export interface LoggedInUserFetchResponse extends FetchResponse { + data: UnauthenticatedUser & { + user?: LoggedInUser; + }; +} diff --git a/packages/esm-api/src/workspace/workspace.resource.tsx b/packages/esm-api/src/workspace/workspace.resource.tsx new file mode 100644 index 000000000..8cdc8a2a1 --- /dev/null +++ b/packages/esm-api/src/workspace/workspace.resource.tsx @@ -0,0 +1,20 @@ +import { Subject, Observable } from "rxjs"; + +const workspaceItem = new Subject(); + +export function newWorkspaceItem(item: WorkspaceItem) { + workspaceItem.next(item); +} + +export function getNewWorkspaceItem(): Observable { + return workspaceItem.asObservable(); +} + +export interface WorkspaceItem { + component: any; + name: string; + props: any; + validations?: Function; + inProgress: boolean; + componentClosed?: Function; +} diff --git a/packages/esm-extension-manager/tsconfig.json b/packages/esm-api/tsconfig.json similarity index 100% rename from packages/esm-extension-manager/tsconfig.json rename to packages/esm-api/tsconfig.json diff --git a/packages/esm-api/webpack.config.js b/packages/esm-api/webpack.config.js new file mode 100644 index 000000000..7bf1fbaeb --- /dev/null +++ b/packages/esm-api/webpack.config.js @@ -0,0 +1,41 @@ +const { resolve } = require("path"); +const CleanWebpackPlugin = require("clean-webpack-plugin").CleanWebpackPlugin; +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); + +module.exports = { + entry: [ + resolve(__dirname, "src/set-public-path.ts"), + resolve(__dirname, "src/index.ts"), + ], + output: { + filename: "openmrs-esm-api.js", + path: resolve(__dirname, "dist"), + libraryTarget: "system", + }, + devtool: "sourcemap", + module: { + rules: [ + { + parser: { + system: false, + }, + }, + { + test: /\.m?(js|ts|tsx)$/, + exclude: /(node_modules|bower_components)/, + use: "babel-loader", + }, + ], + }, + resolve: { + extensions: [".ts", ".js", ".tsx", ".jsx"], + }, + plugins: [new CleanWebpackPlugin(), new ForkTsCheckerWebpackPlugin()], + externals: ["react", "react-dom", /^@openmrs\/esm/, "single-spa", "i18next"], + devServer: { + disableHostCheck: true, + headers: { + "Access-Control-Allow-Origin": "*", + }, + }, +}; diff --git a/packages/esm-app-shell/.babelrc b/packages/esm-app-shell/.babelrc new file mode 100644 index 000000000..469d3d55f --- /dev/null +++ b/packages/esm-app-shell/.babelrc @@ -0,0 +1,7 @@ +{ + "presets": [ + "@babel/preset-env", + "@babel/preset-typescript", + "@babel/preset-react" + ] +} diff --git a/packages/esm-app-shell/browsersync.js b/packages/esm-app-shell/browsersync.js deleted file mode 100755 index b5879281b..000000000 --- a/packages/esm-app-shell/browsersync.js +++ /dev/null @@ -1,17 +0,0 @@ -#! /usr/bin/env node -var browserSync = require("browser-sync"); - -browserSync({ - proxy: "https://openmrs-spa.org/", - files: ["../omod/src/main/webapp/resources/openmrs.js"], - serveStatic: ["dist"], - open: false, - rewriteRules: [ - { - match: new RegExp("openmrs/moduleResources/spa/openmrs.js"), - fn: function () { - return "openmrs.js"; - }, - }, - ], -}); diff --git a/packages/esm-app-shell/package.json b/packages/esm-app-shell/package.json index 6fd883451..03b81229c 100644 --- a/packages/esm-app-shell/package.json +++ b/packages/esm-app-shell/package.json @@ -1,14 +1,18 @@ { "name": "@openmrs/esm-app-shell", + "version": "0.3.0", "license": "MPL-2.0", - "version": "0.2.0", "main": "dist/openmrs.js", "scripts": { + "start": "npm run watch", + "test": "jest --passWithNoTests", "build": "webpack --mode production", - "webpack-dev": "webpack --mode development --watch", - "browsersync": "./browsersync.js", - "start": "concurrently npm:webpack-dev npm:browsersync" + "watch": "webpack-dev-server", + "lint": "eslint src --ext ts,tsx" }, + "browserslist": [ + "extends browserslist-config-openmrs" + ], "repository": { "type": "git", "url": "git+https://github.com/openmrs/openmrs-esm-core.git" @@ -18,20 +22,27 @@ }, "homepage": "https://github.com/openmrs/openmrs-esm-core#readme", "dependencies": { - "@openmrs/esm-extension-manager": "^0.2.0", - "@openmrs/esm-module-config": "^0.2.0", + "@openmrs/esm-api": "^3.1.0", + "@openmrs/esm-config": "^0.3.0", + "@openmrs/esm-error-handling": "^1.3.0", + "@openmrs/esm-extensions": "^0.3.0", + "@openmrs/esm-styleguide": "^1.5.0", + "carbon-components": "^10.19.0", + "carbon-icons": "^7.0.7", + "i18next": "^19.6.0", "i18next-browser-languagedetector": "^4.3.1", + "i18next-http-backend": "^1.0.21", "i18next-icu": "^1.4.2", - "i18next-xhr-backend": "^3.2.2", "import-map-overrides": "^1.15.2", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-i18next": "^11.7.0", + "react-router-dom": "^5.2.0", + "rxjs": "^6.5.3", + "single-spa": "^4.4.1", "systemjs": "^6.3.3" }, "devDependencies": { - "@types/systemjs": "^6.1.0", - "browser-sync": "^2.26.7", - "concurrently": "^5.2.0", - "i18next": "^19.6.0", - "react-i18next": "^11.7.0", - "single-spa": "^4.4.1" + "@types/systemjs": "^6.1.0" } } diff --git a/packages/esm-app-shell/postcss.config.js b/packages/esm-app-shell/postcss.config.js new file mode 100644 index 000000000..858452e18 --- /dev/null +++ b/packages/esm-app-shell/postcss.config.js @@ -0,0 +1,8 @@ +module.exports = { + plugins: [ + require("autoprefixer"), + require("cssnano")({ + preset: "default", + }), + ], +}; diff --git a/packages/esm-app-shell/src/apps.ts b/packages/esm-app-shell/src/apps.ts new file mode 100644 index 000000000..4e44800fe --- /dev/null +++ b/packages/esm-app-shell/src/apps.ts @@ -0,0 +1,59 @@ +import { + ExtensionDefinition, + PageDefinition, + registerExtension, +} from "@openmrs/esm-extensions"; +import { registerApplication } from "single-spa"; +import { routePrefix, routeRegex } from "./helpers"; +import type { Activator, ActivatorDefinition } from "./types"; + +/** + * Normalizes the activator function, i.e., if we receive a + * string we'll prepend the SPA base (prefix). We'll also handle + * the case of a supplied array. + * @param activator The activator to preprocess. + */ +function preprocessActivator( + activator: ActivatorDefinition | Array +): Activator { + if (Array.isArray(activator)) { + const activators = activator.map(preprocessActivator); + return (location) => activators.some((activator) => activator(location)); + } else if (typeof activator === "string") { + return (location) => routePrefix(activator, location); + } else if (activator instanceof RegExp) { + return (location) => routeRegex(activator, location); + } else { + return activator; + } +} + +export function registerApp(appName: string, appExports: System.Module) { + const setup = appExports.setupOpenMRS; + + if (typeof setup === "function") { + const result = setup(); + + if (result && typeof result === "object") { + const availableExtensions: Array = + result.extensions ?? []; + + const availablePages: Array = result.pages ?? []; + + if (typeof result.activate !== "undefined") { + availablePages.push({ + load: result.lifecycle, + route: result.activate, + }); + } + + for (const { name, load } of availableExtensions) { + registerExtension(appName, name, load); + } + + for (const { route, load } of availablePages) { + registerApplication(appName, load, preprocessActivator(route)); + } + } + } +} diff --git a/packages/esm-app-shell/src/assets/favicon.ico b/packages/esm-app-shell/src/assets/favicon.ico new file mode 100644 index 000000000..623bcc33b Binary files /dev/null and b/packages/esm-app-shell/src/assets/favicon.ico differ diff --git a/packages/esm-app-shell/src/assets/importmap.json b/packages/esm-app-shell/src/assets/importmap.json new file mode 100644 index 000000000..ca085371c --- /dev/null +++ b/packages/esm-app-shell/src/assets/importmap.json @@ -0,0 +1,11 @@ +{ + "imports": { + "@openmrs/esm-patient-chart-widgets": "https://spa-modules.nyc3.digitaloceanspaces.com/@openmrs/esm-patient-chart-widgets/153e295c939a49ba3dd4c33c78bffcb21b0f9e15/openmrs-esm-patient-chart-widgets.js", + "@openmrs/esm-patient-chart-app": "https://spa-modules.nyc3.digitaloceanspaces.com/@openmrs/esm-patient-chart-app/5f2af6c54eb5c773d166609f9edf319f20a3448f/openmrs-esm-patient-chart.js", + "@openmrs/esm-home-app": "https://spa-modules.nyc3.digitaloceanspaces.com/@openmrs/esm-home-app/7d596acdaa0d21ec47192e71946d8e3670ba4c83/openmrs-esm-home.js", + "@openmrs/esm-primary-navigation-app": "https://spa-modules.nyc3.digitaloceanspaces.com/@openmrs/esm-primary-navigation-app/811ce7cdcf5548d41191bda1fd4fef1cd004bb1a/openmrs-esm-primary-navigation.js", + "@openmrs/esm-login-app": "https://spa-modules.nyc3.digitaloceanspaces.com/@openmrs/esm-login-app/ba86336f68ddc4fa364534b605a4184fea5ac1eb/openmrs-esm-login.js", + "@openmrs/esm-devtools-app": "https://spa-modules.nyc3.digitaloceanspaces.com/@openmrs/esm-devtools-app/75bc1045345193218fccb1058e061d24b6baa98b/openmrs-esm-devtools.js", + "@openmrs/esm-patient-registration-app": "https://spa-modules.nyc3.digitaloceanspaces.com/@openmrs/esm-patient-registration-app/4c21c56c4ecf57fed6a830d776cf161cf1eebba8/openmrs-esm-patient-registration.js" + } +} diff --git a/packages/esm-app-shell/src/dependencies.ts b/packages/esm-app-shell/src/dependencies.ts new file mode 100644 index 000000000..03b24ff41 --- /dev/null +++ b/packages/esm-app-shell/src/dependencies.ts @@ -0,0 +1,18 @@ +export const sharedDependencies = { + i18next: () => require("i18next"), + react: () => require("react"), + "react-dom": () => require("react-dom"), + "react-router-dom": () => require("react-router-dom"), + "react-i18next": () => require("react-i18next"), + "single-spa": () => require("single-spa"), + "@openmrs/esm-api": () => require("@openmrs/esm-api"), + "@openmrs/esm-error-handling": () => require("@openmrs/esm-error-handling"), + "@openmrs/esm-config": () => require("@openmrs/esm-config"), + "@openmrs/esm-module-config": () => require("@openmrs/esm-config"), + "@openmrs/esm-extensions": () => require("@openmrs/esm-extensions"), + "@openmrs/esm-extension-manager": () => require("@openmrs/esm-extensions"), + "@openmrs/esm-styleguide": () => require("@openmrs/esm-styleguide"), + "carbon-components": () => import("carbon-components"), + "carbon-icons": () => import("carbon-icons"), + rxjs: () => import("rxjs"), +}; diff --git a/packages/esm-app-shell/src/helpers.ts b/packages/esm-app-shell/src/helpers.ts index ac2823a27..f19132370 100644 --- a/packages/esm-app-shell/src/helpers.ts +++ b/packages/esm-app-shell/src/helpers.ts @@ -1,9 +1,3 @@ -export interface Activator { - (location: Location): boolean; -} - -export type ActivatorDefinition = Activator | RegExp | string; - export function routePrefix(prefix: string, location: Location) { return location.pathname.startsWith(window.getOpenmrsSpaBase() + prefix); } diff --git a/packages/esm-app-shell/src/index.ejs b/packages/esm-app-shell/src/index.ejs new file mode 100644 index 000000000..9bd49a1ad --- /dev/null +++ b/packages/esm-app-shell/src/index.ejs @@ -0,0 +1,37 @@ + + + + + + OpenMRS + + + + + +<% if (openmrsImportmapDef) { %> + +<% } else { %> + + +<% } %> + + + + + + diff --git a/packages/esm-app-shell/src/index.ts b/packages/esm-app-shell/src/index.ts index e8ddca6d8..b87658014 100644 --- a/packages/esm-app-shell/src/index.ts +++ b/packages/esm-app-shell/src/index.ts @@ -1,41 +1,12 @@ -import { loadModules } from "./system"; -import { ExtensionDefinition } from "@openmrs/esm-extension-manager"; -import { setupI18n } from "./locale"; -import { - routePrefix, - Activator, - ActivatorDefinition, - routeRegex, -} from "./helpers"; +import "./style"; -declare global { - interface Window extends SpaConfig { - getOpenmrsSpaBase(): string; - importMapOverrides: { - getCurrentPageMap: () => Promise; - }; - } -} - -interface ImportMap { - imports: Record; -} - -export interface SpaConfig { - /** - * The base path for the OpenMRS API / endpoints. - */ - openmrsBase: string; - /** - * The base path for the SPA root path. - */ - spaBase: string; - /** - * The names of additional modules to load initially, - * if any. - */ - coreLibs?: Array; -} +import { start } from "single-spa"; +import { createAppState, setupApiModule } from "@openmrs/esm-api"; +import { setupI18n } from "./locale"; +import { registerApp } from "./apps"; +import { sharedDependencies } from "./dependencies"; +import { loadModules, registerModules } from "./system"; +import type { SpaConfig } from "./types"; /** * Gets the microfrontend modules (apps). These are entries @@ -57,27 +28,6 @@ function loadApps() { .then((importMap) => loadModules(getApps(importMap.imports))); } -/** - * Normalizes the activator function, i.e., if we receive a - * string we'll prepend the SPA base (prefix). We'll also handle - * the case of a supplied array. - * @param activator The activator to preprocess. - */ -function preprocessActivator( - activator: ActivatorDefinition | Array -): Activator { - if (Array.isArray(activator)) { - const activators = activator.map(preprocessActivator); - return (location) => activators.some((activator) => activator(location)); - } else if (typeof activator === "string") { - return (location) => routePrefix(activator, location); - } else if (activator instanceof RegExp) { - return (location) => routeRegex(activator, location); - } else { - return activator; - } -} - /** * Sets up the microfrontends (apps). Uses the defined export * from the root modules of the apps, which should export a @@ -87,32 +37,7 @@ function preprocessActivator( */ function setupApps(modules: Array<[string, System.Module]>) { for (const [appName, appExports] of modules) { - const setup = appExports.setupOpenMRS; - - if (typeof setup === "function") { - const result = setup(); - - if (result && typeof result === "object") { - System.import("single-spa").then(({ registerApplication }) => { - System.import("@openmrs/esm-extension-manager").then( - ({ registerExtension }) => { - const availableExtensions: Array = - result.extensions ?? []; - - for (const { name, load } of availableExtensions) { - registerExtension({ name, load, appName }); - } - - registerApplication( - appName, - result.lifecycle, - preprocessActivator(result.activate) - ); - } - ); - }); - } - } + registerApp(appName, appExports); } } @@ -120,36 +45,20 @@ function setupApps(modules: Array<[string, System.Module]>) { * Runs the shell by importing the translations and starting single SPA. */ function runShell() { - return System.import("single-spa").then(({ start }) => { - return setupI18n() - .catch((err) => console.error(`Failed to initialize translations`, err)) - .then(start); - }); + return setupI18n() + .catch((err) => console.error(`Failed to initialize translations`, err)) + .then(start); } -/** - * Initializes the OpenMRS Microfrontend App Shell. - * @param config The global configuration to apply. - */ -export function initializeSpa(config: SpaConfig) { - const libs = [ - "single-spa", - "@openmrs/esm-styleguide", - "@openmrs/esm-extension-manager", - ]; - - window.openmrsBase = config.openmrsBase; - window.spaBase = config.spaBase; - window.getOpenmrsSpaBase = () => `${window.openmrsBase}${window.spaBase}/`; - - return loadModules(libs) - .then(loadApps) - .then(setupApps) - .then(runShell) - .catch(handleInitFailure); +function setupPaths(config: SpaConfig) { + window.openmrsBase = config.apiUrl; + window.spaBase = config.spaPath; + window.getOpenmrsSpaBase = () => `${window.spaBase}/`; } -function handleInitFailure() { +function handleInitFailure(e: Error) { + console.error(e); + if (localStorage.getItem("openmrs:devtools")) { renderDevResetButton(); } else { @@ -161,18 +70,18 @@ function renderApology() { const msg = document.createTextNode( "Sorry, something has gone as badly as possible" ); - document.appendChild(msg); + document.body.appendChild(msg); } function renderDevResetButton() { const btn = document.createElement("button"); - btn.onclick = clearDevOverrides; - btn.innerHTML = "Reset dev overrides"; + btn.addEventListener("click", clearDevOverrides); + btn.textContent = "Reset dev overrides"; document.body.appendChild(btn); } function clearDevOverrides() { - for (let key of Object.keys(localStorage)) { + for (const key of Object.keys(localStorage)) { if ( key.startsWith("import-map-override:") && !["import-map-override:react", "import-map-override:react-dom"].includes( @@ -184,3 +93,15 @@ function clearDevOverrides() { } location.reload(); } + +/** + * Initializes the OpenMRS Microfrontend App Shell. + * @param config The global configuration to apply. + */ +export function initializeSpa(config: SpaConfig) { + setupPaths(config); + registerModules(sharedDependencies); + setupApiModule(); + createAppState({}); + return loadApps().then(setupApps).then(runShell).catch(handleInitFailure); +} diff --git a/packages/esm-app-shell/src/locale.ts b/packages/esm-app-shell/src/locale.ts index ade367332..341b6393b 100644 --- a/packages/esm-app-shell/src/locale.ts +++ b/packages/esm-app-shell/src/locale.ts @@ -1,20 +1,20 @@ +import * as i18next from "i18next"; import ICU from "i18next-icu"; -import i18nextXhrBackend from "i18next-xhr-backend"; +import HttpApi from "i18next-http-backend"; import LanguageDetector from "i18next-browser-languagedetector"; -import { i18n } from "i18next"; +import { initReactI18next } from "react-i18next"; declare global { interface Window { - i18next: i18n; + i18next: i18next.i18n; } } const languageChangeObserver = new MutationObserver(() => { const reDetect: any = undefined; - window.i18next.changeLanguage(reDetect).catch((e) => { - console.error("i18next failed to re-detect language"); - console.error(e); - }); + window.i18next + .changeLanguage(reDetect) + .catch((e) => console.error("i18next failed to re-detect language", e)); }); languageChangeObserver.observe(document.documentElement, { @@ -29,59 +29,51 @@ function decodeHtmlEntity(html: string) { } export function setupI18n() { - return Promise.all([ - System.import("i18next"), - System.import("react-i18next"), - ]).then(([i18next, { initReactI18next }]) => { - window.i18next = i18next.default || i18next; + window.i18next = i18next.default || i18next; - return window.i18next - .use(LanguageDetector) - .use(i18nextXhrBackend) - .use(initReactI18next) - .use(ICU) - .init({ - backend: { - parse: (data) => data, - loadPath: "{{lng}}|{{ns}}", - ajax(url, _, callback) { - const [language, namespace] = url.split("|"); + return window.i18next + .use(LanguageDetector) + .use(HttpApi) + .use(initReactI18next) + .use(ICU) + .init({ + backend: { + parse: (data) => data, + loadPath: "{{lng}}|{{ns}}", + request(options, url, payload, callback) { + const [language, namespace] = url.split("|"); - if (namespace === "translation") { - callback(null, { status: 404 }); - } else { - System.import(decodeHtmlEntity(namespace)) - .then((m) => { - if (typeof m.importTranslation !== "function") { - throw Error( - `Module ${namespace} does not export an importTranslation function` - ); - } - - const importPromise = m.importTranslation( - `./${language}.json` + if (namespace === "translation") { + callback(null, { status: 404, data: null }); + } else { + System.import(decodeHtmlEntity(namespace)) + .then((m) => { + if (typeof m.importTranslation !== "function") { + throw Error( + `Module ${namespace} does not export an importTranslation function` ); + } - if (!(importPromise instanceof Promise)) { - throw Error( - `Module ${namespace} exports an importTranslation function that does not return a promise. Did you forget to set require.context mode to 'lazy'?` - ); - } + const importPromise = m.importTranslation(`./${language}.json`); - return importPromise; - }) - .then((json) => callback(json, { status: 200 })) - .catch((err) => { - console.error(err); - callback(null, { status: 404 }); - }); - } - }, - }, - detection: { - order: ["querystring", "htmlTag", "localStorage", "navigator"], + if (!(importPromise instanceof Promise)) { + throw Error( + `Module ${namespace} exports an importTranslation function that does not return a promise. Did you forget to set require.context mode to 'lazy'?` + ); + } + + return importPromise; + }) + .then( + (json) => callback(json, null, { status: 200, data: json }), + (err) => callback(err, { status: 404, data: null }) + ); + } }, - fallbackLng: "en", - }); - }); + }, + detection: { + order: ["querystring", "htmlTag", "localStorage", "navigator"], + }, + fallbackLng: "en", + }); } diff --git a/packages/esm-app-shell/src/style.ts b/packages/esm-app-shell/src/style.ts new file mode 100644 index 000000000..dab2de238 --- /dev/null +++ b/packages/esm-app-shell/src/style.ts @@ -0,0 +1,2 @@ +import "carbon-components/css/carbon-components.min.css"; +import "@openmrs/esm-styleguide"; diff --git a/packages/esm-app-shell/src/system.ts b/packages/esm-app-shell/src/system.ts index 142069c87..8f515682b 100644 --- a/packages/esm-app-shell/src/system.ts +++ b/packages/esm-app-shell/src/system.ts @@ -4,6 +4,7 @@ import "systemjs/dist/extras/amd"; import "systemjs/dist/extras/named-exports"; import "systemjs/dist/extras/named-register"; import "systemjs/dist/extras/use-default"; +import type { ModuleResolver } from "./types"; /** * Loads all provided modules by their name. Performs a @@ -20,3 +21,21 @@ export function loadModules(modules: Array) { ) ); } + +export function registerModules(modules: Record) { + Object.keys(modules).forEach((name) => registerModule(name, modules[name])); +} + +export function registerModule(name: string, resolve: ModuleResolver) { + System.register(name, [], (_exports) => ({ + execute() { + const content = resolve(); + + if (content instanceof Promise) { + return content.then((innerContent) => _exports(innerContent)); + } else { + _exports(content); + } + }, + })); +} diff --git a/packages/esm-app-shell/src/types.ts b/packages/esm-app-shell/src/types.ts new file mode 100644 index 000000000..eadcccd9c --- /dev/null +++ b/packages/esm-app-shell/src/types.ts @@ -0,0 +1,35 @@ +declare global { + interface Window { + getOpenmrsSpaBase(): string; + openmrsBase: string; + spaBase: string; + importMapOverrides: { + getCurrentPageMap: () => Promise; + }; + } +} + +export interface ImportMap { + imports: Record; +} + +export interface SpaConfig { + /** + * The base path or URL for the OpenMRS API / endpoints. + */ + apiUrl: string; + /** + * The base path for the SPA root path. + */ + spaPath: string; +} + +export interface Activator { + (location: Location): boolean; +} + +export type ActivatorDefinition = Activator | RegExp | string; + +export interface ModuleResolver { + (): System.Module | Promise; +} diff --git a/packages/esm-app-shell/tools/helpers.js b/packages/esm-app-shell/tools/helpers.js new file mode 100644 index 000000000..b9644ea2c --- /dev/null +++ b/packages/esm-app-shell/tools/helpers.js @@ -0,0 +1,4 @@ +exports.removeTrailingSlash = (path) => { + const i = path.length - 1; + return path[i] === "/" ? removeTrailingSlash(path.substr(0, i)) : path; +}; diff --git a/packages/esm-app-shell/tsconfig.json b/packages/esm-app-shell/tsconfig.json index 056e900c5..b96f2e21d 100644 --- a/packages/esm-app-shell/tsconfig.json +++ b/packages/esm-app-shell/tsconfig.json @@ -1,11 +1,20 @@ { "compilerOptions": { + "esModuleInterop": true, "module": "esnext", - "target": "es6", + "allowSyntheticDefaultImports": true, + "jsx": "react", "strictNullChecks": true, "moduleResolution": "node", - "declaration": false, - "lib": ["dom", "es2019"] + "lib": [ + "dom", + "es5", + "scripthost", + "es2015", + "es2015.promise", + "es2016.array.include", + "es2018" + ] }, "include": ["src/**/*"] } diff --git a/packages/esm-app-shell/webpack.config.js b/packages/esm-app-shell/webpack.config.js index e2940cfa2..124081633 100644 --- a/packages/esm-app-shell/webpack.config.js +++ b/packages/esm-app-shell/webpack.config.js @@ -1,4 +1,24 @@ +const CleanWebpackPlugin = require("clean-webpack-plugin").CleanWebpackPlugin; +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const CopyWebpackPlugin = require("copy-webpack-plugin"); + const { resolve } = require("path"); +const { readFileSync } = require("fs"); +const { removeTrailingSlash } = require("./tools/helpers"); + +const openmrsApiUrl = removeTrailingSlash( + process.env.OMRS_API_URL || "/openmrs" +); +const openmrsPublicPath = removeTrailingSlash( + process.env.OMRS_PUBLIC_PATH || "/openmrs/spa" +); +const openmrsProxyTarget = + process.env.OMRS_PROXY_TARGET || "https://openmrs-spa.org/"; +const openmrsFavicon = process.env.OMRS_FAVICON || "favicon.ico"; +const openmrsImportmapDef = process.env.OMRS_ESM_IMPORTMAP; +const openmrsImportmapUrl = + process.env.OMRS_ESM_IMPORTMAP_URL || "importmap.json"; module.exports = { entry: resolve(__dirname, "src/index.ts"), @@ -6,6 +26,27 @@ module.exports = { filename: "openmrs.js", path: resolve(__dirname, "dist"), libraryTarget: "window", + publicPath: openmrsPublicPath, + }, + devServer: { + compress: true, + open: true, + openPage: `${openmrsPublicPath}/`.substr(1), + historyApiFallback: { + rewrites: [ + { + from: new RegExp(`^${openmrsPublicPath}/`), + to: `${openmrsPublicPath}/index.html`, + }, + ], + }, + proxy: [ + { + context: [`${openmrsApiUrl}/**`, `!${openmrsPublicPath}/**`], + target: openmrsProxyTarget, + changeOrigin: true, + }, + ], }, devtool: "sourcemap", module: { @@ -16,13 +57,65 @@ module.exports = { }, }, { - test: /\.ts$/, - exclude: /(node_modules|bower_components)/, - use: "ts-loader", + test: /\.css$/, + use: [ + { loader: require.resolve(MiniCssExtractPlugin.loader) }, + { loader: require.resolve("css-loader") }, + { loader: require.resolve("postcss-loader") }, + ], + }, + { + test: /\.(woff|woff2|png)?$/, + use: [{ loader: require.resolve("file-loader") }], + }, + { + test: /\.(svg|html)$/, + use: [{ loader: require.resolve("raw-loader") }], + }, + { + test: /\.(js|jsx)$/, + use: [ + { + loader: require.resolve("babel-loader"), + options: JSON.parse( + readFileSync(resolve(__dirname, ".babelrc"), "utf8") + ), + }, + ], + }, + { + test: /\.(ts|tsx)?$/, + use: [ + { + loader: require.resolve("ts-loader"), + options: { + allowTsInNodeModules: true, + }, + }, + ], }, ], }, resolve: { - extensions: [".ts", ".js"], + mainFields: ["module", "main"], + extensions: [".ts", ".tsx", ".js", ".jsx"], }, + plugins: [ + new CleanWebpackPlugin(), + new HtmlWebpackPlugin({ + inject: false, + template: resolve(__dirname, "src/index.ejs"), + templateParameters: { + openmrsApiUrl, + openmrsPublicPath, + openmrsFavicon, + openmrsImportmapDef, + openmrsImportmapUrl, + }, + }), + new CopyWebpackPlugin({ + patterns: [{ from: resolve(__dirname, "src/assets") }], + }), + new MiniCssExtractPlugin({ filename: "openmrs.css" }), + ], }; diff --git a/packages/esm-config/LICENSE b/packages/esm-config/LICENSE deleted file mode 100644 index 52f07dd23..000000000 --- a/packages/esm-config/LICENSE +++ /dev/null @@ -1,401 +0,0 @@ -Mozilla Public License, version 2.0 - -1. Definitions - -1.1. "Contributor" - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - -1.2. "Contributor Version" - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the terms of - a Secondary License. - -1.6. "Executable Form" - - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - - means a work that combines Covered Software with other material, in a - separate file or files, that is not Covered Software. - -1.8. "License" - - means this document. - -1.9. "Licensable" - - means having the right to grant, to the maximum extent possible, whether - at the time of the initial grant or subsequently, any and all of the - rights conveyed by this License. - -1.10. "Modifications" - - means any of the following: - - a. any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. "Patent Claims" of a Contributor - - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the License, - by the making, using, selling, offering for sale, having made, import, - or transfer of either its Contributions or its Contributor Version. - -1.12. "Secondary License" - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - -1.13. "Source Code Form" - - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, "control" means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - -2. License Grants and Conditions - -2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution - become effective for each Contribution on the date the Contributor first - distributes such Contribution. - -2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under - this License. No additional rights or licenses will be implied from the - distribution or licensing of Covered Software under this License. - Notwithstanding Section 2.1(b) above, no patent license is granted by a - Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of - its Contributions. - - This License does not grant any rights in the trademarks, service marks, - or logos of any Contributor (except as may be necessary to comply with - the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this - License (see Section 10.2) or under the terms of a Secondary License (if - permitted under the terms of Section 3.3). - -2.5. Representation - - Each Contributor represents that the Contributor believes its - Contributions are its original creation(s) or it has sufficient rights to - grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - - This License is not intended to limit any rights You have under - applicable copyright doctrines of fair use, fair dealing, or other - equivalents. - -2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - -3. Responsibilities - -3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under - the terms of this License. You must inform recipients that the Source - Code Form of the Covered Software is governed by the terms of this - License, and how they can obtain a copy of this License. You may not - attempt to alter or restrict the recipients' rights in the Source Code - Form. - -3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter the - recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for - the Covered Software. If the Larger Work is a combination of Covered - Software with a work governed by one or more Secondary Licenses, and the - Covered Software is not Incompatible With Secondary Licenses, this - License permits You to additionally distribute such Covered Software - under the terms of such Secondary License(s), so that the recipient of - the Larger Work may, at their option, further distribute the Covered - Software under the terms of either this License or such Secondary - License(s). - -3.4. Notices - - You may not remove or alter the substance of any license notices - (including copyright notices, patent notices, disclaimers of warranty, or - limitations of liability) contained within the Source Code Form of the - Covered Software, except that You may alter any license notices to the - extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on - behalf of any Contributor. You must make it absolutely clear that any - such warranty, support, indemnity, or liability obligation is offered by - You alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, - judicial order, or regulation then You must: (a) comply with the terms of - this License to the maximum extent possible; and (b) describe the - limitations and the code they affect. Such description must be placed in a - text file included with all distributions of the Covered Software under - this License. Except to the extent prohibited by statute or regulation, - such description must be sufficiently detailed for a recipient of ordinary - skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing - basis, if such Contributor fails to notify You of the non-compliance by - some reasonable means prior to 60 days after You have come back into - compliance. Moreover, Your grants from a particular Contributor are - reinstated on an ongoing basis if such Contributor notifies You of the - non-compliance by some reasonable means, this is the first time You have - received notice of non-compliance with this License from such - Contributor, and You become compliant prior to 30 days after Your receipt - of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, - counter-claims, and cross-claims) alleging that a Contributor Version - directly or indirectly infringes any patent, then the rights granted to - You by any and all Contributors for the Covered Software under Section - 2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an "as is" basis, - without warranty of any kind, either expressed, implied, or statutory, - including, without limitation, warranties that the Covered Software is free - of defects, merchantable, fit for a particular purpose or non-infringing. - The entire risk as to the quality and performance of the Covered Software - is with You. Should any Covered Software prove defective in any respect, - You (not any Contributor) assume the cost of any necessary servicing, - repair, or correction. This disclaimer of warranty constitutes an essential - part of this License. No use of any Covered Software is authorized under - this License except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from - such party's negligence to the extent applicable law prohibits such - limitation. Some jurisdictions do not allow the exclusion or limitation of - incidental or consequential damages, so this exclusion and limitation may - not apply to You. - -8. Litigation - - Any litigation relating to this License may be brought only in the courts - of a jurisdiction where the defendant maintains its principal place of - business and such litigation shall be governed by laws of that - jurisdiction, without reference to its conflict-of-law provisions. Nothing - in this Section shall prevent a party's ability to bring cross-claims or - counter-claims. - -9. Miscellaneous - - This License represents the complete agreement concerning the subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. Any law or regulation which provides that - the language of a contract shall be construed against the drafter shall not - be used to construe this License against a Contributor. - - -10. Versions of the License - -10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - -10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version - of the License under which You originally received the Covered Software, - or under the terms of any subsequent version published by the license - steward. - -10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a - modified version of this License if you rename the license and remove - any references to the name of the license steward (except to note that - such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary - Licenses If You choose to distribute Source Code Form that is - Incompatible With Secondary Licenses under the terms of this version of - the License, the notice described in Exhibit B of this License must be - attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, -then You may include the notice in a location (such as a LICENSE file in a -relevant directory) where a recipient would be likely to look for such a -notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice - - This Source Code Form is "Incompatible - With Secondary Licenses", as defined by - the Mozilla Public License, v. 2.0. - ---------------------- - -Healthcare Disclaimer - -In the United States, or any other jurisdictions where they may apply, the -following additional disclaimer of warranty and limitation of liability are -hereby incorporated into the terms and conditions of MPL 2.0: - -1. No warranties of any kind whatsoever are made as to the results that - You will obtain from relying upon the covered code (or any information - or content obtained by way of the covered code), including but not - limited to compliance with privacy laws or regulations or clinical - care industry standards and protocols. Use of the covered code is not - a substitute for a health care provider’s standard practice or - professional judgment. Any decision with regard to the appropriateness - of treatment, or the validity or reliability of information or content - made available by the covered code, is the sole responsibility of the - health care provider. Consequently, it is incumbent upon each health - care provider to verify all medical history and treatment plans with - each patient. - -2. Under no circumstances and under no legal theory, whether tort - (including negligence), contract, or otherwise, shall any Contributor, - or anyone who distributes Covered Software as permitted by the - license, be liable to You for any indirect, special, incidental, - consequential damages of any character including, without limitation, - damages for loss of goodwill, work stoppage, computer failure or - malfunction, or any and all other damages or losses, of any nature - whatsoever (direct or otherwise) on account of or associated with the - use or inability to use the covered content (including, without - limitation, the use of information or content made available by the - covered code, all documentation associated therewith, and the failure - of the covered code to comply with privacy laws and regulations or - clinical care industry standards and protocols), even if such party - shall have been informed of the possibility of such damages. - -Copyright (c) OpenMRS Inc. -OpenMRS is a registered trademark and the OpenMRS graphic logo is a trademark of OpenMRS Inc. \ No newline at end of file diff --git a/packages/esm-config/README.md b/packages/esm-config/README.md index a2947021a..18aabf676 100644 --- a/packages/esm-config/README.md +++ b/packages/esm-config/README.md @@ -1,7 +1,6 @@ -# openmrs-esm-module-config +# openmrs-esm-config -[![Build Status](https://travis-ci.com/openmrs/openmrs-esm-module-config.svg?branch=master)](https://travis-ci.com/openmrs/openmrs-esm-module-config) -[![npm: openmrs/esm-module-config](https://img.shields.io/npm/v/@openmrs/esm-module-config)](https://www.npmjs.com/package/@openmrs/esm-module-config) +[![npm: openmrs/esm-module-config](https://img.shields.io/npm/v/@openmrs/esm-config)](https://www.npmjs.com/package/@openmrs/esm-config) ## What is this? @@ -101,7 +100,7 @@ esm-module-config. All this must happen before you register your applications. Example code: ```js -import { provide } from "@openmrs/esm-module-config"; +import { provide } from "@openmrs/esm-config"; import pihConfig from "./pih-config.json"; import pihMexicoConfig from "./pih-mexico-config.json"; @@ -122,7 +121,7 @@ You can break up your configuration files into hierarchies, or per module, or pe You should use this module, esm-module-config, to make your modules configurable. -Start by `npm install --save @openmrs/esm-module-config`. This is a runtime +Start by `npm install --save @openmrs/esm-config`. This is a runtime dependency, so it should be included in your webpack `externals`. The main task is to create a config schema for your module. The config schema @@ -165,7 +164,7 @@ In the following section, we'll see how to write a config schema that supports t We'll start with just that first nested config element from above, `hologram.color`. We must provide defaults for all of the values—in OpenMRS Microfrontends, all configuration is optional. ```js -import { defineConfigSchema, validators, validator } from "@openmrs/esm-module-config" +import { defineConfigSchema, validators, validator } from "@openmrs/esm-config" defineConfigSchema("@openmrs/esm-hologram-doctor", { hologram: { @@ -319,7 +318,7 @@ The config is fetched asynchronously using `getConfig(moduleName)`. Continuing t above example, we would have something like ```js -import { getConfig } from "@openmrs/esm-module-config" +import { getConfig } from "@openmrs/esm-config" async function doctorGreeting() { const config = await getConfig("@openmrs/esm-hologram-doctor") @@ -347,7 +346,7 @@ export default openmrsRootDecorator({ You can then get the config tree as an object using the `useConfig` React hook. ```js -import { useConfig } from "@openmrs/esm-module-config" +import { useConfig } from "@openmrs/esm-config" export default function DoctorGreeting() { const config = useConfig() diff --git a/packages/esm-config/package.json b/packages/esm-config/package.json index 3f7b166a5..11fb2880c 100644 --- a/packages/esm-config/package.json +++ b/packages/esm-config/package.json @@ -1,22 +1,21 @@ { - "name": "@openmrs/esm-module-config", - "version": "0.2.0", + "name": "@openmrs/esm-config", + "version": "0.3.0", + "license": "MPL-2.0", "description": "A configuration library for the OpenMRS Single-Spa framework.", - "main": "dist/openmrs-esm-module-config.js", + "browser": "dist/openmrs-esm-module-config.js", + "main": "src/index.ts", + "source": true, "scripts": { - "clean": "rimraf dist", "document": "./document.sh", - "start": "webpack-dev-server", - "start-https": "webpack-dev-server --https", - "test": "BABEL_ENV=test jest", - "lint": "eslint src --ext ts,tsx", + "test": "jest --config jest.config.js --passWithNoTests", + "build": "webpack --mode=production", "typescript": "tsc", - "build": "rimraf dist && concurrently -n webpack,typescript 'webpack --mode=production' 'npm run typescript'", - "prepublishOnly": "npm run build" + "lint": "eslint src --ext ts,tsx" }, - "license": "MPL-2.0", "directories": { - "lib": "dist" + "lib": "dist", + "src": "src" }, "browserslist": [ "extends browserslist-config-openmrs" @@ -30,16 +29,19 @@ }, "homepage": "https://github.com/openmrs/openmrs-esm-core#readme", "dependencies": { - "ramda": "^0.26.1" + "ramda": "^0.26.1", + "systemjs-webpack-interop": "^2.1.2" + }, + "peerDependencies": { + "react": "16.x", + "single-spa": "4.x" }, "devDependencies": { "@types/ramda": "^0.26.44", - "@types/react": "^16.9.30", + "@types/react": "^16.9.46", "@types/systemjs": "^6.1.0", "babel-plugin-ramda": "^2.0.0", "react": "^16.13.1", - "react-dom": "^16.13.1", - "single-spa": "^4.4.1", - "systemjs-webpack-interop": "^2.1.2" + "single-spa": "^4.4.1" } } diff --git a/packages/esm-config/src/index.ts b/packages/esm-config/src/index.ts new file mode 100644 index 000000000..6e0210dd3 --- /dev/null +++ b/packages/esm-config/src/index.ts @@ -0,0 +1,7 @@ +export * from "./module-config/module-config"; +export * from "./react-hook/react-hook"; +export * from "./navigation/navigate"; +export * from "./navigation/react-configurable-link"; +export * from "./navigation/interpolate-string"; +export * from "./validators/validator"; +export * from "./validators/validators"; diff --git a/packages/esm-config/src/navigation/navigate.ts b/packages/esm-config/src/navigation/navigate.ts index c16058cc5..91383bfd0 100644 --- a/packages/esm-config/src/navigation/navigate.ts +++ b/packages/esm-config/src/navigation/navigate.ts @@ -1,10 +1,15 @@ import { navigateToUrl } from "single-spa"; import { interpolateUrl } from "./interpolate-string"; +import type {} from "@openmrs/esm-app-shell/src/types"; function trimTrailingSlash(str: string) { return str.replace(/\/$/, ""); } +export interface NavigateOptions { + to: string; +} + /** * Calls `location.assign` for non-SPA paths and [navigateToUrl](https://single-spa.js.org/docs/api/#navigatetourl) for SPA paths * @@ -25,21 +30,10 @@ export function navigate({ to }: NavigateOptions): void { const openmrsSpaBase = trimTrailingSlash(window.getOpenmrsSpaBase()); const target = interpolateUrl(to); const isSpaPath = target.startsWith(openmrsSpaBase); + if (isSpaPath) { navigateToUrl(target); } else { window.location.assign(target); } } - -type NavigateOptions = { - to: string; -}; - -declare global { - interface Window { - spaBase: string; - openmrsBase: string; - getOpenmrsSpaBase: () => string; - } -} diff --git a/packages/esm-config/src/openmrs-esm-module-config.ts b/packages/esm-config/src/openmrs-esm-module-config.ts deleted file mode 100644 index ca6f7eced..000000000 --- a/packages/esm-config/src/openmrs-esm-module-config.ts +++ /dev/null @@ -1,23 +0,0 @@ -export { - defineConfigSchema, - getConfig, - provide, - getDevtoolsConfig, - getAreDevDefaultsOn, - setAreDevDefaultsOn, - processConfig, - getTemporaryConfig, - setTemporaryConfigValue, - unsetTemporaryConfigValue, - clearTemporaryConfig, - getExtensionSlotConfig, -} from "./module-config/module-config"; - -export { ModuleNameContext, useConfig } from "./react-hook/react-hook"; - -export { navigate } from "./navigation/navigate"; -export { ConfigurableLink } from "./navigation/react-configurable-link"; -export { interpolateString } from "./navigation/interpolate-string"; - -export { validator } from "./validators/validator"; -export { validators } from "./validators/validators"; diff --git a/packages/esm-config/src/validators/validators.ts b/packages/esm-config/src/validators/validators.ts index cac657855..656dfcea0 100644 --- a/packages/esm-config/src/validators/validators.ts +++ b/packages/esm-config/src/validators/validators.ts @@ -46,7 +46,9 @@ export const isUrlWithTemplateParameters = ( if (!val) { return false; } + const matches = val.matchAll(/\${(.*?)}/g); + for (let match of matches) { if (!allowedParams.includes(match[1])) { return false; diff --git a/packages/esm-config/tsconfig.json b/packages/esm-config/tsconfig.json index f70210b04..274494873 100644 --- a/packages/esm-config/tsconfig.json +++ b/packages/esm-config/tsconfig.json @@ -2,11 +2,13 @@ "compilerOptions": { "esModuleInterop": true, "module": "esnext", - "target": "es6", "allowSyntheticDefaultImports": true, + "jsx": "react", "strictNullChecks": true, "moduleResolution": "node", - "jsx": "react", + "declaration": true, + "declarationDir": "dist", + "emitDeclarationOnly": true, "lib": [ "dom", "es5", @@ -15,8 +17,7 @@ "es2015.promise", "es2016.array.include", "es2018" - ], - "noEmit": true + ] }, "include": ["src/**/*"] } diff --git a/packages/esm-config/webpack.config.js b/packages/esm-config/webpack.config.js index f14ceca5f..2c75b5229 100644 --- a/packages/esm-config/webpack.config.js +++ b/packages/esm-config/webpack.config.js @@ -1,39 +1,39 @@ -const path = require("path"); +const { resolve } = require("path"); const CleanWebpackPlugin = require("clean-webpack-plugin").CleanWebpackPlugin; const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); module.exports = { - entry: path.resolve(__dirname, "src/openmrs-esm-module-config.ts"), + entry: [resolve(__dirname, "src/index.ts")], devtool: "sourcemap", output: { filename: "openmrs-esm-module-config.js", - path: path.resolve(__dirname, "dist"), + path: resolve(__dirname, "dist"), libraryTarget: "system", - jsonpFunction: "webpackJsonp_openmrs_esm_module_config" + jsonpFunction: "webpackJsonp_openmrs_esm_module_config", }, module: { rules: [ { parser: { - system: false - } + system: false, + }, }, { test: /\.m?(js|ts|tsx)$/, exclude: /(node_modules|bower_components)/, - use: "babel-loader" - } - ] + use: "babel-loader", + }, + ], }, resolve: { - extensions: [".ts", ".js", ".tsx", ".jsx"] + extensions: [".ts", ".js", ".tsx", ".jsx"], }, externals: ["react", "react-dom", "single-spa", /^@openmrs\/esm.*/], plugins: [new CleanWebpackPlugin(), new ForkTsCheckerWebpackPlugin()], devServer: { disableHostCheck: true, headers: { - "Access-Control-Allow-Origin": "*" - } - } + "Access-Control-Allow-Origin": "*", + }, + }, }; diff --git a/packages/esm-error-handling/.babelrc b/packages/esm-error-handling/.babelrc new file mode 100644 index 000000000..3313ff9ef --- /dev/null +++ b/packages/esm-error-handling/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-env", "@babel/preset-typescript"] +} diff --git a/packages/esm-error-handling/README.md b/packages/esm-error-handling/README.md new file mode 100644 index 000000000..43e883abf --- /dev/null +++ b/packages/esm-error-handling/README.md @@ -0,0 +1,3 @@ +# openmrs-esm-error-handling + +[Wiki documentation](https://wiki.openmrs.org/display/projects/openmrs-esm-error-handling) diff --git a/packages/esm-error-handling/__mocks__/openmrs-esm-styleguide.mock.tsx b/packages/esm-error-handling/__mocks__/openmrs-esm-styleguide.mock.tsx new file mode 100644 index 000000000..825f9bba3 --- /dev/null +++ b/packages/esm-error-handling/__mocks__/openmrs-esm-styleguide.mock.tsx @@ -0,0 +1,5 @@ +export const showToast = jest.fn(); + +beforeEach(() => { + showToast.mockReset(); +}); diff --git a/packages/esm-error-handling/__mocks__/set-public-path.tsx b/packages/esm-error-handling/__mocks__/set-public-path.tsx new file mode 100644 index 000000000..1973ea7f8 --- /dev/null +++ b/packages/esm-error-handling/__mocks__/set-public-path.tsx @@ -0,0 +1 @@ +export function setPublicPath() {} diff --git a/packages/esm-error-handling/jest.config.json b/packages/esm-error-handling/jest.config.json new file mode 100644 index 000000000..b8f74d397 --- /dev/null +++ b/packages/esm-error-handling/jest.config.json @@ -0,0 +1,6 @@ +{ + "moduleNameMapper": { + "@openmrs/esm-styleguide": "/__mocks__/openmrs-esm-styleguide.mock.tsx", + "./set-public-path": "/__mocks__/set-public-path" + } +} diff --git a/packages/esm-error-handling/package.json b/packages/esm-error-handling/package.json new file mode 100644 index 000000000..fa58b66c2 --- /dev/null +++ b/packages/esm-error-handling/package.json @@ -0,0 +1,39 @@ +{ + "name": "@openmrs/esm-error-handling", + "version": "1.3.0", + "license": "MPL-2.0", + "description": "An ES module to help with error handling", + "browser": "dist/openmrs-esm-error-handling.js", + "main": "src/index.ts", + "source": true, + "scripts": { + "test": "jest --passWithNoTests", + "build": "webpack --mode=production", + "typescript": "tsc", + "lint": "eslint src --ext ts,tsx" + }, + "directories": { + "lib": "dist", + "src": "src" + }, + "browserslist": [ + "extends browserslist-config-openmrs" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/openmrs/openmrs-esm-core.git" + }, + "bugs": { + "url": "https://github.com/openmrs/openmrs-esm-core/issues" + }, + "homepage": "https://github.com/openmrs/openmrs-esm-core#readme", + "dependencies": { + "systemjs-webpack-interop": "^2.1.2" + }, + "peerDependencies": { + "@openmrs/esm-styleguide": "*" + }, + "devDependencies": { + "@openmrs/esm-styleguide": "^1.5.0" + } +} diff --git a/packages/esm-error-handling/src/index.ts b/packages/esm-error-handling/src/index.ts new file mode 100644 index 000000000..7cf606e6b --- /dev/null +++ b/packages/esm-error-handling/src/index.ts @@ -0,0 +1,57 @@ +import { showToast } from "@openmrs/esm-styleguide"; + +export function handleApiError() { + return (incomingResponseErr) => { + setTimeout(() => { + throw incomingResponseErr; + }); + }; +} + +window.onerror = function () { + showToast({ description: "Oops! An unexpected error occurred." }); + + return false; +}; + +window.onunhandledrejection = function (event) { + showToast({ description: `Oops! An unexpected error occurred.` }); +}; + +export function reportError(err) { + const error = ensureErrorObject(err); + setTimeout(() => { + throw error; + }); +} + +export function createErrorHandler() { + const outgoingErr = Error(); + return (incomingErr) => { + const finalErr = ensureErrorObject(incomingErr); + finalErr.stack += `\nAsync stacktrace:\n${outgoingErr.stack}`; + reportError(incomingErr); + }; +} + +function ensureErrorObject(thing) { + let message; + if (thing instanceof Error) { + return thing; + } else if (thing === null) { + return Error(`'null' was thrown as an error`); + } else if (typeof thing === "object") { + try { + message = `Object thrown as error: ${JSON.stringify(thing)}`; + } catch (e) { + message = `Object thrown as error with the following properties: ${Object.keys( + thing + )}`; + } + return Error(message); + } else if (thing === undefined) { + return Error(`'undefined' was thrown as an error`); + } else { + return Error(thing.toString()); + } +} diff --git a/packages/esm-error-handling/src/openmrs-esm-error-handling.test.js b/packages/esm-error-handling/src/openmrs-esm-error-handling.test.js new file mode 100644 index 000000000..064065dc3 --- /dev/null +++ b/packages/esm-error-handling/src/openmrs-esm-error-handling.test.js @@ -0,0 +1,27 @@ +jest.mock("./index"); +const { reportError } = jest.requireActual("./index"); + +jest.useFakeTimers(); +describe("error handler", () => { + it("transfrom the input in valid error object if it is not already an error obejct", () => { + expect(() => { + reportError("error"); + jest.runAllTimers(); + }).toThrow("error"); + + expect(() => { + reportError({ error: "error" }); + jest.runAllTimers(); + }).toThrow('Object thrown as error: {"error":"error"}'); + + expect(() => { + reportError(null); + jest.runAllTimers(); + }).toThrow("'null' was thrown as an error"); + + expect(() => { + reportError(undefined); + jest.runAllTimers(); + }).toThrow("'undefined' was thrown as an error"); + }); +}); diff --git a/packages/esm-error-handling/src/set-public-path.ts b/packages/esm-error-handling/src/set-public-path.ts new file mode 100644 index 000000000..9f0f16dc8 --- /dev/null +++ b/packages/esm-error-handling/src/set-public-path.ts @@ -0,0 +1,3 @@ +import { setPublicPath } from "systemjs-webpack-interop"; + +setPublicPath("@openmrs/esm-error-handling"); diff --git a/packages/esm-error-handling/tsconfig.json b/packages/esm-error-handling/tsconfig.json new file mode 100644 index 000000000..61cf1698d --- /dev/null +++ b/packages/esm-error-handling/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "module": "esnext", + "allowSyntheticDefaultImports": true, + "jsx": "react", + "moduleResolution": "node", + "lib": [ + "dom", + "es5", + "scripthost", + "es2015", + "es2015.promise", + "es2016.array.include", + "es2018" + ], + "noEmit": true, + "target": "esnext" + }, + "include": ["src/**/*", "__mocks__", "__mocks__"] +} diff --git a/packages/esm-error-handling/webpack.config.js b/packages/esm-error-handling/webpack.config.js new file mode 100644 index 000000000..1d2cc8efb --- /dev/null +++ b/packages/esm-error-handling/webpack.config.js @@ -0,0 +1,45 @@ +const { resolve } = require("path"); +const CleanWebpackPlugin = require("clean-webpack-plugin").CleanWebpackPlugin; +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); + +module.exports = { + entry: [ + resolve(__dirname, "src/set-public-path.ts"), + resolve(__dirname, "src/index.ts"), + ], + output: { + filename: "openmrs-esm-error-handling.js", + libraryTarget: "system", + path: resolve(__dirname, "dist"), + jsonpFunction: "webpackJsonp_openmrs_esm_error_handling", + }, + mode: "production", + module: { + rules: [ + { + parser: { + system: false, + }, + }, + { + test: /\.m?(js|ts|tsx)$/, + exclude: /(node_modules|bower_components)/, + use: { + loader: "babel-loader", + }, + }, + ], + }, + devtool: "sourcemap", + devServer: { + headers: { + "Access-Control-Allow-Origin": "*", + }, + disableHostCheck: true, + }, + externals: ["react", "react-dom", /^@openmrs\/esm/], + plugins: [new ForkTsCheckerWebpackPlugin(), new CleanWebpackPlugin()], + resolve: { + extensions: [".tsx", ".ts", ".jsx", ".js"], + }, +}; diff --git a/packages/esm-extension-manager/package-lock.json b/packages/esm-extension-manager/package-lock.json deleted file mode 100644 index d357e7358..000000000 --- a/packages/esm-extension-manager/package-lock.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "name": "@openmrs/esm-extension-manager", - "version": "0.2.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@openmrs/esm-module-config": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@openmrs/esm-module-config/-/esm-module-config-2.2.0.tgz", - "integrity": "sha512-RY9mGDXoD8j/rJPP8bdZOq0Uatgs02nA81TqoBpUoQie3LBIXWdJgBbl1fD5z2TYg0Pt8fIIiSXBZY7phbyESA==", - "requires": { - "@types/react": "^16.9.30", - "react": "^16.13.1", - "react-dom": "^16.13.1", - "single-spa": "^5.5.1" - }, - "dependencies": { - "single-spa": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/single-spa/-/single-spa-5.6.0.tgz", - "integrity": "sha512-UJ89FkEjW6JqAMoyW9RBA7cfpnQ2N8l8E1PEKqgLaHNyYr90WYB2v9s6iR7h0zm6AL218D+obmwtYVLKwetUzw==" - } - } - }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - }, - "@types/react": { - "version": "16.9.49", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.49.tgz", - "integrity": "sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g==", - "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "@types/systemjs": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/systemjs/-/systemjs-6.1.0.tgz", - "integrity": "sha512-akhlviqwowzRNiz3ooAbkjvyMO8cikBqap9z/0yfvMAb6vIsp91Rfox67qtgIhZosWP01MVSTwsgSFYWo4SWQA==", - "dev": true - }, - "csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "single-spa": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/single-spa/-/single-spa-4.4.4.tgz", - "integrity": "sha512-0+eiZXHeTbVs7eOaVxOyQbLTRnbabfGT8BkCZ8BFY6CrqozlQebmXf5CS2moQ/xZTAJr0qREo7ggfvycFkLLqA==", - "dev": true - }, - "systemjs-webpack-interop": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/systemjs-webpack-interop/-/systemjs-webpack-interop-2.1.2.tgz", - "integrity": "sha512-ddoBSbZUfMxKoaS/JqCv4EHrildEfHrmwYF8R/Co/NqDxdvT6uYIrdHwBvY4PuYk+p9/BwQEtN5M5Aw2IHZdHQ==", - "dev": true - } - } -} diff --git a/packages/esm-extension-manager/src/openmrs-esm-extension-manager.ts b/packages/esm-extension-manager/src/openmrs-esm-extension-manager.ts deleted file mode 100644 index 58108b0eb..000000000 --- a/packages/esm-extension-manager/src/openmrs-esm-extension-manager.ts +++ /dev/null @@ -1,17 +0,0 @@ -import "./set-public-path"; - -export { - ExtensionDefinition, - CancelLoading, - renderExtension, - registerExtension, - getExtensionNamesForExtensionSlot, - attach, - setIsUIEditorEnabled, - getIsUIEditorEnabled, -} from "./extensions"; - -export { - ExtensionSlotReact, - ExtensionReact, -} from "./extension-slot-react.component"; diff --git a/packages/esm-extensions/.babelrc b/packages/esm-extensions/.babelrc new file mode 100644 index 000000000..469d3d55f --- /dev/null +++ b/packages/esm-extensions/.babelrc @@ -0,0 +1,7 @@ +{ + "presets": [ + "@babel/preset-env", + "@babel/preset-typescript", + "@babel/preset-react" + ] +} diff --git a/packages/esm-extension-manager/README.md b/packages/esm-extensions/README.md similarity index 65% rename from packages/esm-extension-manager/README.md rename to packages/esm-extensions/README.md index 67d6230a2..62a439624 100644 --- a/packages/esm-extension-manager/README.md +++ b/packages/esm-extensions/README.md @@ -1,11 +1,10 @@ -# openmrs-esm-extension-manager -[![Build Status](https://travis-ci.org/openmrs/openmrs-extension-manager.svg?branch=master)](https://travis-ci.org/openmrs/openmrs-esm-extension-manager) +# openmrs-esm-extensions An [OpenMRS Microfrontend](https://wiki.openmrs.org/display/projects/Frontend+-+SPA+and+Microfrontends). ## What is this? -openmrs-esm-extension-manager is an [in-browser javascript module](https://github.com/openmrs/openmrs-rfc-frontend/blob/master/text/0002-modules.md) that +openmrs-esm-extensions is an [in-browser javascript module](https://github.com/openmrs/openmrs-rfc-frontend/blob/master/text/0002-modules.md) that connects Extensions with Extension Slots. It is part of the OpenMRS Frontend [Extension System](https://github.com/openmrs/openmrs-rfc-frontend/pull/27/files). @@ -15,7 +14,7 @@ connects Extensions with Extension Slots. It is part of the OpenMRS Frontend ## API -The following functions are exported from the @openmrs/esm-extension-manager module: +The following functions are exported from the @openmrs/esm-extensions module: ## foo(args): void diff --git a/packages/esm-extension-manager/__mocks__/openmrs-esm-module-config.mock.tsx b/packages/esm-extensions/__mocks__/openmrs-esm-module-config.mock.tsx similarity index 100% rename from packages/esm-extension-manager/__mocks__/openmrs-esm-module-config.mock.tsx rename to packages/esm-extensions/__mocks__/openmrs-esm-module-config.mock.tsx diff --git a/packages/esm-extension-manager/jest.config.js b/packages/esm-extensions/jest.config.js similarity index 82% rename from packages/esm-extension-manager/jest.config.js rename to packages/esm-extensions/jest.config.js index 0fc0a15a4..72ce9b2ac 100644 --- a/packages/esm-extension-manager/jest.config.js +++ b/packages/esm-extensions/jest.config.js @@ -1,7 +1,7 @@ module.exports = { setupFiles: ["/src/setup-tests.js"], moduleNameMapper: { - "@openmrs/esm-module-config": + "@openmrs/esm-config": "/__mocks__/openmrs-esm-module-config.mock.tsx", }, }; diff --git a/packages/esm-extension-manager/package.json b/packages/esm-extensions/package.json similarity index 57% rename from packages/esm-extension-manager/package.json rename to packages/esm-extensions/package.json index b67f145f8..256133f4c 100644 --- a/packages/esm-extension-manager/package.json +++ b/packages/esm-extensions/package.json @@ -1,19 +1,20 @@ { - "name": "@openmrs/esm-extension-manager", - "version": "0.2.0", + "name": "@openmrs/esm-extensions", + "version": "0.3.0", + "license": "MPL-2.0", "description": "Coordinates extensions and extension points in the OpenMRS Frontend", - "main": "dist/openmrs-esm-extension-manager.js", + "browser": "dist/openmrs-esm-extensions.js", + "main": "src/index.ts", + "source": true, "scripts": { - "test": "jest --passWithNoTests", - "start": "webpack-dev-server", - "build": "rimraf dist && concurrently -n webpack,typescript 'webpack --mode=production' 'npm run typescript'", + "test": "jest --config jest.config.js --passWithNoTests", + "build": "webpack --mode=production", "typescript": "tsc", - "prettier": "prettier 'src/**/*' --write", - "prepublishOnly": "npm run build", "lint": "eslint src --ext ts,tsx" }, "directories": { - "lib": "dist" + "lib": "dist", + "src": "src" }, "browserslist": [ "extends browserslist-config-openmrs" @@ -29,16 +30,18 @@ "keywords": [ "openmrs" ], - "license": "MPL-2.0", "dependencies": { - "@openmrs/esm-module-config": "^0.2.0" + "systemjs-webpack-interop": "^2.1.2" + }, + "peerDependencies": { + "@openmrs/esm-config": "*", + "react": "16.x", + "single-spa": "4.x" }, "devDependencies": { + "@openmrs/esm-config": "^0.3.0", "@types/react": "^16.9.46", - "@types/systemjs": "^6.1.0", "react": "^16.13.1", - "react-dom": "^16.13.1", - "single-spa": "^4.4.1", - "systemjs-webpack-interop": "^2.1.2" + "single-spa": "^4.4.1" } } diff --git a/packages/esm-extension-manager/src/extension-slot-react.component.tsx b/packages/esm-extensions/src/extension-slot-react.component.tsx similarity index 94% rename from packages/esm-extension-manager/src/extension-slot-react.component.tsx rename to packages/esm-extensions/src/extension-slot-react.component.tsx index 8a36db7e9..98d5ca044 100644 --- a/packages/esm-extension-manager/src/extension-slot-react.component.tsx +++ b/packages/esm-extensions/src/extension-slot-react.component.tsx @@ -1,5 +1,5 @@ import React, { useState, useContext, ReactNode } from "react"; -import { ModuleNameContext } from "@openmrs/esm-module-config"; +import { ModuleNameContext } from "@openmrs/esm-config"; import { renderExtension, getExtensionNamesForExtensionSlot, @@ -32,7 +32,8 @@ export const ExtensionSlotReact: React.FC = ({ ...divProps }: ExtensionSlotReactProps) => { const [extensionNames, setExtensionNames] = useState>([]); - const moduleName = useContext(ModuleNameContext); + const moduleName = useContext(ModuleNameContext); + if (!moduleName) { throw Error( "ModuleNameContext has not been provided. This should come from openmrs-react-root-decorator" diff --git a/packages/esm-extension-manager/src/extensions.test.ts b/packages/esm-extensions/src/extensions.test.ts similarity index 94% rename from packages/esm-extension-manager/src/extensions.test.ts rename to packages/esm-extensions/src/extensions.test.ts index 76d8f8235..44a8aab9a 100644 --- a/packages/esm-extension-manager/src/extensions.test.ts +++ b/packages/esm-extensions/src/extensions.test.ts @@ -1,5 +1,5 @@ +import { getExtensionSlotConfig } from "@openmrs/esm-config"; import { attach, getExtensionNamesForExtensionSlot, reset } from "./extensions"; -import { getExtensionSlotConfig } from "@openmrs/esm-module-config"; const mockGetExtensionSlotConfig = getExtensionSlotConfig as jest.Mock; diff --git a/packages/esm-extension-manager/src/extensions.ts b/packages/esm-extensions/src/extensions.ts similarity index 63% rename from packages/esm-extension-manager/src/extensions.ts rename to packages/esm-extensions/src/extensions.ts index 9b0960003..3406b1e35 100644 --- a/packages/esm-extension-manager/src/extensions.ts +++ b/packages/esm-extensions/src/extensions.ts @@ -1,29 +1,42 @@ +import { mountRootParcel } from "single-spa"; +import { getExtensionSlotConfig } from "@openmrs/esm-config"; + /** * Creates the extension component <-> extension slot management engine. - * */ +const extensions: Record = {}; +const attachedExtensionsForExtensionSlot: Record> = {}; -let extensions: Record = {}; -let attachedExtensionsForExtensionSlot: Record> = {}; - -const importSingleSpaPromise = System.import("single-spa"); -const importConfigPromise = System.import("@openmrs/esm-module-config"); +interface ExtensionRegistration extends ExtensionDefinition { + appName: string; +} export interface ExtensionDefinition { - appName: string; name: string; load(): Promise; } +export interface PageDefinition { + route: string; + load(): Promise; +} + +export interface Lifecycle { + bootstrap(): void; + mount(): void; + unmount(): void; + update?(): void; +} + export interface CancelLoading { (): void; } -export function registerExtension({ - name, - load, - appName, -}: ExtensionDefinition): void { +export function registerExtension( + appName: string, + name: string, + load: () => Promise +) { extensions[name] = { name, load, @@ -31,7 +44,7 @@ export function registerExtension({ }; } -export function attach(extensionSlotName: string, extensionName: string): void { +export function attach(extensionSlotName: string, extensionName: string) { if (attachedExtensionsForExtensionSlot.hasOwnProperty(extensionSlotName)) { attachedExtensionsForExtensionSlot[extensionSlotName].push(extensionName); } else { @@ -43,30 +56,30 @@ export async function getExtensionNamesForExtensionSlot( extensionSlotName: string, moduleName: string ): Promise> { - const { getExtensionSlotConfig } = await importConfigPromise; - const config: ExtensionSlotConfigObject = await getExtensionSlotConfig( - extensionSlotName, - moduleName - ); + const config = await getExtensionSlotConfig(extensionSlotName, moduleName); let extensionNames = attachedExtensionsForExtensionSlot[extensionSlotName] ?? []; + if (config.add) { extensionNames = extensionNames.concat(config.add); } + if (config.remove) { extensionNames = extensionNames.filter((n) => !config.remove?.includes(n)); } + if (config.order) { extensionNames = extensionNames.sort((a, b) => - config.order.includes(a) + config.order?.includes(a) ? config.order.includes(b) ? config.order.indexOf(a) - config.order.indexOf(b) : -1 - : config.order.includes(b) + : config.order?.includes(b) ? 1 : 0 ); } + return extensionNames; } @@ -84,23 +97,22 @@ export function renderExtension( const component = extensions[extensionName]; let active = true; - importSingleSpaPromise.then(({ mountRootParcel }) => { - if (domElement) { - if (component) { - component.load().then( - ({ default: result }) => - active && - mountRootParcel(renderFunction(result), { - domElement, - }) - ); - } else { - throw Error( - `Couldn't find extension '${extensionName}' to attach to '${extensionSlotName}'` - ); - } + if (domElement) { + if (component) { + component.load().then( + ({ default: result }) => + active && + mountRootParcel(renderFunction(result) as any, { + domElement, + }) + ); + } else { + throw Error( + `Couldn't find extension '${extensionName}' to attach to '${extensionSlotName}'` + ); } - }); + } + return () => { active = false; }; @@ -116,19 +128,12 @@ export function setIsUIEditorEnabled(enabled: boolean): void { localStorage.setItem("openmrs:isUIEditorEnabled", JSON.stringify(enabled)); } -interface Lifecycle { - bootstrap: () => void; - mount: () => void; - unmount: () => void; - update?: () => void; -} - interface ExtensionSlotConfigObject { // All these are optional, but TS 4.0.2 doesn't understand the undefined // guards above, so we're just telling TS they're not optional. - add: string[]; - remove: string[]; - order: string[]; + add: Array; + remove: Array; + order: Array; } /** @@ -136,6 +141,8 @@ interface ExtensionSlotConfigObject { * Just for testing. */ export function reset() { - extensions = {}; - attachedExtensionsForExtensionSlot = {}; + Object.keys(extensions).forEach((key) => delete extensions[key]); + Object.keys(attachedExtensionsForExtensionSlot).forEach( + (key) => delete attachedExtensionsForExtensionSlot[key] + ); } diff --git a/packages/esm-extensions/src/index.ts b/packages/esm-extensions/src/index.ts new file mode 100644 index 000000000..438ae1ef8 --- /dev/null +++ b/packages/esm-extensions/src/index.ts @@ -0,0 +1,2 @@ +export * from "./extensions"; +export * from "./extension-slot-react.component"; diff --git a/packages/esm-extensions/src/set-public-path.ts b/packages/esm-extensions/src/set-public-path.ts new file mode 100644 index 000000000..8a2864e25 --- /dev/null +++ b/packages/esm-extensions/src/set-public-path.ts @@ -0,0 +1,3 @@ +import { setPublicPath } from "systemjs-webpack-interop"; + +setPublicPath("@openmrs/esm-extensions"); diff --git a/packages/esm-extension-manager/src/setup-tests.js b/packages/esm-extensions/src/setup-tests.js similarity index 100% rename from packages/esm-extension-manager/src/setup-tests.js rename to packages/esm-extensions/src/setup-tests.js diff --git a/packages/esm-extensions/tsconfig.json b/packages/esm-extensions/tsconfig.json new file mode 100644 index 000000000..274494873 --- /dev/null +++ b/packages/esm-extensions/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "module": "esnext", + "allowSyntheticDefaultImports": true, + "jsx": "react", + "strictNullChecks": true, + "moduleResolution": "node", + "declaration": true, + "declarationDir": "dist", + "emitDeclarationOnly": true, + "lib": [ + "dom", + "es5", + "scripthost", + "es2015", + "es2015.promise", + "es2016.array.include", + "es2018" + ] + }, + "include": ["src/**/*"] +} diff --git a/packages/esm-extension-manager/webpack.config.js b/packages/esm-extensions/webpack.config.js similarity index 73% rename from packages/esm-extension-manager/webpack.config.js rename to packages/esm-extensions/webpack.config.js index 2c705c98c..75b71cbcd 100644 --- a/packages/esm-extension-manager/webpack.config.js +++ b/packages/esm-extensions/webpack.config.js @@ -1,12 +1,15 @@ -const path = require("path"); +const { resolve } = require("path"); const CleanWebpackPlugin = require("clean-webpack-plugin").CleanWebpackPlugin; const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); module.exports = { - entry: path.resolve(__dirname, "src/openmrs-esm-extension-manager.ts"), + entry: [ + resolve(__dirname, "src/set-public-path.ts"), + resolve(__dirname, "src/index.ts"), + ], output: { - filename: "openmrs-esm-extension-manager.js", - path: path.resolve(__dirname, "dist"), + filename: "openmrs-esm-extensions.js", + path: resolve(__dirname, "dist"), libraryTarget: "system", }, devtool: "sourcemap", @@ -26,7 +29,7 @@ module.exports = { }, resolve: { extensions: [".ts", ".js", ".tsx", ".jsx"], - modules: ['node_modules', path.resolve(__dirname, 'node_modules')] + modules: ["node_modules", resolve(__dirname, "node_modules")], }, plugins: [new CleanWebpackPlugin(), new ForkTsCheckerWebpackPlugin()], externals: ["react", "react-dom", /^@openmrs\/esm/, "single-spa", "i18next"], diff --git a/packages/esm-styleguide/.babelrc b/packages/esm-styleguide/.babelrc new file mode 100644 index 000000000..2b7bafa5f --- /dev/null +++ b/packages/esm-styleguide/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-env", "@babel/preset-react"] +} diff --git a/packages/esm-styleguide/.storybook/addons.js b/packages/esm-styleguide/.storybook/addons.js new file mode 100644 index 000000000..359010f7f --- /dev/null +++ b/packages/esm-styleguide/.storybook/addons.js @@ -0,0 +1,2 @@ +import "@storybook/addon-knobs/register"; +import "@storybook/addon-a11y/register"; diff --git a/packages/esm-styleguide/.storybook/config.js b/packages/esm-styleguide/.storybook/config.js new file mode 100644 index 000000000..a9fd2207e --- /dev/null +++ b/packages/esm-styleguide/.storybook/config.js @@ -0,0 +1,38 @@ +import { addDecorator, configure, addParameters } from "@storybook/html"; +import { withA11y } from "@storybook/addon-a11y"; +import { withTabs } from "./custom-decorators/tabs.decorator"; +import { withToast } from "./custom-decorators/toast.decorator"; +import hljs from "highlight.js/lib/highlight"; +import xmlLanguage from "highlight.js/lib/languages/xml"; +import cssLanguage from "highlight.js/lib/languages/css"; +import jsLanguage from "highlight.js/lib/languages/javascript"; +import bashLanguage from "highlight.js/lib/languages/bash"; +import "highlight.js/styles/a11y-dark.css"; +import "highlight.js/styles/tomorrow-night.css"; +import { withKnobs } from "@storybook/addon-knobs"; +import omrsTheme from "./theme"; + +hljs.registerLanguage("xml", xmlLanguage); +hljs.registerLanguage("css", cssLanguage); +hljs.registerLanguage("js", jsLanguage); +hljs.registerLanguage("bash", bashLanguage); + +addDecorator(withA11y); +addDecorator(withKnobs); +addDecorator(withTabs); +addDecorator(withToast); + +addParameters({ + options: { + theme: omrsTheme, + }, +}); + +// automatically import all files ending in *.stories.js +require("../src/intro.stories"); +const req = require.context("../src", true, /\.stories\.js$/); +function loadStories() { + req.keys().forEach((filename) => req(filename)); +} + +configure(loadStories, module); diff --git a/packages/esm-styleguide/.storybook/custom-decorators/tabs.decorator.js b/packages/esm-styleguide/.storybook/custom-decorators/tabs.decorator.js new file mode 100644 index 000000000..42a8d18ad --- /dev/null +++ b/packages/esm-styleguide/.storybook/custom-decorators/tabs.decorator.js @@ -0,0 +1,56 @@ +import { useEffect } from "@storybook/client-api"; + +const lastViewedLangKey = "omrs-storybook:preferred-lang"; + +function getLastViewedLang() { + return localStorage.getItem(lastViewedLangKey); +} + +function getTabs() { + return document.querySelectorAll(".tab"); +} + +function getPanels() { + return document.querySelectorAll(".panel"); +} + +function saveLastViewedLang(lang) { + localStorage.setItem(lastViewedLangKey, lang); +} + +function showAll(elements) { + elements.forEach((el) => el.classList.add("active")); +} + +function hideAll(elements) { + elements.forEach((el) => el.classList.remove("active")); +} + +function switchTab($event) { + const tabs = getTabs(); + const panels = getPanels(); + const lang = $event.target.getAttribute("lang"); + const panelsToBeDisplayed = document.querySelectorAll(`.${lang}`); + const tabsToBeDisplayed = document.querySelectorAll(`div[lang=${lang}]`); + hideAll(tabs); + hideAll(panels); + showAll(tabsToBeDisplayed); + showAll(panelsToBeDisplayed); + saveLastViewedLang(lang); +} + +function showLastViewedLangTab() { + const lastViewedLang = getLastViewedLang() || "html"; + const tabs = document.querySelectorAll(`div[lang=${lastViewedLang}]`); + const panels = document.querySelectorAll(`.${lastViewedLang}`); + showAll(tabs); + showAll(panels); +} + +export const withTabs = (storyFn) => { + useEffect(() => { + showLastViewedLangTab(); + getTabs().forEach((tab) => tab.addEventListener("click", switchTab)); + }); + return storyFn(); +}; diff --git a/packages/esm-styleguide/.storybook/custom-decorators/toast.decorator.js b/packages/esm-styleguide/.storybook/custom-decorators/toast.decorator.js new file mode 100644 index 000000000..64e9e4d78 --- /dev/null +++ b/packages/esm-styleguide/.storybook/custom-decorators/toast.decorator.js @@ -0,0 +1,25 @@ +import { useEffect } from "@storybook/client-api"; +import { showToast } from "../../src/toasts/toasts.js"; + +let count = 0; + +export const withToast = (storyFn) => { + useEffect(() => { + const toastEls = document.querySelectorAll(".toast-clicked"); + toastEls.forEach((toastEl) => { + toastEl.addEventListener("click", toastClickHandler); + }); + + return () => { + toastEls.forEach((toastEl) => { + toastEl.removeEventListener("click", toastClickHandler); + }); + }; + }); + + return storyFn(); +}; + +function toastClickHandler() { + showToast({ description: `This is a toast ${count++}` }); +} diff --git a/packages/esm-styleguide/.storybook/theme.js b/packages/esm-styleguide/.storybook/theme.js new file mode 100644 index 000000000..6bce5ee3f --- /dev/null +++ b/packages/esm-styleguide/.storybook/theme.js @@ -0,0 +1,7 @@ +import { create } from "@storybook/theming"; +import logo from "../logo/openmrs_logo.png"; +export default create({ + brandTitle: "OpenMRS", + brandUrl: "https://openmrs.org", + brandImage: logo, +}); diff --git a/packages/esm-styleguide/.storybook/webpack.config.js b/packages/esm-styleguide/.storybook/webpack.config.js new file mode 100644 index 000000000..20e267019 --- /dev/null +++ b/packages/esm-styleguide/.storybook/webpack.config.js @@ -0,0 +1,20 @@ +const path = require("path"); + +const styleguideWebpackConfig = require("../webpack.config.js"); + +module.exports = async ({ config }) => { + if (!config.resolve) { + config.resolve = { + alias: {}, + }; + } + config.resolve.alias["ejs"] = path.resolve( + __dirname, + "../node_modules/ejs/ejs.js" + ); + + config.module.rules = styleguideWebpackConfig.module.rules; + config.module.rules[0].use[0] = "style-loader"; + + return config; +}; diff --git a/packages/esm-styleguide/README.md b/packages/esm-styleguide/README.md new file mode 100644 index 000000000..fd3ae7a9a --- /dev/null +++ b/packages/esm-styleguide/README.md @@ -0,0 +1,9 @@ +# openmrs-esm-styleguide + +The styleguide for OpenMRS. + +Please see [styleguide.openmrs.org](http://styleguide.openmrs.org/) + +## Contributing / Development + +[Setup local development environment for OpenMRS SPA](https://wiki.openmrs.org/display/projects/Setup+local+development+environment+for+OpenMRS+SPA) diff --git a/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700.woff b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700.woff new file mode 100644 index 000000000..afd6fecdc Binary files /dev/null and b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700.woff differ diff --git a/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700.woff2 b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700.woff2 new file mode 100644 index 000000000..ead7c0960 Binary files /dev/null and b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700.woff2 differ diff --git a/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700italic.woff b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700italic.woff new file mode 100644 index 000000000..a572ccaac Binary files /dev/null and b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700italic.woff differ diff --git a/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700italic.woff2 b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700italic.woff2 new file mode 100644 index 000000000..051450d3b Binary files /dev/null and b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-700italic.woff2 differ diff --git a/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-italic.woff b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-italic.woff new file mode 100644 index 000000000..fe2e3dc0b Binary files /dev/null and b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-italic.woff differ diff --git a/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-italic.woff2 b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-italic.woff2 new file mode 100644 index 000000000..3c26191b8 Binary files /dev/null and b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-italic.woff2 differ diff --git a/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-regular.woff b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-regular.woff new file mode 100644 index 000000000..2f2ab4217 Binary files /dev/null and b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-regular.woff differ diff --git a/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-regular.woff2 b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-regular.woff2 new file mode 100644 index 000000000..099840930 Binary files /dev/null and b/packages/esm-styleguide/fonts/merriweather-v21-latin/merriweather-v21-latin-regular.woff2 differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500.woff b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500.woff new file mode 100644 index 000000000..869925869 Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500.woff differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500.woff2 b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500.woff2 new file mode 100644 index 000000000..6362d7f64 Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500.woff2 differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500italic.woff b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500italic.woff new file mode 100644 index 000000000..b794d20de Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500italic.woff differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500italic.woff2 b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500italic.woff2 new file mode 100644 index 000000000..0ff2f813d Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-500italic.woff2 differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700.woff b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700.woff new file mode 100644 index 000000000..0f14effba Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700.woff differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700.woff2 b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700.woff2 new file mode 100644 index 000000000..32b25eee7 Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700.woff2 differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700italic.woff b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700italic.woff new file mode 100644 index 000000000..85ec25839 Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700italic.woff differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700italic.woff2 b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700italic.woff2 new file mode 100644 index 000000000..fe58be2f7 Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-700italic.woff2 differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-italic.woff b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-italic.woff new file mode 100644 index 000000000..b940dbcb7 Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-italic.woff differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-italic.woff2 b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-italic.woff2 new file mode 100644 index 000000000..2741d4f08 Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-italic.woff2 differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff new file mode 100644 index 000000000..69c882540 Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff differ diff --git a/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff2 b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff2 new file mode 100644 index 000000000..1a5370151 Binary files /dev/null and b/packages/esm-styleguide/fonts/roboto-v20-latin/roboto-v20-latin-regular.woff2 differ diff --git a/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-300.woff b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-300.woff new file mode 100644 index 000000000..9aa130316 Binary files /dev/null and b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-300.woff differ diff --git a/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-300.woff2 b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-300.woff2 new file mode 100644 index 000000000..91e1b0469 Binary files /dev/null and b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-300.woff2 differ diff --git a/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-500.woff b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-500.woff new file mode 100644 index 000000000..c76f0f54e Binary files /dev/null and b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-500.woff differ diff --git a/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-500.woff2 b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-500.woff2 new file mode 100644 index 000000000..1e0b26d35 Binary files /dev/null and b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-500.woff2 differ diff --git a/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-700.woff b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-700.woff new file mode 100644 index 000000000..0efd07a77 Binary files /dev/null and b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-700.woff differ diff --git a/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-700.woff2 b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-700.woff2 new file mode 100644 index 000000000..1e57321ad Binary files /dev/null and b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-700.woff2 differ diff --git a/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-regular.woff b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-regular.woff new file mode 100644 index 000000000..de2d8ff8b Binary files /dev/null and b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-regular.woff differ diff --git a/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-regular.woff2 b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-regular.woff2 new file mode 100644 index 000000000..6d32ffdc8 Binary files /dev/null and b/packages/esm-styleguide/fonts/work-sans-v5-latin/work-sans-v5-latin-regular.woff2 differ diff --git a/packages/esm-styleguide/logo/openmrs_logo.png b/packages/esm-styleguide/logo/openmrs_logo.png new file mode 100644 index 000000000..2a777daed Binary files /dev/null and b/packages/esm-styleguide/logo/openmrs_logo.png differ diff --git a/packages/esm-styleguide/package.json b/packages/esm-styleguide/package.json new file mode 100644 index 000000000..501f4df59 --- /dev/null +++ b/packages/esm-styleguide/package.json @@ -0,0 +1,53 @@ +{ + "name": "@openmrs/esm-styleguide", + "version": "1.5.0", + "license": "MPL-2.0", + "description": "The styleguide for OpenMRS SPA", + "browser": "dist/openmrs-esm-styleguide.js", + "main": "src/index.js", + "source": true, + "scripts": { + "test": "jest --passWithNoTests", + "start:storybook": "start-storybook --port 7000", + "build:storybook": "build-storybook", + "build": "webpack --mode=production", + "lint": "eslint src" + }, + "directories": { + "lib": "dist", + "src": "src" + }, + "browserslist": [ + "extends browserslist-config-openmrs" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/openmrs/openmrs-esm-core.git" + }, + "keywords": [ + "openmrs", + "styleguide" + ], + "bugs": { + "url": "https://github.com/openmrs/openmrs-esm-core/issues" + }, + "homepage": "https://github.com/openmrs/openmrs-esm-core#readme", + "dependencies": { + "kremling": "^2.0.1", + "systemjs-webpack-interop": "^2.1.2" + }, + "peerDependencies": { + "react": "16.x", + "rxjs": "6.x" + }, + "devDependencies": { + "@pickra/copy-code-block": "^1.1.7", + "@storybook/addon-a11y": "^5.2.1", + "@storybook/addon-knobs": "^5.2.1", + "@storybook/html": "^5.2.1", + "highlight.js": "^9.15.10", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "rxjs": "^6.5.3" + } +} diff --git a/packages/esm-styleguide/postcss.config.js b/packages/esm-styleguide/postcss.config.js new file mode 100644 index 000000000..858452e18 --- /dev/null +++ b/packages/esm-styleguide/postcss.config.js @@ -0,0 +1,8 @@ +module.exports = { + plugins: [ + require("autoprefixer"), + require("cssnano")({ + preset: "default", + }), + ], +}; diff --git a/packages/esm-styleguide/src/button-icons/button-icons.css b/packages/esm-styleguide/src/button-icons/button-icons.css new file mode 100644 index 000000000..3a1c68fd1 --- /dev/null +++ b/packages/esm-styleguide/src/button-icons/button-icons.css @@ -0,0 +1,59 @@ +.omrs-btn-icon-medium { + width: 2rem; + height: 2rem; + vertical-align: middle; + background: transparent; + border: none; +} + +.omrs-btn-icon-large { + width: 2rem; + height: 2rem; + vertical-align: middle; + background: transparent; + border: none; +} + +.omrs-btn-icon-medium:hover:enabled { + border-radius: 1rem; + background-color: rgba(73, 133, 224, 0.12); +} + +.omrs-btn-icon-large:hover:enabled { + border-radius: 1.5rem; + background-color: rgba(73, 133, 224, 0.12); +} + +.omrs-btn-icon-large svg { + position: relative; + right: 0.5rem; + width: 2rem; + height: 2rem; +} + +.omrs-btn-icon-medium svg { + position: relative; + right: 0.25rem; + width: 1.5rem; + height: 1.5rem; +} + +.omrs-btn-icon-medium:disabled svg { + fill: var(--omrs-color-ink-low-contrast); + width: 1.5rem; + height: 1.5rem; +} + +.omrs-btn-icon-large:disabled svg { + fill: var(--omrs-color-ink-low-contrast); + width: 2rem; + height: 2rem; +} + +.omrs-btn-icon-medium:disabled { + cursor: not-allowed; +} + +.omrs-btn-icon-large:disabled { + cursor: not-allowed; +} diff --git a/packages/esm-styleguide/src/button-icons/button-icons.stories.html b/packages/esm-styleguide/src/button-icons/button-icons.stories.html new file mode 100644 index 000000000..e82b13aec --- /dev/null +++ b/packages/esm-styleguide/src/button-icons/button-icons.stories.html @@ -0,0 +1,68 @@ +
+

Button icons

+
+ + + + + + + + + + + + + + + + + + + + + + +
Button - IconButton Icon Filled Neutral
medium action + +
medium disabled + +
large action + +
large disabled + +
+
+
+

Code example:

+ +
+ +
+
+
+ diff --git a/packages/esm-styleguide/src/button-icons/button-icons.stories.js b/packages/esm-styleguide/src/button-icons/button-icons.stories.js new file mode 100644 index 000000000..40d10b0d7 --- /dev/null +++ b/packages/esm-styleguide/src/button-icons/button-icons.stories.js @@ -0,0 +1,24 @@ +import { storiesOf } from "@storybook/html"; +import html from "./button-icons.stories.html"; +import "./button-icons.css"; +import ejs from "ejs"; +import { htmlStory } from "../story-helpers"; +import { select } from "@storybook/addon-knobs"; +import { icons } from "../icons/icons.stories.js"; + +storiesOf("OpenMRS Styleguide", module).add("Button icons", () => { + const sizeOptions = { + Medium: "medium", + Large: "large", + }; + + const iconChoice = select("Icon", icons, "visibility"); + + const size = select("Size", sizeOptions, "medium"); + + const href = `#omrs-icon-${iconChoice}`; + + const btnSize = `omrs-btn-icon-${size}`; + + return htmlStory(ejs.render(html, { href, btnSize })); +}); diff --git a/packages/esm-styleguide/src/buttons-and-links/buttons-and-links.css b/packages/esm-styleguide/src/buttons-and-links/buttons-and-links.css new file mode 100644 index 000000000..c359ceff5 --- /dev/null +++ b/packages/esm-styleguide/src/buttons-and-links/buttons-and-links.css @@ -0,0 +1,309 @@ +/* The default button styles */ +/* "Unstyled" button css taken from https://gist.github.com/MoOx/9137295 */ +button.omrs-unstyled, +input[type="submit"].omrs-unstyled, +input[type="button"].omrs-unstyled { + border: none; + margin: 0; + padding: 0; + width: auto; + overflow: visible; + height: inherit; + background: transparent; + + /* inherit font & color from ancestor */ + color: inherit; + font: inherit; + text-align: inherit; + + /* Normalize `line-height`. Cannot be changed from `normal` in Firefox 4+. */ + line-height: normal; + + /* Corrects font smoothing for webkit */ + -webkit-font-smoothing: inherit; + -moz-osx-font-smoothing: inherit; + + /* Corrects inability to style clickable `input` types in iOS */ + -webkit-appearance: none; +} + +button.omrs-unstyled:focus, +input[type="submit"].omrs-unstyled:focus, +input[type="button"].omrs-unstyled:focus { + /* + there's some 3rd party css that turns these off using !important, so the only way to override them is to also use important. + this is why you don't use !important -- it makes it hard for other people to override it when they need to :( + */ + outline: solid !important; + outline-width: thin !important; + outline-color: var(--omrs-color-bg-lowest-contrast) !important; +} + +a.omrs-unstyled, +a.omrs-unstyled:visited, +a.omrs-unstyled:hover, +a.omrs-unstyled:active, +a.omrs-unstyled:focus, +a.omrs-unstyled:active:hover { + font-style: inherit; + color: inherit; + background-color: transparent; + font-size: inherit; + text-decoration: none; + font-variant: inherit; + font-weight: inherit; + line-height: inherit; + font-family: inherit; + border-radius: inherit; + border: inherit; + outline: inherit; + box-shadow: inherit; + padding: inherit; + vertical-align: inherit; +} + +a.omrs-link, +button.omrs-btn, +input[type="submit"].omrs-btn, +input[type="button"].omrs-btn { + border: none; + font-size: 1rem; + letter-spacing: 0.0125rem; + font-weight: 500; + font-family: "Roboto", sans-serif; + text-align: center; + white-space: nowrap; + border-radius: 0.25rem; + line-height: 2.25rem; + padding: 0 1.5rem; +} + +a.omrs-link { + display: inline-flex; + flex-direction: row; + align-items: center; + text-decoration: none; +} + +a.omrs-disabled, +button.omrs-btn:disabled, +input[type="submit"].omrs-btn:disabled, +input[type="button"].omrs-btn:disabled { + cursor: not-allowed; +} + +a.omrs-disabled { + pointer-events: none; +} + +a.omrs-link:focus, +button.omrs-btn:focus, +input[type="submit"].omrs-btn:focus, +input[type="button"].omrs-btn:focus { + outline: solid !important; + outline-width: thin !important; + outline-color: var(--omrs-color-interaction); +} + +/* Filled Square Button Styles */ + +a.omrs-filled-action, +button.omrs-filled-action, +input[type="submit"].omrs-filled-action, +input[type="button"].omrs-filled-action { + background: var(--omrs-color-interaction); + color: white; +} + +a.omrs-filled-action:hover, +button.omrs-filled-action:hover, +input[type="submit"].omrs-filled-action:hover, +input[type="button"].omrs-filled-action:hover { + background: var(--omrs-color-interaction-plus-one); + color: white; +} + +a.omrs-filled-neutral, +button.omrs-filled-neutral, +input[type="submit"].omrs-filled-neutral, +input[type="button"].omrs-filled-neutral { + background: rgba(73, 133, 224, 0.2); + color: var(--omrs-color-interaction); +} + +a.omrs-filled-neutral:hover, +button.omrs-filled-neutral:hover, +input[type="submit"].omrs-filled-neutral:hover, +input[type="button"].omrs-filled-neutral:hover { + background: rgba(73, 133, 224, 0.12); +} + +a.omrs-filled.omrs-disabled, /* links don't have a browser :disabled state */ +button.omrs-filled:disabled, +input[type="submit"].omrs-filled:disabled, +input[type="button"].omrs-filled:disabled { + background: #e5e5e6; + color: rgba(60, 60, 67, 0.3); +} + +/* Text Only Square Buttons */ + +a.omrs-text-action, +button.omrs-text-action, +input[type="submit"].omrs-text-action, +input[type="button"].omrs-text-action { + color: var(--omrs-color-interaction); + background-color: transparent; +} + +a.omrs-text-action:hover, +button.omrs-text-action:hover, +input[type="submit"].omrs-text-action:hover, +input[type="button"].omrs-text-action:hover { + background-color: var(--omrs-color-interaction-minus-two); +} + +a.omrs-text-destructive, +button.omrs-text-destructive, +input[type="submit"].omrs-text-destructive, +input[type="button"].omrs-text-destructive { + color: var(--omrs-color-danger); + background-color: transparent; +} + +a.omrs-text-destructive:hover, +button.omrs-text-destructive:hover, +input[type="submit"].omrs-text-destructive:hover, +input[type="button"].omrs-text-destructive:hover { + background-color: #f8eaea; +} + +a.omrs-text-neutral, +button.omrs-text-neutral, +input[type="submit"].omrs-text-neutral, +input[type="button"].omrs-text-neutral { + color: rgba(19, 19, 21, 0.6); + background-color: transparent; +} + +a.omrs-text-neutral:hover, +button.omrs-text-neutral:hover, +input[type="submit"].omrs-text-neutral:hover, +input[type="button"].omrs-text-neutral:hover { + background-color: #eff1f2; +} + +a.omrs-text.omrs-disabled, /* links don't have a browser :disabled state */ +button.omrs-text:disabled, +input[type="submit"].omrs-text:disabled, +input[type="button"].omrs-text:disabled { + color: var(--omrs-color-ink-low-contrast); + background-color: transparent; +} + +/* Outlined Buttons */ + +a.omrs-outlined-neutral, +button.omrs-outlined-neutral, +input[type="submit"].omrs-outlined-neutral, +input[type="button"].omrs-outlined-neutral { + color: rgba(19, 19, 21, 0.6); + background-color: white; +} + +a.omrs-outlined-neutral:hover, +button.omrs-outlined-neutral:hover, +input[type="submit"].omrs-outlined-neutral:hover, +input[type="button"].omrs-outlined-neutral:hover { + background: #eff1f2; + color: rgba(19, 19, 21, 0.6); +} + +a.omrs-outlined-action, +button.omrs-outlined-action, +input[type="submit"].omrs-outlined-action, +input[type="button"].omrs-outlined-action { + color: var(--omrs-color-interaction); + background-color: white; +} + +a.omrs-outlined-action:hover, +button.omrs-outlined-action:hover, +input[type="submit"].omrs-outlined-action:hover, +input[type="button"].omrs-outlined-action:hover { + background: var(--omrs-color-interaction-minus-two); + color: var(--omrs-color-interaction); +} + +a.omrs-outlined-destructive, +button.omrs-outlined-destructive, +input[type="submit"].omrs-outlined-destructive, +input[type="button"].omrs-outlined-destructive { + color: var(--omrs-color-danger); + background-color: white; +} + +a.omrs-outlined-destructive:hover, +button.omrs-outlined-destructive:hover, +input[type="submit"].omrs-outlined-destructive:hover, +input[type="button"].omrs-outlined-destructive:hover { + background-color: #f8eaea; + color: var(--omrs-color-danger); +} + +a.omrs-outlined.omrs-disabled, /* links don't have a browser :disabled state */ +button.omrs-outlined:disabled, +input[type="submit"].omrs-outlined:disabled, +input[type="button"].omrs-outlined:disabled { + color: var(--omrs-color-ink-low-contrast); + background-color: white; +} + +/*setting border color for all outlined buttons*/ + +a.omrs-outlined-destructive, +button.omrs-outlined-destructive, +input[type="submit"].omrs-outlined-destructive, +input[type="button"].omrs-outlined-destructive, +a.omrs-outlined-neutral, +button.omrs-outlined-neutral, +input[type="submit"].omrs-outlined-neutral, +input[type="button"].omrs-outlined-neutral, +a.omrs-outlined-action, +button.omrs-outlined-action, +input[type="submit"].omrs-outlined-action, +input[type="button"].omrs-outlined-action, +a.omrs-outlined.omrs-disabled, +button.omrs-outlined:disabled, +input[type="submit"].omrs-outlined:disabled, +input[type="button"].omrs-outlined:disabled { + border: 1px solid var(--omrs-color-ink-low-contrast); +} + +/* Rounded Button */ +a.omrs-rounded, +button.omrs-rounded, +input[type="submit"].omrs-rounded, +input[type="button"].omrs-rounded { + border-radius: 6.25rem; +} + +/* Button Sizes */ + +a.omrs-rounded-lg, +button.omrs-rounded-lg, +input[type="submit"].omrs-rounded-lg, +input[type="button"].omrs-rounded-lg { + border-radius: 6.25rem; + line-height: 3.5rem; + padding: 0 1.5rem; +} + +a.omrs-link-lg, +button.omrs-btn-lg, +input[type="submit"].omrs-btn-lg, +input[type="button"].omrs-btn-lg { + border-radius: 0.5rem; + line-height: 3.5rem; + padding: 0 1.5rem; +} diff --git a/packages/esm-styleguide/src/buttons-and-links/buttons-and-links.stories.html b/packages/esm-styleguide/src/buttons-and-links/buttons-and-links.stories.html new file mode 100644 index 000000000..a406f9d82 --- /dev/null +++ b/packages/esm-styleguide/src/buttons-and-links/buttons-and-links.stories.html @@ -0,0 +1,345 @@ +
+
+

OpenMRS Links

+ + A link + +
+
+
HTML
+
JSX
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+

OpenMRS Buttons

+
+ +
+
+
HTML
+
JSX
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+

Buttons vs Links vs Divs

+
+

+ In order for websites to be accessible for screen readers and keyboard-only users, follow the rules below! +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
Please don't do this
+ + + + + + + + + + + + + + + + + + Do this! + + + + +
Okay, but use omrs-unstyled instead
+
+
+

Links

+
+

+ Whenever clicking on something causes the browser's url to change, it should be a link. +

+

+ If using an onClick event listener, you should check for alternate click events + so that the user can open the link in a new tab if they want to. +

+ function handleClick(event) { + if (!(event.ctrlKey || event.which == 2 || event.which == 3)) { + event.preventDefault(); + // handle + } + } +
+

+
+

Style types

+
+

Unstyled Buttons

+
+ + Unstyled link + +
+
+ + + + +

Buttons

+
+

+ You should use buttons more often than you're used to. +

+

+ If it has a click listener, it should probably be a button. +

+
+

Style types

+
+

Unstyled Buttons

+
+ +
+
+
+

Action Buttons

+
+ + + + +
+
+
+

Neutral Buttons

+
+ + + + +
+
+
+

Destructive Buttons

+
+ + + +
+
+
+

Disabled Buttons

+
+ + + +
+
+
+ diff --git a/packages/esm-styleguide/src/buttons-and-links/buttons-and-links.stories.js b/packages/esm-styleguide/src/buttons-and-links/buttons-and-links.stories.js new file mode 100644 index 000000000..0daa77b46 --- /dev/null +++ b/packages/esm-styleguide/src/buttons-and-links/buttons-and-links.stories.js @@ -0,0 +1,77 @@ +import { storiesOf } from "@storybook/html"; +import { htmlStory } from "../story-helpers"; +import ejs from "ejs"; +import html from "./buttons-and-links.stories.html"; +import { radios, boolean, select, button } from "@storybook/addon-knobs"; +import "./buttons-and-links.css"; + +storiesOf("OpenMRS Styleguide", module).add("Links and Buttons", () => { + const buttonType = select( + "Type", + { + Unstyled: "unstyled", + Filled: "filled", + Outlined: "outlined", + Text: "text", + }, + "filled" + ); + + const styleType = radios( + "Style type", + { + Action: "action", + Neutral: "neutral", + Destructive: "destructive", + Disabled: "disabled", + }, + "action" + ); + + const isRounded = boolean("Rounded", false); + + const isLarge = boolean("Large", false); + + return htmlStory( + ejs.render(html, { + determineStyle, + disabledAttribute, + buttonType, + styleType, + isRounded, + isLarge, + }) + ); +}); + +function determineStyle( + elementType, + buttonType, + styleType, + isRounded, + isLarge +) { + const isButton = elementType === "button"; + if (buttonType === "unstyled") { + return `omrs-unstyled ${ + isButton || styleType !== "disabled" ? "" : "omrs-disabled" + }`.trim(); + } + const elementName = isButton ? "btn" : "link"; + const disabledClass = + !isButton && styleType === "disabled" ? " omrs-disabled" : ""; + const suffix = styleType === "disabled" ? "" : `-${styleType}`; + const styles = `omrs-${elementName} omrs-${buttonType}${suffix}${disabledClass}`; + if (!isRounded && isLarge) { + return `${styles} omrs-${elementName}-lg`; + } else if (isRounded && !isLarge) { + return `${styles} omrs-rounded`; + } else if (isRounded && isLarge) { + return `${styles} omrs-rounded-lg`; + } + return styles; +} + +function disabledAttribute(styleType) { + return styleType === "disabled" ? "disabled" : ""; +} diff --git a/packages/esm-styleguide/src/canvas/canvas.css b/packages/esm-styleguide/src/canvas/canvas.css new file mode 100644 index 000000000..934322dbf --- /dev/null +++ b/packages/esm-styleguide/src/canvas/canvas.css @@ -0,0 +1,6 @@ +html, +body { + background-color: var(--omrs-color-bg-low-contrast); + margin: 0; + padding: 0; +} diff --git a/packages/esm-styleguide/src/cards/cards.css b/packages/esm-styleguide/src/cards/cards.css new file mode 100644 index 000000000..ab7532f6a --- /dev/null +++ b/packages/esm-styleguide/src/cards/cards.css @@ -0,0 +1,7 @@ +/* https://docs.google.com/presentation/d/1ORi0ZjFeOoNyK7l3R8ms9v0uSmLerUIUfG1fXh_XcTk/edit#slide=id.g5b283a7c15_0_86 */ + +.omrs-card { + background-color: #ffffff; + border-radius: 0.5rem; + border: 1px solid #dadce0; +} diff --git a/packages/esm-styleguide/src/cards/cards.stories.html b/packages/esm-styleguide/src/cards/cards.stories.html new file mode 100644 index 000000000..699836205 --- /dev/null +++ b/packages/esm-styleguide/src/cards/cards.stories.html @@ -0,0 +1,29 @@ +
+

OpenMRS Cards

+
+
<%- text %>
+
+
+
+
HTML
+
JSX
+
+
+
+
+
<%- text %>
+
+
+
+
+
<%- text %>
+
+
+
+
+
+ diff --git a/packages/esm-styleguide/src/cards/cards.stories.js b/packages/esm-styleguide/src/cards/cards.stories.js new file mode 100644 index 000000000..47a88b034 --- /dev/null +++ b/packages/esm-styleguide/src/cards/cards.stories.js @@ -0,0 +1,11 @@ +import { storiesOf } from "@storybook/html"; +import html from "./cards.stories.html"; +import "./cards.css"; +import ejs from "ejs"; +import { text, withKnobs } from "@storybook/addon-knobs"; +import { htmlStory } from "../story-helpers"; + +storiesOf("OpenMRS Styleguide", module).add("Cards", () => { + const cardText = text("Card text", "This is an OpenMRS card."); + return htmlStory(ejs.render(html, { text: cardText })); +}); diff --git a/packages/esm-styleguide/src/colors/colors.css b/packages/esm-styleguide/src/colors/colors.css new file mode 100644 index 000000000..85b97a05e --- /dev/null +++ b/packages/esm-styleguide/src/colors/colors.css @@ -0,0 +1,31 @@ +:root { + --omrs-color-bg-high-contrast: #ffffff; + --omrs-color-bg-medium-contrast: rgba(249, 249, 249, 0.94); + --omrs-color-bg-low-contrast: #eff1f2; + --omrs-color-bg-lowest-contrast: #e5e5e6; + + --omrs-color-ink-high-contrast: #121212; + --omrs-color-ink-medium-contrast: rgba(19, 19, 21, 0.6); + --omrs-color-ink-low-contrast: rgba(60, 60, 67, 0.3); + --omrs-color-ink-lowest-contrast: rgba(47, 60, 85, 0.18); + --omrs-color-ink-white: #ffffff; + + --omrs-color-interaction-plus-two: #122c7b; + --omrs-color-interaction-plus-one: #193faf; + --omrs-color-interaction: #1e4bd1; + --omrs-color-interaction-minus-one: #456de4; + --omrs-color-interaction-minus-two: rgba(73, 133, 224, 0.12); + + --omrs-color-success: #006800; + --omrs-color-success-two: #e6f0e6; + --omrs-color-warning: #6d5d01; + --omrs-color-warning-two: #efede4; + --omrs-color-danger: #b50706; + --omrs-color-danger-two: #f8eaea; + + --omrs-color-brand-orange: #f26522; + --omrs-color-brand-violet: #5b57a6; + --omrs-color-brand-gold: #eea616; + --omrs-color-brand-teal: #009384; + --omrs-color-brand-black: #231f20; +} diff --git a/packages/esm-styleguide/src/colors/colors.stories.html b/packages/esm-styleguide/src/colors/colors.stories.html new file mode 100644 index 000000000..b3570e18a --- /dev/null +++ b/packages/esm-styleguide/src/colors/colors.stories.html @@ -0,0 +1,91 @@ +
+

OpenMRS Colors

+
+ OpenMRS colors are + css variables + that can be used by any code at any time. +
+

Available colors

+
+ <% colors.forEach(function(color) { %> +
+
+
<%- color[0] %>
+
<%- color[1] %>
+
+ <% }) %> +
+

Code example

+
+
+
HTML
+
JSX
+
+
+
+
+ +
Some content in a div
+
+
+
+
+ // In your React component import { styles } from './custom.css'; + +
Some content in a div
+
+
+
+
+
+ /* in a css file */ .myClass { background-color: var(<%- chosenColor%>); + color: white; width: 10rem; height: 4rem; } +
+
Some content in a div
+
+ diff --git a/packages/esm-styleguide/src/colors/colors.stories.js b/packages/esm-styleguide/src/colors/colors.stories.js new file mode 100644 index 000000000..ae8bb9eee --- /dev/null +++ b/packages/esm-styleguide/src/colors/colors.stories.js @@ -0,0 +1,48 @@ +import { storiesOf } from "@storybook/html"; +import html from "./colors.stories.html"; +import "./colors.css"; +import { htmlStory } from "../story-helpers"; +import { select } from "@storybook/addon-knobs"; +import ejs from "ejs"; + +export const options = { + "Background high contrast": "--omrs-color-bg-high-contrast", + "Background medium contrast": "--omrs-color-bg-medium-contrast", + "Background low contrast": "--omrs-color-bg-low-contrast", + "Background lowest contrast": "--omrs-color-bg-lowest-contrast", + + "Ink high contrast": "--omrs-color-ink-high-contrast", + "Ink medium contrast": "--omrs-color-ink-medium-contrast", + "Ink low contrast": "--omrs-color-ink-low-contrast", + "Ink lowest contrast": "--omrs-color-ink-lowest-contrast", + "Ink white": "--omrs-color-ink-white", + + "Interaction plus two": "--omrs-color-interaction-plus-two", + "Interaction plus one": "--omrs-color-interaction-plus-one", + Interaction: "--omrs-color-interaction", + "Interaction minus one": "--omrs-color-interaction-minus-one", + "interaction minus two": "--omrs-color-interaction-minus-two", + + Success: "--omrs-color-success", + "Success two": "--omrs-color-success-two", + Warning: "--omrs-color-warning", + "Warning two": "--omrs-color-warning-two", + Danger: "--omrs-color-danger", + "Danger two": "--omrs-color-danger-two", + + "Color brand orange": "--omrs-color-brand-orange", + "Color brand violet": "--omrs-color-brand-violet", + "Color brand gold": "--omrs-color-brand-gold", + "Color brand teal": "--omrs-color-brand-teal", + "Color brand black": "--omrs-color-brand-black", +}; + +storiesOf("OpenMRS Styleguide", module).add("Colors", () => { + const defaultValue = "--omrs-color-success"; + + const chosenColor = select("OpenMRS Color", options, defaultValue); + + return htmlStory( + ejs.render(html, { chosenColor, colors: Object.entries(options) }) + ); +}); diff --git a/packages/esm-styleguide/src/forms/forms.css b/packages/esm-styleguide/src/forms/forms.css new file mode 100644 index 000000000..afe3ea1ef --- /dev/null +++ b/packages/esm-styleguide/src/forms/forms.css @@ -0,0 +1,361 @@ +.omrs-checkbox label { + position: relative; +} +.omrs-checkbox input[type="checkbox"] { + opacity: 0; +} +.omrs-checkbox input[type="checkbox"] + span::before, +.omrs-checkbox input[type="checkbox"] + span::after { + position: absolute; +} +.omrs-checkbox input[type="checkbox"] + span::before { + content: ""; + display: inline-flex; + height: 1rem; + width: 1rem; + border: 0.125rem solid var(--omrs-color-ink-medium-contrast); + top: 0rem; + left: 0rem; +} +.omrs-checkbox input[type="checkbox"]:checked + span::before { + border: 0.125rem solid var(--omrs-color-interaction); + background: var(--omrs-color-interaction); +} +.omrs-checkbox input[type="checkbox"] + span::after { + content: none; + display: inline-flex; + height: 0.25rem; + width: 0.75rem; + transform: translate(-45%, -40%) rotate(-50deg); + left: 0.5625rem; + top: 0.5rem; +} +.omrs-checkbox input[type="checkbox"]:checked + span::after { + content: ""; + border-left: 0.125rem solid var(--omrs-color-ink-white); + border-bottom: 0.125rem solid var(--omrs-color-ink-white); +} +.omrs-checkbox input[type="checkbox"] + span { + padding-left: 0.25rem; + color: var(--omrs-color-ink-high-contrast); +} +.omrs-checkbox input[type="checkbox"]:checked + span { + color: var(--omrs-color-interaction); +} + +/* checkbox style two */ +.omrs-checkbox input[type="checkbox"] + label { + display: inline-flex; + position: absolute; + left: 0; +} + +.omrs-checkbox input[type="checkbox"] + label::before { + content: ""; + display: inline-flex; + height: 1rem; + width: 1rem; + border: 0.125rem solid var(--omrs-color-ink-medium-contrast); + top: 0rem; + left: 0rem; + margin-right: 0.5rem; + align-content: center; +} + +.omrs-checkbox input[type="checkbox"] + label::after { + position: absolute; + content: ""; + display: inline-flex; + height: 0.25rem; + width: 0.75rem; + transform: translate(-45%, -40%) rotate(-50deg); + left: 0.5625rem; + top: 0.5rem; +} + +.omrs-checkbox input[type="checkbox"]:checked + label::before { + border: 0.125rem solid var(--omrs-color-interaction); + background: var(--omrs-color-interaction); +} + +.omrs-checkbox input[type="checkbox"]:checked + label::after { + content: ""; + border-left: 0.125rem solid var(--omrs-color-ink-white); + border-bottom: 0.125rem solid var(--omrs-color-ink-white); +} + +.omrs-checkbox input[type="checkbox"]:checked + label { + color: var(--omrs-color-interaction); +} + +/* Radio Button styles */ +.omrs-radio-button label { + position: relative; +} +.omrs-radio-button input[type="radio"] { + opacity: 0; +} +.omrs-radio-button input[type="radio"] + span::before, +.omrs-radio-button input[type="radio"] + span::after { + position: absolute; + border-radius: 50%; +} +.omrs-radio-button input[type="radio"] + span::before { + content: ""; + display: inline-flex; + height: 1rem; + width: 1rem; + border: 0.125rem solid var(--omrs-color-ink-medium-contrast); + top: 0rem; + left: 0rem; +} +.omrs-radio-button input[type="radio"]:checked + span::before { + border: 0.125rem solid var(--omrs-color-interaction); + background: var(--omrs-color-interaction); +} +.omrs-radio-button input[type="radio"] + span::after { + content: none; + display: inline-block; + height: 0.625rem; + width: 0.625rem; + transform: translate(-50%, -50%); + left: 0.625rem; + top: 0.625rem; +} +.omrs-radio-button input[type="radio"]:checked + span::after { + content: ""; + border: 0.15625rem solid var(--omrs-color-ink-white); + background: var(--omrs-color-interaction); +} +.omrs-radio-button input[type="radio"] + span { + padding-left: 0.25rem; + color: var(--omrs-color-ink-high-contrast); +} +.omrs-radio-button input[type="radio"]:checked + span { + color: var(--omrs-color-interaction); +} + +/* Radio button styles two */ +.omrs-radio-button input[type="radio"] + label { + display: inline-flex; + left: 0; +} + +.omrs-radio-button input[type="radio"] + label::after, +.omrs-radio-button input[type="radio"] + label::before { + border-radius: 50%; +} + +.omrs-radio-button input[type="radio"] + label::before { + content: ""; + display: inline-flex; + height: 1rem; + width: 1rem; + border: 0.125rem solid var(--omrs-color-ink-medium-contrast); + top: 0rem; + left: 0rem; + margin-right: 0.5rem; +} + +.omrs-radio-button input[type="radio"] + label::after { + position: absolute; + content: none; + display: inline-block; + height: 0.625rem; + width: 0.625rem; + transform: translate(-50%, -50%); + left: 0.875rem; + top: 0.875rem; +} + +.omrs-radio-button input[type="radio"]:checked + label::before { + border: 0.125rem solid var(--omrs-color-interaction); + background: var(--omrs-color-interaction); +} + +.omrs-radio-button input[type="radio"]:checked + label::after { + content: ""; + border: 0.15625rem solid var(--omrs-color-ink-white); + background: var(--omrs-color-interaction); +} + +.omrs-radio-button input[type="radio"]:checked + label { + color: var(--omrs-color-interaction); +} + +/* datepicker */ + +.omrs-datepicker { + position: relative; + display: inline-flex; +} + +.omrs-datepicker input[type="date"], +.omrs-datepicker input[type="time"] { + font-family: "Roboto"; + font-size: 1rem; +} + +.omrs-datepicker input[type="date"]::-webkit-inner-spin-button, +.omrs-datepicker input[type="time"]::-webkit-inner-spin-button { + display: none; +} + +.omrs-datepicker input[type="date"]::-webkit-calendar-picker-indicator, +.omrs-datepicker input[type="time"]::-webkit-calendar-picker-indicator { + opacity: 0; +} + +.omrs-datepicker input[type="date"], +.omrs-datepicker input[type="time"] { + width: 100%; + outline: none; + background: var(--omrs-color-ink-white); + border: 0.0625rem solid var(--omrs-color-ink-low-contrast); + color: var(--omrs-color-ink-medium-contrast); + padding: 0.5rem; +} + +.omrs-datepicker svg { + display: flex; + position: absolute; + align-items: center; + top: 0.5rem; + right: 0; + margin-right: 0.25rem; + fill: var(--omrs-color-ink-medium-contrast); + pointer-events: none; +} + +.omrs-datepicker input[type="date"]:valid, +.omrs-datepicker input[type="time"]:valid { + color: var(--omrs-color-interaction); +} + +.omrs-datepicker input[type="date"]:valid + svg, +.omrs-datepicker input[type="time"]:valid + svg { + fill: var(--omrs-color-interaction); +} + +.omrs-datepicker input[type="date"]:invalid, +.omrs-datepicker input[type="time"]:invalid { + color: var(--omrs-color-danger); + border: 1px solid var(--omrs-color-danger); +} + +.omrs-datepicker input[type="date"]:invalid + svg, +.omrs-datepicker input[type="time"]:invalid + svg { + fill: var(--omrs-color-danger); +} + +/* dropdown */ + +.omrs-dropdown { + min-width: 8em; + width: 100%; + height: 3.5rem; + background: transparent; + border: 1px solid var(--omrs-color-ink-lowest-contrast); + border-radius: 0.25rem; + background-clip: padding-box; + margin: 0; +} +.omrs-dropdown:disabled { + opacity: 0.8; + background: lightgrey; + cursor: not-allowed; +} +.omrs-dropdown:focus { + border: 2px solid var(--omrs-color-interaction); + outline: 0; +} + +/* toggle Switch styles */ + +.toggleSwitch { + border: 0.0625rem solid var(--omrs-color-ink-lowest-contrast); + border-radius: 2rem; + display: flex; + background-color: var(--omrs-color-ink-white); + min-width: 100%; + z-index: 1; + justify-content: space-between; +} + +.toggleSwitch input[type="radio"] { + display: none; +} + +.toggleSwitch input[type="radio"] + label { + color: var(--omrs-color-ink-medium-contrast); + font-weight: bold; + padding: 0.5rem 0.5rem; + z-index: 100; + text-align: center; + width: 100%; + cursor: pointer; +} + +.toggleSwitch input[type="radio"]:checked + label { + border: 0.0625rem solid var(--omrs-color-interaction); + border-radius: 2rem; + color: var(--omrs-color-interaction); + background-color: var(--omrs-color-ink-white); +} + +/* Increment buttons styles */ + +.omrs-increment-buttons { + display: flex; + justify-content: space-between; + text-align: center; + border: 0.0625rem solid var(--omrs-color-ink-lowest-contrast); + align-items: center; + border-radius: 6.5rem; + background-color: var(--omrs-color-ink-white); +} + +.omrs-increment-buttons div { + padding: 0.4rem; +} + +.omrs-increment-buttons svg { + cursor: pointer; + user-select: none; +} + +.omrs-increment-buttons div:nth-child(1) { + background-color: var(--omrs-color-bg-low-contrast); + flex: 1; + border-radius: 6.5rem 0rem 0rem 6.5rem; +} + +.omrs-increment-buttons div:nth-child(2) { + display: flex; + flex: 1; + margin: 0rem; + padding: 0rem; + justify-content: center; +} + +.omrs-increment-buttons div:nth-child(2) input { + color: var(--omrs-color-interaction); + font-weight: 700; + text-align: center; + background-color: var(--omrs-color-ink-white); + width: 100%; + font-size: 1rem; + padding: 0.625rem 0rem; + border: none; + outline: none; +} + +.omrs-increment-buttons div:nth-child(3) { + background-color: var(--omrs-color-bg-low-contrast); + flex: 1; + border-radius: 0rem 6.5rem 6.5rem 0rem; +} + +.omrs-increment-buttons svg { + fill: var(--omrs-color-ink-medium-contrast); +} diff --git a/packages/esm-styleguide/src/forms/forms.stories.html b/packages/esm-styleguide/src/forms/forms.stories.html new file mode 100644 index 000000000..c5a9364de --- /dev/null +++ b/packages/esm-styleguide/src/forms/forms.stories.html @@ -0,0 +1,354 @@ +
+

OpenMRS Forms Elements

+

+ There are 4 types of form elements defined in the styleguide +

+
+
+
+

CheckBox

+
+
+
+ +
+
+
+
+ +
+
+
+
+
+

Radio

+
+
+
+ +
+
+
+
+ +
+
+
+
+
+

Input Date

+
+
+ + + + +
+
+
+
+

Dropdown

+
+
+ +
+
+
+ +
+

Toggle Buttons

+
+
+ + + + + +
+
+
+ +
+

Increment Buttons

+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+

Code Example:

+

<%=determineInputType(inputType)%> input

+
+ <% if (determineInputType(inputType) == "checkbox" || + determineInputType(inputType) == "radio") { %> +
+ +
+ <% } if(determineInputType(inputType) == "date") { %> +
+
+ + + + +
+
+ <% } if(determineInputType(inputType) == "toggleButton") { %> +
+
+ + + + + +
+
+ <% } if(determineInputType(inputType) == "incrementButton") { %> +
+
+
+ +
+
+ +
+
+ +
+
+
+ <% } %> +
+
+
+
+
HTML
+
JSX
+
+
+ <% if (determineInputType(inputType) == "checkbox" || + determineInputType(inputType) == "radio") { %> +
+
+
+ +
+
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+ + +
+
+
+ <% } if(determineInputType(inputType) == "date") {%> +
+
+
+ + + + +
+
+
+
+
+
+ + + + +
+
+
+ <% } if(determineInputType(inputType) == "toggleButton") {%> +
+
+
+ + + + +
+
+
+
+
+
+ + + + +
+
+
+ <% } if(determineInputType(inputType) == "incrementButton") {%> +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+ <% } %> +
+
+
+
+ diff --git a/packages/esm-styleguide/src/forms/forms.stories.js b/packages/esm-styleguide/src/forms/forms.stories.js new file mode 100644 index 000000000..1e4ff2e5b --- /dev/null +++ b/packages/esm-styleguide/src/forms/forms.stories.js @@ -0,0 +1,54 @@ +import { storiesOf } from "@storybook/html/dist/client/preview"; +import html from "./forms.stories.html"; +import { htmlStory } from "../story-helpers"; +import "./forms.css"; +import { select, boolean } from "@storybook/addon-knobs"; +import ejs from "ejs"; + +storiesOf("OpenMRS Styleguide", module).add("Forms", () => { + const inputType = select( + "Type", + { + CheckBox: "checkbox", + Radio: "radio", + Date: "date", + ToggleButton: "toggleButton", + IncrementButtons: "incrementButton", + }, + "checkbox" + ); + + const determineInputType = (inputType) => { + switch (inputType) { + case "checkbox": + return "checkbox"; + case "radio": + return "radio"; + case "date": + return "date"; + case "toggleButton": + return "toggleButton"; + case "incrementButton": + return "incrementButton"; + } + }; + + const determineStyle = (inputType) => { + switch (inputType) { + case "checkbox": + return "omrs-checkbox"; + case "radio": + return "omrs-radio-button"; + case "date": + return "omrs-datepicker"; + } + }; + + return htmlStory( + ejs.render(html, { + determineInputType, + inputType, + determineStyle, + }) + ); +}); diff --git a/packages/esm-styleguide/src/icons/icons.css b/packages/esm-styleguide/src/icons/icons.css new file mode 100644 index 000000000..af4dbb5d0 --- /dev/null +++ b/packages/esm-styleguide/src/icons/icons.css @@ -0,0 +1,8 @@ +.omrs-icon { + width: 1.5rem; + height: 1.5rem; +} + +.omrs-icon-location { + fill: none; +} diff --git a/packages/esm-styleguide/src/icons/icons.js b/packages/esm-styleguide/src/icons/icons.js new file mode 100644 index 000000000..f26b7236f --- /dev/null +++ b/packages/esm-styleguide/src/icons/icons.js @@ -0,0 +1,49 @@ +import "./icons.css"; +import iconVisibility from "./svgs/visibility_24px_rounded.svg"; +import iconMenu from "./svgs/menu_24px_rounded.svg"; +import iconSearch from "./svgs/search_24px_rounded.svg"; +import iconArrowBack from "./svgs/arrow_back_24px_rounded.svg"; +import iconArrowForward from "./svgs/arrow_forward_24px.svg"; +import iconArrowDownward from "./svgs/arrow_downward_24px_rounded.svg"; +import iconArrowUpward from "./svgs/arrow_upward_24px_rounded.svg"; +import iconChevronLeft from "./svgs/chevron_left_24px_rounded.svg"; +import iconChevronRight from "./svgs/chevron_right_24px_rounded.svg"; +import iconChevronDown from "./svgs/chevron_down-24px_rounded.svg"; +import iconChevronUp from "./svgs/chevron_up_24px_rounded.svg"; +import iconSupervisedUserCircle from "./svgs/supervised_user_circle_24px_rounded.svg"; +import iconHome from "./svgs/home_24px_rounded.svg"; +import iconClose from "./svgs/close-24px.svg"; +import iconImportantNotification from "./svgs/important_notification_24px_rounded.svg"; +import iconCalendar from "./svgs/calendar_24px_rounded.svg"; +import iconAccessTime from "./svgs/access_time-24px_rounded.svg"; +import iconAdd from "./svgs/add_24px_rounded.svg"; +import iconRemove from "./svgs/remove-24px_rounded.svg"; +import iconCheckCircle from "./svgs/check_circle-24px.svg"; +import iconZoomOutMap from "./svgs/zoom_out_map_24px_rounded.svg"; +import iconLocation from "./svgs/location-24px.svg"; +import iconDownload from "./svgs/download_24px_rounded.svg"; +import { addSvg } from "../svg-utils"; + +addSvg("omrs-icon-visibility", iconVisibility); +addSvg("omrs-icon-menu", iconMenu); +addSvg("omrs-icon-search", iconSearch); +addSvg("omrs-icon-arrow-back", iconArrowBack); +addSvg("omrs-icon-arrow-forward", iconArrowForward); +addSvg("omrs-icon-arrow-downward", iconArrowDownward); +addSvg("omrs-icon-arrow-upward", iconArrowUpward); +addSvg("omrs-icon-chevron-left", iconChevronLeft); +addSvg("omrs-icon-chevron-right", iconChevronRight); +addSvg("omrs-icon-chevron-up", iconChevronUp); +addSvg("omrs-icon-chevron-down", iconChevronDown); +addSvg("omrs-icon-supervised-user-circle", iconSupervisedUserCircle); +addSvg("omrs-icon-home", iconHome); +addSvg("omrs-icon-close", iconClose); +addSvg("omrs-icon-important-notification", iconImportantNotification); +addSvg("omrs-icon-access-time", iconAccessTime); +addSvg("omrs-icon-calendar", iconCalendar); +addSvg("omrs-icon-add", iconAdd); +addSvg("omrs-icon-remove", iconRemove); +addSvg("omrs-icon-check-circle", iconCheckCircle); +addSvg("omrs-icon-zoomoutmap", iconZoomOutMap); +addSvg("omrs-icon-location", iconLocation); +addSvg("omrs-icon-download", iconDownload); diff --git a/packages/esm-styleguide/src/icons/icons.stories.html b/packages/esm-styleguide/src/icons/icons.stories.html new file mode 100644 index 000000000..c58335630 --- /dev/null +++ b/packages/esm-styleguide/src/icons/icons.stories.html @@ -0,0 +1,53 @@ +
+

Icons

+
+ + <% for (var i = 0; i < iconNames.length; i++) { %> + +
+
+ + + + <% } %> +
omrs-icon-<%- iconNames[i] %> + + + +
+
+
+

Code example:

+ + <% if (size !== '1.5') { %>style="height: <%- size %>rem; width: <%- size + %>rem;"<% } %> > + + +
+
+
HTML
+
JSX
+
+
+
+
+ + <% if (size !== '1.5') { %>style="height: <%- size %>rem; width: + <%- size %>rem;"<% } %> > + + +
+
+
+
+ + <% if (size !== '1.5') { %>style="height: <%- size %>rem; width: + <%- size %>rem;"<% } %> > + + +
+
+
+
+
+
diff --git a/packages/esm-styleguide/src/icons/icons.stories.js b/packages/esm-styleguide/src/icons/icons.stories.js new file mode 100644 index 000000000..9437dca91 --- /dev/null +++ b/packages/esm-styleguide/src/icons/icons.stories.js @@ -0,0 +1,50 @@ +import { storiesOf } from "@storybook/html"; +import { htmlStory } from "../story-helpers"; +import ejs from "ejs"; +import html from "./icons.stories.html"; +import { select, text } from "@storybook/addon-knobs"; +import "./icons.js"; +import { options } from "../colors/colors.stories"; + +export const icons = { + Visibility: "visibility", + Menu: "menu", + Search: "search", + "Arrow back": "arrow-back", + "Arrow forward": "arrow-forward", + "Arrow downward": "arrow-downward", + "Arrow upward": "arrow-upward", + "Chevron left": "chevron-left", + "Chevron right": "chevron-right", + "Chevron down": "chevron-down", + "Chevron up": "chevron-up", + "Supervised user circle": "supervised-user-circle", + "close icon": "close", + Home: "home", + "Important Notification": "important-notification", + "Access time": "access-time", + Calendar: "calendar", + Add: "add", + Remove: "remove", + "Check Circle": "check-circle", + "Zoom out map": "zoomoutmap", + "Location icon": "location", + "Download icon": "download", +}; +storiesOf("OpenMRS Styleguide", module).add("Icons", () => { + const iconNames = Object.values(icons); + + const iconChoice = select("Icon", icons, "visibility"); + + const colorOptions = Object.assign({ Default: "default" }, options); + + const color = select("Color", colorOptions, "default"); + + const fill = color === "default" ? "" : ` fill="var(${color})"`; + + const href = `#omrs-icon-${iconChoice}`; + + const size = text("Icon size (1rem = 16px)", "1.5"); + + return htmlStory(ejs.render(html, { href, iconNames, fill, size })); +}); diff --git a/packages/esm-styleguide/src/icons/svgs.test.js b/packages/esm-styleguide/src/icons/svgs.test.js new file mode 100644 index 000000000..c95786dc3 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs.test.js @@ -0,0 +1,61 @@ +const path = require("path"); +const fs = require("fs"); + +describe("svgs", () => { + const svgs = []; + + beforeAll(() => { + // eslint-disable-next-line no-undef + const svgFilePaths = fs.readdirSync(path.join(__dirname, "svgs")); + const domParser = new DOMParser(); + + svgFilePaths.forEach((filePath) => { + const svgString = fs.readFileSync( + // eslint-disable-next-line no-undef + path.resolve(__dirname, "svgs", filePath) + ); + const svgDoc = domParser.parseFromString(svgString, "text/html"); + const svgEl = svgDoc.querySelector("svg"); + if (svgEl) { + svgs.push({ filePath, svgEl: svgEl, svgDoc }); + } + }); + }); + + it("does not have a specified fill color, so that the color can be specified by css", () => { + svgs.forEach((svg) => { + if (svg.svgDoc.querySelector("[fill]")) { + fail( + `svg ${svg.filePath} has a "fill" attribute in it, which makes it impossible for CSS to change its color\n${svg.svgEl.outerHTML}` + ); + } + }); + }); + + it('has a viewBox="0 0 24 24" attribute on the svg', () => { + svgs.forEach((svg) => { + if (svg.svgEl.getAttribute("viewBox") !== "0 0 24 24") { + // If we get an svg that isn't based on a 24px grid, we can update this test to allow for other viewBoxes. + fail( + `svg ${svg.filePath} does not have viewBox="0 0 24 24", which makes it impossible for CSS to change its size\n${svg.svgEl.outerHTML}` + ); + } + }); + }); + + it("should have a title tag defined for the svg", () => { + svgs.forEach((svg) => { + if (svg.svgEl.querySelector("title") === null) { + fail(`svg ${svg.filePath} does not have a title defined for it`); + } + }); + }); + + it("should have a text description on the title tag", () => { + svgs.forEach((svg) => { + if (svg.svgEl.querySelector("title").innerHTML === "") { + fail(`svg ${svg.filePath} does not have a title defined for it`); + } + }); + }); +}); diff --git a/packages/esm-styleguide/src/icons/svgs/access_time-24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/access_time-24px_rounded.svg new file mode 100644 index 000000000..0a0d76660 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/access_time-24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Access time rounded + \ No newline at end of file diff --git a/packages/esm-styleguide/src/icons/svgs/add_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/add_24px_rounded.svg new file mode 100644 index 000000000..533925915 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/add_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Add rounded + diff --git a/packages/esm-styleguide/src/icons/svgs/arrow_back_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/arrow_back_24px_rounded.svg new file mode 100755 index 000000000..78ad75bb1 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/arrow_back_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Arrow back rounded + diff --git a/packages/esm-styleguide/src/icons/svgs/arrow_downward_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/arrow_downward_24px_rounded.svg new file mode 100755 index 000000000..2ed712022 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/arrow_downward_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Arrow downward rounded + diff --git a/packages/esm-styleguide/src/icons/svgs/arrow_forward_24px.svg b/packages/esm-styleguide/src/icons/svgs/arrow_forward_24px.svg new file mode 100644 index 000000000..90e9b39c2 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/arrow_forward_24px.svg @@ -0,0 +1,4 @@ + + + Arrow forward rounded + \ No newline at end of file diff --git a/packages/esm-styleguide/src/icons/svgs/arrow_upward_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/arrow_upward_24px_rounded.svg new file mode 100755 index 000000000..297cf2b5b --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/arrow_upward_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Arrow upward rounded + diff --git a/packages/esm-styleguide/src/icons/svgs/calendar_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/calendar_24px_rounded.svg new file mode 100644 index 000000000..36ad44fd3 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/calendar_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Calendar rounded + \ No newline at end of file diff --git a/packages/esm-styleguide/src/icons/svgs/check_circle-24px.svg b/packages/esm-styleguide/src/icons/svgs/check_circle-24px.svg new file mode 100644 index 000000000..8dee65f14 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/check_circle-24px.svg @@ -0,0 +1,4 @@ + + + Check circle + diff --git a/packages/esm-styleguide/src/icons/svgs/chevron_down-24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/chevron_down-24px_rounded.svg new file mode 100644 index 000000000..9e8b5926a --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/chevron_down-24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Chevron down + diff --git a/packages/esm-styleguide/src/icons/svgs/chevron_left_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/chevron_left_24px_rounded.svg new file mode 100755 index 000000000..a6a8ca1c9 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/chevron_left_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Chevron left + diff --git a/packages/esm-styleguide/src/icons/svgs/chevron_right_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/chevron_right_24px_rounded.svg new file mode 100755 index 000000000..ae023c09a --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/chevron_right_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Chevron right + diff --git a/packages/esm-styleguide/src/icons/svgs/chevron_up_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/chevron_up_24px_rounded.svg new file mode 100644 index 000000000..19aa65c8d --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/chevron_up_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Chevron up + diff --git a/packages/esm-styleguide/src/icons/svgs/close-24px.svg b/packages/esm-styleguide/src/icons/svgs/close-24px.svg new file mode 100644 index 000000000..a80b7eecf --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/close-24px.svg @@ -0,0 +1,4 @@ + + + Close icon + \ No newline at end of file diff --git a/packages/esm-styleguide/src/icons/svgs/download_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/download_24px_rounded.svg new file mode 100644 index 000000000..e6f72d3ec --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/download_24px_rounded.svg @@ -0,0 +1,4 @@ + + + Download icon + \ No newline at end of file diff --git a/packages/esm-styleguide/src/icons/svgs/home_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/home_24px_rounded.svg new file mode 100644 index 000000000..fb0b733f1 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/home_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + +Home rounded + \ No newline at end of file diff --git a/packages/esm-styleguide/src/icons/svgs/important_notification_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/important_notification_24px_rounded.svg new file mode 100644 index 000000000..4d3bc9804 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/important_notification_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Important notification + diff --git a/packages/esm-styleguide/src/icons/svgs/location-24px.svg b/packages/esm-styleguide/src/icons/svgs/location-24px.svg new file mode 100644 index 000000000..3083e5bcf --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/location-24px.svg @@ -0,0 +1,5 @@ + + + + Location icon + \ No newline at end of file diff --git a/packages/esm-styleguide/src/icons/svgs/menu_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/menu_24px_rounded.svg new file mode 100755 index 000000000..826ed70ca --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/menu_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Menu rounded + diff --git a/packages/esm-styleguide/src/icons/svgs/remove-24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/remove-24px_rounded.svg new file mode 100644 index 000000000..d6d7a51db --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/remove-24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Remove rounded + diff --git a/packages/esm-styleguide/src/icons/svgs/search_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/search_24px_rounded.svg new file mode 100755 index 000000000..d9db52fd6 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/search_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Search rounded + diff --git a/packages/esm-styleguide/src/icons/svgs/supervised_user_circle_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/supervised_user_circle_24px_rounded.svg new file mode 100755 index 000000000..8cf95bb62 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/supervised_user_circle_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Supervised user circle rounded + diff --git a/packages/esm-styleguide/src/icons/svgs/visibility_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/visibility_24px_rounded.svg new file mode 100755 index 000000000..1367e251d --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/visibility_24px_rounded.svg @@ -0,0 +1,6 @@ + + + + + Visibility rounded + diff --git a/packages/esm-styleguide/src/icons/svgs/zoom_out_map_24px_rounded.svg b/packages/esm-styleguide/src/icons/svgs/zoom_out_map_24px_rounded.svg new file mode 100644 index 000000000..f16834353 --- /dev/null +++ b/packages/esm-styleguide/src/icons/svgs/zoom_out_map_24px_rounded.svg @@ -0,0 +1,8 @@ + + + + + + Zoom Out + + \ No newline at end of file diff --git a/packages/esm-styleguide/src/index.js b/packages/esm-styleguide/src/index.js new file mode 100644 index 000000000..4de7a07ef --- /dev/null +++ b/packages/esm-styleguide/src/index.js @@ -0,0 +1,16 @@ +import "./canvas/canvas.css"; +import "./colors/colors.css"; +import "./typography/typography.css"; +import "./spacing/spacing.css"; +import "./cards/cards.css"; +import "./buttons-and-links/buttons-and-links.css"; +import "./logo/logo.js"; +import "./icons/icons.js"; +import "./inputs/input.css"; +import "./main-content/main-content.css"; +import "./button-icons/button-icons.css"; +import "./toasts/toasts.css"; +import "./responsive-breakpoints/responsive-breakpoints.js"; +import "./forms/forms.css"; + +export * from "./toasts/toasts"; diff --git a/packages/esm-styleguide/src/inputs/input.css b/packages/esm-styleguide/src/inputs/input.css new file mode 100644 index 000000000..90dd4d438 --- /dev/null +++ b/packages/esm-styleguide/src/inputs/input.css @@ -0,0 +1,182 @@ +/* Remove shadow in ios inputs */ +textarea, +input[type="text"] { + -webkit-appearance: none; +} + +div.omrs-input-group { + margin-bottom: 1.5rem; + position: relative; + width: 100%; +} + +input.omrs-input-underlined, +input.omrs-input-filled, +input.omrs-input-outlined { + font-size: 1rem; + width: 100%; + height: 3.5rem; + padding-left: 0.875rem; + outline: none; +} + +input.omrs-input-underlined, +input.omrs-input-filled { + border: none; + border-bottom: 2px solid var(--omrs-color-ink-lowest-contrast); + border-radius: 0.25rem 0.25rem 0 0; + vertical-align: middle; + line-height: 147.6%; +} + +input.omrs-input-outlined { + background: rgba(255, 255, 255, 0.01); + border: 1px solid var(--omrs-color-ink-lowest-contrast); + border-radius: 0.25rem; +} + +input.omrs-input-filled { + background: var(--omrs-color-bg-low-contrast); +} + +input.omrs-input-underlined { + background: var(--omrs-color-ink-white); +} + +input.omrs-input-underlined ~ label, +input.omrs-input-filled ~ label, +input.omrs-input-outlined ~ label { + color: var(--omrs-color-ink-medium-contrast); + font-size: 1.0625rem; + font-weight: normal; + position: absolute; + pointer-events: none; + top: 1.25rem; + left: 0.875rem; + transition: 0.2s ease all; + letter-spacing: 0.0275rem; + color: var(--omrs-color-ink-medium-contrast); +} + +input.omrs-input-underlined:focus ~ label, +input.omrs-input-filled:focus ~ label, +input.omrs-input-underlined:valid ~ label, +input.omrs-input-filled:valid ~ label { + top: 0; + font-size: 0.9375rem; +} + +input.omrs-input-outlined:focus ~ label, +input.omrs-input-outlined:valid ~ label { + top: -0.75rem; + left: 0.875rem; + font-size: 0.9375rem; + + /** for now, easiest way to show label ontop of border **/ + background: white; + padding: 0.25rem; +} + +/* input.omrs-input-outlined:valid ~ label { + display: none; +} */ + +input.omrs-input-underlined:hover:not(:focus):not(:disabled), +input.omrs-input-filled:hover:not(:focus):not(:disabled) { + background-color: var(--omrs-color-interaction-minus-two); + border-bottom-color: var(--omrs-color-ink-high-contrast); +} + +input.omrs-input-outlined:hover:not(:focus):not(:disabled) { + border-color: var(--omrs-color-ink-medium-contrast); +} + +input.omrs-input-underlined:disabled, +input.omrs-input-filled:disabled, +input.omrs-input-outlined:disabled { + cursor: not-allowed; +} + +input.omrs-input-underlined:disabled, +input.omrs-input-filled:disabled { + background-color: var(--omrs-color-bg-low-contrast); + border-color: var(--omrs-color-ink-low-contrast); +} + +input.omrs-input-outlined:disabled { + border-color: var(--omrs-color-ink-lowest-contrast); +} + +input.omrs-input-underlined:disabled ~ label, +input.omrs-input-filled:disabled ~ label, +input.omrs-input-outlined:disabled ~ label, +input.omrs-input-underlined:disabled ~ span.omrs-input-helper, +input.omrs-input-outlined:disabled ~ span.omrs-input-helper, +input.omrs-input-filled:disabled ~ span.omrs-input-helper { + color: var(--omrs-color-ink-low-contrast); +} + +input.omrs-input-danger { + border-color: var(--omrs-color-danger); +} + +input.omrs-input-danger ~ label, +input.omrs-input-danger ~ span.omrs-input-helper { + color: var(--omrs-color-danger); +} + +input.omrs-input-danger ~ button > svg { + fill: var(--omrs-color-danger); +} + +input.omrs-input-underlined:disabled ~ button > svg, +input.omrs-input-filled:disabled ~ button > svg, +input.omrs-input-outlined:disabled ~ button > svg { + fill: var(--omrs-color-ink-low-contrast); +} + +input.omrs-input-underlined ~ button > svg, +input.omrs-input-filled ~ button > svg, +input.omrs-input-outlined ~ button > svg { + position: absolute; + top: 1rem; + right: 0.875rem; + fill: grey; +} + +input.omrs-input-underlined:focus:not(.omrs-input-danger) ~ button > svg, +input.omrs-input-filled:focus:not(.omrs-input-danger) ~ button > svg { + fill: var(--omrs-color-ink-high-contrast); +} + +input.omrs-input-danger ~ button > svg { + fill: var(--omrs-color-danger); +} + +span.omrs-input-helper { + font-size: 0.9375rem; + letter-spacing: 0.44px; + color: var(--omrs-color-ink-medium-contrast); + padding-left: 0.875rem; + line-height: 138.3%; +} + +input.omrs-input-danger ~ span.omrs-input-helper { + color: var(--omrs-color-danger); +} + +input.omrs-input-underlined:focus:not(.omrs-input-danger) ~ label, +input.omrs-input-filled:focus:not(.omrs-input-danger) ~ label, +input.omrs-input-outlined:focus:not(.omrs-input-danger) ~ label { + color: var(--omrs-color-interaction); +} + +input.omrs-input-underlined:focus:not(.omrs-input-danger), +input.omrs-input-filled:focus:not(.omrs-input-danger), +input.omrs-input-outlined:focus:not(.omrs-input-danger) { + border-color: var(--omrs-color-interaction); +} + +input.omrs-input-outlined:focus { + border-width: 0.125rem; +} diff --git a/packages/esm-styleguide/src/inputs/input.stories.html b/packages/esm-styleguide/src/inputs/input.stories.html new file mode 100644 index 000000000..529dbd2b4 --- /dev/null +++ b/packages/esm-styleguide/src/inputs/input.stories.html @@ -0,0 +1,222 @@ +
+

OpenMRS Inputs

+

+ There are 3 types of input fields defined in the styleguide: +

+
+
+

Underlined Inputs

+
+
+ + + Helper Text + + + +
+
+ + + + + + Helper Text +
+ +
+ + + + + + Helper Text +
+
+
+
+

Filled Inputs

+
+
+ + + + Helper Text + + + +
+
+ + + Helper Text + + + +
+ +
+ + + + + + Helper Text +
+
+
+
+

Outlined Inputs

+
+
+ + + Helper Text + + + +
+
+ + + Helper Text + + + +
+ +
+ + + + + + Helper Text +
+
+
+
+

Code example:

+

<%=inputType%> input

+
+ + + + + + Helper Text +
+
+
+
HTML
+
JSX
+
+
+
+
+
+ + + + + + Helper Text +
+
+
+
+
+
+ + + + + + Helper Text +
+
+
+
+
+
+ diff --git a/packages/esm-styleguide/src/inputs/input.stories.js b/packages/esm-styleguide/src/inputs/input.stories.js new file mode 100644 index 000000000..2beda973b --- /dev/null +++ b/packages/esm-styleguide/src/inputs/input.stories.js @@ -0,0 +1,31 @@ +import { storiesOf } from "@storybook/html"; +import { htmlStory } from "../story-helpers"; +import ejs from "ejs"; +import html from "./input.stories.html"; +import { radios, boolean, select } from "@storybook/addon-knobs"; +import "./input.css"; + +storiesOf("OpenMRS Styleguide", module).add("Inputs", () => { + const inputType = select( + "Type", + { + Underlined: "underlined", + Filled: "filled", + Outlined: "outlined", + }, + "outlined" + ); + + const isDanger = boolean("Is Danger", false); + + const determineStyle = (inputType, isDanger) => + `omrs-input-${inputType} ${isDanger ? "omrs-input-danger" : ""}`.trim(); + + return htmlStory( + ejs.render(html, { + determineStyle, + inputType, + isDanger, + }) + ); +}); diff --git a/packages/esm-styleguide/src/intro.stories.html b/packages/esm-styleguide/src/intro.stories.html new file mode 100644 index 000000000..e63e3ad89 --- /dev/null +++ b/packages/esm-styleguide/src/intro.stories.html @@ -0,0 +1,103 @@ +
+

OpenMRS Styleguide

+

+ The OpenMRS Styleguide is the look and feel for the OpenMRS frontend. It + consists of design principles, + a design library, and a + javascript + css project. This website is the documentation for the styleguide, showing what css + classes are available and how to use them. +

+

+ Browse the navigation menu on the left of the screen to see all of the + components that are available. +

+

Installation

+

+ The styleguide is developed as part of the + microfrontends initiative. It is intended to be used as an + in-browser javascript module, but can also be used as an + npm package + or as a raw css file. +

+
+

In-browser module

+ To install the styleguide as an in-browser javascript module, add the + following to your + import map: +
+ { "imports": { "@openmrs/esm-styleguide": "/path-to-styleguide.js" } } +
+ Now you can load the styleguide with the following in your HTML: +
+ +
+ Now all of the omrs global css classes are available to be used. +
+
+

NPM package

+

To install the styleguide via npm, do the following:

+
+ npm install --save @openmrs/esm-styleguide +
+ Now load the css file that is located at + node_modules/@openmrs/esm-styleguide/dist/styleguide-entry.css. + If you're using a bundler like webpack, this can be done with the following + code: +
+ import '@openmrs/esm-styleguide/dist/styleguide-entry.css' +
+
+
+

Raw CSS file

+

To install the styleguide as a raw css file, do the following:

+
    +
  1. + Download + this directory + from a CDN such as jsdelivr. +
  2. +
  3. + Now include the styleguide-entry.css file into your html + file. +
  4. +
+
+
diff --git a/packages/esm-styleguide/src/intro.stories.js b/packages/esm-styleguide/src/intro.stories.js new file mode 100644 index 000000000..a881313e8 --- /dev/null +++ b/packages/esm-styleguide/src/intro.stories.js @@ -0,0 +1,7 @@ +import { storiesOf } from "@storybook/html/dist/client/preview"; +import { htmlStory } from "./story-helpers"; +import html from "./intro.stories.html"; + +storiesOf("OpenMRS Styleguide", module).add("Styleguide Intro", () => + htmlStory(html) +); diff --git a/packages/esm-styleguide/src/logo/logo.css b/packages/esm-styleguide/src/logo/logo.css new file mode 100644 index 000000000..bca1955aa --- /dev/null +++ b/packages/esm-styleguide/src/logo/logo.css @@ -0,0 +1,19 @@ +#omrs-logo-full-color, +#omrs-logo-partial-color, +#omrs-logo-icon-color { + --logo-red: #e15d29; + --logo-orange: #e4a12a; + --logo-purple: #545090; + --logo-green: #008877; + --logo-black: #1a1919; +} + +#omrs-logo-full-mono, +#omrs-logo-partial-mono, +#omrs-logo-icon-mono { + --logo-red: rgba(19, 19, 21, 0.6) !important; + --logo-orange: rgba(19, 19, 21, 0.6) !important; + --logo-purple: rgba(19, 19, 21, 0.6) !important; + --logo-green: rgba(19, 19, 21, 0.6) !important; + --logo-black: rgba(19, 19, 21, 0.6) !important; +} diff --git a/packages/esm-styleguide/src/logo/logo.js b/packages/esm-styleguide/src/logo/logo.js new file mode 100644 index 000000000..4bf5e6fb2 --- /dev/null +++ b/packages/esm-styleguide/src/logo/logo.js @@ -0,0 +1,12 @@ +import "./logo.css"; +import fullLogo from "./openmrs-logo-full.svg"; +import partialLogo from "./openmrs-logo-partial.svg"; +import iconLogo from "./openmrs-logo-icon.svg"; +import { addSvg } from "../svg-utils"; + +addSvg("omrs-logo-full-color", fullLogo); +addSvg("omrs-logo-full-mono", fullLogo); +addSvg("omrs-logo-partial-color", partialLogo); +addSvg("omrs-logo-partial-mono", partialLogo); +addSvg("omrs-logo-icon-color", iconLogo); +addSvg("omrs-logo-icon-mono", iconLogo); diff --git a/packages/esm-styleguide/src/logo/logo.stories.html b/packages/esm-styleguide/src/logo/logo.stories.html new file mode 100644 index 000000000..29d61d511 --- /dev/null +++ b/packages/esm-styleguide/src/logo/logo.stories.html @@ -0,0 +1,57 @@ + diff --git a/packages/esm-styleguide/src/logo/logo.stories.js b/packages/esm-styleguide/src/logo/logo.stories.js new file mode 100644 index 000000000..2e878dc17 --- /dev/null +++ b/packages/esm-styleguide/src/logo/logo.stories.js @@ -0,0 +1,31 @@ +import { storiesOf } from "@storybook/html"; +import { htmlStory } from "../story-helpers"; +import ejs from "ejs"; +import html from "./logo.stories.html"; +import { radios } from "@storybook/addon-knobs"; +import "./logo.js"; + +storiesOf("OpenMRS Styleguide", module).add("Logos", () => { + const logoType = radios( + "Logo Type", + { + Full: "full", + Partial: "partial", + Icon: "icon", + }, + "full" + ); + + const logoColor = radios( + "Logo Color", + { + "With Colors": "color", + "Mono / Grey": "mono", + }, + "color" + ); + + const href = `#omrs-logo-${logoType}-${logoColor}`; + + return htmlStory(ejs.render(html, { href })); +}); diff --git a/packages/esm-styleguide/src/logo/openmrs-logo-full.svg b/packages/esm-styleguide/src/logo/openmrs-logo-full.svg new file mode 100644 index 000000000..ab1db8904 --- /dev/null +++ b/packages/esm-styleguide/src/logo/openmrs-logo-full.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/esm-styleguide/src/logo/openmrs-logo-icon.svg b/packages/esm-styleguide/src/logo/openmrs-logo-icon.svg new file mode 100644 index 000000000..57591cd55 --- /dev/null +++ b/packages/esm-styleguide/src/logo/openmrs-logo-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/esm-styleguide/src/logo/openmrs-logo-partial.svg b/packages/esm-styleguide/src/logo/openmrs-logo-partial.svg new file mode 100644 index 000000000..573b8b0d7 --- /dev/null +++ b/packages/esm-styleguide/src/logo/openmrs-logo-partial.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/esm-styleguide/src/main-content/main-content.css b/packages/esm-styleguide/src/main-content/main-content.css new file mode 100644 index 000000000..1e635128d --- /dev/null +++ b/packages/esm-styleguide/src/main-content/main-content.css @@ -0,0 +1,14 @@ +:root { + --omrs-sidenav-width: 16.25rem; + --omrs-topnav-height: 3.5rem; +} + +.omrs-main-content { + margin-top: var(--omrs-topnav-height); + margin-left: 0; + transition: margin-left 0.5s ease; +} + +body.omrs-sidenav-expanded .omrs-main-content { + margin-left: var(--omrs-sidenav-width); +} diff --git a/packages/esm-styleguide/src/main-content/main-content.stories.html b/packages/esm-styleguide/src/main-content/main-content.stories.html new file mode 100644 index 000000000..1327359ba --- /dev/null +++ b/packages/esm-styleguide/src/main-content/main-content.stories.html @@ -0,0 +1,31 @@ +
+

Main Content

+

+ The main content of a page must respect the positioning top and side + navbars, including whether the side nav is expanded or not. To accomplish + this, the styleguide provides the `omrs-main-content` css class. +

+

+ Note that it is best to use the <main> element instead of + a div for your main content, since that will help screen readers assist the + user in finding the main content of the current page. +

+
+
+
HTML
+
JSX
+
+
+
+
+
Put your main content here
+
+
+
+
+
Put your main content here
+
+
+
+
+
diff --git a/packages/esm-styleguide/src/main-content/main-content.stories.js b/packages/esm-styleguide/src/main-content/main-content.stories.js new file mode 100644 index 000000000..d0ed5c566 --- /dev/null +++ b/packages/esm-styleguide/src/main-content/main-content.stories.js @@ -0,0 +1,8 @@ +import { storiesOf } from "@storybook/html"; +import html from "./main-content.stories.html"; +import "./main-content.css"; +import { htmlStory } from "../story-helpers"; + +storiesOf("OpenMRS Styleguide", module).add("Main Content", () => + htmlStory(html) +); diff --git a/packages/esm-styleguide/src/responsive-breakpoints/responsive-breakpoints.js b/packages/esm-styleguide/src/responsive-breakpoints/responsive-breakpoints.js new file mode 100644 index 000000000..6f0a3faa5 --- /dev/null +++ b/packages/esm-styleguide/src/responsive-breakpoints/responsive-breakpoints.js @@ -0,0 +1,26 @@ +window.addEventListener("resize", setBodyCssClasses); + +if (document.readyState === "complete") { + setBodyCssClasses(); +} else { + window.addEventListener("load", setBodyCssClasses); +} + +function setBodyCssClasses() { + document.body.classList.toggle( + "omrs-breakpoint-lt-tablet", + window.innerWidth < 600 + ); + document.body.classList.toggle( + "omrs-breakpoint-gt-phone", + window.innerWidth >= 600 + ); + document.body.classList.toggle( + "omrs-breakpoint-lt-desktop", + window.innerWidth < 1200 + ); + document.body.classList.toggle( + "omrs-breakpoint-gt-tablet", + window.innerWidth >= 1200 + ); +} diff --git a/packages/esm-styleguide/src/responsive-breakpoints/responsive-breakpoints.stories.html b/packages/esm-styleguide/src/responsive-breakpoints/responsive-breakpoints.stories.html new file mode 100644 index 000000000..c117d8bb2 --- /dev/null +++ b/packages/esm-styleguide/src/responsive-breakpoints/responsive-breakpoints.stories.html @@ -0,0 +1,72 @@ +
+

Responsive breakpoints

+
+

Example

+

+ Your current device: + Phone + Tablet + Desktop +

+
+
+
+ Blue background on a phone, pink on other devices +
+
+ green background on a desktop, gray on other devices +
+
+
+

Classes defined

+
    +
  • omrs-breakpoint-lt-tablet
  • +
  • omrs-breakpoint-gt-phone
  • +
  • omrs-breakpoint-lt-desktop
  • +
  • omrs-breakpoint-gt-tablet
  • +
+
+
+

Usage

+
+
+
+
+ +
+
+
+
+
+
+ diff --git a/packages/esm-styleguide/src/responsive-breakpoints/responsive-breakpoints.stories.js b/packages/esm-styleguide/src/responsive-breakpoints/responsive-breakpoints.stories.js new file mode 100644 index 000000000..d9e0072d6 --- /dev/null +++ b/packages/esm-styleguide/src/responsive-breakpoints/responsive-breakpoints.stories.js @@ -0,0 +1,8 @@ +import { storiesOf } from "@storybook/html"; +import html from "./responsive-breakpoints.stories.html"; +import "./responsive-breakpoints.js"; +import { htmlStory } from "../story-helpers"; + +storiesOf("OpenMRS Styleguide", module).add("Responsive Breakpoints", () => + htmlStory(html) +); diff --git a/packages/esm-styleguide/src/set-public-path.js b/packages/esm-styleguide/src/set-public-path.js new file mode 100644 index 000000000..7f467243e --- /dev/null +++ b/packages/esm-styleguide/src/set-public-path.js @@ -0,0 +1,3 @@ +import { setPublicPath } from "systemjs-webpack-interop"; + +setPublicPath("@openmrs/esm-styleguide"); diff --git a/packages/esm-styleguide/src/spacing/spacing.css b/packages/esm-styleguide/src/spacing/spacing.css new file mode 100644 index 000000000..63d1c9dcf --- /dev/null +++ b/packages/esm-styleguide/src/spacing/spacing.css @@ -0,0 +1,366 @@ +/* See https://docs.google.com/presentation/d/1YqMMW0Cq5siE_9FG-ipWTzF73KToIw7ewmr1Y8VAjJ8/edit#slide=id.g5bf07c575d_0_0 +*/ + +* { + box-sizing: border-box; +} + +.omrs-padding-0 { + padding: 0; +} + +.omrs-padding-4 { + padding: 0.25rem; +} + +.omrs-padding-8 { + padding: 0.5rem; +} + +.omrs-padding-12 { + padding: 0.75rem; +} + +.omrs-padding-16 { + padding: 1rem; +} + +.omrs-padding-20 { + padding: 1.25rem; +} + +.omrs-padding-24 { + padding: 1.5rem; +} + +.omrs-padding-28 { + padding: 1.75rem; +} + +.omrs-padding-32 { + padding: 2rem; +} + +.omrs-padding-left-0 { + padding-left: 0; +} + +.omrs-padding-left-4 { + padding-left: 0.25rem; +} + +.omrs-padding-left-8 { + padding-left: 0.5rem; +} + +.omrs-padding-left-12 { + padding-left: 0.75rem; +} + +.omrs-padding-left-16 { + padding-left: 1rem; +} + +.omrs-padding-left-20 { + padding-left: 1.25rem; +} + +.omrs-padding-left-24 { + padding-left: 1.5rem; +} + +.omrs-padding-left-28 { + padding-left: 1.75rem; +} + +.omrs-padding-left-32 { + padding-left: 2rem; +} + +.omrs-padding-right-0 { + padding-right: 0; +} + +.omrs-padding-right-4 { + padding-right: 0.25rem; +} + +.omrs-padding-right-8 { + padding-right: 0.5rem; +} + +.omrs-padding-right-12 { + padding-right: 0.75rem; +} + +.omrs-padding-right-16 { + padding-right: 1rem; +} + +.omrs-padding-right-20 { + padding-right: 1.25rem; +} + +.omrs-padding-right-24 { + padding-right: 1.5rem; +} + +.omrs-padding-right-28 { + padding-right: 1.75rem; +} + +.omrs-padding-right-32 { + padding-right: 2rem; +} + +.omrs-padding-top-0 { + padding-top: 0; +} + +.omrs-padding-top-4 { + padding-top: 0.25rem; +} + +.omrs-padding-top-8 { + padding-top: 0.5rem; +} + +.omrs-padding-top-12 { + padding-top: 0.75rem; +} + +.omrs-padding-top-16 { + padding-top: 1rem; +} + +.omrs-padding-top-20 { + padding-top: 1.25rem; +} + +.omrs-padding-top-24 { + padding-top: 1.5rem; +} + +.omrs-padding-top-28 { + padding-top: 1.75rem; +} + +.omrs-padding-top-32 { + padding-top: 2rem; +} + +.omrs-padding-bottom-0 { + padding-bottom: 0; +} + +.omrs-padding-bottom-4 { + padding-bottom: 0.25rem; +} + +.omrs-padding-bottom-8 { + padding-bottom: 0.5rem; +} + +.omrs-padding-bottom-12 { + padding-bottom: 0.75rem; +} + +.omrs-padding-bottom-16 { + padding-bottom: 1rem; +} + +.omrs-padding-bottom-20 { + padding-bottom: 1.25rem; +} + +.omrs-padding-bottom-24 { + padding-bottom: 1.5rem; +} + +.omrs-padding-bottom-28 { + padding-bottom: 1.75rem; +} + +.omrs-padding-bottom-32 { + padding-bottom: 2rem; +} + +.omrs-margin-0 { + margin: 0; +} + +.omrs-margin-4 { + margin: 0.25rem; +} + +.omrs-margin-8 { + margin: 0.5rem; +} + +.omrs-margin-12 { + margin: 0.75rem; +} + +.omrs-margin-16 { + margin: 1rem; +} + +.omrs-margin-20 { + margin: 1.25rem; +} + +.omrs-margin-24 { + margin: 1.5rem; +} + +.omrs-margin-28 { + margin: 1.75rem; +} + +.omrs-margin-32 { + margin: 2rem; +} + +.omrs-margin-left-0 { + margin-left: 0; +} + +.omrs-margin-left-4 { + margin-left: 0.25rem; +} + +.omrs-margin-left-8 { + margin-left: 0.5rem; +} + +.omrs-margin-left-12 { + margin-left: 0.75rem; +} + +.omrs-margin-left-16 { + margin-left: 1rem; +} + +.omrs-margin-left-20 { + margin-left: 1.25rem; +} + +.omrs-margin-left-24 { + margin-left: 1.5rem; +} + +.omrs-margin-left-28 { + margin-left: 1.75rem; +} + +.omrs-margin-left-32 { + margin-left: 2rem; +} + +.omrs-margin-right-0 { + margin-right: 0; +} + +.omrs-margin-right-4 { + margin-right: 0.25rem; +} + +.omrs-margin-right-8 { + margin-right: 0.5rem; +} + +.omrs-margin-right-12 { + margin-right: 0.75rem; +} + +.omrs-margin-right-16 { + margin-right: 1rem; +} + +.omrs-margin-right-20 { + margin-right: 1.25rem; +} + +.omrs-margin-right-24 { + margin-right: 1.5rem; +} + +.omrs-margin-right-28 { + margin-right: 1.75rem; +} + +.omrs-margin-right-32 { + margin-right: 2rem; +} + +.omrs-margin-top-0 { + margin-top: 0; +} + +.omrs-margin-top-4 { + margin-top: 0.25rem; +} + +.omrs-margin-top-8 { + margin-top: 0.5rem; +} + +.omrs-margin-top-12 { + margin-top: 0.75rem; +} + +.omrs-margin-top-16 { + margin-top: 1rem; +} + +.omrs-margin-top-20 { + margin-top: 1.25rem; +} + +.omrs-margin-top-24 { + margin-top: 1.5rem; +} + +.omrs-margin-top-28 { + margin-top: 1.75rem; +} + +.omrs-margin-top-32 { + margin-top: 2rem; +} + +.omrs-margin-bottom-0 { + margin-bottom: 0; +} + +.omrs-margin-bottom-4 { + margin-bottom: 0.25rem; +} + +.omrs-margin-bottom-8 { + margin-bottom: 0.5rem; +} + +.omrs-margin-bottom-12 { + margin-bottom: 0.75rem; +} + +.omrs-margin-bottom-16 { + margin-bottom: 1rem; +} + +.omrs-margin-bottom-20 { + margin-bottom: 1.25rem; +} + +.omrs-margin-bottom-24 { + margin-bottom: 1.5rem; +} + +.omrs-margin-bottom-28 { + margin-bottom: 1.75rem; +} + +.omrs-margin-bottom-32 { + margin-bottom: 2rem; +} diff --git a/packages/esm-styleguide/src/spacing/spacing.stories.html b/packages/esm-styleguide/src/spacing/spacing.stories.html new file mode 100644 index 000000000..a9848ea90 --- /dev/null +++ b/packages/esm-styleguide/src/spacing/spacing.stories.html @@ -0,0 +1,337 @@ +
+

OpenMRS Spacing, Padding, and Margin

+ The OpenMRS styleguide provides css classes for padding and margin. +
+

Padding

+
+
+
HTML
+
JSX
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
    +
  • + omrs-padding-0 +
  • +
  • + omrs-padding-4 +
  • +
  • + omrs-padding-8 +
  • +
  • + omrs-padding-12 +
  • +
  • + omrs-padding-16 +
  • +
  • + omrs-padding-20 +
  • +
  • + omrs-padding-24 +
  • +
  • + omrs-padding-28 +
  • +
  • + omrs-padding-32 +
  • +
+
    +
  • + omrs-padding-top-0 +
  • +
  • + omrs-padding-top-4 +
  • +
  • + omrs-padding-top-8 +
  • +
  • + omrs-padding-top-12 +
  • +
  • + omrs-padding-top-16 +
  • +
  • + omrs-padding-top-20 +
  • +
  • + omrs-padding-top-24 +
  • +
  • + omrs-padding-top-28 +
  • +
  • + omrs-padding-top-32 +
  • +
+
    +
  • + omrs-padding-right-0 +
  • +
  • + omrs-padding-right-4 +
  • +
  • + omrs-padding-right-8 +
  • +
  • + omrs-padding-right-12 +
  • +
  • + omrs-padding-right-16 +
  • +
  • + omrs-padding-right-20 +
  • +
  • + omrs-padding-right-24 +
  • +
  • + omrs-padding-right-28 +
  • +
  • + omrs-padding-right-32 +
  • +
+
    +
  • + omrs-padding-bottom-0 +
  • +
  • + omrs-padding-bottom-4 +
  • +
  • + omrs-padding-bottom-8 +
  • +
  • + omrs-padding-bottom-12 +
  • +
  • + omrs-padding-bottom-16 +
  • +
  • + omrs-padding-bottom-20 +
  • +
  • + omrs-padding-bottom-24 +
  • +
  • + omrs-padding-bottom-28 +
  • +
  • + omrs-padding-bottom-32 +
  • +
+
    +
  • + omrs-padding-left-0 +
  • +
  • + omrs-padding-left-4 +
  • +
  • + omrs-padding-left-8 +
  • +
  • + omrs-padding-left-12 +
  • +
  • + omrs-padding-left-16 +
  • +
  • + omrs-padding-left-20 +
  • +
  • + omrs-padding-left-24 +
  • +
  • + omrs-padding-left-28 +
  • +
  • + omrs-padding-left-32 +
  • +
+
+
+
+

Margin

+
+
+
+
+
+
+
    +
  • + omrs-margin-0 +
  • +
  • + omrs-margin-4 +
  • +
  • + omrs-margin-8 +
  • +
  • + omrs-margin-12 +
  • +
  • + omrs-margin-16 +
  • +
  • + omrs-margin-20 +
  • +
  • + omrs-margin-24 +
  • +
  • + omrs-margin-28 +
  • +
  • + omrs-margin-32 +
  • +
+
    +
  • + omrs-margin-top-0 +
  • +
  • + omrs-margin-top-4 +
  • +
  • + omrs-margin-top-8 +
  • +
  • + omrs-margin-top-12 +
  • +
  • + omrs-margin-top-16 +
  • +
  • + omrs-margin-top-20 +
  • +
  • + omrs-margin-top-24 +
  • +
  • + omrs-margin-top-28 +
  • +
  • + omrs-margin-top-32 +
  • +
+
    +
  • + omrs-margin-right-0 +
  • +
  • + omrs-margin-right-4 +
  • +
  • + omrs-margin-right-8 +
  • +
  • + omrs-margin-right-12 +
  • +
  • + omrs-margin-right-16 +
  • +
  • + omrs-margin-right-20 +
  • +
  • + omrs-margin-right-24 +
  • +
  • + omrs-margin-right-28 +
  • +
  • + omrs-margin-right-32 +
  • +
+
    +
  • + omrs-margin-bottom-0 +
  • +
  • + omrs-margin-bottom-4 +
  • +
  • + omrs-margin-bottom-8 +
  • +
  • + omrs-margin-bottom-12 +
  • +
  • + omrs-margin-bottom-16 +
  • +
  • + omrs-margin-bottom-20 +
  • +
  • + omrs-margin-bottom-24 +
  • +
  • + omrs-margin-bottom-28 +
  • +
  • + omrs-margin-bottom-32 +
  • +
+
    +
  • + omrs-margin-left-0 +
  • +
  • + omrs-margin-left-4 +
  • +
  • + omrs-margin-left-8 +
  • +
  • + omrs-margin-left-12 +
  • +
  • + omrs-margin-left-16 +
  • +
  • + omrs-margin-left-20 +
  • +
  • + omrs-margin-left-24 +
  • +
  • + omrs-margin-left-28 +
  • +
  • + omrs-margin-left-32 +
  • +
+
+
+
+ diff --git a/packages/esm-styleguide/src/spacing/spacing.stories.js b/packages/esm-styleguide/src/spacing/spacing.stories.js new file mode 100644 index 000000000..1ad0bc64f --- /dev/null +++ b/packages/esm-styleguide/src/spacing/spacing.stories.js @@ -0,0 +1,9 @@ +import { storiesOf } from "@storybook/html"; +import html from "./spacing.stories.html"; +import "./spacing.css"; +import { htmlStory } from "../story-helpers"; + +storiesOf("OpenMRS Styleguide", module).add( + "Spacing, Padding, and Margin", + () => htmlStory(html) +); diff --git a/packages/esm-styleguide/src/story-helpers.css b/packages/esm-styleguide/src/story-helpers.css new file mode 100644 index 000000000..932a1c51d --- /dev/null +++ b/packages/esm-styleguide/src/story-helpers.css @@ -0,0 +1,46 @@ +.stories-example { + margin: 1rem 0; +} + +pre code { + padding: 0 !important; +} + +pre { + display: flex; + align-items: center; + padding: 0.5rem; +} + +.examples { + font-family: arial, sans-serif; + margin-top: 1rem; +} +.examples .tabs { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + width: 100%; + overflow: hidden; + line-height: 2.25rem; +} +.examples .tabs .tab { + float: left; + background: white; + color: #777777; + height: 2rem; + margin: 0.125rem 0 0; + padding: 0 0.5rem; + cursor: pointer; +} +.examples .tabs .tab.active { + color: #1ea7fd; + border-bottom: 2px solid #1ea7fd; +} +.examples .panels .panel { + padding: 0.5rem 0.5rem; + display: none; + background-color: whitesmoke; +} + +.examples .panels .panel.active { + display: block; +} diff --git a/packages/esm-styleguide/src/story-helpers.js b/packages/esm-styleguide/src/story-helpers.js new file mode 100644 index 000000000..98ef1eb0b --- /dev/null +++ b/packages/esm-styleguide/src/story-helpers.js @@ -0,0 +1,47 @@ +import copyCodeBlock from "@pickra/copy-code-block"; +import "./story-helpers.css"; + +const colors = { + background: "#f7f7f7", + textColor: "#222", + border: "1px solid #222", +}; + +export function htmlStory(html) { + if (typeof html !== "string") { + throw Error("htmlStory must be called with an html string"); + } + const parser = new DOMParser(); + let dom; + try { + dom = parser.parseFromString(html, "text/html"); + } catch (err) { + console.error(err); + throw Error("htmlStory was called with invalid HTML"); + } + dom.querySelectorAll(".stories-example").forEach((exampleDiv) => { + const numLeadingSpaces = + exampleDiv.innerHTML.replace(/^\n/, "").search(/\S/) || 0; + const innerHTML = exampleDiv.innerHTML + .trim() + .replace( + new RegExp("\n" + new Array(numLeadingSpaces + 1).join(" "), "g"), + "\n" + ); + if (exampleDiv.classList.contains("lang-html")) { + exampleDiv.innerHTML = copyCodeBlock(innerHTML, { lang: "xml", colors }); + } else if (exampleDiv.classList.contains("lang-css")) { + exampleDiv.innerHTML = copyCodeBlock(innerHTML, { lang: "css", colors }); + } else if (exampleDiv.classList.contains("lang-js")) { + exampleDiv.innerHTML = copyCodeBlock(innerHTML, { lang: "js", colors }); + } else if (exampleDiv.classList.contains("lang-bash")) { + exampleDiv.innerHTML = copyCodeBlock(innerHTML, { lang: "bash", colors }); + } else { + throw Error( + "stories-example divs must have either lang-html, lang-css, lang-js, or lang-bash on them" + ); + } + }); + + return dom.body.innerHTML; +} diff --git a/packages/esm-styleguide/src/svg-utils.js b/packages/esm-styleguide/src/svg-utils.js new file mode 100644 index 000000000..fde434e75 --- /dev/null +++ b/packages/esm-styleguide/src/svg-utils.js @@ -0,0 +1,28 @@ +/* The svg container is a div that contains all the OpenMRS svgs, with + * an HTML id that can be referenced with the following code: + * + * + * + * + * This approach is known as "svg sprites" + */ +const svgContainer = document.createElement("div"); +const appendContainer = () => { + document.body.appendChild(svgContainer); +}; +svgContainer.id = "omrs-svgs-container"; +svgContainer.style.display = "none"; + +if (document.readyState === "complete") { + appendContainer(); +} else { + window.addEventListener("load", appendContainer); +} + +export function addSvg(htmlId, svgString) { + const domParser = new DOMParser(); + const dom = domParser.parseFromString(svgString, "text/html"); + const svgElement = dom.querySelector("svg"); + svgElement.id = htmlId; + svgContainer.appendChild(svgElement); +} diff --git a/packages/esm-styleguide/src/toasts/active-toasts.component.jsx b/packages/esm-styleguide/src/toasts/active-toasts.component.jsx new file mode 100644 index 000000000..50d8a7b84 --- /dev/null +++ b/packages/esm-styleguide/src/toasts/active-toasts.component.jsx @@ -0,0 +1,53 @@ +import React from "react"; +import { toastsSubject } from "./toasts"; +import Toast from "./toast.component"; + +export default function ActiveToasts() { + const [toasts, setToasts] = React.useState([]); + const [toastsClosing, setToastsClosing] = React.useState([]); + const closeToastRef = React.useRef(); + closeToastRef.current = closeToast; + + React.useEffect(() => { + const subscription = toastsSubject.subscribe((toast) => + setToasts([...toasts, toast]) + ); + + return () => { + subscription.unsubscribe(); + }; + }, [toastsSubject, toasts]); + + React.useEffect(() => { + if (toastsClosing.length > 0) { + const timeoutId = setTimeout(() => { + setToasts( + toasts.filter( + (toast) => + !toastsClosing.some((toastClosing) => toastClosing === toast) + ) + ); + setToastsClosing([]); + }, 200); + + return () => { + clearTimeout(timeoutId); + }; + } + }, [toastsClosing, toasts]); + + return toasts.map((toast) => ( + t === toast)} + closeToastRef={closeToastRef} + /> + )); + + function closeToast(toast) { + if (!toastsClosing.some((t) => t === toast)) { + setToastsClosing(toastsClosing.concat(toast)); + } + } +} diff --git a/packages/esm-styleguide/src/toasts/toast.component.jsx b/packages/esm-styleguide/src/toasts/toast.component.jsx new file mode 100644 index 000000000..f95accebf --- /dev/null +++ b/packages/esm-styleguide/src/toasts/toast.component.jsx @@ -0,0 +1,57 @@ +import React from "react"; +import { always } from "kremling"; + +const defaultOptions = { + millis: 4000, +}; + +export default function Toast({ toast, closeToastRef, isClosing }) { + const { millis, description } = Object.assign({}, toast, defaultOptions); + + const [waitingForTime, setWaitingForTime] = React.useState(true); + const [isMounting, setIsMounting] = React.useState(true); + + React.useEffect(() => { + if (waitingForTime) { + const timeoutId = setTimeout(() => { + closeToastRef.current(toast); + }, millis); + + return () => { + clearTimeout(timeoutId); + }; + } + }, [waitingForTime]); + + React.useEffect(() => { + const timeoutId = setTimeout(() => { + setIsMounting(false); + }, 20); + + return () => { + clearTimeout(timeoutId); + }; + }, []); + + return ( + setWaitingForTime(false)} + onMouseLeave={() => setWaitingForTime(true)} + > + {description} + + + + + ); +} diff --git a/packages/esm-styleguide/src/toasts/toasts.css b/packages/esm-styleguide/src/toasts/toasts.css new file mode 100644 index 000000000..d283be680 --- /dev/null +++ b/packages/esm-styleguide/src/toasts/toasts.css @@ -0,0 +1,54 @@ +.omrs-toasts-container { + z-index: 100000; + position: fixed; + width: 100%; + bottom: 2rem; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.omrs-toast { + background-color: #323233; + color: var(--omrs-color-ink-white) !important; + border-radius: 0.25rem; + box-shadow: 0 0.25rem 12.875rem rgba(0, 0, 0, 0.25); + padding: 0 1rem; + display: flex; + align-items: center; + opacity: 1; + transition: opacity 200ms ease-in-out, padding 100ms ease-in-out; +} + +.omrs-toast + .omrs-toast { + margin-top: 1rem; +} + +.omrs-toast-mounting, +.omrs-toast-mounting > * { + padding: 0; +} + +.omrs-toast-closing, +.omrs-toast-mounting { + opacity: 0; +} + +.omrs-toast .omrs-btn-icon { + border-left: 0.0625rem solid var(--omrs-color-ink-white); + fill: var(--omrs-color-ink-white) !important; +} + +.omrs-toast > * { + padding: 0.75rem 0; +} + +.omrs-toast > *:not(:last-child) { + padding-right: 1rem; + border-right: 0.0625rem solid var(--omrs-color-ink-white); +} + +.omrs-toast > *:not(:first-child) { + padding-left: 1rem; +} diff --git a/packages/esm-styleguide/src/toasts/toasts.jsx b/packages/esm-styleguide/src/toasts/toasts.jsx new file mode 100644 index 000000000..6b7f046d6 --- /dev/null +++ b/packages/esm-styleguide/src/toasts/toasts.jsx @@ -0,0 +1,35 @@ +import React from "react"; +import ReactDOM from "react-dom"; +import { Subject } from "rxjs"; +import ActiveToasts from "./active-toasts.component"; + +export const toastsSubject = new Subject(); +let toastId = 0; + +const toastsContainer = document.createElement("div"); +const renderToasts = () => { + document.body.appendChild(toastsContainer); + ReactDOM.render(, toastsContainer); +}; +toastsContainer.className = "omrs-toasts-container"; + +if (document.readyState === "complete") { + renderToasts(); +} else { + window.addEventListener("load", renderToasts); +} + +export function showToast(toast) { + if ( + toast && + typeof toast.description === "string" && + toast.description.trim().length > 0 + ) { + toast.id = toastId++; + toastsSubject.next(toast); + } else { + throw Error( + `showToast must be called with an object that has a 'description' property that is a non-empty string` + ); + } +} diff --git a/packages/esm-styleguide/src/toasts/toasts.stories.html b/packages/esm-styleguide/src/toasts/toasts.stories.html new file mode 100644 index 000000000..642aec3a2 --- /dev/null +++ b/packages/esm-styleguide/src/toasts/toasts.stories.html @@ -0,0 +1,8 @@ +
+

OpenMRS Toasts

+
+ +
+
diff --git a/packages/esm-styleguide/src/toasts/toasts.stories.js b/packages/esm-styleguide/src/toasts/toasts.stories.js new file mode 100644 index 000000000..a8f470516 --- /dev/null +++ b/packages/esm-styleguide/src/toasts/toasts.stories.js @@ -0,0 +1,10 @@ +import { storiesOf } from "@storybook/html"; +import html from "./toasts.stories.html"; +import "./toasts.css"; +import ejs from "ejs"; + +import { htmlStory } from "../story-helpers"; + +storiesOf("OpenMRS Styleguide", module).add("Toasts", () => { + return htmlStory(ejs.render(html)); +}); diff --git a/packages/esm-styleguide/src/typography/typography.css b/packages/esm-styleguide/src/typography/typography.css new file mode 100644 index 000000000..d10b11a16 --- /dev/null +++ b/packages/esm-styleguide/src/typography/typography.css @@ -0,0 +1,290 @@ +html, +body { + font-family: "Roboto", sans-serif; +} + +/* + https://issues.openmrs.org/projects/MF/issues/MF-47 + https://dev.to/colingourlay/how-to-support-apple-s-dynamic-text-in-your-web-content-with-css-40c0 +*/ +@supports (font: -apple-system-body) { + html { + font: -apple-system-body; + } +} + +.omrs-type-serif { + font-family: "Merriweather", serif; +} + +.omrs-bold { + font-weight: 700; +} + +.omrs-medium { + font-weight: 500; +} + +.omrs-italic { + font-style: italic; +} + +.omrs-underline { + text-decoration: underline; +} + +.omrs-type-title { + font-style: normal; + font-weight: bold; + color: var(--omrs-color-brand-black); +} + +.omrs-type-title-1 { + font-style: normal; + font-weight: bold; + font-size: 2.125rem; + line-height: 113.8%; + letter-spacing: 0.023rem; +} + +.omrs-type-title-2 { + font-style: normal; + font-weight: bold; + font-size: 1.875rem; + line-height: 121.5%; + letter-spacing: 0.054rem; + color: var(--omrs-color-brand-black); +} + +.omrs-type-title-3 { + font-style: normal; + font-weight: bold; + font-size: 1.688rem; + line-height: 125%; + letter-spacing: 0.05rem; + color: var(--omrs-color-brand-black); +} + +.omrs-type-title-4 { + font-style: normal; + font-weight: 500; + font-size: 1.5rem; + line-height: 129.6%; + letter-spacing: 0.047rem; + color: var(--omrs-color-brand-black); +} + +.omrs-type-title-5 { + font-style: normal; + font-weight: 500; + font-size: 1.375rem; + line-height: 129%; + color: var(--omrs-color-brand-black); +} + +.omrs-type-body-large { + font-style: normal; + font-weight: normal; + font-size: 1.188rem; + line-height: 129%; + color: var(--omrs-color-brand-black); +} + +.omrs-type-body-regular { + font-style: normal; + font-weight: normal; + font-size: 1.0625rem; + line-height: 147.6%; + color: var(--omrs-color-brand-black); +} + +.omrs-type-body-small { + font-style: normal; + font-weight: normal; + font-size: 0.937rem; + line-height: 138.3%; + letter-spacing: 0.0275rem; + color: var(--omrs-color-brand-black); +} + +/* The below code was generated from https://google-webfonts-helper.herokuapp.com/fonts/roboto?subsets=latin */ + +/* roboto-regular - latin */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 400; + src: local("Roboto"), local("Roboto-Regular"), + url("../../fonts/roboto-v20-latin/roboto-v20-latin-regular.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/roboto-v20-latin/roboto-v20-latin-regular.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* roboto-italic - latin */ +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 400; + src: local("Roboto Italic"), local("Roboto-Italic"), + url("../../fonts/roboto-v20-latin/roboto-v20-latin-italic.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/roboto-v20-latin/roboto-v20-latin-italic.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* roboto-500 - latin */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 500; + src: local("Roboto Medium"), local("Roboto-Medium"), + url("../../fonts/roboto-v20-latin/roboto-v20-latin-500.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/roboto-v20-latin/roboto-v20-latin-500.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* roboto-500italic - latin */ +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 500; + src: local("Roboto Medium Italic"), local("Roboto-MediumItalic"), + url("../../fonts/roboto-v20-latin/roboto-v20-latin-500italic.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/roboto-v20-latin/roboto-v20-latin-500italic.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* roboto-700 - latin */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 700; + src: local("Roboto Bold"), local("Roboto-Bold"), + url("../../fonts/roboto-v20-latin/roboto-v20-latin-700.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/roboto-v20-latin/roboto-v20-latin-700.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* roboto-700italic - latin */ +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 700; + src: local("Roboto Bold Italic"), local("Roboto-BoldItalic"), + url("../../fonts/roboto-v20-latin/roboto-v20-latin-700italic.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/roboto-v20-latin/roboto-v20-latin-700italic.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* The below code was generated from https://google-webfonts-helper.herokuapp.com/fonts/merriweather?subsets=latin */ +/* merriweather-regular - latin */ +@font-face { + font-family: "Merriweather"; + font-style: normal; + font-weight: 400; + src: local("Merriweather Regular"), local("Merriweather-Regular"), + url("../../fonts/merriweather-v21-latin/merriweather-v21-latin-regular.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/merriweather-v21-latin/merriweather-v21-latin-regular.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* merriweather-italic - latin */ +@font-face { + font-family: "Merriweather"; + font-style: italic; + font-weight: 400; + src: local("Merriweather Italic"), local("Merriweather-Italic"), + url("../../fonts/merriweather-v21-latin/merriweather-v21-latin-italic.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/merriweather-v21-latin/merriweather-v21-latin-italic.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* merriweather-700 - latin */ +@font-face { + font-family: "Merriweather"; + font-style: normal; + font-weight: 700; + src: local("Merriweather Bold"), local("Merriweather-Bold"), + url("../../fonts/merriweather-v21-latin/merriweather-v21-latin-700.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/merriweather-v21-latin/merriweather-v21-latin-700.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* merriweather-700italic - latin */ +@font-face { + font-family: "Merriweather"; + font-style: italic; + font-weight: 700; + src: local("Merriweather Bold Italic"), local("Merriweather-BoldItalic"), + url("../../fonts/merriweather-v21-latin/merriweather-v21-latin-700italic.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/merriweather-v21-latin/merriweather-v21-latin-700italic.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* work-sans-300 - latin */ +@font-face { + font-family: "Work Sans"; + font-style: normal; + font-weight: 300; + src: local("Work Sans Light"), local("WorkSans-Light"), + url("../../fonts/work-sans-v5-latin/work-sans-v5-latin-300.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/work-sans-v5-latin/work-sans-v5-latin-300.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} +/* work-sans-500 - latin */ +@font-face { + font-family: "Work Sans"; + font-style: normal; + font-weight: 500; + src: local("Work Sans Medium"), local("WorkSans-Medium"), + url("../../fonts/work-sans-v5-latin/work-sans-v5-latin-500.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/work-sans-v5-latin/work-sans-v5-latin-500.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} +/* work-sans-regular - latin */ +@font-face { + font-family: "Work Sans"; + font-style: normal; + font-weight: 400; + src: local("Work Sans"), local("WorkSans-Regular"), + url("../../fonts/work-sans-v5-latin/work-sans-v5-latin-regular.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/work-sans-v5-latin/work-sans-v5-latin-regular.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} +/* work-sans-700 - latin */ +@font-face { + font-family: "Work Sans"; + font-style: normal; + font-weight: 700; + src: local("Work Sans Bold"), local("WorkSans-Bold"), + url("../../fonts/work-sans-v5-latin/work-sans-v5-latin-700.woff2") + format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("../../fonts/work-sans-v5-latin/work-sans-v5-latin-700.woff") + format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} diff --git a/packages/esm-styleguide/src/typography/typography.stories.html b/packages/esm-styleguide/src/typography/typography.stories.html new file mode 100644 index 000000000..773b8cbfb --- /dev/null +++ b/packages/esm-styleguide/src/typography/typography.stories.html @@ -0,0 +1,316 @@ +
+

Typography and Font

+
+ OpenMRS uses the + Roboto font. Roboto font will serve as the default font for all text and no css + classes are needed to apply the font to your html. Merriweather will serve + as the serif font option (see below for how details). +
+
+

Code example: Font

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

+
+
+
HTML
+
JSX
+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

+
+
+
+
+
+
+

Code example: Serif

+

OpenMRS uses merriweather for serif style.

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

+
+
+
HTML
+
JSX
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

+
+
+
+
+
+ +
+

Code examples: Text Decoration

+
<%- boldText %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%- boldText %>
+
+
+
+
+
<%- boldText %>
+
+
+
+
+ +
<%- mediumText %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%- mediumText %>
+
+
+
+
+
<%- mediumText %>
+
+
+
+
+ +
<%- italicText %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%- italicText %>
+
+
+
+
+
<%- italicText %>
+
+
+
+
+ +
<%- underlinedText %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%- underlinedText %>
+
+
+
+
+
<%- underlinedText %>
+
+
+
+
+
+
+

Code examples: Title Case

+
<%- title1Text %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%-title1Text %>
+
+
+
+
+
<%-title1Text %>
+
+
+
+
+ +
<%- title2Text %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%-title2Text %>
+
+
+
+
+
<%-title2Text %>
+
+
+
+
+ +
<%- title3Text %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%-title3Text %>
+
+
+
+
+
<%-title3Text %>
+
+
+
+
+ +
<%- title4Text %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%-title4Text %>
+
+
+
+
+
<%-title4Text %>
+
+
+
+
+ +
<%- title5Text %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%-title5Text %>
+
+
+
+
+
<%-title5Text %>
+
+
+
+
+
+ +
+

Code examples: Body

+
<%- bodyLargeText %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%- bodyLargeText %>
+
+
+
+
+
<%- bodyLargeText %>
+
+
+
+
+ +
<%- bodyRegularText %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%- bodyRegularText %>
+
+
+
+
+
<%- bodyRegularText %>
+
+
+
+
+ +
<%- bodySmallText %>
+
+
+
HTML
+
JSX
+
+
+
+
+
<%- bodySmallText %>
+
+
+
+
+
<%- bodySmallText %>
+
+
+
+
+
+
+ diff --git a/packages/esm-styleguide/src/typography/typography.stories.js b/packages/esm-styleguide/src/typography/typography.stories.js new file mode 100644 index 000000000..805935130 --- /dev/null +++ b/packages/esm-styleguide/src/typography/typography.stories.js @@ -0,0 +1,38 @@ +import { storiesOf } from "@storybook/html/dist/client/preview"; +import { htmlStory } from "../story-helpers"; +import ejs from "ejs"; +import html from "./typography.stories.html"; +import { text } from "@storybook/addon-knobs"; +import "./typography.css"; + +storiesOf("OpenMRS Styleguide", module).add("Typography & Font", () => { + const boldText = text("Bold text", "Bolded text"); + const mediumText = text("Medium text", "Medium text"); + const italicText = text("Italic text", "Italic text"); + const underlinedText = text("Underlined text", "Underlined text"); + const title1Text = text("Title 1 text", "Title 1 text"); + const title2Text = text("Title 2 text", "Title 2 text"); + const title3Text = text("Title 3 text", "Title 3 text"); + const title4Text = text("Title 4 text", "Title 4 text"); + const title5Text = text("Title 5 text", "Title 5 text"); + const bodyLargeText = text("Body large text", "Body large text"); + const bodyRegularText = text("Body regular text", "Body regular text"); + const bodySmallText = text("Body small text", "Body small text"); + + return htmlStory( + ejs.render(html, { + boldText, + mediumText, + italicText, + underlinedText, + title1Text, + title2Text, + title3Text, + title4Text, + title5Text, + bodyLargeText, + bodyRegularText, + bodySmallText, + }) + ); +}); diff --git a/packages/esm-styleguide/webpack.config.js b/packages/esm-styleguide/webpack.config.js new file mode 100644 index 000000000..6bd2b181c --- /dev/null +++ b/packages/esm-styleguide/webpack.config.js @@ -0,0 +1,63 @@ +const { resolve } = require("path"); +const CleanWebpackPlugin = require("clean-webpack-plugin").CleanWebpackPlugin; +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + +module.exports = { + entry: [ + resolve(__dirname, "src/set-public-path.js"), + resolve(__dirname, "src/index.js"), + ], + output: { + libraryTarget: "system", + filename: "openmrs-esm-styleguide.js", + chunkFilename: "[name].js", + path: resolve(__dirname, "dist"), + jsonpFunction: "webpackJsonp_openmrs_esm_styleguide", + }, + mode: "production", + devtool: "sourcemap", + module: { + rules: [ + { + test: /\.css$/, + use: [ + { loader: MiniCssExtractPlugin.loader }, + "css-loader", + { + loader: "postcss-loader", + options: { + postcssOptions: require("./postcss.config"), + }, + }, + ], + }, + { + test: /\.(js|jsx)$/, + use: ["babel-loader"], + }, + { + test: /\.(woff|woff2|png)?$/, + use: ["file-loader"], + }, + { + test: /\.(svg|html)$/, + use: ["raw-loader"], + }, + ], + }, + devServer: { + disableHostCheck: true, + headers: { + "Access-Control-Allow-Origin": "*", + }, + }, + externals: [/^@openmrs\/.+$/, "react", "react-dom", "rxjs"], + resolve: { + modules: ["node_modules"], + extensions: [".js", ".jsx", ".json"], + }, + plugins: [ + new CleanWebpackPlugin(), + new MiniCssExtractPlugin({ filename: "openmrs-esm-styleguide.css" }), + ], +}; diff --git a/packages/run-openmrs/.babelrc b/packages/run-openmrs/.babelrc new file mode 100644 index 000000000..e15ac017a --- /dev/null +++ b/packages/run-openmrs/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-typescript"] +} diff --git a/packages/run-openmrs/package.json b/packages/run-openmrs/package.json new file mode 100644 index 000000000..9aa993592 --- /dev/null +++ b/packages/run-openmrs/package.json @@ -0,0 +1,53 @@ +{ + "name": "run-openmrs", + "version": "0.3.0", + "license": "MPL-2.0", + "main": "dist/index.js", + "bin": { + "run-openmrs": "./dist/cli.js" + }, + "scripts": { + "start": "npm run watch", + "test": "jest --passWithNoTests", + "build": "tsc", + "lint": "eslint src --ext ts,tsx" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/openmrs/openmrs-esm-core.git" + }, + "bugs": { + "url": "https://github.com/openmrs/openmrs-esm-core/issues" + }, + "homepage": "https://github.com/openmrs/openmrs-esm-core#readme", + "dependencies": { + "@babel/core": "^7.11.4", + "@babel/preset-env": "^7.11.0", + "@babel/preset-react": "^7.10.4", + "@babel/preset-typescript": "^7.10.4", + "@openmrs/esm-app-shell": "^0.3.0", + "@types/react": "^16.9.46", + "@types/systemjs": "^6.1.0", + "autoprefixer": "^9.6.1", + "babel-loader": "^8.1.0", + "browserslist-config-openmrs": "^1.0.1", + "clean-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "6.1.1", + "css-loader": "^3.2.0", + "cssnano": "^4.1.10", + "ejs": "^2.6.2", + "file-loader": "^4.2.0", + "fork-ts-checker-webpack-plugin": "^5.1.0", + "html-webpack-plugin": "^4.5.0", + "mini-css-extract-plugin": "^0.8.0", + "postcss-loader": "^4.0.2", + "raw-loader": "^3.1.0", + "style-loader": "^1.0.0", + "ts-loader": "^8.0.3", + "typescript": "^4.0.2", + "webpack": "^4.44.1", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0", + "yargs": "16.0.3" + } +} diff --git a/packages/run-openmrs/src/cli.ts b/packages/run-openmrs/src/cli.ts new file mode 100644 index 000000000..854f53a1f --- /dev/null +++ b/packages/run-openmrs/src/cli.ts @@ -0,0 +1,83 @@ +#!/usr/bin/env node + +import * as yargs from "yargs"; +import { fork } from "child_process"; +import { resolve } from "path"; +import { getImportmap } from "./utils"; + +import type * as commands from "./commands"; + +const runner = resolve(__dirname, `runner.js`); +const root = resolve(__dirname, ".."); + +type Commands = typeof commands; +type CommandNames = keyof Commands; + +function runCommand( + type: T, + args: Parameters[0] +) { + const ps = fork(runner, [], { cwd: root }); + + ps.send({ + type, + args, + }); +} + +yargs.command( + "debug", + "Starts a new debugging session of the OpenMRS app shell.", + (argv) => + argv + .number("port") + .default("port", 8080) + .describe("port", "The port where the dev server should run.") + .string("backend") + .default("backend", "https://openmrs-spa.org/") + .describe("backend", "The backend to proxy API requests to.") + .string("importmap") + .default("importmap", "importmap.json") + .describe( + "importmap", + "The importmap to use. Can be a path to a valid import map to be taken literally, an URL, or a fixed JSON object." + ), + (args) => + runCommand("runDebug", { + ...args, + importmap: getImportmap(args.importmap), + }) +); + +yargs.command( + "build", + "Builds a new app shell using the provided configuration.", + (argv) => + argv + .string("target") + .default("target", "dist") + .describe( + "target", + "The target directory where the build artifacts will be stored." + ) + .string("importmap") + .default("importmap", "importmap.json") + .describe( + "importmap", + "The importmap to use. Can be a path to a valid import map to be taken literally, an URL, or a fixed JSON object." + ), + (args) => + runCommand("runBuild", { + ...args, + importmap: getImportmap(args.importmap), + target: resolve(process.cwd(), args.target), + }) +); + +yargs + .epilog( + "For more information visit https://github.com/openmrs/openmrs-esm-core." + ) + .help() + .demandCommand() + .strict().argv; diff --git a/packages/run-openmrs/src/commands/build.ts b/packages/run-openmrs/src/commands/build.ts new file mode 100644 index 000000000..2c8ec874d --- /dev/null +++ b/packages/run-openmrs/src/commands/build.ts @@ -0,0 +1,39 @@ +import { ImportmapDeclaration, loadConfig } from "../utils"; + +/* eslint-disable no-console */ + +export interface BuildArgs { + target: string; + importmap: ImportmapDeclaration; +} + +export function runBuild(args: BuildArgs) { + const webpack = require("webpack"); + const config = loadConfig({ + importmap: args.importmap, + }); + + console.log(`[OpenMRS] Running build process ...`); + + const compiler = webpack({ + ...config, + output: { + ...config.output, + path: args.target, + }, + }); + + compiler.run((err, stats) => { + if (err) { + console.error(err); + } else { + console.log( + stats.toString({ + colors: true, + }) + ); + + console.log(`[OpenMRS] Build finished.`); + } + }); +} diff --git a/packages/run-openmrs/src/commands/debug.ts b/packages/run-openmrs/src/commands/debug.ts new file mode 100644 index 000000000..049ba8edc --- /dev/null +++ b/packages/run-openmrs/src/commands/debug.ts @@ -0,0 +1,38 @@ +import { ImportmapDeclaration, loadConfig } from "../utils"; + +/* eslint-disable no-console */ + +export interface DebugArgs { + port: number; + backend: string; + importmap: ImportmapDeclaration; +} + +export function runDebug(args: DebugArgs) { + const webpack = require("webpack"); + const WebpackDevServer = require("webpack-dev-server"); + + const config = loadConfig({ + importmap: args.importmap, + backend: args.backend, + }); + + console.log(`[OpenMRS] Starting the dev server ...`); + + const options = { + ...config.devServer, + publicPath: config.output.publicPath, + stats: { colors: true }, + }; + + const server = new WebpackDevServer(webpack(config), options); + const port = args.port; + + server.listen(port, "localhost", function (err) { + if (err) { + console.warn(`[OpenMRS] Error: ${err}`); + } + + console.log(`[OpenMRS] Listening at http://localhost:${port}`); + }); +} diff --git a/packages/run-openmrs/src/commands/index.ts b/packages/run-openmrs/src/commands/index.ts new file mode 100644 index 000000000..eb8ff8a37 --- /dev/null +++ b/packages/run-openmrs/src/commands/index.ts @@ -0,0 +1,2 @@ +export * from "./debug"; +export * from "./build"; diff --git a/packages/run-openmrs/src/index.ts b/packages/run-openmrs/src/index.ts new file mode 100644 index 000000000..3630ed15e --- /dev/null +++ b/packages/run-openmrs/src/index.ts @@ -0,0 +1,3 @@ +import * as commands from "./commands"; + +export { commands }; diff --git a/packages/run-openmrs/src/runner.ts b/packages/run-openmrs/src/runner.ts new file mode 100644 index 000000000..9e472bf8f --- /dev/null +++ b/packages/run-openmrs/src/runner.ts @@ -0,0 +1,9 @@ +import * as commands from "./commands"; + +process.on("message", ({ type, args }) => { + const command = commands[type]; + + if (typeof command === "function") { + command(args); + } +}); diff --git a/packages/run-openmrs/src/utils/index.ts b/packages/run-openmrs/src/utils/index.ts new file mode 100644 index 000000000..4e8a69a37 --- /dev/null +++ b/packages/run-openmrs/src/utils/index.ts @@ -0,0 +1,82 @@ +import { resolve } from "path"; +import { existsSync, readFileSync } from "fs"; + +export interface WebpackOptions { + backend?: string; + importmap?: ImportmapDeclaration; +} + +export interface ImportmapDeclaration { + type: "inline" | "url"; + value: string; +} + +export function setEnvVariables(envVariables: Record) { + Object.keys(envVariables).forEach((key) => { + process.env[key] = envVariables[key]; + }); +} + +export function loadConfig(options: WebpackOptions = {}) { + const variables: Record = {}; + + if (typeof options.backend === "string") { + variables.OMRS_PROXY_TARGET = options.backend; + } + + if (typeof options.importmap === "object") { + switch (options.importmap.type) { + case "inline": + variables.OMRS_ESM_IMPORTMAP = options.importmap.value; + break; + case "url": + variables.OMRS_ESM_IMPORTMAP_URL = options.importmap.value; + break; + } + } + + setEnvVariables(variables); + + return require("@openmrs/esm-app-shell/webpack.config.js"); +} + +export function checkImportmapJson(value: string) { + try { + const content = JSON.parse(value); + return typeof content === "object" && typeof content.imports === "object"; + } catch { + return false; + } +} + +export function getImportmap(value: string): ImportmapDeclaration { + if (!/https?:\/\//.test(value)) { + const path = resolve(process.cwd(), value); + + if (existsSync(path)) { + const content = readFileSync(path, "utf8"); + const valid = checkImportmapJson(content); + + if (!valid) { + console.warn( + `The importmap provided in "${value}" does not seem right. Skipping.` + ); + } + + return { + type: "inline", + value: valid ? content : "", + }; + } else if (checkImportmapJson(value)) { + return { + type: "inline", + value, + }; + } + } + + return { + type: "url", + value, + }; +} diff --git a/packages/run-openmrs/tsconfig.json b/packages/run-openmrs/tsconfig.json new file mode 100644 index 000000000..70b3dc02c --- /dev/null +++ b/packages/run-openmrs/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "module": "CommonJS", + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "jsx": "react", + "strictNullChecks": true, + "moduleResolution": "node", + "outDir": "dist", + "lib": ["es5", "es2015", "es2015.promise", "es2016.array.include", "es2018"] + }, + "include": ["src/**/*"] +} diff --git a/yarn.lock b/yarn.lock index 725fb1435..c0fccbe80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@babel/code-frame@7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" @@ -264,7 +271,7 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/highlight@^7.10.4": +"@babel/highlight@^7.0.0", "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== @@ -287,7 +294,7 @@ "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.10.4": +"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.7.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== @@ -343,7 +350,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.11.0": +"@babel/plugin-proposal-object-rest-spread@^7.11.0", "@babel/plugin-proposal-object-rest-spread@^7.6.2": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== @@ -406,7 +413,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7.8.0": +"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -681,6 +688,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-react-constant-elements@^7.2.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.10.4.tgz#0f485260bf1c29012bb973e7e404749eaac12c9e" + integrity sha512-cYmQBW1pXrqBte1raMkAulXmi7rjg3VI6ZLg9QIic8Hq7BtYXaWuZSxsr2siOMI6SWwpxjWfnwhTUrd7JlAV7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz#b5795f4e3e3140419c3611b7a2a3832b9aef328d" @@ -807,7 +821,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/preset-env@^7.11.0": +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.4.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA== @@ -921,7 +935,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== @@ -974,6 +988,108 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9": + version "10.0.29" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" + integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== + dependencies: + "@emotion/sheet" "0.9.4" + "@emotion/stylis" "0.8.5" + "@emotion/utils" "0.11.3" + "@emotion/weak-memoize" "0.2.5" + +"@emotion/core@^10.0.20", "@emotion/core@^10.0.9": + version "10.0.35" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.35.tgz#513fcf2e22cd4dfe9d3894ed138c9d7a859af9b3" + integrity sha512-sH++vJCdk025fBlRZSAhkRlSUoqSqgCzYf5fMOmqqi3bM6how+sQpg3hkgJonj8GxXM4WbD7dRO+4tegDB9fUw== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/cache" "^10.0.27" + "@emotion/css" "^10.0.27" + "@emotion/serialize" "^0.11.15" + "@emotion/sheet" "0.9.4" + "@emotion/utils" "0.11.3" + +"@emotion/css@^10.0.27", "@emotion/css@^10.0.9": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" + integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== + dependencies: + "@emotion/serialize" "^0.11.15" + "@emotion/utils" "0.11.3" + babel-plugin-emotion "^10.0.27" + +"@emotion/hash@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + +"@emotion/is-prop-valid@0.8.8": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== + dependencies: + "@emotion/memoize" "0.7.4" + +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + +"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": + version "0.11.16" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" + integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg== + dependencies: + "@emotion/hash" "0.8.0" + "@emotion/memoize" "0.7.4" + "@emotion/unitless" "0.7.5" + "@emotion/utils" "0.11.3" + csstype "^2.5.7" + +"@emotion/sheet@0.9.4": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" + integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== + +"@emotion/styled-base@^10.0.27": + version "10.0.31" + resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a" + integrity sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/is-prop-valid" "0.8.8" + "@emotion/serialize" "^0.11.15" + "@emotion/utils" "0.11.3" + +"@emotion/styled@^10.0.17": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf" + integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q== + dependencies: + "@emotion/styled-base" "^10.0.27" + babel-plugin-emotion "^10.0.27" + +"@emotion/stylis@0.8.5": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + +"@emotion/utils@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" + integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== + +"@emotion/weak-memoize@0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== + "@eslint/eslintrc@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" @@ -1064,6 +1180,11 @@ unique-filename "^1.1.1" which "^1.3.1" +"@icons/material@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" + integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1954,11 +2075,39 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.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" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@npmcli/move-file@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" + integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== + dependencies: + mkdirp "^1.0.4" + "@octokit/auth-token@^2.4.0": version "2.4.2" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a" @@ -2068,6 +2217,24 @@ dependencies: "@types/node" ">= 8" +"@pickra/copy-code-block@^1.1.7": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@pickra/copy-code-block/-/copy-code-block-1.2.0.tgz#08b9d01d92dd5f4950e013b43e0730abb3add3db" + integrity sha512-Rj33IqGAyXHdXz8RDBR+7wUUkoIl/h8Csyj7TRwmxPdYTzLvJDV87dhjCNY7JOYqWuyIoPBEcdDW2sQvcXayVg== + dependencies: + csjs "^1.1.0" + insert-css "^2.0.0" + +"@reach/router@^1.2.1": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c" + integrity sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA== + dependencies: + create-react-context "0.3.0" + invariant "^2.2.3" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" @@ -2082,6 +2249,358 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@storybook/addon-a11y@^5.2.1": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-5.3.21.tgz#29ab480c2b1e647da15f571448824a7f29ccfb50" + integrity sha512-pJdxyYRtEJdMjbZAurSi8RGJe7KE6w14thpDJmBfnn6Z1FKB8vprOfxJypVqcs9tY58UODqtU3ndOqnOG7d8tA== + dependencies: + "@storybook/addons" "5.3.21" + "@storybook/api" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/components" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/theming" "5.3.21" + axe-core "^3.3.2" + core-js "^3.0.1" + global "^4.3.2" + memoizerific "^1.11.3" + react "^16.8.3" + react-redux "^7.0.2" + react-sizeme "^2.5.2" + redux "^4.0.1" + ts-dedent "^1.1.0" + util-deprecate "^1.0.2" + +"@storybook/addon-knobs@^5.2.1": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.3.21.tgz#dd721700e5eab2969b3854dc73c855a03fb7aba8" + integrity sha512-w1g61n2j87i3bzBltNl64u2hH06xQHKitfWWKBfRCiy1plC1hjZQ31GiUrA7uLUrD4NUx3GNO9dw0cDTnIIHRw== + dependencies: + "@storybook/addons" "5.3.21" + "@storybook/api" "5.3.21" + "@storybook/client-api" "5.3.21" + "@storybook/components" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/theming" "5.3.21" + "@types/react-color" "^3.0.1" + copy-to-clipboard "^3.0.8" + core-js "^3.0.1" + escape-html "^1.0.3" + fast-deep-equal "^2.0.1" + global "^4.3.2" + lodash "^4.17.15" + prop-types "^15.7.2" + qs "^6.6.0" + react-color "^2.17.0" + react-lifecycles-compat "^3.0.4" + react-select "^3.0.8" + +"@storybook/addons@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.3.21.tgz#ee312c738c33e8c34dc11777ef93522c3c36e56a" + integrity sha512-Ji/21WADTLVbTbiKcZ64BcL0Es+h1Afxx3kNmGJqPSTUYroCwIFCT9mUzCqU6G+YyWaISAmTii5UJkTwMkChwA== + dependencies: + "@storybook/api" "5.3.21" + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/core-events" "5.3.21" + core-js "^3.0.1" + global "^4.3.2" + util-deprecate "^1.0.2" + +"@storybook/api@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.21.tgz#8f1772de53b65e1a65d2f0257463d621a8617c58" + integrity sha512-K1o4an/Rx8daKRDooks6qzN6ZGyqizeacZZbair3F8CsSfTgrr2zCcf9pgKojLQa9koEmMHlcdb2KnS+GwPEgA== + dependencies: + "@reach/router" "^1.2.1" + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/csf" "0.0.1" + "@storybook/router" "5.3.21" + "@storybook/theming" "5.3.21" + "@types/reach__router" "^1.2.3" + core-js "^3.0.1" + fast-deep-equal "^2.0.1" + global "^4.3.2" + lodash "^4.17.15" + memoizerific "^1.11.3" + prop-types "^15.6.2" + react "^16.8.3" + semver "^6.0.0" + shallow-equal "^1.1.0" + store2 "^2.7.1" + telejson "^3.2.0" + util-deprecate "^1.0.2" + +"@storybook/channel-postmessage@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.21.tgz#9c08bf1c108ff973dbca18e582680d25178db1d4" + integrity sha512-CfoP7aEbZtJ35R9zeujMRdIwprETUi+Ve+y84DhXYQ2uJ0rR3vO4zHLZnxMMyJ5VnYOfuO042uch07+EKBz40Q== + dependencies: + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + core-js "^3.0.1" + global "^4.3.2" + telejson "^3.2.0" + +"@storybook/channels@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.21.tgz#53ba622b171d68b3b102983a62aa05149a49497b" + integrity sha512-OXoFs9XtBVg/cCk6lYMrxkzaNlJRf54ABdorp7YAAj7S9tRL1JxOZHxmjNQwEoiRvssmem2rAWtEAxfuEANsAA== + dependencies: + core-js "^3.0.1" + +"@storybook/client-api@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.21.tgz#5b218a28f24219c32ab4b92a6af2a3e452fb8089" + integrity sha512-vS4DfA2Avvl7JNQymO4e3RUNoTWIGVfZJ70Irnd6PTAZNojbCXTYuigDavrmyf83F3g5rQpwmSAPjuoi/X/FRA== + dependencies: + "@storybook/addons" "5.3.21" + "@storybook/channel-postmessage" "5.3.21" + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/csf" "0.0.1" + "@types/webpack-env" "^1.15.0" + core-js "^3.0.1" + eventemitter3 "^4.0.0" + global "^4.3.2" + is-plain-object "^3.0.0" + lodash "^4.17.15" + memoizerific "^1.11.3" + qs "^6.6.0" + stable "^0.1.8" + ts-dedent "^1.1.0" + util-deprecate "^1.0.2" + +"@storybook/client-logger@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.21.tgz#912c83b0d358e70acad1ad4abe199de4c38b109f" + integrity sha512-OzQkwpZ5SK9cXD9Mv6lxPGPot+hSZvnkEW12kpt1AHfJz4ET26YTDOI3oetPsjfRJo6qYLeQX8+wF7rklfXbzA== + dependencies: + core-js "^3.0.1" + +"@storybook/components@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.21.tgz#17ee371a2455c6e807c3d3135a9266e63ad7651a" + integrity sha512-42QQk6qZl6wrtajP8yNCfmNS2t8Iod5QY+4V/l6iNnnT9O+j6cWOlnO+ZyvjNv0Xm0zIOt+VyVjdkKh8FUjQmA== + dependencies: + "@storybook/client-logger" "5.3.21" + "@storybook/theming" "5.3.21" + "@types/react-syntax-highlighter" "11.0.4" + "@types/react-textarea-autosize" "^4.3.3" + core-js "^3.0.1" + global "^4.3.2" + lodash "^4.17.15" + markdown-to-jsx "^6.11.4" + memoizerific "^1.11.3" + polished "^3.3.1" + popper.js "^1.14.7" + prop-types "^15.7.2" + react "^16.8.3" + react-dom "^16.8.3" + react-focus-lock "^2.1.0" + react-helmet-async "^1.0.2" + react-popper-tooltip "^2.8.3" + react-syntax-highlighter "^11.0.2" + react-textarea-autosize "^7.1.0" + simplebar-react "^1.0.0-alpha.6" + ts-dedent "^1.1.0" + +"@storybook/core-events@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.21.tgz#41d81c3f107302a032545fc86ff344230c04b9e9" + integrity sha512-/Zsm1sKAh6pzQv8jQUmuhM7nuM01ZljIRKy8p2HjPNlMjDB5yaRkBfyeAUXUg+qXNI6aHVWa4jGdPEdwwY4oLA== + dependencies: + core-js "^3.0.1" + +"@storybook/core@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.3.21.tgz#da963166ea24601f318266a3aa6bbc06fc8fb175" + integrity sha512-plD47WIsn/JoyRJDOpmH7N7mEMo/jiA8ZlOitLW55zYvzUn8UrVpRFpMYo91OJxiCT6JFoaEh3XtNdhbgUwnPA== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.7.0" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-transform-react-constant-elements" "^7.2.0" + "@babel/preset-env" "^7.4.5" + "@storybook/addons" "5.3.21" + "@storybook/channel-postmessage" "5.3.21" + "@storybook/client-api" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/csf" "0.0.1" + "@storybook/node-logger" "5.3.21" + "@storybook/router" "5.3.21" + "@storybook/theming" "5.3.21" + "@storybook/ui" "5.3.21" + airbnb-js-shims "^2.2.1" + ansi-to-html "^0.6.11" + autoprefixer "^9.7.2" + babel-plugin-add-react-displayname "^0.0.5" + babel-plugin-emotion "^10.0.20" + babel-plugin-macros "^2.7.0" + babel-preset-minify "^0.5.0 || 0.6.0-alpha.5" + boxen "^4.1.0" + case-sensitive-paths-webpack-plugin "^2.2.0" + chalk "^3.0.0" + cli-table3 "0.5.1" + commander "^4.0.1" + core-js "^3.0.1" + corejs-upgrade-webpack-plugin "^2.2.0" + css-loader "^3.0.0" + detect-port "^1.3.0" + dotenv-webpack "^1.7.0" + ejs "^2.7.4" + express "^4.17.0" + file-loader "^4.2.0" + file-system-cache "^1.0.5" + find-cache-dir "^3.0.0" + find-up "^4.1.0" + fs-extra "^8.0.1" + glob-base "^0.3.0" + global "^4.3.2" + html-webpack-plugin "^4.0.0-beta.2" + inquirer "^7.0.0" + interpret "^2.0.0" + ip "^1.1.5" + json5 "^2.1.1" + lazy-universal-dotenv "^3.0.1" + micromatch "^4.0.2" + node-fetch "^2.6.0" + open "^7.0.0" + pnp-webpack-plugin "1.5.0" + postcss-flexbugs-fixes "^4.1.0" + postcss-loader "^3.0.0" + pretty-hrtime "^1.0.3" + qs "^6.6.0" + raw-loader "^3.1.0" + react-dev-utils "^9.0.0" + regenerator-runtime "^0.13.3" + resolve "^1.11.0" + resolve-from "^5.0.0" + semver "^6.0.0" + serve-favicon "^2.5.0" + shelljs "^0.8.3" + style-loader "^1.0.0" + terser-webpack-plugin "^2.1.2" + ts-dedent "^1.1.0" + unfetch "^4.1.0" + url-loader "^2.0.1" + util-deprecate "^1.0.2" + webpack "^4.33.0" + webpack-dev-middleware "^3.7.0" + webpack-hot-middleware "^2.25.0" + webpack-virtual-modules "^0.2.0" + +"@storybook/csf@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.0.1.tgz#95901507dc02f0bc6f9ac8ee1983e2fc5bb98ce6" + integrity sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw== + dependencies: + lodash "^4.17.15" + +"@storybook/html@^5.2.1": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/html/-/html-5.3.21.tgz#617416b6a34f28efe4f03e457d5a16f9c3c6bbc6" + integrity sha512-RzwbzIO50bPv1J4m7xTdbE8b6+WfTTzbyUwFuZZ3u1m1wvVuhexZgL8gwzC+TgqiSyF9M0t1UyfrFc0a42LIOA== + dependencies: + "@storybook/addons" "5.3.21" + "@storybook/core" "5.3.21" + "@types/webpack-env" "^1.15.0" + core-js "^3.0.1" + global "^4.3.2" + html-loader "^0.5.5" + regenerator-runtime "^0.13.3" + ts-dedent "^1.1.0" + +"@storybook/node-logger@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.3.21.tgz#f11d45042bd57dc69e9037d8f374d9fd0aad8071" + integrity sha512-8xibncy873JXePCK5MC0qem1MKtWI1Lc4hv6rwURSwYpZtkO7yElay3XAFGUSfz8qFJkoDBmMTxBR3fp4Dln7g== + dependencies: + "@types/npmlog" "^4.1.2" + chalk "^3.0.0" + core-js "^3.0.1" + npmlog "^4.1.2" + pretty-hrtime "^1.0.3" + regenerator-runtime "^0.13.3" + +"@storybook/router@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.3.21.tgz#32b08e5daa90a6ffa024bb670b874525a712a901" + integrity sha512-c29m5UikK5Q1lyd6FltOGFhIcpd6PIb855YS3OUNe3F6ZA1tfJ+aNKrCBc65d1c+fvCGG76dYYYv0RvwEmKXXg== + dependencies: + "@reach/router" "^1.2.1" + "@storybook/csf" "0.0.1" + "@types/reach__router" "^1.2.3" + core-js "^3.0.1" + global "^4.3.2" + lodash "^4.17.15" + memoizerific "^1.11.3" + qs "^6.6.0" + util-deprecate "^1.0.2" + +"@storybook/theming@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.3.21.tgz#ae2dc101aa57c3be4df1724ae729e11bad118e0b" + integrity sha512-FZbxjizqdO9lV5LUixPio/7+6UdPiswCzTJn8Hcot9uwwgfnrViRdN7xyjmSYRqv9nHP3OlYbtdeCAgZ4aPq8g== + dependencies: + "@emotion/core" "^10.0.20" + "@emotion/styled" "^10.0.17" + "@storybook/client-logger" "5.3.21" + core-js "^3.0.1" + deep-object-diff "^1.1.0" + emotion-theming "^10.0.19" + global "^4.3.2" + memoizerific "^1.11.3" + polished "^3.3.1" + prop-types "^15.7.2" + resolve-from "^5.0.0" + ts-dedent "^1.1.0" + +"@storybook/ui@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.3.21.tgz#b42568e03353b47aaab1b6449311f38858585f81" + integrity sha512-OUf8JYY9LN+XfzLSZE6KtboITGDL6C8Z0W9QOXM5LJwFLv4PkANK/f9qsB5vVHFm7vhoO96butFzs6SjTKhxkw== + dependencies: + "@emotion/core" "^10.0.20" + "@storybook/addons" "5.3.21" + "@storybook/api" "5.3.21" + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/components" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/router" "5.3.21" + "@storybook/theming" "5.3.21" + copy-to-clipboard "^3.0.8" + core-js "^3.0.1" + core-js-pure "^3.0.1" + emotion-theming "^10.0.19" + fast-deep-equal "^2.0.1" + fuse.js "^3.4.6" + global "^4.3.2" + lodash "^4.17.15" + markdown-to-jsx "^6.11.4" + memoizerific "^1.11.3" + polished "^3.3.1" + prop-types "^15.7.2" + qs "^6.6.0" + react "^16.8.3" + react-dom "^16.8.3" + react-draggable "^4.0.3" + react-helmet-async "^1.0.2" + react-hotkeys "2.0.0" + react-sizeme "^2.6.7" + regenerator-runtime "^0.13.2" + resolve-from "^5.0.0" + semver "^6.0.0" + store2 "^2.7.1" + telejson "^3.2.0" + util-deprecate "^1.0.2" + "@testing-library/dom@^7.20.0", "@testing-library/dom@^7.22.3": version "7.24.1" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.24.1.tgz#0e8acd042070f2c1b183fbfe5c0d38b3194ad3c0" @@ -2172,6 +2691,16 @@ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/fhir@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/fhir/-/fhir-0.0.30.tgz#a0aec3b2d7dd2a7584474dac446ede5f9a4d7a13" + integrity sha512-vDU62tUFeAYBVQThiWAfGd6D25TiLLDDS5pV19vim52FLpwWTBliLMvotbF4D/U+BmjxBKIuHGZgFnoh/HtV5g== + +"@types/fhir@0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@types/fhir/-/fhir-0.0.31.tgz#067392154124125dccc97e51a4297d448467c211" + integrity sha512-YF6+X+hMYLvNGB5r8LxGKPMrSqqFkyLefTQZ/8bAnr0XW8Xc2Mgf8OJ06+cj1b5ftJoeLblHpIYgKdhXdFAzrw== + "@types/glob@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" @@ -2187,6 +2716,21 @@ dependencies: "@types/node" "*" +"@types/history@*": + version "4.7.8" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" + integrity sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA== + +"@types/html-minifier-terser@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880" + integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA== + +"@types/is-function@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" + integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -2247,6 +2791,11 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/npmlog@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.2.tgz#d070fe6a6b78755d1092a3dc492d34c3d8f871c4" + integrity sha512-4QQmOF5KlwfxJ5IGXFIudkeLCdMABz03RcUXu+LCb24zmln8QW6aDjuGl4d4XPVLf2j+FnjelHTP7dvceAFbhA== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -2262,6 +2811,11 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + "@types/ramda@^0.26.44": version "0.26.44" resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.26.44.tgz#70bb06f5ae60809dc83a3d804505ee3123443738" @@ -2269,7 +2823,37 @@ dependencies: ts-toolbelt "^6.3.3" -"@types/react@^16.9.30", "@types/react@^16.9.46": +"@types/reach__router@^1.2.3": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.5.tgz#14e1e981cccd3a5e50dc9e969a72de0b9d472f6d" + integrity sha512-h0NbqXN/tJuBY/xggZSej1SKQEstbHO7J/omt1tYoFGmj3YXOodZKbbqD4mNDh7zvEGYd7YFrac1LTtAr3xsYQ== + dependencies: + "@types/history" "*" + "@types/react" "*" + +"@types/react-color@^3.0.1": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-3.0.4.tgz#c63daf012ad067ac0127bdd86725f079d02082bd" + integrity sha512-EswbYJDF1kkrx93/YU+BbBtb46CCtDMvTiGmcOa/c5PETnwTiSWoseJ1oSWeRl/4rUXkhME9bVURvvPg0W5YQw== + dependencies: + "@types/react" "*" + "@types/reactcss" "*" + +"@types/react-syntax-highlighter@11.0.4": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.4.tgz#d86d17697db62f98046874f62fdb3e53a0bbc4cd" + integrity sha512-9GfTo3a0PHwQeTVoqs0g5bS28KkSY48pp5659wA+Dp4MqceDEa8EHBqrllJvvtyusszyJhViUEap0FDvlk/9Zg== + dependencies: + "@types/react" "*" + +"@types/react-textarea-autosize@^4.3.3": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@types/react-textarea-autosize/-/react-textarea-autosize-4.3.5.tgz#6c4d2753fa1864c98c0b2b517f67bb1f6e4c46de" + integrity sha512-PiDL83kPMTolyZAWW3lyzO6ktooTb9tFTntVy7CA83/qFLWKLJ5bLeRboy6J6j3b1e8h2Eec6gBTEOOJRjV14A== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^16.9.46": version "16.9.49" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872" integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g== @@ -2277,6 +2861,13 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/reactcss@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/reactcss/-/reactcss-1.2.3.tgz#af28ae11bbb277978b99d04d1eedfd068ca71834" + integrity sha512-d2gQQ0IL6hXLnoRfVYZukQNWHuVsE75DzFTLPUuyyEhJS8G2VvlE+qfQQ91SJjaMqlURRCNIsX7Jcsw6cEuJlA== + dependencies: + "@types/react" "*" + "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -2292,7 +2883,7 @@ resolved "https://registry.yarnpkg.com/@types/systemjs/-/systemjs-6.1.0.tgz#eb92e3181391b6f49b8310077fe65bfa3db9392a" integrity sha512-akhlviqwowzRNiz3ooAbkjvyMO8cikBqap9z/0yfvMAb6vIsp91Rfox67qtgIhZosWP01MVSTwsgSFYWo4SWQA== -"@types/tapable@*": +"@types/tapable@*", "@types/tapable@^1.0.5": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== @@ -2311,6 +2902,11 @@ dependencies: source-map "^0.6.1" +"@types/webpack-env@^1.15.0": + version "1.15.3" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.3.tgz#fb602cd4c2f0b7c0fb857e922075fdf677d25d84" + integrity sha512-5oiXqR7kwDGZ6+gmzIO2lTC+QsriNuQXZDWNYRV3l2XRN/zmPgnC21DLSx2D05zvD8vnXW6qUg7JnXZ4I6qLVQ== + "@types/webpack-sources@*": version "1.4.2" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-1.4.2.tgz#5d3d4dea04008a779a90135ff96fb5c0c9e6292c" @@ -2320,7 +2916,7 @@ "@types/source-list-map" "*" source-map "^0.7.3" -"@types/webpack@^4.4.31": +"@types/webpack@^4.4.31", "@types/webpack@^4.41.8": version "4.41.22" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.22.tgz#ff9758a17c6bd499e459b91e78539848c32d0731" integrity sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ== @@ -2508,6 +3104,11 @@ mkdirp-promise "^5.0.1" mz "^2.5.0" +Base64@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.3.0.tgz#6da261a4e80d4fa0f5c684254e5bccd16bbdce9f" + integrity sha1-baJhpOgNT6D1xoQlTlvM0Wu9zp8= + JSONStream@^1.0.4, JSONStream@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -2562,10 +3163,10 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== agent-base@4, agent-base@^4.3.0: version "4.3.0" @@ -2588,6 +3189,37 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +airbnb-js-shims@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz#db481102d682b98ed1daa4c5baa697a05ce5c040" + integrity sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + array.prototype.flatmap "^1.2.1" + es5-shim "^4.5.13" + es6-shim "^0.35.5" + function.prototype.name "^1.1.0" + globalthis "^1.0.0" + object.entries "^1.1.0" + object.fromentries "^2.0.0 || ^1.0.0" + object.getownpropertydescriptors "^2.0.3" + object.values "^1.1.0" + promise.allsettled "^1.0.0" + promise.prototype.finally "^3.1.0" + string.prototype.matchall "^4.0.0 || ^3.0.1" + string.prototype.padend "^3.0.0" + string.prototype.padstart "^3.0.0" + symbol.prototype.description "^1.0.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -2608,6 +3240,18 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -2675,6 +3319,13 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-to-html@^0.6.11: + version "0.6.14" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.14.tgz#65fe6d08bba5dd9db33f44a20aec331e0010dad8" + integrity sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA== + dependencies: + entities "^1.1.2" + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -2696,6 +3347,11 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +app-root-dir@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" + integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -2774,7 +3430,7 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= -array-includes@^3.1.1: +array-includes@^3.0.3, array-includes@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== @@ -2805,10 +3461,32 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +array.prototype.flatmap@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" + integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + +array.prototype.map@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec" + integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.4" arrify@^1.0.1: version "1.0.1" @@ -2865,16 +3543,16 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= +ast-types@0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" + integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-each-series@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/async-each-series/-/async-each-series-0.1.1.tgz#7617c1917401fd8ca4a28aadce3dbae98afeb432" - integrity sha1-dhfBkXQB/Yykooqtzj266Yr+tDI= - async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -2885,11 +3563,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -2917,6 +3590,19 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autoprefixer@^9.6.1, autoprefixer@^9.7.2: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2927,24 +3613,25 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== -axe-core@^3.5.4: +axe-core@^3.3.2, axe-core@^3.5.4: version "3.5.5" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== -axios@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" - integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== - dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" - axobject-query@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== +babel-code-frame@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + babel-eslint@^11.0.0-beta.2: version "11.0.0-beta.2" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-11.0.0-beta.2.tgz#de1f06795aa0d8cedcf6ac943e63056f5b4a7048" @@ -2954,6 +3641,41 @@ babel-eslint@^11.0.0-beta.2: eslint-visitor-keys "^1.1.0" semver "^6.3.0" +babel-helper-evaluate-path@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" + integrity sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA== + +babel-helper-flip-expressions@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz#3696736a128ac18bc25254b5f40a22ceb3c1d3fd" + integrity sha1-NpZzahKKwYvCUlS19AoizrPB0/0= + +babel-helper-is-nodes-equiv@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" + integrity sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ= + +babel-helper-is-void-0@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz#7d9c01b4561e7b95dbda0f6eee48f5b60e67313e" + integrity sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4= + +babel-helper-mark-eval-scopes@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" + integrity sha1-0kSjvvmESHJgP/tG4izorN9VFWI= + +babel-helper-remove-or-void@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" + integrity sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA= + +babel-helper-to-multiple-sequence-expressions@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" + integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA== + babel-jest@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.3.0.tgz#10d0ca4b529ca3e7d1417855ef7d7bd6fc0c3463" @@ -2979,6 +3701,11 @@ babel-loader@^8.1.0: pify "^4.0.1" schema-utils "^2.6.5" +babel-plugin-add-react-displayname@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" + integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U= + babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -2986,6 +3713,22 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" +babel-plugin-emotion@^10.0.20, babel-plugin-emotion@^10.0.27: + version "10.0.33" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03" + integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@emotion/hash" "0.8.0" + "@emotion/memoize" "0.7.4" + "@emotion/serialize" "^0.11.16" + babel-plugin-macros "^2.0.0" + babel-plugin-syntax-jsx "^6.18.0" + convert-source-map "^1.5.0" + escape-string-regexp "^1.0.5" + find-root "^1.1.0" + source-map "^0.5.7" + babel-plugin-istanbul@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" @@ -3007,6 +3750,91 @@ babel-plugin-jest-hoist@^26.2.0: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" +babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-minify-builtins@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz#31eb82ed1a0d0efdc31312f93b6e4741ce82c36b" + integrity sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag== + +babel-plugin-minify-constant-folding@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz#f84bc8dbf6a561e5e350ff95ae216b0ad5515b6e" + integrity sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-minify-dead-code-elimination@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz#1a0c68e44be30de4976ca69ffc535e08be13683f" + integrity sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-mark-eval-scopes "^0.4.3" + babel-helper-remove-or-void "^0.4.3" + lodash "^4.17.11" + +babel-plugin-minify-flip-comparisons@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz#00ca870cb8f13b45c038b3c1ebc0f227293c965a" + integrity sha1-AMqHDLjxO0XAOLPB68DyJyk8llo= + dependencies: + babel-helper-is-void-0 "^0.4.3" + +babel-plugin-minify-guarded-expressions@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz#818960f64cc08aee9d6c75bec6da974c4d621135" + integrity sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-flip-expressions "^0.4.3" + +babel-plugin-minify-infinity@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz#dfb876a1b08a06576384ef3f92e653ba607b39ca" + integrity sha1-37h2obCKBldjhO8/kuZTumB7Oco= + +babel-plugin-minify-mangle-names@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz#bcddb507c91d2c99e138bd6b17a19c3c271e3fd3" + integrity sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw== + dependencies: + babel-helper-mark-eval-scopes "^0.4.3" + +babel-plugin-minify-numeric-literals@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz#8e4fd561c79f7801286ff60e8c5fd9deee93c0bc" + integrity sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw= + +babel-plugin-minify-replace@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz#d3e2c9946c9096c070efc96761ce288ec5c3f71c" + integrity sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q== + +babel-plugin-minify-simplify@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz#f21613c8b95af3450a2ca71502fdbd91793c8d6a" + integrity sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-flip-expressions "^0.4.3" + babel-helper-is-nodes-equiv "^0.0.1" + babel-helper-to-multiple-sequence-expressions "^0.5.0" + +babel-plugin-minify-type-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz#1bc6f15b87f7ab1085d42b330b717657a2156500" + integrity sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA= + dependencies: + babel-helper-is-void-0 "^0.4.3" + babel-plugin-ramda@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-ramda/-/babel-plugin-ramda-2.0.0.tgz#e6708b1637dbb754e0cc0d21cd1c34750b0158c8" @@ -3015,6 +3843,70 @@ babel-plugin-ramda@^2.0.0: "@babel/helper-module-imports" "^7.0.0" ramda "^0.25.0" +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + +babel-plugin-transform-inline-consecutive-adds@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" + integrity sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE= + +babel-plugin-transform-member-expression-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf" + integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8= + +babel-plugin-transform-merge-sibling-variables@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae" + integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4= + +babel-plugin-transform-minify-booleans@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198" + integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg= + +babel-plugin-transform-property-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39" + integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk= + dependencies: + esutils "^2.0.2" + +babel-plugin-transform-regexp-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz#58b7775b63afcf33328fae9a5f88fbd4fb0b4965" + integrity sha1-WLd3W2OvzzMyj66aX4j71PsLSWU= + +babel-plugin-transform-remove-console@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" + integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A= + +babel-plugin-transform-remove-debugger@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2" + integrity sha1-QrcnYxyXl44estGZp67IShgznvI= + +babel-plugin-transform-remove-undefined@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz#80208b31225766c630c97fa2d288952056ea22dd" + integrity sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-transform-simplify-comparison-operators@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9" + integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk= + +babel-plugin-transform-undefined-to-void@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" + integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= + babel-preset-current-node-syntax@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" @@ -3040,31 +3932,45 @@ babel-preset-jest@^26.3.0: babel-plugin-jest-hoist "^26.2.0" babel-preset-current-node-syntax "^0.1.3" -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= +"babel-preset-minify@^0.5.0 || 0.6.0-alpha.5": + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz#25f5d0bce36ec818be80338d0e594106e21eaa9f" + integrity sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg== + dependencies: + babel-plugin-minify-builtins "^0.5.0" + babel-plugin-minify-constant-folding "^0.5.0" + babel-plugin-minify-dead-code-elimination "^0.5.1" + babel-plugin-minify-flip-comparisons "^0.4.3" + babel-plugin-minify-guarded-expressions "^0.4.4" + babel-plugin-minify-infinity "^0.4.3" + babel-plugin-minify-mangle-names "^0.5.0" + babel-plugin-minify-numeric-literals "^0.4.3" + babel-plugin-minify-replace "^0.5.0" + babel-plugin-minify-simplify "^0.5.1" + babel-plugin-minify-type-constructors "^0.4.3" + babel-plugin-transform-inline-consecutive-adds "^0.4.3" + babel-plugin-transform-member-expression-literals "^6.9.4" + babel-plugin-transform-merge-sibling-variables "^6.9.4" + babel-plugin-transform-minify-booleans "^6.9.4" + babel-plugin-transform-property-literals "^6.9.4" + babel-plugin-transform-regexp-constructors "^0.4.3" + babel-plugin-transform-remove-console "^6.9.4" + babel-plugin-transform-remove-debugger "^6.9.4" + babel-plugin-transform-remove-undefined "^0.5.0" + babel-plugin-transform-simplify-comparison-operators "^6.9.4" + babel-plugin-transform-undefined-to-void "^6.9.4" + lodash "^4.17.11" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= - base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= - base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -3078,6 +3984,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +batch-processor@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" + integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -3095,13 +4006,6 @@ before-after-hook@^2.0.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= - dependencies: - callsite "1.0.0" - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3124,12 +4028,7 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: +bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -3172,6 +4071,25 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +boxen@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3213,64 +4131,6 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-sync-client@^2.26.12: - version "2.26.12" - resolved "https://registry.yarnpkg.com/browser-sync-client/-/browser-sync-client-2.26.12.tgz#b6c81335c6a9f1a79bca1951438800d3e7f170c8" - integrity sha512-bEBDRkufKxrIfjOsIB1FN9itUEXr2oLtz1AySgSSr80K2AWzmtoYnxtVASx/i40qFrSdeI31pNvdCjHivihLVA== - dependencies: - etag "1.8.1" - fresh "0.5.2" - mitt "^1.1.3" - rxjs "^5.5.6" - -browser-sync-ui@^2.26.12: - version "2.26.12" - resolved "https://registry.yarnpkg.com/browser-sync-ui/-/browser-sync-ui-2.26.12.tgz#6a309644d3ae0fe743906558a94caf6fd118719f" - integrity sha512-PkAJNf/TfCFTCkQUfXplR2Kp/+/lbCWFO9lrgLZsmxIhvMLx2pYZFBbTBIaem8qjXhld9ZcESUC8EdU5VWFJgQ== - dependencies: - async-each-series "0.1.1" - connect-history-api-fallback "^1" - immutable "^3" - server-destroy "1.0.1" - socket.io-client "^2.0.4" - stream-throttle "^0.1.3" - -browser-sync@^2.26.7: - version "2.26.12" - resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.26.12.tgz#2724df702ef8880e711c1bf62afd7c93a3a80462" - integrity sha512-1GjAe+EpZQJgtKhWsxklEjpaMV0DrRylpHRvZWgOphDQt+bfLZjfynl/j1WjSFIx8ozj9j78g6Yk4TqD3gKaMA== - dependencies: - browser-sync-client "^2.26.12" - browser-sync-ui "^2.26.12" - bs-recipes "1.3.4" - bs-snippet-injector "^2.0.1" - chokidar "^3.4.1" - connect "3.6.6" - connect-history-api-fallback "^1" - dev-ip "^1.0.1" - easy-extender "^2.3.4" - eazy-logger "^3" - etag "^1.8.1" - fresh "^0.5.2" - fs-extra "3.0.1" - http-proxy "^1.18.1" - immutable "^3" - localtunnel "^2.0.0" - micromatch "^4.0.2" - opn "5.3.0" - portscanner "2.1.1" - qs "6.2.3" - raw-body "^2.3.2" - resp-modifier "6.0.2" - rx "4.1.0" - send "0.16.2" - serve-index "1.9.1" - serve-static "1.13.2" - server-destroy "1.0.1" - socket.io "2.1.1" - ua-parser-js "^0.7.18" - yargs "^15.4.1" - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -3337,6 +4197,25 @@ browserslist-config-openmrs@^1.0.1: resolved "https://registry.yarnpkg.com/browserslist-config-openmrs/-/browserslist-config-openmrs-1.0.1.tgz#78d49160701166f7d1bd2af14b404c7fae21f913" integrity sha512-8O6y9uEhjkc0tUTx9/73ncZKvU1ceGd6kIBoyLQXo3f4gg/6OvZ8WSEklU+lK6PQjccgwpfcvD6CQHoO+OHwzg== +browserslist@4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" + integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== + dependencies: + caniuse-lite "^1.0.30000989" + electron-to-chromium "^1.3.247" + node-releases "^1.1.29" + +browserslist@^4.0.0: + version "4.14.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.3.tgz#381f9e7f13794b2eb17e1761b4f118e8ae665a53" + integrity sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ== + dependencies: + caniuse-lite "^1.0.30001131" + electron-to-chromium "^1.3.570" + escalade "^3.1.0" + node-releases "^1.1.61" + browserslist@^4.12.0, browserslist@^4.8.5: version "4.14.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" @@ -3347,16 +4226,6 @@ browserslist@^4.12.0, browserslist@^4.8.5: escalade "^3.0.2" node-releases "^1.1.61" -bs-recipes@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/bs-recipes/-/bs-recipes-1.3.4.tgz#0d2d4d48a718c8c044769fdc4f89592dc8b69585" - integrity sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU= - -bs-snippet-injector@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz#61b5393f11f52559ed120693100343b6edb04dd5" - integrity sha1-YbU5PxH1JVntEgaTEANDtu2wTdU= - bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3444,6 +4313,53 @@ cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + +cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3478,11 +4394,6 @@ caller-path@^2.0.0: dependencies: caller-callsite "^2.0.0" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= - callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -3493,6 +4404,22 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camel-case@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" + integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== + dependencies: + pascal-case "^3.1.1" + tslib "^1.10.0" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -3539,6 +4466,26 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== +can-use-dom@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" + integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001131: + version "1.0.30001135" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001135.tgz#995b1eb94404a3c9a0d7600c113c9bb27f2cd8aa" + integrity sha512-ziNcheTGTHlu9g34EVoHQdIu5g4foc8EsxMGC7Xkokmvw0dqNtX8BS8RgCgFBaAiSp2IdjvBxNdh0ssib28eVQ== + caniuse-lite@^1.0.30001125: version "1.0.30001125" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001125.tgz#2a1a51ee045a0a2207474b086f628c34725e997b" @@ -3551,12 +4498,40 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" +carbon-components@^10.19.0: + version "10.20.0" + resolved "https://registry.yarnpkg.com/carbon-components/-/carbon-components-10.20.0.tgz#3a927ad4f566c5dc263d32c257269c74a3ab23cc" + integrity sha512-MysxXg4/DpDt9GJPV3zmxi9X6HyGxr7DyROvVjf4SCyYrBqTeLOoajd3sbPhKxPjDdRIyqEb2roLq5DbbtazLg== + dependencies: + flatpickr "4.6.1" + lodash.debounce "^4.0.8" + warning "^3.0.0" + +carbon-icons@^7.0.7: + version "7.0.7" + resolved "https://registry.yarnpkg.com/carbon-icons/-/carbon-icons-7.0.7.tgz#ebafe3e9fa25df973796a8eca06d8a7c501cc610" + integrity sha512-3vgkdXJRgCViCrH3fLUdyAXo0I8wmohO6QETv7vWFx6yc7s+SirWFBSFL38zUx4MHtR8iTxIlLEzkeU6FlFtXg== + +case-sensitive-paths-webpack-plugin@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^1.1.1: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -3567,15 +4542,6 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" @@ -3597,12 +4563,27 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^2.1.8: +chokidar@^2.0.4, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -3641,6 +4622,11 @@ chownr@^1.1.1, chownr@^1.1.2: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -3671,6 +4657,23 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classnames@^2.2.5: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@4.2.x, clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + clean-webpack-plugin@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b" @@ -3679,6 +4682,11 @@ clean-webpack-plugin@^3.0.0: "@types/webpack" "^4.4.31" del "^4.1.1" +cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -3686,11 +4694,42 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clipboard@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" + integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3709,6 +4748,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.1.tgz#a4cb67aad45cd83d8d05128fc9f4d8fbb887e6b3" + integrity sha512-rcvHOWyGyid6I1WjT/3NatKj2kDt9OdSHSXpyLXaMWFbKpGACNW8pRhhdPUq9MWUOdwn8Rz9AVETjF4105rZZQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -3728,6 +4776,15 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -3746,7 +4803,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0: +color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3765,11 +4822,37 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -3785,11 +4868,31 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.2.0, commander@^2.20.0: +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@2.17.x: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^4.0.1, commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -3808,26 +4911,11 @@ compare-versions@^3.6.0: resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-emitter@^1.2.1, component-emitter@~1.3.0: +component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -3873,21 +4961,6 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -concurrently@^5.2.0, concurrently@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-5.3.0.tgz#7500de6410d043c912b2da27de3202cb489b1e7b" - integrity sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ== - dependencies: - chalk "^2.4.2" - date-fns "^2.0.1" - lodash "^4.17.15" - read-pkg "^4.0.1" - rxjs "^6.5.2" - spawn-command "^0.0.2-1" - supports-color "^6.1.0" - tree-kill "^1.2.2" - yargs "^13.3.0" - config-chain@^1.1.11: version "1.1.12" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" @@ -3896,21 +4969,11 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" -connect-history-api-fallback@^1, connect-history-api-fallback@^1.6.0: +connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== -connect@3.6.6: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= - dependencies: - debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" - utils-merge "1.0.1" - console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" @@ -4021,7 +5084,7 @@ conventional-recommended-bump@^5.0.0: meow "^4.0.0" q "^1.5.1" -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -4033,11 +5096,6 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= - cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" @@ -4060,6 +5118,30 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +copy-to-clipboard@^3.0.8: + version "3.3.1" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== + dependencies: + toggle-selection "^1.0.6" + +copy-webpack-plugin@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.1.1.tgz#737a3ba21c16cc6ddca972f5cf8de25568ca0616" + integrity sha512-4TlkHFYkrZ3WppLA5XkPmBLI5lnEpFsXvpeqxCf5PzkratZiVklNXsvoQkLhUU43q7ZL3AOXtaHAd9jLNJoU0w== + dependencies: + cacache "^15.0.5" + fast-glob "^3.2.4" + find-cache-dir "^3.3.1" + glob-parent "^5.1.1" + globby "^11.0.1" + loader-utils "^2.0.0" + normalize-path "^3.0.0" + p-limit "^3.0.2" + schema-utils "^2.7.1" + serialize-javascript "^5.0.1" + webpack-sources "^1.4.3" + core-js-compat@^3.6.2: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" @@ -4068,17 +5150,30 @@ core-js-compat@^3.6.2: browserslist "^4.8.5" semver "7.0.0" -core-js-pure@^3.0.0: +core-js-pure@^3.0.0, core-js-pure@^3.0.1: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== +core-js@^3.0.1, core-js@^3.0.4: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.1.0: +corejs-upgrade-webpack-plugin@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/corejs-upgrade-webpack-plugin/-/corejs-upgrade-webpack-plugin-2.2.0.tgz#503293bf1fdcb104918eb40d0294e4776ad6923a" + integrity sha512-J0QMp9GNoiw91Kj/dkIQFZeiCXgXoja/Wlht1SPybxerBWh4NCmb0pOgCv61lrlQZETwvVVfAFAA3IqoEO9aqQ== + dependencies: + resolve-from "^5.0.0" + webpack "^4.38.0" + +cosmiconfig@^5.0.0, cosmiconfig@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -4141,7 +5236,15 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +create-react-context@0.3.0, create-react-context@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" + integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + +cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -4178,6 +5281,94 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +csjs@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/csjs/-/csjs-1.1.0.tgz#1b5753c6bd902da269deb369215585a5d8f1f380" + integrity sha1-G1dTxr2QLaJp3rNpIVWFpdjx84A= + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@^3.0.0, css-loader@^3.2.0: + 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.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.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" + integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== + css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" @@ -4192,6 +5383,86 @@ css@^3.0.0: source-map "^0.6.1" source-map-resolve "^0.6.0" +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== + dependencies: + css-tree "1.0.0-alpha.39" + cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -4209,6 +5480,11 @@ cssstyle@^2.2.0: dependencies: cssom "~0.3.6" +csstype@^2.5.7: + version "2.6.13" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.13.tgz#a6893015b90e84dd6e85d0e3b442a1e84f2dbe0f" + integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A== + csstype@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" @@ -4254,44 +5530,39 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -date-fns@^2.0.1: - version "2.16.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" - integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== - dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.1.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== dependencies: ms "2.0.0" -debug@4.1.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -4325,7 +5596,7 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-equal@^1.0.1: +deep-equal@^1.0.1, deep-equal@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== @@ -4342,6 +5613,11 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-object-diff@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" + integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== + deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" @@ -4409,6 +5685,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -4452,15 +5733,31 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detect-node-es@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.0.0.tgz#c0318b9e539a5256ca780dd9575c9345af05b8ed" + integrity sha512-S4AHriUkTX9FoFvL4G8hXDcx6t3gp2HpfCza3Q0v6S78gul2hKWifLQbeW+ZF89+hSm2ZIc/uF3J97ZgytgTRg== + detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== -dev-ip@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dev-ip/-/dev-ip-1.0.1.tgz#a76a3ed1855be7a012bb8ac16cb80f3c00dc28f0" - integrity sha1-p2o+0YVb56ASu4rBbLgPPADcKPA= +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" dezalgo@^1.0.0: version "1.0.3" @@ -4489,6 +5786,14 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + dir-glob@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -4496,6 +5801,13 @@ dir-glob@^2.2.2: dependencies: path-type "^3.0.0" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -4528,11 +5840,49 @@ dom-accessibility-api@^0.5.1: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.2.tgz#ef3cdb5d3f0d599d8f9c8b18df2fb63c9793739d" integrity sha512-k7hRNKAiPJXD2aBqfahSo4/01cTsKWXf+LqJgglnkN2Nz8TsxXKQBXHhKe0Ye9fEfHEZY49uSA5Sr3AqP/sWKA== +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^5.0.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b" + integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" + integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -4540,6 +5890,37 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" + integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + dot-prop@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" @@ -4547,13 +5928,42 @@ dot-prop@^4.2.0: dependencies: is-obj "^1.0.0" -dot-prop@^5.1.0: +dot-prop@^5.1.0, dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" +dotenv-defaults@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz#032c024f4b5906d9990eb06d722dc74cc60ec1bd" + integrity sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q== + dependencies: + dotenv "^6.2.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv-webpack@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz#7ca79cef2497dd4079d43e81e0796bc9d0f68a5e" + integrity sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg== + dependencies: + dotenv-defaults "^1.0.2" + +dotenv@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" + integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== + +dotenv@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + duplexer@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -4569,20 +5979,6 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -easy-extender@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/easy-extender/-/easy-extender-2.3.4.tgz#298789b64f9aaba62169c77a2b3b64b4c9589b8f" - integrity sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q== - dependencies: - lodash "^4.17.10" - -eazy-logger@^3: - version "3.0.2" - resolved "https://registry.yarnpkg.com/eazy-logger/-/eazy-logger-3.0.2.tgz#a325aa5e53d13a2225889b2ac4113b2b9636f4fc" - integrity sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw= - dependencies: - tfunk "^3.0.1" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -4596,11 +5992,28 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +ejs@^2.6.2, ejs@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.570: + version "1.3.570" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f" + integrity sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg== + electron-to-chromium@^1.3.564: version "1.3.565" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.565.tgz#8511797ab2b66b767e1aef4eb17d636bf01a2c72" integrity sha512-me5dGlHFd8Q7mKhqbWRLIYnKjw4i0fO6hmW0JBxa7tM87fBfNEjWokRnDF7V+Qme/9IYpwhfMn+soWs40tXWqg== +element-resize-detector@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.1.tgz#b0305194447a4863155e58f13323a0aef30851d1" + integrity sha512-BdFsPepnQr9fznNPF9nF4vQ457U/ZJXQDSNF1zBe7yaga8v9AdZf3/NElYxFdUh7SitSGt040QygiTo6dtatIw== + dependencies: + batch-processor "1.0.0" + elliptic@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" @@ -4634,13 +6047,27 @@ emoji-regex@^9.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.0.0.tgz#48a2309cc8a1d2e9d23bc6a67c39b63032e76ea4" integrity sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w== +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -encodeurl@~1.0.1, encodeurl@~1.0.2: - version "1.0.2" +emotion-theming@^10.0.19: + version "10.0.27" + resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.27.tgz#1887baaec15199862c89b1b984b79806f2b9ab10" + integrity sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/weak-memoize" "0.2.5" + hoist-non-react-statics "^3.3.0" + +encodeurl@~1.0.2: + version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= @@ -4658,74 +6085,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -engine.io-client@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" - integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-client@~3.4.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.3.tgz#192d09865403e3097e3575ebfeb3861c4d01a66c" - integrity sha512-0NGY+9hioejTEJCaSJZfWZLk4FPI9dN+1H1C4+wj2iuFba47UgZbJzfWs4aNFajnX/qAaYKbe2lLTfEEWzCmcw== - dependencies: - component-emitter "~1.3.0" - component-inherit "0.0.3" - debug "~4.1.0" - engine.io-parser "~2.2.0" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~6.1.0" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" - integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io-parser@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" - integrity sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" - integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== - dependencies: - accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" - enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" @@ -4742,6 +6101,16 @@ enquirer@^2.3.5: dependencies: ansi-colors "^4.1.1" +entities@^1.1.1, entities@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + env-paths@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" @@ -4771,7 +6140,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: +es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: version "1.17.6" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== @@ -4788,6 +6157,42 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" +es-abstract@^1.18.0-next.0: + version "1.18.0-next.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" + integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-get-iterator@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8" + integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ== + dependencies: + es-abstract "^1.17.4" + has-symbols "^1.0.1" + is-arguments "^1.0.4" + is-map "^2.0.1" + is-set "^2.0.1" + is-string "^1.0.5" + isarray "^2.0.5" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -4797,6 +6202,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-shim@^4.5.13: + version "4.5.14" + resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.14.tgz#90009e1019d0ea327447cb523deaff8fe45697ef" + integrity sha512-7SwlpL+2JpymWTt8sNLuC2zdhhc+wrfe5cMPI2j0o6WsPdfAiPwmFy2f0AocPB4RQVBOZ9kNTgi5YF7TdhkvEg== + es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -4809,17 +6219,35 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +es6-shim@^0.35.5: + version "0.35.5" + resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.5.tgz#46f59dc0a84a1c5029e8ff1166ca0a902077a9ab" + integrity sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg== + +es6-templates@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" + integrity sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ= + dependencies: + recast "~0.11.12" + through "~2.3.6" + escalade@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== -escape-html@~1.0.3: +escalade@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" + integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== + +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -4914,12 +6342,12 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" eslint-utils@^2.1.0: @@ -4934,10 +6362,10 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^7.7.0: - version "7.8.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.8.1.tgz#e59de3573fb6a5be8ff526c791571646d124a8fa" - integrity sha512-/2rX2pfhyUG0y+A123d0ccXtMm7DV7sH1m3lk9nk2DZ2LReq39FXHueR9xZwshE5MdfSf0xunSaMWRqyIA6M1w== +eslint@^7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9" + integrity sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA== dependencies: "@babel/code-frame" "^7.0.0" "@eslint/eslintrc" "^0.1.3" @@ -4947,7 +6375,7 @@ eslint@^7.7.0: debug "^4.0.1" doctrine "^3.0.0" enquirer "^2.3.5" - eslint-scope "^5.1.0" + eslint-scope "^5.1.1" eslint-utils "^2.1.0" eslint-visitor-keys "^1.3.0" espree "^7.3.0" @@ -4991,6 +6419,11 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + esquery@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" @@ -4998,7 +6431,7 @@ esquery@^1.2.0: dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0: +esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== @@ -5020,7 +6453,7 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@1.8.1, etag@^1.8.1, etag@~1.8.1: +etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= @@ -5125,7 +6558,7 @@ expect@^26.4.2: jest-message-util "^26.3.0" jest-regex-util "^26.0.0" -express@^4.17.1: +express@^4.17.0, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -5214,6 +6647,11 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5224,7 +6662,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^2.2.6: +fast-glob@^2.0.2, fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== @@ -5236,6 +6674,18 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" +fast-glob@^3.1.1, fast-glob@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + 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.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -5246,6 +6696,25 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastparse@^1.1.1: + 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.8.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" + integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + dependencies: + reusify "^1.0.4" + +fault@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" + integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== + dependencies: + format "^0.2.0" + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -5267,6 +6736,17 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fhir.js@0.0.22: + version "0.0.22" + resolved "https://registry.yarnpkg.com/fhir.js/-/fhir.js-0.0.22.tgz#5aea18d86ece91c1f590c8ba2cff79692bd1f924" + integrity sha512-+DUoaVMhxiDC53VTl41cBoJnp3NGaGQhQCi7HtXnGlfci5pmr8hQTYfd0axCVmKCrN5I28+/nhC8ANv2hVLFUg== + dependencies: + "@types/fhir" "0.0.30" + Base64 "~0.3.0" + merge "^1.2.1" + q "^1.4.1" + request "^2.88.0" + figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -5279,6 +6759,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -5286,11 +6773,33 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-loader@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== + dependencies: + loader-utils "^1.2.3" + schema-utils "^2.5.0" + +file-system-cache@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" + integrity sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08= + dependencies: + bluebird "^3.3.5" + fs-extra "^0.30.0" + ramda "^0.21.0" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filesize@3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -5308,19 +6817,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -5343,6 +6839,27 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -5351,20 +6868,13 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -5399,6 +6909,11 @@ flat-cache@^2.0.1: rimraf "2.6.3" write "1.0.3" +flatpickr@4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.1.tgz#9eb498ab805dd27f5ae02e1ac6ac6c099ce45e94" + integrity sha512-3ULSxbXmcMIRzer/2jLNweoqHpwDvsjEawO2FUd9UFR8uPwLM+LruZcPDpuZStcEgbQKhuFOfXo4nYdGladSNw== + flatted@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" @@ -5412,12 +6927,10 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" +focus-lock@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.7.0.tgz#b2bfb0ca7beacc8710a1ff74275fe0dc60a1d88a" + integrity sha512-LI7v2mH02R55SekHYdv9pRHR9RajVNyIJ2N5IEkWbg7FT5ZmJ9Hw4mWxHeEUcd+dJo0QmzztHvDvWcc7prVFsw== follow-redirects@^1.0.0: version "1.13.0" @@ -5434,6 +6947,20 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +fork-ts-checker-webpack-plugin@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" + integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== + dependencies: + babel-code-frame "^6.22.0" + chalk "^2.4.1" + chokidar "^2.0.4" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + fork-ts-checker-webpack-plugin@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.1.0.tgz#586fbee24aeea950c53bab529e32017f543e71cf" @@ -5460,6 +6987,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -5472,7 +7004,7 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fresh@0.5.2, fresh@^0.5.2: +fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= @@ -5485,16 +7017,18 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" - integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= dependencies: graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" -fs-extra@^8.1.0: +fs-extra@^8.0.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -5520,6 +7054,13 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + fs-monkey@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.1.tgz#4a82f36944365e619f4454d9fff106553067b781" @@ -5558,11 +7099,30 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45" + integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + functions-have-names "^1.2.0" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" + integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== + +fuse.js@^3.4.6: + version "3.6.1" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" + integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -5587,7 +7147,7 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -5698,6 +7258,21 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" +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" @@ -5706,7 +7281,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -5718,7 +7293,7 @@ glob-to-regexp@^0.3.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -5730,6 +7305,13 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@2.0.0, global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -5739,13 +7321,6 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -5766,6 +7341,14 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" +global@^4.3.2, global@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -5778,6 +7361,38 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globalthis@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" + integrity sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw== + dependencies: + define-properties "^1.1.3" + +globby@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -5803,7 +7418,14 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= + dependencies: + delegate "^3.1.2" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -5813,6 +7435,19 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -5855,18 +7490,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -5918,7 +7541,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.3: +has@^1.0.0, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -5942,6 +7565,53 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hast-util-parse-selector@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz#60c99d0b519e12ab4ed32e58f150ec3f61ed1974" + integrity sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA== + +hastscript@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" + integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@1.2.x, he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +highlight.js@^9.15.10: + version "9.18.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.3.tgz#a1a0a2028d5e3149e2380f8a865ee8516703d634" + integrity sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ== + +highlight.js@~9.13.0: + version "9.13.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e" + integrity sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -5951,6 +7621,13 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -5973,6 +7650,21 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -5980,7 +7672,7 @@ html-encoding-sniffer@^2.0.1: dependencies: whatwg-encoding "^1.0.5" -html-entities@^1.3.1: +html-entities@^1.2.0, html-entities@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== @@ -5990,6 +7682,43 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +html-loader@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.5.tgz#6356dbeb0c49756d8ebd5ca327f16ff06ab5faea" + integrity sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog== + dependencies: + es6-templates "^0.2.3" + fastparse "^1.1.1" + html-minifier "^3.5.8" + loader-utils "^1.1.0" + object-assign "^4.1.1" + +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-minifier@^3.5.8: + version "3.5.21" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.2.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + html-parse-stringify2@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz#dc5670b7292ca158b7bc916c9a6735ac8872834a" @@ -5997,6 +7726,33 @@ html-parse-stringify2@2.0.1: dependencies: void-elements "^2.0.1" +html-webpack-plugin@^4.0.0-beta.2, html-webpack-plugin@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" + integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -6018,17 +7774,6 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@1.7.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" @@ -6039,6 +7784,17 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-parser-js@>=0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" @@ -6062,7 +7818,7 @@ http-proxy-middleware@0.19.1: lodash "^4.17.11" micromatch "^3.1.10" -http-proxy@^1.17.0, http-proxy@^1.18.1: +http-proxy@^1.17.0: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -6128,6 +7884,13 @@ i18next-browser-languagedetector@^4.3.1: dependencies: "@babel/runtime" "^7.5.5" +i18next-http-backend@^1.0.21: + version "1.0.21" + resolved "https://registry.yarnpkg.com/i18next-http-backend/-/i18next-http-backend-1.0.21.tgz#cee901b3527dad5165fa91de973b6aa6404c1c37" + integrity sha512-UDeHoV2B+31Gr++0KFAVjM5l+SEwePpF6sfDyaDq5ennM9QNJ78PBEMPStwkreEm4h5C8sT7M1JdNQrLcU1Wdg== + dependencies: + node-fetch "2.6.1" + i18next-icu@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/i18next-icu/-/i18next-icu-1.4.2.tgz#2b79d1ac2c2d542725219beac34a74db15cd2ff9" @@ -6135,13 +7898,6 @@ i18next-icu@^1.4.2: dependencies: intl-messageformat "2.2.0" -i18next-xhr-backend@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/i18next-xhr-backend/-/i18next-xhr-backend-3.2.2.tgz#769124441461b085291f539d91864e3691199178" - integrity sha512-OtRf2Vo3IqAxsttQbpjYnmMML12IMB5e0fc5B7qKJFLScitYaXa1OhMX0n0X/3vrfFlpHL9Ro/H+ps4Ej2j7QQ== - dependencies: - "@babel/runtime" "^7.5.5" - i18next@^19.6.0: version "19.7.0" resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.7.0.tgz#e637bbbf36481d34b7d5e6d3b04e1bb654bf2a26" @@ -6163,6 +7919,13 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +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" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -6180,6 +7943,11 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -6190,10 +7958,17 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -immutable@^3: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= +immer@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" + integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== + +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" @@ -6211,6 +7986,13 @@ import-fresh@^3.0.0, import-fresh@^3.1.0, 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-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -6254,10 +8036,10 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" @@ -6306,6 +8088,25 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" +inquirer@6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" + integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + inquirer@^6.2.0: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" @@ -6325,6 +8126,30 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" +inquirer@^7.0.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +insert-css@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/insert-css/-/insert-css-2.0.0.tgz#eb5d1097b7542f4c79ea3060d3aee07d053880f4" + integrity sha1-610Ql7dUL0x56jBg067gfQU4gPQ= + internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -6333,11 +8158,25 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@^1.4.0: +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + +interpret@^1.0.0, interpret@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +interpret@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + intl-messageformat-parser@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075" @@ -6350,7 +8189,7 @@ intl-messageformat@2.2.0: dependencies: intl-messageformat-parser "1.4.0" -invariant@^2.2.2, invariant@^2.2.4: +invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -6372,6 +8211,11 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + is-absolute-url@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" @@ -6391,6 +8235,19 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" @@ -6401,6 +8258,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -6420,11 +8282,6 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== - is-callable@^1.1.4, is-callable@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" @@ -6437,6 +8294,18 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -6456,6 +8325,11 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -6496,6 +8370,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" @@ -6523,11 +8402,23 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-generator-fn@^2.0.0: version "2.1.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" @@ -6542,12 +8433,20 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-number-like@^1.0.3: - version "1.0.8" - resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" - integrity sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA== - dependencies: - lodash.isfinite "^3.3.2" +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" + integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= is-number@^3.0.0: version "3.0.0" @@ -6602,6 +8501,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" + integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== + is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -6612,13 +8516,28 @@ is-potential-custom-element-name@^1.0.0: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -is-regex@^1.0.4, is-regex@^1.1.0: +is-regex@^1.0.4, is-regex@^1.1.0, is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== dependencies: has-symbols "^1.0.1" +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-set@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" + integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== + is-ssh@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" @@ -6636,12 +8555,19 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-string@^1.0.5: +is-string@^1.0.4, is-string@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== -is-symbol@^1.0.2: +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== @@ -6675,22 +8601,27 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.2.0: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isexe@^2.0.0: version "2.0.0" @@ -6709,6 +8640,11 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isobject@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" + integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -6755,6 +8691,19 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterate-iterator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" + integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== + +iterate-value@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" + integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== + dependencies: + es-get-iterator "^1.0.2" + iterate-iterator "^1.0.1" + jest-changed-files@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.3.0.tgz#68fb2a7eb125f50839dab1f5a17db3607fe195b1" @@ -7122,6 +9071,14 @@ jest-watcher@^26.3.0: jest-util "^26.3.0" string-length "^4.0.1" +jest-worker@^25.4.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest-worker@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" @@ -7145,6 +9102,11 @@ jest@^26.4.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + js-yaml@^3.13.1: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" @@ -7242,17 +9204,17 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2: +json5@^2.1.1, json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: minimist "^1.2.5" -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" - integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= optionalDependencies: graceful-fs "^4.1.6" @@ -7324,11 +9286,28 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + optionalDependencies: + graceful-fs "^4.1.9" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +klona@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + +kremling@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/kremling/-/kremling-2.0.4.tgz#3887dd67df560e049d3d062eaf8b65cdff934dfd" + integrity sha512-Jo3XoFJu4ZqYsARXnGNpqZdilKIO77UbOVbLd6D8vmbpAmlUFixqiKYmNvuhYClwIbKp8aOjIAnAVF6LGRX+IQ== + language-subtag-registry@~0.3.2: version "0.3.20" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz#a00a37121894f224f763268e431c55556b0c0755" @@ -7341,6 +9320,17 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" +lazy-universal-dotenv@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" + integrity sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ== + dependencies: + "@babel/runtime" "^7.5.0" + app-root-dir "^1.0.2" + core-js "^3.0.4" + dotenv "^8.0.0" + dotenv-expand "^5.1.0" + lerna@^3.20.2: version "3.22.1" resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" @@ -7393,11 +9383,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -limiter@^1.0.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" - integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== - lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -7440,7 +9425,16 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@^1.0.2, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -7449,15 +9443,14 @@ loader-utils@^1.0.2, loader-utils@^1.2.3, loader-utils@^1.4.0: emojis-list "^3.0.0" json5 "^1.0.1" -localtunnel@^2.0.0: +loader-utils@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-2.0.0.tgz#2ea71174fa80e34cce91b2a7ce416e6a57d9ff7c" - integrity sha512-g6E0aLgYYDvQDxIjIXkgJo2+pHj3sGg4Wz/XP3h2KtZnRsWPbOQY+hw1H8Z91jep998fkcVE9l+kghO+97vllg== + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== dependencies: - axios "0.19.0" - debug "4.1.1" - openurl "1.1.1" - yargs "13.3.0" + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" locate-path@^2.0.0: version "2.0.0" @@ -7482,6 +9475,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash-es@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" + integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -7492,21 +9490,26 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= -lodash.isfinite@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" - integrity sha1-+4m2WpqAKBgz8LdHizpRBPiY67M= - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" @@ -7532,12 +9535,17 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.2.1: +lodash@^4.0.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.2.1: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -7547,7 +9555,7 @@ loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -7562,6 +9570,26 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" + +lowlight@~1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.11.0.tgz#1304d83005126d4e8b1dc0f07981e9b689ec2efc" + integrity sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A== + dependencies: + fault "^1.0.2" + highlight.js "~9.13.0" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -7569,6 +9597,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + macos-release@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" @@ -7589,7 +9624,7 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: +make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -7640,6 +9675,11 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== +map-or-similar@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" + integrity sha1-beJlMXSt+12e3DPGnT6Sobdvrwg= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -7647,6 +9687,19 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-to-jsx@^6.11.4: + version "6.11.4" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz#b4528b1ab668aef7fe61c1535c27e837819392c5" + integrity sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw== + dependencies: + prop-types "^15.6.2" + unquote "^1.1.0" + +material-colors@^1.2.1: + version "1.2.6" + resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" + integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -7656,6 +9709,16 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -7668,6 +9731,18 @@ memfs@^3.1.2: dependencies: fs-monkey "1.0.1" +memoize-one@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== + +memoizerific@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" + integrity sha1-fIekZGREwy11Q4VwkF8tvRsagFo= + dependencies: + map-or-similar "^1.5.0" + memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -7742,16 +9817,26 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3: +merge2@^1.2.3, merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +merge@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -7799,11 +9884,6 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: dependencies: mime-db "1.44.0" -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== - mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -7824,11 +9904,36 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +mini-create-react-context@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz#df60501c83151db69e28eac0ef08b4002efab040" + integrity sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA== + dependencies: + "@babel/runtime" "^7.5.5" + tiny-warning "^1.0.3" + +mini-css-extract-plugin@^0.8.0: + version "0.8.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" + integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -7839,7 +9944,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -7868,6 +9973,27 @@ minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -7876,6 +10002,13 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -7883,6 +10016,14 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -7899,11 +10040,6 @@ mississippi@^3.0.0: stream-each "^1.1.0" through2 "^2.0.0" -mitt@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d" - integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw== - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -7919,12 +10055,12 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*: +mkdirp@*, 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== -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -8007,7 +10143,7 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -mute-stream@~0.0.4: +mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== @@ -8063,6 +10199,21 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +no-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" + integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== + dependencies: + lower-case "^2.0.1" + tslib "^1.10.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" @@ -8072,7 +10223,7 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@^2.3.0, node-fetch@^2.5.0: +node-fetch@2.6.1, node-fetch@^2.3.0, node-fetch@^2.5.0, node-fetch@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -8150,7 +10301,7 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.61: +node-releases@^1.1.29, node-releases@^1.1.61: version "1.1.61" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== @@ -8185,7 +10336,22 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^3.3.0: +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0, normalize-url@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== @@ -8268,6 +10434,18 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -8288,11 +10466,6 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= - object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -8302,7 +10475,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0: +object-inspect@^1.7.0, object-inspect@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== @@ -8320,11 +10493,6 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-path@^0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5" - integrity sha1-D9mnT8X60a45aLWGvaXGMr1sBaU= - object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -8342,7 +10510,26 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.getownpropertydescriptors@^2.0.3: +object.entries@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" + integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + has "^1.0.3" + +"object.fromentries@^2.0.0 || ^1.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== @@ -8357,6 +10544,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -8400,23 +10597,26 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +open@^6.3.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + +open@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/open/-/open-7.2.1.tgz#07b0ade11a43f2a8ce718480bdf3d7563a095195" + integrity sha512-xbYCJib4spUdmcs0g/2mK1nKo/jO2T7INClWd/beL7PFkXRWgr8B23ssDHX/USPn2M2IjDR5UdpYs6I67SnTSA== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + opencollective-postinstall@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== -openurl@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.1.tgz#3875b4b0ef7a52c156f0db41d4609dbb0f94b387" - integrity sha1-OHW0sO96UsFW8NtB1GCduw+Us4c= - -opn@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" - integrity sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g== - dependencies: - is-wsl "^1.1.0" - opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -8503,13 +10703,20 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" + integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -8543,6 +10750,20 @@ p-map@^2.0.0, p-map@^2.1.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-pipe@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" @@ -8598,6 +10819,21 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +param-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" + integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== + dependencies: + dot-case "^3.0.3" + tslib "^1.10.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -8616,6 +10852,18 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-entities@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-github-repo-url@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" @@ -8674,25 +10922,19 @@ parse5@5.1.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= - dependencies: - better-assert "~1.0.0" - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" + integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -8755,6 +10997,13 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -8838,13 +11087,20 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" +pkg-up@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -8852,6 +11108,25 @@ please-upgrade-node@^3.2.0: dependencies: semver-compare "^1.0.0" +pnp-webpack-plugin@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" + integrity sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg== + dependencies: + ts-pnp "^1.1.2" + +polished@^3.3.1: + version "3.6.7" + resolved "https://registry.yarnpkg.com/polished/-/polished-3.6.7.tgz#44cbd0047f3187d83db0c479ef0c7d5583af5fb6" + integrity sha512-b4OViUOihwV0icb9PHmWbR+vPqaSzSAEbgLskvb7ANPATVXGiYv/TQFHQo65S53WU9i5EQ1I03YDOJW7K0bmYg== + dependencies: + "@babel/runtime" "^7.9.2" + +popper.js@^1.14.4, popper.js@^1.14.7: + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + portfinder@^1.0.26: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" @@ -8861,19 +11136,365 @@ portfinder@^1.0.26: debug "^3.1.1" mkdirp "^0.5.5" -portscanner@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.1.1.tgz#eabb409e4de24950f5a2a516d35ae769343fbb96" - integrity sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y= - dependencies: - async "1.5.2" - is-number-like "^1.0.3" - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-calc@^7.0.1: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.4.tgz#5e177ddb417341e6d4a193c5d9fd8ada79094f8b" + integrity sha512-0I79VRAd1UTkaHzY9w83P39YGO/M3bG7/tNLrHGEunBolfoGM0hSjrGvjoeaj0JE/zIw5GsI2KZ0UwDJqv5hjw== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-flexbugs-fixes@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + dependencies: + postcss "^7.0.26" + +postcss-load-config@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.1.tgz#0a684bb8beb05e55baf922f7ab44c3edb17cf78e" + integrity sha512-D2ENobdoZsW0+BHy4x1CAkXtbXtYWYRIxL/JbtRBqrRGOPtJ2zoga/bEZWhV/ShWB5saVxJMzbMdSyA/vv4tXw== + 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-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.0.2.tgz#b9e55a6126ee67bb7b94bbfcbf1aa24c69f11229" + integrity sha512-u7Qoa6GSPIeg9/hHbNnXspzuD5jjCIWKgk1fJ/gGJPS0uaj6Whk2zjXhDAiHZyYSrDmIzUQk7GgwRF22eRIQGQ== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.3" + loader-utils "^2.0.0" + schema-utils "^2.7.1" + semver "^7.3.2" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.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" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + 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.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.3.tgz#766d77728728817cc140fa1ac6da5e77f9fada98" + integrity sha512-0ClFaY4X1ra21LRqbW6y3rUbWcxnSVkDFG57R7Nxus9J9myPFlv+jYDMohzpkBx0RrjjiqjtycpchQ+PLGmZ9w== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.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.0.2, 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.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.34" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.34.tgz#f2baf57c36010df7de4009940f21532c16d65c20" + integrity sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -8884,6 +11505,11 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -8896,6 +11522,14 @@ prettier@^2.0.5: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.1.tgz#d9485dd5e499daa6cb547023b87a6cf51bee37d6" integrity sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw== +pretty-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + pretty-format@^25.2.1, pretty-format@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" @@ -8916,6 +11550,11 @@ pretty-format@^26.4.2: ansi-styles "^4.0.0" react-is "^16.12.0" +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= + pretty-quick@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.0.2.tgz#7ed460f7e43a647b1044ad8b7f41a0c8a7f1c51c" @@ -8928,6 +11567,25 @@ pretty-quick@^3.0.0: mri "^1.1.5" multimatch "^4.0.0" +prismjs@^1.8.4: + version "1.21.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.21.0.tgz#36c086ec36b45319ec4218ee164c110f9fc015a3" + integrity sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw== + optionalDependencies: + clipboard "^2.0.0" + +prismjs@~1.17.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" + integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== + optionalDependencies: + clipboard "^2.0.0" + +private@~0.1.5: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + 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" @@ -8956,6 +11614,26 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" +promise.allsettled@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" + integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== + dependencies: + array.prototype.map "^1.0.1" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + iterate-value "^1.0.0" + +promise.prototype.finally@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067" + integrity sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.0" + function-bind "^1.1.1" + prompts@^2.0.1: version "2.3.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" @@ -8971,7 +11649,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.6.2: +prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -8980,6 +11658,13 @@ prop-types@^15.6.2: object-assign "^4.1.1" react-is "^16.8.1" +property-information@^5.0.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943" + integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA== + dependencies: + xtend "^4.0.0" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -9067,32 +11752,40 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -q@^1.5.1: +q@^1.1.2, q@^1.4.1, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qs@6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - integrity sha1-HPyyXBCpsrSDBT/zn138kjOQjP4= - qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.6.0: + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= -querystring@0.2.0: +querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= @@ -9112,6 +11805,11 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +ramda@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" + integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= + ramda@^0.25.0: version "0.25.0" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" @@ -9137,7 +11835,7 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.2.1, range-parser@~1.2.0, range-parser@~1.2.1: +range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== @@ -9152,17 +11850,65 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@^2.3.2: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== +raw-loader@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" + integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== dependencies: - bytes "3.1.0" - http-errors "1.7.3" - iconv-lite "0.4.24" - unpipe "1.0.0" + loader-utils "^1.1.0" + schema-utils "^2.0.1" + +react-clientside-effect@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837" + integrity sha512-nRmoyxeok5PBO6ytPvSjKp9xwXg9xagoTK1mMjwnQxqM9Hd7MNPl+LS1bOSOe+CV2+4fnEquc7H/S8QD3q697A== + dependencies: + "@babel/runtime" "^7.0.0" -react-dom@^16.13.1: +react-color@^2.17.0: + version "2.18.1" + resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.18.1.tgz#2cda8cc8e06a9e2c52ad391a30ddad31972472f4" + integrity sha512-X5XpyJS6ncplZs74ak0JJoqPi+33Nzpv5RYWWxn17bslih+X7OlgmfpmGC1fNvdkK7/SGWYf1JJdn7D2n5gSuQ== + dependencies: + "@icons/material" "^0.2.4" + lodash "^4.17.11" + material-colors "^1.2.1" + prop-types "^15.5.10" + reactcss "^1.2.0" + tinycolor2 "^1.4.1" + +react-dev-utils@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.1.0.tgz#3ad2bb8848a32319d760d0a84c56c14bdaae5e81" + integrity sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg== + dependencies: + "@babel/code-frame" "7.5.5" + address "1.1.2" + browserslist "4.7.0" + chalk "2.4.2" + cross-spawn "6.0.5" + detect-port-alt "1.1.6" + escape-string-regexp "1.0.5" + filesize "3.6.1" + find-up "3.0.0" + fork-ts-checker-webpack-plugin "1.5.0" + global-modules "2.0.0" + globby "8.0.2" + gzip-size "5.1.1" + immer "1.10.0" + inquirer "6.5.0" + is-root "2.1.0" + loader-utils "1.2.3" + open "^6.3.0" + pkg-up "2.0.0" + react-error-overlay "^6.0.3" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + sockjs-client "1.4.0" + strip-ansi "5.2.0" + text-table "0.2.0" + +react-dom@^16.13.1, react-dom@^16.8.3: version "16.13.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== @@ -9172,6 +11918,54 @@ react-dom@^16.13.1: prop-types "^15.6.2" scheduler "^0.19.1" +react-draggable@^4.0.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" + integrity sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w== + dependencies: + classnames "^2.2.5" + prop-types "^15.6.0" + +react-error-overlay@^6.0.3: + version "6.0.7" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108" + integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA== + +react-fast-compare@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + +react-focus-lock@^2.1.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.4.1.tgz#e842cc93da736b5c5d331799012544295cbcee4f" + integrity sha512-c5ZP56KSpj9EAxzScTqQO7bQQNPltf/W1ZEBDqNDOV1XOIwvAyHX0O7db9ekiAtxyKgnqZjQlLppVg94fUeL9w== + dependencies: + "@babel/runtime" "^7.0.0" + focus-lock "^0.7.0" + prop-types "^15.6.2" + react-clientside-effect "^1.2.2" + use-callback-ref "^1.2.1" + use-sidecar "^1.0.1" + +react-helmet-async@^1.0.2: + version "1.0.7" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.7.tgz#b988fbc3abdc4b704982bb74b9cb4a08fcf062c1" + integrity sha512-By90p5uxAriGukbyejq2poK41DwTxpNWOpOjN8mIyX/BKrCd3+sXZ5pHUZXjHyjR5OYS7PGsOD9dbM61YxfFmA== + dependencies: + "@babel/runtime" "^7.11.2" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-hotkeys@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-2.0.0.tgz#a7719c7340cbba888b0e9184f806a9ec0ac2c53f" + integrity sha512-3n3OU8vLX/pfcJrR3xJ1zlww6KS1kEJt0Whxc4FiGV+MJrQ1mYSYI3qS/11d2MJDFm8IhOXMTFQirfu6AVOF6Q== + dependencies: + prop-types "^15.6.1" + react-i18next@^11.7.0: version "11.7.2" resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.7.2.tgz#b3cb94ad3b85c25e3d4802a141139d65238b976f" @@ -9180,12 +11974,138 @@ react-i18next@^11.7.0: "@babel/runtime" "^7.3.1" html-parse-stringify2 "2.0.1" -react-is@^16.12.0, react-is@^16.8.1: +react-input-autosize@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2" + integrity sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw== + dependencies: + prop-types "^15.5.8" + +react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.9.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react@^16.13.1: +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-popper-tooltip@^2.8.3: + version "2.11.1" + resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-2.11.1.tgz#3c4bdfd8bc10d1c2b9a162e859bab8958f5b2644" + integrity sha512-04A2f24GhyyMicKvg/koIOQ5BzlrRbKiAgP6L+Pdj1MVX3yJ1NeZ8+EidndQsbejFT55oW1b++wg2Z8KlAyhfQ== + dependencies: + "@babel/runtime" "^7.9.2" + react-popper "^1.3.7" + +react-popper@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.7.tgz#f6a3471362ef1f0d10a4963673789de1baca2324" + integrity sha512-nmqYTx7QVjCm3WUZLeuOomna138R1luC4EqkW3hxJUrAe+3eNz3oFCLYdnPwILfn0mX1Ew2c3wctrjlUMYYUww== + dependencies: + "@babel/runtime" "^7.1.2" + create-react-context "^0.3.0" + deep-equal "^1.1.1" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" + +react-redux@^7.0.2: + version "7.2.1" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.1.tgz#8dedf784901014db2feca1ab633864dee68ad985" + integrity sha512-T+VfD/bvgGTUA74iW9d2i5THrDQWbweXP0AVNI8tNd1Rk5ch1rnMiJkDD67ejw7YBKM4+REvcvqRuWJb7BLuEg== + dependencies: + "@babel/runtime" "^7.5.5" + hoist-non-react-statics "^3.3.0" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^16.9.0" + +react-router-dom@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.2.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-select@^3.0.8: + version "3.1.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.1.0.tgz#ab098720b2e9fe275047c993f0d0caf5ded17c27" + integrity sha512-wBFVblBH1iuCBprtpyGtd1dGMadsG36W5/t2Aj8OE6WbByDg5jIFyT7X5gT+l0qmT5TqWhxX+VsKJvCEl2uL9g== + dependencies: + "@babel/runtime" "^7.4.4" + "@emotion/cache" "^10.0.9" + "@emotion/core" "^10.0.9" + "@emotion/css" "^10.0.9" + memoize-one "^5.0.0" + prop-types "^15.6.0" + react-input-autosize "^2.2.2" + react-transition-group "^4.3.0" + +react-sizeme@^2.5.2, react-sizeme@^2.6.7: + version "2.6.12" + resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.12.tgz#ed207be5476f4a85bf364e92042520499455453e" + integrity sha512-tL4sCgfmvapYRZ1FO2VmBmjPVzzqgHA7kI8lSJ6JS6L78jXFNRdOZFpXyK6P1NBZvKPPCZxReNgzZNUajAerZw== + dependencies: + element-resize-detector "^1.2.1" + invariant "^2.2.4" + shallowequal "^1.1.0" + throttle-debounce "^2.1.0" + +react-syntax-highlighter@^11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz#4e3f376e752b20d2f54e4c55652fd663149e4029" + integrity sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww== + dependencies: + "@babel/runtime" "^7.3.1" + highlight.js "~9.13.0" + lowlight "~1.11.0" + prismjs "^1.8.4" + refractor "^2.4.1" + +react-textarea-autosize@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.2.tgz#70fdb333ef86bcca72717e25e623e90c336e2cda" + integrity sha512-uH3ORCsCa3C6LHxExExhF4jHoXYCQwE5oECmrRsunlspaDAbS4mGKNlWZqjLfInWtFQcf0o1n1jC/NGXFdUBCg== + dependencies: + "@babel/runtime" "^7.1.2" + prop-types "^15.6.0" + +react-transition-group@^4.3.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" + integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^16.13.1, react@^16.8.3: version "16.13.1" resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== @@ -9194,6 +12114,13 @@ react@^16.13.1: object-assign "^4.1.1" prop-types "^15.6.2" +reactcss@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" + integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== + dependencies: + lodash "^4.0.1" + read-cmd-shim@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" @@ -9263,15 +12190,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= - dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" - read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" @@ -9302,7 +12220,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -9337,6 +12255,30 @@ readdirp@~3.4.0: dependencies: picomatch "^2.2.1" +recast@~0.11.12: + version "0.11.23" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" + integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM= + dependencies: + ast-types "0.9.6" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -9361,6 +12303,23 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +redux@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + +refractor@^2.4.1: + version "2.10.1" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" + integrity sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw== + dependencies: + hastscript "^5.0.0" + parse-entities "^1.1.2" + prismjs "~1.17.0" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -9373,7 +12332,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== -regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -9393,7 +12352,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0: +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== @@ -9430,11 +12389,27 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +relateurl@0.2.x, relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" @@ -9509,6 +12484,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -9546,26 +12526,23 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.17.0, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.3.2: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" -resp-modifier@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/resp-modifier/-/resp-modifier-6.0.2.tgz#b124de5c4fbafcba541f48ffa73970f4aa456b4f" - integrity sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08= - dependencies: - debug "^2.2.0" - minimatch "^3.0.2" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -9574,6 +12551,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -9589,6 +12574,21 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -9596,14 +12596,14 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -9623,11 +12623,16 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-async@^2.2.0: +run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -9635,25 +12640,18 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rx@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" - integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= - -rxjs@^5.5.6: - version "5.5.12" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" - integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== - dependencies: - symbol-observable "1.0.1" - -rxjs@^6.4.0, rxjs@^6.5.2: +rxjs@^6.4.0, rxjs@^6.5.3, rxjs@^6.6.0: version "6.6.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== dependencies: tslib "^1.9.0" +safe-buffer@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -9691,6 +12689,11 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" +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== + saxes@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -9724,7 +12727,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.6.5: +schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0, schema-utils@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -9738,6 +12741,11 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= + selfsigned@^1.10.7: version "1.10.7" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" @@ -9775,25 +12783,6 @@ semver@^7.2.1, semver@^7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -9820,7 +12809,25 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" -serve-index@1.9.1, serve-index@^1.9.1: +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-favicon@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" + integrity sha1-k10kDN/g9YBTB/3+ln2IlCosvPA= + dependencies: + etag "~1.8.1" + fresh "0.5.2" + ms "2.1.1" + parseurl "~1.3.2" + safe-buffer "5.1.1" + +serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= @@ -9833,16 +12840,6 @@ serve-index@1.9.1, serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -9853,11 +12850,6 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -server-destroy@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd" - integrity sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0= - set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -9903,6 +12895,16 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +shallow-equal@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" + integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -9927,16 +12929,65 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shelljs@^0.8.3: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" + integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== + dependencies: + es-abstract "^1.18.0-next.0" + object-inspect "^1.8.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +simplebar-react@^1.0.0-alpha.6: + version "1.2.3" + resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-1.2.3.tgz#bd81fa9827628470e9470d06caef6ece15e1c882" + integrity sha512-1EOWJzFC7eqHUp1igD1/tb8GBv5aPQA5ZMvpeDnVkpNJ3jAuvmrL2kir3HuijlxhG7njvw9ssxjjBa89E5DrJg== + dependencies: + prop-types "^15.6.1" + simplebar "^4.2.3" + +simplebar@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-4.2.3.tgz#dac40aced299c17928329eab3d5e6e795fafc10c" + integrity sha512-9no0pK7/1y+8/oTF3sy/+kx0PjQ3uk4cYwld5F1CJGk2gx+prRyUq8GRfvcVLq5niYWSozZdX73a2wIr1o9l/g== + dependencies: + can-use-dom "^0.1.0" + core-js "^3.0.1" + lodash.debounce "^4.0.8" + lodash.memoize "^4.1.2" + lodash.throttle "^4.1.1" + resize-observer-polyfill "^1.5.1" + single-spa@^4.4.1: version "4.4.4" resolved "https://registry.yarnpkg.com/single-spa/-/single-spa-4.4.4.tgz#b43c7677e0fedc719c1b284d4e0a35b6e40f52e2" @@ -9947,6 +12998,11 @@ sisteransi@^1.0.4: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" @@ -10006,81 +13062,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socket.io-adapter@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" - integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== - -socket.io-client@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" - integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~3.1.0" - engine.io-client "~3.2.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.2.0" - to-array "0.1.4" - -socket.io-client@^2.0.4: - version "2.3.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" - integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~4.1.0" - engine.io-client "~3.4.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.3.0" - to-array "0.1.4" - -socket.io-parser@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" - integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - -socket.io-parser@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" - integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng== - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - -socket.io@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" - integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== - dependencies: - debug "~3.1.0" - engine.io "~3.2.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.1.1" - socket.io-parser "~3.2.0" - sockjs-client@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" @@ -10118,6 +13099,13 @@ socks@~2.3.2: ip "1.1.5" smart-buffer "^4.1.0" +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" @@ -10162,12 +13150,12 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -10177,10 +13165,10 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -spawn-command@^0.0.2-1: - version "0.0.2-1" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" - integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== spdx-correct@^3.0.0: version "3.1.1" @@ -10279,6 +13267,26 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +ssri@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + +ssri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + stack-utils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" @@ -10299,21 +13307,16 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== - stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +store2@^2.7.1: + version "2.12.0" + resolved "https://registry.yarnpkg.com/store2/-/store2-2.12.0.tgz#e1f1b7e1a59b6083b2596a8d067f6ee88fd4d3cf" + integrity sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw== + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -10346,13 +13349,10 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -stream-throttle@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/stream-throttle/-/stream-throttle-0.1.3.tgz#add57c8d7cc73a81630d31cd55d3961cfafba9c3" - integrity sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM= - dependencies: - commander "^2.2.0" - limiter "^1.0.5" +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= string-length@^4.0.1: version "4.0.1" @@ -10371,7 +13371,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.0: +"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -10388,7 +13388,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== @@ -10397,6 +13397,34 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +"string.prototype.matchall@^4.0.0 || ^3.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + +string.prototype.padend@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" + integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +string.prototype.padstart@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.0.tgz#b47c087540d0710be5a49375751a0a627bd4ff90" + integrity sha512-envqZvUp2JItI+OeQ5UAh1ihbAV5G/2bixTojvlIa090GGqF+NQRxbWb2nv9fTGrZABv6+pE6jXoAZhhS2k4Hw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + string.prototype.trimend@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" @@ -10427,6 +13455,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -10441,13 +13476,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -10515,6 +13543,23 @@ strong-log-transformer@^2.0.0: minimist "^1.2.0" through "^2.3.4" +style-loader@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" + integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.6" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -10549,16 +13594,43 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.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== symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +symbol.prototype.description@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.2.tgz#f325e1e6ad534b3b29c9c3ca73c136c9ce03c5e2" + integrity sha512-2CW5SU4/Ki1cYOOHcL2cXK4rxSg5hCU1TwZ7X4euKhV9VnfqKslh7T6/UyKkubA8cq2tOmsOv7m3ZUmQslBRuw== + dependencies: + es-abstract "^1.17.0-next.1" + has-symbols "^1.0.1" + systemjs-webpack-interop@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/systemjs-webpack-interop/-/systemjs-webpack-interop-2.1.2.tgz#b575afa4bf3b62c5cb7b49d4ef69eaf7064aacdc" @@ -10597,6 +13669,32 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: safe-buffer "^5.1.2" yallist "^3.0.3" +tar@^6.0.2: + version "6.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" + integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +telejson@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/telejson/-/telejson-3.3.0.tgz#6d814f3c0d254d5c4770085aad063e266b56ad03" + integrity sha512-er08AylQ+LEbDLp1GRezORZu5wKOHaBczF6oYJtgC3Idv10qZ8A3p6ffT+J5BzDKkV9MqBvu8HAKiIIOp6KJ2w== + dependencies: + "@types/is-function" "^1.0.0" + global "^4.4.0" + is-function "^1.0.1" + is-regex "^1.0.4" + is-symbol "^1.0.3" + isobject "^4.0.0" + lodash "^4.17.15" + memoizerific "^1.11.3" + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -10614,6 +13712,11 @@ temp-write@^3.4.0: temp-dir "^1.0.0" uuid "^3.0.1" +term-size@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" + integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -10637,7 +13740,22 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.1.2: +terser-webpack-plugin@^2.1.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz#894764a19b0743f2f704e7c2a848c5283a696724" + integrity sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.3.1" + jest-worker "^25.4.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.6.12" + webpack-sources "^1.4.3" + +terser@^4.1.2, terser@^4.6.12, terser@^4.6.3: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -10660,19 +13778,11 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@^0.2.0: +text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -tfunk@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/tfunk/-/tfunk-3.1.0.tgz#38e4414fc64977d87afdaa72facb6d29f82f7b5b" - integrity sha1-OORBT8ZJd9h6/apy+sttKfgve1s= - dependencies: - chalk "^1.1.1" - object-path "^0.9.0" - thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -10692,6 +13802,11 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== +throttle-debounce@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz#fd31865e66502071e411817e241465b3e9c372e2" + integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== + through2@^2.0.0, through2@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -10708,7 +13823,7 @@ through2@^3.0.0: inherits "^2.0.4" readable-stream "2 || 3" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -10725,6 +13840,31 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-emitter@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tiny-invariant@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + +tiny-warning@^1.0.0, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tinycolor2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" + integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10737,11 +13877,6 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -10784,6 +13919,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -10820,11 +13960,6 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -10845,6 +13980,11 @@ trim-off-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= +ts-dedent@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-1.1.1.tgz#68fad040d7dbd53a90f545b450702340e17d18f3" + integrity sha512-UGTRZu1evMw4uTPyYF66/KFd22XiU+jMaIuHrkIHQ2GivAXVlLV0v/vHrpOuTRf9BmpNHi/SO7Vd0rLu0y57jg== + ts-loader@^8.0.3: version "8.0.3" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.3.tgz#56858f4296edf1ed55e01f8520552984d3f0911c" @@ -10856,12 +13996,17 @@ ts-loader@^8.0.3: micromatch "^4.0.0" semver "^6.0.0" +ts-pnp@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + ts-toolbelt@^6.3.3: version "6.15.5" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz#cb3b43ed725cb63644782c64fbcad7d8f28c0a83" integrity sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A== -tslib@^1.9.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" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== @@ -10935,6 +14080,11 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typed-styles@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10952,10 +14102,13 @@ typescript@^4.0.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== -ua-parser-js@^0.7.18: - version "0.7.22" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" - integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== +uglify-js@3.4.x: + version "3.4.10" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" uglify-js@^3.1.4: version "3.10.4" @@ -10967,16 +14120,16 @@ uid-number@0.0.6: resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - umask@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= +unfetch@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db" + integrity sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg== + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -11010,6 +14163,16 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -11024,6 +14187,11 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unistore@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/unistore/-/unistore-3.5.2.tgz#ec3ae07bc497fb35ff8b99f85c878ec47c787cb4" + integrity sha512-2Aa4eX0Ua1umyiI3Eai6Li+wXYOHgaDBGOPB3Hvw7PAVuD30TAyh5kS4yNKb2fLDbQgizvPhKQRcYnOdfsm4VQ== + universal-user-agent@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" @@ -11051,6 +14219,11 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unquote@^1.1.0, unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -11064,6 +14237,11 @@ upath@^1.1.1, upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + uri-js@^4.2.2: version "4.4.0" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" @@ -11076,6 +14254,15 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-loader@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" + integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== + dependencies: + loader-utils "^1.2.3" + mime "^2.4.4" + schema-utils "^2.5.0" + url-parse@^1.4.3: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" @@ -11092,12 +14279,25 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-callback-ref@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.4.tgz#d86d1577bfd0b955b6e04aaf5971025f406bea3c" + integrity sha512-rXpsyvOnqdScyied4Uglsp14qzag1JIemLeTWGKbwpotWht57hbP78aNT+Q4wdFKQfQibbUX4fb6Qb4y11aVOQ== + +use-sidecar@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.3.tgz#17a4e567d4830c0c0ee100040e85a7fe68611e0f" + integrity sha512-ygJwGUBeQfWgDls7uTrlEDzJUUR67L8Rm14v/KfFtYCdHhtjHZx1Krb3DIQl3/Q5dJGfXLEQ02RY8BdNBv87SQ== + dependencies: + detect-node-es "^1.0.0" + tslib "^1.9.3" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -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= @@ -11109,6 +14309,24 @@ util-promisify@^2.1.0: dependencies: object.getownpropertydescriptors "^2.0.3" +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -11123,6 +14341,11 @@ util@^0.11.0: dependencies: inherits "2.0.3" +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -11167,11 +14390,21 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -11212,6 +14445,20 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= + dependencies: + loose-envify "^1.0.0" + +warning@^4.0.2, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + watchpack-chokidar2@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" @@ -11276,7 +14523,7 @@ webpack-cli@^3.3.12: v8-compile-cache "^2.1.1" yargs "^13.3.2" -webpack-dev-middleware@^3.7.2: +webpack-dev-middleware@^3.7.0, webpack-dev-middleware@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== @@ -11326,6 +14573,16 @@ webpack-dev-server@^3.11.0: ws "^6.2.1" yargs "^13.3.2" +webpack-hot-middleware@^2.25.0: + version "2.25.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" + integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== + dependencies: + ansi-html "0.0.7" + html-entities "^1.2.0" + querystring "^0.2.0" + strip-ansi "^3.0.0" + webpack-log@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" @@ -11334,7 +14591,7 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -11342,6 +14599,42 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" +webpack-virtual-modules@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz#20863dc3cb6bb2104729fff951fbe14b18bd0299" + integrity sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA== + dependencies: + debug "^3.0.0" + +webpack@^4.33.0, webpack@^4.38.0: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + webpack@^4.44.1: version "4.44.1" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" @@ -11453,6 +14746,13 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + windows-release@^3.1.0: version "3.3.3" resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" @@ -11477,6 +14777,13 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -11495,6 +14802,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -11570,22 +14886,6 @@ ws@^7.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -ws@~6.1.0: - version "6.1.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" - integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== - dependencies: - async-limiter "~1.0.0" - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -11596,11 +14896,6 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= - xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -11611,17 +14906,27 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.1.tgz#1ad2a7eddfa8bce7caa2e1f6b5da96c39d99d571" + integrity sha512-/jJ831jEs4vGDbYPQp4yGKDYPSCCEQ45uZWJHE1AoYBzqdZi8+LDWas0z4HrmJXmKdpFsTiowSHXdxyFhpmdMg== + yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml@^1.10.0, yaml@^1.7.2: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@^13.1.1, yargs-parser@^13.1.2: +yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== @@ -11645,23 +14950,25 @@ yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== +yargs-parser@^20.0.0: + version "20.2.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.0.tgz#944791ca2be2e08ddadd3d87e9de4c6484338605" + integrity sha512-2agPoRFPoIcFzOIp6656gcvsg2ohtscpw2OINr/q46+Sq41xz2OYLqx5HRHabmFU1OARIPAYH5uteICE7mn/5A== + +yargs@16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.0.3.tgz#7a919b9e43c90f80d4a142a89795e85399a7e54c" + integrity sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" + cliui "^7.0.0" + escalade "^3.0.2" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.1" + string-width "^4.2.0" + y18n "^5.0.1" + yargs-parser "^20.0.0" -yargs@^13.3.0, yargs@^13.3.2: +yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== @@ -11694,7 +15001,7 @@ yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.3.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -11710,8 +15017,3 @@ yargs@^15.3.1, yargs@^15.4.1: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^18.1.2" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=