From 67fca88624892051b53e11ac02e878b39bdae36f Mon Sep 17 00:00:00 2001 From: ivan-aksamentov Date: Thu, 8 Dec 2022 09:10:30 +0100 Subject: [PATCH 01/26] chore: upgrade deps --- web/package.json | 289 +- .../AcknowledgementEpiIsl.tsx | 2 +- .../Acknowledgements/AcknowledgementsCard.tsx | 2 +- .../Acknowledgements/AcknowledgementsPage.tsx | 2 +- web/src/components/Common/ColCustom.tsx | 2 +- .../MutationCountsSummaryCard.tsx | 2 +- web/src/helpers/urlQuery.ts | 6 +- web/src/io/getCountryColor.ts | 3 +- web/src/pages/_app.tsx | 4 +- web/yarn.lock | 7372 ++++++++--------- 10 files changed, 3649 insertions(+), 4035 deletions(-) diff --git a/web/package.json b/web/package.json index 3d6734bdb5..028f4b2d61 100644 --- a/web/package.json +++ b/web/package.json @@ -61,185 +61,181 @@ "stills": "yarn run:node tools/generateStillImages.ts" }, "dependencies": { + "@mdx-js/react": "1.6.22", + "@tanstack/query-core": "4.19.1", + "@tanstack/react-query": "4.19.1", + "@tanstack/react-query-devtools": "4.19.1", "animate.css": "4.1.1", - "autoprefixer": "10.4.5", - "axios": "0.27.2", + "autoprefixer": "10.4.13", + "axios": "1.2.1", "bootstrap": "4.5.2", - "bootstrap-icons": "1.8.1", - "classnames": "2.3.1", - "core-js": "3.22.3", - "country-flag-icons": "1.4.26", + "bootstrap-icons": "1.10.2", + "classnames": "2.3.2", + "core-js": "3.26.1", + "country-flag-icons": "1.5.5", "css.escape": "1.5.1", "fast-copy": "2.1.3", - "history": "5.3.0", - "immutable": "4.0.0", + "fast-memoize": "2.5.2", + "fasy": "9.0.2", "intersection-observer": "0.12.2", "is-absolute-url": "3.0.3", "iso-3166-1-alpha-2": "1.0.0", "lodash": "4.17.21", - "luxon": "2.3.2", - "marked": "4.0.14", - "merge-anything": "5.0.2", - "moment": "2.29.3", + "luxon": "3.1.1", + "marked": "4.2.4", + "merge-anything": "5.1.4", "next": "12.1.6", - "next-compose-plugins": "2.2.1", "papaparse": "5.3.2", "polished": "4.2.2", "prop-types": "15.8.1", - "react": "18.1.0", + "react": "18.2.0", "react-aspect-ratio": "1.1.2", "react-copy-to-clipboard": "5.1.0", - "react-dom": "18.1.0", + "react-dom": "18.2.0", "react-error-boundary": "3.1.4", "react-gif-player": "0.4.2", "react-helmet": "6.1.0", - "react-icons": "4.3.1", - "react-intersection-observer": "9.4.0", - "react-loader-spinner": "5.1.4", - "react-query": "3.38.0", + "react-icons": "4.7.1", + "react-intersection-observer": "9.4.1", + "react-loader-spinner": "5.3.4", "react-reactstrap-pagination": "2.0.3", - "react-resize-detector": "7.0.0", - "react-select": "5.3.1", - "react-share": "4.4.0", - "react-super-responsive-table": "5.2.0", - "react-toggle": "4.1.2", + "react-resize-detector": "7.1.2", + "react-select": "5.7.0", + "react-share": "4.4.1", + "react-super-responsive-table": "5.2.1", + "react-toggle": "4.1.3", "reactstrap": "8.10.1", - "recharts": "2.1.9", + "recharts": "2.2.0", + "recoil": "0.7.6", "reflect-metadata": "0.1.13", - "regenerator-runtime": "0.13.9", + "regenerator-runtime": "0.13.11", "resize-observer-polyfill": "1.5.1", "serialize-javascript": "6.0.0", - "styled-components": "5.3.5", + "styled-components": "5.3.6", "typeface-droid-sans-mono": "0.0.44", "typeface-open-sans": "0.0.75", "url-join": "4.0.1" }, "devDependencies": { - "@babel/core": "7.17.9", - "@babel/node": "7.16.8", - "@babel/plugin-proposal-decorators": "7.17.9", - "@babel/preset-env": "7.16.11", - "@babel/preset-typescript": "7.16.7", + "@babel/core": "7.20.5", + "@babel/node": "7.20.5", + "@babel/plugin-proposal-decorators": "7.20.5", + "@babel/preset-env": "7.20.2", + "@babel/preset-typescript": "7.18.6", "@mdx-js/loader": "1.6.22", - "@mdx-js/react": "1.6.22", - "@next/eslint-plugin-next": "12.1.5", - "@next/mdx": "12.1.5", + "@next/eslint-plugin-next": "13.0.6", + "@next/mdx": "12.3.4", "@nuxt/friendly-errors-webpack-plugin": "2.5.2", - "@primer/css": "19.8.2", + "@primer/css": "20.7.1", "@schemastore/package": "0.0.6", - "@svgr/webpack": "5.5.0", - "@testing-library/jest-dom": "5.16.4", - "@testing-library/react": "13.1.1", - "@testing-library/user-event": "14.1.1", + "@svgr/webpack": "6.5.1", + "@testing-library/jest-dom": "5.16.5", + "@testing-library/react": "13.4.0", + "@testing-library/user-event": "14.4.3", "@types/classnames": "2.3.0", "@types/compare-versions": "3.3.0", - "@types/compression-webpack-plugin": "9.0.0", "@types/connect-history-api-fallback": "1.3.5", - "@types/copy-webpack-plugin": "6.4.3", - "@types/express": "4.17.13", + "@types/copy-webpack-plugin": "8.0.1", + "@types/express": "4.17.14", "@types/extra-watch-webpack-plugin": "1.0.3", "@types/friendly-errors-webpack-plugin": "0.1.4", "@types/fs-extra": "9.0.13", "@types/history": "4.7.11", - "@types/jest": "27.4.1", - "@types/jest-axe": "3.5.3", + "@types/jest": "29.2.4", + "@types/jest-axe": "3.5.5", "@types/js-yaml": "4.0.5", - "@types/lodash": "4.14.182", + "@types/lodash": "4.14.191", "@types/lodash-webpack-plugin": "0.11.6", - "@types/luxon": "2.3.1", + "@types/luxon": "3.1.0", "@types/mdx-js__react": "1.5.5", - "@types/node": "17.0.30", - "@types/papaparse": "5.3.2", - "@types/react": "18.0.8", - "@types/react-copy-to-clipboard": "5.0.2", - "@types/react-dom": "18.0.3", - "@types/react-helmet": "6.1.5", + "@types/node": "18.11.11", + "@types/papaparse": "5.3.5", + "@types/react": "18.0.26", + "@types/react-copy-to-clipboard": "5.0.4", + "@types/react-dom": "18.0.9", + "@types/react-helmet": "6.1.6", "@types/react-loader-spinner": "3.1.3", "@types/react-toggle": "4.0.3", - "@types/reactstrap": "8.7.1", + "@types/reactstrap": "8.7.2", "@types/rimraf": "3.0.2", - "@types/semver": "7.3.9", + "@types/semver": "7.3.13", "@types/serialize-javascript": "5.0.2", - "@types/styled-components": "5.1.25", + "@types/styled-components": "5.1.26", "@types/url-join": "4.0.1", "@types/webpackbar": "4.0.3", - "@typescript-eslint/eslint-plugin": "5.21.0", - "@typescript-eslint/parser": "5.21.0", - "@typescript-eslint/typescript-estree": "5.21.0", - "allow-methods": "3.0.0", + "@typescript-eslint/eslint-plugin": "5.45.1", + "@typescript-eslint/parser": "5.45.1", + "@typescript-eslint/typescript-estree": "5.45.1", + "allow-methods": "4.1.2", "babel-plugin-parameter-decorator": "1.0.16", "babel-plugin-transform-typescript-metadata": "0.3.2", - "compression-webpack-plugin": "9.2.0", - "connect-history-api-fallback": "1.6.0", - "copy-webpack-plugin": "10.2.4", + "connect-history-api-fallback": "2.0.0", + "copy-webpack-plugin": "11.0.0", "cross-env": "7.0.3", - "css-loader": "6.7.1", - "dotenv": "16.0.0", - "eslint": "8.14.0", + "css-loader": "6.7.2", + "dotenv": "16.0.3", + "eslint": "8.29.0", "eslint-config-airbnb": "19.0.4", "eslint-config-airbnb-base": "15.0.0", "eslint-config-airbnb-typescript": "17.0.0", - "eslint-config-next": "12.1.5", + "eslint-config-next": "13.0.6", "eslint-config-prettier": "8.5.0", "eslint-config-react-app": "7.0.1", "eslint-formatter-codeframe": "7.32.1", - "eslint-import-resolver-ts": "0.4.2", "eslint-import-resolver-typescript": "2.7.1", "eslint-plugin-array-func": "3.1.7", "eslint-plugin-cflint": "1.0.0", "eslint-plugin-cypress": "2.12.1", "eslint-plugin-flowtype": "8.0.3", "eslint-plugin-import": "2.26.0", - "eslint-plugin-jest": "26.1.5", - "eslint-plugin-jest-dom": "4.0.1", + "eslint-plugin-jest": "27.1.6", + "eslint-plugin-jest-dom": "4.0.3", "eslint-plugin-json": "3.1.0", - "eslint-plugin-jsx-a11y": "6.5.1", + "eslint-plugin-jsx-a11y": "6.6.1", "eslint-plugin-lodash": "7.4.0", "eslint-plugin-no-loops": "0.3.0", "eslint-plugin-no-secrets": "0.8.9", "eslint-plugin-node": "11.1.0", "eslint-plugin-only-ascii": "0.0.0", - "eslint-plugin-only-warn": "1.0.3", - "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-promise": "6.0.0", - "eslint-plugin-react": "7.29.4", - "eslint-plugin-react-hooks": "4.5.0", + "eslint-plugin-only-warn": "1.1.0", + "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-promise": "6.1.1", + "eslint-plugin-react": "7.31.11", + "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-perf": "3.3.1", "eslint-plugin-security": "1.5.0", - "eslint-plugin-sonarjs": "0.13.0", + "eslint-plugin-sonarjs": "0.17.0", "eslint-plugin-unicorn": "42.0.0", - "express": "4.18.0", - "express-static-gzip": "2.1.5", + "express": "4.18.2", + "express-static-gzip": "2.1.7", "extra-watch-webpack-plugin": "1.0.3", - "fasy": "9.0.0", "file-loader": "6.2.0", "fork-ts-checker-webpack-plugin": "6.5.0", - "fs-extra": "10.1.0", + "fs-extra": "11.1.0", "gif-frames": "1.0.1", "identity-obj-proxy": "3.0.0", "is-interactive": "1.0.0", - "jest": "28.0.3", - "jest-axe": "6.0.0", - "jest-chain": "1.1.5", - "jest-extended": "2.0.0", + "jest": "29.3.1", + "jest-axe": "7.0.0", + "jest-chain": "1.1.6", + "jest-extended": "3.2.0", "jest-raw-loader": "1.0.1", - "jest-runner-eslint": "1.0.0", - "jest-styled-components": "7.0.8", + "jest-runner-eslint": "1.1.0", + "jest-styled-components": "7.1.1", "jest-transformer-mdx": "3.3.0", - "jest-watch-typeahead": "1.1.0", + "jest-watch-typeahead": "2.2.1", "js-yaml": "4.1.0", "json-loader": "0.5.7", "lodash-webpack-plugin": "0.11.6", - "map.prototype.tojson": "0.1.3", - "next-transpile-modules": "9.0.0", - "nodemon": "2.0.16", + "next-compose-plugins": "2.2.1", + "next-transpile-modules": "10.0.0", + "nodemon": "2.0.20", "npm-run-all": "4.1.5", "postcss-flexbugs-fixes": "5.0.2", - "postcss-loader": "6.2.1", - "postcss-preset-env": "7.4.4", - "prettier": "2.6.2", + "postcss-loader": "7.0.2", + "postcss-preset-env": "7.8.3", + "prettier": "2.8.1", "raw-loader": "4.0.2", - "recoil": "0.7.2", "remark-autolink-headings": "6.0.1", "remark-breaks": "2.0.1", "remark-images": "2.0.0", @@ -247,41 +243,46 @@ "remark-slug": "6.0.0", "remark-toc": "7.0.0", "rimraf": "3.0.2", - "sass": "1.51.0", - "set.prototype.tojson": "0.1.1", - "source-map-loader": "3.0.1", + "sass": "1.56.1", + "source-map-loader": "4.0.1", "style-loader": "3.3.1", - "svgo": "1.3.2", - "ts-essentials": "9.1.2", + "svgo": "3.0.2", + "ts-essentials": "9.3.0", "ts-toolbelt": "9.6.0", - "typescript": "4.6.4", + "typescript": "4.9.4", "url-loader": "4.1.1", "utility-types": "3.10.0", - "webpack": "5.72.0", - "webpack-cli": "4.9.2", + "webpack": "5.75.0", + "webpack-cli": "5.0.1", "webpackbar": "5.0.2" }, "resolutions": { - "@babel/node": "7.16.8", - "@babel/plugin-proposal-decorators": "7.17.9", - "@babel/preset-env": "7.16.11", - "@babel/preset-typescript": "7.16.7", - "@next/eslint-plugin-next": "12.1.5", - "@types/react": "18.0.8", - "@types/react-dom": "18.0.3", - "@typescript-eslint/eslint-plugin": "5.21.0", - "@typescript-eslint/parser": "5.21.0", - "@typescript-eslint/typescript-estree": "5.21.0", + "@babel/core": "7.20.5", + "@babel/node": "7.20.5", + "@babel/plugin-proposal-decorators": "7.20.5", + "@babel/preset-env": "7.20.2", + "@babel/preset-typescript": "7.18.6", + "@mdx-js/loader": "1.6.22", + "@mdx-js/react": "1.6.22", + "@next/mdx": "12.3.4", + "@tanstack/query-core": "4.19.1", + "@tanstack/react-query": "4.19.1", + "@tanstack/react-query-devtools": "4.19.1", + "@typescript-eslint/eslint-plugin": "5.45.1", + "@typescript-eslint/parser": "5.45.1", + "@typescript-eslint/typescript-estree": "5.45.1", + "axios": "1.2.1", "babel-plugin-parameter-decorator": "1.0.16", "babel-plugin-transform-typescript-metadata": "0.3.2", - "compression-webpack-plugin": "9.2.0", - "core-js": "3.22.3", - "css-loader": "6.7.1", - "eslint": "8.14.0", + "bootstrap": "4.5.2", + "classnames": "2.3.2", + "core-js": "3.26.1", + "css-loader": "6.7.2", + "eslint": "8.29.0", "eslint-config-airbnb": "19.0.4", "eslint-config-airbnb-base": "15.0.0", "eslint-config-airbnb-typescript": "17.0.0", - "eslint-config-next": "12.1.5", + "eslint-config-next": "13.0.6", "eslint-config-prettier": "8.5.0", "eslint-config-react-app": "7.0.1", "eslint-formatter-codeframe": "7.32.1", @@ -292,39 +293,47 @@ "eslint-plugin-cypress": "2.12.1", "eslint-plugin-flowtype": "8.0.3", "eslint-plugin-import": "2.26.0", - "eslint-plugin-jest": "26.1.5", - "eslint-plugin-jest-dom": "4.0.1", + "eslint-plugin-jest": "27.1.6", + "eslint-plugin-jest-dom": "4.0.3", "eslint-plugin-json": "3.1.0", - "eslint-plugin-jsx-a11y": "6.5.1", + "eslint-plugin-jsx-a11y": "6.6.1", "eslint-plugin-lodash": "7.4.0", "eslint-plugin-no-loops": "0.3.0", "eslint-plugin-no-secrets": "0.8.9", "eslint-plugin-node": "11.1.0", "eslint-plugin-only-ascii": "0.0.0", - "eslint-plugin-only-warn": "1.0.3", - "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-promise": "6.0.0", - "eslint-plugin-react": "7.29.4", - "eslint-plugin-react-hooks": "4.5.0", + "eslint-plugin-only-warn": "1.1.0", + "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-promise": "6.1.1", + "eslint-plugin-react": "7.31.11", + "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-perf": "3.3.1", "eslint-plugin-security": "1.5.0", - "eslint-plugin-sonarjs": "0.13.0", + "eslint-plugin-sonarjs": "0.17.0", "eslint-plugin-unicorn": "42.0.0", + "file-loader": "6.2.0", + "json-loader": "0.5.7", "lodash": "4.17.21", - "marked": "4.0.14", - "moment": "2.29.3", - "next": "12.1.6", - "papaparse": "5.2.0", - "postcss-loader": "6.2.1", - "react": "18.1.0", - "react-dom": "18.1.0", - "react-error-boundary": "2.2.3", + "luxon": "3.1.1", + "next": "12.3.4", + "papaparse": "5.3.2", + "prettier": "2.8.1", + "raw-loader": "4.0.2", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-error-boundary": "3.1.4", + "reactstrap": "8.10.1", + "recharts": "2.2.0", + "recoil": "0.7.6", "reflect-metadata": "0.1.13", + "regenerator-runtime": "0.13.11", + "sass": "1.56.1", + "source-map-loader": "4.0.1", "style-loader": "3.3.1", - "styled-components": "5.3.5", - "svgo": "1.3.2", - "ts-toolbelt": "9.6.0", - "typescript": "4.6.4", - "webpack": "5.72.0" + "styled-components": "5.3.6", + "typescript": "4.9.4", + "url-loader": "4.1.1", + "webpack": "5.75.0", + "webpack-cli": "5.0.1" } } diff --git a/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx b/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx index d2a0b67ee0..af75cc1bd9 100644 --- a/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx +++ b/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx @@ -2,7 +2,7 @@ import React, { useMemo, useState, useCallback } from 'react' import Axios from 'axios' import { get } from 'lodash' -import { useQuery } from 'react-query' +import { useQuery } from '@tanstack/react-query' import { AcknowledgementsError } from 'src/components/Acknowledgements/AcknowledgementsError' import styled from 'styled-components' import { Popover as PopoverBase, PopoverBody as PopoverBodyBase, PopoverHeader as PopoverHeaderBase } from 'reactstrap' diff --git a/web/src/components/Acknowledgements/AcknowledgementsCard.tsx b/web/src/components/Acknowledgements/AcknowledgementsCard.tsx index aac2ca048c..3aa3a6d3cb 100644 --- a/web/src/components/Acknowledgements/AcknowledgementsCard.tsx +++ b/web/src/components/Acknowledgements/AcknowledgementsCard.tsx @@ -2,7 +2,7 @@ import axios from 'axios' import React, { useCallback, useMemo, useState } from 'react' import { Oval as OvalLoader } from 'react-loader-spinner' -import { useQuery } from 'react-query' +import { useQuery } from '@tanstack/react-query' import PaginationComponent from 'react-reactstrap-pagination' import { CardBody } from 'reactstrap' import { AcknowledgementEpiIsl } from 'src/components/Acknowledgements/AcknowledgementEpiIsl' diff --git a/web/src/components/Acknowledgements/AcknowledgementsPage.tsx b/web/src/components/Acknowledgements/AcknowledgementsPage.tsx index 0fba221631..fa9c3a1dd1 100644 --- a/web/src/components/Acknowledgements/AcknowledgementsPage.tsx +++ b/web/src/components/Acknowledgements/AcknowledgementsPage.tsx @@ -3,7 +3,7 @@ import React, { useMemo } from 'react' import { get } from 'lodash' import { Oval as OvalLoader } from 'react-loader-spinner' -import { useQuery } from 'react-query' +import { useQuery } from '@tanstack/react-query' import { AcknowledgementsError } from 'src/components/Acknowledgements/AcknowledgementsError' import styled from 'styled-components' import { Col, Container, Row } from 'reactstrap' diff --git a/web/src/components/Common/ColCustom.tsx b/web/src/components/Common/ColCustom.tsx index fb39d689ec..53b44edf0f 100644 --- a/web/src/components/Common/ColCustom.tsx +++ b/web/src/components/Common/ColCustom.tsx @@ -1,7 +1,7 @@ import React from 'react' import { Col } from 'reactstrap' -import type { ColProps as ReactstrapColProps } from 'reactstrap/lib/Col' +import type { ColProps as ReactstrapColProps } from 'reactstrap' export interface ColProps extends Omit { readonly xxl?: number diff --git a/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx b/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx index 429306026d..f3d222862b 100644 --- a/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx +++ b/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx @@ -1,6 +1,6 @@ import React, { useMemo } from 'react' -import { useQuery } from 'react-query' +import { useQuery } from '@tanstack/react-query' import { Row, Col, CardHeader, Card, CardBody } from 'reactstrap' import { LinkExternal } from 'src/components/Link/LinkExternal' diff --git a/web/src/helpers/urlQuery.ts b/web/src/helpers/urlQuery.ts index 6bbae2ea34..8ad4279c39 100644 --- a/web/src/helpers/urlQuery.ts +++ b/web/src/helpers/urlQuery.ts @@ -9,10 +9,6 @@ export async function setUrlQuery(query: ParsedUrlQuery) { export async function updateUrlQuery(newQuery: ParsedUrlQuery) { const { query: oldQuery } = parseUrl(Router.asPath) - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore: TS2589: Type instantiation is excessively deep and possibly infinite. - const query = merge(oldQuery, newQuery) as ParsedUrlQuery - + const query = merge(oldQuery, newQuery) return setUrlQuery(query) } diff --git a/web/src/io/getCountryColor.ts b/web/src/io/getCountryColor.ts index e2ee0e8cd4..c5c28755c3 100644 --- a/web/src/io/getCountryColor.ts +++ b/web/src/io/getCountryColor.ts @@ -22,5 +22,6 @@ export function getCountryStrokeDashArray(country: string) { } export function shouldPlotCountry(country: string): boolean { - return get(countriesToPlot, country, 'False') === 'True' + const shouldPlot = get(countriesToPlot, country, 'False') as 'False' | 'True' + return shouldPlot === 'True' } diff --git a/web/src/pages/_app.tsx b/web/src/pages/_app.tsx index 729a839d1c..18d39abd90 100644 --- a/web/src/pages/_app.tsx +++ b/web/src/pages/_app.tsx @@ -5,9 +5,9 @@ import 'css.escape' import dynamic from 'next/dynamic' import React, { useCallback, useMemo } from 'react' -import { QueryClient, QueryClientProvider } from 'react-query' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { MutableSnapshot, RecoilRoot } from 'recoil' -import { ReactQueryDevtools } from 'react-query/devtools' +import { ReactQueryDevtools } from '@tanstack/react-query-devtools' import type { AppProps } from 'next/app' import { parseUrl } from 'src/helpers/parseUrl' diff --git a/web/yarn.lock b/web/yarn.lock index 85be12ec09..f13fcbe6d2 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2,12 +2,18 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" + integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== + "@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: - "@jridgewell/trace-mapping" "^0.3.0" + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" "@babel/code-frame@7.12.11": version "7.12.11" @@ -16,470 +22,313 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.16.7" + "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" - integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== - -"@babel/compat-data@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" - integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== - -"@babel/core@7.12.9": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0", "@babel/compat-data@^7.20.1": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733" + integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g== -"@babel/core@7.17.9", "@babel/core@^7.11.6": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.9.tgz#6bae81a06d95f4d0dec5bb9d74bbc1f58babdcfe" - integrity sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw== +"@babel/core@7.12.9", "@babel/core@7.20.5", "@babel/core@7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.19.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.5.tgz#45e2114dc6cd4ab167f81daf7820e8fa1250d113" + integrity sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ== dependencies: "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.9" - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helpers" "^7.17.9" - "@babel/parser" "^7.17.9" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.9" - "@babel/types" "^7.17.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-module-transforms" "^7.20.2" + "@babel/helpers" "^7.20.5" + "@babel/parser" "^7.20.5" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/core@7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" - integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.0" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.0" - "@babel/parser" "^7.9.0" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.16.0": - version "7.17.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" - integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.3" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - "@babel/eslint-parser@^7.16.3": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz#eabb24ad9f0afa80e5849f8240d0e5facc2d90d6" - integrity sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA== + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4" + integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== dependencies: - eslint-scope "^5.1.1" + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.12.5", "@babel/generator@^7.17.3", "@babel/generator@^7.7.2", "@babel/generator@^7.9.0": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" - integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== +"@babel/generator@^7.20.5", "@babel/generator@^7.7.2": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" + integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== dependencies: - "@babel/types" "^7.17.0" + "@babel/types" "^7.20.5" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" - source-map "^0.5.0" -"@babel/generator@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.9.tgz#f4af9fd38fa8de143c29fce3f71852406fc1e2fc" - integrity sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ== +"@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" + "@babel/types" "^7.18.6" -"@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== dependencies: - "@babel/types" "^7.16.7" + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" + integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/compat-data" "^7.20.0" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + semver "^6.3.0" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.2", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.8.3": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz#327154eedfb12e977baa4ecc72e5806720a85a06" + integrity sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww== dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-compilation-targets@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" - integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" + integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.2.1" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6", "@babel/helper-create-class-features-plugin@^7.8.3": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" - integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-class-features-plugin@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d" - integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" - integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" - -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: - "@babel/types" "^7.16.7" + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" -"@babel/helper-member-expression-to-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" - integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== dependencies: - "@babel/types" "^7.17.0" + "@babel/types" "^7.18.9" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.9.0": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz#3c3b03cc6617e33d68ef5a27a67419ac5199ccd0" - integrity sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA== +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6", "@babel/helper-module-transforms@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz#ac53da669501edd37e658602a21ba14c08748712" + integrity sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/helper-module-transforms@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" - integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.1" + "@babel/types" "^7.20.2" -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-simple-access@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" - integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.12.5", "@babel/helpers@^7.17.2", "@babel/helpers@^7.9.0": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" - integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" - "@babel/types" "^7.17.0" - -"@babel/helpers@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a" - integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.9" - "@babel/types" "^7.17.0" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + +"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" + integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.19.1" + "@babel/types" "^7.19.0" + +"@babel/helper-simple-access@^7.19.4", "@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/helpers@^7.20.5": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" + integrity sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/node@7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.16.8.tgz#57ba1dfa63dbcc72d477f05597ce07f1c4f8b558" - integrity sha512-V2dopEtPUL4LD+e8UtMIZB6BbsmMsS/7E1ZAvWNINzBfi7Cf3X9MLCpzHVZT4HeeF1lQl72IRtqqVt2RUImwyA== +"@babel/node@7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.20.5.tgz#5afdc32f4e195019b6c566f418ad630a9ee42695" + integrity sha512-ElSr40UtumWE4fYYF1xfLP2C6b9nfS/rswK7YYpLo9HDGEXGXEAWZaGCxIirxGIDyoV0rbl6jV1LyFMQ6ZOQSA== dependencies: - "@babel/register" "^7.16.8" + "@babel/register" "^7.18.9" commander "^4.0.1" - core-js "^3.20.2" + core-js "^3.26.0" node-environment-flags "^1.0.5" - regenerator-runtime "^0.13.4" + regenerator-runtime "^0.13.11" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.9.0": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" - integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== - -"@babel/parser@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" - integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" + integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== +"@babel/plugin-proposal-async-generator-functions@^7.20.1": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz#352f02baa5d69f4e7529bdac39aaa02d41146af9" + integrity sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@7.8.3": @@ -490,65 +339,64 @@ "@babel/helper-create-class-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== +"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" - integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.6" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@7.17.9", "@babel/plugin-proposal-decorators@7.8.3", "@babel/plugin-proposal-decorators@^7.16.4": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz#67a1653be9c77ce5b6c318aa90c8287b87831619" - integrity sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA== +"@babel/plugin-proposal-decorators@7.20.5", "@babel/plugin-proposal-decorators@7.8.3", "@babel/plugin-proposal-decorators@^7.16.4": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.5.tgz#28ba1a0e5044664a512967a19407d7fc26925394" + integrity sha512-Lac7PpRJXcC3s9cKsBfl+uc+DYXU5FD06BrTFunQO6QIQT+DwyzDPURAowI3bcvD1dZF/ank1Z5rstUJn3Hn4Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.9" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.0" - charcodes "^0.2.0" + "@babel/helper-create-class-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/plugin-syntax-decorators" "^7.19.0" -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@7.8.3": @@ -559,12 +407,12 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator@7.8.3": @@ -575,12 +423,12 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== +"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-proposal-object-rest-spread@7.12.1": @@ -592,23 +440,23 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-object-rest-spread@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" - integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== +"@babel/plugin-proposal-object-rest-spread@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz#a556f59d555f06961df1e572bb5eca864c84022d" + integrity sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ== dependencies: - "@babel/compat-data" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.20.1" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-proposal-optional-chaining@7.9.0": @@ -619,40 +467,40 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== +"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== +"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135" + integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -682,12 +530,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d" - integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A== +"@babel/plugin-syntax-decorators@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" + integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -703,12 +551,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.16.7", "@babel/plugin-syntax-flow@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" - integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== +"@babel/plugin-syntax-flow@^7.18.6", "@babel/plugin-syntax-flow@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" + integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -731,12 +586,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" - integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== +"@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -794,93 +649,94 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== +"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== +"@babel/plugin-transform-block-scoping@^7.20.2": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz#401215f9dc13dc5262940e2e527c9536b3d7f237" + integrity sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-classes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== +"@babel/plugin-transform-classes@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz#c0033cf1916ccf78202d04be4281d161f6709bb2" + integrity sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-destructuring@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz#c445f75819641788a27a0a3a759d9df911df6abc" - integrity sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg== +"@babel/plugin-transform-destructuring@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz#c23741cfa44ddd35f5e53896e88c75331b8b2792" + integrity sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-flow-strip-types@7.9.0": version "7.9.0" @@ -891,123 +747,121 @@ "@babel/plugin-syntax-flow" "^7.8.3" "@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" - integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg== + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f" + integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-flow" "^7.16.7" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-flow" "^7.18.6" -"@babel/plugin-transform-for-of@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== +"@babel/plugin-transform-modules-amd@^7.19.6": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz#aca391801ae55d19c4d8d2ebfeaa33df5f2a2cbd" + integrity sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" - integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== +"@babel/plugin-transform-modules-commonjs@^7.19.6": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz#25b32feef24df8038fc1ec56038917eacb0b730c" + integrity sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-simple-access" "^7.19.4" -"@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" - integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== +"@babel/plugin-transform-modules-systemjs@^7.19.6": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz#59e2a84064b5736a4471b1aa7b13d4431d327e0d" + integrity sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-validator-identifier" "^7.19.1" -"@babel/plugin-transform-modules-umd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" - integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-new-target@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.1": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz#f8f9186c681d10c3de7620c916156d893c8a019e" + integrity sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz#6cc273c2f612a6a50cb657e63ee1303e5e68d10a" - integrity sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw== +"@babel/plugin-transform-react-constant-elements@^7.18.12": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz#3f02c784e0b711970d7d8ccc96c4359d64e27ac7" + integrity sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-react-display-name@7.8.3": version "7.8.3" @@ -1016,66 +870,67 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.16.7", "@babel/plugin-transform-react-display-name@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" - integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.18.6", "@babel/plugin-transform-react-display-name@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx-development@^7.16.7", "@babel/plugin-transform-react-jsx-development@^7.9.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== +"@babel/plugin-transform-react-jsx-development@^7.18.6", "@babel/plugin-transform-react-jsx-development@^7.9.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.18.6" "@babel/plugin-transform-react-jsx-self@^7.9.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e" - integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7" + integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx-source@^7.9.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0" - integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86" + integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.9.1": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" - integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== +"@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.9.1": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9" + integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.16.7" - "@babel/types" "^7.17.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.19.0" -"@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" - integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" - integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== dependencies: - regenerator-transform "^0.14.2" + "@babel/helper-plugin-utils" "^7.20.2" + regenerator-transform "^0.15.1" -"@babel/plugin-transform-reserved-words@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-runtime@7.9.0": version "7.9.0" @@ -1088,108 +943,109 @@ semver "^5.5.1" "@babel/plugin-transform-runtime@^7.16.4": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" - integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194" + integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-template-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-typescript@^7.16.7": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" - integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-typescript" "^7.16.7" - -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/preset-env@7.16.11", "@babel/preset-env@7.9.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" - integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== - dependencies: - "@babel/compat-data" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.16.7" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" + integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.18.6": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz#91515527b376fc122ba83b13d70b01af8fe98f3f" + integrity sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.20.2" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@7.20.2", "@babel/preset-env@7.9.0", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.19.4": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" + integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== + dependencies: + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.20.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1199,44 +1055,44 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.16.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.16.8" - "@babel/plugin-transform-modules-systemjs" "^7.16.7" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.16.7" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.20.2" + "@babel/plugin-transform-classes" "^7.20.2" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.20.2" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.19.6" + "@babel/plugin-transform-modules-commonjs" "^7.19.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.8" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.20.2" + "@babel/types" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" semver "^6.3.0" "@babel/preset-modules@^0.1.5": @@ -1262,31 +1118,31 @@ "@babel/plugin-transform-react-jsx-self" "^7.9.0" "@babel/plugin-transform-react-jsx-source" "^7.9.0" -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" - integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== +"@babel/preset-react@^7.16.0", "@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.16.7" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/preset-typescript@7.16.7", "@babel/preset-typescript@7.9.0", "@babel/preset-typescript@^7.16.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" - integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== +"@babel/preset-typescript@7.18.6", "@babel/preset-typescript@7.9.0", "@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" -"@babel/register@^7.16.8": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.17.0.tgz#8051e0b7cb71385be4909324f072599723a1f084" - integrity sha512-UNZsMAZ7uKoGHo1HlEXfteEOYssf64n/PNLHGqOKq/bgYcu/4LrQWAHJwSCb3BRZK8Hi5gkJdRcwrGTO2wtRCg== +"@babel/register@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.18.9.tgz#1888b24bc28d5cc41c412feb015e9ff6b96e439c" + integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1295,12 +1151,12 @@ source-map-support "^0.5.16" "@babel/runtime-corejs3@^7.10.2": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz#fdca2cd05fba63388babe85d349b6801b008fd13" - integrity sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.6.tgz#63dae945963539ab0ad578efbf3eff271e7067ae" + integrity sha512-tqeujPiuEfcH067mx+7otTQWROVMKHXEaOQcAeNV5dDdbPWvPcFA8/W9LXw2NfjNmOetqLl03dfnG2WALPlsRQ== dependencies: - core-js-pure "^3.20.2" - regenerator-runtime "^0.13.4" + core-js-pure "^3.25.1" + regenerator-runtime "^0.13.11" "@babel/runtime@7.9.0": version "7.9.0" @@ -1309,67 +1165,45 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" - integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.17.8": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" - integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.12.7", "@babel/template@^7.16.7", "@babel/template@^7.3.3", "@babel/template@^7.8.6": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2", "@babel/traverse@^7.9.0": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" - "@babel/types" "^7.17.0" +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@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.20.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" + integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.18.10", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133" + integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.5" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.5" + "@babel/types" "^7.20.5" debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.9.tgz#1f9b207435d9ae4a8ed6998b2b82300d83c37a0d" - integrity sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.9" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.9" - "@babel/types" "^7.17.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.9.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" + integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1377,54 +1211,70 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@csstools/postcss-color-function@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz#229966327747f58fbe586de35daa139db3ce1e5d" - integrity sha512-5D5ND/mZWcQoSfYnSPsXtuiFxhzmhxt6pcjrFLJyldj+p0ZN2vvRpYNX+lahFTtMhAYOa2WmkdGINr0yP0CvGA== +"@csstools/postcss-cascade-layers@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz#8a997edf97d34071dd2e37ea6022447dd9e795ad" + integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== + dependencies: + "@csstools/selector-specificity" "^2.0.2" + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-color-function@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" + integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-font-format-keywords@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz#7e7df948a83a0dfb7eb150a96e2390ac642356a1" - integrity sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q== +"@csstools/postcss-font-format-keywords@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" + integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-hwb-function@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.0.tgz#d6785c1c5ba8152d1d392c66f3a6a446c6034f6d" - integrity sha512-VSTd7hGjmde4rTj1rR30sokY3ONJph1reCBTUXqeW1fKwETPy1x4t/XIeaaqbMbC5Xg4SM/lyXZ2S8NELT2TaA== +"@csstools/postcss-hwb-function@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" + integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-ic-unit@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.0.tgz#f484db59fc94f35a21b6d680d23b0ec69b286b7f" - integrity sha512-i4yps1mBp2ijrx7E96RXrQXQQHm6F4ym1TOD0D69/sjDjZvQ22tqiEvaNw7pFZTUO5b9vWRHzbHzP9+UKuw+bA== +"@csstools/postcss-ic-unit@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" + integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-is-pseudo-class@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.2.tgz#a834ca11a43d6ed9bc9e3ff53c80d490a4b1aaad" - integrity sha512-L9h1yxXMj7KpgNzlMrw3isvHJYkikZgZE4ASwssTnGEH8tm50L6QsM9QQT5wR4/eO5mU0rN5axH7UzNxEYg5CA== +"@csstools/postcss-is-pseudo-class@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" + integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== dependencies: + "@csstools/selector-specificity" "^2.0.0" postcss-selector-parser "^6.0.10" -"@csstools/postcss-normalize-display-values@^1.0.0": +"@csstools/postcss-nested-calc@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz#ce698f688c28517447aedf15a9037987e3d2dc97" - integrity sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ== + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" + integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-oklab-function@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.0.tgz#e9a269487a292e0930760948e923e1d46b638ee6" - integrity sha512-e/Q5HopQzmnQgqimG9v3w2IG4VRABsBq3itOcn4bnm+j4enTgQZ0nWsaH/m9GV2otWGQ0nwccYL5vmLKyvP1ww== +"@csstools/postcss-normalize-display-values@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" + integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-oklab-function@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" + integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" @@ -1436,140 +1286,188 @@ dependencies: postcss-value-parser "^4.2.0" +"@csstools/postcss-stepped-value-functions@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" + integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-text-decoration-shorthand@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" + integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-trigonometric-functions@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" + integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-unset-value@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" + integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== + +"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" + integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== + "@discoveryjs/json-ext@^0.5.0": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" - integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== - -"@emotion/babel-plugin@^11.7.1": - version "11.7.2" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz#fec75f38a6ab5b304b0601c74e2a5e77c95e5fa0" - integrity sha512-6mGSCWi9UzXut/ZAN6lGFu33wGR3SJisNl3c0tvlmb8XChH1b2SUvxvnOh7hvLpqyRdHHU9AiazV3Cwbk5SXKQ== - dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/runtime" "^7.13.10" - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.5" - "@emotion/serialize" "^1.0.2" - babel-plugin-macros "^2.6.1" + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@emotion/babel-plugin@^11.10.5": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c" + integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/serialize" "^1.1.1" + babel-plugin-macros "^3.1.0" convert-source-map "^1.5.0" escape-string-regexp "^4.0.0" find-root "^1.1.0" source-map "^0.5.7" - stylis "4.0.13" + stylis "4.1.3" -"@emotion/cache@^11.4.0", "@emotion/cache@^11.7.1": - version "11.7.1" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539" - integrity sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A== +"@emotion/cache@^11.10.5", "@emotion/cache@^11.4.0": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12" + integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA== dependencies: - "@emotion/memoize" "^0.7.4" - "@emotion/sheet" "^1.1.0" - "@emotion/utils" "^1.0.0" - "@emotion/weak-memoize" "^0.2.5" - stylis "4.0.13" + "@emotion/memoize" "^0.8.0" + "@emotion/sheet" "^1.2.1" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" + stylis "4.1.3" -"@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/hash@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" + integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== "@emotion/is-prop-valid@^1.1.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.2.tgz#34ad6e98e871aa6f7a20469b602911b8b11b3a95" - integrity sha512-3QnhqeL+WW88YjYbQL5gUIkthuMw7a0NGbZ7wfFVk2kg/CK5w8w5FFa0RzWjyY1+sujN0NWbtSHH6OJmWHtJpQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" + integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== dependencies: - "@emotion/memoize" "^0.7.4" + "@emotion/memoize" "^0.8.0" -"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" - integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== "@emotion/react@^11.8.1": - version "11.9.0" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.9.0.tgz#b6d42b1db3bd7511e7a7c4151dc8bc82e14593b8" - integrity sha512-lBVSF5d0ceKtfKCDQJveNAtkC7ayxpVlgOohLgXqRwqWr9bOf4TZAFFyIcNngnV6xK6X4x2ZeXq7vliHkoVkxQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@emotion/babel-plugin" "^11.7.1" - "@emotion/cache" "^11.7.1" - "@emotion/serialize" "^1.0.3" - "@emotion/utils" "^1.1.0" - "@emotion/weak-memoize" "^0.2.5" + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d" + integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.5" + "@emotion/cache" "^11.10.5" + "@emotion/serialize" "^1.1.1" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965" - integrity sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A== - dependencies: - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.4" - "@emotion/unitless" "^0.7.5" - "@emotion/utils" "^1.0.0" - csstype "^3.0.2" - -"@emotion/serialize@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.3.tgz#99e2060c26c6292469fb30db41f4690e1c8fea63" - integrity sha512-2mSSvgLfyV3q+iVh3YWgNlUc2a9ZlDU7DjuP5MjK3AXRR0dYigCrP99aeFtaB2L/hjfEZdSThn5dsZ0ufqbvsA== +"@emotion/serialize@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0" + integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA== dependencies: - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.4" - "@emotion/unitless" "^0.7.5" - "@emotion/utils" "^1.0.0" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/unitless" "^0.8.0" + "@emotion/utils" "^1.2.0" csstype "^3.0.2" -"@emotion/sheet@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" - integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g== +"@emotion/sheet@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c" + integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA== "@emotion/stylis@^0.8.4": 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.4", "@emotion/unitless@^0.7.5": +"@emotion/unitless@^0.7.4": version "0.7.5" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf" - integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== +"@emotion/unitless@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" + integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== + +"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" + integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== -"@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== +"@emotion/utils@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" + integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== -"@eslint/eslintrc@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.2.tgz#4989b9e8c0216747ee7cca314ae73791bb281aae" - integrity sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg== +"@emotion/weak-memoize@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" + integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.1" - globals "^13.9.0" + espree "^9.4.0" + globals "^13.15.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" - minimatch "^3.0.4" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== +"@floating-ui/core@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.0.4.tgz#03066eaea8e9b2a2cd3f5aaa60f1e0f580ebe88e" + integrity sha512-FPFLbg2b06MIw1dqk2SOEMAMX3xlrreGjcui5OTxfBDtaKTmh0kioOVjT8gcfl58juawL/yF+S+gnq8aUYQx/Q== + +"@floating-ui/dom@^1.0.1": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.0.9.tgz#3ae1d3e776bc90b9d33b1922f9498fb6f80f3b12" + integrity sha512-nF9P6/BoARdt+h+CdUW3td4EUVngeDONCGuzRgnZveRZiJETx63cxhinE0JaPPC2tbcdTY9IGZocS5/7ag3xRg== + dependencies: + "@floating-ui/core" "^1.0.4" + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" @@ -1600,110 +1498,110 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.0.2.tgz#d11e8b43ae431ae9b3112656848417ae4008fcad" - integrity sha512-tiRpnMeeyQuuzgL5UNSeiqMwF8UOWPbAE5rzcu/1zyq4oPG2Ox6xm4YCOruwbp10F8odWc+XwVxTyGzMSLMqxA== +"@jest/console@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.3.1.tgz#3e3f876e4e47616ea3b1464b9fbda981872e9583" + integrity sha512-IRE6GD47KwcqA09RIWrabKdHPiKDGgtAL31xDxbi/RjQMsr+lY+ppxmHwY0dUEV3qvvxZzoe5Hl0RXZJOjQNUg== dependencies: - "@jest/types" "^28.0.2" + "@jest/types" "^29.3.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^28.0.2" - jest-util "^28.0.2" + jest-message-util "^29.3.1" + jest-util "^29.3.1" slash "^3.0.0" -"@jest/core@^28.0.3": - version "28.0.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.0.3.tgz#2b8223914ef6ae16ff740e65235ef8ef49c46d52" - integrity sha512-cCQW06vEZ+5r50SB06pOnSWsOBs7F+lswPYnKKfBz1ncLlj1sMqmvjgam8q40KhlZ8Ut4eNAL2Hvfx4BKIO2FA== +"@jest/core@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.3.1.tgz#bff00f413ff0128f4debec1099ba7dcd649774a1" + integrity sha512-0ohVjjRex985w5MmO5L3u5GR1O30DexhBSpuwx2P+9ftyqHdJXnk7IUWiP80oHMvt7ubHCJHxV0a0vlKVuZirw== dependencies: - "@jest/console" "^28.0.2" - "@jest/reporters" "^28.0.3" - "@jest/test-result" "^28.0.2" - "@jest/transform" "^28.0.3" - "@jest/types" "^28.0.2" + "@jest/console" "^29.3.1" + "@jest/reporters" "^29.3.1" + "@jest/test-result" "^29.3.1" + "@jest/transform" "^29.3.1" + "@jest/types" "^29.3.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^28.0.2" - jest-config "^28.0.3" - jest-haste-map "^28.0.2" - jest-message-util "^28.0.2" - jest-regex-util "^28.0.2" - jest-resolve "^28.0.3" - jest-resolve-dependencies "^28.0.3" - jest-runner "^28.0.3" - jest-runtime "^28.0.3" - jest-snapshot "^28.0.3" - jest-util "^28.0.2" - jest-validate "^28.0.2" - jest-watcher "^28.0.2" + jest-changed-files "^29.2.0" + jest-config "^29.3.1" + jest-haste-map "^29.3.1" + jest-message-util "^29.3.1" + jest-regex-util "^29.2.0" + jest-resolve "^29.3.1" + jest-resolve-dependencies "^29.3.1" + jest-runner "^29.3.1" + jest-runtime "^29.3.1" + jest-snapshot "^29.3.1" + jest-util "^29.3.1" + jest-validate "^29.3.1" + jest-watcher "^29.3.1" micromatch "^4.0.4" - pretty-format "^28.0.2" - rimraf "^3.0.0" + pretty-format "^29.3.1" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.0.2.tgz#a865949d876b2d364b979bbc0a46338ffd23de26" - integrity sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg== +"@jest/environment@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.3.1.tgz#eb039f726d5fcd14698acd072ac6576d41cfcaa6" + integrity sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag== dependencies: - "@jest/fake-timers" "^28.0.2" - "@jest/types" "^28.0.2" + "@jest/fake-timers" "^29.3.1" + "@jest/types" "^29.3.1" "@types/node" "*" - jest-mock "^28.0.2" + jest-mock "^29.3.1" -"@jest/expect-utils@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.0.2.tgz#0a055868d225261eac82a12013e2e0735238774d" - integrity sha512-YryfH2zN5c7M8eLtn9oTBRj1sfD+X4cHNXJnTejqCveOS33wADEZUxJ7de5++lRvByNpRpfAnc8zTK7yrUJqgA== +"@jest/expect-utils@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.3.1.tgz#531f737039e9b9e27c42449798acb5bba01935b6" + integrity sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g== dependencies: - jest-get-type "^28.0.2" + jest-get-type "^29.2.0" -"@jest/expect@^28.0.3": - version "28.0.3" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.0.3.tgz#80e0233bee62586e1112f904d28b904dd1143ef2" - integrity sha512-VEzZr85bqNomgayQkR7hWG5HnbZYWYWagQriZsixhLmOzU6PCpMP61aeVhkCoRrg7ri5f7JDpeTPzDAajIwFHw== +"@jest/expect@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.3.1.tgz#456385b62894349c1d196f2d183e3716d4c6a6cd" + integrity sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg== dependencies: - expect "^28.0.2" - jest-snapshot "^28.0.3" + expect "^29.3.1" + jest-snapshot "^29.3.1" -"@jest/fake-timers@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.0.2.tgz#d36e62bc58f39d65ea6adac1ff7749e63aff05f3" - integrity sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA== +"@jest/fake-timers@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.3.1.tgz#b140625095b60a44de820876d4c14da1aa963f67" + integrity sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A== dependencies: - "@jest/types" "^28.0.2" - "@sinonjs/fake-timers" "^9.1.1" + "@jest/types" "^29.3.1" + "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^28.0.2" - jest-mock "^28.0.2" - jest-util "^28.0.2" + jest-message-util "^29.3.1" + jest-mock "^29.3.1" + jest-util "^29.3.1" -"@jest/globals@^28.0.3": - version "28.0.3" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.0.3.tgz#70f68a06c863d1c9d14aea151c69b9690e3efeb4" - integrity sha512-q/zXYI6CKtTSIt1WuTHBYizJhH7K8h+xG5PE3C0oawLlPIvUMDYmpj0JX0XsJwPRLCsz/fYXHZVG46AaEhSPmw== +"@jest/globals@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.3.1.tgz#92be078228e82d629df40c3656d45328f134a0c6" + integrity sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q== dependencies: - "@jest/environment" "^28.0.2" - "@jest/expect" "^28.0.3" - "@jest/types" "^28.0.2" + "@jest/environment" "^29.3.1" + "@jest/expect" "^29.3.1" + "@jest/types" "^29.3.1" + jest-mock "^29.3.1" -"@jest/reporters@^28.0.3": - version "28.0.3" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.0.3.tgz#9996189e5552e37fcdffe0f41c07754f5d2ea854" - integrity sha512-xrbIc7J/xwo+D7AY3enAR9ZWYCmJ8XIkstTukTGpKDph0gLl/TJje9jl3dssvE4KJzYqMKiSrnE5Nt68I4fTEg== +"@jest/reporters@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.3.1.tgz#9a6d78c109608e677c25ddb34f907b90e07b4310" + integrity sha512-GhBu3YFuDrcAYW/UESz1JphEAbvUjaY2vShRZRoRY1mxpCMB3yGSJ4j9n0GxVlEOdCf7qjvUfBCrTUUqhVfbRA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^28.0.2" - "@jest/test-result" "^28.0.2" - "@jest/transform" "^28.0.3" - "@jest/types" "^28.0.2" - "@jridgewell/trace-mapping" "^0.3.7" + "@jest/console" "^29.3.1" + "@jest/test-result" "^29.3.1" + "@jest/transform" "^29.3.1" + "@jest/types" "^29.3.1" + "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -1715,47 +1613,48 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-util "^28.0.2" - jest-worker "^28.0.2" + jest-message-util "^29.3.1" + jest-util "^29.3.1" + jest-worker "^29.3.1" slash "^3.0.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^9.0.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/schemas@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.0.2.tgz#08c30df6a8d07eafea0aef9fb222c5e26d72e613" - integrity sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA== +"@jest/schemas@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" + integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== dependencies: - "@sinclair/typebox" "^0.23.3" + "@sinclair/typebox" "^0.24.1" -"@jest/source-map@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.0.2.tgz#914546f4410b67b1d42c262a1da7e0406b52dc90" - integrity sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw== +"@jest/source-map@^29.2.0": + version "29.2.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744" + integrity sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.15" callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.0.2.tgz#bc8e15a95347e3c2149572ae06a5a6fed939c522" - integrity sha512-4EUqgjq9VzyUiVTvZfI9IRJD6t3NYBNP4f+Eq8Zr93+hkJ0RrGU4OBTw8tfNzidKX+bmuYzn8FxqpxOPIGGCMA== +"@jest/test-result@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.3.1.tgz#92cd5099aa94be947560a24610aa76606de78f50" + integrity sha512-qeLa6qc0ddB0kuOZyZIhfN5q0e2htngokyTWsGriedsDhItisW7SDYZ7ceOe57Ii03sL988/03wAcBh3TChMGw== dependencies: - "@jest/console" "^28.0.2" - "@jest/types" "^28.0.2" + "@jest/console" "^29.3.1" + "@jest/types" "^29.3.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.0.2.tgz#7669b7d8ff2aa7a8221b11bb37cce552de81b1bb" - integrity sha512-zhnZ8ydkZQTPL7YucB86eOlD79zPy5EGSUKiR2Iv93RVEDU6OEP33kwDBg70ywOcxeJGDRhyo09q7TafNCBiIg== +"@jest/test-sequencer@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.3.1.tgz#fa24b3b050f7a59d48f7ef9e0b782ab65123090d" + integrity sha512-IqYvLbieTv20ArgKoAMyhLHNrVHJfzO6ARZAbQRlY4UGWfdDnLlZEF0BvKOMd77uIiIjSZRwq3Jb3Fa3I8+2UA== dependencies: - "@jest/test-result" "^28.0.2" + "@jest/test-result" "^29.3.1" graceful-fs "^4.2.9" - jest-haste-map "^28.0.2" + jest-haste-map "^29.3.1" slash "^3.0.0" "@jest/transform@^27.5.1": @@ -1779,22 +1678,22 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/transform@^28.0.3": - version "28.0.3" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.0.3.tgz#591fb5ebc1d84db5c5f21e1225c7406c35f5eb1e" - integrity sha512-+Y0ikI7SwoW/YbK8t9oKwC70h4X2Gd0OVuz5tctRvSV/EDQU00AAkoqevXgPSSFimUmp/sp7Yl8s/1bExDqOIg== +"@jest/transform@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.3.1.tgz#1e6bd3da4af50b5c82a539b7b1f3770568d6e36d" + integrity sha512-8wmCFBTVGYqFNLWfcOWoVuMuKYPUBTnTMDkdvFtAYELwDOl9RGwOsvQWGPFxDJ8AWY9xM/8xCXdqmPK3+Q5Lug== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^28.0.2" - "@jridgewell/trace-mapping" "^0.3.7" + "@jest/types" "^29.3.1" + "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^28.0.2" - jest-regex-util "^28.0.2" - jest-util "^28.0.2" + jest-haste-map "^29.3.1" + jest-regex-util "^29.2.0" + jest-util "^29.3.1" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -1811,43 +1710,65 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.0.2.tgz#70b9538c1863fb060b2f438ca008b5563d00c5b4" - integrity sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A== +"@jest/types@^29.3.1": + version "29.3.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" + integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== dependencies: - "@jest/schemas" "^28.0.2" + "@jest/schemas" "^29.0.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" - integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.11" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" - integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== - -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: - "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.7": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: - "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" "@mdx-js/loader@1.6.22": version "1.6.22" @@ -1898,78 +1819,155 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.6.tgz#5f44823a78335355f00f1687cfc4f1dafa3eca08" integrity sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA== -"@next/eslint-plugin-next@12.1.5": - version "12.1.5" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.5.tgz#273885b35e6bbcd40ff1436d2a8d0ec03fb6f6ef" - integrity sha512-Cnb8ERC5bNKBFrnMH6203sp/b0Y78QRx1XsFu+86oBtDBmQmOFoHu7teQjHm69ER73XKK3aGaeoLiXacHoUFsg== +"@next/env@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.4.tgz#c787837d36fcad75d72ff8df6b57482027d64a47" + integrity sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A== + +"@next/eslint-plugin-next@13.0.6": + version "13.0.6" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.6.tgz#4d73774ede50183c5ae5bab01ec4a7dd2d11fed5" + integrity sha512-JUANdYNCddhmQBjQQPxEJYL7GMCqYtbfrdmtX7c013srig7waNCG69Aoql7CgAgjdy8jn1ovHVdcF/NB46XN3Q== dependencies: glob "7.1.7" -"@next/mdx@12.1.5": - version "12.1.5" - resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-12.1.5.tgz#302fbf195b406d32423f6a0317771d3b27f88e8e" - integrity sha512-3R8J/3jKz4bCAOWDKVhxXoUETy3eqC+zaNlgwLK7LAid3UZjioVZ+jxIJmopd1auqjpev7doKeRE2p8YG55QLg== +"@next/mdx@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-12.3.4.tgz#1bd3e4df37040ba20fceff33d25791a3199745d3" + integrity sha512-YTF/ph9NMKjmrNsr8O+y3IiZee9TaxSd6051qI0Fj/du75pKRRZ1DnOX6ZS7mMgswH7VMERVV7fBZxmJr9sN7Q== "@next/swc-android-arm-eabi@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz#79a35349b98f2f8c038ab6261aa9cd0d121c03f9" integrity sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ== +"@next/swc-android-arm-eabi@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.4.tgz#fd1c2dafe92066c6120761c6a39d19e666dc5dd0" + integrity sha512-cM42Cw6V4Bz/2+j/xIzO8nK/Q3Ly+VSlZJTa1vHzsocJRYz8KT6MrreXaci2++SIZCF1rVRCDgAg5PpqRibdIA== + "@next/swc-android-arm64@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz#ec08ea61794f8752c8ebcacbed0aafc5b9407456" integrity sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew== +"@next/swc-android-arm64@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.3.4.tgz#11a146dae7b8bca007239b21c616e83f77b19ed4" + integrity sha512-5jf0dTBjL+rabWjGj3eghpLUxCukRhBcEJgwLedewEA/LJk2HyqCvGIwj5rH+iwmq1llCWbOky2dO3pVljrapg== + "@next/swc-darwin-arm64@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz#d1053805615fd0706e9b1667893a72271cd87119" integrity sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw== +"@next/swc-darwin-arm64@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.4.tgz#14ac8357010c95e67327f47082af9c9d75d5be79" + integrity sha512-DqsSTd3FRjQUR6ao0E1e2OlOcrF5br+uegcEGPVonKYJpcr0MJrtYmPxd4v5T6UCJZ+XzydF7eQo5wdGvSZAyA== + "@next/swc-darwin-x64@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz#2d1b926a22f4c5230d5b311f9c56cfdcc406afec" integrity sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg== +"@next/swc-darwin-x64@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.4.tgz#e7dc63cd2ac26d15fb84d4d2997207fb9ba7da0f" + integrity sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ== + +"@next/swc-freebsd-x64@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.4.tgz#fe7ceec58746fdf03f1fcb37ec1331c28e76af93" + integrity sha512-KM9JXRXi/U2PUM928z7l4tnfQ9u8bTco/jb939pdFUHqc28V43Ohd31MmZD1QzEK4aFlMRaIBQOWQZh4D/E5lQ== + "@next/swc-linux-arm-gnueabihf@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz#c021918d2a94a17f823106a5e069335b8a19724f" integrity sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw== +"@next/swc-linux-arm-gnueabihf@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.4.tgz#d7016934d02bfc8bd69818ffb0ae364b77b17af7" + integrity sha512-3zqD3pO+z5CZyxtKDTnOJ2XgFFRUBciOox6EWkoZvJfc9zcidNAQxuwonUeNts6Xbm8Wtm5YGIRC0x+12YH7kw== + "@next/swc-linux-arm64-gnu@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz#ac55c07bfabde378dfa0ce2b8fc1c3b2897e81ae" integrity sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ== +"@next/swc-linux-arm64-gnu@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.4.tgz#43a7bc409b03487bff5beb99479cacdc7bd29af5" + integrity sha512-kiX0vgJGMZVv+oo1QuObaYulXNvdH/IINmvdZnVzMO/jic/B8EEIGlZ8Bgvw8LCjH3zNVPO3mGrdMvnEEPEhKA== + "@next/swc-linux-arm64-musl@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz#e429f826279894be9096be6bec13e75e3d6bd671" integrity sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ== +"@next/swc-linux-arm64-musl@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.4.tgz#4d1db6de6dc982b974cd1c52937111e3e4a34bd3" + integrity sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ== + "@next/swc-linux-x64-gnu@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz#1f276c0784a5ca599bfa34b2fcc0b38f3a738e08" integrity sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ== +"@next/swc-linux-x64-gnu@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.4.tgz#c3b414d77bab08b35f7dd8943d5586f0adb15e38" + integrity sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag== + "@next/swc-linux-x64-musl@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz#1d9933dd6ba303dcfd8a2acd6ac7c27ed41e2eea" integrity sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag== +"@next/swc-linux-x64-musl@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.4.tgz#187a883ec09eb2442a5ebf126826e19037313c61" + integrity sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg== + "@next/swc-win32-arm64-msvc@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz#2ef9837f12ca652b1783d72ecb86208906042f02" integrity sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g== +"@next/swc-win32-arm64-msvc@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.4.tgz#89befa84e453ed2ef9a888f375eba565a0fde80b" + integrity sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ== + "@next/swc-win32-ia32-msvc@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz#74003d0aa1c59dfa56cb15481a5c607cbc0027b9" integrity sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA== +"@next/swc-win32-ia32-msvc@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.4.tgz#cb50c08f0e40ead63642a7f269f0c8254261f17c" + integrity sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ== + "@next/swc-win32-x64-msvc@12.1.6": version "12.1.6" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz#a350caf42975e7197b24b495b8d764eec7e6a36e" integrity sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA== +"@next/swc-win32-x64-msvc@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.4.tgz#d28ea15a72cdcf96201c60a43e9630cd7fda168f" + integrity sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg== + +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + dependencies: + eslint-scope "5.1.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1983,7 +1981,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -2001,190 +1999,193 @@ error-stack-parser "^2.0.0" string-width "^4.2.3" -"@popperjs/core@^2.6.0": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" - integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== - -"@primer/css@19.8.2": - version "19.8.2" - resolved "https://registry.yarnpkg.com/@primer/css/-/css-19.8.2.tgz#4bdac86e9a11894a53e39c62ddfe0db0282fb367" - integrity sha512-Zjgk0asxDVj+QY8Ej3DLeJHEMzxlW4ejwmtUk3QzwUJG6R1FzCuGzrTuEN2hFugsvlPDVd1geeKfiskLEjkfOQ== +"@primer/css@20.7.1": + version "20.7.1" + resolved "https://registry.yarnpkg.com/@primer/css/-/css-20.7.1.tgz#67b8e6bf9063aec71a1888eed704005a5ef5b0c1" + integrity sha512-NcTKs6PZtT7btF8GlYvoRMq8XBJ8TWGA8VBPG+dAYHm/38gx8JwKSiZG0Dt2Ue1AYoV/75Slp/mUPDnFCmbOOQ== dependencies: - "@primer/primitives" "^7.7.0" + "@primer/primitives" "^7.9.0" -"@primer/primitives@^7.7.0": - version "7.8.2" - resolved "https://registry.yarnpkg.com/@primer/primitives/-/primitives-7.8.2.tgz#b6e6d49b1ec6968293de092ede2b54de8d0e69cf" - integrity sha512-rM9rkG9J9B3xVU3sCiAE5LL6xj3Y6Bgg4jnZIkZ4yE506yXDb2lPnCqCH5aJ1k64oP4GZWOC9aDSksvX5CRwqA== - -"@rushstack/eslint-patch@1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.8.tgz#be3e914e84eacf16dbebd311c0d0b44aa1174c64" - integrity sha512-ZK5v4bJwgXldAUA8r3q9YKfCwOqoHTK/ZqRjSeRXQrBXWouoPnS4MQtgC4AXGiiBuUu5wxrRgTlv0ktmM4P1Aw== +"@primer/primitives@^7.9.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@primer/primitives/-/primitives-7.10.0.tgz#de0d9648d484184442583564f02d6600b872fa5f" + integrity sha512-DdLHq21e93R9qDHyRuRpytBLY0Up9IwNWMOUgPNW6lRSng4N4+IdUlLS3Ekbasmxfs8Z8vKS8aezeYovQ5qsxQ== -"@rushstack/eslint-patch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz#7f698254aadf921e48dda8c0a6b304026b8a9323" - integrity sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A== +"@rushstack/eslint-patch@^1.1.0", "@rushstack/eslint-patch@^1.1.3": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" + integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== "@schemastore/package@0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/@schemastore/package/-/package-0.0.6.tgz#9a76713da1c7551293b7e72e4f387f802bfd5d81" integrity sha512-uNloNHoyHttSSdeuEkkSC+mdxJXMKlcUPOMb//qhQbIQijXg8x54VmAw3jm6GJZQ5DBtIqGBd66zEQCDCChQVA== -"@sinclair/typebox@^0.23.3": - version "0.23.5" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d" - integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sinclair/typebox@^0.24.1": + version "0.24.51" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^9.1.1": +"@sinonjs/fake-timers@^9.1.2": version "9.1.2" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== dependencies: "@sinonjs/commons" "^1.7.0" -"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" - integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== +"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" + integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== -"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" - integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== +"@svgr/babel-plugin-remove-jsx-attribute@*": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz#652bfd4ed0a0699843585cda96faeb09d6e1306e" + integrity sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA== -"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" - integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz#4b78994ab7d39032c729903fc2dd5c0fa4565cb8" + integrity sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw== -"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" - integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" + integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== -"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" - integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== +"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" + integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== -"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" - integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== +"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" + integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== -"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" - integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== +"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" + integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== -"@svgr/babel-plugin-transform-svg-component@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" - integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== +"@svgr/babel-plugin-transform-svg-component@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" + integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== -"@svgr/babel-preset@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" - integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" - "@svgr/babel-plugin-transform-svg-component" "^5.5.0" - -"@svgr/core@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" - integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== +"@svgr/babel-preset@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828" + integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" + "@svgr/babel-plugin-remove-jsx-attribute" "*" + "@svgr/babel-plugin-remove-jsx-empty-expression" "*" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" + "@svgr/babel-plugin-transform-svg-component" "^6.5.1" + +"@svgr/core@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a" + integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== dependencies: - "@svgr/plugin-jsx" "^5.5.0" + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" camelcase "^6.2.0" - cosmiconfig "^7.0.0" + cosmiconfig "^7.0.1" -"@svgr/hast-util-to-babel-ast@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" - integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== +"@svgr/hast-util-to-babel-ast@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2" + integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== dependencies: - "@babel/types" "^7.12.6" + "@babel/types" "^7.20.0" + entities "^4.4.0" -"@svgr/plugin-jsx@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" - integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== +"@svgr/plugin-jsx@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072" + integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== dependencies: - "@babel/core" "^7.12.3" - "@svgr/babel-preset" "^5.5.0" - "@svgr/hast-util-to-babel-ast" "^5.5.0" - svg-parser "^2.0.2" + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/hast-util-to-babel-ast" "^6.5.1" + svg-parser "^2.0.4" -"@svgr/plugin-svgo@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" - integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== +"@svgr/plugin-svgo@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84" + integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== dependencies: - cosmiconfig "^7.0.0" + cosmiconfig "^7.0.1" deepmerge "^4.2.2" - svgo "^1.2.2" + svgo "^2.8.0" -"@svgr/webpack@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" - integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== +"@svgr/webpack@6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8" + integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== + dependencies: + "@babel/core" "^7.19.6" + "@babel/plugin-transform-react-constant-elements" "^7.18.12" + "@babel/preset-env" "^7.19.4" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@svgr/core" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + "@svgr/plugin-svgo" "^6.5.1" + +"@swc/helpers@0.4.11": + version "0.4.11" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de" + integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw== + dependencies: + tslib "^2.4.0" + +"@tanstack/match-sorter-utils@^8.7.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.7.0.tgz#60b09a6d3d7974d5f86f1318053c1bd5a85fb0be" + integrity sha512-OgfIPMHTfuw9JGcXCCoEHWFP/eSP2eyhCYwkrFnWBM3NbUPAgOlFP11DbM7cozDRVB0XbPr1tD4pLAtWKlVUVg== dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - loader-utils "^2.0.0" + remove-accents "0.4.2" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== +"@tanstack/query-core@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.19.1.tgz#2e92d9e8a50884eb231c5beb4386e131ebe34306" + integrity sha512-Zp0aIose5C8skBzqbVFGk9HJsPtUhRVDVNWIqVzFbGQQgYSeLZMd3Sdb4+EnA5wl1J7X+bre2PJGnQg9x/zHOA== + +"@tanstack/react-query-devtools@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-4.19.1.tgz#850058df8dba932362838c17f566bd717044449b" + integrity sha512-U63A+ly9JLPJj7ryR9omdXT3n+gS7jlExrHty4klsd/6xdUhC38CKZyZ0Gi3vctaVYRGTU8/vI+uKzBYdFqLaA== dependencies: - defer-to-connect "^1.0.1" + "@tanstack/match-sorter-utils" "^8.7.0" + superjson "^1.10.0" + use-sync-external-store "^1.2.0" -"@testing-library/dom@^8.11.1": - version "8.11.3" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.11.3.tgz#38fd63cbfe14557021e88982d931e33fb7c1a808" - integrity sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA== +"@tanstack/react-query@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.19.1.tgz#43356dd537127e76d75f5a2769eb23dafd9a3690" + integrity sha512-5dvHvmc0vrWI03AJugzvKfirxCyCLe+qawrWFCXdu8t7dklIhJ7D5ZhgTypv7mMtIpdHPcECtCiT/+V74wCn2A== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^5.0.0" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.4.4" - pretty-format "^27.0.2" + "@tanstack/query-core" "4.19.1" + use-sync-external-store "^1.2.0" -"@testing-library/dom@^8.5.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.13.0.tgz#bc00bdd64c7d8b40841e27a70211399ad3af46f5" - integrity sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ== +"@testing-library/dom@^8.11.1", "@testing-library/dom@^8.5.0": + version "8.19.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.19.0.tgz#bd3f83c217ebac16694329e413d9ad5fdcfd785f" + integrity sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -2195,34 +2196,39 @@ lz-string "^1.4.4" pretty-format "^27.0.2" -"@testing-library/jest-dom@5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz#938302d7b8b483963a3ae821f1c0808f872245cd" - integrity sha512-Gy+IoFutbMQcky0k+bqqumXZ1cTGswLsFqmNLzNdSKkU9KGV2u9oXhukCbbJ9/LRPKiqwxEE8VpV/+YZlfkPUA== +"@testing-library/jest-dom@5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" + integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== dependencies: + "@adobe/css-tools" "^4.0.1" "@babel/runtime" "^7.9.2" "@types/testing-library__jest-dom" "^5.9.1" aria-query "^5.0.0" chalk "^3.0.0" - css "^3.0.0" css.escape "^1.5.1" dom-accessibility-api "^0.5.6" lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.1.1.tgz#6c1635e25acca8ca5be8ee3b19ad1391681c5846" - integrity sha512-8mirlAa0OKaUvnqnZF6MdAh2tReYA2KtWVw1PKvaF5EcCZqgK5pl8iF+3uW90JdG5Ua2c2c2E2wtLdaug3dsVg== +"@testing-library/react@13.4.0": + version "13.4.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966" + integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^8.5.0" "@types/react-dom" "^18.0.0" -"@testing-library/user-event@14.1.1": - version "14.1.1" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.1.1.tgz#e1ff6118896e4b22af31e5ea2f9da956adde23d8" - integrity sha512-XrjH/iEUqNl9lF2HX9YhPNV7Amntkcnpw0Bo1KkRzowNDcgSN9i0nm4Q8Oi5wupgdfPaJNMAWa61A+voD6Kmwg== +"@testing-library/user-event@14.4.3": + version "14.4.3" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591" + integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/aria-query@^4.2.0": version "4.2.2" @@ -2230,9 +2236,9 @@ integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.18" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" - integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + version "7.1.20" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.20.tgz#e168cdd612c92a2d335029ed62ac94c95b362359" + integrity sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2256,9 +2262,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + version "7.18.3" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== dependencies: "@babel/types" "^7.3.0" @@ -2284,14 +2290,6 @@ dependencies: compare-versions "*" -"@types/compression-webpack-plugin@9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@types/compression-webpack-plugin/-/compression-webpack-plugin-9.0.0.tgz#d7d504e2268e84e1413a99c072d6ff9aee31f213" - integrity sha512-3DdireWRs+SoAIKhbBIowoUMwMOXVKrDHeIO82e7D6/yJRw6kgzFhCnamJJNo10uHJ7YqP1h+g5itW+HlLw7Lg== - dependencies: - tapable "^2.2.0" - webpack "^5.51.0" - "@types/connect-history-api-fallback@1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" @@ -2307,12 +2305,14 @@ dependencies: "@types/node" "*" -"@types/copy-webpack-plugin@6.4.3": - version "6.4.3" - resolved "https://registry.yarnpkg.com/@types/copy-webpack-plugin/-/copy-webpack-plugin-6.4.3.tgz#6604f06a2c9ca4516a453d2e4f87bf844819bccd" - integrity sha512-yk7QO2/WrtkDLcsqQXfjU3EIYzggNHVl5y6gnxfMtCPB+bxVUIUzwb1BNxlk+78wENoh9ZgkVSNqn80T9rqO8w== +"@types/copy-webpack-plugin@8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@types/copy-webpack-plugin/-/copy-webpack-plugin-8.0.1.tgz#dc0a8801eeaef3dca812df793d1afc84fb8d648f" + integrity sha512-TwEeGse0/wq+t3SFW0DEwroMS/cDkwVZT+vj7tMAYTp7llt/yz6NuW2n04X2M5P/kSfBQOORhrHAN2mqZdmybg== dependencies: - "@types/webpack" "^4" + "@types/node" "*" + tapable "^2.0.0" + webpack "^5.1.0" "@types/d3-color@^2": version "2.0.3" @@ -2327,9 +2327,9 @@ "@types/d3-color" "^2" "@types/d3-path@^2": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-2.0.1.tgz#ca03dfa8b94d8add97ad0cd97e96e2006b4763cb" - integrity sha512-6K8LaFlztlhZO7mwsZg7ClRsdLg3FJRzIIi6SZXDWmmSJc2x8dd2VkESbLXdk3p8cuvz71f36S0y8Zv2AxqvQw== + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-2.0.2.tgz#6052f38f6186319769dfabab61b5514b0e02c75c" + integrity sha512-3YHpvDw9LzONaJzejXLOwZ3LqwwkoXb9LI2YN7Hbd6pkGo5nIlJ09ul4bQhBN4hQZJKmUpX8HkVqbzgUKY48cg== "@types/d3-scale@^3.0.0": version "3.3.2" @@ -2351,39 +2351,44 @@ integrity sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg== "@types/eslint-scope@^3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" - integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": - version "8.4.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" - integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== + version "8.4.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" + integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^0.0.51": +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.28" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" - integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== + version "4.17.31" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" + integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" -"@types/express@4.17.13": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== +"@types/express@4.17.14": + version "4.17.14" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" + integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.18" @@ -2412,9 +2417,9 @@ "@types/node" "*" "@types/glob@*": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + version "8.0.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.0.0.tgz#321607e9cbaec54f687a0792b2d1d370739455d2" + integrity sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA== dependencies: "@types/minimatch" "*" "@types/node" "*" @@ -2465,21 +2470,21 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest-axe@3.5.3": - version "3.5.3" - resolved "https://registry.yarnpkg.com/@types/jest-axe/-/jest-axe-3.5.3.tgz#5af918553388aa0a448af75603b44093985778c6" - integrity sha512-ad9qI9f+00N8IlOuGh6dnZ6o0BDdV9VhGfTUr1zCejsPvOfZd6eohffe4JYxUoUuRYEftyMcaJ6Ux4+MsOpGHg== +"@types/jest-axe@3.5.5": + version "3.5.5" + resolved "https://registry.yarnpkg.com/@types/jest-axe/-/jest-axe-3.5.5.tgz#21fd8152dc3963bf6e1f72f34a7ce4e827838b7b" + integrity sha512-b8WDIdoeKtr/JDJ2+QjFXMuS8UhfdMA6+15Z5KjjIie3jQrSXD9KZWMSQxc0nPtx7L9rIFKdiDpQk+m7s4a/8w== dependencies: "@types/jest" "*" axe-core "^3.5.5" -"@types/jest@*", "@types/jest@27.4.1": - version "27.4.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.1.tgz#185cbe2926eaaf9662d340cc02e548ce9e11ab6d" - integrity sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw== +"@types/jest@*", "@types/jest@29.2.4": + version "29.2.4" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.4.tgz#9c155c4b81c9570dbd183eb8604aa0ae80ba5a5b" + integrity sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A== dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" + expect "^29.0.0" + pretty-format "^29.0.0" "@types/js-yaml@4.0.5": version "4.0.5" @@ -2487,14 +2492,14 @@ integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA== "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash-webpack-plugin@0.11.6": version "0.11.6" @@ -2503,15 +2508,15 @@ dependencies: "@types/webpack" "^4" -"@types/lodash@4.14.182": - version "4.14.182" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" - integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== +"@types/lodash@4.14.191": + version "4.14.191" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" + integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== -"@types/luxon@2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.3.1.tgz#e34763178b46232e4c5f079f1706e18692415519" - integrity sha512-nAPUltOT28fal2eDZz8yyzNhBjHw1NEymFBP7Q9iCShqpflWPybxHbD7pw/46jQmT+HXOy1QN5hNTms8MOTlOQ== +"@types/luxon@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.1.0.tgz#b9842d233a06b267fe4117f1c224f20b8a149825" + integrity sha512-gCd/HcCgjqSxfMrgtqxCgYk/22NBQfypwFUG7ZAyG/4pqs51WLTcUzVp1hqTbieDYeHS3WoVEh2Yv/2l+7B0Vg== "@types/mdast@^3.0.0", "@types/mdast@^3.0.3": version "3.0.10" @@ -2527,35 +2532,30 @@ dependencies: "@types/react" "*" -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== "@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/node@*": - version "17.0.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" - integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== -"@types/node@17.0.30": - version "17.0.30" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.30.tgz#2c6e8512acac70815e8176aa30c38025067880ef" - integrity sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw== +"@types/node@*", "@types/node@18.11.11": + version "18.11.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" + integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== -"@types/papaparse@5.3.2": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.3.2.tgz#6ccace6eac8ddb03a6fd06883b84dd6c6561f69f" - integrity sha512-BNbCHJkTE4RwmAFkCxEalET4mDvGr/1ld7ZtQ4i/laWI/iiVt+GL07stdvufle4KfywyvloqqpIiJscXNCrKxA== +"@types/papaparse@5.3.5": + version "5.3.5" + resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.3.5.tgz#e5ad94b1fe98e2a8ea0b03284b83d2cb252bbf39" + integrity sha512-R1icl/hrJPFRpuYj9PVG03WBAlghJj4JW9Py5QdR8FFSxaLmZRyu7xYDCCBZIJNfUv3MYaeBbhBoX958mUTAaw== dependencies: "@types/node" "*" @@ -2570,19 +2570,14 @@ integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== "@types/prettier@^2.1.5": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" - integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== + version "2.7.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" + integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== "@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== - -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/qs@*": version "6.9.7" @@ -2594,24 +2589,31 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-copy-to-clipboard@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz#c29690b472a54edff35916f0d1c6c797ad0fd34b" - integrity sha512-O29AThfxrkUFRsZXjfSWR2yaWo0ppB1yLEnHA+Oh24oNetjBAwTDu1PmolIqdJKzsZiO4J1jn6R6TmO96uBvGg== +"@types/react-copy-to-clipboard@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz#558f2c38a97f53693e537815f6024f1e41e36a7e" + integrity sha512-otTJsJpofYAeaIeOwV5xBUGpo6exXG2HX7X4nseToCB2VgPEBxGBHCm/FecZ676doNR7HCSTVtmohxfG2b3/yQ== + dependencies: + "@types/react" "*" + +"@types/react-dom@18.0.9": + version "18.0.9" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.9.tgz#ffee5e4bfc2a2f8774b15496474f8e7fe8d0b504" + integrity sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg== dependencies: "@types/react" "*" -"@types/react-dom@18.0.3", "@types/react-dom@^18.0.0": +"@types/react-dom@^18.0.0": version "18.0.3" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.3.tgz#a022ea08c75a476fe5e96b675c3e673363853831" integrity sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ== dependencies: "@types/react" "*" -"@types/react-helmet@6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.5.tgz#35f89a6b1646ee2bc342a33a9a6c8777933f9083" - integrity sha512-/ICuy7OHZxR0YCAZLNg9r7I9aijWUWvxaPR6uTuyxe8tAj5RL4Sw1+R6NhXUtOsarkGYPmaHdBDvuXh2DIN/uA== +"@types/react-helmet@6.1.6": + version "6.1.6" + resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.6.tgz#7d1afd8cbf099616894e8240e9ef70e3c6d7506d" + integrity sha512-ZKcoOdW/Tg+kiUbkFCBtvDw0k3nD4HJ/h/B9yWxN4uDO8OkRksWTO+EL+z/Qu3aHTeTll3Ro0Cc/8UhwBCMG5A== dependencies: "@types/react" "*" @@ -2630,13 +2632,13 @@ "@types/react" "*" "@types/react-transition-group@^4.4.0": - version "4.4.4" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" - integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== + version "4.4.5" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" + integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@18.0.8": +"@types/react@*": version "18.0.8" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.8.tgz#a051eb380a9fbcaa404550543c58e1cf5ce4ab87" integrity sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw== @@ -2645,17 +2647,21 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/reactstrap@8.7.1": - version "8.7.1" - resolved "https://registry.yarnpkg.com/@types/reactstrap/-/reactstrap-8.7.1.tgz#d97554f21c3aa4f55d40af4a791d442b6c57accf" - integrity sha512-IgJRzJUhkzCj/J714FSbLnGTfaSk7n7QPytaJeBgvlN6AEkIYJEPbEB0dPqCsQ4mChKySgUm0P3OWSuuK///+g== +"@types/react@18.0.26": + version "18.0.26" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" + integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== dependencies: - reactstrap "*" + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" -"@types/resize-observer-browser@^0.1.6": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz#294aaadf24ac6580b8fbd1fe3ab7b59fe85f9ef3" - integrity sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg== +"@types/reactstrap@8.7.2": + version "8.7.2" + resolved "https://registry.yarnpkg.com/@types/reactstrap/-/reactstrap-8.7.2.tgz#0ab86f35e472e8f2002eaf8c7a42193c9cea6add" + integrity sha512-8sYGS/LhG+ic8vhLwxhuVn+TSqS1lKzplm9BHv4JaQoetStAi9uOqP2VREfefIRT3JnOq5Y+G7Afdryvn+UgZQ== + dependencies: + reactstrap "*" "@types/rimraf@3.0.2": version "3.0.2" @@ -2670,10 +2676,10 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== -"@types/semver@7.3.9": - version "7.3.9" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" - integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== +"@types/semver@7.3.13", "@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@types/serialize-javascript@5.0.2": version "5.0.2" @@ -2681,11 +2687,11 @@ integrity sha512-BRLlwZzRoZukGaBtcUxkLsZsQfWZpvog6MZk3PWQO9Q6pXmXFzjU5iGzZ+943evp6tkkbN98N1Z31KT0UG1yRw== "@types/serve-static@*": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" + integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== dependencies: - "@types/mime" "^1" + "@types/mime" "*" "@types/node" "*" "@types/source-list-map@*": @@ -2698,10 +2704,10 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== -"@types/styled-components@5.1.25": - version "5.1.25" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.25.tgz#0177c4ab5fa7c6ed0565d36f597393dae3f380ad" - integrity sha512-fgwl+0Pa8pdkwXRoVPP9JbqF0Ivo9llnmsm+7TCI330kbPIFd9qv1Lrhr37shf4tnxCOSu+/IgqM7uJXLWZZNQ== +"@types/styled-components@5.1.26": + version "5.1.26" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.26.tgz#5627e6812ee96d755028a98dae61d28e57c233af" + integrity sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw== dependencies: "@types/hoist-non-react-statics" "*" "@types/react" "*" @@ -2713,16 +2719,16 @@ integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== "@types/testing-library__jest-dom@^5.9.1": - version "5.14.3" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.3.tgz#ee6c7ffe9f8595882ee7bda8af33ae7b8789ef17" - integrity sha512-oKZe+Mf4ioWlMuzVBaXQ9WDnEm1+umLx0InILg+yvZVBBDmzV5KfZyLrCvadtWcx8+916jLmHafcmqqffl+iIw== + version "5.14.5" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f" + integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ== dependencies: "@types/jest" "*" "@types/uglify-js@*": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" - integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== + version "3.17.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.1.tgz#e0ffcef756476410e5bce2cb01384ed878a195b5" + integrity sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g== dependencies: source-map "^0.6.1" @@ -2746,9 +2752,9 @@ source-map "^0.7.3" "@types/webpack@^4": - version "4.41.32" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212" - integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== + version "4.41.33" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.33.tgz#16164845a5be6a306bcbe554a8e67f9cac215ffc" + integrity sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g== dependencies: "@types/node" "*" "@types/tapable" "^1" @@ -2778,124 +2784,94 @@ "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.10" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" - integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== + version "17.0.17" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.17.tgz#5672e5621f8e0fca13f433a8017aae4b7a2a03e7" + integrity sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@5.21.0", "@typescript-eslint/eslint-plugin@^5.5.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz#bfc22e0191e6404ab1192973b3b4ea0461c1e878" - integrity sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg== +"@typescript-eslint/eslint-plugin@5.45.1", "@typescript-eslint/eslint-plugin@^5.5.0": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.1.tgz#ee5b51405f6c9ee7e60e4006d68c69450d3b4536" + integrity sha512-cOizjPlKEh0bXdFrBLTrI/J6B/QMlhwE9auOov53tgB+qMukH6/h8YAK/qw+QJGct/PTbdh2lytGyipxCcEtAw== dependencies: - "@typescript-eslint/scope-manager" "5.21.0" - "@typescript-eslint/type-utils" "5.21.0" - "@typescript-eslint/utils" "5.21.0" - debug "^4.3.2" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/type-utils" "5.45.1" + "@typescript-eslint/utils" "5.45.1" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" regexpp "^3.2.0" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@5.10.1", "@typescript-eslint/parser@5.21.0", "@typescript-eslint/parser@^5.5.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.21.0.tgz#6cb72673dbf3e1905b9c432175a3c86cdaf2071f" - integrity sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg== - dependencies: - "@typescript-eslint/scope-manager" "5.21.0" - "@typescript-eslint/types" "5.21.0" - "@typescript-eslint/typescript-estree" "5.21.0" - debug "^4.3.2" - -"@typescript-eslint/scope-manager@5.14.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.14.0.tgz#ea518962b42db8ed0a55152ea959c218cb53ca7b" - integrity sha512-LazdcMlGnv+xUc5R4qIlqH0OWARyl2kaP8pVCS39qSL3Pd1F7mI10DbdXeARcE62sVQE4fHNvEqMWsypWO+yEw== +"@typescript-eslint/parser@5.45.1", "@typescript-eslint/parser@^5.42.0", "@typescript-eslint/parser@^5.5.0": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.1.tgz#6440ec283fa1373a12652d4e2fef4cb6e7b7e8c6" + integrity sha512-JQ3Ep8bEOXu16q0ztsatp/iQfDCtvap7sp/DKo7DWltUquj5AfCOpX2zSzJ8YkAVnrQNqQ5R62PBz2UtrfmCkA== dependencies: - "@typescript-eslint/types" "5.14.0" - "@typescript-eslint/visitor-keys" "5.14.0" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/typescript-estree" "5.45.1" + debug "^4.3.4" -"@typescript-eslint/scope-manager@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz#a4b7ed1618f09f95e3d17d1c0ff7a341dac7862e" - integrity sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ== +"@typescript-eslint/scope-manager@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.1.tgz#5b87d025eec7035d879b99c260f03be5c247883c" + integrity sha512-D6fCileR6Iai7E35Eb4Kp+k0iW7F1wxXYrOhX/3dywsOJpJAQ20Fwgcf+P/TDtvQ7zcsWsrJaglaQWDhOMsspQ== dependencies: - "@typescript-eslint/types" "5.21.0" - "@typescript-eslint/visitor-keys" "5.21.0" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/visitor-keys" "5.45.1" -"@typescript-eslint/type-utils@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz#ff89668786ad596d904c21b215e5285da1b6262e" - integrity sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw== +"@typescript-eslint/type-utils@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.45.1.tgz#cb7d300c3c95802cea9f87c7f8be363cf8f8538c" + integrity sha512-aosxFa+0CoYgYEl3aptLe1svP910DJq68nwEJzyQcrtRhC4BN0tJAvZGAe+D0tzjJmFXe+h4leSsiZhwBa2vrA== dependencies: - "@typescript-eslint/utils" "5.21.0" - debug "^4.3.2" + "@typescript-eslint/typescript-estree" "5.45.1" + "@typescript-eslint/utils" "5.45.1" + debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.14.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.14.0.tgz#96317cf116cea4befabc0defef371a1013f8ab11" - integrity sha512-BR6Y9eE9360LNnW3eEUqAg6HxS9Q35kSIs4rp4vNHRdfg0s+/PgHgskvu5DFTM7G5VKAVjuyaN476LCPrdA7Mw== - -"@typescript-eslint/types@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.21.0.tgz#8cdb9253c0dfce3f2ab655b9d36c03f72e684017" - integrity sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA== +"@typescript-eslint/types@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.1.tgz#8e1883041cee23f1bb7e1343b0139f97f6a17c14" + integrity sha512-HEW3U0E5dLjUT+nk7b4lLbOherS1U4ap+b9pfu2oGsW3oPu7genRaY9dDv3nMczC1rbnRY2W/D7SN05wYoGImg== -"@typescript-eslint/typescript-estree@5.14.0", "@typescript-eslint/typescript-estree@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz#9f0c233e28be2540eaed3df050f0d54fb5aa52de" - integrity sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg== +"@typescript-eslint/typescript-estree@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.1.tgz#b3dc37f0c4f0fe73e09917fc735e6f96eabf9ba4" + integrity sha512-76NZpmpCzWVrrb0XmYEpbwOz/FENBi+5W7ipVXAsG3OoFrQKJMiaqsBMbvGRyLtPotGqUfcY7Ur8j0dksDJDng== dependencies: - "@typescript-eslint/types" "5.21.0" - "@typescript-eslint/visitor-keys" "5.21.0" - debug "^4.3.2" - globby "^11.0.4" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/visitor-keys" "5.45.1" + debug "^4.3.4" + globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.21.0.tgz#51d7886a6f0575e23706e5548c7e87bce42d7c18" - integrity sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.21.0" - "@typescript-eslint/types" "5.21.0" - "@typescript-eslint/typescript-estree" "5.21.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.13.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.14.0.tgz#6c8bc4f384298cbbb32b3629ba7415f9f80dc8c4" - integrity sha512-EHwlII5mvUA0UsKYnVzySb/5EE/t03duUTweVy8Zqt3UQXBrpEVY144OTceFKaOe4xQXZJrkptCf7PjEBeGK4w== +"@typescript-eslint/utils@5.45.1", "@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.13.0": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.1.tgz#39610c98bde82c4792f2a858b29b7d0053448be2" + integrity sha512-rlbC5VZz68+yjAzQBc4I7KDYVzWG2X/OrqoZrMahYq3u8FFtmQYc+9rovo/7wlJH5kugJ+jQXV5pJMnofGmPRw== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.14.0" - "@typescript-eslint/types" "5.14.0" - "@typescript-eslint/typescript-estree" "5.14.0" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/typescript-estree" "5.45.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" + semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.14.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.14.0.tgz#1927005b3434ccd0d3ae1b2ecf60e65943c36986" - integrity sha512-yL0XxfzR94UEkjBqyymMLgCBdojzEuy/eim7N9/RIcTNxpJudAcqsU8eRyfzBbcEzGoPWfdM3AGak3cN08WOIw== +"@typescript-eslint/visitor-keys@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.1.tgz#204428430ad6a830d24c5ac87c71366a1cfe1948" + integrity sha512-cy9ln+6rmthYWjH9fmx+5FU/JDpjQb586++x2FZlveq7GdGuLLW9a2Jcst2TGekH82bXpfmRNSwP9tyEs6RjvQ== dependencies: - "@typescript-eslint/types" "5.14.0" - eslint-visitor-keys "^3.0.0" - -"@typescript-eslint/visitor-keys@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz#453fb3662409abaf2f8b1f65d515699c888dd8ae" - integrity sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA== - dependencies: - "@typescript-eslint/types" "5.21.0" - eslint-visitor-keys "^3.0.0" + "@typescript-eslint/types" "5.45.1" + eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": version "1.11.1" @@ -3018,22 +2994,20 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" - integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== +"@webpack-cli/configtest@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f" + integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A== -"@webpack-cli/info@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" - integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== - dependencies: - envinfo "^7.7.3" +"@webpack-cli/info@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0" + integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA== -"@webpack-cli/serve@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" - integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== +"@webpack-cli/serve@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8" + integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -3045,10 +3019,10 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abbrev@1: version "1.1.1" @@ -3068,15 +3042,15 @@ acorn-import-assertions@^1.7.6: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== +acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== ajv-formats@^2.1.1: version "2.1.1" @@ -3108,19 +3082,19 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.8.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" - integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== + version "8.11.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" + integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" uri-js "^4.2.2" -allow-methods@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/allow-methods/-/allow-methods-3.0.0.tgz#e4fbb27916afb31abb8b137b0c247750a3e82526" - integrity sha512-y0IEfwadetRSy3XBTgmywYPyTAdgm3cWPxSTehYshVO5+Kw1kshKTTaibzFe+d7XfZ6AFyC/7oRfM0vexr+dlA== +allow-methods@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/allow-methods/-/allow-methods-4.1.2.tgz#6faddf0dfe7afc95285807debf2124118fe2bf11" + integrity sha512-yvRYCS1nZ3UIhPQHECmGfE4NdtPCqrd/iNWx4qLnvZu/I7Gp1DkpCnNmNlFXxlPUrxrLYkyobRsyNOZ5VvLQTQ== dependencies: http-errors "^2.0.0" @@ -3129,20 +3103,20 @@ animate.css@4.1.1: resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-4.1.1.tgz#614ec5a81131d7e4dc362a58143f7406abd68075" integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ== -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: +ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" +ansi-escapes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.0.0.tgz#68c580e87a489f6df3d761028bb93093fde6bd8a" + integrity sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw== + dependencies: + type-fest "^3.0.0" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -3173,9 +3147,9 @@ ansi-styles@^5.0.0: integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -3201,24 +3175,26 @@ aria-query@^4.2.2: "@babel/runtime-corejs3" "^7.10.2" aria-query@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" - integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.3, array-includes@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" - integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== +array-includes@^3.1.4, array-includes@^3.1.5, array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" is-string "^1.0.7" array-union@^2.1.0: @@ -3226,28 +3202,47 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-union@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975" - integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw== - array.prototype.flat@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" - integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" - integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.19.0" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.reduce@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" + integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" asn1@~0.2.3: version "0.2.6" @@ -3259,67 +3254,73 @@ asn1@~0.2.3: assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@10.4.5, autoprefixer@^10.4.5: - version "10.4.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.5.tgz#662193c744094b53d3637f39be477e07bd904998" - integrity sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw== +autoprefixer@10.4.13, autoprefixer@^10.4.13: + version "10.4.13" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" + integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== dependencies: - browserslist "^4.20.2" - caniuse-lite "^1.0.30001332" + browserslist "^4.21.4" + caniuse-lite "^1.0.30001426" fraction.js "^4.2.0" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: version "1.11.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axe-core@4.4.1, axe-core@^4.3.5: - version "4.4.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" - integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw== +axe-core@4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.1.tgz#04d561c11b6d76d096d34e9d14ba2c294fb20cdc" + integrity sha512-1exVbW0X1O/HSr/WMwnaweyqcWOgZgLiVxdLG34pvSQk4NlYQr9OUy0JLwuhFfuVNQzzqgH57eYzkFBCb3bIsQ== axe-core@^3.5.5: version "3.5.6" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.6.tgz#e762a90d7f6dbd244ceacb4e72760ff8aad521b5" integrity sha512-LEUDjgmdJoA3LqklSTwKYqkjcZ4HKc4ddIYGSAiSkr46NTjzg2L9RNB+lekO9P7Dlpa87+hBtzc2Fzn/+GUWMQ== -axios@0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== +axe-core@^4.4.3: + version "4.5.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.2.tgz#823fdf491ff717ac3c58a52631d4206930c1d9f7" + integrity sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA== + +axios@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.1.tgz#44cf04a3c9f0c2252ebd85975361c026cb9f864a" + integrity sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A== dependencies: - follow-redirects "^1.14.9" + follow-redirects "^1.15.0" form-data "^4.0.0" + proxy-from-env "^1.1.0" axobject-query@^2.2.0: version "2.2.0" @@ -3340,15 +3341,15 @@ babel-jest@^27.0.1: graceful-fs "^4.2.9" slash "^3.0.0" -babel-jest@^28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.0.3.tgz#843dc170da5b9671d4054ada9fdcd28f85f92a6e" - integrity sha512-S0ADyYdcrt5fp9YldRYWCUHdk1BKt9AkvBkLWBoNAEV9NoWZPIj5+MYhPcGgTS65mfv3a+Ymf2UqgWoAVd41cA== +babel-jest@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.3.1.tgz#05c83e0d128cd48c453eea851482a38782249f44" + integrity sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA== dependencies: - "@jest/transform" "^28.0.3" + "@jest/transform" "^29.3.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.0.2" + babel-preset-jest "^29.2.0" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -3361,13 +3362,6 @@ babel-plugin-apply-mdx-type-prop@1.6.22: "@babel/helper-plugin-utils" "7.10.4" "@mdx-js/util" "1.6.22" -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" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - babel-plugin-extract-import-names@1.6.22: version "1.6.22" resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" @@ -3396,17 +3390,17 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-jest-hoist@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz#9307d03a633be6fc4b1a6bc5c3a87e22bd01dd3b" - integrity sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ== +babel-plugin-jest-hoist@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz#23ee99c37390a98cfddf3ef4a78674180d823094" + integrity sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@2.8.0, babel-plugin-macros@^2.6.1: +babel-plugin-macros@2.8.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== @@ -3429,34 +3423,34 @@ babel-plugin-parameter-decorator@1.0.16: resolved "https://registry.yarnpkg.com/babel-plugin-parameter-decorator/-/babel-plugin-parameter-decorator-1.0.16.tgz#1c889c3a1f3bbf03801fcbc2e95b8bae7468df3f" integrity sha512-yUT2WPTUg1JaPmRGRSF557m1HJ9vdFQInRWOkiOyO5a9HhqlXffJu+fQ2xd5+qU/35ICMrrk9eWKsHCairKA9w== -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.3.3" "babel-plugin-styled-components@>= 1.12.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.6.tgz#6f76c7f7224b7af7edc24a4910351948c691fc90" - integrity sha512-Sk+7o/oa2HfHv3Eh8sxoz75/fFvEdHsXV4grdeHufX0nauCmymlnN0rGhIvfpMQSJMvGutJ85gvCGea4iqmDpg== + version "2.0.7" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz#c81ef34b713f9da2b7d3f5550df0d1e19e798086" + integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA== dependencies: "@babel/helper-annotate-as-pure" "^7.16.0" "@babel/helper-module-imports" "^7.16.0" @@ -3467,7 +3461,7 @@ babel-plugin-polyfill-regenerator@^0.3.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= + integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== babel-plugin-transform-react-remove-prop-types@0.4.24, babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" @@ -3507,12 +3501,12 @@ babel-preset-jest@^27.5.1: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" -babel-preset-jest@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz#d8210fe4e46c1017e9fa13d7794b166e93aa9f89" - integrity sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ== +babel-preset-jest@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz#3048bea3a1af222e3505e4a767a974c95a7620dc" + integrity sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA== dependencies: - babel-plugin-jest-hoist "^28.0.2" + babel-plugin-jest-hoist "^29.2.0" babel-preset-current-node-syntax "^1.0.0" babel-preset-react-app@^10.0.1: @@ -3571,15 +3565,10 @@ balanced-match@^1.0.0: bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" -big-integer@^1.6.16: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3590,10 +3579,10 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -body-parser@1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" content-type "~1.0.4" @@ -3603,40 +3592,26 @@ body-parser@1.20.0: http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.10.3" + qs "6.11.0" raw-body "2.5.1" type-is "~1.6.18" unpipe "1.0.0" -boolbase@^1.0.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= + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -bootstrap-icons@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/bootstrap-icons/-/bootstrap-icons-1.8.1.tgz#773c1625bcbf3e86090ea9da4386c2c6459c5582" - integrity sha512-IXUqislddPJfwq6H+2nTkHyr9epO9h6u1AG0OZCx616w+TgzeoCjfmI3qJMQqt1J586gN2IxzB4M99Ip4sTZ1w== +bootstrap-icons@1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/bootstrap-icons/-/bootstrap-icons-1.10.2.tgz#6a5729e0475e007ed82d752225645e4e6fec48d7" + integrity sha512-PTPYadRn1AMGr+QTSxe4ZCc+Wzv9DGZxbi3lNse/dajqV31n2/wl/7NX78ZpkvFgRNmH4ogdIQPQmxAfhEV6nA== bootstrap@4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.2.tgz#a85c4eda59155f0d71186b6e6ad9b875813779ab" integrity sha512-vlGn0bcySYl/iV+BGA544JkkZP5LB3jsmkeKLFQakCOwCM3AOk7VkldBz4jrzSe+Z0Ezn99NVXa1o45cQY4R6A== -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3645,48 +3620,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -broadcast-channel@^3.4.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937" - integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== - dependencies: - "@babel/runtime" "^7.7.2" - detect-node "^2.1.0" - js-sha3 "0.8.0" - microseconds "0.2.0" - nano-time "1.0.0" - oblivious-set "1.0.0" - rimraf "3.0.2" - unload "2.2.0" - -browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1: - version "4.20.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.0.tgz#35951e3541078c125d36df76056e94738a52ebe9" - integrity sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ== - dependencies: - caniuse-lite "^1.0.30001313" - electron-to-chromium "^1.4.76" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -browserslist@^4.20.2, browserslist@^4.20.3: - version "4.20.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" - integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== - dependencies: - caniuse-lite "^1.0.30001332" - electron-to-chromium "^1.4.118" - escalade "^3.1.1" - node-releases "^2.0.3" - picocolors "^1.0.0" +browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" bser@2.1.1: version "2.1.1" @@ -3700,29 +3649,16 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -builtin-modules@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -3752,34 +3688,29 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== camelize@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" - integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= - -caniuse-lite@^1.0.30001313: - version "1.0.30001314" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz#65c7f9fb7e4594fca0a333bec1d8939662377596" - integrity sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw== + version "1.0.1" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== -caniuse-lite@^1.0.30001332: - version "1.0.30001334" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz#892e9965b35285033fc2b8a8eff499fe02f13d8b" - integrity sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw== +caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001426: + version "1.0.30001436" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz#22d7cbdbbbb60cdc4ca1030ccd6dea9f5de4848b" + integrity sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== ccount@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -3801,14 +3732,6 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -3834,11 +3757,6 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -charcodes@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" - integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== - "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.2, chokidar@^3.5.2: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -3859,45 +3777,35 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - ci-info@^3.2.0, ci-info@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + version "3.7.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.0.tgz#6d01b3696c59915b6ce057e4aa4adfc2fa25f5ef" + integrity sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog== cjs-module-lexer@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -classnames@*, classnames@2.3.1, classnames@^2.2.3, classnames@^2.2.5: - version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== +classnames@*, classnames@2.3.2, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== clean-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" - integrity sha1-jffHquUf02h06PjQW5GAvBGj/tc= + integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== dependencies: escape-string-regexp "^1.0.5" -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" clone-deep@^4.0.1: @@ -3909,26 +3817,10 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - co@^4.6.0: version "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" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collapse-white-space@^1.0.2: version "1.0.6" @@ -3957,7 +3849,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" @@ -3965,9 +3857,9 @@ color-name@~1.1.4: integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colorette@^2.0.14: - version "2.0.16" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" - integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" @@ -3991,55 +3883,40 @@ commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^7.0.0: +commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" + integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== compare-versions@*: - version "4.1.3" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-4.1.3.tgz#8f7b8966aef7dc4282b45dfa6be98434fc18a1a4" - integrity sha512-WQfnbDcrYnGr55UwbxKiQKASnTtNnaAWVi8jZyy8NTpVAXWACSne8lMD1iaIo9AiU6mnuLvSVshCzewVuWxHUg== - -compression-webpack-plugin@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz#57fd539d17c5907eebdeb4e83dcfe2d7eceb9ef6" - integrity sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw== - dependencies: - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" + version "5.0.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-5.0.1.tgz#14c6008436d994c3787aba38d4087fabe858555e" + integrity sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== confusing-browser-globals@^1.0.10, confusing-browser-globals@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -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-history-api-fallback@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== consola@^2.15.3, consola@^2.6.0: version "2.15.3" @@ -4061,68 +3938,77 @@ content-type@~1.0.4: contentstream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/contentstream/-/contentstream-1.0.0.tgz#0bdcfa46da30464a86ce8fa7ece565410dc6f9a5" - integrity sha1-C9z6RtowRkqGzo+n7OVlQQ3G+aU= + integrity sha512-jqWbfFZFG9tZbdej7+TzXI4kanABh3BLtTWY6NxqTK5zo6iTIeo5aq4iRVfYsLQ0y8ccQqmJR/J4NeMmEdnR2w== dependencies: readable-stream "~1.0.33-1" 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.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +copy-anything@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.3.tgz#206767156f08da0e02efd392f71abcdf79643559" + integrity sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw== + dependencies: + is-what "^4.1.8" + copy-to-clipboard@^3.3.1: - 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== + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== dependencies: toggle-selection "^1.0.6" -copy-webpack-plugin@10.2.4: - version "10.2.4" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz#6c854be3fdaae22025da34b9112ccf81c63308fe" - integrity sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg== +copy-webpack-plugin@11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== dependencies: - fast-glob "^3.2.7" + fast-glob "^3.2.11" glob-parent "^6.0.1" - globby "^12.0.2" + globby "^13.1.1" normalize-path "^3.0.0" schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.20.2, core-js-compat@^3.21.0: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" - integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== +core-js-compat@^3.25.1: + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.1.tgz#0e710b09ebf689d719545ac36e49041850f943df" + integrity sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A== dependencies: - browserslist "^4.19.1" - semver "7.0.0" + browserslist "^4.21.4" -core-js-pure@^3.20.2: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" - integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== +core-js-pure@^3.25.1: + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.1.tgz#653f4d7130c427820dcecd3168b594e8bb095a33" + integrity sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ== -core-js@3.22.3, core-js@^3.20.2: - version "3.22.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.22.3.tgz#498c41d997654cb00e81c7a54b44f0ab21ab01d5" - integrity sha512-1t+2a/d2lppW1gkLXx3pKPVGbBdxXAkqztvWb1EJ8oF8O2gIGiytzflNiFEehYwVK/t2ryUsGBoOFFvNx95mbg== +core-js@3.26.1, core-js@^3.26.0: + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e" + integrity sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA== core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== core-util-is@~1.0.0: version "1.0.3" @@ -4140,10 +4026,10 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== +cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" @@ -4151,10 +4037,10 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -country-flag-icons@1.4.26: - version "1.4.26" - resolved "https://registry.yarnpkg.com/country-flag-icons/-/country-flag-icons-1.4.26.tgz#e324b2e79c00f180d4f44a8ce034a3e824097619" - integrity sha512-fUBQ58zfQsSL12ErkFSfBxnQZapzdC8+5ZKqhD1z0EHqPnOuiFl7nZTv8Gqpms+jvweP+pbCYGp7G4aiO9eiMw== +country-flag-icons@1.5.5: + version "1.5.5" + resolved "https://registry.yarnpkg.com/country-flag-icons/-/country-flag-icons-1.5.5.tgz#04a41c83e2ea38ea28054d4e3eff9d1ce16aec1c" + integrity sha512-k4WXZ/WvWOSiYXRG1n8EYHNr1m/IX0GffKqAidaet5DrJsDOmJ8Q/8JvvONhZNnKYg24s4lvsm+9og1HcuIU/g== create-jest-runner@^0.6.0: version "0.6.0" @@ -4192,11 +4078,6 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - css-blank-pseudo@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" @@ -4207,7 +4088,7 @@ css-blank-pseudo@^3.0.3: css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" - integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== css-has-pseudo@^3.0.4: version "3.0.4" @@ -4216,39 +4097,46 @@ css-has-pseudo@^3.0.4: dependencies: postcss-selector-parser "^6.0.9" -css-loader@6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" - integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== +css-loader@6.7.2: + version "6.7.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.2.tgz#26bc22401b5921686a10fbeba75d124228302304" + integrity sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q== dependencies: icss-utils "^5.1.0" - postcss "^8.4.7" + postcss "^8.4.18" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" - semver "^7.3.5" + semver "^7.3.8" css-prefers-color-scheme@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== -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@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.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== +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== dependencies: boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" css-to-react-native@^3.0.0: version "3.0.0" @@ -4259,15 +4147,7 @@ css-to-react-native@^3.0.0: css-color-keywords "^1.0.0" postcss-value-parser "^4.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.1.2: +css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== @@ -4275,56 +4155,70 @@ css-tree@^1.1.2: mdn-data "2.0.14" source-map "^0.6.1" +css-tree@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.0.tgz#a0122cbc85305576df92ac528fb079c8217a15b2" + integrity sha512-1rg0LiK2MFi4R3/lVvnRokEWTZb30ljSAe5x+0HHkZ+OqZaAeiP8g8Eh91VmkyCtQn9vMgQRiaTDYgLBt+2Qyw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + css-unit-converter@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== css.escape@1.5.1, css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= - -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== -cssdb@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-6.5.0.tgz#61264b71f29c834f09b59cb3e5b43c8226590122" - integrity sha512-Rh7AAopF2ckPXe/VBcoUS9JrCZNSyc60+KpgE6X25vpVxA32TmiqvExjkfhwP4wGSb6Xe8Z/JIyGqwgx/zZYFA== +cssdb@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.2.0.tgz#f44bd4abc430f0ff7f4c64b8a1fb857a753f77a8" + integrity sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg== 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== -csso@^4.0.2: +csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: css-tree "^1.1.2" +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + csstype@^3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" - integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== cwise-compiler@^1.0.0, cwise-compiler@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5" - integrity sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU= + integrity sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ== dependencies: uniq "^1.0.0" @@ -4389,7 +4283,7 @@ d3-shape@^2.0.0: dependencies: d3-array "2" -damerau-levenshtein@^1.0.7: +damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== @@ -4397,14 +4291,14 @@ damerau-levenshtein@^1.0.7: dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" data-uri-to-buffer@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz#18ae979a6a0ca994b0625853916d2662bbae0b1a" - integrity sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo= + integrity sha512-Cp+jOa8QJef5nXS5hU7M1DWzXPEIoVR3kbV0dQuVGwROZg8bGf1DcCnkmajBTnvghTtSNMUdRrPjgaT6ZQucbw== debug@2.6.9, debug@^2.1.3, debug@^2.6.9: version "2.6.9" @@ -4420,14 +4314,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debug@^4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4439,22 +4326,10 @@ decimal.js-light@^2.4.1: resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-equal@^1.1.1: version "1.1.1" @@ -4468,10 +4343,26 @@ deep-equal@^1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-equal@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.1.0.tgz#5ba60402cf44ab92c2c07f3f3312c3d857a0e1dd" + integrity sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA== + dependencies: + call-bind "^1.0.2" + es-get-iterator "^1.1.2" + get-intrinsic "^1.1.3" + is-arguments "^1.1.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.8" deep-is@^0.1.3: version "0.1.4" @@ -4483,43 +4374,29 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== dependencies: - object-keys "^1.0.12" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - detab@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" @@ -4532,20 +4409,10 @@ 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@^2.0.4, detect-node@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -diff-sequences@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.0.2.tgz#40f8d4ffa081acbd8902ba35c798458d0ff1af41" - integrity sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ== +diff-sequences@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.3.1.tgz#104b5b95fe725932421a9c6e5b4bef84c3f2249e" + integrity sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ== dir-glob@^3.0.1: version "3.0.1" @@ -4569,9 +4436,9 @@ doctrine@^3.0.0: esutils "^2.0.2" dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: - version "0.5.13" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.13.tgz#102ee5f25eacce09bdf1cfa5a298f86da473be4b" - integrity sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw== + version "0.5.14" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" + integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== dom-helpers@^3.4.0: version "3.4.0" @@ -4588,53 +4455,77 @@ dom-helpers@^5.0.1: "@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== +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" + domhandler "^4.2.0" entities "^2.0.0" -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" -domelementtype@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.1, domhandler@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" -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== +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== dependencies: - dom-serializer "0" - domelementtype "1" + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" -dot-prop@^5.2.0, dot-prop@^5.3.0: +dot-prop@^5.3.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@16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411" - integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q== - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +dotenv@16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -4642,22 +4533,17 @@ ecc-jsbn@~0.1.1: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.4.118: - version "1.4.127" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.127.tgz#4ef19d5d920abe2676d938f4170729b44f7f423a" - integrity sha512-nhD6S8nKI0O2MueC6blNOEZio+/PWppE/pevnf3LOlQA/fKPCrDp2Ao4wx4LFwmIkJpVdFdn2763YWLy9ENIZg== + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.76: - version "1.4.77" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.77.tgz#c26e454cb8721d4ebdae3e276c57cd32e51c32ed" - integrity sha512-fiDxw8mO9Ph1Z0bjX2sFTPpi0J0QkOiwOJF+5Q0J0baNc/F9lLePAvDPlnoxvbUYYMizqrKPeotRRkJ9LtxAew== +electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== -emittery@^0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" - integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" @@ -4677,19 +4563,12 @@ emojis-list@^3.0.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= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.7.0, enhanced-resolve@^5.9.2: - version "5.9.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz#0224dcd6a43389ebfb2d55efee517e5466772dd9" - integrity sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA== +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -4699,6 +4578,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.2.0, entities@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + envinfo@^7.7.3: version "7.8.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" @@ -4712,43 +4596,74 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" error-stack-parser@^2.0.0: - version "2.0.7" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz#b0c6e2ce27d0495cf78ad98715e0cad1219abb57" - integrity sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA== + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: - stackframe "^1.1.1" + stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" - integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.20.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2" + integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" - get-intrinsic "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" get-symbol-description "^1.0.0" + gopd "^1.0.1" has "^1.0.3" - has-symbols "^1.0.2" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" + is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" + is-weakref "^1.0.2" + object-inspect "^1.12.2" object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + unbox-primitive "^1.0.2" + +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.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" + integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.0" + has-symbols "^1.0.1" + is-arguments "^1.1.0" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.5" + isarray "^2.0.5" es-module-lexer@^0.9.0: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + 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" @@ -4763,20 +4678,15 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - 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= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 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= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" @@ -4814,20 +4724,20 @@ eslint-config-airbnb@19.0.4: object.assign "^4.1.2" object.entries "^1.1.5" -eslint-config-next@12.1.5: - version "12.1.5" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.5.tgz#658cc61194a32dfd917a3db199351396ea5db1d1" - integrity sha512-P+DCt5ti63KhC0qNLzrAmPcwRGq8pYqgcf/NNr1E+WjCrMkWdCAXkIANTquo+kcO1adR2k1lTo5GCrNUtKy4hQ== - dependencies: - "@next/eslint-plugin-next" "12.1.5" - "@rushstack/eslint-patch" "1.0.8" - "@typescript-eslint/parser" "5.10.1" - eslint-import-resolver-node "0.3.4" - eslint-import-resolver-typescript "2.4.0" - eslint-plugin-import "2.25.2" - eslint-plugin-jsx-a11y "6.5.1" - eslint-plugin-react "7.29.1" - eslint-plugin-react-hooks "4.3.0" +eslint-config-next@13.0.6: + version "13.0.6" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.0.6.tgz#bbbcfd6e50eacca54552f962e43c9e2c4fb52ef6" + integrity sha512-Tfn/0lirhkEuoGxKMtDQNtQuC7P3eHcyUyhIJY/OHtjU9ExHFtcge/Fe8Ou/Jd7DIC71vN3CT72oszVwia71cg== + dependencies: + "@next/eslint-plugin-next" "13.0.6" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.42.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.31.7" + eslint-plugin-react-hooks "^4.5.0" eslint-config-prettier@8.5.0: version "8.5.0" @@ -4862,14 +4772,6 @@ eslint-formatter-codeframe@7.32.1: "@babel/code-frame" "7.12.11" chalk "^4.0.0" -eslint-import-resolver-node@0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - eslint-import-resolver-node@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" @@ -4889,7 +4791,7 @@ eslint-import-resolver-ts@0.4.2: tiny-glob "^0.2.6" tsconfig-paths "^3.9.0" -eslint-import-resolver-typescript@2.4.0, eslint-import-resolver-typescript@2.7.1: +eslint-import-resolver-typescript@2.7.1, eslint-import-resolver-typescript@^3.5.2: version "2.7.1" resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== @@ -4901,12 +4803,11 @@ eslint-import-resolver-typescript@2.4.0, eslint-import-resolver-typescript@2.7.1 tsconfig-paths "^3.14.1" eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" - find-up "^2.1.0" eslint-plugin-array-func@3.1.7: version "3.1.7" @@ -4916,7 +4817,7 @@ eslint-plugin-array-func@3.1.7: eslint-plugin-cflint@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-cflint/-/eslint-plugin-cflint-1.0.0.tgz#84eb9b3c5a707793f83ea2c98f74b8684c0d76be" - integrity sha1-hOubPFpwd5P4PqLJj3S4aEwNdr4= + integrity sha512-vxSgrucRN7Cs8Qb1iGn1POpoTPlQ7HHhyPuQpe4jCL0jTPTrSePPMe3e+54XGWWA3/jsbUDjrhmol737ZkMWJg== eslint-plugin-cypress@2.12.1: version "2.12.1" @@ -4941,7 +4842,7 @@ eslint-plugin-flowtype@8.0.3, eslint-plugin-flowtype@^8.0.3: lodash "^4.17.21" string-natural-compare "^3.0.1" -eslint-plugin-import@2.25.2, eslint-plugin-import@2.26.0, eslint-plugin-import@^2.25.3: +eslint-plugin-import@2.26.0, eslint-plugin-import@^2.25.3, eslint-plugin-import@^2.26.0: version "2.26.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== @@ -4960,19 +4861,19 @@ eslint-plugin-import@2.25.2, eslint-plugin-import@2.26.0, eslint-plugin-import@^ resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-plugin-jest-dom@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-4.0.1.tgz#d19b65e714a2689fd1f62393ce8553cf1f25e6cc" - integrity sha512-9aUaX4AtlFBziLqKSjc7DKHQ/y1T32qNapG3uSeLDMJYKswASoQLJWOfLIE+zEHKvCNzNIz8T7282tQkuu0TKQ== +eslint-plugin-jest-dom@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-4.0.3.tgz#ec17171385660e78465cce9f3e1ce90294ea1190" + integrity sha512-9j+n8uj0+V0tmsoS7bYC7fLhQmIvjRqRYEcbDSi+TKPsTThLLXCyj5swMSSf/hTleeMktACnn+HFqXBr5gbcbA== dependencies: "@babel/runtime" "^7.16.3" "@testing-library/dom" "^8.11.1" requireindex "^1.2.0" -eslint-plugin-jest@26.1.5, eslint-plugin-jest@^25.3.0: - version "26.1.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.1.5.tgz#6cfca264818d6d6aa120b019dab4d62b6aa8e775" - integrity sha512-su89aDuljL9bTjEufTXmKUMSFe2kZUL9bi7+woq+C2ukHZordhtfPm4Vg+tdioHBaKf8v3/FXW9uV0ksqhYGFw== +eslint-plugin-jest@27.1.6, eslint-plugin-jest@^25.3.0: + version "27.1.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.1.6.tgz#361d943f07d1978838e6b852c44a579f3879e332" + integrity sha512-XA7RFLSrlQF9IGtAmhddkUkBuICCTuryfOTfCSWcZHiHb69OilIH05oozH2XA6CEOtztnOd0vgXyvxZodkxGjg== dependencies: "@typescript-eslint/utils" "^5.10.0" @@ -4984,23 +4885,24 @@ eslint-plugin-json@3.1.0: lodash "^4.17.21" vscode-json-languageservice "^4.1.6" -eslint-plugin-jsx-a11y@6.5.1, eslint-plugin-jsx-a11y@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8" - integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g== +eslint-plugin-jsx-a11y@6.6.1, eslint-plugin-jsx-a11y@^6.5.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== dependencies: - "@babel/runtime" "^7.16.3" + "@babel/runtime" "^7.18.9" aria-query "^4.2.2" - array-includes "^3.1.4" + array-includes "^3.1.5" ast-types-flow "^0.0.7" - axe-core "^4.3.5" + axe-core "^4.4.3" axobject-query "^2.2.0" - damerau-levenshtein "^1.0.7" + damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^3.2.1" + jsx-ast-utils "^3.3.2" language-tags "^1.0.5" - minimatch "^3.0.4" + minimatch "^3.1.2" + semver "^6.3.0" eslint-plugin-lodash@7.4.0: version "7.4.0" @@ -5012,7 +4914,7 @@ eslint-plugin-lodash@7.4.0: eslint-plugin-no-loops@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-no-loops/-/eslint-plugin-no-loops-0.3.0.tgz#e81fecb4eaaf494a926d9caba9a7cd84d1fede7d" - integrity sha1-6B/stOqvSUqSbZyrqafNhNH+3n0= + integrity sha512-qI0oMgD0mA2Kpad2P/WncEqeVzvJKpHs/6+PA1SW4E6gXSXRmeV2cPv6+fnEgFwC7i+QtFRay2jUQ8DCH02nZg== eslint-plugin-no-secrets@0.8.9: version "0.8.9" @@ -5034,56 +4936,57 @@ eslint-plugin-node@11.1.0: eslint-plugin-only-ascii@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-only-ascii/-/eslint-plugin-only-ascii-0.0.0.tgz#452dd8d79a086b385160735d895cb4ce4332ed65" - integrity sha1-RS3Y15oIazhRYHNdiVy0zkMy7WU= + integrity sha512-7sIt6sKt3PqZ/Hlc/twMTZhzlGb33GJ+ni8t3OyVuchvWUPKdrbuD6BfSfbd1CZpcG2+bH4cX1NGCQvsF5VCHA== dependencies: requireindex "~1.1.0" -eslint-plugin-only-warn@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.3.tgz#a75f3a9ded7f03e9808e75ec27f22b644084506e" - integrity sha512-XQOX/TfLoLw6h8ky51d29uUjXRTQHqBGXPylDEmy5fe/w7LIOnp8MA24b1OSMEn9BQoKow1q3g1kLe5/9uBTvw== +eslint-plugin-only-warn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.1.0.tgz#c6ddc37ddc4e72c121f07be565fcb7b6671fe78a" + integrity sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA== -eslint-plugin-prettier@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" - integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== +eslint-plugin-prettier@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-promise@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz#017652c07c9816413a41e11c30adc42c3d55ff18" - integrity sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw== +eslint-plugin-promise@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== -eslint-plugin-react-hooks@4.3.0, eslint-plugin-react-hooks@4.5.0, eslint-plugin-react-hooks@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz#5f762dfedf8b2cf431c689f533c9d3fa5dcf25ad" - integrity sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw== +eslint-plugin-react-hooks@4.6.0, eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react-perf@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/eslint-plugin-react-perf/-/eslint-plugin-react-perf-3.3.1.tgz#e52d64c1d6e9c4cb1240108cdbbe406837f1b887" integrity sha512-iOx2UtEOH50TmQhezTS4jbBAj/2gbrUdX+ZM28c2K9mwTvtRX6gdnd2P4WPQrejITDsAMNTCz95zu5HcjCD0xg== -eslint-plugin-react@7.29.1, eslint-plugin-react@7.29.4, eslint-plugin-react@^7.27.1: - version "7.29.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" - integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== +eslint-plugin-react@7.31.11, eslint-plugin-react@^7.27.1, eslint-plugin-react@^7.31.7: + version "7.31.11" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" + integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== dependencies: - array-includes "^3.1.4" - array.prototype.flatmap "^1.2.5" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.0" - object.values "^1.1.5" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" prop-types "^15.8.1" resolve "^2.0.0-next.3" semver "^6.3.0" - string.prototype.matchall "^4.0.6" + string.prototype.matchall "^4.0.8" eslint-plugin-security@1.5.0: version "1.5.0" @@ -5092,15 +4995,15 @@ eslint-plugin-security@1.5.0: dependencies: safe-regex "^2.1.1" -eslint-plugin-sonarjs@0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.13.0.tgz#c34d140cc90abaaed38f5a5201a2ccdebe398862" - integrity sha512-t3m7ta0EspzDxSOZh3cEOJIJVZgN/TlJYaBGnQlK6W/PZNbWep8q4RQskkJkA7/zwNpX0BaoEOSUUrqaADVoqA== +eslint-plugin-sonarjs@0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.17.0.tgz#e026065809e35d286f576ddea094727eeb9cdadd" + integrity sha512-jtGtxI49UbJJeJj7CVRLI3+LLH+y+hkR3GOOwM7vBbci9DEFIRGCWvEd2BJScrzltZ6D6iubukTAfc9cyG7sdw== eslint-plugin-testing-library@^5.0.1: - version "5.0.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.6.tgz#86b0aff2ed0c80f63966c2a4894c06bff382b6d5" - integrity sha512-mMU4+slZsWKHNxtxc5TE2+bs9S//e2uFPlcpTapPhVdnctgn0+G/DaUu6VbT0JLiVMcbBjy3IcfddK+abZawbw== + version "5.9.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz#12e4bd34c48683ee98af4df2e3318ec9f51dcf8a" + integrity sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ== dependencies: "@typescript-eslint/utils" "^5.13.0" @@ -5164,18 +5067,20 @@ eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: +eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@8.14.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.14.0.tgz#62741f159d9eb4a79695b28ec4989fcdec623239" - integrity sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw== +eslint@8.29.0: + version "8.29.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.29.0.tgz#d74a88a20fb44d59c51851625bc4ee8d0ec43f87" + integrity sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg== dependencies: - "@eslint/eslintrc" "^1.2.2" - "@humanwhocodes/config-array" "^0.9.2" + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -5185,38 +5090,40 @@ eslint@8.14.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.1" + espree "^9.4.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.6.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" regexpp "^3.2.0" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^9.3.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" - integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: - acorn "^8.7.0" - acorn-jsx "^5.3.1" + acorn "^8.8.0" + acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" esprima@^4.0.0: @@ -5256,7 +5163,7 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter3@^4.0.1: version "4.0.7" @@ -5286,34 +5193,34 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-28.0.2.tgz#86f0d6fa971bc533faf68d4d103d00f343d6a4b3" - integrity sha512-X0qIuI/zKv98k34tM+uGeOgAC73lhs4vROF9MkPk94C1zujtwv4Cla8SxhWn0G1OwvG9gLLL7RjFBkwGVaZ83w== +expect@^29.0.0, expect@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.3.1.tgz#92877aad3f7deefc2e3f6430dd195b92295554a6" + integrity sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA== dependencies: - "@jest/expect-utils" "^28.0.2" - jest-get-type "^28.0.2" - jest-matcher-utils "^28.0.2" - jest-message-util "^28.0.2" - jest-util "^28.0.2" + "@jest/expect-utils" "^29.3.1" + jest-get-type "^29.2.0" + jest-matcher-utils "^29.3.1" + jest-message-util "^29.3.1" + jest-util "^29.3.1" -express-static-gzip@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/express-static-gzip/-/express-static-gzip-2.1.5.tgz#e45b512ef5596a068c45f729d7e0cc0b429b08b4" - integrity sha512-bgiQ1fY7ltuUrSzg0WoN7ycoAd7r2VEw7durn/3k0jCMUC5wydF0K36ouIuJPE+MNDwK5uoSaVgIBVNemwxWgw== +express-static-gzip@2.1.7: + version "2.1.7" + resolved "https://registry.yarnpkg.com/express-static-gzip/-/express-static-gzip-2.1.7.tgz#5904824a07950ba741ec3a23a21839dd04c63506" + integrity sha512-QOCZUC+lhPPCjIJKpQGu1Oa61Axg9Mq09Qvit8Of7kzpMuwDeMSqjjQteQS3OVw/GkENBoSBheuQDWPlngImvw== dependencies: serve-static "^1.14.1" -express@4.18.0: - version "4.18.0" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.0.tgz#7a426773325d0dd5406395220614c0db10b6e8e2" - integrity sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg== +express@4.18.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.0" + body-parser "1.20.1" content-disposition "0.5.4" content-type "~1.0.4" cookie "0.5.0" @@ -5332,7 +5239,7 @@ express@4.18.0: parseurl "~1.3.3" path-to-regexp "0.1.7" proxy-addr "~2.0.7" - qs "6.10.3" + qs "6.11.0" range-parser "~1.2.1" safe-buffer "5.2.1" send "0.18.0" @@ -5346,7 +5253,7 @@ express@4.18.0: extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" @@ -5368,7 +5275,7 @@ extra-watch-webpack-plugin@1.0.3: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: version "1.4.1" @@ -5395,10 +5302,10 @@ fast-equals@^2.0.0: resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-2.0.4.tgz#3add9410585e2d7364c2deeb6a707beadb24b927" integrity sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w== -fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -5406,7 +5313,7 @@ fast-glob@^3.2.7, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -5414,29 +5321,34 @@ fast-json-stable-stringify@^2.0.0: fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-memoize@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e" + integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.14.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" + integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== dependencies: reusify "^1.0.4" -fasy@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/fasy/-/fasy-9.0.0.tgz#fac6cca002919fe8348796bf0b4dcfaecbd53832" - integrity sha512-ghKi2vUHjrzYqp/Mp8OTlrYGthZqEVQfHK2aTG51GR6hk+1xS3xCNZUZaYdx5CQlgZ+tAXlpkuOr+jWbecGu/A== +fasy@9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/fasy/-/fasy-9.0.2.tgz#0b570a05d13060d9ed779df50a860aaa298d1429" + integrity sha512-BA+KyMlWuZHJcnNwu7u1qeEo59m16Z8ogvcxY1Ncv5xcwu6LMxEHkiXVr9AaPpd7S7v4yf/i+kmSYTFotZyDhg== fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" @@ -5489,13 +5401,6 @@ find-root@^1.1.0: resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -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" @@ -5511,6 +5416,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -5520,19 +5433,26 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -follow-redirects@^1.14.9: - version "1.14.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" - integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== fork-ts-checker-webpack-plugin@6.5.0: version "6.5.0" @@ -5584,12 +5504,12 @@ fraction.js@^4.2.0: fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-extra@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== +fs-extra@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" + integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -5605,7 +5525,7 @@ fs-extra@^9.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-monkey@1.0.3: +fs-monkey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== @@ -5613,7 +5533,7 @@ fs-monkey@1.0.3: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" @@ -5625,12 +5545,22 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -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= +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -5640,14 +5570,14 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" + has-symbols "^1.0.3" get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" @@ -5676,20 +5606,6 @@ get-pixels-frame-info-update@^3.3.2: request "^2.44.0" through "^2.3.4" -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -5706,14 +5622,14 @@ get-symbol-description@^1.0.0: getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" gif-encoder@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/gif-encoder/-/gif-encoder-0.4.3.tgz#8a2b4fe8ca895a48e3a0b6cbb340a0a6a3571899" - integrity sha1-iitP6MqJWkjjoLbLs0CgpqNXGJk= + integrity sha512-HMfSa+EIng62NbDhM63QGYoc49/m8DcZ9hhBtw+CXX9mKboSpeFVxjZ2WEWaMFZ14MUjfACK7jsrxrJffIVrCg== dependencies: readable-stream "~1.1.9" @@ -5727,9 +5643,9 @@ gif-frames@1.0.1: save-pixels-jpeg-js-upgrade "^2.3.4-jpeg-js-upgrade.0" github-slugger@^1.0.0, github-slugger@^1.1.1, github-slugger@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" - integrity sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ== + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -5738,7 +5654,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.1, glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -5763,33 +5679,26 @@ glob@7.1.7: path-is-absolute "^1.0.0" glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== - dependencies: - ini "2.0.0" - globals@^11.1.0, globals@^11.12.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0, globals@^13.9.0: - version "13.12.1" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.1.tgz#ec206be932e6c77236677127577aa8e50bf1c5cb" - integrity sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw== +globals@^13.15.0: + version "13.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" + integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== dependencies: type-fest "^0.20.2" @@ -5798,7 +5707,7 @@ globalyzer@0.1.0: resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== -globby@^11.0.4: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -5810,15 +5719,14 @@ globby@^11.0.4: merge2 "^1.4.1" slash "^3.0.0" -globby@^12.0.2: - version "12.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-12.2.0.tgz#2ab8046b4fba4ff6eede835b29f678f90e3d3c22" - integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA== +globby@^13.1.1: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== dependencies: - array-union "^3.0.1" dir-glob "^3.0.1" - fast-glob "^3.2.7" - ignore "^5.1.9" + fast-glob "^3.2.11" + ignore "^5.2.0" merge2 "^1.4.1" slash "^4.0.0" @@ -5827,27 +5735,22 @@ globrex@^0.1.2: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== gray-matter@^4.0.2: version "4.0.3" @@ -5867,12 +5770,12 @@ gud@^1.0.0: hamt_plus@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hamt_plus/-/hamt_plus-1.0.2.tgz#e21c252968c7e33b20f6a1b094cd85787a265601" - integrity sha1-4hwlKWjH4zsg9qGwlM2FeHomVgE= + integrity sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA== har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" @@ -5887,22 +5790,29 @@ harmony-reflect@^1.4.6: resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1, has-symbols@^1.0.2: +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -5914,11 +5824,6 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -6009,13 +5914,6 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -history@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" - integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== - dependencies: - "@babel/runtime" "^7.7.6" - hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -6045,22 +5943,6 @@ html-void-elements@^1.0.0: resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - http-errors@2.0.0, http-errors@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -6075,7 +5957,7 @@ http-errors@2.0.0, http-errors@^2.0.0: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -6108,24 +5990,24 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: identity-obj-proxy@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== dependencies: harmony-reflect "^1.4.6" ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -ignore@^5.1.1, ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.1.1, ignore@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" + integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== -immutable@4.0.0, immutable@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" - integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== +immutable@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" @@ -6135,11 +6017,6 @@ 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-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - import-local@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" @@ -6151,7 +6028,7 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -6161,26 +6038,16 @@ indent-string@^4.0.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.4, inherits@~2.0.1: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@~2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" @@ -6200,10 +6067,10 @@ internmap@^1.0.0: resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== intersection-observer@0.12.2: version "0.12.2" @@ -6213,7 +6080,7 @@ intersection-observer@0.12.2: iota-array@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/iota-array/-/iota-array-1.0.0.tgz#81ef57fe5d05814cd58c2483632a99c30a0e8087" - integrity sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc= + integrity sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA== ipaddr.js@1.9.1: version "1.9.1" @@ -6238,7 +6105,7 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" -is-arguments@^1.0.4: +is-arguments@^1.0.4, is-arguments@^1.1.0, is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== @@ -6249,7 +6116,7 @@ is-arguments@^1.0.4: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" @@ -6284,32 +6151,25 @@ is-buffer@^2.0.0: integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== is-builtin-module@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" - integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" + integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== dependencies: - builtin-modules "^3.0.0" - -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + builtin-modules "^3.3.0" -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.2.0, is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -6324,12 +6184,12 @@ is-decimal@^1.0.0: is-extendable@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -6353,33 +6213,25 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - is-interactive@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-negative-zero@^2.0.1: +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" @@ -6391,14 +6243,14 @@ is-number@^7.0.0: is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-inside@^3.0.2: +is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -6426,12 +6278,19 @@ is-regex@^1.0.4, is-regex@^1.1.4: is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== -is-shared-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" - integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" is-stream@^2.0.0: version "2.0.1" @@ -6452,27 +6311,51 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-url@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== -is-weakref@^1.0.1: +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" -is-what@^4.1.6: - version "4.1.7" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.7.tgz#c41dc1d2d2d6a9285c624c2505f61849c8b1f9cc" - integrity sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ== +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +is-what@^4.1.8: + version "4.1.8" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.8.tgz#0e2a8807fda30980ddb2571c79db3d209b14cbe4" + integrity sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA== is-whitespace-character@^1.0.0: version "1.0.4" @@ -6484,37 +6367,37 @@ is-word-character@^1.0.0: resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - 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= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +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" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== iso-3166-1-alpha-2@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/iso-3166-1-alpha-2/-/iso-3166-1-alpha-2-1.0.0.tgz#bc9e0bb94e584df5468a932997a28552e26f97ac" - integrity sha1-vJ4LuU5YTfVGipMpl6KFUuJvl6w= + integrity sha512-ffnjHqGTL67bPVuOf7NNl7NhPABR1Dfoue+tXMCSzyBbfmwo2Y2Xve9nL3zZZ8YXhV9H7yL1u+HDeuJd8aft0Q== dependencies: mout "^0.11.0" isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" @@ -6522,9 +6405,9 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -6551,174 +6434,159 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" - integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-axe@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/jest-axe/-/jest-axe-6.0.0.tgz#e5ca8e9a0363c8c5f4e00760317bd7d7d29b90b4" - integrity sha512-gAh/2zoWii4Rbhe6IUIo5TTiseGJDCitFnDFwBNpIuaOciyQgVZue6jtd4W7oMoKHewKoRSuIol7t/MuGx+mqg== +jest-axe@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/jest-axe/-/jest-axe-7.0.0.tgz#0658629bdff87d50d35cb9eca66a9b462fb0092b" + integrity sha512-y+TH+GGH7zOYABWv5IrtGx4ove1dYcVg9Nv9pJZcqKQ+2goJCkAYoHAqergPaV/y9hh1Q9vZykjSXC/2U0Mjyg== dependencies: - axe-core "4.4.1" - chalk "4.1.0" - jest-matcher-utils "27.0.2" + axe-core "4.5.1" + chalk "4.1.2" + jest-matcher-utils "29.2.2" lodash.merge "4.6.2" -jest-chain@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/jest-chain/-/jest-chain-1.1.5.tgz#57b804d7d23f7c8455b62051795cfe5c444fa262" - integrity sha512-bTx51vQP/6/XVDrMtz0WmT3wZoXvj5QAAnw1to+o6pvtjcwTIVuB6uR5URRXH/9rHf1WuM1UgsfVTWhTC/QAzw== +jest-chain@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/jest-chain/-/jest-chain-1.1.6.tgz#24637e9d5136b6c15aa3c2e05c3e55a816523108" + integrity sha512-eIkGzVBGQ1VuEErDceMYAET53pcwYVVTXtJEbY+x60Dwi+2M2uOt4rhKAej+wfVOAlE4G0plI9mstmv6GBtJjw== -jest-changed-files@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.0.2.tgz#7d7810660a5bd043af9e9cfbe4d58adb05e91531" - integrity sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA== +jest-changed-files@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.2.0.tgz#b6598daa9803ea6a4dce7968e20ab380ddbee289" + integrity sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA== dependencies: execa "^5.0.0" - throat "^6.0.1" + p-limit "^3.1.0" -jest-circus@^28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.0.3.tgz#45f77090b4b9fe5c1b84f72816868c9d4c0f57b1" - integrity sha512-HJ3rUCm3A3faSy7KVH5MFCncqJLtrjEFkTPn9UIcs4Kq77+TXqHsOaI+/k73aHe6DJQigLUXq9rCYj3MYFlbIw== +jest-circus@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.3.1.tgz#177d07c5c0beae8ef2937a67de68f1e17bbf1b4a" + integrity sha512-wpr26sEvwb3qQQbdlmei+gzp6yoSSoSL6GsLPxnuayZSMrSd5Ka7IjAvatpIernBvT2+Ic6RLTg+jSebScmasg== dependencies: - "@jest/environment" "^28.0.2" - "@jest/expect" "^28.0.3" - "@jest/test-result" "^28.0.2" - "@jest/types" "^28.0.2" + "@jest/environment" "^29.3.1" + "@jest/expect" "^29.3.1" + "@jest/test-result" "^29.3.1" + "@jest/types" "^29.3.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^28.0.2" - jest-matcher-utils "^28.0.2" - jest-message-util "^28.0.2" - jest-runtime "^28.0.3" - jest-snapshot "^28.0.3" - jest-util "^28.0.2" - pretty-format "^28.0.2" + jest-each "^29.3.1" + jest-matcher-utils "^29.3.1" + jest-message-util "^29.3.1" + jest-runtime "^29.3.1" + jest-snapshot "^29.3.1" + jest-util "^29.3.1" + p-limit "^3.1.0" + pretty-format "^29.3.1" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.0.3.tgz#4a4e55078ec772e0ea2583dd4c4b38fb306dc556" - integrity sha512-NCPTEONCnhYGo1qzPP4OOcGF04YasM5GZSwQLI1HtEluxa3ct4U65IbZs6DSRt8XN1Rq0jhXwv02m5lHB28Uyg== +jest-cli@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.3.1.tgz#e89dff427db3b1df50cea9a393ebd8640790416d" + integrity sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ== dependencies: - "@jest/core" "^28.0.3" - "@jest/test-result" "^28.0.2" - "@jest/types" "^28.0.2" + "@jest/core" "^29.3.1" + "@jest/test-result" "^29.3.1" + "@jest/types" "^29.3.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^28.0.3" - jest-util "^28.0.2" - jest-validate "^28.0.2" + jest-config "^29.3.1" + jest-util "^29.3.1" + jest-validate "^29.3.1" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.0.3.tgz#9c0556d60d692153a6bc8652974182c22db9244f" - integrity sha512-3gWOEHwGpNhyYOk9vnUMv94x15QcdjACm7A3lERaluwnyD6d1WZWe9RFCShgIXVOHzRfG1hWxsI2U0gKKSGgDQ== +jest-config@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.3.1.tgz#0bc3dcb0959ff8662957f1259947aedaefb7f3c6" + integrity sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^28.0.2" - "@jest/types" "^28.0.2" - babel-jest "^28.0.3" + "@jest/test-sequencer" "^29.3.1" + "@jest/types" "^29.3.1" + babel-jest "^29.3.1" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^28.0.3" - jest-environment-node "^28.0.2" - jest-get-type "^28.0.2" - jest-regex-util "^28.0.2" - jest-resolve "^28.0.3" - jest-runner "^28.0.3" - jest-util "^28.0.2" - jest-validate "^28.0.2" + jest-circus "^29.3.1" + jest-environment-node "^29.3.1" + jest-get-type "^29.2.0" + jest-regex-util "^29.2.0" + jest-resolve "^29.3.1" + jest-runner "^29.3.1" + jest-util "^29.3.1" + jest-validate "^29.3.1" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^28.0.2" + pretty-format "^29.3.1" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.0.2, jest-diff@^27.2.5, jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-diff@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.0.2.tgz#a543c90082560cd6cb14c5f28c39e6d4618ad7a6" - integrity sha512-33Rnf821Y54OAloav0PGNWHlbtEorXpjwchnToyyWbec10X74FOW7hGfvrXLGz7xOe2dz0uo9JVFAHHj/2B5pg== +jest-diff@^29.0.0, jest-diff@^29.2.1, jest-diff@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.3.1.tgz#d8215b72fed8f1e647aed2cae6c752a89e757527" + integrity sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw== dependencies: chalk "^4.0.0" - diff-sequences "^28.0.2" - jest-get-type "^28.0.2" - pretty-format "^28.0.2" + diff-sequences "^29.3.1" + jest-get-type "^29.2.0" + pretty-format "^29.3.1" -jest-docblock@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.0.2.tgz#3cab8abea53275c9d670cdca814fc89fba1298c2" - integrity sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg== +jest-docblock@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.2.0.tgz#307203e20b637d97cee04809efc1d43afc641e82" + integrity sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A== dependencies: detect-newline "^3.0.0" -jest-each@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.0.2.tgz#fcf6843e9afe5a3f2d0b1c02aab1f41889d92f1d" - integrity sha512-/W5Wc0b+ipR36kDaLngdVEJ/5UYPOITK7rW0djTlCCQdMuWpCFJweMW4TzAoJ6GiRrljPL8FwiyOSoSHKrda2w== +jest-each@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.3.1.tgz#bc375c8734f1bb96625d83d1ca03ef508379e132" + integrity sha512-qrZH7PmFB9rEzCSl00BWjZYuS1BSOH8lLuC0azQE9lQrAx3PWGKHTDudQiOSwIy5dGAJh7KA0ScYlCP7JxvFYA== dependencies: - "@jest/types" "^28.0.2" + "@jest/types" "^29.3.1" chalk "^4.0.0" - jest-get-type "^28.0.2" - jest-util "^28.0.2" - pretty-format "^28.0.2" - -jest-environment-node@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.0.2.tgz#bd58e192b8f36a37e52c52fac812bd24b360c0b9" - integrity sha512-o9u5UHZ+NCuIoa44KEF0Behhsz/p1wMm0WumsZfWR1k4IVoWSt3aN0BavSC5dd26VxSGQvkrCnJxxOzhhUEG3Q== - dependencies: - "@jest/environment" "^28.0.2" - "@jest/fake-timers" "^28.0.2" - "@jest/types" "^28.0.2" + jest-get-type "^29.2.0" + jest-util "^29.3.1" + pretty-format "^29.3.1" + +jest-environment-node@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.3.1.tgz#5023b32472b3fba91db5c799a0d5624ad4803e74" + integrity sha512-xm2THL18Xf5sIHoU7OThBPtuH6Lerd+Y1NLYiZJlkE3hbE+7N7r8uvHIl/FkZ5ymKXJe/11SQuf3fv4v6rUMag== + dependencies: + "@jest/environment" "^29.3.1" + "@jest/fake-timers" "^29.3.1" + "@jest/types" "^29.3.1" "@types/node" "*" - jest-mock "^28.0.2" - jest-util "^28.0.2" + jest-mock "^29.3.1" + jest-util "^29.3.1" -jest-extended@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-2.0.0.tgz#8a6cef7369c2ef774bd966279a30cd73abe408dd" - integrity sha512-6AgjJQVaBEKGSK3FH90kOiRUWJsbzn9NWtW0pjGkAFIdH0oPilfkV/gHPJdVvJeBiqT3jMHw8TUg9pUGC1azDg== +jest-extended@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-3.2.0.tgz#4333dbb47e40acef3abccb1d22b7769c5fa90a0b" + integrity sha512-jy+1nwlPLPPR6O8O9Mn+BWCBq/jL/9OgdKEG8ekOSQoLyVvAO5nND8ll3UxoajzBu4kYyn7zUKYWRdnTfQPcVw== dependencies: - jest-diff "^27.2.5" - jest-get-type "^27.0.6" - -jest-get-type@^27.0.1, jest-get-type@^27.0.6, jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + jest-diff "^29.0.0" + jest-get-type "^29.0.0" -jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== +jest-get-type@^29.0.0, jest-get-type@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" + integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== jest-haste-map@^27.5.1: version "27.5.1" @@ -6740,191 +6608,182 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-haste-map@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.0.2.tgz#0c768f43680013cfd2a4471a3ec76c47bfb9e7c6" - integrity sha512-EokdL7l5uk4TqWGawwrIt8w3tZNcbeiRxmKGEURf42pl+/rWJy3sCJlon5HBhJXZTW978jk6600BLQOI7i25Ig== +jest-haste-map@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.3.1.tgz#af83b4347f1dae5ee8c2fb57368dc0bb3e5af843" + integrity sha512-/FFtvoG1xjbbPXQLFef+WSU4yrc0fc0Dds6aRPBojUid7qlPqZvxdUBA03HW0fnVHXVCnCdkuoghYItKNzc/0A== dependencies: - "@jest/types" "^28.0.2" + "@jest/types" "^29.3.1" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^28.0.2" - jest-util "^28.0.2" - jest-worker "^28.0.2" + jest-regex-util "^29.2.0" + jest-util "^29.3.1" + jest-worker "^29.3.1" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.0.2.tgz#cbde3d22d09bd690ececdc2ed01c608435328456" - integrity sha512-UGaSPYtxKXl/YKacq6juRAKmMp1z2os8NaU8PSC+xvNikmu3wF6QFrXrihMM4hXeMr9HuNotBrQZHmzDY8KIBQ== - dependencies: - jest-get-type "^28.0.2" - pretty-format "^28.0.2" - -jest-matcher-utils@27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz#f14c060605a95a466cdc759acc546c6f4cbfc4f0" - integrity sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA== +jest-leak-detector@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.3.1.tgz#95336d020170671db0ee166b75cd8ef647265518" + integrity sha512-3DA/VVXj4zFOPagGkuqHnSQf1GZBmmlagpguxEERO6Pla2g84Q1MaVIB3YMxgUaFIaYag8ZnTyQgiZ35YEqAQA== dependencies: - chalk "^4.0.0" - jest-diff "^27.0.2" - jest-get-type "^27.0.1" - pretty-format "^27.0.2" + jest-get-type "^29.2.0" + pretty-format "^29.3.1" -jest-matcher-utils@^27.0.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== +jest-matcher-utils@29.2.2: + version "29.2.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.2.2.tgz#9202f8e8d3a54733266784ce7763e9a08688269c" + integrity sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.2.1" + jest-get-type "^29.2.0" + pretty-format "^29.2.1" -jest-matcher-utils@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.0.2.tgz#eb461af204b6d0f05281e9228094f0ab7e9e8537" - integrity sha512-SxtTiI2qLJHFtOz/bySStCnwCvISAuxQ/grS+74dfTy5AuJw3Sgj9TVUvskcnImTfpzLoMCDJseRaeRrVYbAOA== +jest-matcher-utils@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz#6e7f53512f80e817dfa148672bd2d5d04914a572" + integrity sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ== dependencies: chalk "^4.0.0" - jest-diff "^28.0.2" - jest-get-type "^28.0.2" - pretty-format "^28.0.2" + jest-diff "^29.3.1" + jest-get-type "^29.2.0" + pretty-format "^29.3.1" -jest-message-util@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.0.2.tgz#f3cf36be72be4c4c4058cb34bd6673996d26dee3" - integrity sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA== +jest-message-util@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.3.1.tgz#37bc5c468dfe5120712053dd03faf0f053bd6adb" + integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.0.2" + "@jest/types" "^29.3.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^28.0.2" + pretty-format "^29.3.1" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.0.2.tgz#059b500b34c1dd76474ebcdeccc249fe4dd0249f" - integrity sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g== +jest-mock@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.3.1.tgz#60287d92e5010979d01f218c6b215b688e0f313e" + integrity sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA== dependencies: - "@jest/types" "^28.0.2" + "@jest/types" "^29.3.1" "@types/node" "*" + jest-util "^29.3.1" jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-raw-loader@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/jest-raw-loader/-/jest-raw-loader-1.0.1.tgz#ce9f56d54650f157c4a7d16d224ba5d613bcd626" - integrity sha1-zp9W1UZQ8VfEp9FtIkul1hO81iY= + integrity sha512-g9oaAjeC4/rIJk1Wd3RxVbOfMizowM7LSjEJqa4R9qDX0OjQNABXOhH+GaznUp+DjTGVPi2vPPbQXyX87DOnYg== jest-regex-util@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-regex-util@^28.0.0, jest-regex-util@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" - integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== +jest-regex-util@^29.0.0, jest-regex-util@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" + integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== -jest-resolve-dependencies@^28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.0.3.tgz#76d8f59f7e76ba36d76a1677eeaaed24560da7e0" - integrity sha512-lCgHMm0/5p0qHemrOzm7kI6JDei28xJwIf7XOEcv1HeAVHnsON8B8jO/woqlU+/GcOXb58ymieYqhk3zjGWnvQ== +jest-resolve-dependencies@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.3.1.tgz#a6a329708a128e68d67c49f38678a4a4a914c3bf" + integrity sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA== dependencies: - jest-regex-util "^28.0.2" - jest-snapshot "^28.0.3" + jest-regex-util "^29.2.0" + jest-snapshot "^29.3.1" -jest-resolve@^28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.0.3.tgz#63f8e6b53e40f265b3ca9116195221dd43e3d16d" - integrity sha512-lfgjd9JhEjpjIN3HLUfdysdK+A7ePQoYmd7WL9DUEWqdnngb1rF56eee6iDXJxl/3eSolpP43VD7VrhjL3NsoQ== +jest-resolve@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.3.1.tgz#9a4b6b65387a3141e4a40815535c7f196f1a68a7" + integrity sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^28.0.2" + jest-haste-map "^29.3.1" jest-pnp-resolver "^1.2.2" - jest-util "^28.0.2" - jest-validate "^28.0.2" + jest-util "^29.3.1" + jest-validate "^29.3.1" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner-eslint@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jest-runner-eslint/-/jest-runner-eslint-1.0.0.tgz#5cede321ed5ed57233462c5204a0fa8d90f993bd" - integrity sha512-LMlAaIQqIIySEThv651bfvzwX6J4nOu91RaEUYmXJgn4XXbM40rSMlBaC8ZrrFcFemu88MFlnrCLuYf7ZHE2sQ== +jest-runner-eslint@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jest-runner-eslint/-/jest-runner-eslint-1.1.0.tgz#9aa133cdc63a7dd813511870c709391eef3af89f" + integrity sha512-XAQnEIuaZ/wHU8YVR4AEka5FBg3P+fnKd/upk8D9lxhejsclgai5gle7Ay4eLQ1+mlh2y5Ya3/AmfYz8FFZKJQ== dependencies: chalk "^3.0.0" cosmiconfig "^6.0.0" create-jest-runner "^0.6.0" dot-prop "^5.3.0" -jest-runner@^28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.0.3.tgz#a8a409c685ad3081a44b149b2eb04bc4d47faaf9" - integrity sha512-4OsHMjBLtYUWCENucAQ4Za0jGfEbOFi/Fusv6dzUuaweqx8apb4+5p2LR2yvgF4StFulmxyC238tGLftfu+zBA== +jest-runner@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.3.1.tgz#a92a879a47dd096fea46bb1517b0a99418ee9e2d" + integrity sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA== dependencies: - "@jest/console" "^28.0.2" - "@jest/environment" "^28.0.2" - "@jest/test-result" "^28.0.2" - "@jest/transform" "^28.0.3" - "@jest/types" "^28.0.2" + "@jest/console" "^29.3.1" + "@jest/environment" "^29.3.1" + "@jest/test-result" "^29.3.1" + "@jest/transform" "^29.3.1" + "@jest/types" "^29.3.1" "@types/node" "*" chalk "^4.0.0" - emittery "^0.10.2" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^28.0.2" - jest-environment-node "^28.0.2" - jest-haste-map "^28.0.2" - jest-leak-detector "^28.0.2" - jest-message-util "^28.0.2" - jest-resolve "^28.0.3" - jest-runtime "^28.0.3" - jest-util "^28.0.2" - jest-watcher "^28.0.2" - jest-worker "^28.0.2" + jest-docblock "^29.2.0" + jest-environment-node "^29.3.1" + jest-haste-map "^29.3.1" + jest-leak-detector "^29.3.1" + jest-message-util "^29.3.1" + jest-resolve "^29.3.1" + jest-runtime "^29.3.1" + jest-util "^29.3.1" + jest-watcher "^29.3.1" + jest-worker "^29.3.1" + p-limit "^3.1.0" source-map-support "0.5.13" - throat "^6.0.1" - -jest-runtime@^28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.0.3.tgz#02346a34de0ac61d23bdb0e8c035ad973d7bb087" - integrity sha512-7FtPUmvbZEHLOdjsF6dyHg5Pe4E0DU+f3Vvv8BPzVR7mQA6nFR4clQYLAPyJGnsUvN8WRWn+b5a5SVwnj1WaGg== - dependencies: - "@jest/environment" "^28.0.2" - "@jest/fake-timers" "^28.0.2" - "@jest/globals" "^28.0.3" - "@jest/source-map" "^28.0.2" - "@jest/test-result" "^28.0.2" - "@jest/transform" "^28.0.3" - "@jest/types" "^28.0.2" + +jest-runtime@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.3.1.tgz#21efccb1a66911d6d8591276a6182f520b86737a" + integrity sha512-jLzkIxIqXwBEOZx7wx9OO9sxoZmgT2NhmQKzHQm1xwR1kNW/dn0OjxR424VwHHf1SPN6Qwlb5pp1oGCeFTQ62A== + dependencies: + "@jest/environment" "^29.3.1" + "@jest/fake-timers" "^29.3.1" + "@jest/globals" "^29.3.1" + "@jest/source-map" "^29.2.0" + "@jest/test-result" "^29.3.1" + "@jest/transform" "^29.3.1" + "@jest/types" "^29.3.1" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^28.0.2" - jest-message-util "^28.0.2" - jest-mock "^28.0.2" - jest-regex-util "^28.0.2" - jest-resolve "^28.0.3" - jest-snapshot "^28.0.3" - jest-util "^28.0.2" + jest-haste-map "^29.3.1" + jest-message-util "^29.3.1" + jest-mock "^29.3.1" + jest-regex-util "^29.2.0" + jest-resolve "^29.3.1" + jest-snapshot "^29.3.1" + jest-util "^29.3.1" slash "^3.0.0" strip-bom "^4.0.0" @@ -6936,41 +6795,42 @@ jest-serializer@^27.5.1: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.0.3.tgz#9a768d0c617d070e87c1bd37240f22b344616154" - integrity sha512-nVzAAIlAbrMuvVUrS1YxmAeo1TfSsDDU+K5wv/Ow56MBp+L+Y71ksAbwRp3kGCgZAz4oOXcAMPAwtT9Yh1hlQQ== +jest-snapshot@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.3.1.tgz#17bcef71a453adc059a18a32ccbd594b8cc4e45e" + integrity sha512-+3JOc+s28upYLI2OJM4PWRGK9AgpsMs/ekNryUV0yMBClT9B1DF2u2qay8YxcQd338PPYSFNb0lsar1B49sLDA== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^28.0.2" - "@jest/transform" "^28.0.3" - "@jest/types" "^28.0.2" + "@jest/expect-utils" "^29.3.1" + "@jest/transform" "^29.3.1" + "@jest/types" "^29.3.1" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^28.0.2" + expect "^29.3.1" graceful-fs "^4.2.9" - jest-diff "^28.0.2" - jest-get-type "^28.0.2" - jest-haste-map "^28.0.2" - jest-matcher-utils "^28.0.2" - jest-message-util "^28.0.2" - jest-util "^28.0.2" + jest-diff "^29.3.1" + jest-get-type "^29.2.0" + jest-haste-map "^29.3.1" + jest-matcher-utils "^29.3.1" + jest-message-util "^29.3.1" + jest-util "^29.3.1" natural-compare "^1.4.0" - pretty-format "^28.0.2" + pretty-format "^29.3.1" semver "^7.3.5" -jest-styled-components@7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-7.0.8.tgz#9ea3b43f002de060b4638fde3b422d14b3e3ec9f" - integrity sha512-0KE54d0yIzKcvtOv8eikyjG3rFRtKYUyQovaoha3nondtZzXYGB3bhsvYgEegU08Iry0ndWx2+g9f5ZzD4I+0Q== +jest-styled-components@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-7.1.1.tgz#faf19c733e0de4bbef1f9151955b99e839b7df48" + integrity sha512-OUq31R5CivBF8oy81dnegNQrRW13TugMol/Dz6ZnFfEyo03exLASod7YGwyHGuayYlKmCstPtz0RQ1+NrAbIIA== dependencies: - css "^3.0.0" + "@adobe/css-tools" "^4.0.1" jest-transformer-mdx@3.3.0: version "3.3.0" @@ -6998,55 +6858,55 @@ jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.0.2.tgz#8e22cdd6e0549e0a393055f0e2da7eacc334b143" - integrity sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA== +jest-util@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" + integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== dependencies: - "@jest/types" "^28.0.2" + "@jest/types" "^29.3.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.0.2.tgz#58bb7e826c054a8bb3b54c05f73758d96cf6dbef" - integrity sha512-nr0UOvCTtxP0YPdsk01Gk7e7c0xIiEe2nncAe3pj0wBfUvAykTVrMrdeASlAJnlEQCBuwN/GF4hKoCzbkGNCNw== +jest-validate@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.3.1.tgz#d56fefaa2e7d1fde3ecdc973c7f7f8f25eea704a" + integrity sha512-N9Lr3oYR2Mpzuelp1F8negJR3YE+L1ebk1rYA5qYo9TTY3f9OWdptLoNSPP9itOCBIRBqjt/S5XHlzYglLN67g== dependencies: - "@jest/types" "^28.0.2" + "@jest/types" "^29.3.1" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^28.0.2" + jest-get-type "^29.2.0" leven "^3.1.0" - pretty-format "^28.0.2" + pretty-format "^29.3.1" -jest-watch-typeahead@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9" - integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw== +jest-watch-typeahead@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-2.2.1.tgz#36601520a2a30fd561788552dbda9c76bb44814a" + integrity sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA== dependencies: - ansi-escapes "^4.3.1" + ansi-escapes "^6.0.0" chalk "^4.0.0" - jest-regex-util "^28.0.0" - jest-watcher "^28.0.0" - slash "^4.0.0" + jest-regex-util "^29.0.0" + jest-watcher "^29.0.0" + slash "^5.0.0" string-length "^5.0.1" strip-ansi "^7.0.1" -jest-watcher@^28.0.0, jest-watcher@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.0.2.tgz#649fa24df531d4071be5784b6274d494d788c88b" - integrity sha512-uIVJLpQ/5VTGQWBiBatHsi7jrCqHjHl0e0dFHMWzwuIfUbdW/muk0DtSr0fteY2T7QTFylv+7a5Rm8sBKrE12Q== +jest-watcher@^29.0.0, jest-watcher@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.3.1.tgz#3341547e14fe3c0f79f9c3a4c62dbc3fc977fd4a" + integrity sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg== dependencies: - "@jest/test-result" "^28.0.2" - "@jest/types" "^28.0.2" + "@jest/test-result" "^29.3.1" + "@jest/types" "^29.3.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.10.2" - jest-util "^28.0.2" + emittery "^0.13.1" + jest-util "^29.3.1" string-length "^4.0.1" jest-worker@^25.1.0: @@ -7066,33 +6926,35 @@ jest-worker@^27.4.5, jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.0.2.tgz#75f7e5126541289ba02e9c1a67e46349ddb8141d" - integrity sha512-pijNxfjxT0tGAx+8+OzZ+eayVPCwy/rsZFhebmC0F4YnXu1EHPEPxg7utL3m5uX3EaFH1/jwDxGa1EbjJCST2g== +jest-worker@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.3.1.tgz#e9462161017a9bb176380d721cab022661da3d6b" + integrity sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw== dependencies: "@types/node" "*" + jest-util "^29.3.1" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@28.0.3: - version "28.0.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-28.0.3.tgz#92a7d6ee097b61de4ba2db7f3ab723e81a99b32d" - integrity sha512-uS+T5J3w5xyzd1KSJCGKhCo8WTJXbNl86f5SW11wgssbandJOVLRKKUxmhdFfmKxhPeksl1hHZ0HaA8VBzp7xA== +jest@29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.3.1.tgz#c130c0d551ae6b5459b8963747fed392ddbde122" + integrity sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA== dependencies: - "@jest/core" "^28.0.3" + "@jest/core" "^29.3.1" + "@jest/types" "^29.3.1" import-local "^3.0.2" - jest-cli "^28.0.3" + jest-cli "^29.3.1" jpeg-js@^0.3.2: version "0.3.7" resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d" integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ== -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -7117,7 +6979,7 @@ js-yaml@^3.13.1: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jsesc@^2.5.1: version "2.5.2" @@ -7127,24 +6989,19 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-loader@0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -7167,12 +7024,12 @@ json-schema@0.4.0: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^1.0.1: version "1.0.1" @@ -7181,22 +7038,15 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -json5@^2.2.1: +json5@^2.1.2, json5@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== jsonc-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" - integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonfile@^6.0.1: version "6.1.0" @@ -7210,7 +7060,7 @@ jsonfile@^6.0.1: jsonp@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/jsonp/-/jsonp-0.2.1.tgz#a65b4fa0f10bda719a05441ea7b94c55f3e15bae" - integrity sha1-pltPoPEL2nGaBUQep7lMVfPhW64= + integrity sha512-pfog5gdDxPdV4eP7Kg87M8/bHgshlZ5pybl+yKxAnCZ5O7lCIn7Ixydj03wOlnDQesky2BPyA91SQ+5Y/mNwzw== dependencies: debug "^2.1.3" @@ -7224,20 +7074,13 @@ jsprim@^1.2.2: json-schema "0.4.0" verror "1.10.0" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" - integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== - dependencies: - array-includes "^3.1.3" - object.assign "^4.1.2" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== dependencies: - json-buffer "3.0.0" + array-includes "^3.1.5" + object.assign "^4.1.3" kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" @@ -7254,24 +7097,17 @@ klona@^2.0.5: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== -language-subtag-registry@~0.3.2: - version "0.3.21" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" - integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== +language-subtag-registry@^0.3.20: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= - dependencies: - language-subtag-registry "~0.3.2" - -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + version "1.0.6" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.6.tgz#c087cc42cd92eb71f0925e9e271d4f8be5a93430" + integrity sha512-HNkaCgM8wZgE/BZACeotAAgpL9FUjEnhgF0FVQMIgH//zqTPreLYMb3rWYkYAqPoF75Jwuycp1da7uz66cfFQg== dependencies: - package-json "^6.3.0" + language-subtag-registry "^0.3.20" leven@^3.1.0: version "3.1.0" @@ -7294,7 +7130,7 @@ lines-and-columns@^1.1.6: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -7302,9 +7138,9 @@ load-json-file@^4.0.0: strip-bom "^3.0.0" loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@2.0.0: version "2.0.0" @@ -7316,22 +7152,14 @@ loader-utils@2.0.0: json5 "^2.1.2" loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^2.1.2" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -7347,6 +7175,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash-webpack-plugin@0.11.6: version "0.11.6" resolved "https://registry.yarnpkg.com/lodash-webpack-plugin/-/lodash-webpack-plugin-0.11.6.tgz#8204c6b78beb62ce5211217dfe783c21557ecd33" @@ -7357,7 +7192,7 @@ lodash-webpack-plugin@0.11.6: 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= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.merge@4.6.2, lodash.merge@^4.6.2: version "4.6.2" @@ -7367,9 +7202,9 @@ lodash.merge@4.6.2, lodash.merge@^4.6.2: lodash.uniq@4.5.0, 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= + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7381,16 +7216,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -7398,15 +7223,15 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -luxon@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.3.2.tgz#5f2f3002b8c39b60a7b7ad24b2a85d90dc5db49c" - integrity sha512-MlAQQVMFhGk4WUA6gpfsy0QycnKP0+NlCBJRVRNPxxSIbjrCbQ65nrpJD3FVyJNZLuJ0uoqL57ye6BmDYgHaSw== +luxon@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.1.1.tgz#b492c645b2474fb86f3bd3283213846b99c32c1e" + integrity sha512-Ah6DloGmvseB/pX1cAmjbFvyU/pKuwQMQqz7d0yvuDlVYLTs2WeDHQMpC8tGjm1da+BriHROW/OEIT/KfYg6xw== lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" @@ -7430,28 +7255,15 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" -map.prototype.tojson@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map.prototype.tojson/-/map.prototype.tojson-0.1.3.tgz#3b9edb44bc94d921ccb7b53e9f6c8e82e74519b5" - integrity sha1-O57bRLyU2SHMt7U+n2yOgudFGbU= - markdown-escapes@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== -marked@4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.14.tgz#7a3a5fa5c80580bac78c1ed2e3b84d7bd6fc3870" - integrity sha512-HL5sSPE/LP6U9qKgngIIPTthuxC0jrfxpYMZ3LdGDD3vTnLs59m2Z7r6+LNDR3ToqEQdkKd6YaaEfJhodJmijQ== - -match-sorter@^6.0.2: - version "6.3.1" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" - integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== - dependencies: - "@babel/runtime" "^7.12.5" - remove-accents "0.4.2" +marked@4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.4.tgz#5a4ce6c7a1ae0c952601fce46376ee4cf1797e1c" + integrity sha512-Wcc9ikX7Q5E4BYDPvh1C6QNSxrjC9tBgz+A/vAhp59KXUgachw++uMvMKiSW8oA85nopmPZcEvBoex/YLMsiyA== mdast-squeeze-paragraphs@^4.0.0: version "4.0.0" @@ -7509,50 +7321,59 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -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.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== mdurl@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.1.2: - version "3.4.1" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305" - integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw== + version "3.4.12" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.12.tgz#d00f8ad8dab132dc277c659dc85bfd14b07d03bd" + integrity sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw== dependencies: - fs-monkey "1.0.3" + fs-monkey "^1.0.3" -memoize-one@^5.0.0, memoize-one@^5.1.1: +memoize-one@^5.1.1: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== +memoize-one@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -merge-anything@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-5.0.2.tgz#b023af9b8f48e2fc71eb859d4ad834ba667f4150" - integrity sha512-POPQBWkBC0vxdgzRJ2Mkj4+2NTKbvkHo93ih+jGDhNMLzIw+rYKjO7949hOQM2X7DxMHH1uoUkwWFLIzImw7gA== +merge-anything@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-5.1.4.tgz#c63132bfa5a4eddeff6f8dfa0df9d930253c8dee" + integrity sha512-7PWKwGOs5WWcpw+/OvbiFiAvEP6bv/QHiicigpqMGKIqPPAtGhBLR8LFJW+Zu6m9TXiR/a8+AiPlGG0ko1ruoQ== dependencies: - is-what "^4.1.6" - ts-toolbelt "^9.6.0" + is-what "^4.1.8" merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" @@ -7567,32 +7388,27 @@ merge2@^1.3.0, merge2@^1.4.1: methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - braces "^3.0.1" - picomatch "^2.2.3" + braces "^3.0.2" + picomatch "^2.3.1" -microseconds@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" - integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== - -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.0.1, mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.51.0" + mime-db "1.52.0" mime@1.6.0: version "1.6.0" @@ -7604,54 +7420,32 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - 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== -minimatch@^3.0.4, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -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== - dependencies: - minimist "^1.2.5" - -moment@2.29.3: - version "2.29.3" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3" - integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw== +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== mout@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/mout/-/mout-0.11.1.tgz#ba3611df5f0e5b1ffbfd01166b8f02d1f5fa2b99" - integrity sha1-ujYR318OWx/7/QEWa48C0fX6K5k= + integrity sha512-pK9VNiLE3QgGBrC/3ICAscwOLU7oTNeK2l32uqNAioBYtB2tQAfSsGDNChUlk7CP23126mc5lUt6+na9FlN8JA== ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" @@ -7666,36 +7460,34 @@ ms@2.1.3, ms@^2.1.1: multi-integer-range@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/multi-integer-range/-/multi-integer-range-3.0.0.tgz#d8ec2744d08758f2acf81653d2fe038a95cf7595" - integrity sha1-2OwnRNCHWPKs+BZT0v4DipXPdZU= + integrity sha512-uQzynjVJ8F7x5wjaK0g4Ybhy2TvO/pk96+YHyS5g1W4GuUEV6HMebZ8HcRwWgKIRCUT2MLbM5uCKwYcAqkS+8Q== -nano-time@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" - integrity sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8= - dependencies: - big-integer "^1.6.16" +nanoid@^3.1.30, nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== -nanoid@^3.1.30, nanoid@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== ndarray-ops@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ndarray-ops/-/ndarray-ops-1.2.2.tgz#59e88d2c32a7eebcb1bc690fae141579557a614e" - integrity sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4= + integrity sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw== dependencies: cwise-compiler "^1.0.0" ndarray-pack@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ndarray-pack/-/ndarray-pack-1.2.1.tgz#8caebeaaa24d5ecf70ff86020637977da8ee585a" - integrity sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo= + integrity sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g== dependencies: cwise-compiler "^1.1.2" ndarray "^1.0.13" @@ -7723,13 +7515,12 @@ next-compose-plugins@2.2.1: resolved "https://registry.yarnpkg.com/next-compose-plugins/-/next-compose-plugins-2.2.1.tgz#020fc53f275a7e719d62521bef4300fbb6fde5ab" integrity sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg== -next-transpile-modules@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/next-transpile-modules/-/next-transpile-modules-9.0.0.tgz#133b1742af082e61cc76b02a0f12ffd40ce2bf90" - integrity sha512-VCNFOazIAnXn1hvgYYSTYMnoWgKgwlYh4lm1pKbSfiB3kj5ZYLcKVhfh3jkPOg1cnd9DP+pte9yCUocdPEUBTQ== +next-transpile-modules@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/next-transpile-modules/-/next-transpile-modules-10.0.0.tgz#7152880048835acb64d05fc7aa34910cbe7994da" + integrity sha512-FyeJ++Lm2Fq31gbThiRCrJlYpIY9QaI7A3TjuhQLzOix8ChQrvn5ny4MhfIthS5cy6+uK1AhDRvxVdW17y3Xdw== dependencies: - enhanced-resolve "^5.7.0" - escalade "^3.1.1" + enhanced-resolve "^5.10.0" next@12.1.6: version "12.1.6" @@ -7754,6 +7545,32 @@ next@12.1.6: "@next/swc-win32-ia32-msvc" "12.1.6" "@next/swc-win32-x64-msvc" "12.1.6" +next@12.3.4: + version "12.3.4" + resolved "https://registry.yarnpkg.com/next/-/next-12.3.4.tgz#f2780a6ebbf367e071ce67e24bd8a6e05de2fcb1" + integrity sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ== + dependencies: + "@next/env" "12.3.4" + "@swc/helpers" "0.4.11" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.0.7" + use-sync-external-store "1.2.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "12.3.4" + "@next/swc-android-arm64" "12.3.4" + "@next/swc-darwin-arm64" "12.3.4" + "@next/swc-darwin-x64" "12.3.4" + "@next/swc-freebsd-x64" "12.3.4" + "@next/swc-linux-arm-gnueabihf" "12.3.4" + "@next/swc-linux-arm64-gnu" "12.3.4" + "@next/swc-linux-arm64-musl" "12.3.4" + "@next/swc-linux-x64-gnu" "12.3.4" + "@next/swc-linux-x64-musl" "12.3.4" + "@next/swc-win32-arm64-msvc" "12.3.4" + "@next/swc-win32-ia32-msvc" "12.3.4" + "@next/swc-win32-x64-msvc" "12.3.4" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -7762,7 +7579,7 @@ nice-try@^1.0.4: node-bitmap@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/node-bitmap/-/node-bitmap-0.0.1.tgz#180eac7003e0c707618ef31368f62f84b2a69091" - integrity sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE= + integrity sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA== node-environment-flags@^1.0.5: version "1.0.6" @@ -7775,38 +7592,33 @@ node-environment-flags@^1.0.5: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" - integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== -nodemon@2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.16.tgz#d71b31bfdb226c25de34afea53486c8ef225fdef" - integrity sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w== +nodemon@2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.20.tgz#e3537de768a492e8d74da5c5813cb0c7486fc701" + integrity sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw== dependencies: chokidar "^3.5.2" debug "^3.2.7" ignore-by-default "^1.0.1" - minimatch "^3.0.4" + minimatch "^3.1.2" pstree.remy "^1.1.8" semver "^5.7.1" + simple-update-notifier "^1.0.7" supports-color "^5.5.0" touch "^3.1.0" undefsafe "^2.0.5" - update-notifier "^5.1.0" nopt@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== dependencies: abbrev "1" @@ -7828,12 +7640,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.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@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== npm-run-all@4.1.5: version "4.1.5" @@ -7857,12 +7664,12 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: - boolbase "~1.0.0" + boolbase "^1.0.0" oauth-sign@~0.9.0: version "0.9.0" @@ -7872,14 +7679,14 @@ oauth-sign@~0.9.0: object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.11.0, object-inspect@^1.9.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== -object-is@^1.0.1: +object-is@^1.0.1, object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -7887,69 +7694,65 @@ object-is@^1.0.1: call-bind "^1.0.2" define-properties "^1.1.3" -object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== +object.entries@^1.1.5, object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== +object.getownpropertydescriptors@^2.0.3: + version "2.1.5" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" + integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== dependencies: + array.prototype.reduce "^1.0.5" call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.hasown@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" - integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== dependencies: - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.values@^1.1.0, object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== +object.values@^1.1.5, object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -oblivious-set@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" - integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== + define-properties "^1.1.4" + es-abstract "^1.20.4" omggif@^1.0.5: version "1.0.10" @@ -7963,17 +7766,10 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -7996,18 +7792,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -8015,12 +7799,12 @@ p-limit@^2.0.0, p-limit@^2.2.0: 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" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-limit "^1.1.0" + yocto-queue "^0.1.0" p-locate@^3.0.0: version "3.0.0" @@ -8036,31 +7820,18 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -papaparse@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.2.0.tgz#97976a1b135c46612773029153dc64995caa3b7b" - integrity sha512-ylq1wgUSnagU+MKQtNeVqrPhZuMYBvOSL00DHycFTCxownF95gpLAk1HiHdUW77N8yxRq1qHXLdlIPyBSG9NSA== - papaparse@5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.3.2.tgz#d1abed498a0ee299f103130a6109720404fbd467" @@ -8076,7 +7847,7 @@ parent-module@^1.0.0: parse-data-uri@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/parse-data-uri/-/parse-data-uri-0.2.0.tgz#bf04d851dd5c87b0ab238e5d01ace494b604b4c9" - integrity sha1-vwTYUd1ch7CrI45dAazklLYEtMk= + integrity sha512-uOtts8NqDcaCt1rIsO3VFDRsAfgE4c6osG4d9z3l4dCBlxYFzni6Di/oNU270SDrjkfZuUvLZx1rxMyqh46Y9w== dependencies: data-uri-to-buffer "0.0.3" @@ -8095,7 +7866,7 @@ parse-entities@^2.0.0: parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -8113,7 +7884,7 @@ parse-json@^5.0.0, parse-json@^5.2.0: parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== parse5@^6.0.0: version "6.0.1" @@ -8128,7 +7899,7 @@ parseurl@~1.3.3: path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -8138,19 +7909,19 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6, path-parse@^1.0.7: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -8158,7 +7929,7 @@ path-parse@^1.0.6, path-parse@^1.0.7: path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-type@^3.0.0: version "3.0.0" @@ -8175,14 +7946,14 @@ path-type@^4.0.0: performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -8195,7 +7966,7 @@ pidtree@^0.3.0: pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" @@ -8229,7 +8000,7 @@ pluralize@^8.0.0: pngjs-nozlib@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pngjs-nozlib/-/pngjs-nozlib-1.0.0.tgz#9e64d602cfe9cce4d9d5997d0687429a73f0b7d7" - integrity sha1-nmTWAs/pzOTZ1Zl9BodCmnPwt9c= + integrity sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA== pngjs@^3.3.3: version "3.4.0" @@ -8248,12 +8019,12 @@ popper.js@^1.14.4: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== -postcss-attribute-case-insensitive@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz#39cbf6babf3ded1e4abf37d09d6eda21c644105c" - integrity sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ== +postcss-attribute-case-insensitive@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" + integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== dependencies: - postcss-selector-parser "^6.0.2" + postcss-selector-parser "^6.0.10" postcss-clamp@^4.1.0: version "4.1.0" @@ -8262,57 +8033,59 @@ postcss-clamp@^4.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-color-functional-notation@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz#f59ccaeb4ee78f1b32987d43df146109cc743073" - integrity sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ== +postcss-color-functional-notation@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" + integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== dependencies: postcss-value-parser "^4.2.0" -postcss-color-hex-alpha@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz#61a0fd151d28b128aa6a8a21a2dad24eebb34d52" - integrity sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw== +postcss-color-hex-alpha@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" + integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== dependencies: postcss-value-parser "^4.2.0" -postcss-color-rebeccapurple@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz#5d397039424a58a9ca628762eb0b88a61a66e079" - integrity sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw== +postcss-color-rebeccapurple@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" + integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== dependencies: postcss-value-parser "^4.2.0" -postcss-custom-media@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz#1be6aff8be7dc9bf1fe014bde3b71b92bb4552f1" - integrity sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g== +postcss-custom-media@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" + integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== + dependencies: + postcss-value-parser "^4.2.0" -postcss-custom-properties@^12.1.7: - version "12.1.7" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.7.tgz#ca470fd4bbac5a87fd868636dafc084bc2a78b41" - integrity sha512-N/hYP5gSoFhaqxi2DPCmvto/ZcRDVjE3T1LiAMzc/bg53hvhcHOLpXOHb526LzBBp5ZlAUhkuot/bfpmpgStJg== +postcss-custom-properties@^12.1.10: + version "12.1.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf" + integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== dependencies: postcss-value-parser "^4.2.0" -postcss-custom-selectors@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz#022839e41fbf71c47ae6e316cb0e6213012df5ef" - integrity sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q== +postcss-custom-selectors@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" + integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== dependencies: postcss-selector-parser "^6.0.4" -postcss-dir-pseudo-class@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz#9afe49ea631f0cb36fa0076e7c2feb4e7e3f049c" - integrity sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw== +postcss-dir-pseudo-class@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" + integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== dependencies: - postcss-selector-parser "^6.0.9" + postcss-selector-parser "^6.0.10" -postcss-double-position-gradients@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz#a12cfdb7d11fa1a99ccecc747f0c19718fb37152" - integrity sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ== +postcss-double-position-gradients@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" + integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" @@ -8348,15 +8121,15 @@ postcss-font-variant@^5.0.0: resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== -postcss-gap-properties@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz#6401bb2f67d9cf255d677042928a70a915e6ba60" - integrity sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ== +postcss-gap-properties@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" + integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== -postcss-image-set-function@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz#bcff2794efae778c09441498f40e0c77374870a9" - integrity sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A== +postcss-image-set-function@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" + integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== dependencies: postcss-value-parser "^4.2.0" @@ -8365,22 +8138,22 @@ postcss-initial@^4.0.1: resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== -postcss-lab-function@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz#e054e662c6480202f5760887ec1ae0d153357123" - integrity sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w== +postcss-lab-function@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" + integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-loader@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== +postcss-loader@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.2.tgz#b53ff44a26fba3688eee92a048c7f2d4802e23bb" + integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== dependencies: cosmiconfig "^7.0.0" klona "^2.0.5" - semver "^7.3.5" + semver "^7.3.8" postcss-logical@^5.0.4: version "5.0.4" @@ -8420,11 +8193,12 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^10.1.4: - version "10.1.4" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.1.4.tgz#80de9d1c2717bc44df918dd7f118929300192a7a" - integrity sha512-2ixdQ59ik/Gt1+oPHiI1kHdwEI8lLKEmui9B1nl6163ANLC+GewQn7fXMxJF2JSb4i2MKL96GU8fIiQztK4TTA== +postcss-nesting@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" + integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== dependencies: + "@csstools/selector-specificity" "^2.0.0" postcss-selector-parser "^6.0.10" postcss-opacity-percentage@^1.1.2: @@ -8432,76 +8206,84 @@ postcss-opacity-percentage@^1.1.2: resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz#bd698bb3670a0a27f6d657cc16744b3ebf3b1145" integrity sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w== -postcss-overflow-shorthand@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz#ebcfc0483a15bbf1b27fdd9b3c10125372f4cbc2" - integrity sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg== +postcss-overflow-shorthand@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" + integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== + dependencies: + postcss-value-parser "^4.2.0" postcss-page-break@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== -postcss-place@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.4.tgz#eb026650b7f769ae57ca4f938c1addd6be2f62c9" - integrity sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg== +postcss-place@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" + integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== dependencies: postcss-value-parser "^4.2.0" -postcss-preset-env@7.4.4: - version "7.4.4" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.4.4.tgz#069e34e31e2a7345154da7936b9fc1fcbdbd6d43" - integrity sha512-MqzSEx/QsvOk562iV9mLTgIvLFEOq1os9QBQfkgnq8TW6yKhVFPGh0gdXSK5ZlmjuNQEga6/x833e86XZF/lug== - dependencies: - "@csstools/postcss-color-function" "^1.1.0" - "@csstools/postcss-font-format-keywords" "^1.0.0" - "@csstools/postcss-hwb-function" "^1.0.0" - "@csstools/postcss-ic-unit" "^1.0.0" - "@csstools/postcss-is-pseudo-class" "^2.0.2" - "@csstools/postcss-normalize-display-values" "^1.0.0" - "@csstools/postcss-oklab-function" "^1.1.0" +postcss-preset-env@7.8.3: + version "7.8.3" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz#2a50f5e612c3149cc7af75634e202a5b2ad4f1e2" + integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== + dependencies: + "@csstools/postcss-cascade-layers" "^1.1.1" + "@csstools/postcss-color-function" "^1.1.1" + "@csstools/postcss-font-format-keywords" "^1.0.1" + "@csstools/postcss-hwb-function" "^1.0.2" + "@csstools/postcss-ic-unit" "^1.0.1" + "@csstools/postcss-is-pseudo-class" "^2.0.7" + "@csstools/postcss-nested-calc" "^1.0.0" + "@csstools/postcss-normalize-display-values" "^1.0.1" + "@csstools/postcss-oklab-function" "^1.1.1" "@csstools/postcss-progressive-custom-properties" "^1.3.0" - autoprefixer "^10.4.5" - browserslist "^4.20.3" + "@csstools/postcss-stepped-value-functions" "^1.0.1" + "@csstools/postcss-text-decoration-shorthand" "^1.0.0" + "@csstools/postcss-trigonometric-functions" "^1.0.2" + "@csstools/postcss-unset-value" "^1.0.2" + autoprefixer "^10.4.13" + browserslist "^4.21.4" css-blank-pseudo "^3.0.3" css-has-pseudo "^3.0.4" css-prefers-color-scheme "^6.0.3" - cssdb "^6.5.0" - postcss-attribute-case-insensitive "^5.0.0" + cssdb "^7.1.0" + postcss-attribute-case-insensitive "^5.0.2" postcss-clamp "^4.1.0" - postcss-color-functional-notation "^4.2.2" - postcss-color-hex-alpha "^8.0.3" - postcss-color-rebeccapurple "^7.0.2" - postcss-custom-media "^8.0.0" - postcss-custom-properties "^12.1.7" - postcss-custom-selectors "^6.0.0" - postcss-dir-pseudo-class "^6.0.4" - postcss-double-position-gradients "^3.1.1" + postcss-color-functional-notation "^4.2.4" + postcss-color-hex-alpha "^8.0.4" + postcss-color-rebeccapurple "^7.1.1" + postcss-custom-media "^8.0.2" + postcss-custom-properties "^12.1.10" + postcss-custom-selectors "^6.0.3" + postcss-dir-pseudo-class "^6.0.5" + postcss-double-position-gradients "^3.1.2" postcss-env-function "^4.0.6" postcss-focus-visible "^6.0.4" postcss-focus-within "^5.0.4" postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.3" - postcss-image-set-function "^4.0.6" + postcss-gap-properties "^3.0.5" + postcss-image-set-function "^4.0.7" postcss-initial "^4.0.1" - postcss-lab-function "^4.2.0" + postcss-lab-function "^4.2.1" postcss-logical "^5.0.4" postcss-media-minmax "^5.0.0" - postcss-nesting "^10.1.4" + postcss-nesting "^10.2.0" postcss-opacity-percentage "^1.1.2" - postcss-overflow-shorthand "^3.0.3" + postcss-overflow-shorthand "^3.0.4" postcss-page-break "^3.0.4" - postcss-place "^7.0.4" - postcss-pseudo-class-any-link "^7.1.2" + postcss-place "^7.0.5" + postcss-pseudo-class-any-link "^7.1.6" postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^5.0.0" + postcss-selector-not "^6.0.1" postcss-value-parser "^4.2.0" -postcss-pseudo-class-any-link@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.2.tgz#81ec491aa43f97f9015e998b7a14263b4630bdf0" - integrity sha512-76XzEQv3g+Vgnz3tmqh3pqQyRojkcJ+pjaePsyhcyf164p9aZsu3t+NWxkZYbcHLK1ju5Qmalti2jPI5IWCe5w== +postcss-pseudo-class-any-link@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" + integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== dependencies: postcss-selector-parser "^6.0.10" @@ -8510,25 +8292,17 @@ postcss-replace-overflow-wrap@^4.0.0: resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== -postcss-selector-not@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz#ac5fc506f7565dd872f82f5314c0f81a05630dc7" - integrity sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ== - dependencies: - balanced-match "^1.0.0" - -postcss-selector-parser@^6.0.10: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== +postcss-selector-not@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" + integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" + postcss-selector-parser "^6.0.10" -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.9: - version "6.0.9" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" - integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.9: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -8543,6 +8317,15 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@8.4.5: version "8.4.5" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" @@ -8552,12 +8335,12 @@ postcss@8.4.5: picocolors "^1.0.0" source-map-js "^1.0.1" -postcss@^8.4.7: - version "8.4.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.8.tgz#dad963a76e82c081a0657d3a2f3602ce10c2e032" - integrity sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ== +postcss@^8.4.18: + version "8.4.19" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" + integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== dependencies: - nanoid "^3.3.1" + nanoid "^3.3.4" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -8566,11 +8349,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - 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" @@ -8578,12 +8356,12 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== +prettier@2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== -pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: +pretty-format@^27.0.2: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -8592,13 +8370,12 @@ pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.0.2.tgz#6a24d71cbb61a5e5794ba7513fe22101675481bc" - integrity sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw== +pretty-format@^29.0.0, pretty-format@^29.2.1, pretty-format@^29.3.1: + version "29.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da" + integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg== dependencies: - "@jest/schemas" "^28.0.2" - ansi-regex "^5.0.1" + "@jest/schemas" "^29.0.0" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -8639,45 +8416,30 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== pstree.remy@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" @@ -8691,13 +8453,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -raf@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -8728,16 +8483,6 @@ raw-loader@4.0.2: loader-utils "^2.0.0" schema-utils "^3.0.0" -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-aspect-ratio@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/react-aspect-ratio/-/react-aspect-ratio-1.1.2.tgz#a65c7ba9862dc31fcd7b6ac33f1c70beb53b8bad" @@ -8751,20 +8496,13 @@ react-copy-to-clipboard@5.1.0: copy-to-clipboard "^3.3.1" prop-types "^15.8.1" -react-dom@18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f" - integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w== +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - scheduler "^0.22.0" - -react-error-boundary@2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-2.2.3.tgz#34c8238012d3b4148cec47a1b3cec669d5206578" - integrity sha512-Jiaiu6CJ4ho3sMCVI7gg+O/JB5vlFFZGwlnpFBTCOSyheYRTzz+FhBMo7tfnCTB/ZR0LaMzAPGbZGrEzAOd0eg== - dependencies: - "@babel/runtime" "^7.9.6" + scheduler "^0.23.0" react-error-boundary@3.1.4: version "3.1.4" @@ -8773,7 +8511,7 @@ react-error-boundary@3.1.4: dependencies: "@babel/runtime" "^7.12.5" -react-fast-compare@^3.0.1, react-fast-compare@^3.1.1: +react-fast-compare@^3.1.1: version "3.2.0" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== @@ -8795,15 +8533,15 @@ react-helmet@6.1.0: react-fast-compare "^3.1.1" react-side-effect "^2.1.0" -react-icons@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.3.1.tgz#2fa92aebbbc71f43d2db2ed1aed07361124e91ca" - integrity sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ== +react-icons@4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.7.1.tgz#0f4b25a5694e6972677cb189d2a72eabea7a8345" + integrity sha512-yHd3oKGMgm7zxo3EA7H2n7vxSoiGmHk5t6Ou4bXsfcgWyhfDKMpyKfhHR6Bjnn63c+YXBLBPUql9H4wPJM6sXw== -react-intersection-observer@9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.4.0.tgz#f6b6e616e625f9bf255857c5cba9dbf7b1825ec7" - integrity sha512-v0403CmomOVlzhqFXlzOxg0ziLcVq8mfbP0AwAcEQWgZmR2OulOT79Ikznw4UlB3N+jlUYqLMe4SDHUOyp0t2A== +react-intersection-observer@9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz#4ccb21e16acd0b9cf5b28d275af7055bef878f6b" + integrity sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw== react-is@^16.10.2, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" @@ -8815,20 +8553,24 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^18.0.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.1.0.tgz#61aaed3096d30eacf2a2127118b5b41387d32a67" - integrity sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg== +react-is@^18.0.0, react-is@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== 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-loader-spinner@5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/react-loader-spinner/-/react-loader-spinner-5.1.4.tgz#1f08e21aa6b721b6c303658a294f4afbf8ad8d05" - integrity sha512-qjS/5/+tWX4gPJXdA1LB2HzTHv/CX/2ic+DBLLbacM+S7gVTfS7L7gJ7IOZMzVXETaiItdCUh3f8Y2GoYG5o8Q== +react-loader-spinner@5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-loader-spinner/-/react-loader-spinner-5.3.4.tgz#43c22a41944e2bf3c84a249192450f1166592f30" + integrity sha512-G2vw4ssX+RDZ/vfaeva06yfNqyFViv/u+tVZ3kFLy5TKNlNx2DbuwreBSpRtPespQA+VxinxUJsigwLwG9erOg== + dependencies: + react-is "^18.2.0" + styled-components "^5.3.5" + styled-tools "^1.7.2" react-popper@^1.3.6: version "1.3.11" @@ -8843,23 +8585,6 @@ react-popper@^1.3.6: typed-styles "^0.0.7" warning "^4.0.2" -react-popper@^2.2.4: - version "2.2.5" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.2.5.tgz#1214ef3cec86330a171671a4fbcbeeb65ee58e96" - integrity sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw== - dependencies: - react-fast-compare "^3.0.1" - warning "^4.0.2" - -react-query@3.38.0: - version "3.38.0" - resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.38.0.tgz#e7f4081e45ba47a4119e548ddcfd0fab18f0580e" - integrity sha512-VRbCTRrDfC5FsB70+JfZuxFRv9SAvkZ1h36MsN8+QaDN+NWB6s1vJndqpoLQnJqN0COTG2zsInMq0KFdYze6TA== - dependencies: - "@babel/runtime" "^7.5.5" - broadcast-channel "^3.4.1" - match-sorter "^6.0.2" - react-reactstrap-pagination@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/react-reactstrap-pagination/-/react-reactstrap-pagination-2.0.3.tgz#19797317f8d1ebcc66aec655f8b1a554c3e606a1" @@ -8868,67 +8593,58 @@ react-reactstrap-pagination@2.0.3: memoize-one "^5.1.1" prop-types "^15.7.2" -react-resize-detector@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-7.0.0.tgz#fbd46917ee905b7796c797aa6b301b454a6b9229" - integrity sha512-Xd1POfpVzH9O3F/xB/0xYy2ijtKjE/z7y4c/aJP593YSzhPy2vDhsNPjes+uQbgL1RezxJajQ679qPs8K5LAFw== - dependencies: - "@types/resize-observer-browser" "^0.1.6" - lodash "^4.17.21" - -react-resize-detector@^6.6.3: - version "6.7.8" - resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-6.7.8.tgz#318c85d1335e50f99d4fb8eb9ec34e066db597d0" - integrity sha512-0FaEcUBAbn+pq3PT5a9hHRebUfuS1SRLGLpIw8LydU7zX429I6XJgKerKAMPsJH0qWAl6o5bVKNqFJqr6tGPYw== +react-resize-detector@7.1.2, react-resize-detector@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-7.1.2.tgz#8ef975dd8c3d56f9a5160ac382ef7136dcd2d86c" + integrity sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw== dependencies: - "@types/resize-observer-browser" "^0.1.6" lodash "^4.17.21" - resize-observer-polyfill "^1.5.1" -react-select@5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.3.1.tgz#2cb651b71493e494c56f6b4ce40011669b34bd95" - integrity sha512-Y195MmhDoDAj/8gTDyYZU1Raf7tmZd81wxM6RkFko4pqJ4Xv0/ilqUMtSn+GYkwmSlTWeMlzh+e+t7PJgtuXPw== +react-select@5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.0.tgz#82921b38f1fcf1471a0b62304da01f2896cd8ce6" + integrity sha512-lJGiMxCa3cqnUr2Jjtg9YHsaytiZqeNOKeibv6WF5zbK/fPegZ1hg3y/9P1RZVLhqBTs0PfqQLKuAACednYGhQ== dependencies: "@babel/runtime" "^7.12.0" "@emotion/cache" "^11.4.0" "@emotion/react" "^11.8.1" + "@floating-ui/dom" "^1.0.1" "@types/react-transition-group" "^4.4.0" - memoize-one "^5.0.0" + memoize-one "^6.0.0" prop-types "^15.6.0" react-transition-group "^4.3.0" + use-isomorphic-layout-effect "^1.1.2" -react-share@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/react-share/-/react-share-4.4.0.tgz#cabbf2111d7a907a888ab4d89d08410329efd5ee" - integrity sha512-POe8Ge/JT9Ew9iyW7CiYsCCWCb8uMJWqFl9S7W0fJ/oH5gBJNzukH0bL5vSr17KKG5h15d3GfKaoviI22BKeYA== +react-share@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/react-share/-/react-share-4.4.1.tgz#4bfb0b512e26afedfea2fb66eb13c95c28fb216a" + integrity sha512-AJ9m9RiJssqvYg7MoJUc9J0D7b/liWrsfQ99ndKc5vJ4oVHHd4Fy87jBlKEQPibT40oYA3AQ/a9/oQY6/yaigw== dependencies: - classnames "^2.2.5" + classnames "^2.3.2" jsonp "^0.2.1" react-side-effect@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3" - integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ== + version "2.1.2" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" + integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== -react-smooth@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-2.0.0.tgz#561647b33e498b2e25f449b3c6689b2e9111bf91" - integrity sha512-wK4dBBR6P21otowgMT9toZk+GngMplGS1O5gk+2WSiHEXIrQgDvhR5IIlT74Vtu//qpTcipkgo21dD7a7AUNxw== +react-smooth@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-2.0.1.tgz#74c7309916d6ccca182c4b30c8992f179e6c5a05" + integrity sha512-Own9TA0GPPf3as4vSwFhDouVfXP15ie/wIHklhyKBH5AN6NFtdk0UpHBnonV11BtqDkAWlt40MOUc+5srmW7NA== dependencies: fast-equals "^2.0.0" - raf "^3.4.0" react-transition-group "2.9.0" -react-super-responsive-table@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-super-responsive-table/-/react-super-responsive-table-5.2.0.tgz#5357c928f7bca7851b3ae3f2e8e7550f7acf5c7d" - integrity sha512-gC6QX/+HNt7d5QDvhp83Q8AV8/44mbeRo4Z4UQ9KfBbY9dyHkQZUXRbaWPFp6CHmfSyVlJaRseTHzwMKmJjRKA== +react-super-responsive-table@5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-super-responsive-table/-/react-super-responsive-table-5.2.1.tgz#e9c3113d7676e74db9110f8385a3dddce45ee00f" + integrity sha512-93DAJbI4FjR0Yops+0v1MZIUhIMRQOm/N//o35mk/g4NCZ99HIOB+gdZPorZwKX3mfr3h3H3ATcU4jLMfpuC9Q== -react-toggle@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.2.tgz#b00500832f925ad524356d909821821ae39f6c52" - integrity sha512-4Ohw31TuYQdhWfA6qlKafeXx3IOH7t4ZHhmRdwsm1fQREwOBGxJT+I22sgHqR/w8JRdk+AeMCJXPImEFSrNXow== +react-toggle@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.3.tgz#99193392cca8e495710860c49f55e74c4e6cf452" + integrity sha512-WoPrvbwfQSvoagbrDnXPrlsxwzuhQIrs+V0I162j/s+4XPgY/YDAUmHSeWiroznfI73wj+MBydvW95zX8ABbSg== dependencies: classnames "^2.2.5" @@ -8952,36 +8668,24 @@ react-transition-group@^3.0.0: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" -react-transition-group@^4.3.0, react-transition-group@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" - integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== +react-transition-group@^4.3.0: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" -react@18.1.0, react@^16.8.6: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" - integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== +react@18.2.0, react@^16.8.6: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" -reactstrap@*: - version "9.0.1" - resolved "https://registry.yarnpkg.com/reactstrap/-/reactstrap-9.0.1.tgz#a6b205861f3e83da55063bc04ba1a069e969f21d" - integrity sha512-89VOv7SRlAlpS7RwXhzOQkSWkuhBR8LBsPGfNHifNL3WhtNP9y1sBdTcTYyH1ee2QtI8zRdwD0T5I/blHiwemg== - dependencies: - "@babel/runtime" "^7.12.5" - "@popperjs/core" "^2.6.0" - classnames "^2.2.3" - prop-types "^15.5.8" - react-popper "^2.2.4" - react-transition-group "^4.4.2" - -reactstrap@8.10.1: +reactstrap@*, reactstrap@8.10.1: version "8.10.1" resolved "https://registry.yarnpkg.com/reactstrap/-/reactstrap-8.10.1.tgz#43ea596c7f82f88997a9c8aae203417910262d3f" integrity sha512-StjLADa/12yMNjafrSs+UD7sZAGtKpLO9fZp++2Dj0IzJinqY7eQhXlM3nFf0q40YsIcLvQdFc9pKF8PF4f0Qg== @@ -9004,7 +8708,7 @@ read-pkg-up@^7.0.1: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" @@ -9023,7 +8727,7 @@ read-pkg@^5.2.0: readable-stream@~1.0.33-1: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -9033,7 +8737,7 @@ readable-stream@~1.0.33-1: readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -9054,10 +8758,10 @@ recharts-scale@^0.4.4: dependencies: decimal.js-light "^2.4.1" -recharts@2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.1.9.tgz#a52d411a7d822d118f7754cfc9c50db8fab46fb9" - integrity sha512-VozH5uznUvGqD7n224FGj7cmMAenlS0HPCs+7r2HeeHiQK6un6z0CTZfWVAB860xbcr4m+BN/EGMPZmYWd34Rg== +recharts@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.2.0.tgz#1b8ba0799ff0feb96c87f009cd2ddd8cf5108817" + integrity sha512-/uRJ0oaESGyz//PgAzvrwXEhrKaNha1ELLysEMRklbnsddiVQsSNicP7DWiz8qFcyYXy3BrDqrUjiLiVRTSMtA== dependencies: "@types/d3-interpolate" "^2.0.0" "@types/d3-scale" "^3.0.0" @@ -9069,22 +8773,22 @@ recharts@2.1.9: eventemitter3 "^4.0.1" lodash "^4.17.19" react-is "^16.10.2" - react-resize-detector "^6.6.3" - react-smooth "^2.0.0" + react-resize-detector "^7.1.2" + react-smooth "^2.0.1" recharts-scale "^0.4.4" reduce-css-calc "^2.1.8" -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: - resolve "^1.9.0" + resolve "^1.20.0" -recoil@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/recoil/-/recoil-0.7.2.tgz#37aafc9e0674abae639263354a11c910e71bf78a" - integrity sha512-OT4pI7FOUHcIoRtjsL5Lqq+lFFzQfir4MIbUkqyJ3nqv3WfBP1pHepyurqTsK5gw+T+I2R8+uOD28yH+Lg5o4g== +recoil@0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/recoil/-/recoil-0.7.6.tgz#75297ecd70bbfeeb72e861aa6141a86bb6dfcd5e" + integrity sha512-hsBEw7jFdpBCY/tu2GweiyaqHKxVj6EqF2/SfrglbKvJHhpN57SANWvPW+gE90i3Awi+A5gssOd3u+vWlT+g7g== dependencies: hamt_plus "1.0.2" @@ -9109,10 +8813,10 @@ reflect-metadata@0.1.13: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== dependencies: regenerate "^1.4.2" @@ -9121,15 +8825,15 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@0.13.9, regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@0.13.11, regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.4: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: "@babel/runtime" "^7.8.4" @@ -9138,54 +8842,41 @@ regexp-tree@^0.1.24, regexp-tree@~0.1.1: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" - integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" + functions-have-names "^1.2.2" regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== +regexpu-core@^5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" + integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== dependencies: regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" + regenerate-unicode-properties "^10.1.0" + regjsgen "^0.7.1" + regjsparser "^0.9.1" unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" + unicode-match-property-value-ecmascript "^2.1.0" -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== +regjsgen@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" + integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" @@ -9295,12 +8986,12 @@ remark-toc@7.0.0: remove-accents@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" - integrity sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U= + integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== repeat-string@^1.5.4: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== request@^2.44.0: version "2.88.2" @@ -9331,7 +9022,7 @@ request@^2.44.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" @@ -9346,9 +9037,9 @@ requireindex@^1.2.0: requireindex@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" - integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI= + integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== -resize-observer-polyfill@1.5.1, resize-observer-polyfill@^1.5.1: +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== @@ -9375,36 +9066,30 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.3.2, resolve@^1.8.1, resolve@^1.9.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.8.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: - lowercase-keys "^1.0.0" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" 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== -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@3.0.2, 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== @@ -9423,10 +9108,14 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" safe-regex@^2.1.1: version "2.1.1" @@ -9440,10 +9129,10 @@ safe-regex@^2.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.51.0.tgz#25ea36cf819581fe1fe8329e8c3a4eaaf70d2845" - integrity sha512-haGdpTgywJTvHC2b91GSq+clTKGbtkkZmVAb82jZQN/wTy6qs8DdFm2lhEQbEwrY0QDRgSQ3xDurqM977C3noA== +sass@1.56.1: + version "1.56.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.56.1.tgz#94d3910cd468fd075fa87f5bb17437a0b617d8a7" + integrity sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -9462,15 +9151,10 @@ save-pixels-jpeg-js-upgrade@^2.3.4-jpeg-js-upgrade.0: pngjs-nozlib "^1.0.0" through "^2.3.4" -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scheduler@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" - integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" @@ -9518,53 +9202,27 @@ section-matter@^1.0.0: extend-shallow "^2.0.1" kind-of "^6.0.0" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" -send@0.17.2: - version "0.17.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" - integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== - 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.8.1" - mime "1.6.0" - ms "2.1.3" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== send@0.18.0: version "0.18.0" @@ -9592,7 +9250,7 @@ serialize-javascript@6.0.0, serialize-javascript@^6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.15.0: +serve-static@1.15.0, serve-static@^1.14.1: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== @@ -9602,21 +9260,6 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" -serve-static@^1.14.1: - version "1.14.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" - integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.2" - -set.prototype.tojson@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/set.prototype.tojson/-/set.prototype.tojson-0.1.1.tgz#1047f13af119739c9a6a7a9e53395a5da311cd6c" - integrity sha1-EEfxOvEZc5yaanqeUzlaXaMRzWw= - setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -9637,7 +9280,7 @@ shallowequal@^1.1.0: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -9651,7 +9294,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" @@ -9659,9 +9302,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + version "1.7.4" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" + integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== side-channel@^1.0.4: version "1.0.4" @@ -9677,6 +9320,13 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -9692,27 +9342,24 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +slash@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.0.0.tgz#8c18a871096b71ee0e002976a4fe3374991c3074" + integrity sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ== + "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.1.tgz#9ae5edc7c2d42570934be4c95d1ccc6352eba52d" - integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA== +source-map-loader@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" + integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== dependencies: - abab "^2.0.5" + abab "^2.0.6" iconv-lite "^0.6.3" - source-map-js "^1.0.1" - -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" + source-map-js "^1.0.2" source-map-support@0.5.13: version "0.5.13" @@ -9730,20 +9377,20 @@ source-map-support@^0.5.16, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.0, source-map@^0.5.7: +source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== 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== -source-map@^0.7.3, source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== space-separated-tokens@^1.0.0: version "1.1.5" @@ -9772,14 +9419,14 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: version "1.17.0" @@ -9802,16 +9449,16 @@ stable@^0.1.8: integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" -stackframe@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" - integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== state-toggle@^1.0.0: version "1.0.3" @@ -9823,15 +9470,10 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - std-env@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.0.1.tgz#bc4cbc0e438610197e34c2d79c3df30b491f5182" - integrity sha512-mC1Ps9l77/97qeOZc+HrOL7TIaOboHqMZ24dGVQrlxFcpPpfCHpH+qfUT7Dz+6mlG8+JPA1KfBQo19iC/+Ngcw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.1.tgz#93a81835815e618c8aa75e7c8a4dc04f7c314e29" + integrity sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q== string-length@^4.0.1: version "4.0.2" @@ -9854,7 +9496,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9863,49 +9505,51 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" - integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg== +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - has-symbols "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" + regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" string.prototype.padend@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" - integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== + version "3.1.4" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" + integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== stringify-object@^3.3.0: version "3.3.0" @@ -9933,12 +9577,12 @@ strip-ansi@^7.0.1: strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" @@ -9962,11 +9606,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - style-loader@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" @@ -9979,10 +9618,10 @@ style-to-object@0.3.0, style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" -styled-components@5.3.5: - version "5.3.5" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.5.tgz#a750a398d01f1ca73af16a241dec3da6deae5ec4" - integrity sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg== +styled-components@5.3.6, styled-components@^5.3.5: + version "5.3.6" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1" + integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/traverse" "^7.4.5" @@ -10000,10 +9639,27 @@ styled-jsx@5.0.2: resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.2.tgz#ff230fd593b737e9e68b630a694d460425478729" integrity sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ== -stylis@4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" - integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== +styled-jsx@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.7.tgz#be44afc53771b983769ac654d355ca8d019dff48" + integrity sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA== + +styled-tools@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/styled-tools/-/styled-tools-1.7.2.tgz#a8f71198535cf785d7db0927cc1c1b88337c4440" + integrity sha512-IjLxzM20RMwAsx8M1QoRlCG/Kmq8lKzCGyospjtSXt/BTIIcvgTonaxQAsKnBrsZNwhpHzO9ADx5te0h76ILVg== + +stylis@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" + integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== + +superjson@^1.10.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/superjson/-/superjson-1.12.0.tgz#7b314b982bfebc5b8e56054b8528813fdda8fc7a" + integrity sha512-B4tefmFqj8KDShHi2br2rz0kBlUJuQHtxMCydEuHvooL+6EscROTNWRfOLMDxW1dS/daK2zZr3C3N9DU+jXATQ== + dependencies: + copy-anything "^3.0.2" supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" @@ -10026,80 +9682,70 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svg-parser@^2.0.2: +svg-parser@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svgo@1.3.2, svgo@^1.2.2: - 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" +svgo@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a" + integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.2.1" + csso "^5.0.5" + picocolors "^1.0.0" + +svgo@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - terser-webpack-plugin@^5.1.3: - version "5.3.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54" - integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g== + version "5.3.6" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" + integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== dependencies: + "@jridgewell/trace-mapping" "^0.3.14" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.0" - source-map "^0.6.1" - terser "^5.7.2" + terser "^5.14.1" -terser@^5.7.2: - version "5.12.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.12.0.tgz#728c6bff05f7d1dcb687d8eace0644802a9dae8a" - integrity sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A== +terser@^5.14.1: + version "5.16.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" + integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== dependencies: + "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" commander "^2.20.0" - source-map "~0.7.2" source-map-support "~0.5.20" test-exclude@^6.0.0: @@ -10114,22 +9760,17 @@ test-exclude@^6.0.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= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== - through@^2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tiny-glob@^0.2.6: version "0.2.9" @@ -10147,12 +9788,7 @@ tmpl@1.0.5: to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" @@ -10164,7 +9800,7 @@ to-regex-range@^5.0.1: 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= + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== toidentifier@1.0.1: version "1.0.1" @@ -10194,24 +9830,24 @@ trim-trailing-lines@^1.0.0: trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== trough@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -ts-essentials@9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-9.1.2.tgz#46db6944b73b4cd603f3d959ef1123c16ba56f59" - integrity sha512-EaSmXsAhEiirrTY1Oaa7TSpei9dzuCuFPmjKRJRPamERYtfaGS8/KpOSbjergLz/Y76/aZlV9i/krgzsuWEBbg== +ts-essentials@9.3.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-9.3.0.tgz#7e639c1a76b1805c3c60d6e1b5178da2e70aea02" + integrity sha512-XeiCboEyBG8UqXZtXl59bWEi4ZgOqRsogFDI6WDGIF1LmzbYiAkIwjkXN6zZWWl4re/lsOqMlYfe8KA0XiiEPw== -ts-toolbelt@9.6.0, ts-toolbelt@^9.6.0: +ts-toolbelt@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== -tsconfig-paths@^3.14.1: +tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== @@ -10221,21 +9857,16 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tsconfig-paths@^3.9.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.13.0.tgz#f3e9b8f6876698581d94470c03c95b3a48c0e3d7" - integrity sha512-nWuffZppoaYK0vQ1SQmkSsQzJoHA4s6uzdb2waRpD806x9yfq153AdVsWz4je2qZcW+pENrMQXbGQ3sMCkXuhw== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.0" - strip-bom "^3.0.0" - tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -10246,14 +9877,14 @@ tsutils@^3.21.0: tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -10287,6 +9918,11 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.3.0.tgz#3378c9664eecfd1eb4f0522b13cb0630bc1ec044" + integrity sha512-gezeeOIZyQLGW5uuCeEnXF1aXmtt2afKspXz3YqoOcZ3l/YMJq1pujvgT+cz/Nw1O/7q/kSav5fihJHsC/AOUg== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -10317,19 +9953,19 @@ typeface-open-sans@0.0.75: resolved "https://registry.yarnpkg.com/typeface-open-sans/-/typeface-open-sans-0.0.75.tgz#20d0c330f14c0c40463c334adbedd6005389abe4" integrity sha512-0lLmB7pfj113OP4T78SbpSmC4OCdFQ0vUxdSXQccsSb6qF76F92iEuC/DghFgmPswTyidk8+Hwf+PS/htiJoRQ== -typescript@4.6.4: - version "4.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" - integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== +typescript@4.9.4: + version "4.9.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" undefsafe@^2.0.5: @@ -10358,15 +9994,15 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unified@9.2.0: version "9.2.0" @@ -10383,14 +10019,7 @@ unified@9.2.0: uniq@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== unist-builder@2.0.3, unist-builder@^2.0.0: version "2.0.3" @@ -10455,43 +10084,18 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unload@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" - integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== - dependencies: - "@babel/runtime" "^7.6.2" - detect-node "^2.0.4" - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" + escalade "^3.1.1" + picocolors "^1.0.0" uri-js@^4.2.2: version "4.4.1" @@ -10514,27 +10118,20 @@ url-loader@4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" +use-isomorphic-layout-effect@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-sync-external-store@1.2.0, use-sync-external-store@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -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" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utility-types@3.10.0: version "3.10.0" @@ -10544,24 +10141,19 @@ utility-types@3.10.0: utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz#be0dae58719fc53cb97e5c7ac1d7e6d4f5b19511" - integrity sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw== +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -10583,12 +10175,12 @@ validate-npm-package-license@^3.0.1: vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -10618,9 +10210,9 @@ vfile@^4.0.0: vfile-message "^2.0.0" vscode-json-languageservice@^4.1.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.0.tgz#df0693b69ba2fbf0a6add896087b6f1c9c38f06a" - integrity sha512-XNawv0Vdy/sUK0S+hGf7cq/qsVAbIniGJr89TvZOqMCNJmpgKTy1e8PL1aWW0uy6BfWMG7vxa5lZb3ypuFtuGQ== + version "4.2.1" + resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4" + integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== dependencies: jsonc-parser "^3.0.0" vscode-languageserver-textdocument "^1.0.3" @@ -10629,26 +10221,26 @@ vscode-json-languageservice@^4.1.6: vscode-uri "^3.0.3" vscode-languageserver-textdocument@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz#3cd56dd14cec1d09e86c4bb04b09a246cb3df157" - integrity sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ== + version "1.0.7" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz#16df468d5c2606103c90554ae05f9f3d335b771b" + integrity sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg== vscode-languageserver-types@^3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" - integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== + version "3.17.2" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" + integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== vscode-nls@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" - integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== + version "5.2.0" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.2.0.tgz#3cb6893dd9bd695244d8a024bdf746eea665cc3f" + integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== vscode-uri@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84" - integrity sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA== + version "3.0.6" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.6.tgz#5e6e2e1a4170543af30151b561a41f71db1d6f91" + integrity sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ== -walker@^1.0.7: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -10662,10 +10254,10 @@ warning@^4.0.2, warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" - integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA== +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -10675,22 +10267,23 @@ web-namespaces@^1.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== -webpack-cli@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" - integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ== +webpack-cli@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.1.tgz#95fc0495ac4065e9423a722dec9175560b6f2d9a" + integrity sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.1.1" - "@webpack-cli/info" "^1.4.1" - "@webpack-cli/serve" "^1.6.1" + "@webpack-cli/configtest" "^2.0.1" + "@webpack-cli/info" "^2.0.1" + "@webpack-cli/serve" "^2.0.1" colorette "^2.0.14" - commander "^7.0.0" - execa "^5.0.0" + commander "^9.4.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" fastest-levenshtein "^1.0.12" import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" + interpret "^3.1.1" + rechoir "^0.8.0" webpack-merge "^5.7.3" webpack-merge@^5.7.3: @@ -10706,34 +10299,34 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.72.0, webpack@^5.51.0: - version "5.72.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.72.0.tgz#f8bc40d9c6bb489a4b7a8a685101d6022b8b6e28" - integrity sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w== +webpack@5.75.0, webpack@^5.1.0: + version "5.75.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" + integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" + acorn "^8.7.1" acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.9.2" + enhanced-resolve "^5.10.0" es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.9" - json-parse-better-errors "^1.0.2" + json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" schema-utils "^3.1.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.3" - watchpack "^2.3.1" + watchpack "^2.4.0" webpack-sources "^3.2.3" webpackbar@5.0.2: @@ -10757,6 +10350,28 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-typed-array@^1.1.8: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -10771,13 +10386,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -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" - wildcard@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" @@ -10800,7 +10408,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.0: version "3.0.3" @@ -10813,18 +10421,13 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7" -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xtend@^4.0.0, xtend@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -10845,23 +10448,28 @@ yaml@^1.10.0, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.3.1: - version "17.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.4.1.tgz#ebe23284207bb75cee7c408c33e722bfb27b5284" - integrity sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g== + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^21.0.0" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zwitch@^1.0.0: version "1.0.5" From f5a829fd81e1a63337f47d383a5546959bf1a844 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov Date: Thu, 8 Dec 2022 09:15:23 +0100 Subject: [PATCH 02/26] chore: make console less verbose --- .env.example | 2 + docker/docker-dev.dockerfile | 7 ++ web/.eslintrc.js | 2 + web/config/next/next.config.ts | 2 - web/package.json | 1 + web/tools/monkeyPatch.ts | 125 +++++++++++++++++++++++++++++---- web/yarn.lock | 25 +++++++ 7 files changed, 150 insertions(+), 14 deletions(-) diff --git a/.env.example b/.env.example index 15537d84c9..8885d228ff 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,3 @@ LAPIS_API_ACCESS_KEY= + +RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=false diff --git a/docker/docker-dev.dockerfile b/docker/docker-dev.dockerfile index 22187f5471..cd01e66d3e 100644 --- a/docker/docker-dev.dockerfile +++ b/docker/docker-dev.dockerfile @@ -54,6 +54,13 @@ RUN set -eux >dev/null \ && npm install -g nodemon@${NODEMON_VERSION} yarn@${YARN_VERSION} >/dev/null \ && npm config set scripts-prepend-node-path auto +# Calm down the (in)famous chatter from yarn +RUN set -euxo pipefail >/dev/null \ +&& sed -i'' "s/this.reporter.warn(this.reporter.lang('incompatibleResolutionVersion', pattern, reqPattern));//g" "${NODE_DIR}/lib/node_modules/yarn/lib/cli.js" \ +&& sed -i'' "s/_this2\.reporter.warn(_this2\.reporter.lang('ignoredScripts'));//g" "${NODE_DIR}/lib/node_modules/yarn/lib/cli.js" \ +&& sed -i'' 's/_this3\.reporter\.warn(_this3\.reporter\.lang(peerError.*;//g' "/opt/node/lib/node_modules/yarn/lib/cli.js" + + # Install Python dependencies COPY requirements.txt / RUN set -euxo pipefail >/dev/null \ diff --git a/web/.eslintrc.js b/web/.eslintrc.js index a028740b65..c077f7042c 100644 --- a/web/.eslintrc.js +++ b/web/.eslintrc.js @@ -80,6 +80,7 @@ module.exports = { '@typescript-eslint/no-empty-function': 'off', '@typescript-eslint/no-shadow': 'off', '@typescript-eslint/unbound-method': ['off'], + 'array-func/no-unnecessary-this-arg': 'off', 'array-func/prefer-array-from': 'off', 'camelcase': 'warn', 'cflint/no-substr': 'warn', @@ -136,6 +137,7 @@ module.exports = { 'unicorn/no-abusive-eslint-disable': 'warn', 'unicorn/no-array-callback-reference': 'off', 'unicorn/no-array-for-each': 'off', + 'unicorn/no-array-method-this-argument': 'off', 'unicorn/no-array-reduce': 'off', 'unicorn/no-fn-reference-in-iterator': 'off', 'unicorn/no-null': 'off', diff --git a/web/config/next/next.config.ts b/web/config/next/next.config.ts index c408ea3804..213716eb69 100644 --- a/web/config/next/next.config.ts +++ b/web/config/next/next.config.ts @@ -56,8 +56,6 @@ const clientEnv = { DOMAIN_STRIPPED, } -console.info(`Client-side Environment:\n${JSON.stringify(clientEnv, null, 2)}`) - const nextConfig: NextConfig = { distDir: `.build/${process.env.NODE_ENV}/tmp`, pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx', 'all-contributorsrc'], diff --git a/web/package.json b/web/package.json index 028f4b2d61..655d5177b7 100644 --- a/web/package.json +++ b/web/package.json @@ -213,6 +213,7 @@ "fork-ts-checker-webpack-plugin": "6.5.0", "fs-extra": "11.1.0", "gif-frames": "1.0.1", + "glob": "8.0.3", "identity-obj-proxy": "3.0.0", "is-interactive": "1.0.0", "jest": "29.3.1", diff --git a/web/tools/monkeyPatch.ts b/web/tools/monkeyPatch.ts index ddf85f213f..84c60ed0dd 100644 --- a/web/tools/monkeyPatch.ts +++ b/web/tools/monkeyPatch.ts @@ -1,19 +1,34 @@ -/* eslint-disable no-template-curly-in-string */ +/* eslint-disable no-template-curly-in-string,sonarjs/no-duplicate-string */ /** * - * This dangerously and unreliably patches some of the node_modules. Mostly cosmetic stuff. + * This dangerously and unreliably patches some node_modules. Mostly cosmetic stuff. * Do no use this to fix bugs or introduce features. Consider contributing to the upstream project instead. * */ +import { concurrent } from 'fasy' import fs from 'fs-extra' +import glob from 'glob' +import { promisify } from 'util' -export async function replace(filename: string, searchValue: string, replaceValue = '') { +export async function replace(filename: string, searchValue: string | RegExp, replaceValue = '') { const content = await fs.readFile(filename, 'utf8') const newContent = content.replace(searchValue, replaceValue) await fs.writeFile(filename, newContent, { encoding: 'utf8' }) } +/** Strips timerStart() and timerEnd() calls from Auspice */ +export async function removeAuspiceTimers() { + await fs.rm('node_modules/auspice/src/util/perf.js', { force: true }) + + const files = await promisify(glob)('node_modules/auspice/src/**/*.js') + + await concurrent.forEach(async (file) => { + await replace(file, /.*(timerStart|timerEnd)\(".+"\);.*\n/g, '') + await replace(file, /.*import { timerStart, timerEnd }.*\n/g, '') + }, files) +} + export async function main() { await Promise.all([ // Removes warning " should not be used in _document.js". @@ -26,25 +41,111 @@ export async function main() { // Removes warning about babel codegen skipping optimizations. We only use babel in form of babel-node, to transpile // dev scripts on the fly, so this is not at all worth any attention. // Reason: too noisy + concurrent.forEach( + async (file) => { + await replace( + file, + 'console.error("[BABEL] Note: The code generator has deoptimised the styling of " + `${opts.filename} as it exceeds the max of ${"500KB"}.`);', + ) + await replace( + file, + 'console.error(\n' + + ' "[BABEL] Note: The code generator has deoptimised the styling of " +\n' + + ' `${opts.filename} as it exceeds the max of ${"500KB"}.`,\n' + + ' );', + ) + }, + ['node_modules/@babel/generator/lib/index.js', 'node_modules/next/dist/compiled/babel/bundle.js'], + ), + replace( - 'node_modules/@babel/generator/lib/index.js', - 'console.error("[BABEL] Note: The code generator has deoptimised the styling of " + `${opts.filename} as it exceeds the max of ${"500KB"}.`);', + 'node_modules/next/dist/build/index.js', + "`${Log.prefixes.info} ${ignoreTypeScriptErrors ? 'Skipping validation of types' : 'Checking validity of types'}`", + '""', ), // Removes reminder about upgrading caniuse database. Nice, but not that important. Will be handled along with // routine package updates. // Reason: too noisy - replace( - 'node_modules/browserslist/node.js', - ` console.warn( + concurrent.forEach( + async (file) => + replace( + file, + ` console.warn( 'Browserslist: caniuse-lite is outdated. Please run:\\n' + - 'npx browserslist@latest --update-db\\n' + - '\\n' + - 'Why you should do it regularly:\\n' + - 'https://github.com/browserslist/browserslist#browsers-data-updating' + ' npx browserslist@latest --update-db\\n' + + ' Why you should do it regularly: ' + + 'https://github.com/browserslist/browserslist#browsers-data-updating' )`, + ), + ['node_modules/browserslist/node.js'], + ), + + concurrent.forEach( + async (file) => + replace( + file, + `console.warn("Browserslist: caniuse-lite is outdated. Please run:\\n"+" npx browserslist@latest --update-db\\n"+" Why you should do it regularly: "+"https://github.com/browserslist/browserslist#browsers-data-updating")`, + ), + [ + 'node_modules/next/dist/compiled/browserslist/index.js', + 'node_modules/next/dist/compiled/cssnano-simple/index.js', + ], + ), + + // Fast refresh messages in browser console + replace( + 'node_modules/next/dist/client/dev/error-overlay/hot-dev-client.js', + "console.log('[Fast Refresh] rebuilding');", + ), + replace( + 'node_modules/next/dist/client/dev/error-overlay/hot-dev-client.js', + 'console.log(`[Fast Refresh] done in ${latency}ms`);', + ), + + replace( + 'node_modules/next/dist/server/base-server.js', + 'Log.warn(`You have added a custom /_error page without a custom /404 page. This prevents the 404 page from being auto statically optimized.\\nSee here for info: https://nextjs.org/docs/messages/custom-error-no-custom-404`);', ), + + removeAuspiceTimers(), ]) + + // More useless messages from Next.js + await replace('node_modules/next/dist/server/config.js', 'console.warn();') + await replace( + 'node_modules/next/dist/server/config.js', + "Log.warn('SWC minify release candidate enabled. https://nextjs.org/docs/messages/swc-minify-enabled');", + ) + await replace( + 'node_modules/next/dist/server/config.js', + "Log.warn(_chalk.default.bold('You have enabled experimental feature(s).'));", + ) + await replace( + 'node_modules/next/dist/server/config.js', + 'Log.warn(`Experimental features are not covered by semver, and may cause unexpected or broken application behavior. ` + `Use them at your own risk.`);', + ) + await replace( + 'node_modules/next/dist/build/webpack-config.js', + "Log.info(`automatically enabled Fast Refresh for ${injections} custom loader${injections > 1 ? 's' : ''}`);", + ) + await replace('node_modules/@next/env/dist/index.js', 'n.info(`Loaded env from ${t.join(r||"",_.path)}`)') + await replace('node_modules/next/dist/build/output/store.js', "Log.wait('compiling...');") + await replace('node_modules/next/dist/build/output/store.js', 'Log.wait(`compiling ${state.trigger}...`);') + await replace( + 'node_modules/next/dist/build/output/store.js', + 'Log.info(`bundled${partialMessage} successfully${timeMessage}${modulesMessage}, waiting for typecheck results...`);', + ) + await replace( + 'node_modules/next/dist/build/output/store.js', + 'Log.event(`compiled${partialMessage} successfully${timeMessage}${modulesMessage}`);', + ) + + // From fork-ts-checker-webpack-plugin + await replace( + 'node_modules/fork-ts-checker-webpack-plugin/lib/hooks/tapDoneToAsyncGetIssues.js', + "configuration.logger.issues.log(chalk_1.default.cyan('Issues checking in progress...'));", + ) } main().catch(console.error) diff --git a/web/yarn.lock b/web/yarn.lock index f13fcbe6d2..163e30fc7e 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -3620,6 +3620,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -5678,6 +5685,17 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" +glob@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -7432,6 +7450,13 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022" + integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" From 000e4e173fde21a90c37484d4ccd506cacf3150a Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 09:16:45 +0100 Subject: [PATCH 03/26] chore: make progress bar leafy green to match app style --- web/config/next/next.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/config/next/next.config.ts b/web/config/next/next.config.ts index 213716eb69..0f77e45097 100644 --- a/web/config/next/next.config.ts +++ b/web/config/next/next.config.ts @@ -128,7 +128,7 @@ const withFriendlyConsole = getWithFriendlyConsole({ clearConsole: false, projectRoot: path.resolve(moduleRoot), packageName: pkg.name || 'web', - progressBarColor: '#6529ff', + progressBarColor: '#3a5f0b', }) const withExtraWatch = getWithExtraWatch({ From b85a0df34eb995a3b86c9d4c8eecefc0bb5cb996 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 09:18:22 +0100 Subject: [PATCH 04/26] fix: move env var to correct place --- .env.example | 2 -- web/.env.example | 1 + web/.env.vercel | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 8885d228ff..15537d84c9 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1 @@ LAPIS_API_ACCESS_KEY= - -RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=false diff --git a/web/.env.example b/web/.env.example index 5b9b4530ef..53ac4008d5 100644 --- a/web/.env.example +++ b/web/.env.example @@ -5,6 +5,7 @@ WEB_PORT_PROD=8080 WEB_PORT_ANALYZE=8888 NEXT_TELEMETRY_DISABLED=0 +RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=false DEV_ENABLE_TYPE_CHECKS=1 DEV_ENABLE_ESLINT=1 diff --git a/web/.env.vercel b/web/.env.vercel index 4217b55edf..5783a36a42 100644 --- a/web/.env.vercel +++ b/web/.env.vercel @@ -5,6 +5,7 @@ WEB_PORT_PROD=null WEB_PORT_ANALYZE=8888 NEXT_TELEMETRY_DISABLED=0 +RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=false DEV_ENABLE_TYPE_CHECKS=1 DEV_ENABLE_ESLINT=1 From 2faa6b9164cea2930f7042f9e16ad5594b442781 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 09:34:26 +0100 Subject: [PATCH 05/26] chore: configure typescript checker cache; don't check js --- web/config/next/withTypeChecking.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/config/next/withTypeChecking.ts b/web/config/next/withTypeChecking.ts index f2b162acb6..667b0d52b9 100644 --- a/web/config/next/withTypeChecking.ts +++ b/web/config/next/withTypeChecking.ts @@ -43,10 +43,12 @@ const getWithTypeChecking = configOverwrite: { compilerOptions: { ...tsConfig.compilerOptions, + allowJs: false, skipLibCheck: true, sourceMap: false, inlineSourceMap: false, declarationMap: false, + tsBuildInfoFile: '.cache/.tsbuildinfo.webpackplugin', }, include: [ 'lib/**/*.js', From 55bfad228727b89ff82148ead027df7dfe56bc95 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 09:35:16 +0100 Subject: [PATCH 06/26] chore: cut 'debug' package from dependencies --- .../next/loaders/removeDebugPackageLoader.js | 22 +++++++++++++++++++ web/config/next/next.config.ts | 2 ++ web/config/next/withoutDebugPackage.ts | 16 ++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 web/config/next/loaders/removeDebugPackageLoader.js create mode 100644 web/config/next/withoutDebugPackage.ts diff --git a/web/config/next/loaders/removeDebugPackageLoader.js b/web/config/next/loaders/removeDebugPackageLoader.js new file mode 100644 index 0000000000..787ce8fb5a --- /dev/null +++ b/web/config/next/loaders/removeDebugPackageLoader.js @@ -0,0 +1,22 @@ +function stripDebugRequire(source) { + return source + .replace( + /__importDefault\s*\(\s*require\s*\(\s*["']\s*debug\s*["']\s*\)\s*\)/g, + '{ default() { return function () {} } }\n', + ) + .replace( + /_interopRequireDefault\s*\(\s*require\s*\(\s*["']\s*debug\s*["']\s*\)\s*\)/g, + '{ default() { return function () {} } }\n', + ) + .replace(/.*?require\(\s*["']debug["']\s*\).*/g, '(function(){return function () {}})\n') + .replace(/import\s+(.+)\s+from\s+["']debug["']/g, 'const $1 = (function(){ return function () {} })\n') +} + +/** + * Webpack loader which removes imports and requires of the `debug` package from JavaScript. + * This is especially important in presence of WebWorkers: `debug` package uses `windows` global, which is not + * present in WebWorker environment. + */ +export default function removeDebugPackageLoader(source) { + this.callback(null, stripDebugRequire(source)) +} diff --git a/web/config/next/next.config.ts b/web/config/next/next.config.ts index 0f77e45097..5bc3cfec2c 100644 --- a/web/config/next/next.config.ts +++ b/web/config/next/next.config.ts @@ -19,6 +19,7 @@ import getWithFriendlyConsole from './withFriendlyConsole' import getWithLodash from './withLodash' import { getWithRobotsTxt } from './withRobotsTxt' import getWithTypeChecking from './withTypeChecking' +import withoutDebugPackage from './withoutDebugPackage' import withSvg from './withSvg' import withIgnore from './withIgnore' import withoutMinification from './withoutMinification' @@ -179,6 +180,7 @@ const config = withPlugins( [withResolve], [withRobotsTxt], [withUrlAsset], + PRODUCTION && [withoutDebugPackage], ].filter(Boolean), nextConfig, ) diff --git a/web/config/next/withoutDebugPackage.ts b/web/config/next/withoutDebugPackage.ts new file mode 100644 index 0000000000..51f4ab2804 --- /dev/null +++ b/web/config/next/withoutDebugPackage.ts @@ -0,0 +1,16 @@ +import path from 'path' + +import type { NextConfig } from 'next' + +import { addWebpackLoader } from './lib/addWebpackLoader' + +export default function withoutDebugPackage(nextConfig: NextConfig) { + return addWebpackLoader(nextConfig, (_webpackConfig, _context) => ({ + test: /\.(ts|tsx|js|jsx)$/i, + use: [ + { + loader: path.resolve(__dirname, 'loaders', 'removeDebugPackageLoader.js'), + }, + ], + })) +} From b123fc148eb099edd31bb05eab8d718d61fc30a5 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 09:35:58 +0100 Subject: [PATCH 07/26] refactor: enable concurrent react --- web/config/next/next.config.ts | 5 ++--- web/src/pages/_app.tsx | 8 ++++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/web/config/next/next.config.ts b/web/config/next/next.config.ts index 5bc3cfec2c..433a88e53a 100644 --- a/web/config/next/next.config.ts +++ b/web/config/next/next.config.ts @@ -65,10 +65,9 @@ const nextConfig: NextConfig = { pagesBufferLength: 2, }, modern: false, - // reactStrictMode: true, + reactStrictMode: false, + reactRoot: true, experimental: { - // reactMode: 'concurrent', - // reactRoot: true, scrollRestoration: true, }, swcMinify: true, diff --git a/web/src/pages/_app.tsx b/web/src/pages/_app.tsx index 18d39abd90..548280195e 100644 --- a/web/src/pages/_app.tsx +++ b/web/src/pages/_app.tsx @@ -5,7 +5,7 @@ import 'css.escape' import dynamic from 'next/dynamic' import React, { useCallback, useMemo } from 'react' -import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { QueryClient, QueryClientConfig, QueryClientProvider } from '@tanstack/react-query' import { MutableSnapshot, RecoilRoot } from 'recoil' import { ReactQueryDevtools } from '@tanstack/react-query-devtools' @@ -27,8 +27,12 @@ import { loadPolyfills } from 'src/polyfills' import 'src/styles/global.scss' +const REACT_QUERY_OPTIONS: QueryClientConfig = { + defaultOptions: { queries: { suspense: true, retry: 1 } }, +} + function MyApp({ Component, pageProps, router }: AppProps) { - const queryClient = useMemo(() => new QueryClient(), []) + const queryClient = useMemo(() => new QueryClient(REACT_QUERY_OPTIONS), []) // NOTE: We do manual parsing here, because router.query is randomly empty on the first few renders. const { pathname, query } = useMemo(() => parseUrl(router.asPath), [router.asPath]) From cfb3f59f6357c367f61596cfd3cd8048c9eec41e Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 14:28:34 +0100 Subject: [PATCH 08/26] refactor: add suspense and error boundaries --- .../AcknowledgementEpiIsl.tsx | 117 ++++++++---------- .../Acknowledgements/AcknowledgementsCard.tsx | 72 +++-------- .../AcknowledgementsError.tsx | 47 ------- .../Acknowledgements/AcknowledgementsPage.tsx | 102 +++++---------- web/src/components/Cases/CasesPage.tsx | 5 +- .../ClusterDistributionPage.tsx | 5 +- .../CountryDistributionPage.tsx | 5 +- web/src/components/Error/ErrorBoundary.tsx | 16 +++ web/src/components/Error/ErrorContent.tsx | 46 +++++++ .../Error/ErrorContentExplanation.tsx | 20 +++ web/src/components/Error/ErrorStyles.tsx | 20 +++ .../Error/error-types/ErrorGeneric.tsx | 21 ++++ web/src/components/Faq/FaqPage.tsx | 31 +++-- web/src/components/Home/HomePage.tsx | 35 +++--- web/src/components/Loading/Loading.tsx | 33 ++++- .../MutationCountsSummaryCard.tsx | 86 ++++++------- .../SharedMutations/SharedMutationsPage.tsx | 57 ++++----- web/src/components/Variants/VariantsPage.tsx | 17 ++- .../components/Variants/VariantsPageIndex.tsx | 35 +++--- web/src/constants.ts | 2 + web/src/helpers/ErrorInternal.ts | 9 ++ web/src/hooks/useAxiosQuery.ts | 44 +++++++ web/src/hooks/useReloadPage.ts | 10 ++ web/src/io/axiosFetch.ts | 59 +++++++++ web/src/io/getMutationCounts.ts | 5 + web/src/pages/_app.tsx | 49 +++++--- web/src/pages/_error.tsx | 91 ++++++++++++++ web/src/pages/acknowledgements.tsx | 12 +- web/src/pages/debug-badges.tsx | 5 +- 29 files changed, 651 insertions(+), 405 deletions(-) delete mode 100644 web/src/components/Acknowledgements/AcknowledgementsError.tsx create mode 100644 web/src/components/Error/ErrorBoundary.tsx create mode 100644 web/src/components/Error/ErrorContent.tsx create mode 100644 web/src/components/Error/ErrorContentExplanation.tsx create mode 100644 web/src/components/Error/ErrorStyles.tsx create mode 100644 web/src/components/Error/error-types/ErrorGeneric.tsx create mode 100644 web/src/helpers/ErrorInternal.ts create mode 100644 web/src/hooks/useAxiosQuery.ts create mode 100644 web/src/hooks/useReloadPage.ts create mode 100644 web/src/io/axiosFetch.ts create mode 100644 web/src/pages/_error.tsx diff --git a/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx b/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx index af75cc1bd9..13175094b8 100644 --- a/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx +++ b/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx @@ -1,12 +1,11 @@ -import React, { useMemo, useState, useCallback } from 'react' - -import Axios from 'axios' +import React, { useMemo, useState, useCallback, Suspense, useRef, RefObject } from 'react' import { get } from 'lodash' -import { useQuery } from '@tanstack/react-query' -import { AcknowledgementsError } from 'src/components/Acknowledgements/AcknowledgementsError' import styled from 'styled-components' +import { ErrorBoundary } from 'react-error-boundary' import { Popover as PopoverBase, PopoverBody as PopoverBodyBase, PopoverHeader as PopoverHeaderBase } from 'reactstrap' -import { ThreeDots as ThreeDotsLoader } from 'react-loader-spinner' +import { THREE_DOTS } from 'src/components/Loading/Loading' +import { useAxiosQuery } from 'src/hooks/useAxiosQuery' +import { formatError } from 'src/components/MutationCounts/MutationCountsSummaryCard' export const Popover = styled(PopoverBase)` .popover { @@ -35,6 +34,7 @@ export const PopoverHeaderText = styled.span` export const EpiIslText = styled.span` text-decoration: #777 underline dashed; + cursor: pointer; ` export interface AcknowledgementEpiIslDatum { @@ -43,15 +43,15 @@ export interface AcknowledgementEpiIslDatum { authors: string } -export function getEpiIslUrl(epiIsl: string) { +export function getEpiIslUrl(epiIsl: string): string { const accessionIdComponents = epiIsl.split('_') if (accessionIdComponents.length < 3) { - return undefined + throw new Error(`Invalid EPI ISL: not enough components: ${epiIsl}`) } const id = accessionIdComponents[2] if (id.length < 4) { - return undefined + throw new Error(`Invalid EPI ISL: ID component is too short: ${epiIsl}`) } const first = id.slice(-4, -2) // 2 characters from the end, skipping the two last @@ -75,73 +75,61 @@ export function validateEpiIslData(data: unknown): AcknowledgementEpiIslDatum { } export function useQueryAcknowledgementData(epiIsl: string) { - const url: string | undefined = useMemo(() => getEpiIslUrl(epiIsl), [epiIsl]) - - return useQuery( - ['acknowledgement_data', epiIsl], - async () => { - if (!url) { - throw new Error( - `Unable to fetch acknowledgements data from GISAID: Unable to construct request URL: EPI ISL is incorrect: "${epiIsl}"`, - ) - } - const res = await Axios.get(url) - if (!res.data) { - throw new Error( - `Unable to fetch acknowledgements data from GISAID: request to URL "${url}" resulted in no data`, - ) - } - return validateEpiIslData(res.data) - }, - { - staleTime: Number.POSITIVE_INFINITY, - refetchOnMount: false, - refetchOnWindowFocus: false, - refetchOnReconnect: true, - refetchInterval: Number.POSITIVE_INFINITY, - }, + const url = useMemo(() => getEpiIslUrl(epiIsl), [epiIsl]) + const data = useAxiosQuery(url) + return useMemo(() => validateEpiIslData(data), [data]) +} + +export interface AcknowledgementEpiIslPopupBodyProps { + epiIsl: string +} + +export function AcknowledgementEpiIslPopupBody({ epiIsl }: AcknowledgementEpiIslPopupBodyProps) { + const data = useQueryAcknowledgementData(epiIsl) + return ( + <section> + <p> + <b>{'Originating lab: '}</b> + <span>{data.origLab}</span> + </p> + <p> + <b>{'Submitting lab: '}</b> + <span>{data.submLab}</span> + </p> + <p> + <b>{'Authors: '}</b> + <span>{data.authors}</span> + </p> + </section> + ) +} + +function ErrorFallbackComponent({ error }: { error: unknown }) { + return ( + <div className="mx-auto"> + <div>{`Unable to fetch acknowledgements: ${formatError(error)}`}</div> + </div> ) } export interface AcknowledgementEpiIslPopupProps { - target: string + target: RefObject<Element> isOpen: boolean epiIsl: string } export function AcknowledgementEpiIslPopup({ target, isOpen, epiIsl }: AcknowledgementEpiIslPopupProps) { - const { isLoading, isFetching, isError, data, error } = useQueryAcknowledgementData(epiIsl) - return ( <Popover isOpen={isOpen} target={target} placement="auto"> <PopoverHeader> <PopoverHeaderText>{`GISAID.org/${epiIsl}`}</PopoverHeaderText> </PopoverHeader> <PopoverBody> - {(isLoading || isFetching) && ( - <div className="d-flex"> - <div className="mx-auto"> - <ThreeDotsLoader color="#777" height={100} width={50} /> - </div> - </div> - )} - {isError && error && <AcknowledgementsError error={error} />} - {data && ( - <section> - <p> - <b>{'Originating lab: '}</b> - <span>{data.origLab}</span> - </p> - <p> - <b>{'Submitting lab: '}</b> - <span>{data.submLab}</span> - </p> - <p> - <b>{'Authors: '}</b> - <span>{data.authors}</span> - </p> - </section> - )} + <ErrorBoundary FallbackComponent={ErrorFallbackComponent}> + <Suspense fallback={THREE_DOTS}> + <AcknowledgementEpiIslPopupBody epiIsl={epiIsl} /> + </Suspense> + </ErrorBoundary> </PopoverBody> </Popover> ) @@ -158,14 +146,15 @@ export function AcknowledgementEpiIsl({ epiIsl }: AcknowledgementEpiIslProps) { // Example JSON URL: 'https://www.epicov.org/acknowledgement/49/39/EPI_ISL_1014939.json' const [popoverOpen, setPopoverOpen] = useState(false) - const id = useMemo(() => CSS.escape(epiIsl), [epiIsl]) const handleMouseOver = useCallback(() => setPopoverOpen(true), []) const handleMouseLeave = useCallback(() => setPopoverOpen(false), []) + const ref = useRef(null) + return ( <span> <EpiIslText - id={id} + ref={ref} onMouseOver={handleMouseOver} onMouseLeave={handleMouseLeave} onFocus={handleMouseOver} @@ -173,7 +162,7 @@ export function AcknowledgementEpiIsl({ epiIsl }: AcknowledgementEpiIslProps) { > {epiIsl} </EpiIslText> - {popoverOpen && <AcknowledgementEpiIslPopup target={id} epiIsl={epiIsl} isOpen={popoverOpen} />} + {popoverOpen && <AcknowledgementEpiIslPopup target={ref} epiIsl={epiIsl} isOpen={popoverOpen} />} </span> ) } diff --git a/web/src/components/Acknowledgements/AcknowledgementsCard.tsx b/web/src/components/Acknowledgements/AcknowledgementsCard.tsx index 3aa3a6d3cb..fc62e549bf 100644 --- a/web/src/components/Acknowledgements/AcknowledgementsCard.tsx +++ b/web/src/components/Acknowledgements/AcknowledgementsCard.tsx @@ -1,16 +1,12 @@ -import axios from 'axios' -import React, { useCallback, useMemo, useState } from 'react' - -import { Oval as OvalLoader } from 'react-loader-spinner' -import { useQuery } from '@tanstack/react-query' +import React, { Suspense, useCallback, useMemo, useState } from 'react' import PaginationComponent from 'react-reactstrap-pagination' import { CardBody } from 'reactstrap' +import styled from 'styled-components' +import { useAxiosQuery } from 'src/hooks/useAxiosQuery' import { AcknowledgementEpiIsl } from 'src/components/Acknowledgements/AcknowledgementEpiIsl' -import { AcknowledgementsError } from 'src/components/Acknowledgements/AcknowledgementsError' import { CardCollapsible } from 'src/components/Common/CardCollapsible' - +import { SPINNER } from 'src/components/Loading/Loading' import type { ClusterDatum } from 'src/io/getClusters' -import styled from 'styled-components' export interface AcknowledgementsKeysDatum { numChunks: number @@ -24,6 +20,7 @@ export interface AcknowledgementsKeysJson { export const PaginationContainer = styled.div` display: flex; + & > * { margin: 0 auto; } @@ -36,24 +33,7 @@ export function useQueryAcknowledgements(cluster: string, page: number) { const pageString = page.toString().padStart(3, '0') return `acknowledgements/${cluster}/${pageString}.json` }, [cluster, page]) - - return useQuery( - ['acknowledgements_page', cluster, page], - async () => { - const res = await axios.get(url) - if (!res.data) { - throw new Error(`Unable to fetch acknowledgements data: request to URL "${url}" resulted in no data`) - } - return res.data as string[] - }, - { - staleTime: Number.POSITIVE_INFINITY, - refetchOnMount: false, - refetchOnWindowFocus: false, - refetchOnReconnect: true, - refetchInterval: Number.POSITIVE_INFINITY, - }, - ) + return useAxiosQuery<string[]>(url) } export interface AcknowledgementsCardBodyProps { @@ -64,34 +44,15 @@ export interface AcknowledgementsCardBodyProps { export function AcknowledgementsCardBody({ cluster, numPages }: AcknowledgementsCardBodyProps) { const [page, setPage] = useState(0) const handlePagination = useCallback((page: number) => setPage(page - 1) /* one-based to zero-based */, []) - const { isLoading, isFetching, isError, data: epiIsls, error } = useQueryAcknowledgements(cluster.build_name, page) + const epiIsls = useQueryAcknowledgements(cluster.build_name, page) const body = useMemo(() => { - if (isLoading || isFetching) { - return ( - <div className="d-flex"> - <div className="mx-auto"> - <OvalLoader color="#777" height={100} width={50} /> - </div> - </div> - ) - } - if (isError && error) { - return <AcknowledgementsError error={error} /> - } - return null - }, [error, isError, isFetching, isLoading]) - - const epiIslsComponents = useMemo(() => { - if (epiIsls) { - return epiIsls.map((epiIsl) => ( - <span key={`$${cluster.display_name}-${epiIsl}`}> - <AcknowledgementEpiIsl epiIsl={epiIsl} /> - {', '} - </span> - )) - } - return null + return (epiIsls ?? []).map((epiIsl) => ( + <span key={`$${cluster.display_name}-${epiIsl}`}> + <AcknowledgementEpiIsl epiIsl={epiIsl} /> + {', '} + </span> + )) }, [cluster.display_name, epiIsls]) return ( @@ -111,7 +72,6 @@ export function AcknowledgementsCardBody({ cluster, numPages }: Acknowledgements </PaginationContainer> <div>{body}</div> - <div>{epiIslsComponents}</div> </CardBody> ) } @@ -125,7 +85,11 @@ export function AcknowledgementsCard({ cluster, numPages }: AcknowledgementsCard const [collapsed, setCollapsed] = useState(true) return ( <CardCollapsible className="my-2" title={cluster.display_name} collapsed={collapsed} setCollapsed={setCollapsed}> - {!collapsed && <AcknowledgementsCardBody cluster={cluster} numPages={numPages} />} + {!collapsed && ( + <Suspense fallback={SPINNER}> + <AcknowledgementsCardBody cluster={cluster} numPages={numPages} /> + </Suspense> + )} </CardCollapsible> ) } diff --git a/web/src/components/Acknowledgements/AcknowledgementsError.tsx b/web/src/components/Acknowledgements/AcknowledgementsError.tsx deleted file mode 100644 index 2dc817b8e7..0000000000 --- a/web/src/components/Acknowledgements/AcknowledgementsError.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react' - -import { UncontrolledAlert } from 'reactstrap' -import { get } from 'lodash' - -import { LinkExternal } from 'src/components/Link/LinkExternal' -import { URL_GITHUB } from 'src/constants' - -export function getErrorDetails(error: unknown) { - let name: string | undefined - let message: string | undefined - let url: string | undefined - if (error instanceof Error) { - ;({ name, message } = error) - const urlMaybe: unknown = get(error, 'config.url') - if (typeof urlMaybe === 'string' && urlMaybe.length > 0) { - url = urlMaybe - } - } else if (typeof error === 'string') { - name = 'Error' - message = error - } else { - name = 'UnknownError' - message = 'Unknown error has occurred' - } - - return { name, message, url } -} - -export function AcknowledgementsError({ error }: { error: unknown }) { - const { name, message, url } = getErrorDetails(error) - - return ( - <UncontrolledAlert color="danger" fade={false} closeClassName="d-none"> - <h4>{'Error has occurred'}</h4> - <p> - {url && `Attempted to fetch acknowledgements data from "${url}", but received an error:`} - <br /> - {`${name}: ${message}`} - </p> - <p> - {"If you believe it's a bug, please report it to developers, but creating a new issue on "} - <LinkExternal href={`${URL_GITHUB}/issues`}>{'GitHub'}</LinkExternal> - </p> - </UncontrolledAlert> - ) -} diff --git a/web/src/components/Acknowledgements/AcknowledgementsPage.tsx b/web/src/components/Acknowledgements/AcknowledgementsPage.tsx index fa9c3a1dd1..d1db9902fd 100644 --- a/web/src/components/Acknowledgements/AcknowledgementsPage.tsx +++ b/web/src/components/Acknowledgements/AcknowledgementsPage.tsx @@ -1,19 +1,12 @@ -import axios from 'axios' import React, { useMemo } from 'react' - import { get } from 'lodash' -import { Oval as OvalLoader } from 'react-loader-spinner' -import { useQuery } from '@tanstack/react-query' -import { AcknowledgementsError } from 'src/components/Acknowledgements/AcknowledgementsError' import styled from 'styled-components' import { Col, Container, Row } from 'reactstrap' - +import { useAxiosQuery } from 'src/hooks/useAxiosQuery' import { getClusters } from 'src/io/getClusters' -import { Layout } from 'src/components/Layout/Layout' import { AcknowledgementsCard, AcknowledgementsKeysJson } from 'src/components/Acknowledgements/AcknowledgementsCard' - +import { PageHeading } from 'src/components/Common/PageHeading' import AcknowledgementsContent from './AcknowledgementsContent.md' -import { PageHeading } from '../Common/PageHeading' export const AcknowledgementsPageContainer = styled(Container)` max-width: 1200px; @@ -23,73 +16,42 @@ export const AcknowledgementsPageContainer = styled(Container)` const clusters = getClusters() export function useQueryAcknowledgementsKeys() { - return useQuery( - ['acknowledgements_keys'], - async () => { - const url = '/acknowledgements/acknowledgements_keys.json' - const res = await axios.get(url) - if (!res.data) { - throw new Error(`Unable to fetch acknowledgement keys data: request to URL "${url}" resulted in no data`) - } - const json = res.data as AcknowledgementsKeysJson - return clusters.map((cluster) => { - const { numChunks } = get(json.acknowledgements, cluster.build_name, { numChunks: 0 }) - return { cluster, numChunks } - }) - }, - { - staleTime: Number.POSITIVE_INFINITY, - refetchOnMount: false, - refetchOnWindowFocus: false, - refetchOnReconnect: true, - refetchInterval: Number.POSITIVE_INFINITY, - }, - ) + const data = useAxiosQuery('/acknowledgements/acknowledgements_keys.json') + return useMemo(() => { + const json = data as AcknowledgementsKeysJson + return clusters.map((cluster) => { + const { numChunks } = get(json.acknowledgements, cluster.build_name, { numChunks: 0 }) + return { cluster, numChunks } + }) + }, [data]) } export function AcknowledgementsPage() { - const { isLoading, isFetching, isError, data, error } = useQueryAcknowledgementsKeys() + const data = useQueryAcknowledgementsKeys() const body = useMemo(() => { - if (isLoading || isFetching) { - return ( - <div className="d-flex"> - <div className="mx-auto"> - <OvalLoader color="#777" height={100} width={50} /> - </div> - </div> - ) - } - if (isError && error) { - return <AcknowledgementsError error={error} /> - } - if (data) { - return data.map((datum) => ( - <AcknowledgementsCard key={datum.cluster.build_name} cluster={datum.cluster} numPages={datum.numChunks} /> - )) - } - return null - }, [data, error, isError, isFetching, isLoading]) + return data.map((datum) => ( + <AcknowledgementsCard key={datum.cluster.build_name} cluster={datum.cluster} numPages={datum.numChunks} /> + )) + }, [data]) return ( - <Layout> - <AcknowledgementsPageContainer> - <Row> - <Col> - <PageHeading>{'Acknowledgements'}</PageHeading> - </Col> - </Row> - - <Row> - <Col> - <AcknowledgementsContent /> - </Col> - </Row> - - <Row className="mt-5"> - <Col>{body}</Col> - </Row> - </AcknowledgementsPageContainer> - </Layout> + <AcknowledgementsPageContainer> + <Row> + <Col> + <PageHeading>{'Acknowledgements'}</PageHeading> + </Col> + </Row> + + <Row> + <Col> + <AcknowledgementsContent /> + </Col> + </Row> + + <Row className="mt-5"> + <Col>{body}</Col> + </Row> + </AcknowledgementsPageContainer> ) } diff --git a/web/src/components/Cases/CasesPage.tsx b/web/src/components/Cases/CasesPage.tsx index a56c123649..5cd458f80a 100644 --- a/web/src/components/Cases/CasesPage.tsx +++ b/web/src/components/Cases/CasesPage.tsx @@ -4,7 +4,6 @@ import { useRecoilState } from 'recoil' import { CenteredEditable, Editable } from 'src/components/Common/Editable' import { ColCustom } from 'src/components/Common/ColCustom' -import { Layout } from 'src/components/Layout/Layout' import { MainFlex, SidebarFlex, WrapperFlex } from 'src/components/Common/PlotLayout' import { getPerCountryCasesData, filterClusters, filterCountries } from 'src/io/getPerCountryCasesData' @@ -94,7 +93,7 @@ export function CasesPage() { }, [setCountries]) return ( - <Layout wide> + <> <Row noGutters> <Col> <PageHeading>{'Estimated Cases by Variant'}</PageHeading> @@ -150,6 +149,6 @@ export function CasesPage() { </Editable> </Col> </Row> - </Layout> + </> ) } diff --git a/web/src/components/ClusterDistribution/ClusterDistributionPage.tsx b/web/src/components/ClusterDistribution/ClusterDistributionPage.tsx index ff627c2b9e..5755b97786 100644 --- a/web/src/components/ClusterDistribution/ClusterDistributionPage.tsx +++ b/web/src/components/ClusterDistribution/ClusterDistributionPage.tsx @@ -29,7 +29,6 @@ import { stringToOption } from 'src/components/Common/DropdownOption' import { Editable, CenteredEditable } from 'src/components/Common/Editable' import { MainFlex, SidebarFlex, WrapperFlex } from 'src/components/Common/PlotLayout' import { DistributionSidebar } from 'src/components/DistributionSidebar/DistributionSidebar' -import { Layout } from 'src/components/Layout/Layout' import { PageHeading } from 'src/components/Common/PageHeading' import PerClusterIntro from '../../../../content/PerClusterIntro.md' @@ -183,7 +182,7 @@ export function ClusterDistributionPage() { }, [setCountries]) return ( - <Layout wide> + <> <Row noGutters> <Col> <PageHeading>{'Overview of Variants/Mutations'}</PageHeading> @@ -253,6 +252,6 @@ export function ClusterDistributionPage() { </Editable> </Col> </Row> - </Layout> + </> ) } diff --git a/web/src/components/CountryDistribution/CountryDistributionPage.tsx b/web/src/components/CountryDistribution/CountryDistributionPage.tsx index 959ba66164..76f7f09cac 100644 --- a/web/src/components/CountryDistribution/CountryDistributionPage.tsx +++ b/web/src/components/CountryDistribution/CountryDistributionPage.tsx @@ -7,7 +7,6 @@ import { ColCustom } from 'src/components/Common/ColCustom' import { SharingPanel } from 'src/components/Common/SharingPanel' import { RegionSwitcher } from 'src/components/CountryDistribution/RegionSwitcher' import { DistributionSidebar } from 'src/components/DistributionSidebar/DistributionSidebar' -import { Layout } from 'src/components/Layout/Layout' import { MainFlex, SidebarFlex, WrapperFlex } from 'src/components/Common/PlotLayout' import { getRegionPerCountryContent } from 'src/io/getRegionContent' @@ -122,7 +121,7 @@ export function CountryDistributionPage() { }, [region]) return ( - <Layout wide> + <> <Row noGutters> <Col> <PageHeading>{'Overview of Variants in Countries'}</PageHeading> @@ -188,6 +187,6 @@ export function CountryDistributionPage() { </Editable> </Col> </Row> - </Layout> + </> ) } diff --git a/web/src/components/Error/ErrorBoundary.tsx b/web/src/components/Error/ErrorBoundary.tsx new file mode 100644 index 0000000000..b87570041f --- /dev/null +++ b/web/src/components/Error/ErrorBoundary.tsx @@ -0,0 +1,16 @@ +import React, { ReactNode } from 'react' + +import { ErrorBoundary as ErrorBoundaryBase, FallbackProps } from 'react-error-boundary' +import ErrorPage from 'src/pages/_error' + +export function ErrorFallback({ error }: FallbackProps) { + return <ErrorPage error={error} /> +} + +export interface ErrorBoundaryProps { + children?: ReactNode +} + +export function ErrorBoundary({ children }: ErrorBoundaryProps) { + return <ErrorBoundaryBase FallbackComponent={ErrorFallback}>{children}</ErrorBoundaryBase> +} diff --git a/web/src/components/Error/ErrorContent.tsx b/web/src/components/Error/ErrorContent.tsx new file mode 100644 index 0000000000..793c6881e9 --- /dev/null +++ b/web/src/components/Error/ErrorContent.tsx @@ -0,0 +1,46 @@ +/* eslint-disable react/destructuring-assignment */ +import React, { useMemo } from 'react' +import { Col, Row } from 'reactstrap' + +import { ErrorGeneric } from 'src/components/Error/error-types/ErrorGeneric' +import { sanitizeError } from 'src/helpers/sanitizeError' +import { ErrorStack } from './ErrorStyles' + +export function ErrorContentMessage({ error }: { error: Error }) { + return <ErrorGeneric error={error} /> +} + +export function ErrorContentStack({ error }: { error: Error }) { + const stackText = error?.stack?.replace(/webpack-internal:\/{3}\.\//g, '')?.replace(/https?:\/\/(.+):\d+\//g, '') + if (!stackText) { + return null + } + + return <ErrorStack>{stackText}</ErrorStack> +} + +export function ErrorContent(props: { error?: unknown }) { + const error = useMemo(() => sanitizeError(props.error), [props.error]) + + if (!props.error) { + return null + } + + return ( + <Row noGutters> + <Col> + <Row noGutters> + <Col> + <ErrorContentMessage error={error} /> + </Col> + </Row> + + <Row noGutters> + <Col> + <ErrorContentStack error={error} /> + </Col> + </Row> + </Col> + </Row> + ) +} diff --git a/web/src/components/Error/ErrorContentExplanation.tsx b/web/src/components/Error/ErrorContentExplanation.tsx new file mode 100644 index 0000000000..fc3573f21b --- /dev/null +++ b/web/src/components/Error/ErrorContentExplanation.tsx @@ -0,0 +1,20 @@ +import React from 'react' + +import { LinkExternal } from 'src/components/Link/LinkExternal' +import { URL_GITHUB_ISSUES, URL_GITHUB_ISSUES_FRIENDLY } from 'src/constants' + +export function ErrorContentExplanation() { + return ( + <section className="mt-3"> + <span>{'If you think it is a bug, report it at '}</span> + <span> + <LinkExternal href={URL_GITHUB_ISSUES}>{URL_GITHUB_ISSUES_FRIENDLY}</LinkExternal> + </span> + <span> + { + ' so that developers could investigate this problem. Please provide as much details as possible about your input data, operating system, browser version and computer configuration. Include other details you deem useful for diagnostics. Share the example sequence data that allows to reproduce the problem, if possible.' + } + </span> + </section> + ) +} diff --git a/web/src/components/Error/ErrorStyles.tsx b/web/src/components/Error/ErrorStyles.tsx new file mode 100644 index 0000000000..009110cec7 --- /dev/null +++ b/web/src/components/Error/ErrorStyles.tsx @@ -0,0 +1,20 @@ +import styled from 'styled-components' + +export const ErrorContainer = styled.div` + display: flex; + flex-direction: column; + width: 100%; + + & a { + overflow-wrap: anywhere; + } +` + +export const ErrorMessage = styled.p` + overflow-wrap: break-word; + word-break: normal; +` + +export const ErrorStack = styled.pre` + white-space: pre-wrap; +` diff --git a/web/src/components/Error/error-types/ErrorGeneric.tsx b/web/src/components/Error/error-types/ErrorGeneric.tsx new file mode 100644 index 0000000000..79f0151460 --- /dev/null +++ b/web/src/components/Error/error-types/ErrorGeneric.tsx @@ -0,0 +1,21 @@ +import React, { useMemo } from 'react' + +import { ErrorContainer, ErrorMessage } from 'src/components/Error/ErrorStyles' + +export function ErrorGeneric({ error }: { error: Error }) { + const { errorTitle, message } = useMemo(() => { + const { name, message } = error + let errorTitle = `An error has occurred: ${name}` + if (name.toLowerCase().trim() === 'error') { + errorTitle = 'An error has occurred' + } + return { errorTitle, message } + }, [error]) + + return ( + <ErrorContainer> + <h5>{errorTitle}</h5> + <ErrorMessage>{message}</ErrorMessage> + </ErrorContainer> + ) +} diff --git a/web/src/components/Faq/FaqPage.tsx b/web/src/components/Faq/FaqPage.tsx index 0da4e00f96..b13924e49c 100644 --- a/web/src/components/Faq/FaqPage.tsx +++ b/web/src/components/Faq/FaqPage.tsx @@ -3,28 +3,25 @@ import React from 'react' import { Col, Container, Row } from 'reactstrap' import { CenteredEditable } from 'src/components/Common/Editable' import { PageHeading } from 'src/components/Common/PageHeading' -import { Layout } from 'src/components/Layout/Layout' import Faq from '../../../../content/Faq.md' export function FaqPage() { return ( - <Layout> - <Container> - <Row noGutters> - <Col> - <PageHeading>{'Frequently asked questions'}</PageHeading> - </Col> - </Row> + <Container> + <Row noGutters> + <Col> + <PageHeading>{'Frequently asked questions'}</PageHeading> + </Col> + </Row> - <Row noGutters> - <Col> - <CenteredEditable githubUrl="blob/master/content/Faq.md"> - <Faq /> - </CenteredEditable> - </Col> - </Row> - </Container> - </Layout> + <Row noGutters> + <Col> + <CenteredEditable githubUrl="blob/master/content/Faq.md"> + <Faq /> + </CenteredEditable> + </Col> + </Row> + </Container> ) } diff --git a/web/src/components/Home/HomePage.tsx b/web/src/components/Home/HomePage.tsx index 1dcd388d7a..411ba6c4aa 100644 --- a/web/src/components/Home/HomePage.tsx +++ b/web/src/components/Home/HomePage.tsx @@ -5,30 +5,27 @@ import { ClusterButtonPanelLayout } from 'src/components/ClusterButtonPanel/Clus import { NarrowPageContainer } from 'src/components/Common/ClusterSidebarLayout' import { Editable } from 'src/components/Common/Editable' -import { Layout } from 'src/components/Layout/Layout' import HomeContent from '../../../../content/Home.md' export function HomePage() { return ( - <Layout> - <NarrowPageContainer> - <Row noGutters> - <Col> - <h1 className="display-4 mb-4 text-center">CoVariants</h1> - </Col> - </Row> + <NarrowPageContainer> + <Row noGutters> + <Col> + <h1 className="display-4 mb-4 text-center">CoVariants</h1> + </Col> + </Row> - <Row noGutters> - <Col> - <ClusterButtonPanelLayout> - <Editable> - <HomeContent /> - </Editable> - </ClusterButtonPanelLayout> - </Col> - </Row> - </NarrowPageContainer> - </Layout> + <Row noGutters> + <Col> + <ClusterButtonPanelLayout> + <Editable> + <HomeContent /> + </Editable> + </ClusterButtonPanelLayout> + </Col> + </Row> + </NarrowPageContainer> ) } diff --git a/web/src/components/Loading/Loading.tsx b/web/src/components/Loading/Loading.tsx index a59824d311..e95aab600f 100644 --- a/web/src/components/Loading/Loading.tsx +++ b/web/src/components/Loading/Loading.tsx @@ -1,7 +1,8 @@ import React, { useEffect, useState } from 'react' -import LogoNextstrain from 'src/assets/images/logo.svg' +import Logo from 'src/assets/images/logo.svg' import styled from 'styled-components' +import { Oval as OvalLoader, ThreeDots as ThreeDotsLoader } from 'react-loader-spinner' const Container = styled.div` display: flex; @@ -10,7 +11,7 @@ const Container = styled.div` overflow: hidden; ` -const SpinningLogo = styled(LogoNextstrain)` +const SpinningLogo = styled(Logo)` margin: auto; width: 80px; height: 80px; @@ -24,7 +25,7 @@ const SpinningLogo = styled(LogoNextstrain)` const waitBeforeShow = 500 -function Loading() { +export function Loading() { const [isShown, setIsShown] = useState(false) useEffect(() => { @@ -44,4 +45,28 @@ function Loading() { ) } -export default Loading +export const LOADING = <Loading /> + +export function Spinner() { + return ( + <div className="d-flex"> + <div className="mx-auto"> + <OvalLoader color="#777" height={100} width={50} /> + </div> + </div> + ) +} + +export const SPINNER = <Spinner /> + +export function ThreeDots() { + return ( + <div className="d-flex"> + <div className="mx-auto"> + <ThreeDotsLoader color="#777" height={100} width={50} /> + </div> + </div> + ) +} + +export const THREE_DOTS = <ThreeDots /> diff --git a/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx b/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx index f3d222862b..901b922cfe 100644 --- a/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx +++ b/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx @@ -1,14 +1,13 @@ -import React, { useMemo } from 'react' - -import { useQuery } from '@tanstack/react-query' +import React, { Suspense, useMemo } from 'react' import { Row, Col, CardHeader, Card, CardBody } from 'reactstrap' -import { LinkExternal } from 'src/components/Link/LinkExternal' - +import { ErrorBoundary as ErrorBoundaryBase } from 'react-error-boundary' +import styled from 'styled-components' import type { ClusterDatum } from 'src/io/getClusters' -import { getMutationCounts, MutationCountsDatum, MutationCountsGeneRecord } from 'src/io/getMutationCounts' +import { LinkExternal } from 'src/components/Link/LinkExternal' +import { MutationCountsDatum, MutationCountsGeneRecord, useMutationCounts } from 'src/io/getMutationCounts' import { AminoacidMutationBadge } from 'src/components/Common/MutationBadge' import { TableSlim } from 'src/components/Common/TableSlim' -import styled from 'styled-components' +import { SPINNER } from 'src/components/Loading/Loading' const MutationCountsSummaryCardBody = styled(CardBody)` padding: 1rem; @@ -86,22 +85,14 @@ export function MutationCountsSummarySubTable({ record, title }: MutationCountsS ) } -export function useMutationCounts(clusterBuildName: string) { - return useQuery(['mutationCounts', clusterBuildName], async () => getMutationCounts(clusterBuildName), { - staleTime: Number.POSITIVE_INFINITY, - refetchOnMount: false, - refetchOnWindowFocus: false, - refetchOnReconnect: true, - refetchInterval: Number.POSITIVE_INFINITY, - }) +export interface MutationCountsSummaryCardBodyContentProps { + currentClusterBuildName: string } -export interface MutationCountsSummaryProps { - currentCluster: ClusterDatum -} - -export function MutationCountsSummaryCard({ currentCluster }: MutationCountsSummaryProps) { - const { data, isError, error, isLoading } = useMutationCounts(currentCluster.build_name) +export function MutationCountsSummaryCardBodyContent({ + currentClusterBuildName, +}: MutationCountsSummaryCardBodyContentProps) { + const { data } = useMutationCounts(currentClusterBuildName) if (!data) { return null @@ -109,6 +100,33 @@ export function MutationCountsSummaryCard({ currentCluster }: MutationCountsSumm const { S, others } = data + return ( + <Row noGutters> + <Col className="d-flex mx-1 my-1 mb-auto"> + <MutationCountsSummarySubTable title="Gene S" record={S} /> + </Col> + + <Col className="d-flex mx-1 my-1 mb-auto"> + <MutationCountsSummarySubTable title="Other genes" record={others} /> + </Col> + </Row> + ) +} + +function ErrorFallbackComponent({ error }: { error: unknown }) { + return ( + <div className="mx-auto"> + <div>{`Mutation counts are not yet available`}</div> + <div className="text-danger">{process.env.NODE_ENV === 'development' && formatError(error)}</div> + </div> + ) +} + +export interface MutationCountsSummaryProps { + currentCluster: ClusterDatum +} + +export function MutationCountsSummaryCard({ currentCluster }: MutationCountsSummaryProps) { return ( <Card> <CardHeader> @@ -121,27 +139,11 @@ export function MutationCountsSummaryCard({ currentCluster }: MutationCountsSumm <MutationCountsSummaryCardBody> <Row noGutters> <Col> - <Row noGutters> - <Col className="d-flex mx-1 my-1 mb-auto"> - <MutationCountsSummarySubTable title="Gene S" record={S} /> - </Col> - - <Col className="d-flex mx-1 my-1 mb-auto"> - <MutationCountsSummarySubTable title="Other genes" record={others} /> - </Col> - </Row> - - <Row noGutters> - <Col> - {isLoading && <div className="mx-auto">{'Loading...'}</div>} - {isError && ( - <div className="mx-auto"> - <div>{`Mutation counts are not yet available`}</div> - <div className="text-danger">{process.env.NODE_ENV === 'development' && formatError(error)}</div> - </div> - )} - </Col> - </Row> + <ErrorBoundaryBase FallbackComponent={ErrorFallbackComponent}> + <Suspense fallback={SPINNER}> + <MutationCountsSummaryCardBodyContent currentClusterBuildName={currentCluster.build_name} /> + </Suspense> + </ErrorBoundaryBase> </Col> </Row> </MutationCountsSummaryCardBody> diff --git a/web/src/components/SharedMutations/SharedMutationsPage.tsx b/web/src/components/SharedMutations/SharedMutationsPage.tsx index a07fdbcf2a..7c5d66cde7 100644 --- a/web/src/components/SharedMutations/SharedMutationsPage.tsx +++ b/web/src/components/SharedMutations/SharedMutationsPage.tsx @@ -4,7 +4,6 @@ import { Col, Container, Row } from 'reactstrap' import styled from 'styled-components' import { Editable, CenteredEditable } from 'src/components/Common/Editable' -import { Layout } from 'src/components/Layout/Layout' import SharedMutationsIntro from '../../../../content/SharedMutations.md' import { SharedMutations } from './SharedMutations' @@ -20,38 +19,32 @@ export const SharedMutationsWrapper = styled.div` overflow-x: auto; ` -export const SharedMutationsWrapperInner = styled.div` - flex: 1; -` - export function SharedMutationsPage() { return ( - <Layout> - <SharedMutationsPageContainer> - <Row noGutters> - <Col> - <PageHeading>{'Shared mutations'}</PageHeading> - </Col> - </Row> - - <Row noGutters> - <Col> - <CenteredEditable githubUrl="blob/master/content/SharedMutations.md"> - <SharedMutationsIntro /> - </CenteredEditable> - </Col> - </Row> - - <Row noGutters> - <Col className="pb-10"> - <Editable githubUrl="blob/master/scripts" text={'View data generation scripts'}> - <SharedMutationsWrapper> - <SharedMutations /> - </SharedMutationsWrapper> - </Editable> - </Col> - </Row> - </SharedMutationsPageContainer> - </Layout> + <SharedMutationsPageContainer> + <Row noGutters> + <Col> + <PageHeading>{'Shared mutations'}</PageHeading> + </Col> + </Row> + + <Row noGutters> + <Col> + <CenteredEditable githubUrl="blob/master/content/SharedMutations.md"> + <SharedMutationsIntro /> + </CenteredEditable> + </Col> + </Row> + + <Row noGutters> + <Col className="pb-10"> + <Editable githubUrl="blob/master/scripts" text={'View data generation scripts'}> + <SharedMutationsWrapper> + <SharedMutations /> + </SharedMutationsWrapper> + </Editable> + </Col> + </Row> + </SharedMutationsPageContainer> ) } diff --git a/web/src/components/Variants/VariantsPage.tsx b/web/src/components/Variants/VariantsPage.tsx index 2a982eab98..d0b052511f 100644 --- a/web/src/components/Variants/VariantsPage.tsx +++ b/web/src/components/Variants/VariantsPage.tsx @@ -11,7 +11,6 @@ import type { ClusterDatum } from 'src/io/getClusters' import { getClusterContent } from 'src/io/getClusterContent' import { getClusterRedirects, getClusters } from 'src/io/getClusters' import { LinkExternal } from 'src/components/Link/LinkExternal' -import { Layout } from 'src/components/Layout/Layout' import { Editable } from 'src/components/Common/Editable' import { NarrowPageContainer } from 'src/components/Common/ClusterSidebarLayout' import { DefiningMutations, hasDefiningMutations } from 'src/components/Variants/DefiningMutations' @@ -81,15 +80,13 @@ export function VariantsPage({ clusterName: clusterNameUnsafe }: VariantsPagePro const currentCluster = useMemo(() => clusters.find((cluster) => cluster.build_name === clusterName), [clusterName]) return ( - <Layout> - <NarrowPageContainer> - <VariantTitle cluster={currentCluster} /> - - <ClusterButtonPanelLayout currentCluster={currentCluster}> - {currentCluster && <VariantsPageContent currentCluster={currentCluster} />} - </ClusterButtonPanelLayout> - </NarrowPageContainer> - </Layout> + <NarrowPageContainer> + <VariantTitle cluster={currentCluster} /> + + <ClusterButtonPanelLayout currentCluster={currentCluster}> + {currentCluster && <VariantsPageContent currentCluster={currentCluster} />} + </ClusterButtonPanelLayout> + </NarrowPageContainer> ) } diff --git a/web/src/components/Variants/VariantsPageIndex.tsx b/web/src/components/Variants/VariantsPageIndex.tsx index dc11487fe7..3ae48d0885 100644 --- a/web/src/components/Variants/VariantsPageIndex.tsx +++ b/web/src/components/Variants/VariantsPageIndex.tsx @@ -4,7 +4,6 @@ import { Col, Row } from 'reactstrap' import { NarrowPageContainer } from 'src/components/Common/ClusterSidebarLayout' import { Editable } from 'src/components/Common/Editable' -import { Layout } from 'src/components/Layout/Layout' import { PageHeading } from 'src/components/Common/PageHeading' import VariantsPageIntro from '../../../../content/VariantsPageIntro.md' @@ -12,24 +11,22 @@ import { ClusterButtonPanelLayout } from '../ClusterButtonPanel/ClusterButtonPan export function VariantsPageIndex() { return ( - <Layout> - <NarrowPageContainer> - <Row noGutters> - <Col> - <PageHeading>{'Overview of Variants/Mutations'}</PageHeading> - </Col> - </Row> + <NarrowPageContainer> + <Row noGutters> + <Col> + <PageHeading>{'Overview of Variants/Mutations'}</PageHeading> + </Col> + </Row> - <Row noGutters> - <Col> - <ClusterButtonPanelLayout> - <Editable githubUrl="blob/master/content/VariantsPageIntro.md"> - <VariantsPageIntro /> - </Editable> - </ClusterButtonPanelLayout> - </Col> - </Row> - </NarrowPageContainer> - </Layout> + <Row noGutters> + <Col> + <ClusterButtonPanelLayout> + <Editable githubUrl="blob/master/content/VariantsPageIntro.md"> + <VariantsPageIntro /> + </Editable> + </ClusterButtonPanelLayout> + </Col> + </Row> + </NarrowPageContainer> ) } diff --git a/web/src/constants.ts b/web/src/constants.ts index 02f3d76650..ff32d851b5 100644 --- a/web/src/constants.ts +++ b/web/src/constants.ts @@ -13,6 +13,8 @@ export const URL_MANIFEST_JSON = `${DOMAIN}/manifest.json` export const URL_GITHUB = 'https://github.com/hodcroftlab/covariants' as const export const URL_GITHUB_FRIENDLY = 'github.com/hodcroftlab/covariants' as const +export const URL_GITHUB_ISSUES = 'https://github.com/hodcroftlab/covariants/issues' as const +export const URL_GITHUB_ISSUES_FRIENDLY = 'github.com/hodcroftlab/covariants/issues' as const export const TWITTER_USERNAME_RAW = 'firefoxx66' as const export const TWITTER_USERNAME_FRIENDLY = `@${TWITTER_USERNAME_RAW}` diff --git a/web/src/helpers/ErrorInternal.ts b/web/src/helpers/ErrorInternal.ts new file mode 100644 index 0000000000..9a35e58a16 --- /dev/null +++ b/web/src/helpers/ErrorInternal.ts @@ -0,0 +1,9 @@ +import { URL_GITHUB_ISSUES } from 'src/constants' + +export class ErrorInternal extends Error { + public constructor(message: string) { + super( + `Internal Error: ${message}. This is an internal issue, likely due to a programming mistake. Please report it to developers at '${URL_GITHUB_ISSUES}' so that they could fix it.`, + ) + } +} diff --git a/web/src/hooks/useAxiosQuery.ts b/web/src/hooks/useAxiosQuery.ts new file mode 100644 index 0000000000..0da82f4a93 --- /dev/null +++ b/web/src/hooks/useAxiosQuery.ts @@ -0,0 +1,44 @@ +import type { QueryKey, UseQueryOptions } from '@tanstack/react-query' +import { useQuery } from '@tanstack/react-query' +import { useMemo } from 'react' + +import { axiosFetch } from 'src/io/axiosFetch' + +const QUERY_OPTIONS_DEFAULT = { + staleTime: Number.POSITIVE_INFINITY, + refetchOnMount: false, + refetchOnWindowFocus: false, + refetchOnReconnect: true, + refetchInterval: Number.POSITIVE_INFINITY, +} + +function queryOptionsDefaulted<T>(options: T) { + let newOptions = QUERY_OPTIONS_DEFAULT + if (options) { + newOptions = { ...newOptions, ...options } + } + return newOptions +} + +export type QueryOptions< + TQueryFnData = unknown, + TError = unknown, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'initialData'> & { + initialData?: () => undefined +} + +export type UseAxiosQueryOptions<TData = unknown> = QueryOptions<TData, Error, TData, string[]> + +/** Makes a cached fetch request */ +export function useAxiosQuery<TData = unknown>(url: string, options?: UseAxiosQueryOptions<TData>): TData { + const newOptions = useMemo(() => queryOptionsDefaulted(options), [options]) + const res = useQuery<TData, Error, TData, string[]>([url], async () => axiosFetch(url), newOptions) + return useMemo(() => { + if (!res.data) { + throw new Error(`Fetch failed: ${url}`) + } + return res.data + }, [res.data, url]) +} diff --git a/web/src/hooks/useReloadPage.ts b/web/src/hooks/useReloadPage.ts new file mode 100644 index 0000000000..fe1e7d0b68 --- /dev/null +++ b/web/src/hooks/useReloadPage.ts @@ -0,0 +1,10 @@ +import { useCallback } from 'react' + +export function useReloadPage(url?: string | URL) { + return useCallback(() => { + window.history.replaceState(null, '', url) + window.location.reload() + // trigger React suspense forever, to display loading spinner until the page is refreshed + throw new Promise(() => {}) // eslint-disable-line @typescript-eslint/no-throw-literal + }, [url]) +} diff --git a/web/src/io/axiosFetch.ts b/web/src/io/axiosFetch.ts new file mode 100644 index 0000000000..6ff605aff9 --- /dev/null +++ b/web/src/io/axiosFetch.ts @@ -0,0 +1,59 @@ +import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios' +import { isNil } from 'lodash' +import serializeJavascript from 'serialize-javascript' +import { ErrorInternal } from 'src/helpers/ErrorInternal' +import { sanitizeError } from 'src/helpers/sanitizeError' + +export class HttpRequestError extends Error { + public readonly request?: AxiosRequestConfig + public readonly response?: AxiosResponse + + constructor(error_: AxiosError) { + super(error_.message) + this.request = error_.config + this.response = error_.response + } +} + +export async function axiosFetch<TData = unknown>( + url: string | undefined, + options?: AxiosRequestConfig, +): Promise<TData> { + if (isNil(url)) { + throw new ErrorInternal(`Attempted to fetch from an invalid URL: '${serializeJavascript(url)}'`) + } + + let res + try { + res = await axios.get(url, options) + } catch (error) { + throw axios.isAxiosError(error) ? new HttpRequestError(error) : sanitizeError(error) + } + + if (!res?.data) { + throw new Error(`Unable to fetch: request to URL "${serializeJavascript(url)}" resulted in no data`) + } + + return res.data as TData +} + +export async function axiosFetchMaybe(url?: string): Promise<string | undefined> { + if (!url) { + return undefined + } + return axiosFetch(url) +} + +/** + * This version skips any transforms (such as JSON parsing) and returns plain string + */ +export async function axiosFetchRaw(url: string | undefined, options?: AxiosRequestConfig): Promise<string> { + return axiosFetch(url, { ...options, transformResponse: [] }) +} + +export async function axiosFetchRawMaybe(url?: string): Promise<string | undefined> { + if (!url) { + return undefined + } + return axiosFetchRaw(url) +} diff --git a/web/src/io/getMutationCounts.ts b/web/src/io/getMutationCounts.ts index aca0d00e4a..f0f5659b17 100644 --- a/web/src/io/getMutationCounts.ts +++ b/web/src/io/getMutationCounts.ts @@ -1,6 +1,7 @@ import type { Mutation } from 'src/types' import { parseAminoacidMutation } from 'src/components/Common/parseAminoacidMutation' import { mapValues, sortBy } from 'lodash' +import { useQuery } from '@tanstack/react-query' export interface MutationCountsDatum { mut: Mutation @@ -52,3 +53,7 @@ export async function getMutationCounts(clusterBuildName: string): Promise<Mutat const data = (await import(`../../data/mutationCounts/${clusterBuildName}.json`)).default as MutationCountsJson return mapValues(data, (datum) => parseMutationCounts(datum)) } + +export function useMutationCounts(clusterBuildName: string) { + return useQuery(['mutationCounts', clusterBuildName], async () => getMutationCounts(clusterBuildName)) +} diff --git a/web/src/pages/_app.tsx b/web/src/pages/_app.tsx index 548280195e..194879a7f7 100644 --- a/web/src/pages/_app.tsx +++ b/web/src/pages/_app.tsx @@ -4,7 +4,7 @@ import 'resize-observer-polyfill/dist/ResizeObserver.global' import 'css.escape' import dynamic from 'next/dynamic' -import React, { useCallback, useMemo } from 'react' +import React, { Suspense, useCallback, useMemo } from 'react' import { QueryClient, QueryClientConfig, QueryClientProvider } from '@tanstack/react-query' import { MutableSnapshot, RecoilRoot } from 'recoil' import { ReactQueryDevtools } from '@tanstack/react-query-devtools' @@ -22,13 +22,26 @@ import { theme } from 'src/theme' import { DOMAIN_STRIPPED } from 'src/constants' import { Plausible } from 'src/components/Common/Plausible' import { SeoApp } from 'src/components/Common/SeoApp' +import { LOADING } from 'src/components/Loading/Loading' import { getMdxComponents } from 'src/components/Common/MdxComponents' +import { ErrorBoundary } from 'src/components/Error/ErrorBoundary' import { loadPolyfills } from 'src/polyfills' import 'src/styles/global.scss' +import { Layout } from 'src/components/Layout/Layout' const REACT_QUERY_OPTIONS: QueryClientConfig = { - defaultOptions: { queries: { suspense: true, retry: 1 } }, + defaultOptions: { + queries: { + suspense: true, + retry: 1, + staleTime: Number.POSITIVE_INFINITY, + refetchOnMount: false, + refetchOnWindowFocus: false, + refetchOnReconnect: true, + refetchInterval: Number.POSITIVE_INFINITY, + }, + }, } function MyApp({ Component, pageProps, router }: AppProps) { @@ -85,18 +98,26 @@ function MyApp({ Component, pageProps, router }: AppProps) { ) return ( - <RecoilRoot initializeState={initializeState}> - <ThemeProvider theme={theme}> - <MDXProvider components={getMdxComponents}> - <Plausible domain={DOMAIN_STRIPPED} /> - <SeoApp /> - <QueryClientProvider client={queryClient}> - <Component {...pageProps} /> - <ReactQueryDevtools initialIsOpen={false} /> - </QueryClientProvider> - </MDXProvider> - </ThemeProvider> - </RecoilRoot> + <Suspense fallback={LOADING}> + <ErrorBoundary> + <RecoilRoot initializeState={initializeState}> + <ThemeProvider theme={theme}> + <MDXProvider components={getMdxComponents}> + <Plausible domain={DOMAIN_STRIPPED} /> + <SeoApp /> + <QueryClientProvider client={queryClient}> + <Layout> + <Suspense> + <Component {...pageProps} /> + </Suspense> + </Layout> + <ReactQueryDevtools initialIsOpen={false} /> + </QueryClientProvider> + </MDXProvider> + </ThemeProvider> + </RecoilRoot> + </ErrorBoundary> + </Suspense> ) } diff --git a/web/src/pages/_error.tsx b/web/src/pages/_error.tsx new file mode 100644 index 0000000000..0a1a40b06d --- /dev/null +++ b/web/src/pages/_error.tsx @@ -0,0 +1,91 @@ +import React, { useMemo } from 'react' +import type { NextPageContext } from 'next' +import styled from 'styled-components' +import { Button, Col, Container as ContainerBase, Row } from 'reactstrap' + +import { ErrorContent } from 'src/components/Error/ErrorContent' +import { ErrorContentExplanation } from 'src/components/Error/ErrorContentExplanation' +import { useReloadPage } from 'src/hooks/useReloadPage' + +export const Container = styled(ContainerBase)` + max-height: 100vh; + height: 100%; + max-width: ${(props) => props.theme.xl}; + margin: 0 auto; + display: flex; + flex-direction: column; + + @media (max-width: 991.98px) { + padding-left: 10px; + padding-right: 10px; + } + + @media (max-width: 767.98px) { + padding-left: 5px; + padding-right: 5px; + } +` + +export const MainContent = styled.main` + margin: 0 auto; + height: 100%; + max-width: 960px; +` + +export interface ErrorPageProps { + statusCode?: number + title?: string + error?: Error | undefined + showDetails?: boolean +} + +function ErrorPage({ title, error, showDetails = true }: ErrorPageProps) { + const reload = useReloadPage('/') + + const errorContent = useMemo(() => { + if (!showDetails || !error) { + return null + } + + return ( + <Row noGutters> + <Col> + <ErrorContent error={error} /> + </Col> + </Row> + ) + }, [error, showDetails]) + + return ( + <MainContent> + <Row noGutters> + <Col className="text-center text-danger"> + <h2>{title ?? 'An error has occurred'}</h2> + </Col> + </Row> + + {errorContent} + + <Row noGutters> + <Col> + <ErrorContentExplanation /> + </Col> + </Row> + + <Row noGutters> + <Col className="w-100 d-flex"> + <Button className="ml-auto" type="button" color="danger" title="Reload the page" onClick={reload}> + {'Restart'} + </Button> + </Col> + </Row> + </MainContent> + ) +} + +ErrorPage.getInitialProps = ({ res, err }: NextPageContext): Promise<ErrorPageProps> | ErrorPageProps => { + const statusCode = res?.statusCode ?? err?.statusCode + return { statusCode, error: err ?? undefined } +} + +export default ErrorPage diff --git a/web/src/pages/acknowledgements.tsx b/web/src/pages/acknowledgements.tsx index 0b79ee2efe..b963794364 100644 --- a/web/src/pages/acknowledgements.tsx +++ b/web/src/pages/acknowledgements.tsx @@ -1 +1,11 @@ -export { AcknowledgementsPage as default } from 'src/components/Acknowledgements/AcknowledgementsPage' +import React, { Suspense } from 'react' +import { AcknowledgementsPage as Page } from 'src/components/Acknowledgements/AcknowledgementsPage' +import { LOADING } from 'src/components/Loading/Loading' + +export default function AcknowledgementsPage() { + return ( + <Suspense fallback={LOADING}> + <Page /> + </Suspense> + ) +} diff --git a/web/src/pages/debug-badges.tsx b/web/src/pages/debug-badges.tsx index b38483ab77..5d4b5d00bb 100644 --- a/web/src/pages/debug-badges.tsx +++ b/web/src/pages/debug-badges.tsx @@ -3,7 +3,6 @@ import React from 'react' import { Col, Row } from 'reactstrap' import { Var, WhoBadge } from 'src/components/Common/MutationBadge' -import { Layout } from 'src/components/Layout/Layout' import { LinkSmart } from 'src/components/Link/LinkSmart' import { getClusterNames, getClusterBuildNames, getClusterOldBuildNames } from 'src/io/getClusters' @@ -17,7 +16,7 @@ const domain = process.env.DOMAIN ?? '' export default function DebugBadges() { return ( - <Layout> + <> <Row noGutters> <Col> {'Display names'} @@ -73,6 +72,6 @@ export default function DebugBadges() { </ul> </Col> </Row> - </Layout> + </> ) } From cd93fa981b4237230cfe280f56ec21b1a7991839 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 15:03:06 +0100 Subject: [PATCH 09/26] chore: remove unused deps and env vars --- web/.env.example | 3 - web/.env.vercel | 5 +- web/config/next/lib/getEnvVars.ts | 10 +- web/config/next/next.config.ts | 8 +- web/package.json | 15 --- web/tools/server/server.ts | 1 - web/yarn.lock | 160 +++++++++--------------------- 7 files changed, 55 insertions(+), 147 deletions(-) diff --git a/web/.env.example b/web/.env.example index 53ac4008d5..1c97505813 100644 --- a/web/.env.example +++ b/web/.env.example @@ -9,14 +9,11 @@ RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=false DEV_ENABLE_TYPE_CHECKS=1 DEV_ENABLE_ESLINT=1 -DEV_ENABLE_STYLELINT=0 PROD_ENABLE_SOURCE_MAPS=1 PROD_ENABLE_TYPE_CHECKS=1 PROD_ENABLE_ESLINT=1 -PROD_ENABLE_STYLELINT=0 -ANALYZE=0 PROFILE=0 WATCH_POLL=0 diff --git a/web/.env.vercel b/web/.env.vercel index 5783a36a42..0d8e826b6e 100644 --- a/web/.env.vercel +++ b/web/.env.vercel @@ -9,12 +9,11 @@ RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=false DEV_ENABLE_TYPE_CHECKS=1 DEV_ENABLE_ESLINT=1 -DEV_ENABLE_STYLELINT=1 PROD_ENABLE_SOURCE_MAPS=1 PROD_ENABLE_TYPE_CHECKS=0 PROD_ENABLE_ESLINT=0 -PROD_ENABLE_STYLELINT=0 -ANALYZE=0 PROFILE=0 + +WATCH_POLL=0 diff --git a/web/config/next/lib/getEnvVars.ts b/web/config/next/lib/getEnvVars.ts index ce2556f6b8..80104ab604 100644 --- a/web/config/next/lib/getEnvVars.ts +++ b/web/config/next/lib/getEnvVars.ts @@ -2,21 +2,17 @@ import { getbool, getenv } from '../../../lib/getenv' import { getDomain } from '../../../lib/getDomain' export function getEnvVars() { - const BABEL_ENV = getenv('BABEL_ENV') const NODE_ENV = getenv('NODE_ENV') - const ANALYZE = getbool('ANALYZE') - const PROFILE = getbool('PROFILE') const PRODUCTION = NODE_ENV === 'production' + const PROFILE = getbool('PROFILE') const DOMAIN = getDomain() const DOMAIN_STRIPPED = DOMAIN.replace('https://', '').replace('http://', '') const WATCH_POLL = getbool('WATCH_POLL', false) const common = { - BABEL_ENV, NODE_ENV, - ANALYZE, - PROFILE, PRODUCTION, + PROFILE, DOMAIN, DOMAIN_STRIPPED, WATCH_POLL, @@ -28,7 +24,6 @@ export function getEnvVars() { ENABLE_SOURCE_MAPS: getbool('PROD_ENABLE_SOURCE_MAPS'), ENABLE_ESLINT: getbool('PROD_ENABLE_ESLINT'), ENABLE_TYPE_CHECKS: getbool('PROD_ENABLE_TYPE_CHECKS'), - ENABLE_STYLELINT: getbool('PROD_ENABLE_STYLELINT'), } } @@ -37,6 +32,5 @@ export function getEnvVars() { ENABLE_SOURCE_MAPS: true, ENABLE_ESLINT: getbool('DEV_ENABLE_ESLINT'), ENABLE_TYPE_CHECKS: getbool('DEV_ENABLE_TYPE_CHECKS'), - ENABLE_STYLELINT: getbool('DEV_ENABLE_STYLELINT'), } } diff --git a/web/config/next/next.config.ts b/web/config/next/next.config.ts index 433a88e53a..d565e2e243 100644 --- a/web/config/next/next.config.ts +++ b/web/config/next/next.config.ts @@ -29,15 +29,11 @@ import withWebpackWatchPoll from './withWebpackWatchPoll' import withUrlAsset from './withUrlAsset' const { - // BABEL_ENV, - // NODE_ENV, - // ANALYZE, - PROFILE, PRODUCTION, + PROFILE, ENABLE_SOURCE_MAPS, ENABLE_ESLINT, ENABLE_TYPE_CHECKS, - // ENABLE_STYLELINT, DOMAIN, DOMAIN_STRIPPED, WATCH_POLL, @@ -98,7 +94,7 @@ const withMDX = getWithMDX({ options: { remarkPlugins: [ // prettier-ignore - require('remark-breaks'), + require("remark-breaks"), require('remark-images'), require('remark-math'), require('remark-slug'), diff --git a/web/package.json b/web/package.json index 655d5177b7..35d2f92f9d 100644 --- a/web/package.json +++ b/web/package.json @@ -43,10 +43,6 @@ "eslint:ci": "yarn eslint --max-warnings=0", "tsc": "tsc --project tsconfig.json --noEmit", "tsc:watch": "yarn tsc --watch", - "stylelint": "stylelint \"**/*.*(css|scss)\"", - "stylelint:fix": "yarn stylelint --fix", - "stylelint:watch": "nodemon --config config/nodemon/stylelint.json", - "stylelint:fix:watch": "nodemon --config config/nodemon/stylelint.fix.json", "format": "prettier --check \"**/*.{js,jsx,ts,tsx,json,html,css,less,scss,yml,yaml}\"", "format:fix": "yarn format --write", "test": "yarn test:nowatch --watch --verbose ", @@ -94,7 +90,6 @@ "react-dom": "18.2.0", "react-error-boundary": "3.1.4", "react-gif-player": "0.4.2", - "react-helmet": "6.1.0", "react-icons": "4.7.1", "react-intersection-observer": "9.4.1", "react-loader-spinner": "5.3.4", @@ -126,24 +121,19 @@ "@next/eslint-plugin-next": "13.0.6", "@next/mdx": "12.3.4", "@nuxt/friendly-errors-webpack-plugin": "2.5.2", - "@primer/css": "20.7.1", "@schemastore/package": "0.0.6", "@svgr/webpack": "6.5.1", "@testing-library/jest-dom": "5.16.5", "@testing-library/react": "13.4.0", "@testing-library/user-event": "14.4.3", "@types/classnames": "2.3.0", - "@types/compare-versions": "3.3.0", - "@types/connect-history-api-fallback": "1.3.5", "@types/copy-webpack-plugin": "8.0.1", "@types/express": "4.17.14", "@types/extra-watch-webpack-plugin": "1.0.3", "@types/friendly-errors-webpack-plugin": "0.1.4", "@types/fs-extra": "9.0.13", - "@types/history": "4.7.11", "@types/jest": "29.2.4", "@types/jest-axe": "3.5.5", - "@types/js-yaml": "4.0.5", "@types/lodash": "4.14.191", "@types/lodash-webpack-plugin": "0.11.6", "@types/luxon": "3.1.0", @@ -153,12 +143,9 @@ "@types/react": "18.0.26", "@types/react-copy-to-clipboard": "5.0.4", "@types/react-dom": "18.0.9", - "@types/react-helmet": "6.1.6", "@types/react-loader-spinner": "3.1.3", "@types/react-toggle": "4.0.3", - "@types/reactstrap": "8.7.2", "@types/rimraf": "3.0.2", - "@types/semver": "7.3.13", "@types/serialize-javascript": "5.0.2", "@types/styled-components": "5.1.26", "@types/url-join": "4.0.1", @@ -169,7 +156,6 @@ "allow-methods": "4.1.2", "babel-plugin-parameter-decorator": "1.0.16", "babel-plugin-transform-typescript-metadata": "0.3.2", - "connect-history-api-fallback": "2.0.0", "copy-webpack-plugin": "11.0.0", "cross-env": "7.0.3", "css-loader": "6.7.2", @@ -225,7 +211,6 @@ "jest-styled-components": "7.1.1", "jest-transformer-mdx": "3.3.0", "jest-watch-typeahead": "2.2.1", - "js-yaml": "4.1.0", "json-loader": "0.5.7", "lodash-webpack-plugin": "0.11.6", "next-compose-plugins": "2.2.1", diff --git a/web/tools/server/server.ts b/web/tools/server/server.ts index 431a44f593..c76b3c4cc2 100644 --- a/web/tools/server/server.ts +++ b/web/tools/server/server.ts @@ -16,7 +16,6 @@ import path from 'path' import express from 'express' import allowMethods from 'allow-methods' -// import history from 'connect-history-api-fallback' import expressStaticGzip from 'express-static-gzip' import { getenv } from '../../lib/getenv' diff --git a/web/yarn.lock b/web/yarn.lock index 163e30fc7e..b006dfce49 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -1999,18 +1999,6 @@ error-stack-parser "^2.0.0" string-width "^4.2.3" -"@primer/css@20.7.1": - version "20.7.1" - resolved "https://registry.yarnpkg.com/@primer/css/-/css-20.7.1.tgz#67b8e6bf9063aec71a1888eed704005a5ef5b0c1" - integrity sha512-NcTKs6PZtT7btF8GlYvoRMq8XBJ8TWGA8VBPG+dAYHm/38gx8JwKSiZG0Dt2Ue1AYoV/75Slp/mUPDnFCmbOOQ== - dependencies: - "@primer/primitives" "^7.9.0" - -"@primer/primitives@^7.9.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@primer/primitives/-/primitives-7.10.0.tgz#de0d9648d484184442583564f02d6600b872fa5f" - integrity sha512-DdLHq21e93R9qDHyRuRpytBLY0Up9IwNWMOUgPNW6lRSng4N4+IdUlLS3Ekbasmxfs8Z8vKS8aezeYovQ5qsxQ== - "@rushstack/eslint-patch@^1.1.0", "@rushstack/eslint-patch@^1.1.3": version "1.2.0" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" @@ -2283,21 +2271,6 @@ dependencies: classnames "*" -"@types/compare-versions@3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@types/compare-versions/-/compare-versions-3.3.0.tgz#a4634771f61cfc9326923d518ab8a04089e99314" - integrity sha512-5nlNADyetxvaPz7aJ6CHiT9T3u+tyemJFXxBNoxTrKv+zhOvS6d36/7naGZ1iZXvlATpCyGh2EcREHDdM4A+gg== - dependencies: - compare-versions "*" - -"@types/connect-history-api-fallback@1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - "@types/connect@*": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -2376,7 +2349,7 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": +"@types/express-serve-static-core@^4.17.18": version "4.17.31" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== @@ -2438,11 +2411,6 @@ dependencies: "@types/unist" "*" -"@types/history@4.7.11": - version "4.7.11" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== - "@types/hoist-non-react-statics@*": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" @@ -2486,11 +2454,6 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/js-yaml@4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138" - integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA== - "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" @@ -2596,27 +2559,13 @@ dependencies: "@types/react" "*" -"@types/react-dom@18.0.9": +"@types/react-dom@18.0.9", "@types/react-dom@^18.0.0": version "18.0.9" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.9.tgz#ffee5e4bfc2a2f8774b15496474f8e7fe8d0b504" integrity sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg== dependencies: "@types/react" "*" -"@types/react-dom@^18.0.0": - version "18.0.3" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.3.tgz#a022ea08c75a476fe5e96b675c3e673363853831" - integrity sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ== - dependencies: - "@types/react" "*" - -"@types/react-helmet@6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.6.tgz#7d1afd8cbf099616894e8240e9ef70e3c6d7506d" - integrity sha512-ZKcoOdW/Tg+kiUbkFCBtvDw0k3nD4HJ/h/B9yWxN4uDO8OkRksWTO+EL+z/Qu3aHTeTll3Ro0Cc/8UhwBCMG5A== - dependencies: - "@types/react" "*" - "@types/react-loader-spinner@3.1.3": version "3.1.3" resolved "https://registry.yarnpkg.com/@types/react-loader-spinner/-/react-loader-spinner-3.1.3.tgz#eb08b0894dae61773df5873e22060c653253e3dc" @@ -2638,16 +2587,7 @@ dependencies: "@types/react" "*" -"@types/react@*": - version "18.0.8" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.8.tgz#a051eb380a9fbcaa404550543c58e1cf5ce4ab87" - integrity sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@18.0.26": +"@types/react@*", "@types/react@18.0.26": version "18.0.26" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== @@ -2656,13 +2596,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/reactstrap@8.7.2": - version "8.7.2" - resolved "https://registry.yarnpkg.com/@types/reactstrap/-/reactstrap-8.7.2.tgz#0ab86f35e472e8f2002eaf8c7a42193c9cea6add" - integrity sha512-8sYGS/LhG+ic8vhLwxhuVn+TSqS1lKzplm9BHv4JaQoetStAi9uOqP2VREfefIRT3JnOq5Y+G7Afdryvn+UgZQ== - dependencies: - reactstrap "*" - "@types/rimraf@3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-3.0.2.tgz#a63d175b331748e5220ad48c901d7bbf1f44eef8" @@ -2676,7 +2609,7 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== -"@types/semver@7.3.13", "@types/semver@^7.3.12": +"@types/semver@^7.3.12": version "7.3.13" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== @@ -2823,6 +2756,14 @@ "@typescript-eslint/types" "5.45.1" "@typescript-eslint/visitor-keys" "5.45.1" +"@typescript-eslint/scope-manager@5.46.0": + version "5.46.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.46.0.tgz#60790b14d0c687dd633b22b8121374764f76ce0d" + integrity sha512-7wWBq9d/GbPiIM6SqPK9tfynNxVbfpihoY5cSFMer19OYUA3l4powA2uv0AV2eAZV6KoAh6lkzxv4PoxOLh1oA== + dependencies: + "@typescript-eslint/types" "5.46.0" + "@typescript-eslint/visitor-keys" "5.46.0" + "@typescript-eslint/type-utils@5.45.1": version "5.45.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.45.1.tgz#cb7d300c3c95802cea9f87c7f8be363cf8f8538c" @@ -2838,7 +2779,12 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.1.tgz#8e1883041cee23f1bb7e1343b0139f97f6a17c14" integrity sha512-HEW3U0E5dLjUT+nk7b4lLbOherS1U4ap+b9pfu2oGsW3oPu7genRaY9dDv3nMczC1rbnRY2W/D7SN05wYoGImg== -"@typescript-eslint/typescript-estree@5.45.1": +"@typescript-eslint/types@5.46.0": + version "5.46.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.46.0.tgz#f4d76622a996b88153bbd829ea9ccb9f7a5d28bc" + integrity sha512-wHWgQHFB+qh6bu0IAPAJCdeCdI0wwzZnnWThlmHNY01XJ9Z97oKqKOzWYpR2I83QmshhQJl6LDM9TqMiMwJBTw== + +"@typescript-eslint/typescript-estree@5.45.1", "@typescript-eslint/typescript-estree@5.46.0": version "5.45.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.1.tgz#b3dc37f0c4f0fe73e09917fc735e6f96eabf9ba4" integrity sha512-76NZpmpCzWVrrb0XmYEpbwOz/FENBi+5W7ipVXAsG3OoFrQKJMiaqsBMbvGRyLtPotGqUfcY7Ur8j0dksDJDng== @@ -2851,7 +2797,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.45.1", "@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.13.0": +"@typescript-eslint/utils@5.45.1": version "5.45.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.1.tgz#39610c98bde82c4792f2a858b29b7d0053448be2" integrity sha512-rlbC5VZz68+yjAzQBc4I7KDYVzWG2X/OrqoZrMahYq3u8FFtmQYc+9rovo/7wlJH5kugJ+jQXV5pJMnofGmPRw== @@ -2865,6 +2811,20 @@ eslint-utils "^3.0.0" semver "^7.3.7" +"@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.13.0": + version "5.46.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.46.0.tgz#600cd873ba471b7d8b0b9f35de34cf852c6fcb31" + integrity sha512-4O+Ps1CRDw+D+R40JYh5GlKLQERXRKW5yIQoNDpmXPJ+C7kaPF9R7GWl+PxGgXjB3PQCqsaaZUpZ9dG4U6DO7g== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.46.0" + "@typescript-eslint/types" "5.46.0" + "@typescript-eslint/typescript-estree" "5.46.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.45.1": version "5.45.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.1.tgz#204428430ad6a830d24c5ac87c71366a1cfe1948" @@ -2873,6 +2833,14 @@ "@typescript-eslint/types" "5.45.1" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.46.0": + version "5.46.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.0.tgz#36d87248ae20c61ef72404bcd61f14aa2563915f" + integrity sha512-E13gBoIXmaNhwjipuvQg1ByqSAu/GbEpP/qzFihugJ+MomtoJtFAJG/+2DRPByf57B863m0/q7Zt16V9ohhANw== + dependencies: + "@typescript-eslint/types" "5.46.0" + eslint-visitor-keys "^3.3.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -3905,11 +3873,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== -compare-versions@*: - version "5.0.1" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-5.0.1.tgz#14c6008436d994c3787aba38d4087fabe858555e" - integrity sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -3920,11 +3883,6 @@ confusing-browser-globals@^1.0.10, confusing-browser-globals@^1.0.11: resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -connect-history-api-fallback@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - consola@^2.15.3, consola@^2.6.0: version "2.15.3" resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" @@ -6979,13 +6937,6 @@ js-sdsl@^4.1.4: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -6994,6 +6945,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -8536,11 +8494,6 @@ react-error-boundary@3.1.4: dependencies: "@babel/runtime" "^7.12.5" -react-fast-compare@^3.1.1: - 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-gif-player@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/react-gif-player/-/react-gif-player-0.4.2.tgz#7f7675625bb264a3cfac8956edd5a18b8c196af3" @@ -8548,16 +8501,6 @@ react-gif-player@0.4.2: dependencies: prop-types "^15.6.0" -react-helmet@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" - integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== - dependencies: - object-assign "^4.1.1" - prop-types "^15.7.2" - react-fast-compare "^3.1.1" - react-side-effect "^2.1.0" - react-icons@4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.7.1.tgz#0f4b25a5694e6972677cb189d2a72eabea7a8345" @@ -8648,11 +8591,6 @@ react-share@4.4.1: classnames "^2.3.2" jsonp "^0.2.1" -react-side-effect@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" - integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== - react-smooth@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-2.0.1.tgz#74c7309916d6ccca182c4b30c8992f179e6c5a05" @@ -8710,7 +8648,7 @@ react@18.2.0, react@^16.8.6: dependencies: loose-envify "^1.1.0" -reactstrap@*, reactstrap@8.10.1: +reactstrap@8.10.1: version "8.10.1" resolved "https://registry.yarnpkg.com/reactstrap/-/reactstrap-8.10.1.tgz#43ea596c7f82f88997a9c8aae203417910262d3f" integrity sha512-StjLADa/12yMNjafrSs+UD7sZAGtKpLO9fZp++2Dj0IzJinqY7eQhXlM3nFf0q40YsIcLvQdFc9pKF8PF4f0Qg== From 4f224e291e7b01e8fa8e5e664b05ef0e328ca57a Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 15:49:26 +0100 Subject: [PATCH 10/26] refactor: add suspense to every page --- web/src/pages/cases.tsx | 12 +++++++++++- web/src/pages/faq.tsx | 12 +++++++++++- web/src/pages/index.tsx | 12 +++++++++++- web/src/pages/per-country.tsx | 12 +++++++++++- web/src/pages/per-variant.tsx | 12 +++++++++++- web/src/pages/shared-mutations.tsx | 12 +++++++++++- 6 files changed, 66 insertions(+), 6 deletions(-) diff --git a/web/src/pages/cases.tsx b/web/src/pages/cases.tsx index 2b988cb27b..dcad0887b3 100644 --- a/web/src/pages/cases.tsx +++ b/web/src/pages/cases.tsx @@ -1 +1,11 @@ -export { CasesPage as default } from 'src/components/Cases/CasesPage' +import React, { Suspense } from 'react' +import { CasesPage as Page } from 'src/components/Cases/CasesPage' +import { LOADING } from 'src/components/Loading/Loading' + +export default function CasesPage() { + return ( + <Suspense fallback={LOADING}> + <Page /> + </Suspense> + ) +} diff --git a/web/src/pages/faq.tsx b/web/src/pages/faq.tsx index 1065edc268..f04ee7e771 100644 --- a/web/src/pages/faq.tsx +++ b/web/src/pages/faq.tsx @@ -1 +1,11 @@ -export { FaqPage as default } from 'src/components/Faq/FaqPage' +import React, { Suspense } from 'react' +import { FaqPage as Page } from 'src/components/Faq/FaqPage' +import { LOADING } from 'src/components/Loading/Loading' + +export default function FaqPage() { + return ( + <Suspense fallback={LOADING}> + <Page /> + </Suspense> + ) +} diff --git a/web/src/pages/index.tsx b/web/src/pages/index.tsx index 7d729c7c93..60adfe5ced 100644 --- a/web/src/pages/index.tsx +++ b/web/src/pages/index.tsx @@ -1 +1,11 @@ -export { HomePage as default } from 'src/components/Home/HomePage' +import React, { Suspense } from 'react' +import { HomePage as Page } from 'src/components/Home/HomePage' +import { LOADING } from 'src/components/Loading/Loading' + +export default function HomePage() { + return ( + <Suspense fallback={LOADING}> + <Page /> + </Suspense> + ) +} diff --git a/web/src/pages/per-country.tsx b/web/src/pages/per-country.tsx index 2c34dd07f5..61e370bdbc 100644 --- a/web/src/pages/per-country.tsx +++ b/web/src/pages/per-country.tsx @@ -1 +1,11 @@ -export { CountryDistributionPage as default } from 'src/components/CountryDistribution/CountryDistributionPage' +import React, { Suspense } from 'react' +import { CountryDistributionPage as Page } from 'src/components/CountryDistribution/CountryDistributionPage' +import { LOADING } from 'src/components/Loading/Loading' + +export default function CountryDistributionPage() { + return ( + <Suspense fallback={LOADING}> + <Page /> + </Suspense> + ) +} diff --git a/web/src/pages/per-variant.tsx b/web/src/pages/per-variant.tsx index b812528324..3b7776e93f 100644 --- a/web/src/pages/per-variant.tsx +++ b/web/src/pages/per-variant.tsx @@ -1 +1,11 @@ -export { ClusterDistributionPage as default } from 'src/components/ClusterDistribution/ClusterDistributionPage' +import React, { Suspense } from 'react' +import { ClusterDistributionPage as Page } from 'src/components/ClusterDistribution/ClusterDistributionPage' +import { LOADING } from 'src/components/Loading/Loading' + +export default function ClusterDistributionPage() { + return ( + <Suspense fallback={LOADING}> + <Page /> + </Suspense> + ) +} diff --git a/web/src/pages/shared-mutations.tsx b/web/src/pages/shared-mutations.tsx index bc8673b5f5..9bfaf524ec 100644 --- a/web/src/pages/shared-mutations.tsx +++ b/web/src/pages/shared-mutations.tsx @@ -1 +1,11 @@ -export { SharedMutationsPage as default } from 'src/components/SharedMutations/SharedMutationsPage' +import React, { Suspense } from 'react' +import { SharedMutationsPage as Page } from 'src/components/SharedMutations/SharedMutationsPage' +import { LOADING } from 'src/components/Loading/Loading' + +export default function SharedMutationsPage() { + return ( + <Suspense fallback={LOADING}> + <Page /> + </Suspense> + ) +} From aa83a4f2796d2642275a376ff0383041800894f3 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 15:57:36 +0100 Subject: [PATCH 11/26] chore: add dev data server --- .../lambda-at-edge/OriginRequest.lambda.js | 42 +++++++++ .../lambda-at-edge/ViewerResponse.lambda.js | 63 ++++++++++++++ infra/find-lambda-at-edge-logs.sh | 12 +++ infra/iam-role-trust-for-lambda-at-edge.json | 15 ++++ infra/s3-cors-permissions.json | 9 ++ .../lambda-at-edge/OriginRequest.lambda.js | 44 ++++++++++ .../lambda-at-edge/ViewerResponse.lambda.js | 70 +++++++-------- web/.env.example | 1 + web/config/next/lib/getEnvVars.ts | 2 + web/config/next/next.config.ts | 2 + web/infra/lambda-at-edge/basicAuth.js | 30 ------- web/package.json | 7 +- web/tools/server/dataServer.ts | 85 +++++++++++++++++++ web/tools/server/server.ts | 81 ++++++++++-------- web/yarn.lock | 82 +++++++++++++++++- 15 files changed, 442 insertions(+), 103 deletions(-) create mode 100644 infra/data/lambda-at-edge/OriginRequest.lambda.js create mode 100644 infra/data/lambda-at-edge/ViewerResponse.lambda.js create mode 100755 infra/find-lambda-at-edge-logs.sh create mode 100644 infra/iam-role-trust-for-lambda-at-edge.json create mode 100644 infra/s3-cors-permissions.json create mode 100644 infra/web/lambda-at-edge/OriginRequest.lambda.js rename web/infra/lambda-at-edge/modifyOutgoingHeaders.lambda.js => infra/web/lambda-at-edge/ViewerResponse.lambda.js (53%) delete mode 100644 web/infra/lambda-at-edge/basicAuth.js create mode 100644 web/tools/server/dataServer.ts diff --git a/infra/data/lambda-at-edge/OriginRequest.lambda.js b/infra/data/lambda-at-edge/OriginRequest.lambda.js new file mode 100644 index 0000000000..0d6e1caee1 --- /dev/null +++ b/infra/data/lambda-at-edge/OriginRequest.lambda.js @@ -0,0 +1,42 @@ +/* eslint-disable prefer-destructuring,sonarjs/no-collapsible-if,unicorn/no-lonely-if */ +// Implements rewrite of non-compressed to .gz URLs using AWS +// Lambda@Edge. This is useful if you have precompressed your files. +// +// Usage: +// Create an AWS Lambda function and attach it to "Origin Request" event of a +// Cloudfront distribution + +const ARCHIVE_EXTS = ['.7z', '.br', '.bz2', '.gz', '.lzma', '.xz', '.zip', '.zst'] + +function getHeader(headers, headerName) { + const header = headers[headerName.toLowerCase()] + if (!header || !header[0] || !header[0].value) { + return undefined + } + return header[0].value +} + +function acceptsEncoding(headers, encoding) { + const ae = getHeader(headers, 'Accept-Encoding') + if (!ae || typeof ae != 'string') { + return false + } + return ae.split(',').some((e) => e.trim().toLowerCase().startsWith(encoding.toLowerCase())) +} + +function handler(event, context, callback) { + const request = event.Records[0].cf.request + const headers = request.headers + + // If not an archive file (which are not precompressed), rewrite the URL to + // get the corresponding .gz file + if (ARCHIVE_EXTS.every((ext) => !request.uri.endsWith(ext))) { + if (acceptsEncoding(headers, 'gzip')) { + request.uri += '.gz' + } + } + + callback(null, request) +} + +exports.handler = handler diff --git a/infra/data/lambda-at-edge/ViewerResponse.lambda.js b/infra/data/lambda-at-edge/ViewerResponse.lambda.js new file mode 100644 index 0000000000..b4b5b0e2bd --- /dev/null +++ b/infra/data/lambda-at-edge/ViewerResponse.lambda.js @@ -0,0 +1,63 @@ +// Adds additional headers to the response, including security headers and CORS. +// Suited for serving data and APIs. +// +// See also: +// - https://securityheaders.com/ +// +// Usage: Create an AWS Lambda@Edge function and attach it to "Viewer Response" +// event of a Cloudfront distribution + +const NEW_HEADERS = { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, OPTIONS', + 'Content-Security-Policy': `default-src 'none'; frame-ancestors 'none'`, + 'Strict-Transport-Security': 'max-age=15768000; includeSubDomains; preload', + 'X-Content-Type-Options': 'nosniff', + 'X-DNS-Prefetch-Control': 'off', + 'X-Download-Options': 'noopen', + 'X-Frame-Options': 'DENY', + 'X-XSS-Protection': '1; mode=block', +} + +function addHeaders(headersObject) { + return Object.fromEntries( + Object.entries(headersObject).map(([header, value]) => [header.toLowerCase(), [{ key: header, value }]]), + ) +} + +const HEADERS_TO_REMOVE = new Set(['server', 'via']) + +function filterHeaders(headers) { + return Object.entries(headers).reduce((result, [key, value]) => { + if (HEADERS_TO_REMOVE.has(key.toLowerCase())) { + return result + } + + if (key.toLowerCase().includes('powered-by')) { + return result + } + + return { ...result, [key.toLowerCase()]: value } + }, {}) +} + +function modifyHeaders({ response }) { + let newHeaders = addHeaders(NEW_HEADERS) + + newHeaders = { + ...response.headers, + ...newHeaders, + } + + newHeaders = filterHeaders(newHeaders) + + return newHeaders +} + +exports.handler = (event, context, callback) => { + const { request, response } = event.Records[0].cf + response.headers = modifyHeaders({ request, response }) + callback(null, response) +} + +exports.modifyHeaders = modifyHeaders diff --git a/infra/find-lambda-at-edge-logs.sh b/infra/find-lambda-at-edge-logs.sh new file mode 100755 index 0000000000..b9c8fe449e --- /dev/null +++ b/infra/find-lambda-at-edge-logs.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Inspired by https://stackoverflow.com/a/54096479/526860 + +FUNCTION_NAME=$1 + +for region in $(aws --output text ec2 describe-regions | cut -f 4); do + for loggroup in $(aws --output text logs describe-log-groups --log-group-name "/aws/lambda/us-east-1.$FUNCTION_NAME" --region $region --query 'logGroups[].logGroupName'); do + printf "$region\tconsole.aws.amazon.com/cloudwatch/home?region=$region#logsV2:log-groups/log-group/\$252Faws\$252Flambda\$252Fus-east-1.$FUNCTION_NAME\n" + done +done diff --git a/infra/iam-role-trust-for-lambda-at-edge.json b/infra/iam-role-trust-for-lambda-at-edge.json new file mode 100644 index 0000000000..e39c731082 --- /dev/null +++ b/infra/iam-role-trust-for-lambda-at-edge.json @@ -0,0 +1,15 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com", + "edgelambda.amazonaws.com" + ] + }, + "Action": "sts:AssumeRole" + } + ] +} diff --git a/infra/s3-cors-permissions.json b/infra/s3-cors-permissions.json new file mode 100644 index 0000000000..d705ef494a --- /dev/null +++ b/infra/s3-cors-permissions.json @@ -0,0 +1,9 @@ +[ + { + "AllowedHeaders": ["*"], + "AllowedMethods": ["GET", "HEAD"], + "AllowedOrigins": ["*"], + "ExposeHeaders": [], + "MaxAgeSeconds": 3000 + } +] diff --git a/infra/web/lambda-at-edge/OriginRequest.lambda.js b/infra/web/lambda-at-edge/OriginRequest.lambda.js new file mode 100644 index 0000000000..902e15aa61 --- /dev/null +++ b/infra/web/lambda-at-edge/OriginRequest.lambda.js @@ -0,0 +1,44 @@ +/* eslint-disable prefer-destructuring */ +// Implements rewrite of non-compressed to .gz or .br URLs using AWS +// Lambda@Edge. This is useful if you have precompressed your files. +// +// Usage: +// Create an AWS Lambda function and attach it to "Origin Request" event of a +// Cloudfront distribution + +const ARCHIVE_EXTS = ['.7z', '.br', '.bz2', '.gz', '.lzma', '.xz', '.zip', '.zst'] + +function getHeader(headers, headerName) { + const header = headers[headerName.toLowerCase()] + if (!header || !header[0] || !header[0].value) { + return undefined + } + return header[0].value +} + +function acceptsEncoding(headers, encoding) { + const ae = getHeader(headers, 'Accept-Encoding') + if (!ae || typeof ae != 'string') { + return false + } + return ae.split(',').some((e) => e.trim().toLowerCase().startsWith(encoding.toLowerCase())) +} + +function handler(event, context, callback) { + const request = event.Records[0].cf.request + const headers = request.headers + + // If not an archive file (which are not precompressed), rewrite the URL to + // get the corresponding .gz file + if (ARCHIVE_EXTS.every((ext) => !request.uri.endsWith(ext))) { + if (acceptsEncoding(headers, 'br')) { + request.uri += '.br' + } else if (acceptsEncoding(headers, 'gzip')) { + request.uri += '.gz' + } + } + + callback(null, request) +} + +exports.handler = handler diff --git a/web/infra/lambda-at-edge/modifyOutgoingHeaders.lambda.js b/infra/web/lambda-at-edge/ViewerResponse.lambda.js similarity index 53% rename from web/infra/lambda-at-edge/modifyOutgoingHeaders.lambda.js rename to infra/web/lambda-at-edge/ViewerResponse.lambda.js index 5c17d84d5c..92bfc51e9e 100644 --- a/web/infra/lambda-at-edge/modifyOutgoingHeaders.lambda.js +++ b/infra/web/lambda-at-edge/ViewerResponse.lambda.js @@ -1,25 +1,21 @@ -// Adds some of the security headers to requests using AWS Lambda@Edge -// See https://securityheaders.com/ +// Adds additional headers to the response, including security headers. +// Suited for websites. // -// Usage: Create an AWS Lambda function and attach this to "Viewer Response" event of a Cloudfront distribution +// See also: +// - https://securityheaders.com/ +// +// Usage: Create an AWS Lambda@Edge function and attach it to "Viewer Response" +// event of a Cloudfront distribution const FEATURE_POLICY = { - 'accelerometer': `'none'`, - 'autoplay': `'none'`, - 'camera': `'none'`, - 'document-domain': `'none'`, - 'encrypted-media': `'none'`, - 'fullscreen': `'none'`, - 'geolocation': `'none'`, - 'gyroscope': `'none'`, - 'magnetometer': `'none'`, - 'microphone': `'none'`, - 'midi': `'none'`, - 'payment': `'none'`, - 'picture-in-picture': `'none'`, - 'sync-xhr': `'none'`, - 'usb': `'none'`, - 'xr-spatial-tracking': `'none'`, + accelerometer: `'none'`, + camera: `'none'`, + geolocation: `'none'`, + gyroscope: `'none'`, + magnetometer: `'none'`, + microphone: `'none'`, + payment: `'none'`, + usb: `'none'`, } function generateFeaturePolicyHeader(featurePolicyObject) { @@ -28,9 +24,26 @@ function generateFeaturePolicyHeader(featurePolicyObject) { .join('; ') } +const PERMISSIONS_POLICY = { + 'accelerometer': '()', + 'camera': '()', + 'geolocation': '()', + 'gyroscope': '()', + 'magnetometer': '()', + 'microphone': '()', + 'payment': '()', + 'usb': '()', + 'interest-cohort': '()', +} + +function generatePermissionsPolicyHeader(permissionsPolicyObject) { + return Object.entries(permissionsPolicyObject) + .map(([policy, value]) => `${policy}=${value}`) + .join(', ') +} + const NEW_HEADERS = { - 'Content-Security-Policy': - "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src *; frame-src https://nextstrain.org", + 'Content-Security-Policy': `default-src 'self' *.pangenome.org; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: *.pangenome.org plausible.io maxcdn.bootstrapcdn.com; style-src 'self' 'unsafe-inline' maxcdn.bootstrapcdn.com fonts.googleapis.com; font-src 'self' maxcdn.bootstrapcdn.com fonts.googleapis.com fonts.gstatic.com;img-src 'self' data:; connect-src *; frame-src 'self' player.vimeo.com`, 'Referrer-Policy': 'no-referrer', 'Strict-Transport-Security': 'max-age=15768000; includeSubDomains; preload', 'X-Content-Type-Options': 'nosniff', @@ -39,6 +52,7 @@ const NEW_HEADERS = { 'X-Frame-Options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'Feature-Policy': generateFeaturePolicyHeader(FEATURE_POLICY), + 'Permissions-Policy': generatePermissionsPolicyHeader(PERMISSIONS_POLICY), } function addHeaders(headersObject) { @@ -63,7 +77,7 @@ function filterHeaders(headers) { }, {}) } -function modifyHeaders({ request, response }) { +function modifyHeaders({ response }) { let newHeaders = addHeaders(NEW_HEADERS) newHeaders = { @@ -73,18 +87,6 @@ function modifyHeaders({ request, response }) { newHeaders = filterHeaders(newHeaders) - const url = request.uri || request.url - if (url.startsWith('/_next')) { - const cacheHeaders = addHeaders({ - 'Cache-Control': 'public,max-age=31536000,immutable', - }) - - newHeaders = { - ...newHeaders, - ...cacheHeaders, - } - } - return newHeaders } diff --git a/web/.env.example b/web/.env.example index 1c97505813..001037118b 100644 --- a/web/.env.example +++ b/web/.env.example @@ -1,4 +1,5 @@ FULL_DOMAIN=autodetect +DATA_ROOT_URL=https://data.master.covariants.org WEB_PORT_DEV=3000 WEB_PORT_PROD=8080 diff --git a/web/config/next/lib/getEnvVars.ts b/web/config/next/lib/getEnvVars.ts index 80104ab604..3c87df5f09 100644 --- a/web/config/next/lib/getEnvVars.ts +++ b/web/config/next/lib/getEnvVars.ts @@ -8,6 +8,7 @@ export function getEnvVars() { const DOMAIN = getDomain() const DOMAIN_STRIPPED = DOMAIN.replace('https://', '').replace('http://', '') const WATCH_POLL = getbool('WATCH_POLL', false) + const DATA_ROOT_URL = getenv('DATA_ROOT_URL') const common = { NODE_ENV, @@ -16,6 +17,7 @@ export function getEnvVars() { DOMAIN, DOMAIN_STRIPPED, WATCH_POLL, + DATA_ROOT_URL, } if (PRODUCTION) { diff --git a/web/config/next/next.config.ts b/web/config/next/next.config.ts index d565e2e243..7124b6102c 100644 --- a/web/config/next/next.config.ts +++ b/web/config/next/next.config.ts @@ -37,6 +37,7 @@ const { DOMAIN, DOMAIN_STRIPPED, WATCH_POLL, + DATA_ROOT_URL, } = getEnvVars() const BRANCH_NAME = getGitBranch() @@ -51,6 +52,7 @@ const clientEnv = { COMMIT_HASH: getGitCommitHash(), DOMAIN, DOMAIN_STRIPPED, + DATA_ROOT_URL, } const nextConfig: NextConfig = { diff --git a/web/infra/lambda-at-edge/basicAuth.js b/web/infra/lambda-at-edge/basicAuth.js deleted file mode 100644 index c10e0d2572..0000000000 --- a/web/infra/lambda-at-edge/basicAuth.js +++ /dev/null @@ -1,30 +0,0 @@ -// Implements basic authentication using AWS Lambda@Edge -// This is insecure due to hardcoded credentials and is only suited for blocking crawlers -// -// Usage: Create an AWS Lambda function and attach this to "Viewer Request" event of a Cloudfront distribution - -const USERNAME = 'nextstrain' -const PASSWORD = 'nextstrain' -const BASIC_AUTH_STRING = `Basic ${Buffer.from(`${USERNAME}:${PASSWORD}`).toString('base64')}` - -exports.handler = (event, context, callback) => { - // Get request and request headers - const request = event.Records[0].cf.request - const headers = request.headers - - // Require Basic authentication - if (typeof headers.authorization == 'undefined' || headers.authorization[0].value != BASIC_AUTH_STRING) { - const body = 'Unauthorized' - const response = { - status: '401', - statusDescription: 'Unauthorized', - body, - headers: { - 'www-authenticate': [{ key: 'WWW-Authenticate', value: 'Basic' }], - }, - } - callback(null, response) - } - - callback(null, request) -} diff --git a/web/package.json b/web/package.json index 35d2f92f9d..c1f07c0e18 100644 --- a/web/package.json +++ b/web/package.json @@ -54,7 +54,8 @@ "run:node": "cross-env NODE_ENV=development BABEL_ENV=development babel-node --config-file \"./babel-node.config.js\" --extensions '.ts'", "run:node:prod": "cross-env NODE_ENV=production BABEL_ENV=production babel-node --config-file \"./babel-node.config.js\" --extensions '.ts'", "monkey-patch": "yarn run:node tools/monkeyPatch.ts", - "stills": "yarn run:node tools/generateStillImages.ts" + "stills": "yarn run:node tools/generateStillImages.ts", + "serve:data": "babel-node --config-file \"./babel-node.config.js\" --extensions \".ts\" ./tools/server/dataServer.ts" }, "dependencies": { "@mdx-js/react": "1.6.22", @@ -127,6 +128,7 @@ "@testing-library/react": "13.4.0", "@testing-library/user-event": "14.4.3", "@types/classnames": "2.3.0", + "@types/compression": "1.7.2", "@types/copy-webpack-plugin": "8.0.1", "@types/express": "4.17.14", "@types/extra-watch-webpack-plugin": "1.0.3", @@ -138,6 +140,7 @@ "@types/lodash-webpack-plugin": "0.11.6", "@types/luxon": "3.1.0", "@types/mdx-js__react": "1.5.5", + "@types/morgan": "1.9.3", "@types/node": "18.11.11", "@types/papaparse": "5.3.5", "@types/react": "18.0.26", @@ -156,6 +159,7 @@ "allow-methods": "4.1.2", "babel-plugin-parameter-decorator": "1.0.16", "babel-plugin-transform-typescript-metadata": "0.3.2", + "compression": "1.7.4", "copy-webpack-plugin": "11.0.0", "cross-env": "7.0.3", "css-loader": "6.7.2", @@ -213,6 +217,7 @@ "jest-watch-typeahead": "2.2.1", "json-loader": "0.5.7", "lodash-webpack-plugin": "0.11.6", + "morgan": "1.10.0", "next-compose-plugins": "2.2.1", "next-transpile-modules": "10.0.0", "nodemon": "2.0.20", diff --git a/web/tools/server/dataServer.ts b/web/tools/server/dataServer.ts new file mode 100644 index 0000000000..00f61927e0 --- /dev/null +++ b/web/tools/server/dataServer.ts @@ -0,0 +1,85 @@ +/* eslint-disable unicorn/no-process-exit,unicorn/prefer-module */ +/** + * Serves production build artifacts. + * + * /!\ Only for development purposes, e.g. verifying that production build runs + * on developer's machine. + * + * This server is very naive, slow and insecure. Real-world deployments should + * use either a 3rd-party static hosting or a robust static server, such as + * Nginx, instead. + * + */ + +import type { ServerResponse } from 'http' +import path from 'path' +import express, { Request, Response } from 'express' +import allowMethods from 'allow-methods' +import compression from 'compression' +import morgan from 'morgan' +import expressStaticGzip from 'express-static-gzip' +import { modifyHeaders } from '../../../infra/data/lambda-at-edge/ViewerResponse.lambda' + +export interface NewHeaders { + [key: string]: { key: string; value: string }[] +} + +const expressStaticGzipOptions = { enableBrotli: true, serveStatic: { extensions: ['html'] } } + +const cacheNone = { + ...expressStaticGzipOptions, + serveStatic: { + ...expressStaticGzipOptions.serveStatic, + setHeaders: (res: ServerResponse) => res.setHeader('Cache-Control', 'no-cache'), + }, +} + +function notFound(req: Request, res: Response) { + res.status(404) + res.format({ + json() { + res.json({ error: 'Not found' }) + }, + default() { + res.type('txt').send('Not found') + }, + }) +} + +function setHeaders(req: express.Request, res: express.Response, next: express.NextFunction) { + const newHeaders = modifyHeaders({ response: res }) as NewHeaders + Object.entries(newHeaders).forEach(([header, arr]) => { + const [{ value }] = arr + if (header.toLowerCase() === 'strict-transport-security') { + return + } + res.set({ [header.toLowerCase()]: value }) + }) + next() +} + +function main() { + const app = express() + + if (process.argv.length < 3) { + console.error('Error: Positional argument is required: path to a data directory') + console.error(`Usage:\n ${process.argv[0]} ${path.basename(__filename)} <path_to_data_dir>`) + process.exit(0) + } + + const dataDir = process.argv[2] + + app.use(morgan('dev')) + app.use(compression()) + app.use(allowMethods(['GET', 'HEAD'])) + app.use(setHeaders) + app.use(expressStaticGzip(dataDir, cacheNone)) + app.use(notFound) + + const port = '27722' + app.listen(port, () => { + console.info(`Server is listening on port ${port}`) + }) +} + +main() diff --git a/web/tools/server/server.ts b/web/tools/server/server.ts index c76b3c4cc2..607c067781 100644 --- a/web/tools/server/server.ts +++ b/web/tools/server/server.ts @@ -10,18 +10,16 @@ * */ -import { ServerResponse } from 'http' +import type { ServerResponse } from 'http' import path from 'path' - -import express from 'express' - +import express, { Request, Response } from 'express' import allowMethods from 'allow-methods' +import compression from 'compression' +import morgan from 'morgan' import expressStaticGzip from 'express-static-gzip' - import { getenv } from '../../lib/getenv' import { findModuleRoot } from '../../lib/findModuleRoot' - -import { modifyHeaders } from '../../infra/lambda-at-edge/modifyOutgoingHeaders.lambda' +import { modifyHeaders } from '../../../infra/web/lambda-at-edge/ViewerResponse.lambda' const { moduleRoot } = findModuleRoot() @@ -32,43 +30,58 @@ export interface NewHeaders { [key: string]: { key: string; value: string }[] } -function main() { - const app = express() +const expressStaticGzipOptions = { enableBrotli: true, serveStatic: { extensions: ['html'] } } - const expressStaticGzipOptions = { enableBrotli: true, serveStatic: { extensions: ['html'] } } +const cacheNone = { + ...expressStaticGzipOptions, + serveStatic: { + ...expressStaticGzipOptions.serveStatic, + setHeaders: (res: ServerResponse) => res.setHeader('Cache-Control', 'no-cache'), + }, +} +const cacheOneYear = { + ...expressStaticGzipOptions, + serveStatic: { + ...expressStaticGzipOptions.serveStatic, + maxAge: '31556952000', + immutable: true, + }, +} - const cacheNone = { - ...expressStaticGzipOptions, - serveStatic: { - ...expressStaticGzipOptions.serveStatic, - setHeaders: (res: ServerResponse) => res.setHeader('Cache-Control', 'no-cache'), +function notFound(req: Request, res: Response) { + res.status(404) + res.format({ + json() { + res.json({ error: 'Not found' }) }, - } - const cacheOneYear = { - ...expressStaticGzipOptions, - serveStatic: { - ...expressStaticGzipOptions.serveStatic, - maxAge: '31556952000', - immutable: true, + default() { + res.type('txt').send('Not found') }, - } + }) +} - app.use((req: express.Request, res: express.Response, next: express.NextFunction) => { - const newHeaders = modifyHeaders({ request: req, response: res }) as NewHeaders - Object.entries(newHeaders).forEach(([header, arr]) => { - const [{ value }] = arr - if (header.toLowerCase() === 'strict-transport-security') { - return - } - res.set({ [header.toLowerCase()]: value }) - }) - next() +function setHeaders(req: express.Request, res: express.Response, next: express.NextFunction) { + const newHeaders = modifyHeaders({ response: res }) as NewHeaders + Object.entries(newHeaders).forEach(([header, arr]) => { + const [{ value }] = arr + if (header.toLowerCase() === 'strict-transport-security') { + return + } + res.set({ [header.toLowerCase()]: value }) }) + next() +} + +function main() { + const app = express() + app.use(morgan('dev')) + app.use(compression()) app.use(allowMethods(['GET', 'HEAD'])) - // app.use(history()) + app.use(setHeaders) app.use('/_next', expressStaticGzip(nextDir, cacheOneYear)) app.get('*', expressStaticGzip(buildDir, cacheNone)) + app.use(notFound) const port = getenv('WEB_PORT_PROD') app.listen(port, () => { diff --git a/web/yarn.lock b/web/yarn.lock index b006dfce49..883bf27d17 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2271,6 +2271,13 @@ dependencies: classnames "*" +"@types/compression@1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@types/compression/-/compression-1.7.2.tgz#7cc1cdb01b4730eea284615a68fc70a2cdfd5e71" + integrity sha512-lwEL4M/uAGWngWFLSG87ZDr2kLrbuR8p7X+QZB1OQlT+qkHsCPDVFnHPyXf4Vyl4yDDorNY+mAhosxkCvppatg== + dependencies: + "@types/express" "*" + "@types/connect@*": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -2358,7 +2365,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@4.17.14": +"@types/express@*", "@types/express@4.17.14": version "4.17.14" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== @@ -2505,6 +2512,13 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== +"@types/morgan@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.9.3.tgz#ae04180dff02c437312bc0cfb1e2960086b2f540" + integrity sha512-BiLcfVqGBZCyNCnCH3F4o2GmDLrpy0HeBVnNlyZG4fo88ZiE9SoiBe3C+2ezuwbjlEyT+PDZ17//TAlRxAn75Q== + dependencies: + "@types/node" "*" + "@types/node@*", "@types/node@18.11.11": version "18.11.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" @@ -2997,7 +3011,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.8: +accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -3530,6 +3544,13 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +basic-auth@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -3629,6 +3650,11 @@ builtin-modules@^3.3.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -3873,6 +3899,26 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -4352,7 +4398,7 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@2.0.0: +depd@2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -7374,7 +7420,7 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -7420,6 +7466,17 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +morgan@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== + dependencies: + basic-auth "~2.0.1" + debug "2.6.9" + depd "~2.0.0" + on-finished "~2.3.0" + on-headers "~1.0.2" + mout@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/mout/-/mout-0.11.1.tgz#ba3611df5f0e5b1ffbfd01166b8f02d1f5fa2b99" @@ -7749,6 +7806,18 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -9066,6 +9135,11 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" From 6eadd004d8150fce33bee79913939365f05fcb69 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 16:29:02 +0100 Subject: [PATCH 12/26] refactor: fetch clusters.json for sidebar --- .../ClusterButtonPanel/ClusterButtonPanel.tsx | 33 ++++++++++++------- web/src/io/getClusters.ts | 23 +++++++------ web/src/io/getDataRootUrl.ts | 9 +++++ 3 files changed, 41 insertions(+), 24 deletions(-) create mode 100644 web/src/io/getDataRootUrl.ts diff --git a/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx b/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx index d300a6ae05..3cecd8eaba 100644 --- a/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx +++ b/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx @@ -1,13 +1,9 @@ -import React from 'react' - +import { groupBy, isNil } from 'lodash' +import React, { useMemo } from 'react' import { Card, CardBody, CardHeader, Row } from 'reactstrap' -import { ClusterButtonGroup } from 'src/components/ClusterButtonPanel/ClusterButtonGroup' - -import { ClusterDatum, getClusters, getClustersGrouped } from 'src/io/getClusters' import styled from 'styled-components' - -const clusters = getClusters().filter((cluster) => !cluster.has_no_page) -const clustersGrouped = getClustersGrouped(clusters) +import { ClusterDatum, useClusters } from 'src/io/getClusters' +import { ClusterButtonGroup } from 'src/components/ClusterButtonPanel/ClusterButtonGroup' const ClustersRow = styled(Row)` display: flex; @@ -46,16 +42,29 @@ export interface ClusterPanelProps { } export function ClusterButtonPanel({ currentCluster, className }: ClusterPanelProps) { - return ( - <ClustersRow noGutters className={className}> - {Object.entries(clustersGrouped).map(([clusterType, clusterGroup]) => ( + const clusters = useClusters() + + const clustersGrouped = useMemo(() => { + const clustersWithType = clusters.filter((cluster) => !isNil(cluster.type)) + return groupBy(clustersWithType, 'type') + }, [clusters]) + + const clusterButtons = useMemo( + () => + Object.entries(clustersGrouped).map(([clusterType, clusterGroup]) => ( <ClusterGroupCard key={clusterType}> <ClusterGroupHeader>{clusterType}</ClusterGroupHeader> <ClusterGroupBody> <ClusterButtonGroup clusterGroup={clusterGroup} currentCluster={currentCluster} /> </ClusterGroupBody> </ClusterGroupCard> - ))} + )), + [clustersGrouped, currentCluster], + ) + + return ( + <ClustersRow noGutters className={className}> + {clusterButtons} </ClustersRow> ) } diff --git a/web/src/io/getClusters.ts b/web/src/io/getClusters.ts index 052404233d..15d3265f5a 100644 --- a/web/src/io/getClusters.ts +++ b/web/src/io/getClusters.ts @@ -1,11 +1,14 @@ /* eslint-disable camelcase */ -import { groupBy, isNil } from 'lodash' import { notUndefinedOrNull } from 'src/helpers/notUndefined' import type { Mutation } from 'src/types' import type { Cluster } from 'src/state/Clusters' import { theme } from 'src/theme' +import { useAxiosQuery } from 'src/hooks/useAxiosQuery' +import urljoin from 'url-join' +import { getDataRootUrl } from 'src/io/getDataRootUrl' + import clustersJson from 'src/../data/clusters.json' export const CLUSTER_NAME_OTHERS = 'others' as const @@ -33,12 +36,15 @@ export type ClusterDatum = { has_no_page?: boolean } -export function getClusters(): ClusterDatum[] { - return clustersJson.clusters +export function useClusters() { + const { clusters } = useAxiosQuery<{ clusters: ClusterDatum[] }>(urljoin(getDataRootUrl(), 'clusters.json')) + return clusters.filter((cluster) => !cluster.has_no_page) } -export function getDefaultCluster(): ClusterDatum { - return getClusters()[0] +/** ---------------- Functions below this line should be removed --------- */ + +export function getClusters(): ClusterDatum[] { + return clustersJson.clusters } export function getClusterNames() { @@ -74,13 +80,6 @@ export function getClusterColor(clusterName: string) { return found ? found.col : theme.clusters.color.unknown } -export type ClusterDataGrouped = Record<string, ClusterDatum[]> - -export function getClustersGrouped(clusters: ClusterDatum[]): ClusterDataGrouped { - const clustersWithType = clusters.filter((cluster) => !isNil(cluster.type)) - return groupBy(clustersWithType, 'type') -} - export function sortClusters(clusters: Cluster[]): Cluster[] { const clusterNames = getClusterNames() return clusterNames.reduce((result, name) => { diff --git a/web/src/io/getDataRootUrl.ts b/web/src/io/getDataRootUrl.ts new file mode 100644 index 0000000000..bc46d8f45f --- /dev/null +++ b/web/src/io/getDataRootUrl.ts @@ -0,0 +1,9 @@ +import { ErrorInternal } from 'src/helpers/ErrorInternal' + +export function getDataRootUrl() { + const DATA_ROOT_URL = process.env.DATA_ROOT_URL // eslint-disable-line prefer-destructuring + if (!DATA_ROOT_URL) { + throw new ErrorInternal('The required environment variable DATA_ROOT_URL is not set') + } + return DATA_ROOT_URL +} From eaf725ddd8810eb201352ed112748bf48808d5e5 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Thu, 8 Dec 2022 16:40:26 +0100 Subject: [PATCH 13/26] refactor: fetch clusters.json for mutation badge --- web/src/components/Common/MutationBadge.tsx | 35 ++++----------------- web/src/io/getClusters.ts | 14 +++++++++ 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/web/src/components/Common/MutationBadge.tsx b/web/src/components/Common/MutationBadge.tsx index 8edc3fb8e5..16164719cc 100644 --- a/web/src/components/Common/MutationBadge.tsx +++ b/web/src/components/Common/MutationBadge.tsx @@ -1,4 +1,3 @@ -/* eslint-disable camelcase */ import React, { useMemo } from 'react' import { get } from 'lodash' @@ -8,7 +7,6 @@ import styled from 'styled-components' import type { Mutation, MutationColors } from 'src/types' import { theme } from 'src/theme' import { AMINOACID_COLORS, CLADE_COLORS, GENE_COLORS, NUCLEOTIDE_COLORS } from 'src/colors' -import { getClusterNames, getClusters } from 'src/io/getClusters' import { LinkSmart } from 'src/components/Link/LinkSmart' import { parseAminoacidMutation } from 'src/components/Common/parseAminoacidMutation' import { parseNucleotideMutation } from 'src/components/Common/parseNucleotideMutation' @@ -16,9 +14,7 @@ import { formatMutation } from 'src/components/Common/formatMutation' import { AMINOACID_NAMES, GENE_NAMES, GREEK_ALPHABET, NUCELOTIDE_NAMES } from 'src/names' import { colorHash } from 'src/helpers/colorHash' import { rainbow } from 'src/helpers/colorRainbow' - -const clusters = getClusters() -const clusterNames = getClusterNames() +import { useClusterNames, useClusterUrl } from 'src/io/getClusters' const DEFAULT_COLOR = theme.gray700 const DEFAULT_TEXT_COLOR = theme.gray100 @@ -64,10 +60,6 @@ export const WhoText = styled.span<{ $color: string }>` background-color: ${(props) => props.$color}; ` -export const ColoredComponent = styled.span<{ $color: string }>` - background-color: ${(props) => props.$color}; -` - export const ParentText = styled.span<{ $backgroundColor: string; $color: string }>` padding-top: 1px; padding-bottom: 1px; @@ -115,23 +107,6 @@ export function aminoacidMutationFromStringMaybe(mutation: Mutation | string): M return mutation } -export function formatMutationMaybe(mutation: Mutation | string) { - if (typeof mutation === 'string') { - return mutation - } - return formatMutation(mutation) -} - -export function formatVariantUrl(mutation: string) { - const cluster = clusters.find(({ display_name }) => display_name === mutation) - if (!cluster) { - console.warn(`Variant not recognized: ${mutation}. Known variants: ${clusterNames.join(', ')}`) - return undefined - } - - return `/variants/${cluster.build_name}` -} - export interface MutationBadgeProps { prefix?: string mutation: Mutation @@ -266,8 +241,10 @@ export interface VariantLinkBadgeProps { } export function VariantLinkBadge({ name, href, prefix }: VariantLinkBadgeProps) { + const clusterNames = useClusterNames() const { mutationObj, mutationStr } = useMemo(() => variantToObjectAndString(name), [name]) - const url = useMemo(() => href ?? formatVariantUrl(mutationStr), [href, mutationStr]) + const clusterUrl = useClusterUrl(mutationStr) + const url = useMemo(() => href ?? clusterUrl, [clusterUrl, href]) if (!mutationObj) { return <span className="text-danger">{`VariantLinkBadge: Invalid mutation: ${JSON.stringify(name)}`}</span> @@ -279,7 +256,7 @@ export function VariantLinkBadge({ name, href, prefix }: VariantLinkBadgeProps) { // prettier-ignore `VariantLinkBadge: Variant not recognized: ${JSON.stringify(name)}.` + - `Known variants: ${clusterNames.join(', ')}` + `Known variants: ${clusterNames.join(", ")}` } </span> ) @@ -302,7 +279,7 @@ export interface LineageLinkBadgeProps { export function LineageLinkBadge({ name, href, prefix, report }: LineageLinkBadgeProps) { const url = useMemo( // prettier-ignore - () => (href ?? (report ? `https://cov-lineages.org/global_report_${name}.html` : '')), + () => (href ?? (report ? `https://cov-lineages.org/global_report_${name}.html` : "")), [href, report, name], ) const tooltip = useMemo(() => `Pango Lineage ${name}`, [name]) diff --git a/web/src/io/getClusters.ts b/web/src/io/getClusters.ts index 15d3265f5a..86b1a92796 100644 --- a/web/src/io/getClusters.ts +++ b/web/src/io/getClusters.ts @@ -41,6 +41,20 @@ export function useClusters() { return clusters.filter((cluster) => !cluster.has_no_page) } +export function useClusterNames() { + const clusters = useClusters() + return clusters.map((cluster) => cluster.display_name) +} + +export function useClusterUrl(displayName: string) { + const clusters = useClusters() + const cluster = clusters.find(({ display_name }) => display_name === displayName) + if (!cluster) { + return undefined + } + return `/variants/${cluster.build_name}` +} + /** ---------------- Functions below this line should be removed --------- */ export function getClusters(): ClusterDatum[] { From d5cf058acdfa7f5fb9c7599875b3955879b3ff10 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov <ivan.aksamentov@gmail.com> Date: Tue, 13 Dec 2022 14:11:26 +0100 Subject: [PATCH 14/26] feat: delete everything and start over --- content/Home.md | 32 ++- .../AcknowledgementEpiIsl.tsx | 168 ------------ .../Acknowledgements/AcknowledgementsCard.tsx | 95 ------- .../AcknowledgementsContent.md | 4 - .../Acknowledgements/AcknowledgementsPage.tsx | 57 ---- web/src/components/Cases/CasesPage.tsx | 154 ----------- web/src/components/Cases/CasesPlot.tsx | 117 -------- web/src/components/Cases/CasesPlotCard.tsx | 49 ---- web/src/components/Cases/CasesPlotTooltip.tsx | 103 ------- .../ClusterButtonPanel/ClusterButton.tsx | 5 +- .../ClusterButtonPanel/ClusterButtonGroup.tsx | 1 - .../ClusterDistributionPage.tsx | 257 ------------------ .../ClusterDistributionPlot.tsx | 142 ---------- .../ClusterDistributionPlotCard.tsx | 50 ---- .../ClusterDistributionPlotTooltip.tsx | 126 --------- web/src/components/Common/Card.tsx | 48 ---- web/src/components/Common/CardCollapsible.tsx | 47 ---- .../Common/CardCollapsibleUncontrolled.tsx | 24 -- web/src/components/Common/ChangelogButton.tsx | 248 ----------------- web/src/components/Common/ChartContainer.tsx | 35 --- .../Common/ClusterSidebarLayout.tsx | 8 - web/src/components/Common/ColCustom.tsx | 16 -- web/src/components/Common/ColoredBox.tsx | 11 - web/src/components/Common/ColoredCircle.tsx | 11 - .../Common/ColoredHorizontalLineIcon.tsx | 37 --- web/src/components/Common/CountryFlag.tsx | 79 ------ web/src/components/Common/Dropdown.tsx | 51 ---- web/src/components/Common/DropdownOption.ts | 12 - web/src/components/Common/FadeIn.tsx | 35 --- web/src/components/Common/FlagWrapper.tsx | 12 - web/src/components/Common/GifPlayer.tsx | 5 - web/src/components/Common/LastUpdated.tsx | 22 -- .../components/Common/LinkOpenInNewTab.tsx | 41 --- web/src/components/Common/MdxWrapper.tsx | 16 -- web/src/components/Common/NameTable.tsx | 127 --------- web/src/components/Common/NextstrainLogo.tsx | 53 ---- web/src/components/Common/PageHeading.tsx | 16 -- web/src/components/Common/PlotCardTitle.tsx | 6 - web/src/components/Common/PlotLayout.tsx | 33 --- web/src/components/Common/PlotPlaceholder.tsx | 28 -- web/src/components/Common/PoweredBy.tsx | 94 ------- web/src/components/Common/SeoApp.tsx | 54 ---- web/src/components/Common/SharingPanel.tsx | 168 ------------ web/src/components/Common/TableSlim.tsx | 43 --- web/src/components/Common/TeamCredits.tsx | 121 --------- .../Common/TeamCreditsContributor.tsx | 63 ----- web/src/components/Common/Toggle.tsx | 57 ---- web/src/components/Common/ToggleTwoLabels.tsx | 85 ------ web/src/components/Common/USStateCode.tsx | 99 ------- .../__tests__/parseAminoacidMutation.test.ts | 81 ------ .../__tests__/parseNucleotideMutation.test.ts | 59 ---- .../Common/__tests__/parseVariant.test.ts | 51 ---- .../CountryDistributionPage.tsx | 192 ------------- .../CountryDistributionPlot.tsx | 115 -------- .../CountryDistributionPlotCard.tsx | 54 ---- .../CountryDistributionPlotTooltip.tsx | 103 ------- .../CountryDistribution/RegionSwitcher.tsx | 74 ----- .../DistributionSidebar/ClusterFilters.tsx | 106 -------- .../DistributionSidebar/CountryFilters.tsx | 204 -------------- .../DistributionSidebar.tsx | 120 -------- web/src/components/Faq/FaqPage.tsx | 27 -- web/src/components/Home/HomePage.tsx | 9 +- web/src/components/Layout/Footer.tsx | 24 -- web/src/components/Layout/Layout.tsx | 13 +- web/src/components/Layout/NavigationLogo.tsx | 7 - .../MutationCountsSummaryCard.tsx | 152 ----------- .../SharedMutations/SharedMutations.tsx | 134 --------- .../SharedMutations/SharedMutationsPage.tsx | 50 ---- .../components/Variants/AquariaLinksCard.tsx | 70 ----- web/src/components/Variants/CladeSchema.tsx | 41 --- .../Variants/ClusterContentLoading.tsx | 35 --- .../components/Variants/DefiningMutations.tsx | 106 -------- web/src/components/Variants/PlotCard.tsx | 68 ----- web/src/components/Variants/ProteinCard.tsx | 145 ---------- web/src/components/Variants/VariantTitle.tsx | 42 --- web/src/components/Variants/VariantsPage.tsx | 162 ----------- .../components/Variants/VariantsPageIndex.tsx | 32 --- web/src/io/getClusterContent.ts | 6 - web/src/io/getClusters.ts | 61 +---- web/src/io/getContributors.ts | 5 - web/src/io/getCountryColor.ts | 27 -- web/src/io/getLastUpdatedDate.ts | 15 - web/src/io/getMutationComparison.ts | 27 -- web/src/io/getMutationCounts.ts | 59 ---- web/src/io/getNameTable.ts | 19 -- web/src/io/getParams.ts | 36 --- web/src/io/getPerClusterData.ts | 98 ------- web/src/io/getPerCountryCasesData.ts | 137 ---------- web/src/io/getPerCountryData.ts | 125 --------- web/src/io/getRegionContent.ts | 6 - web/src/io/parseCsv.ts | 28 -- web/src/pages/_app.tsx | 65 +---- web/src/pages/acknowledgements.tsx | 11 - web/src/pages/cases.tsx | 11 - web/src/pages/debug-badges.tsx | 77 ------ web/src/pages/faq.tsx | 11 - web/src/pages/per-country.tsx | 11 - web/src/pages/per-variant.tsx | 11 - web/src/pages/shared-mutations.tsx | 11 - web/src/pages/variants/[clusterName].tsx | 28 -- web/src/pages/variants/index.tsx | 1 - web/src/state/Clusters.ts | 97 ------- web/src/state/ClustersForCaseData.ts | 72 ----- web/src/state/Places.ts | 225 --------------- web/src/state/PlacesForCaseData.ts | 151 ---------- web/src/state/TooltipSort.ts | 14 - 106 files changed, 29 insertions(+), 6857 deletions(-) delete mode 100644 web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx delete mode 100644 web/src/components/Acknowledgements/AcknowledgementsCard.tsx delete mode 100644 web/src/components/Acknowledgements/AcknowledgementsContent.md delete mode 100644 web/src/components/Acknowledgements/AcknowledgementsPage.tsx delete mode 100644 web/src/components/Cases/CasesPage.tsx delete mode 100644 web/src/components/Cases/CasesPlot.tsx delete mode 100644 web/src/components/Cases/CasesPlotCard.tsx delete mode 100644 web/src/components/Cases/CasesPlotTooltip.tsx delete mode 100644 web/src/components/ClusterDistribution/ClusterDistributionPage.tsx delete mode 100644 web/src/components/ClusterDistribution/ClusterDistributionPlot.tsx delete mode 100644 web/src/components/ClusterDistribution/ClusterDistributionPlotCard.tsx delete mode 100644 web/src/components/ClusterDistribution/ClusterDistributionPlotTooltip.tsx delete mode 100644 web/src/components/Common/Card.tsx delete mode 100644 web/src/components/Common/CardCollapsible.tsx delete mode 100644 web/src/components/Common/CardCollapsibleUncontrolled.tsx delete mode 100644 web/src/components/Common/ChangelogButton.tsx delete mode 100644 web/src/components/Common/ChartContainer.tsx delete mode 100644 web/src/components/Common/ClusterSidebarLayout.tsx delete mode 100644 web/src/components/Common/ColCustom.tsx delete mode 100644 web/src/components/Common/ColoredBox.tsx delete mode 100644 web/src/components/Common/ColoredCircle.tsx delete mode 100644 web/src/components/Common/ColoredHorizontalLineIcon.tsx delete mode 100644 web/src/components/Common/CountryFlag.tsx delete mode 100644 web/src/components/Common/Dropdown.tsx delete mode 100644 web/src/components/Common/DropdownOption.ts delete mode 100644 web/src/components/Common/FadeIn.tsx delete mode 100644 web/src/components/Common/FlagWrapper.tsx delete mode 100644 web/src/components/Common/GifPlayer.tsx delete mode 100644 web/src/components/Common/LastUpdated.tsx delete mode 100644 web/src/components/Common/LinkOpenInNewTab.tsx delete mode 100644 web/src/components/Common/MdxWrapper.tsx delete mode 100644 web/src/components/Common/NameTable.tsx delete mode 100644 web/src/components/Common/NextstrainLogo.tsx delete mode 100644 web/src/components/Common/PageHeading.tsx delete mode 100644 web/src/components/Common/PlotCardTitle.tsx delete mode 100644 web/src/components/Common/PlotLayout.tsx delete mode 100644 web/src/components/Common/PlotPlaceholder.tsx delete mode 100644 web/src/components/Common/PoweredBy.tsx delete mode 100644 web/src/components/Common/SeoApp.tsx delete mode 100644 web/src/components/Common/SharingPanel.tsx delete mode 100644 web/src/components/Common/TableSlim.tsx delete mode 100644 web/src/components/Common/TeamCredits.tsx delete mode 100644 web/src/components/Common/TeamCreditsContributor.tsx delete mode 100644 web/src/components/Common/Toggle.tsx delete mode 100644 web/src/components/Common/ToggleTwoLabels.tsx delete mode 100644 web/src/components/Common/USStateCode.tsx delete mode 100644 web/src/components/Common/__tests__/parseAminoacidMutation.test.ts delete mode 100644 web/src/components/Common/__tests__/parseNucleotideMutation.test.ts delete mode 100644 web/src/components/Common/__tests__/parseVariant.test.ts delete mode 100644 web/src/components/CountryDistribution/CountryDistributionPage.tsx delete mode 100644 web/src/components/CountryDistribution/CountryDistributionPlot.tsx delete mode 100644 web/src/components/CountryDistribution/CountryDistributionPlotCard.tsx delete mode 100644 web/src/components/CountryDistribution/CountryDistributionPlotTooltip.tsx delete mode 100644 web/src/components/CountryDistribution/RegionSwitcher.tsx delete mode 100644 web/src/components/DistributionSidebar/ClusterFilters.tsx delete mode 100644 web/src/components/DistributionSidebar/CountryFilters.tsx delete mode 100644 web/src/components/DistributionSidebar/DistributionSidebar.tsx delete mode 100644 web/src/components/Faq/FaqPage.tsx delete mode 100644 web/src/components/Layout/NavigationLogo.tsx delete mode 100644 web/src/components/MutationCounts/MutationCountsSummaryCard.tsx delete mode 100644 web/src/components/SharedMutations/SharedMutations.tsx delete mode 100644 web/src/components/SharedMutations/SharedMutationsPage.tsx delete mode 100644 web/src/components/Variants/AquariaLinksCard.tsx delete mode 100644 web/src/components/Variants/CladeSchema.tsx delete mode 100644 web/src/components/Variants/ClusterContentLoading.tsx delete mode 100644 web/src/components/Variants/DefiningMutations.tsx delete mode 100644 web/src/components/Variants/PlotCard.tsx delete mode 100644 web/src/components/Variants/ProteinCard.tsx delete mode 100644 web/src/components/Variants/VariantTitle.tsx delete mode 100644 web/src/components/Variants/VariantsPage.tsx delete mode 100644 web/src/components/Variants/VariantsPageIndex.tsx delete mode 100644 web/src/io/getClusterContent.ts delete mode 100644 web/src/io/getContributors.ts delete mode 100644 web/src/io/getCountryColor.ts delete mode 100644 web/src/io/getLastUpdatedDate.ts delete mode 100644 web/src/io/getMutationComparison.ts delete mode 100644 web/src/io/getMutationCounts.ts delete mode 100644 web/src/io/getNameTable.ts delete mode 100644 web/src/io/getParams.ts delete mode 100644 web/src/io/getPerClusterData.ts delete mode 100644 web/src/io/getPerCountryCasesData.ts delete mode 100644 web/src/io/getPerCountryData.ts delete mode 100644 web/src/io/getRegionContent.ts delete mode 100644 web/src/io/parseCsv.ts delete mode 100644 web/src/pages/acknowledgements.tsx delete mode 100644 web/src/pages/cases.tsx delete mode 100644 web/src/pages/debug-badges.tsx delete mode 100644 web/src/pages/faq.tsx delete mode 100644 web/src/pages/per-country.tsx delete mode 100644 web/src/pages/per-variant.tsx delete mode 100644 web/src/pages/shared-mutations.tsx delete mode 100644 web/src/pages/variants/[clusterName].tsx delete mode 100644 web/src/pages/variants/index.tsx delete mode 100644 web/src/state/ClustersForCaseData.ts delete mode 100644 web/src/state/Places.ts delete mode 100644 web/src/state/PlacesForCaseData.ts delete mode 100644 web/src/state/TooltipSort.ts diff --git a/content/Home.md b/content/Home.md index ed28581c3d..9eb4e9d4d0 100644 --- a/content/Home.md +++ b/content/Home.md @@ -1,32 +1,34 @@ -import { HomeImages } from 'src/components/Home/HomeImages' import { Link } from 'src/components/Link/Link' import { LinkExternal } from 'src/components/Link/LinkExternal' -import { NameTable } from 'src/components/Common/NameTable' -import { CladeSchema } from 'src/components/Variants/CladeSchema.tsx' **Click on a variant button to start exploring!** -CoVariants provides an overview of SARS-CoV-2 variants and mutations that are of interest. Here, you can find out what mutations define a variant, what impact they might have (with links to papers and resources), where variants are found, and see the variants in Nextstrain builds! +CoVariants provides an overview of SARS-CoV-2 variants and mutations that are of interest. Here, you can find out what +mutations define a variant, what impact they might have (with links to papers and resources), where variants are found, +and see the variants in Nextstrain builds! -Click one of the colored buttons to look at a particular [Variant](/variants) - to read information, see graphs and the protein structure, and link out to focused Nextstrain builds. -To look at many variants at once, check out the [Per Variant](/per-variant) and [Per Country](/per-country) pages, where you can view a lot of data in the same place, and compare variants and countries! - -<HomeImages/> +Click one of the colored buttons to look at a particular [Variant](/variants) - to read information, see graphs and the +protein structure, and link out to focused Nextstrain builds. +To look at many variants at once, check out the [Per Variant](/per-variant) and [Per Country](/per-country) pages, where +you can view a lot of data in the same place, and compare variants and countries! **What do the names mean?** -CoVariants uses the Nextstrain naming system for variants ([read more here](https://nextstrain.org/blog/2021-01-06-updated-SARS-CoV-2-clade-naming/)). However, the fact that there's multiple naming systems is confusing! See the table below to help find the variant you're interested in. +CoVariants uses the Nextstrain naming system for +variants ([read more here](https://nextstrain.org/blog/2021-01-06-updated-SARS-CoV-2-clade-naming/)). However, the fact +that there's multiple naming systems is confusing! See the table below to help find the variant you're interested in. -<NameTable/> <!-- The variants featured are currently slightly biased towards circulation in Europe: this is simply a reflection that the primary maintainer (Emma Hodcroft) works mostly with European data. We hope to add more variants from other regions soon! --> -How are all these variants/clades related to each other? CoVariants follows the Nextstrain Clade schema, where variants can descend from other variants. Here's a chart to show the overall relationships of Nextstrain Clades: - -<CladeSchema/> +How are all these variants/clades related to each other? CoVariants follows the Nextstrain Clade schema, where variants +can descend from other variants. Here's a chart to show the overall relationships of Nextstrain Clades: -This project is free and open source. The content, derived data, code used to generate the data, and code that implements this web application can be found on GitHub: [github.com/hodcroftlab/covariants](https://github.com/hodcroftlab/covariants/). +This project is free and open source. The content, derived data, code used to generate the data, and code that +implements this web application can be found on +GitHub: [github.com/hodcroftlab/covariants](https://github.com/hodcroftlab/covariants/). -> **The SARS-CoV-2 pandemic & research surrounding it is ongoing.** Every effort is made to try to keep this repository up-to-date, but readers should take care to double-check that the information is the latest available. +> **The SARS-CoV-2 pandemic & research surrounding it is ongoing.** Every effort is made to try to keep this repository +> up-to-date, but readers should take care to double-check that the information is the latest available. ## What's next? diff --git a/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx b/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx deleted file mode 100644 index 13175094b8..0000000000 --- a/web/src/components/Acknowledgements/AcknowledgementEpiIsl.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import React, { useMemo, useState, useCallback, Suspense, useRef, RefObject } from 'react' -import { get } from 'lodash' -import styled from 'styled-components' -import { ErrorBoundary } from 'react-error-boundary' -import { Popover as PopoverBase, PopoverBody as PopoverBodyBase, PopoverHeader as PopoverHeaderBase } from 'reactstrap' -import { THREE_DOTS } from 'src/components/Loading/Loading' -import { useAxiosQuery } from 'src/hooks/useAxiosQuery' -import { formatError } from 'src/components/MutationCounts/MutationCountsSummaryCard' - -export const Popover = styled(PopoverBase)` - .popover { - width: 500px; - max-width: unset !important; - - @media (max-width: 575.98px) { - width: 300px; - } - } -` - -export const PopoverBody = styled(PopoverBodyBase)` - .popover-inner { - } -` - -export const PopoverHeader = styled(PopoverHeaderBase)` - display: flex; -` - -export const PopoverHeaderText = styled.span` - font-size: 20px; - margin: auto; -` - -export const EpiIslText = styled.span` - text-decoration: #777 underline dashed; - cursor: pointer; -` - -export interface AcknowledgementEpiIslDatum { - origLab: string - submLab: string - authors: string -} - -export function getEpiIslUrl(epiIsl: string): string { - const accessionIdComponents = epiIsl.split('_') - if (accessionIdComponents.length < 3) { - throw new Error(`Invalid EPI ISL: not enough components: ${epiIsl}`) - } - - const id = accessionIdComponents[2] - if (id.length < 4) { - throw new Error(`Invalid EPI ISL: ID component is too short: ${epiIsl}`) - } - - const first = id.slice(-4, -2) // 2 characters from the end, skipping the two last - const second = id.slice(-2) // the last 2 characters - return `https://www.epicov.org/acknowledgement/${first}/${second}/${epiIsl}.json` -} - -function getString(obj: unknown, objPath: string, defaultValue?: string): string { - const property: string | unknown = get(obj, objPath, defaultValue) - if (typeof property !== 'string') { - return defaultValue ?? '-' - } - return property -} - -export function validateEpiIslData(data: unknown): AcknowledgementEpiIslDatum { - const origLab = getString(data, 'covv_orig_lab', '-') - const submLab = getString(data, 'covv_subm_lab', '-') - const authors = getString(data, 'covv_authors', '-') - return { origLab, submLab, authors } -} - -export function useQueryAcknowledgementData(epiIsl: string) { - const url = useMemo(() => getEpiIslUrl(epiIsl), [epiIsl]) - const data = useAxiosQuery(url) - return useMemo(() => validateEpiIslData(data), [data]) -} - -export interface AcknowledgementEpiIslPopupBodyProps { - epiIsl: string -} - -export function AcknowledgementEpiIslPopupBody({ epiIsl }: AcknowledgementEpiIslPopupBodyProps) { - const data = useQueryAcknowledgementData(epiIsl) - return ( - <section> - <p> - <b>{'Originating lab: '}</b> - <span>{data.origLab}</span> - </p> - <p> - <b>{'Submitting lab: '}</b> - <span>{data.submLab}</span> - </p> - <p> - <b>{'Authors: '}</b> - <span>{data.authors}</span> - </p> - </section> - ) -} - -function ErrorFallbackComponent({ error }: { error: unknown }) { - return ( - <div className="mx-auto"> - <div>{`Unable to fetch acknowledgements: ${formatError(error)}`}</div> - </div> - ) -} - -export interface AcknowledgementEpiIslPopupProps { - target: RefObject<Element> - isOpen: boolean - epiIsl: string -} - -export function AcknowledgementEpiIslPopup({ target, isOpen, epiIsl }: AcknowledgementEpiIslPopupProps) { - return ( - <Popover isOpen={isOpen} target={target} placement="auto"> - <PopoverHeader> - <PopoverHeaderText>{`GISAID.org/${epiIsl}`}</PopoverHeaderText> - </PopoverHeader> - <PopoverBody> - <ErrorBoundary FallbackComponent={ErrorFallbackComponent}> - <Suspense fallback={THREE_DOTS}> - <AcknowledgementEpiIslPopupBody epiIsl={epiIsl} /> - </Suspense> - </ErrorBoundary> - </PopoverBody> - </Popover> - ) -} - -export interface AcknowledgementEpiIslProps { - epiIsl: string -} - -export function AcknowledgementEpiIsl({ epiIsl }: AcknowledgementEpiIslProps) { - // Suggested by GISAID: - // Demo: https://pandemicprepardness.org/demos/popupdemo/popup-demo.html - // Download: https://pandemicprepardness.org/downloads/GISAID-Acknowledgement-JS-Library.zip - // Example JSON URL: 'https://www.epicov.org/acknowledgement/49/39/EPI_ISL_1014939.json' - - const [popoverOpen, setPopoverOpen] = useState(false) - const handleMouseOver = useCallback(() => setPopoverOpen(true), []) - const handleMouseLeave = useCallback(() => setPopoverOpen(false), []) - - const ref = useRef(null) - - return ( - <span> - <EpiIslText - ref={ref} - onMouseOver={handleMouseOver} - onMouseLeave={handleMouseLeave} - onFocus={handleMouseOver} - onBlur={handleMouseLeave} - > - {epiIsl} - </EpiIslText> - {popoverOpen && <AcknowledgementEpiIslPopup target={ref} epiIsl={epiIsl} isOpen={popoverOpen} />} - </span> - ) -} diff --git a/web/src/components/Acknowledgements/AcknowledgementsCard.tsx b/web/src/components/Acknowledgements/AcknowledgementsCard.tsx deleted file mode 100644 index fc62e549bf..0000000000 --- a/web/src/components/Acknowledgements/AcknowledgementsCard.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import React, { Suspense, useCallback, useMemo, useState } from 'react' -import PaginationComponent from 'react-reactstrap-pagination' -import { CardBody } from 'reactstrap' -import styled from 'styled-components' -import { useAxiosQuery } from 'src/hooks/useAxiosQuery' -import { AcknowledgementEpiIsl } from 'src/components/Acknowledgements/AcknowledgementEpiIsl' -import { CardCollapsible } from 'src/components/Common/CardCollapsible' -import { SPINNER } from 'src/components/Loading/Loading' -import type { ClusterDatum } from 'src/io/getClusters' - -export interface AcknowledgementsKeysDatum { - numChunks: number -} - -export type AcknowledgementsKeysData = Record<string, AcknowledgementsKeysDatum | undefined> - -export interface AcknowledgementsKeysJson { - acknowledgements: AcknowledgementsKeysData -} - -export const PaginationContainer = styled.div` - display: flex; - - & > * { - margin: 0 auto; - } -` - -export const Pagination = styled(PaginationComponent)`` - -export function useQueryAcknowledgements(cluster: string, page: number) { - const url = useMemo(() => { - const pageString = page.toString().padStart(3, '0') - return `acknowledgements/${cluster}/${pageString}.json` - }, [cluster, page]) - return useAxiosQuery<string[]>(url) -} - -export interface AcknowledgementsCardBodyProps { - cluster: ClusterDatum - numPages: number -} - -export function AcknowledgementsCardBody({ cluster, numPages }: AcknowledgementsCardBodyProps) { - const [page, setPage] = useState(0) - const handlePagination = useCallback((page: number) => setPage(page - 1) /* one-based to zero-based */, []) - const epiIsls = useQueryAcknowledgements(cluster.build_name, page) - - const body = useMemo(() => { - return (epiIsls ?? []).map((epiIsl) => ( - <span key={`$${cluster.display_name}-${epiIsl}`}> - <AcknowledgementEpiIsl epiIsl={epiIsl} /> - {', '} - </span> - )) - }, [cluster.display_name, epiIsls]) - - return ( - <CardBody> - <PaginationContainer> - <Pagination - totalItems={numPages} - pageSize={1} - onSelect={handlePagination} - maxPaginationNumbers={5} - defaultActivePage={1} - firstPageText="<<" - previousPageText="<" - nextPageText=">" - lastPageText=">>" - /> - </PaginationContainer> - - <div>{body}</div> - </CardBody> - ) -} - -export interface AcknowledgementsCardProps { - cluster: ClusterDatum - numPages: number -} - -export function AcknowledgementsCard({ cluster, numPages }: AcknowledgementsCardProps) { - const [collapsed, setCollapsed] = useState(true) - return ( - <CardCollapsible className="my-2" title={cluster.display_name} collapsed={collapsed} setCollapsed={setCollapsed}> - {!collapsed && ( - <Suspense fallback={SPINNER}> - <AcknowledgementsCardBody cluster={cluster} numPages={numPages} /> - </Suspense> - )} - </CardCollapsible> - ) -} diff --git a/web/src/components/Acknowledgements/AcknowledgementsContent.md b/web/src/components/Acknowledgements/AcknowledgementsContent.md deleted file mode 100644 index 163e28f9cf..0000000000 --- a/web/src/components/Acknowledgements/AcknowledgementsContent.md +++ /dev/null @@ -1,4 +0,0 @@ -We gratefully acknowledge all data contributors, i.e. the Authors and their Originating laboratories responsible for obtaining the specimens, and their Submitting laboratories for generating the genetic sequence and metadata and sharing via the GISAID Initiative<sup>1</sup>, on which this research is based. - -<sup>1</sup>Elbe, S., and Buckland-Merrett, G. (2017) Data, disease and diplomacy: GISAID’s innovative contribution to global health. Global Challenges, 1:33-46. DOI: 10.1002/gch2.1018PMCID: 31565258 - diff --git a/web/src/components/Acknowledgements/AcknowledgementsPage.tsx b/web/src/components/Acknowledgements/AcknowledgementsPage.tsx deleted file mode 100644 index d1db9902fd..0000000000 --- a/web/src/components/Acknowledgements/AcknowledgementsPage.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React, { useMemo } from 'react' -import { get } from 'lodash' -import styled from 'styled-components' -import { Col, Container, Row } from 'reactstrap' -import { useAxiosQuery } from 'src/hooks/useAxiosQuery' -import { getClusters } from 'src/io/getClusters' -import { AcknowledgementsCard, AcknowledgementsKeysJson } from 'src/components/Acknowledgements/AcknowledgementsCard' -import { PageHeading } from 'src/components/Common/PageHeading' -import AcknowledgementsContent from './AcknowledgementsContent.md' - -export const AcknowledgementsPageContainer = styled(Container)` - max-width: 1200px; - padding: 0 0.5rem; -` - -const clusters = getClusters() - -export function useQueryAcknowledgementsKeys() { - const data = useAxiosQuery('/acknowledgements/acknowledgements_keys.json') - return useMemo(() => { - const json = data as AcknowledgementsKeysJson - return clusters.map((cluster) => { - const { numChunks } = get(json.acknowledgements, cluster.build_name, { numChunks: 0 }) - return { cluster, numChunks } - }) - }, [data]) -} - -export function AcknowledgementsPage() { - const data = useQueryAcknowledgementsKeys() - - const body = useMemo(() => { - return data.map((datum) => ( - <AcknowledgementsCard key={datum.cluster.build_name} cluster={datum.cluster} numPages={datum.numChunks} /> - )) - }, [data]) - - return ( - <AcknowledgementsPageContainer> - <Row> - <Col> - <PageHeading>{'Acknowledgements'}</PageHeading> - </Col> - </Row> - - <Row> - <Col> - <AcknowledgementsContent /> - </Col> - </Row> - - <Row className="mt-5"> - <Col>{body}</Col> - </Row> - </AcknowledgementsPageContainer> - ) -} diff --git a/web/src/components/Cases/CasesPage.tsx b/web/src/components/Cases/CasesPage.tsx deleted file mode 100644 index 5cd458f80a..0000000000 --- a/web/src/components/Cases/CasesPage.tsx +++ /dev/null @@ -1,154 +0,0 @@ -import React, { useCallback, useMemo } from 'react' -import { Col, Row } from 'reactstrap' -import { useRecoilState } from 'recoil' - -import { CenteredEditable, Editable } from 'src/components/Common/Editable' -import { ColCustom } from 'src/components/Common/ColCustom' -import { MainFlex, SidebarFlex, WrapperFlex } from 'src/components/Common/PlotLayout' - -import { getPerCountryCasesData, filterClusters, filterCountries } from 'src/io/getPerCountryCasesData' -import { clustersCasesAtom, disableAllClusters, enableAllClusters, toggleCluster } from 'src/state/ClustersForCaseData' -import { - continentsCasesAtom, - countriesCasesAtom, - disableAllCountries, - enableAllCountries, - toggleContinent, - toggleCountry, -} from 'src/state/PlacesForCaseData' -import { CountryFlag } from 'src/components/Common/CountryFlag' -import { PageHeading } from 'src/components/Common/PageHeading' -import { SharingPanel } from 'src/components/Common/SharingPanel' -import { DistributionSidebar } from 'src/components/DistributionSidebar/DistributionSidebar' -import { CasesPlotCard } from './CasesPlotCard' - -import IntroContent from '../../../../content/PerCountryCasesIntro.md' - -const enabledFilters = ['clusters', 'countriesWithIcons'] - -export function CasesPage() { - const [countries, setCountries] = useRecoilState(countriesCasesAtom) - const [continents, setContinents] = useRecoilState(continentsCasesAtom) - const [clusters, setClusters] = useRecoilState(clustersCasesAtom) - - const { perCountryCasesDistributions } = useMemo(() => getPerCountryCasesData(), []) - - const { enabledClusters, withClustersFiltered } = useMemo(() => { - const { withCountriesFiltered } = filterCountries(countries, perCountryCasesDistributions) - const filteredClusters = filterClusters(clusters, withCountriesFiltered) - const { enabledClusters, withClustersFiltered } = filteredClusters - return { enabledClusters, withClustersFiltered } - }, [countries, perCountryCasesDistributions, clusters]) - - const casesComponents = useMemo( - () => - withClustersFiltered.map(({ country, distribution }) => ( - <ColCustom key={country} md={12} lg={6} xl={6} xxl={4}> - <CasesPlotCard - country={country} - distribution={distribution} - cluster_names={enabledClusters} - Icon={CountryFlag} - /> - </ColCustom> - )), - [enabledClusters, withClustersFiltered], - ) - - const handleClusterCheckedChange = useCallback( - (cluster: string) => { - setClusters((oldClusters) => toggleCluster(oldClusters, cluster)) - }, - [setClusters], - ) - - const handleClusterSelectAll = useCallback(() => { - setClusters((oldClusters) => enableAllClusters(oldClusters)) - }, [setClusters]) - - const handleClusterDeselectAll = useCallback(() => { - setClusters((oldClusters) => disableAllClusters(oldClusters)) - }, [setClusters]) - - const handleCountryCheckedChange = useCallback( - (countryName: string) => { - setCountries((oldCountries) => toggleCountry(oldCountries, countryName)) - }, - [setCountries], - ) - - const handleContinentCheckedChange = useCallback( - (continentName: string) => { - setContinents((oldContinents) => toggleContinent(oldContinents, continentName)) - }, - [setContinents], - ) - - const handleCountrySelectAll = useCallback(() => { - setCountries(enableAllCountries) - }, [setCountries]) - - const handleCountryDeselectAll = useCallback(() => { - setCountries(disableAllCountries) - }, [setCountries]) - - return ( - <> - <Row noGutters> - <Col> - <PageHeading>{'Estimated Cases by Variant'}</PageHeading> - </Col> - </Row> - - <Row noGutters> - <Col> - <CenteredEditable githubUrl="tree/master/content/PerCountryCasesIntro.md"> - <IntroContent /> - </CenteredEditable> - </Col> - </Row> - - <Row noGutters> - <Col> - <SharingPanel /> - </Col> - </Row> - - <Row noGutters> - <Col> - <Editable githubUrl="blob/master/scripts" text={'View data generation scripts'}> - <WrapperFlex> - <SidebarFlex> - <DistributionSidebar - countries={countries} - continents={continents} - clusters={clusters} - regionsTitle="Countries" - enabledFilters={enabledFilters} - clustersCollapsedByDefault={false} - countriesCollapsedByDefault={false} - Icon={CountryFlag} - onClusterFilterChange={handleClusterCheckedChange} - onClusterFilterSelectAll={handleClusterSelectAll} - onClusterFilterDeselectAll={handleClusterDeselectAll} - onCountryFilterChange={handleCountryCheckedChange} - onRegionFilterChange={handleContinentCheckedChange} - onCountryFilterSelectAll={handleCountrySelectAll} - onCountryFilterDeselectAll={handleCountryDeselectAll} - /> - </SidebarFlex> - - <MainFlex> - <Row noGutters> - <Col> - <Row noGutters>{casesComponents}</Row> - </Col> - </Row> - </MainFlex> - </WrapperFlex> - </Editable> - </Col> - </Row> - </> - ) -} diff --git a/web/src/components/Cases/CasesPlot.tsx b/web/src/components/Cases/CasesPlot.tsx deleted file mode 100644 index 9288d4d1c2..0000000000 --- a/web/src/components/Cases/CasesPlot.tsx +++ /dev/null @@ -1,117 +0,0 @@ -/* eslint-disable camelcase */ -import React, { CSSProperties, useMemo, useRef } from 'react' - -import dynamic from 'next/dynamic' -import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, Label } from 'recharts' -import { DateTime } from 'luxon' - -import type { PerCountryCasesDistributionDatum } from 'src/io/getPerCountryCasesData' -import { ticks, timeDomain } from 'src/io/getParams' -import { CLUSTER_NAME_OTHERS, getClusterColor } from 'src/io/getClusters' -import { formatDateHumanely } from 'src/helpers/format' -import { adjustTicks } from 'src/helpers/adjustTicks' -import { PlotPlaceholder } from 'src/components/Common/PlotPlaceholder' -import { ChartContainer } from 'src/components/Common/ChartContainer' -import { useTheme } from 'styled-components' -import { CasesPlotTooltip } from './CasesPlotTooltip' - -const CHART_MARGIN = { left: 10, top: 12, bottom: 6, right: 12 } -const ALLOW_ESCAPE_VIEW_BOX = { x: false, y: true } - -export interface CasesPlotProps { - cluster_names: string[] - distribution: PerCountryCasesDistributionDatum[] -} - -export function CasesPlotComponent({ cluster_names, distribution }: CasesPlotProps) { - const theme = useTheme() - const chartRef = useRef(null) - - const data = distribution.map(({ week, stand_total_cases, stand_estimated_cases }) => { - const weekSec = DateTime.fromFormat(week, 'yyyy-MM-dd').toSeconds() - return { week: weekSec, ...stand_estimated_cases, total: stand_total_cases } - }) - - const yAxisLabelStyle: CSSProperties = useMemo( - () => ({ - textAnchor: 'middle', - fontSize: '80%', - fill: theme.gray800, - }), - [theme], - ) - - return ( - <ChartContainer> - {({ width, height }) => { - const adjustedTicks = adjustTicks(ticks, width ?? 0, theme.plot.tickWidthMin).slice(1) // slice ensures first tick is not outside domain - return ( - <AreaChart width={width} height={height} margin={CHART_MARGIN} data={data} ref={chartRef}> - <XAxis - dataKey="week" - type="number" - tickFormatter={formatDateHumanely} - domain={timeDomain} - ticks={adjustedTicks} - tick={theme.plot.tickStyle} - tickMargin={theme.plot.tickMargin?.x} - allowDataOverflow - /> - <YAxis - type="number" - name="Cases per million" - tick={theme.plot.tickStyle} - tickMargin={theme.plot.tickMargin?.y} - allowDataOverflow - > - <Label - style={yAxisLabelStyle} - position="insideLeft" - offset={0} - angle={270} - value={'Cases per million people'} - /> - </YAxis> - - {cluster_names.map((cluster) => ( - <Area - key={cluster} - type="monotone" - dataKey={cluster} - stackId="1" - stroke="none" - fill={getClusterColor(cluster)} - fillOpacity={1} - isAnimationActive={false} - /> - ))} - - <Area - type="monotone" - dataKey={CLUSTER_NAME_OTHERS} - stackId="1" - stroke="none" - fill={theme.clusters.color.others} - fillOpacity={1} - isAnimationActive={false} - /> - - <CartesianGrid stroke={theme.plot.cartesianGrid.stroke} /> - - <Tooltip - content={CasesPlotTooltip} - isAnimationActive={false} - allowEscapeViewBox={ALLOW_ESCAPE_VIEW_BOX} - offset={50} - /> - </AreaChart> - ) - }} - </ChartContainer> - ) -} - -export const CasesPlot = dynamic(() => Promise.resolve(CasesPlotComponent), { - ssr: false, - loading: PlotPlaceholder, -}) diff --git a/web/src/components/Cases/CasesPlotCard.tsx b/web/src/components/Cases/CasesPlotCard.tsx deleted file mode 100644 index a13f6f6a23..0000000000 --- a/web/src/components/Cases/CasesPlotCard.tsx +++ /dev/null @@ -1,49 +0,0 @@ -/* eslint-disable camelcase */ -import React from 'react' -import { Card, CardBody, CardHeader, Col, Row } from 'reactstrap' -import styled from 'styled-components' - -import type { PerCountryCasesDistributionDatum } from 'src/io/getPerCountryCasesData' -import { PlotCardTitle } from 'src/components/Common/PlotCardTitle' -import { CountryFlagProps } from 'src/components/Common/CountryFlag' -import { USStateCodeProps } from 'src/components/Common/USStateCode' -import { CasesPlot } from 'src/components/Cases/CasesPlot' - -const FlagAlignment = styled.span` - display: flex; - align-items: center; - > * + * { - margin-left: 0.5em; - } -` -export interface CasesPlotCardProps { - country: string - distribution: PerCountryCasesDistributionDatum[] - cluster_names: string[] - Icon?: React.ComponentType<CountryFlagProps | USStateCodeProps> -} - -export function CasesPlotCard({ country, distribution, cluster_names, Icon }: CasesPlotCardProps) { - return ( - <Card className="m-2"> - <CardHeader className="d-flex flex-sm-column"> - <PlotCardTitle> - <FlagAlignment> - {Icon && <Icon country={country} />} - <span>{country}</span> - </FlagAlignment> - </PlotCardTitle> - </CardHeader> - - <CardBody className="p-0"> - <Col className="p-0"> - <Row noGutters> - <Col className="p-0"> - <CasesPlot distribution={distribution} cluster_names={cluster_names} /> - </Col> - </Row> - </Col> - </CardBody> - </Card> - ) -} diff --git a/web/src/components/Cases/CasesPlotTooltip.tsx b/web/src/components/Cases/CasesPlotTooltip.tsx deleted file mode 100644 index 64ea0d4412..0000000000 --- a/web/src/components/Cases/CasesPlotTooltip.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React from 'react' - -import { sortBy, reverse } from 'lodash' -import styled from 'styled-components' -import { Props as DefaultTooltipContentProps } from 'recharts/types/component/DefaultTooltipContent' - -import { formatDateBiweekly, formatInteger, formatProportion } from 'src/helpers/format' -import { getClusterColor } from 'src/io/getClusters' -import { ColoredBox } from '../Common/ColoredBox' - -const EPSILON = 1e-2 - -const Tooltip = styled.div` - display: flex; - flex-direction: column; - - padding: 5px 10px; - background-color: ${(props) => props.theme.gray100}; - box-shadow: ${(props) => props.theme.shadows.slight}; - border-radius: 3px; -` - -const TooltipTitle = styled.h1` - font-size: 1rem; - margin: 5px auto; - font-weight: 600; -` - -const TooltipTable = styled.table` - padding: 30px 35px; - font-size: 0.9rem; - border: none; - min-width: 250px; - - & > tbody > tr:nth-child(odd) { - background-color: ${(props) => props.theme.gray200}; - } -` - -const TooltipTableBody = styled.tbody`` - -export const ClusterNameText = styled.span` - font-family: ${(props) => props.theme.font.monospace}; -` - -export function CasesPlotTooltip(props: DefaultTooltipContentProps<number, string>) { - const { payload } = props - if (!payload || payload.length === 0) { - return null - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument - const week = formatDateBiweekly(payload[0]?.payload.week) - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument - const total: number = formatInteger(payload[0]?.payload.total ?? 0) - - const payloadSorted = reverse(sortBy(payload, 'value')) - - return ( - <Tooltip> - <TooltipTitle>{week}</TooltipTitle> - - <TooltipTable> - <thead> - <tr className="w-100"> - <th className="px-2 text-left">{'Variant'}</th> - <th className="px-2 text-right">{'Est. cases'}</th> - <th className="px-2 text-right">{'Freq'}</th> - </tr> - </thead> - <TooltipTableBody> - {payloadSorted.map(({ name, value }) => ( - <tr key={name}> - <td className="px-2 text-left"> - <ColoredBox $color={getClusterColor(name ?? '')} $size={10} $aspect={1.66} /> - <ClusterNameText>{name}</ClusterNameText> - </td> - <td className="px-2 text-right">{value !== undefined && value > EPSILON ? formatInteger(value) : '-'}</td> - <td className="px-2 text-right"> - {value !== undefined && value > EPSILON ? formatProportion(value / total) : '-'} - </td> - </tr> - ))} - - <tr> - <td className="px-2 text-left"> - <span> - <b>{'Total'}</b> - </span> - </td> - <td className="px-2 text-right">{total}</td> - <td className="px-2 text-right">{'1.00'}</td> - </tr> - </TooltipTableBody> - </TooltipTable> - </Tooltip> - ) -} diff --git a/web/src/components/ClusterButtonPanel/ClusterButton.tsx b/web/src/components/ClusterButtonPanel/ClusterButton.tsx index 5c4e61b354..3cd12ac6b0 100644 --- a/web/src/components/ClusterButtonPanel/ClusterButton.tsx +++ b/web/src/components/ClusterButtonPanel/ClusterButton.tsx @@ -1,9 +1,8 @@ /* eslint-disable camelcase */ import React from 'react' - -import { ClusterDatum } from 'src/io/getClusters' import styled from 'styled-components' -import { Link } from '../Link/Link' +import type { ClusterDatum } from 'src/io/getClusters' +import { Link } from 'src/components/Link/Link' const ClusterButtonComponent = styled(Link)<{ $isCurrent: boolean; $color: string }>` display: flex; diff --git a/web/src/components/ClusterButtonPanel/ClusterButtonGroup.tsx b/web/src/components/ClusterButtonPanel/ClusterButtonGroup.tsx index b5531d6e6b..07e27859dc 100644 --- a/web/src/components/ClusterButtonPanel/ClusterButtonGroup.tsx +++ b/web/src/components/ClusterButtonPanel/ClusterButtonGroup.tsx @@ -2,7 +2,6 @@ import React, { useMemo, useState } from 'react' import styled from 'styled-components' import { Button } from 'reactstrap' - import type { ClusterDatum } from 'src/io/getClusters' import { ClusterButton } from 'src/components/ClusterButtonPanel/ClusterButton' diff --git a/web/src/components/ClusterDistribution/ClusterDistributionPage.tsx b/web/src/components/ClusterDistribution/ClusterDistributionPage.tsx deleted file mode 100644 index 5755b97786..0000000000 --- a/web/src/components/ClusterDistribution/ClusterDistributionPage.tsx +++ /dev/null @@ -1,257 +0,0 @@ -import React, { useCallback, useMemo } from 'react' - -import { Card, CardBody, Col, Form, FormGroup, Input, Label, Row } from 'reactstrap' -import { useRecoilState } from 'recoil' -import { SharingPanel } from 'src/components/Common/SharingPanel' -import { - clustersAtom, - ClustersDataFlavor, - disableAllClusters, - enableAllClusters, - toggleCluster, -} from 'src/state/Clusters' -import { - continentsAtom, - countriesAtom, - disableAllCountries, - enableAllCountries, - toggleContinent, - toggleCountry, -} from 'src/state/Places' -import { tooltipSortAtom, TooltipSortCriterion } from 'src/state/TooltipSort' -import styled from 'styled-components' - -import { getPerClusterData, filterClusters, filterCountries } from 'src/io/getPerClusterData' -import { ClusterDistributionPlotCard } from 'src/components/ClusterDistribution/ClusterDistributionPlotCard' -import { ColCustom } from 'src/components/Common/ColCustom' -import { Dropdown as DropdownBase } from 'src/components/Common/Dropdown' -import { stringToOption } from 'src/components/Common/DropdownOption' -import { Editable, CenteredEditable } from 'src/components/Common/Editable' -import { MainFlex, SidebarFlex, WrapperFlex } from 'src/components/Common/PlotLayout' -import { DistributionSidebar } from 'src/components/DistributionSidebar/DistributionSidebar' -import { PageHeading } from 'src/components/Common/PageHeading' - -import PerClusterIntro from '../../../../content/PerClusterIntro.md' - -const Dropdown = styled(DropdownBase)` - min-width: 130px; -` - -const enabledFilters = ['countries', 'clusters'] - -export interface SortByDropdownProps { - perCountryTooltipSortBy: TooltipSortCriterion - onSortByChange(perCountryTooltipSortBy: TooltipSortCriterion): void -} - -const sortByOptions = Object.entries(TooltipSortCriterion).map(([key, value]) => ({ value, label: key })) - -export function SortByDropdown({ perCountryTooltipSortBy, onSortByChange }: SortByDropdownProps) { - const handleSortByChange = useCallback( - (value: string) => onSortByChange(TooltipSortCriterion[value as keyof typeof TooltipSortCriterion]), - [onSortByChange], - ) - - return ( - <FormGroup check inline> - <Label htmlFor="per-variant-sort-by"> - <span className="mr-2">{'Tooltip sort by:'}</span> - <Dropdown - identifier="per-variant-sort-by" - options={sortByOptions} - value={stringToOption(perCountryTooltipSortBy)} - onValueChange={handleSortByChange} - isSearchable={false} - /> - </Label> - </FormGroup> - ) -} - -export interface SortReverseCheckboxProps { - reverse: boolean - setReverse(reverse: boolean): void -} - -export function SortReverseCheckbox({ reverse, setReverse }: SortReverseCheckboxProps) { - const onChange = useCallback(() => setReverse(!reverse), [setReverse, reverse]) - - return ( - <FormGroup check inline> - <Label htmlFor="per-variant-sort-reverse" check> - <Input id="per-variant-sort-reverse" type="checkbox" checked={reverse} onChange={onChange} /> - <span>{'Reversed'}</span> - </Label> - </FormGroup> - ) -} - -const StickyRow = styled(Row)` - position: sticky; - top: 0; - z-index: 1; - align-self: flex-start; -` - -export function ClusterDistributionPage() { - const [countries, setCountries] = useRecoilState(countriesAtom(undefined)) - const [continents, setContinents] = useRecoilState(continentsAtom(undefined)) - const [clusters, setClusters] = useRecoilState( - clustersAtom({ dataFlavor: ClustersDataFlavor.PerCluster, region: 'World' }), - ) - - const [tooltipSort, setTooltipSort] = useRecoilState(tooltipSortAtom) - const perCountryTooltipSortBy = tooltipSort.criterion - const perCountryTooltipSortReversed = tooltipSort.reversed - - const { clusterBuildNames, clusterDistributions } = getPerClusterData() - - const setSortBy = useCallback( - (criterion: TooltipSortCriterion) => { - setTooltipSort((tooltipSort) => ({ ...tooltipSort, criterion })) - }, - [setTooltipSort], - ) - - const setSortReversed = useCallback( - (reversed: boolean) => { - setTooltipSort((tooltipSort) => ({ ...tooltipSort, reversed })) - }, - [setTooltipSort], - ) - - const { withClustersFiltered } = useMemo( - () => filterClusters(clusters, clusterDistributions), - [clusterDistributions, clusters], - ) - const { enabledCountries, withCountriesFiltered } = - /* prettier-ignore */ - useMemo(() => filterCountries(countries, withClustersFiltered), [countries, withClustersFiltered]) - - const clusterDistributionComponents = useMemo( - () => - withCountriesFiltered.map(({ cluster, distribution }) => ( - <ColCustom key={cluster} md={12} lg={6} xl={6} xxl={4}> - <ClusterDistributionPlotCard - key={cluster} - clusterBuildName={clusterBuildNames.get(cluster) || ''} - clusterDisplayName={cluster} - distribution={distribution} - country_names={enabledCountries} - /> - </ColCustom> - )), - [clusterBuildNames, enabledCountries, withCountriesFiltered], - ) - - const handleClusterCheckedChange = useCallback( - (cluster: string) => { - setClusters((oldClusters) => toggleCluster(oldClusters, cluster)) - }, - [setClusters], - ) - - const handleClusterSelectAll = useCallback(() => { - setClusters((oldClusters) => enableAllClusters(oldClusters)) - }, [setClusters]) - - const handleClusterDeselectAll = useCallback(() => { - setClusters((oldClusters) => disableAllClusters(oldClusters)) - }, [setClusters]) - - const handleCountryCheckedChange = useCallback( - (countryName: string) => { - setCountries((oldCountries) => toggleCountry(oldCountries, countryName)) - }, - [setCountries], - ) - - const handleContinentCheckedChange = useCallback( - (continentName: string) => { - setContinents((oldContinents) => toggleContinent(oldContinents, continentName)) - }, - [setContinents], - ) - - const handleCountrySelectAll = useCallback(() => { - setCountries(enableAllCountries) - }, [setCountries]) - - const handleCountryDeselectAll = useCallback(() => { - setCountries(disableAllCountries) - }, [setCountries]) - - return ( - <> - <Row noGutters> - <Col> - <PageHeading>{'Overview of Variants/Mutations'}</PageHeading> - </Col> - </Row> - - <Row noGutters> - <Col> - <CenteredEditable githubUrl="blob/master/content/PerClusterIntro.md"> - <PerClusterIntro /> - </CenteredEditable> - </Col> - </Row> - - <Row noGutters> - <Col> - <SharingPanel /> - </Col> - </Row> - - <Row noGutters> - <Col className="pb-10"> - <Editable githubUrl="blob/master/scripts" text={'View data generation scripts'}> - <WrapperFlex> - <SidebarFlex> - <DistributionSidebar - countries={countries} - continents={continents} - clusters={clusters} - regionsTitle="Countries" - countriesCollapsedByDefault={false} - enabledFilters={enabledFilters} - onClusterFilterChange={handleClusterCheckedChange} - onClusterFilterSelectAll={handleClusterSelectAll} - onClusterFilterDeselectAll={handleClusterDeselectAll} - onCountryFilterChange={handleCountryCheckedChange} - onRegionFilterChange={handleContinentCheckedChange} - onCountryFilterSelectAll={handleCountrySelectAll} - onCountryFilterDeselectAll={handleCountryDeselectAll} - /> - </SidebarFlex> - - <MainFlex> - <StickyRow noGutters> - <Col> - <Card className="m-2"> - <CardBody className="px-3 py-2"> - <Form inline> - <SortByDropdown - perCountryTooltipSortBy={perCountryTooltipSortBy} - onSortByChange={setSortBy} - /> - <SortReverseCheckbox reverse={perCountryTooltipSortReversed} setReverse={setSortReversed} /> - </Form> - </CardBody> - </Card> - </Col> - </StickyRow> - - <Row noGutters> - <Col> - <Row noGutters>{clusterDistributionComponents}</Row> - </Col> - </Row> - </MainFlex> - </WrapperFlex> - </Editable> - </Col> - </Row> - </> - ) -} diff --git a/web/src/components/ClusterDistribution/ClusterDistributionPlot.tsx b/web/src/components/ClusterDistribution/ClusterDistributionPlot.tsx deleted file mode 100644 index 567cb0e49c..0000000000 --- a/web/src/components/ClusterDistribution/ClusterDistributionPlot.tsx +++ /dev/null @@ -1,142 +0,0 @@ -/* eslint-disable camelcase */ -import React, { useMemo } from 'react' - -import { get } from 'lodash' -import { DateTime } from 'luxon' -import { CartesianGrid, Line, LineChart, Tooltip, XAxis, YAxis } from 'recharts' -import { useTheme } from 'styled-components' - -import { ticks, timeDomain } from 'src/io/getParams' -import { getCountryColor, getCountryStrokeDashArray } from 'src/io/getCountryColor' -import { formatDateHumanely, formatProportion } from 'src/helpers/format' -import { adjustTicks } from 'src/helpers/adjustTicks' -import type { ClusterDistributionDatum } from 'src/io/getPerClusterData' -import { ClusterDistributionPlotTooltip } from 'src/components/ClusterDistribution/ClusterDistributionPlotTooltip' -import { ChartContainer } from 'src/components/Common/ChartContainer' - -const getValueOrig = (country: string) => (value: ClusterDistributionDatum) => { - const orig = get(value.orig, country, false) - if (orig) { - return get(value.frequencies, country) - } - - return undefined -} - -const getValueInterp = (country: string) => (value: ClusterDistributionDatum) => { - const interp = get(value.interp, country, false) - if (interp) { - return get(value.frequencies, country) - } - - return undefined -} - -const allowEscapeViewBox = { x: false, y: true } - -interface LinePlotProps { - width: number - height: number - country_names: string[] - distribution: ClusterDistributionDatum[] -} - -function LinePlot({ width, height, country_names, distribution }: LinePlotProps) { - const theme = useTheme() - - const data = useMemo( - () => - distribution.map(({ week, ...rest }) => { - const weekSec = DateTime.fromFormat(week, 'yyyy-MM-dd').toSeconds() - return { week: weekSec, ...rest } - }), - [distribution], - ) - - const { adjustedTicks, domainX, domainY } = useMemo(() => { - const adjustedTicks = adjustTicks(ticks, width ?? 0, theme.plot.tickWidthMin) - const domainX = [adjustedTicks[0], timeDomain[1]] - const domainY = [0, 1] - return { adjustedTicks, domainX, domainY } - }, [theme.plot.tickWidthMin, width]) - - const lines = useMemo(() => { - const linesOrig = country_names.map((country) => ( - <Line - key={country} - type="monotone" - name={country} - dataKey={getValueOrig(country)} - stroke={getCountryColor(country)} - strokeWidth={2} - strokeDasharray={getCountryStrokeDashArray(country)} - dot={false} - isAnimationActive={false} - /> - )) - - const linesInterp = country_names.map((country) => ( - <Line - key={`${country}_interp`} - type="monotone" - name={country} - dataKey={getValueInterp(country)} - stroke={getCountryColor(country)} - strokeWidth={1.2} - strokeDasharray="1 2" - dot={false} - isAnimationActive={false} - /> - )) - - return [...linesOrig, linesInterp] - }, [country_names]) - - return ( - <LineChart width={width} height={height} margin={theme.plot.margin} data={data}> - <XAxis - dataKey="week" - type="number" - tickFormatter={formatDateHumanely} - domain={domainX} - ticks={adjustedTicks} - tick={theme.plot.tickStyle} - tickMargin={theme.plot.tickMargin?.x} - allowDataOverflow - /> - <YAxis - type="number" - tickFormatter={formatProportion} - domain={domainY} - tick={theme.plot.tickStyle} - tickMargin={theme.plot.tickMargin?.y} - allowDataOverflow - /> - <Tooltip - content={ClusterDistributionPlotTooltip} - isAnimationActive={false} - allowEscapeViewBox={allowEscapeViewBox} - offset={50} - /> - - <CartesianGrid stroke="#2222" /> - - {lines} - </LineChart> - ) -} - -export interface ClusterDistributionPlotProps { - country_names: string[] - distribution: ClusterDistributionDatum[] -} - -export function ClusterDistributionPlot({ country_names, distribution }: ClusterDistributionPlotProps) { - return ( - <ChartContainer> - {({ width, height }) => ( - <LinePlot width={width} height={height} country_names={country_names} distribution={distribution} /> - )} - </ChartContainer> - ) -} diff --git a/web/src/components/ClusterDistribution/ClusterDistributionPlotCard.tsx b/web/src/components/ClusterDistribution/ClusterDistributionPlotCard.tsx deleted file mode 100644 index cc0ad18110..0000000000 --- a/web/src/components/ClusterDistribution/ClusterDistributionPlotCard.tsx +++ /dev/null @@ -1,50 +0,0 @@ -/* eslint-disable camelcase */ -import React from 'react' - -import { Card, CardBody, CardHeader, Col, Row } from 'reactstrap' -import styled from 'styled-components' - -import type { ClusterDistributionDatum } from 'src/io/getPerClusterData' -import { Link } from 'src/components/Link/Link' -import { PlotCardTitle } from 'src/components/Common/PlotCardTitle' -import { ClusterDistributionPlot } from 'src/components/ClusterDistribution/ClusterDistributionPlot' - -export interface ClusterDistributionPlotCardProps { - clusterBuildName: string - clusterDisplayName: string - distribution: ClusterDistributionDatum[] - country_names: string[] -} - -const GreyLink = styled(Link)` - color: ${(props) => props.theme.gray700}; -` - -export function ClusterDistributionPlotCard({ - clusterBuildName, - clusterDisplayName, - distribution, - country_names, -}: ClusterDistributionPlotCardProps) { - const url = `/variants/${clusterBuildName}` - - return ( - <Card className="m-2"> - <CardHeader className="d-flex flex-sm-column"> - <PlotCardTitle> - <GreyLink href={url}>{clusterDisplayName}</GreyLink> - </PlotCardTitle> - </CardHeader> - - <CardBody className="p-0"> - <Col className="p-0"> - <Row noGutters> - <Col className="p-0"> - <ClusterDistributionPlot distribution={distribution} country_names={country_names} /> - </Col> - </Row> - </Col> - </CardBody> - </Card> - ) -} diff --git a/web/src/components/ClusterDistribution/ClusterDistributionPlotTooltip.tsx b/web/src/components/ClusterDistribution/ClusterDistributionPlotTooltip.tsx deleted file mode 100644 index d8f057790e..0000000000 --- a/web/src/components/ClusterDistribution/ClusterDistributionPlotTooltip.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import React from 'react' - -import { get, sortBy, reverse, uniqBy } from 'lodash' -import { useRecoilValue } from 'recoil' -import { ColoredHorizontalLineIcon } from 'src/components/Common/ColoredHorizontalLineIcon' -import { tooltipSortAtom } from 'src/state/TooltipSort' -import { theme } from 'src/theme' -import styled from 'styled-components' - -import type { Props as DefaultTooltipContentProps } from 'recharts/types/component/DefaultTooltipContent' -import { formatDateWeekly, formatProportion } from 'src/helpers/format' -import { getCountryColor, getCountryStrokeDashArray } from 'src/io/getCountryColor' - -const EPSILON = 1e-2 - -const Tooltip = styled.div` - display: flex; - flex-direction: column; - - padding: 5px 10px; - background-color: ${(props) => props.theme.plot.tooltip.background}; - box-shadow: ${(props) => props.theme.shadows.slight}; - border-radius: 3px; -` - -const TooltipTitle = styled.h3` - font-size: 1rem; - font-weight: 600; - margin: 5px auto; -` - -const TooltipTable = styled.table` - padding: 30px 35px; - font-size: 0.9rem; - border: none; - min-width: 250px; - - background-color: ${(props) => props.theme.plot.tooltip.table.backgroundEven}; - - & > tbody > tr:nth-child(odd) { - background-color: ${(props) => props.theme.plot.tooltip.table.backgroundOdd}; - } -` - -const TooltipFooter = styled.div` - margin: 5px; -` - -const TooltipTableBody = styled.tbody`` - -export type ClusterDistributionPlotTooltipProps = DefaultTooltipContentProps<number, string> - -export function ClusterDistributionPlotTooltip(props: ClusterDistributionPlotTooltipProps) { - const { criterion, reversed } = useRecoilValue(tooltipSortAtom) - - const { payload } = props - if (!payload || payload.length === 0) { - return null - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const data = payload[0]?.payload as ClusterDistributionDatum - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument - const week = formatDateWeekly(data?.week) - - let payloadSorted = sortBy(payload, criterion === 'country' ? 'name' : 'value') - - // sortBy sorts in ascending order, but if sorting by frequency the natural/non-reversed order is descending - - if ((criterion !== 'frequency' && reversed) || (criterion === 'frequency' && !reversed)) { - payloadSorted = reverse(payloadSorted) - } - - const payloadUnique = uniqBy(payloadSorted, (payload) => payload.name) - - return ( - <Tooltip> - <TooltipTitle>{week}</TooltipTitle> - - <TooltipTable> - <thead> - <tr className="w-100"> - <th className="px-2 text-left">{'Country'}</th> - <th /> - <th className="px-2 text-right">{'Frequency'}</th> - </tr> - </thead> - <TooltipTableBody> - {payloadUnique.map(({ name, value, payload }) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const interpolated = !get(payload?.orig, name, false) // eslint-disable-line @typescript-eslint/no-unsafe-member-access - const country = name ?? '?' - return ( - <tr key={name}> - <td className="px-2 text-left"> - <ColoredHorizontalLineIcon - width={theme.plot.country.legend.lineIcon.width} - height={theme.plot.country.legend.lineIcon.height} - stroke={getCountryColor(country)} - strokeWidth={theme.plot.country.legend.lineIcon.thickness} - strokeDasharray={getCountryStrokeDashArray(country)} - /> - <span className="ml-2">{country}</span> - </td> - <td>{interpolated && '*'}</td> - <td className="px-2 text-right"> - {value !== undefined && value > EPSILON ? formatProportion(value) : '-'} - </td> - </tr> - ) - })} - </TooltipTableBody> - </TooltipTable> - - <TooltipFooter> - <small>{'* Interpolated values'}</small> - </TooltipFooter> - </Tooltip> - ) -} diff --git a/web/src/components/Common/Card.tsx b/web/src/components/Common/Card.tsx deleted file mode 100644 index c0839ede07..0000000000 --- a/web/src/components/Common/Card.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import styled from 'styled-components' - -import { Card as ReactstrapCard, CardHeader as ReactstrapCardHeader, CardBody as ReactstrapCardBody } from 'reactstrap' - -/* Level 1 */ -export const CardL1 = styled(ReactstrapCard)` - border: none; - border-image: none; - margin: 10px 5px; - border-radius: 3px; -` - -export const CardL1Header = styled(ReactstrapCardHeader)` - border: none; - border-image: none; - background-color: #666; - color: #ddd; - padding: 5px 5px; - display: flex; - height: 48px; -` - -export const CardL1Body = styled(ReactstrapCardBody)` - border: 0; - border-image: none; - margin: 3px 2px; - padding: 6px; -` - -/* Level 2 */ -export const CardL2 = styled(ReactstrapCard)` - margin: 5px; - box-shadow: none; - border-image: none; - border: #dfe2e6 1px solid; -` - -export const CardL2Header = styled(ReactstrapCardHeader)` - font-weight: bold; - font-size: 1.1rem; - padding: 7px 5px; -` - -export const CardL2Body = styled(ReactstrapCardBody)` - margin: 3px 2px; - padding: 5px; - min-height: 180px; -` diff --git a/web/src/components/Common/CardCollapsible.tsx b/web/src/components/Common/CardCollapsible.tsx deleted file mode 100644 index 29a111d330..0000000000 --- a/web/src/components/Common/CardCollapsible.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React, { PropsWithChildren, useCallback } from 'react' - -import styled from 'styled-components' -import { MdArrowDropDown } from 'react-icons/md' -import { Card as CardBase, CardHeader as CardHeaderBase, Collapse } from 'reactstrap' - -const Card = styled(CardBase)`` - -const CardHeader = styled(CardHeaderBase)` - display: flex; - cursor: pointer; -` - -const CollapseIcon = styled(MdArrowDropDown)<{ $rotated?: boolean }>` - display: inline; - fill: ${(props) => props.theme.gray650}; - transition: transform linear 0.25s; - transform: rotate(${(props) => (props.$rotated ? '-90deg' : '0deg')}); -` - -export interface CollapsibleCardProps { - className?: string - collapsed: boolean - setCollapsed: (collapsed: boolean) => void - title?: React.ReactNode -} - -export function CardCollapsible({ - className, - title, - collapsed, - setCollapsed, - children, -}: PropsWithChildren<CollapsibleCardProps>) { - const toggle = useCallback(() => setCollapsed(!collapsed), [collapsed, setCollapsed]) - - return ( - <Card className={className}> - <CardHeader onClick={toggle}> - <CollapseIcon size={30} $rotated={collapsed} /> - <span className="d-flex w-100">{title}</span> - </CardHeader> - - <Collapse isOpen={!collapsed}>{children}</Collapse> - </Card> - ) -} diff --git a/web/src/components/Common/CardCollapsibleUncontrolled.tsx b/web/src/components/Common/CardCollapsibleUncontrolled.tsx deleted file mode 100644 index 03619955a8..0000000000 --- a/web/src/components/Common/CardCollapsibleUncontrolled.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React, { PropsWithChildren, useState } from 'react' - -import { CardCollapsible } from 'src/components/Common/CardCollapsible' - -export interface CollapsibleCardProps { - className?: string - collapsedByDefault?: boolean - title?: React.ReactNode -} - -export function CardCollapsibleUncontrolled({ - className, - collapsedByDefault = false, - title, - children, -}: PropsWithChildren<CollapsibleCardProps>) { - const [collapsed, setCollapsed] = useState(collapsedByDefault) - - return ( - <CardCollapsible className={className} title={title} collapsed={collapsed} setCollapsed={setCollapsed}> - {children} - </CardCollapsible> - ) -} diff --git a/web/src/components/Common/ChangelogButton.tsx b/web/src/components/Common/ChangelogButton.tsx deleted file mode 100644 index f37cd0f054..0000000000 --- a/web/src/components/Common/ChangelogButton.tsx +++ /dev/null @@ -1,248 +0,0 @@ -import { MDXProvider } from '@mdx-js/react' -import React, { PropsWithChildren, useCallback, useState } from 'react' - -import { - Button, - ButtonProps, - Col, - Container, - Modal as ReactstrapModal, - ModalBody as ReactstrapModalBody, - ModalFooter as ReactstrapModalFooter, - ModalHeader as ReactstrapModalHeader, - Row, -} from 'reactstrap' -import styled from 'styled-components' - -import { LinkExternal } from 'src/components/Link/LinkExternal' -import Changelog from '../../../../CHANGELOG.md' - -export const ButtonOk = styled(Button)<ButtonProps>` - width: 100px; -` - -export const ModalHeader = styled(ReactstrapModalHeader)` - .modal-title { - width: 100%; - } - - @media (max-width: 992px) { - padding: 0.25rem; - margin: 0.5rem; - margin-bottom: 0; - } -` - -export const Modal = styled(ReactstrapModal)` - height: 100%; - - @media (max-width: 1200px) { - min-width: 80vw; - } - - @media (min-width: 1199.98px) { - min-width: 957px; - } - - @media (min-width: 991.98px) { - margin: 0.1vh auto; - } - - // fullscreen on mobile - @media (max-width: 992px) { - max-width: unset; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - margin: 0; - padding: 0; - - .modal-content { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - margin: 0; - } - } -` - -export const ModalBody = styled(ReactstrapModalBody)` - @media (min-width: 991.98px) { - max-height: 66vh; - margin: auto; - } - - overflow-y: auto; - - // prettier-ignore - background: - linear-gradient(#ffffff 33%, rgba(255,255,255, 0)), - linear-gradient(rgba(255,255,255, 0), #ffffff 66%) 0 100%, - radial-gradient(farthest-side at 50% 0, rgba(119,119,119, 0.5), rgba(0,0,0,0)), - radial-gradient(farthest-side at 50% 100%, rgba(119,119,119, 0.5), rgba(0,0,0,0)) 0 100%; - background-color: #ffffff; - background-repeat: no-repeat; - background-attachment: local, local, scroll, scroll; - background-size: 100% 24px, 100% 24px, 100% 8px, 100% 8px; - - h1:first-child, - h2:first-child { - border-top: none; - padding-top: 0; - margin-top: 0; - } - - code { - padding: 2px; - background-color: #eaeaea; - border-radius: 2px; - } - - pre { - padding: 2px; - background-color: #eaeaea; - border-radius: 2px; - } -` - -export const ModalFooter = styled(ReactstrapModalFooter)` - margin: 0; - padding: 0; -` - -export const H1 = styled.h1` - font-size: 2.5rem; - font-weight: bold; - - @media (max-width: 992px) { - font-size: 2rem; - } -` - -export const H2 = styled.h2` - border-top: #ccc solid 1px; - padding-top: 1rem; - font-size: 2rem; - font-weight: bold; - margin-top: 2rem; - - @media (max-width: 992px) { - font-size: 1.75rem; - margin-top: 1.25rem; - } -` - -export const H3 = styled.h3` - font-size: 1.75rem; - font-weight: bold; - margin-top: 1.75rem; - - @media (max-width: 992px) { - font-size: 1.5rem; - margin-top: 1.2rem; - } -` - -export const H4 = styled.h4` - font-size: 1.33rem; - font-weight: bold; - margin-top: 2rem; - - @media (max-width: 992px) { - font-size: 1.2rem; - margin-top: 1.2rem; - } -` - -export const H5 = styled.h5` - font-size: 1.1rem; - font-weight: bold; - margin-top: 1.1rem; - - @media (max-width: 992px) { - font-size: 1rem; - margin-top: 1.1rem; - } -` - -export const H6 = styled.h6` - font-size: 1rem; - font-weight: bold; -` - -export const Blockquote = styled.blockquote` - padding: 6px 8px; - border-radius: 3px; - background-color: #f4ebbd; -` - -export const MarkdownWrapper = styled.article` - text-align: justify; -` - -const components = { - h1: H1, - h2: H2, - h3: H3, - h4: H4, - h5: H5, - h6: H6, - a: LinkExternal, - blockquote: Blockquote, - wrapper: MarkdownWrapper, -} - -export function ChangelogButton({ children, ...props }: PropsWithChildren<ButtonProps>) { - const [showChangelog, setShowChangelog] = useState(false) - - const toggleOpen = useCallback(() => { - setShowChangelog(!showChangelog) - }, [showChangelog]) - - const open = useCallback(() => { - setShowChangelog(true) - }, []) - - const close = useCallback(() => { - setShowChangelog(false) - }, []) - - const text = 'Recent updates' - const closeText = 'Close this window' - - return ( - <> - <Button type="button" color="link" onClick={open} title={text} {...props}> - {children} - </Button> - - <Modal centered isOpen={showChangelog} toggle={toggleOpen} fade={false} size="lg"> - <ModalHeader toggle={close} tag="div"> - <H1 className="text-center">{text}</H1> - </ModalHeader> - - <ModalBody> - <MDXProvider components={components}> - <Changelog /> - </MDXProvider> - </ModalBody> - - <ModalFooter> - <Container fluid> - <Row noGutters className="my-2"> - <Col className="d-flex w-100"> - <ButtonOk className="ml-auto" type="button" color="success" onClick={close} title={closeText}> - {'OK'} - </ButtonOk> - </Col> - </Row> - </Container> - </ModalFooter> - </Modal> - </> - ) -} diff --git a/web/src/components/Common/ChartContainer.tsx b/web/src/components/Common/ChartContainer.tsx deleted file mode 100644 index 5f3ec810bc..0000000000 --- a/web/src/components/Common/ChartContainer.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React, { useMemo } from 'react' -import { useResizeDetector } from 'react-resize-detector' -import { Props as ResizeDetectorProps } from 'react-resize-detector/build/ResizeDetector' -import { useInView } from 'react-intersection-observer' - -import { theme } from 'src/theme' -import { ChartContainerInner, ChartContainerOuter } from './PlotLayout' -import { FadeIn } from './FadeIn' - -type ChartContainerDimensions = { - width: number - height: number -} - -export interface ChartContainerProps { - resizeOptions?: ResizeDetectorProps - children: (dimensions: ChartContainerDimensions) => React.ReactNode -} - -export function ChartContainer({ children, resizeOptions }: ChartContainerProps) { - const { width = 0, ref: resizeRef } = useResizeDetector({ handleWidth: true, ...resizeOptions }) - const { inView, ref: intersectionRef } = useInView({ fallbackInView: true }) - const dimensions = useMemo(() => ({ width, height: width / theme.plot.aspectRatio }), [width]) - const childrenWithDims = useMemo(() => children(dimensions), [children, dimensions]) - - return ( - <ChartContainerOuter ref={resizeRef}> - <ChartContainerInner> - <div ref={intersectionRef} style={dimensions}> - {inView && <FadeIn>{childrenWithDims}</FadeIn>} - </div> - </ChartContainerInner> - </ChartContainerOuter> - ) -} diff --git a/web/src/components/Common/ClusterSidebarLayout.tsx b/web/src/components/Common/ClusterSidebarLayout.tsx deleted file mode 100644 index a0b85a3d20..0000000000 --- a/web/src/components/Common/ClusterSidebarLayout.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import styled from 'styled-components' - -export const NarrowPageContainer = styled.div` - display: flex; - flex-direction: column; - max-width: 1500px; - margin: auto; -` diff --git a/web/src/components/Common/ColCustom.tsx b/web/src/components/Common/ColCustom.tsx deleted file mode 100644 index 53b44edf0f..0000000000 --- a/web/src/components/Common/ColCustom.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react' - -import { Col } from 'reactstrap' -import type { ColProps as ReactstrapColProps } from 'reactstrap' - -export interface ColProps extends Omit<ReactstrapColProps, 'ref'> { - readonly xxl?: number -} - -const WIDTHS = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'] - -function ColCustom({ ...restProps }: ColProps) { - return <Col widths={WIDTHS} {...restProps} /> -} - -export { ColCustom } diff --git a/web/src/components/Common/ColoredBox.tsx b/web/src/components/Common/ColoredBox.tsx deleted file mode 100644 index f639020f12..0000000000 --- a/web/src/components/Common/ColoredBox.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from 'styled-components' - -export const ColoredBox = styled.div<{ $color: string; $size: number; $aspect: number }>` - display: inline-block; - margin: auto; - margin-right: ${(props) => props.$size / 2}px; - background-color: ${(props) => props.$color}; - width: ${(props) => props.$size * props.$aspect}px; - height: ${(props) => props.$size}px; - border-radius: 2px; -` diff --git a/web/src/components/Common/ColoredCircle.tsx b/web/src/components/Common/ColoredCircle.tsx deleted file mode 100644 index d0b076448d..0000000000 --- a/web/src/components/Common/ColoredCircle.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from 'styled-components' - -export const ColoredCircle = styled.div<{ $color: string; $size: number }>` - display: inline-block; - margin: auto; - margin-right: ${(props) => props.$size / 2}px; - background-color: ${(props) => props.$color}; - width: ${(props) => props.$size}px; - height: ${(props) => props.$size}px; - border-radius: ${(props) => props.$size / 2}px; -` diff --git a/web/src/components/Common/ColoredHorizontalLineIcon.tsx b/web/src/components/Common/ColoredHorizontalLineIcon.tsx deleted file mode 100644 index e0427cc60e..0000000000 --- a/web/src/components/Common/ColoredHorizontalLineIcon.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React, { SVGProps } from 'react' - -export interface ColoredLineProps extends SVGProps<SVGLineElement> { - width: number - height: number - stroke: string - strokeWidth?: number - strokeDasharray?: string - className?: string -} - -export function ColoredHorizontalLineIcon({ - width, - height, - stroke, - strokeWidth = 1, - strokeDasharray, - className, - ...restProps -}: ColoredLineProps) { - return ( - <span className={className}> - <svg width={width} height={height} xmlns="http://www.w3.org/2000/svg"> - <line - x1={0} - x2={width} - y1={height / 2} - y2={height / 2} - stroke={stroke} - strokeWidth={strokeWidth} - strokeDasharray={strokeDasharray} - {...restProps} - /> - </svg> - </span> - ) -} diff --git a/web/src/components/Common/CountryFlag.tsx b/web/src/components/Common/CountryFlag.tsx deleted file mode 100644 index 0bacc407cb..0000000000 --- a/web/src/components/Common/CountryFlag.tsx +++ /dev/null @@ -1,79 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import React, { FC, ReactElement, SVGProps, useMemo } from 'react' - -import iso3311a2 from 'iso-3166-1-alpha-2' -import Flags from 'country-flag-icons/react/3x2' - -import Africa from 'src/assets/images/continents/Africa.svg' -import Asia from 'src/assets/images/continents/Asia.svg' -import Europe from 'src/assets/images/continents/Europe.svg' -import NorthAmerica from 'src/assets/images/continents/North America.svg' -import Oceania from 'src/assets/images/continents/Oceania.svg' -import SouthAmerica from 'src/assets/images/continents/South America.svg' - -import { FlagWrapper } from './FlagWrapper' - -export const missingCountryCodes: Record<string, string> = { - 'Bolivia': 'BO', - 'Bonaire': 'BQ', - 'Brunei': 'BN', - 'Curacao': 'CW', - 'Democratic Republic of the Congo': 'CD', - 'Eswatini': 'SZ', - 'Iran': 'IR', - 'Kosovo': 'XK', - 'Moldova': 'MD', - 'North Macedonia': 'MK', - 'Republic of the Congo': 'CD', - 'Russia': 'RU', - 'Saint Martin': 'SX', - 'Sint Maarten': 'SX', - 'South Korea': 'KR', - 'USA': 'US', - 'Venezuela': 'VE', - 'Vietnam': 'VN', -} - -export const ContinentIcons: Record<string, FC<SVGProps<SVGElement>>> = { - 'Africa': Africa, - 'Asia': Asia, - 'Europe': Europe, - 'North America': NorthAmerica, - 'Oceania': Oceania, - 'South America': SouthAmerica, -} - -export function getFlagComponent(country: string, withFallback?: boolean): ReactElement | null { - const countryCode = missingCountryCodes[country] ?? iso3311a2.getCode(country) ?? '?' - - const Flag = Flags[countryCode] - if (Flag) { - return ( - <FlagWrapper> - <Flag /> - </FlagWrapper> - ) - } - - const ContinentIcon = ContinentIcons[country] - if (ContinentIcon) { - return ( - <FlagWrapper> - <ContinentIcon fill="#444444" /> - </FlagWrapper> - ) - } - - return withFallback ? <FlagWrapper /> : null -} - -export interface CountryFlagProps extends SVGProps<SVGSVGElement> { - country: string - withFallback?: boolean -} - -export function CountryFlag({ country, withFallback = false }: CountryFlagProps) { - const Flag = useMemo(() => getFlagComponent(country, withFallback), [country, withFallback]) - // eslint-disable-next-line react/jsx-no-useless-fragment - return <>{Flag}</> -} diff --git a/web/src/components/Common/Dropdown.tsx b/web/src/components/Common/Dropdown.tsx deleted file mode 100644 index 51fb7ce2e3..0000000000 --- a/web/src/components/Common/Dropdown.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { useCallback } from 'react' - -import Select from 'react-select' -import type { ActionMeta, OnChangeValue } from 'react-select/dist/declarations/src/types' -import type { StateManagerProps } from 'react-select/dist/declarations/src/useStateManager' - -import { DropdownOption } from 'src/components/Common/DropdownOption' - -export type IsMultiValue = false - -export interface DropdownProps extends StateManagerProps<DropdownOption<string>, IsMultiValue> { - identifier: string - defaultOption?: DropdownOption<string> - onValueChange?(value: string): void - onOptionChange?(option: DropdownOption<string>): void -} - -export function Dropdown({ - className, - identifier, - options, - defaultOption, - value, - onOptionChange, - onValueChange, - ...restProps -}: DropdownProps) { - const handleChange = useCallback( - (option: OnChangeValue<DropdownOption<string>, IsMultiValue>, _actionMeta: ActionMeta<DropdownOption<string>>) => { - if (option) { - onValueChange?.(option.value) - onOptionChange?.(option) - } - }, - [onOptionChange, onValueChange], - ) - - return ( - <Select - className={className} - id={identifier} - name={identifier} - options={options} - defaultValue={defaultOption} - value={value} - isMulti={false} - onChange={handleChange} - {...restProps} - /> - ) -} diff --git a/web/src/components/Common/DropdownOption.ts b/web/src/components/Common/DropdownOption.ts deleted file mode 100644 index 52a54198c5..0000000000 --- a/web/src/components/Common/DropdownOption.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface DropdownOption<ValueType extends string | number> { - value: ValueType - label: string -} - -export function stringToOption(value: string): DropdownOption<string> { - return { value, label: value } -} - -export function stringsToOptions(values: string[]): DropdownOption<string>[] { - return values.map(stringToOption) -} diff --git a/web/src/components/Common/FadeIn.tsx b/web/src/components/Common/FadeIn.tsx deleted file mode 100644 index af4db8992b..0000000000 --- a/web/src/components/Common/FadeIn.tsx +++ /dev/null @@ -1,35 +0,0 @@ -// https://www.joshwcomeau.com/snippets/react-components/fade-in/ - -import React, { PropsWithChildren } from 'react' -import styled, { keyframes } from 'styled-components' - -export interface FadeInProps { - duration?: number - delay?: number -} - -export function FadeIn({ duration = 300, delay = 0, children }: PropsWithChildren<FadeInProps>) { - return ( - <Wrapper $delay={delay} $duration={duration}> - {children} - </Wrapper> - ) -} - -const fadeIn = keyframes` - from { - opacity: 0; - } - to { - opacity: 1; - } -` - -const Wrapper = styled.div<{ $delay?: number; $duration?: number }>` - @media (prefers-reduced-motion: no-preference) { - animation-name: ${fadeIn}; - animation-fill-mode: backwards; - animation-delay: ${(props) => props.$delay}ms; - animation-duration: ${(props) => props.$duration}ms; - } -` diff --git a/web/src/components/Common/FlagWrapper.tsx b/web/src/components/Common/FlagWrapper.tsx deleted file mode 100644 index 6fef9f136c..0000000000 --- a/web/src/components/Common/FlagWrapper.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import styled from 'styled-components' - -export const FlagWrapper = styled.div` - height: calc(1em + 2px); - width: calc(1.5em + 2px); - border: 1px solid #ced4da; - display: flex; - > * { - width: 100%; - height: 100%; - } -` diff --git a/web/src/components/Common/GifPlayer.tsx b/web/src/components/Common/GifPlayer.tsx deleted file mode 100644 index 5bc482a1c8..0000000000 --- a/web/src/components/Common/GifPlayer.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import dynamic from 'next/dynamic' - -const GifPlayer = dynamic(() => import('react-gif-player'), { ssr: false }) - -export default GifPlayer diff --git a/web/src/components/Common/LastUpdated.tsx b/web/src/components/Common/LastUpdated.tsx deleted file mode 100644 index a7a12292ce..0000000000 --- a/web/src/components/Common/LastUpdated.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React, { HTMLProps } from 'react' -import styled from 'styled-components' -import classNames from 'classnames' - -import { getLastUpdatedDate, getLastUpdatedFull } from 'src/io/getLastUpdatedDate' - -const LAST_UPDATED_DATE = `Last updated: ${getLastUpdatedDate()}` -const LAST_UPDATED_FULL = `Last updated on: ${getLastUpdatedFull()}` - -const LastUpdatedText = styled.small` - font-size: 0.9rem; -` - -export function LastUpdated({ className }: HTMLProps<HTMLParagraphElement>) { - return ( - <LastUpdatedText className={classNames(className)}> - <span className="ml-1" title={LAST_UPDATED_FULL}> - {LAST_UPDATED_DATE} - </span> - </LastUpdatedText> - ) -} diff --git a/web/src/components/Common/LinkOpenInNewTab.tsx b/web/src/components/Common/LinkOpenInNewTab.tsx deleted file mode 100644 index a61a9e3006..0000000000 --- a/web/src/components/Common/LinkOpenInNewTab.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React, { PropsWithChildren } from 'react' - -import styled from 'styled-components' -import { GoLinkExternal } from 'react-icons/go' - -import { LinkExternal } from 'src/components/Link/LinkExternal' - -const ProposeChangesLink = styled(LinkExternal)` - color: ${(props) => props.theme.gray500}; - text-decoration: none; - - &:hover { - color: ${(props) => props.theme.gray500}; - text-decoration: none; - } -` - -const ProposeChangesIcon = styled.span` - margin-right: 0.25rem; - color: ${(props) => props.theme.gray500}; -` - -const ProposeChangesText = styled.span` - font-size: 0.85rem; -` - -export interface LinkOpenInNewTabProps { - href: string - text?: string -} - -export function LinkOpenInNewTab({ href, text, children, ...restProps }: PropsWithChildren<LinkOpenInNewTabProps>) { - return ( - <ProposeChangesLink href={href}> - <ProposeChangesIcon> - <GoLinkExternal /> - </ProposeChangesIcon> - <ProposeChangesText>{text ?? 'Propose changes to this section'}</ProposeChangesText> - </ProposeChangesLink> - ) -} diff --git a/web/src/components/Common/MdxWrapper.tsx b/web/src/components/Common/MdxWrapper.tsx deleted file mode 100644 index 5abca6f037..0000000000 --- a/web/src/components/Common/MdxWrapper.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react' - -import styled from 'styled-components' - -export const MdxSection = styled.section` - margin: 10px 5px; - padding: 0.65rem 2rem; - background-color: ${(props) => props.theme.gray100}; - box-shadow: ${(props) => props.theme.shadows.slight}; - border-radius: 3px; -` - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function MdxWrapper(props: any) { - return <MdxSection {...props} /> -} diff --git a/web/src/components/Common/NameTable.tsx b/web/src/components/Common/NameTable.tsx deleted file mode 100644 index cea8a9c73a..0000000000 --- a/web/src/components/Common/NameTable.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import React, { ReactNode, useMemo } from 'react' - -import { Table as TableBase, Thead, Tbody, Tr, Th, Td } from 'react-super-responsive-table' -import styled from 'styled-components' - -import { LinkExternal } from 'src/components/Link/LinkExternal' -import type { NameTableDatum, NameTableEntry } from 'src/io/getNameTable' -import { NAME_TABLE } from 'src/io/getNameTable' -import { LineageLinkBadge, Var, WhoBadge } from './MutationBadge' - -const Table = styled(TableBase)` - max-width: 800px; - margin-left: auto; - margin-right: auto; - border-collapse: collapse; - - & > thead > tr, - & > tbody > tr, - & > tbody > td { - border: #aaa solid 1px; - border-collapse: collapse; - } - - & > tbody > tr:nth-child(even) { - background-color: white; - } - - & > tbody > tr:nth-child(odd) { - background-color: #f5f5f5; - } - - & > thead > tr > th { - font-size: 0.9rem; - text-align: center; - height: 3rem; - border: #aaa solid 1px; - } - - & > tbody > tr > td { - font-family: ${(props) => props.theme.font.monospace}; - font-size: 0.8rem; - text-align: left; - border: #aaa solid 1px; - min-width: 100px; - padding: 2px; - } -` - -export function joinWithCommas(elems: ReactNode[]): ReactNode { - if (elems.length === 0) { - return ' ' - } - - return elems.reduce((prev, curr) => [prev, ', ', curr]) -} - -export interface NameTableEntryProps { - entry: NameTableEntry -} - -export function NameTableEntryComponent({ entry }: NameTableEntryProps) { - const { name, url } = entry - - if (!url) { - return <span>{name}</span> - } - - return <LinkExternal href={url}>{name}</LinkExternal> -} - -export interface NameTableRowProps { - datum: NameTableDatum -} - -export function NameTableRow({ datum }: NameTableRowProps) { - const { clade, lineages, who, others } = datum - - const lineageEntries = useMemo( - () => - joinWithCommas( - lineages.map<ReactNode>((entry) => ( - <LineageLinkBadge key={entry.name} name={entry.name} href={entry.url ?? undefined} prefix="" /> - )), - ), - [lineages], - ) - - const otherEntries = useMemo( - () => joinWithCommas(others.map<ReactNode>((entry) => <NameTableEntryComponent key={entry.name} entry={entry} />)), - [others], - ) - - return ( - <Tr> - <Td> - <Var name={clade} prefix="" /> - </Td> - <Td>{lineageEntries}</Td> - <Td>{who && <WhoBadge name={who} />}</Td> - <Td>{otherEntries}</Td> - </Tr> - ) -} - -export function NameTable() { - return ( - <Table> - <Thead> - <Tr> - <Th>{'Nextstrain Clade'}</Th> - <Th>{'Pango Lineage'}</Th> - <Th> - <LinkExternal href="https://www.who.int/en/activities/tracking-SARS-CoV-2-variants/"> - {'WHO Label'} - </LinkExternal> - </Th> - <Th>{'Other'}</Th> - </Tr> - </Thead> - <Tbody> - {NAME_TABLE.map((datum) => ( - <NameTableRow key={datum.clade} datum={datum} /> - ))} - </Tbody> - </Table> - ) -} diff --git a/web/src/components/Common/NextstrainLogo.tsx b/web/src/components/Common/NextstrainLogo.tsx deleted file mode 100644 index 0e93e0be00..0000000000 --- a/web/src/components/Common/NextstrainLogo.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react' - -import styled from 'styled-components' - -import NextstrainIconBase from 'src/assets/images/nextstrain_logo.svg' - -// Borrowed with modifications from Nextstrain.org -// https://github.com/nextstrain/nextstrain.org/blob/master/static-site/src/components/splash/title.jsx - -const TITLE_COLORS = [ - '#4377CD', - '#5097BA', - '#63AC9A', - '#7CB879', - '#9ABE5C', - '#B9BC4A', - '#D4B13F', - '#E49938', - '#E67030', - '#DE3C26', -] - -const Wrapper = styled.div` - display: flex; - height: 30px; -` - -const NextstrainIcon = styled(NextstrainIconBase)` - width: 28px; - height: 28px; - margin-right: 5px; -` - -const LetterSpan = styled.span<{ pos: number }>` - font-size: 20px; - color: ${(props) => TITLE_COLORS[props.pos]}; -` - -export function NextstrainLogo() { - return ( - <Wrapper> - <NextstrainIcon /> - <span> - {'Nextstrain'.split('').map((letter, i) => ( - // eslint-disable-next-line react/no-array-index-key - <LetterSpan key={`${i}_${letter}`} pos={i}> - {letter} - </LetterSpan> - ))} - </span> - </Wrapper> - ) -} diff --git a/web/src/components/Common/PageHeading.tsx b/web/src/components/Common/PageHeading.tsx deleted file mode 100644 index ceea17ae8d..0000000000 --- a/web/src/components/Common/PageHeading.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import styled from 'styled-components' - -export const PageHeading = styled.h1` - text-align: center; - - @media (min-width: 768px) { - line-height: 1.2; - font-weight: 300; - margin: 1.5rem 0; - } - - @media (min-width: 1120px) { - font-size: 3rem; - margin-top 0; - } -` diff --git a/web/src/components/Common/PlotCardTitle.tsx b/web/src/components/Common/PlotCardTitle.tsx deleted file mode 100644 index aca64b38f3..0000000000 --- a/web/src/components/Common/PlotCardTitle.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import styled from 'styled-components' - -export const PlotCardTitle = styled.h1` - margin: auto; - font-size: ${(props) => props.theme.plot.titleFontSize}; -` diff --git a/web/src/components/Common/PlotLayout.tsx b/web/src/components/Common/PlotLayout.tsx deleted file mode 100644 index 00eff46326..0000000000 --- a/web/src/components/Common/PlotLayout.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import styled from 'styled-components' - -export const WrapperFlex = styled.section` - display: flex; - flex-wrap: wrap; - margin: -0.5rem; -` - -export const SidebarFlex = styled.aside` - @media only screen and (max-width: 768px) { - flex: 1 0 100%; - } - - @media only screen and (min-width: 768px) { - flex: 0 0 320px; - } -` - -export const MainFlex = styled.section` - flex: 1 0 350px; - margin-bottom: 300px; -` - -export const ChartContainerOuter = styled.div` - display: flex; - justify-content: space-evenly; - width: 100%; -` - -export const ChartContainerInner = styled.div` - flex: 0 1 100%; - width: 0; -` diff --git a/web/src/components/Common/PlotPlaceholder.tsx b/web/src/components/Common/PlotPlaceholder.tsx deleted file mode 100644 index 2531ce8acf..0000000000 --- a/web/src/components/Common/PlotPlaceholder.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' - -import styled from 'styled-components' -import { ThreeDots as ThreeDotsLoader } from 'react-loader-spinner' -import { ResponsiveContainer } from 'recharts' - -import { theme } from 'src/theme' -import { ChartContainerOuter, ChartContainerInner } from './PlotLayout' - -const LoadingSpinner = styled(ThreeDotsLoader)` - display: flex; - - svg { - margin: auto; - } -` - -export function PlotPlaceholder() { - return ( - <ChartContainerOuter> - <ChartContainerInner> - <ResponsiveContainer aspect={theme.plot.aspectRatio}> - <LoadingSpinner color={theme.gray400} /> - </ResponsiveContainer> - </ChartContainerInner> - </ChartContainerOuter> - ) -} diff --git a/web/src/components/Common/PoweredBy.tsx b/web/src/components/Common/PoweredBy.tsx deleted file mode 100644 index 5d7e6b5436..0000000000 --- a/web/src/components/Common/PoweredBy.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React from 'react' - -import { Col, Row } from 'reactstrap' -import { LinkExternal } from 'src/components/Link/LinkExternal' -import styled from 'styled-components' - -import { PROJECT_NAME, TEAM_NAME } from 'src/constants' -import VercelLogo from 'src/assets/images/vercel_logo.svg' -import NextJsLogo from 'src/assets/images/nextjs_logo.svg' -import { NextstrainLogo } from './NextstrainLogo' - -const Flex = styled.section` - max-width: 700px; - //width: 100%; -` - -const PoweredByH1 = styled.h1` - font-size: 1.33rem; - margin: 10px auto; -` - -const Ul = styled.ul` - list-style: none; - padding: 0; - - display: flex; - flex-direction: row; - flex-wrap: wrap; - width: 100%; -` - -const Li = styled.li` - flex: 1 0 150px; - display: flex; - width: 200px; - height: 50px; -` - -const Wrapper = styled.div` - margin: auto; -` - -const mainLinks = [ - { - title: 'Nextstrain', - url: `https://nextstrain.org?utm_source=${PROJECT_NAME}`, - alt: 'Link to Nextstrain.org with colorful Nextstrain logo', - icon: <NextstrainLogo />, - }, - { - title: 'Next.js', - url: `https://nextjs.com?utm_source=${TEAM_NAME}&utm_campaign=oss`, - alt: '', - icon: <NextJsLogo height={30} />, - }, - { - title: 'Vercel', - url: `https://vercel.com?utm_source=${TEAM_NAME}&utm_campaign=oss`, - alt: '', - icon: <VercelLogo width={100} />, - }, -] - -export function PoweredBy() { - return ( - <Row noGutters> - <Col> - <Row noGutters> - <Col className="text-center"> - <PoweredByH1>{'Powered by'}</PoweredByH1> - </Col> - </Row> - - <Row noGutters> - <Col className="d-flex"> - <Flex className="mx-auto"> - <Ul> - {mainLinks.map(({ title, url, alt, icon }) => ( - <Li key={title}> - <Wrapper> - <LinkExternal title={title} href={url} alt={alt} icon={null}> - {icon} - </LinkExternal> - </Wrapper> - </Li> - ))} - </Ul> - </Flex> - </Col> - </Row> - </Col> - </Row> - ) -} diff --git a/web/src/components/Common/SeoApp.tsx b/web/src/components/Common/SeoApp.tsx deleted file mode 100644 index b71e2bbaf4..0000000000 --- a/web/src/components/Common/SeoApp.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react' - -import Head from 'next/head' -import { useRouter } from 'next/router' -import urljoin from 'url-join' -import { get } from 'lodash' - -import { DOMAIN, SOCIAL_IMAGE_HEIGHT, SOCIAL_IMAGE_WIDTH, TWITTER_USERNAME_FRIENDLY } from 'src/constants' -import { SEO_DEFAULT, SEO_OVERRIDES } from 'src/seo/seoMetadata' - -const localeFull = 'en-US' - -export function SeoApp() { - const router = useRouter() - const pathname = router.asPath - const url = urljoin(DOMAIN, pathname) - - // eslint-disable-next-line prefer-const - let { name, description, image } = { ...SEO_DEFAULT, ...get(SEO_OVERRIDES, pathname, SEO_DEFAULT) } - - if (image) { - image = urljoin(DOMAIN, image) - } - - return ( - <Head> - <title>{name} - - - - - - - - - - - - - - - - - - - - - - - - - - ) -} diff --git a/web/src/components/Common/SharingPanel.tsx b/web/src/components/Common/SharingPanel.tsx deleted file mode 100644 index 29a25c387f..0000000000 --- a/web/src/components/Common/SharingPanel.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import React, { useCallback, useMemo, useState } from 'react' - -import urljoin from 'url-join' -import { useRouter } from 'next/router' -import styled from 'styled-components' -import { Button, Col, Row } from 'reactstrap' -import { CopyToClipboard } from 'react-copy-to-clipboard' -import { FaClipboard as FaClipboardBase, FaClipboardCheck as FaClipboardCheckBase } from 'react-icons/fa' - -import { - EmailIcon, - EmailShareButton, - FacebookIcon, - FacebookShareButton, - LinkedinIcon, - LinkedinShareButton, - TwitterIcon, - TwitterShareButton, - VKIcon, - VKShareButton, - WeiboIcon, - WeiboShareButton, - WhatsappIcon, - WhatsappShareButton, -} from 'react-share' - -import { - DOMAIN, - FACEBOOK_HASHTAG, - PROJECT_DESCRIPTION, - PROJECT_NAME, - TWITTER_HASHTAGS, - TWITTER_RELATED, - TWITTER_USERNAME_RAW, -} from 'src/constants' - -const SOCIAL_ICON_SIZE = 30 - -const FaClipboard = styled(FaClipboardBase)` - width: 18px; - height: 18px; - color: ${(props) => props.theme.gray600}; -` - -const FaClipboardCheck = styled(FaClipboardCheckBase)` - width: 18px; - height: 18px; - color: ${(props) => props.theme.success}; -` - -const CopyToClipBoardButton = styled(Button)` - padding: 0; - margin: 0; -` - -const SharingPanelH1 = styled.h1` - font-size: 1.33rem; - margin: 15px auto; -` - -const SharingPanelWrapper = styled.aside` - margin: 0 auto 15px; -` - -const SharingButton = styled.span` - margin: 3px; - - & > button, - & > button > svg { - width: ${SOCIAL_ICON_SIZE}px; - height: ${SOCIAL_ICON_SIZE}px; - border-radius: ${SOCIAL_ICON_SIZE / 2}px; - } -` - -function CopyToClipBoardComponent({ url }: { url: string }) { - const [isCopied, setIsCopied] = useState(false) - - const handleOnCopy = useCallback(() => setIsCopied(true), []) - - return ( - - - {isCopied ? : } - - - ) -} - -function getEmailBody(url: string) { - return `${PROJECT_NAME}: ${PROJECT_DESCRIPTION}\n${url}\n` -} - -export function SharingPanel() { - const { asPath } = useRouter() - const url = urljoin(DOMAIN, asPath) - const emailBody = useMemo(() => getEmailBody(url), [url]) - - return ( - - - - - {'Share'} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ) -} diff --git a/web/src/components/Common/TableSlim.tsx b/web/src/components/Common/TableSlim.tsx deleted file mode 100644 index 671e0e0c79..0000000000 --- a/web/src/components/Common/TableSlim.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { HTMLProps } from 'react' - -import { Table as ReactstrapTable } from 'reactstrap' -import styled from 'styled-components' - -export const TableSlim = styled(ReactstrapTable)` - & td { - padding: 0 0.5rem; - } - - & tr { - margin: 0; - padding: 0; - } - - & th { - margin: 0; - padding: 0 0.5rem; - } -` - -export const TableSlimWithBorders = styled(TableSlim)` - & td { - border: 1px solid #ccc; - } - - & th { - border: 1px solid #ccc; - } -` - -export const TableColumnSpacer = styled.td` - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -` - -export function TableRowSpacer(props: HTMLProps) { - return ( - - - - ) -} diff --git a/web/src/components/Common/TeamCredits.tsx b/web/src/components/Common/TeamCredits.tsx deleted file mode 100644 index b332a41ce7..0000000000 --- a/web/src/components/Common/TeamCredits.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React from 'react' - -import { Col, Row } from 'reactstrap' -import styled from 'styled-components' -import { FaGithub, FaTwitter } from 'react-icons/fa' - -import { LinkExternal } from 'src/components/Link/LinkExternal' -import { TeamCreditsContributor } from 'src/components/Common/TeamCreditsContributor' -import { getContributors } from 'src/io/getContributors' - -const contributors = getContributors() - -const Flex = styled.section` - display: flex; - flex-direction: column; - width: 300px; - margin: 10px auto; -` - -const TeamCreditsH1 = styled.h1` - font-size: 1.33rem; - margin: 15px auto; -` - -const Ul = styled.ul` - list-style: none; - padding: 0; - - margin-top: 0.5rem; -` - -const Li = styled.li` - display: inline-block; - margin-left: 5px; - margin-right: 5px; -` - -const NameText = styled.h2` - font-size: 1.1rem; -` - -const AffiliationText = styled.small` - font-size: 0.8rem; -` - -const Portrait = styled.img` - margin: 0 auto; - width: 100px; - border-radius: 100px; -` - -const FlexContributors = styled.section` - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: space-evenly; - - width: 100%; - max-width: 1500px; - margin: 10px auto; -` - -const mainLinks = [ - { - title: 'Twitter', - url: `https://twitter.com/firefoxx66`, - alt: 'Link to Twitter, with blue Twitter bird logo', - icon: , - }, - { - title: 'GitHub', - url: 'https://github.com/emmahodcroft', - alt: 'Link to Github page, with grey Github Octocat logo', - icon: , - }, -] - -export function TeamCredits() { - return ( - - - - - {'CoVariants is brought to you by'} - - - - - - - - {'Emma Hodcroft, PhD'} - {'Institute of Social and Preventive Medicine'} - {'University of Bern, Switzerland'} - {'& SIB Swiss Insitute of Bioinformatics, Switzerland'} -
    - {mainLinks.map(({ title, url, alt, icon }) => ( -
  • - - {icon} - -
  • - ))} -
-
- -
- - - - - {contributors.map((contributor) => ( - - ))} - - - - -
- ) -} diff --git a/web/src/components/Common/TeamCreditsContributor.tsx b/web/src/components/Common/TeamCreditsContributor.tsx deleted file mode 100644 index 22500fab6e..0000000000 --- a/web/src/components/Common/TeamCreditsContributor.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react' - -import type { ContributorData } from 'json-loader!src/../../.all-contributorsrc' -import { LinkExternal as LinkExternalBase } from 'src/components/Link/LinkExternal' - -import styled from 'styled-components' - -const FlexOuter = styled.section` - display: flex; - flex: 0 0 150px; - - flex-direction: column; - padding: 15px; -` - -const FlexInner = styled.section` - display: flex; - height: 130px; - - flex-direction: column; - justify-content: flex-start; -` - -const LinkExternal = styled(LinkExternalBase)` - margin: 0 auto; - - text-align: center; - color: ${(props) => props.theme.gray650}; - - &:hover { - color: ${(props) => props.theme.gray650}; - text-decoration: none; - } -` - -const Portrait = styled.img` - margin: auto; - width: 66px; - border-radius: 50px; -` - -const NameText = styled.h2` - margin-top: 10px; - font-size: 0.9rem; - max-width: 130px; -` - -export interface ContributorProps { - contributor: ContributorData -} - -export function TeamCreditsContributor({ contributor }: ContributorProps) { - return ( - - - - - {contributor.name} - - - - ) -} diff --git a/web/src/components/Common/Toggle.tsx b/web/src/components/Common/Toggle.tsx deleted file mode 100644 index 97f7ebfca6..0000000000 --- a/web/src/components/Common/Toggle.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React, { useCallback } from 'react' - -import type { StrictOmit } from 'ts-essentials' -import styled from 'styled-components' -import ReactToggle, { ToggleProps as ReactToggleProps } from 'react-toggle' -import 'react-toggle/style.css' - -export const ToggleBase = styled(ReactToggle)` - &.react-toggle-custom { - & > .react-toggle-track { - background-color: #9c3434; - } - - &.react-toggle--checked > .react-toggle-track { - background-color: #459f25; - } - - &:hover { - & > .react-toggle-track { - background-color: #b95353; - } - - &.react-toggle--checked > .react-toggle-track { - background-color: #5db240; - } - } - } -` - -export interface TogglePropsWithoutChildren extends StrictOmit { - identifier: string - onCheckedChanged: (checked: boolean) => void -} - -export type ToggleProps = React.PropsWithChildren - -export function Toggle({ identifier, className, onCheckedChanged, children, ...props }: ToggleProps) { - const onChange = useCallback( - (e: React.ChangeEvent) => { - onCheckedChanged(e.target.checked) - }, - [onCheckedChanged], - ) - - const Result = - - if (children) { - return ( - - ) - } - - return Result -} diff --git a/web/src/components/Common/ToggleTwoLabels.tsx b/web/src/components/Common/ToggleTwoLabels.tsx deleted file mode 100644 index ae459258ea..0000000000 --- a/web/src/components/Common/ToggleTwoLabels.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import React, { ReactNode, useCallback } from 'react' - -import styled from 'styled-components' -import ReactToggle, { ToggleProps as ReactToggleProps } from 'react-toggle' -import 'react-toggle/style.css' -import { StrictOmit } from 'ts-essentials' - -export const Label = styled.label` - flex: 0; - display: flex; - margin: 0 auto; - word-wrap: normal; - text-overflow: clip; - white-space: nowrap; -` - -export const ToggleTwoLabelsBase = styled(ReactToggle)` - &.react-toggle-two-labels-custom { - & > .react-toggle-track { - background-color: #aac; - } - - .react-toggle-thumb { - border-color: #aac; - } - - &.react-toggle--checked > .react-toggle-track { - background-color: #aac; - } - - &.react-toggle--checked .react-toggle-thumb { - border-color: #aac; - } - - &:hover { - & > .react-toggle-track { - background-color: #aac; - } - - &.react-toggle--checked > .react-toggle-track { - background-color: #aac; - } - } - } -` - -export interface ToggleTwoLabelsProps extends StrictOmit { - identifier: string - onCheckedChanged: (checked: boolean) => void - labelLeft?: ReactNode - labelRight?: ReactNode - className?: string -} - -export function ToggleTwoLabels({ - identifier, - onCheckedChanged, - labelLeft, - labelRight, - className, - ...props -}: ToggleTwoLabelsProps) { - const onChange = useCallback( - (e: React.ChangeEvent) => { - onCheckedChanged(e.target.checked) - }, - [onCheckedChanged], - ) - - return ( - - ) -} diff --git a/web/src/components/Common/USStateCode.tsx b/web/src/components/Common/USStateCode.tsx deleted file mode 100644 index 7470ebbf38..0000000000 --- a/web/src/components/Common/USStateCode.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import React, { SVGProps } from 'react' -import styled from 'styled-components' - -import { FlagWrapper } from './FlagWrapper' - -const FlagText = styled.span` - background: #fff; - font-size: 0.75em; - font-weight: bold; - letter-spacing: 0.05em; - text-align: center; - font-family: ${(props) => props.theme.font.monospace}; - & > :first-child { - color: #d80027; - } - & > :last-child { - color: #2e52b2; - } -` - -export const nameToCode: Record = { - 'Alabama': 'AL', - 'Alaska': 'AK', - 'Arizona': 'AZ', - 'Arkansas': 'AR', - 'California': 'CA', - 'Colorado': 'CO', - 'Connecticut': 'CT', - 'Delaware': 'DE', - 'Florida': 'FL', - 'Georgia': 'GA', - 'Guam': 'GU', - 'Hawaii': 'HI', - 'Idaho': 'ID', - 'Illinois': 'IL', - 'Indiana': 'IN', - 'Iowa': 'IA', - 'Kansas': 'KS', - 'Kentucky': 'KY', - 'Louisiana': 'LA', - 'Maine': 'ME', - 'Maryland': 'MD', - 'Massachusetts': 'MA', - 'Michigan': 'MI', - 'Minnesota': 'MN', - 'Mississippi': 'MS', - 'Missouri': 'MO', - 'Montana': 'MT', - 'Nebraska': 'NE', - 'Nevada': 'NV', - 'New Hampshire': 'NH', - 'New Jersey': 'NJ', - 'New Mexico': 'NM', - 'New York': 'NY', - 'North Carolina': 'NC', - 'North Dakota': 'ND', - 'Northern Mariana Islands': 'MP', - 'Ohio': 'OH', - 'Oklahoma': 'OK', - 'Oregon': 'OR', - 'Pennsylvania': 'PA', - 'Puerto Rico': 'PR', - 'Rhode Island': 'RI', - 'South Carolina': 'SC', - 'South Dakota': 'SD', - 'Tennessee': 'TN', - 'Texas': 'TX', - 'USA': 'US', - 'Utah': 'UT', - 'Vermont': 'VT', - 'Virgin Islands': 'VI', - 'Virginia': 'VA', - 'Washington DC': 'DC', - 'Washington': 'WA', - 'West Virginia': 'WV', - 'Wisconsin': 'WI', - 'Wyoming': 'WY', -} - -export interface USStateCodeProps extends SVGProps { - country: string - state?: string - withFallback?: boolean -} - -export function USStateCode({ country, state = country, withFallback = false }: USStateCodeProps) { - const stateCode = nameToCode[state] - const fallback = withFallback ? : null - return stateCode ? ( - - - {stateCode[0]} - {stateCode[1]} - - - ) : ( - fallback - ) -} diff --git a/web/src/components/Common/__tests__/parseAminoacidMutation.test.ts b/web/src/components/Common/__tests__/parseAminoacidMutation.test.ts deleted file mode 100644 index 166bd73a96..0000000000 --- a/web/src/components/Common/__tests__/parseAminoacidMutation.test.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { parseAminoacidMutation } from 'src/components/Common/parseAminoacidMutation' - -describe('parseAminoacidMutation', () => { - it('should parse gene, ref, position, right', () => { - expect(parseAminoacidMutation('Gene1:V123S')).toStrictEqual({ gene: 'Gene1', left: 'V', pos: 123, right: 'S' }) - }) - - it('should parse different gene, ref, position, right', () => { - expect(parseAminoacidMutation('ORF1a:T2153I')).toStrictEqual({ - gene: 'ORF1a', - left: 'T', - pos: 2153, - right: 'I', - }) - }) - - it('should parse position', () => { - expect(parseAminoacidMutation('123')).toStrictEqual({ - gene: undefined, - left: undefined, - pos: 123, - right: undefined, - }) - }) - - it('should parse gene, position, right', () => { - expect(parseAminoacidMutation('S:123V')).toStrictEqual({ - gene: 'S', - left: undefined, - pos: 123, - right: 'V', - }) - }) - - it('should parse position, right', () => { - expect(parseAminoacidMutation('123V')).toStrictEqual({ - gene: undefined, - left: undefined, - pos: 123, - right: 'V', - }) - }) - - it('should parse gene, left, position', () => { - expect(parseAminoacidMutation('S:V123')).toStrictEqual({ - gene: 'S', - left: 'V', - pos: 123, - right: undefined, - }) - }) - - it('should parse left, position', () => { - expect(parseAminoacidMutation('V123')).toStrictEqual({ - gene: undefined, - left: 'V', - pos: 123, - right: undefined, - }) - }) - - it('should reject one letter', () => { - expect(parseAminoacidMutation('V')).toBeUndefined() - }) - - it('should reject multiple letters', () => { - expect(parseAminoacidMutation(':VS')).toBeUndefined() - }) - - it('should reject empty input', () => { - expect(parseAminoacidMutation('')).toBeUndefined() - }) - - it('should reject non-mutation-like input', () => { - expect(parseAminoacidMutation('hello!')).toBeUndefined() - }) - - it('should reject letters in position', () => { - expect(parseAminoacidMutation(':G1X3T')).toBeUndefined() - }) -}) diff --git a/web/src/components/Common/__tests__/parseNucleotideMutation.test.ts b/web/src/components/Common/__tests__/parseNucleotideMutation.test.ts deleted file mode 100644 index f67857c624..0000000000 --- a/web/src/components/Common/__tests__/parseNucleotideMutation.test.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { parseNucleotideMutation } from 'src/components/Common/parseNucleotideMutation' - -describe('parseNucleotideMutation', () => { - it('should parse left, position, right', () => { - expect(parseNucleotideMutation('A123C')).toStrictEqual({ left: 'A', pos: 123, right: 'C' }) - }) - - it('should parse position', () => { - expect(parseNucleotideMutation('123')).toStrictEqual({ left: undefined, pos: 123, right: undefined }) - }) - - it('should parse position, right', () => { - expect(parseNucleotideMutation('123C')).toStrictEqual({ left: undefined, pos: 123, right: 'C' }) - }) - - it('should parse left, position', () => { - expect(parseNucleotideMutation('A123')).toStrictEqual({ left: 'A', pos: 123, right: undefined }) - }) - - it('should parse different left, position, right', () => { - expect(parseNucleotideMutation('T43516N')).toStrictEqual({ left: 'T', pos: 43_516, right: 'N' }) - }) - - it('should parse left "-", position, right', () => { - expect(parseNucleotideMutation('-123C')).toStrictEqual({ left: '-', pos: 123, right: 'C' }) - }) - - it('should parse left, position, right "-"', () => { - expect(parseNucleotideMutation('A123-')).toStrictEqual({ left: 'A', pos: 123, right: '-' }) - }) - - it('should parse left "-", position and right "-"', () => { - expect(parseNucleotideMutation('-123-')).toStrictEqual({ left: '-', pos: 123, right: '-' }) - }) - - it('should reject empty', () => { - expect(parseNucleotideMutation('')).toBeUndefined() - }) - - it('should reject non-mutation-like input', () => { - expect(parseNucleotideMutation('hello!')).toBeUndefined() - }) - - it('should reject when no position', () => { - expect(parseNucleotideMutation('AC')).toBeUndefined() - }) - - it('should reject "-"', () => { - expect(parseNucleotideMutation('-')).toBeUndefined() - }) - - it('should reject one letter', () => { - expect(parseNucleotideMutation('A')).toBeUndefined() - }) - - it('should reject letters in position', () => { - expect(parseNucleotideMutation('G1X3T')).toBeUndefined() - }) -}) diff --git a/web/src/components/Common/__tests__/parseVariant.test.ts b/web/src/components/Common/__tests__/parseVariant.test.ts deleted file mode 100644 index dd2c215436..0000000000 --- a/web/src/components/Common/__tests__/parseVariant.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { parseVariant } from 'src/components/Common/parseVariant' - -describe('parseVariant', () => { - it('should accept "20A.EU2"', async () => { - expect(parseVariant('20A.EU2')).toEqual({ - parent: '20A', - parentDelimiter: undefined, - gene: undefined, - left: undefined, - pos: undefined, - right: undefined, - version: '.EU2', - }) - }) - - it('should accept "20E (EU1)"', async () => { - expect(parseVariant('20E (EU1)')).toEqual({ - parent: '20E', - parentDelimiter: undefined, - gene: undefined, - left: undefined, - pos: undefined, - right: undefined, - version: ' (EU1)', - }) - }) - - it('should accept "20I/501Y.V1"', async () => { - expect(parseVariant('20I/501Y.V1')).toEqual({ - parent: '20I', - parentDelimiter: '/', - gene: undefined, - left: undefined, - pos: 501, - right: 'Y', - version: '.V1', - }) - }) - - it('should accept "20C/S:452R"', async () => { - expect(parseVariant('20C/S:452R')).toEqual({ - parent: '20C', - parentDelimiter: '/', - gene: 'S', - left: undefined, - pos: 452, - right: 'R', - version: undefined, - }) - }) -}) diff --git a/web/src/components/CountryDistribution/CountryDistributionPage.tsx b/web/src/components/CountryDistribution/CountryDistributionPage.tsx deleted file mode 100644 index 76f7f09cac..0000000000 --- a/web/src/components/CountryDistribution/CountryDistributionPage.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import React, { useCallback, useMemo } from 'react' -import { Col, Row } from 'reactstrap' -import { useRecoilState } from 'recoil' - -import { CenteredEditable, Editable } from 'src/components/Common/Editable' -import { ColCustom } from 'src/components/Common/ColCustom' -import { SharingPanel } from 'src/components/Common/SharingPanel' -import { RegionSwitcher } from 'src/components/CountryDistribution/RegionSwitcher' -import { DistributionSidebar } from 'src/components/DistributionSidebar/DistributionSidebar' -import { MainFlex, SidebarFlex, WrapperFlex } from 'src/components/Common/PlotLayout' -import { getRegionPerCountryContent } from 'src/io/getRegionContent' - -import { - filterClusters, - filterCountries, - getPerCountryIntroContentFilename, - getRegions, - getPerCountryData, -} from 'src/io/getPerCountryData' -import { - clustersAtom, - ClustersDataFlavor, - disableAllClusters, - enableAllClusters, - toggleCluster, -} from 'src/state/Clusters' -import { - continentsAtom, - countriesAtom, - disableAllCountries, - enableAllCountries, - regionAtom, - toggleContinent, - toggleCountry, -} from 'src/state/Places' -import { CountryDistributionPlotCard } from './CountryDistributionPlotCard' -import { CountryFlag } from '../Common/CountryFlag' -import { USStateCode } from '../Common/USStateCode' -import { PageHeading } from '../Common/PageHeading' - -const enabledFilters = ['clusters', 'countriesWithIcons'] -const { regionNames, regionsHaveData } = getRegions() - -export function CountryDistributionPage() { - const [region, setRegion] = useRecoilState(regionAtom) - const [countries, setCountries] = useRecoilState(countriesAtom(region)) - const [continents, setContinents] = useRecoilState(continentsAtom(region)) - const [clusters, setClusters] = useRecoilState(clustersAtom({ dataFlavor: ClustersDataFlavor.PerCountry, region })) - const { countryDistributions } = useMemo(() => getPerCountryData(region), [region]) - - const regionsTitle = useMemo(() => (region === 'World' ? 'Countries' : 'Regions'), [region]) - - const iconComponent = useMemo(() => { - if (region === 'World') return CountryFlag - if (region === 'United States') return USStateCode - return undefined - }, [region]) - - const { enabledClusters, withClustersFiltered } = useMemo(() => { - const { withCountriesFiltered } = filterCountries(countries, countryDistributions) - const filteredClusters = filterClusters(clusters, withCountriesFiltered) - const { enabledClusters, withClustersFiltered } = filteredClusters - return { enabledClusters, withClustersFiltered } - }, [countries, countryDistributions, clusters]) - - const countryDistributionComponents = useMemo( - () => - withClustersFiltered.map(({ country, distribution }) => ( - - - - )), - [enabledClusters, withClustersFiltered, iconComponent], - ) - - const handleClusterCheckedChange = useCallback( - (cluster: string) => { - setClusters((oldClusters) => toggleCluster(oldClusters, cluster)) - }, - [setClusters], - ) - - const handleClusterSelectAll = useCallback(() => { - setClusters((oldClusters) => enableAllClusters(oldClusters)) - }, [setClusters]) - - const handleClusterDeselectAll = useCallback(() => { - setClusters((oldClusters) => disableAllClusters(oldClusters)) - }, [setClusters]) - - const handleCountryCheckedChange = useCallback( - (countryName: string) => { - setCountries((oldCountries) => toggleCountry(oldCountries, countryName)) - }, - [setCountries], - ) - - const handleContinentCheckedChange = useCallback( - (continentName: string) => { - setContinents((oldContinents) => toggleContinent(oldContinents, continentName)) - }, - [setContinents], - ) - - const handleCountrySelectAll = useCallback(() => { - setCountries(enableAllCountries) - }, [setCountries]) - - const handleCountryDeselectAll = useCallback(() => { - setCountries(disableAllCountries) - }, [setCountries]) - - const IntroContent = useMemo(() => { - const contentFilename = getPerCountryIntroContentFilename(region) - return getRegionPerCountryContent(contentFilename) - }, [region]) - - return ( - <> - - - {'Overview of Variants in Countries'} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {countryDistributionComponents} - - - - - - - - - ) -} diff --git a/web/src/components/CountryDistribution/CountryDistributionPlot.tsx b/web/src/components/CountryDistribution/CountryDistributionPlot.tsx deleted file mode 100644 index 7fc2e7d32c..0000000000 --- a/web/src/components/CountryDistribution/CountryDistributionPlot.tsx +++ /dev/null @@ -1,115 +0,0 @@ -/* eslint-disable camelcase */ -import React, { useMemo } from 'react' - -import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip } from 'recharts' -import { DateTime } from 'luxon' - -import type { CountryDistributionDatum } from 'src/io/getPerCountryData' -import { theme } from 'src/theme' -import { ticks, timeDomain } from 'src/io/getParams' -import { CLUSTER_NAME_OTHERS, getClusterColor } from 'src/io/getClusters' -import { formatDateHumanely, formatProportion } from 'src/helpers/format' -import { adjustTicks } from 'src/helpers/adjustTicks' -import { ChartContainer } from 'src/components/Common/ChartContainer' -import { CountryDistributionPlotTooltip } from './CountryDistributionPlotTooltip' - -const allowEscapeViewBox = { x: false, y: true } - -export interface AreaPlotProps { - width?: number - height?: number - cluster_names: string[] - distribution: CountryDistributionDatum[] -} - -function AreaPlot({ width, height, cluster_names, distribution }: AreaPlotProps) { - const data = useMemo( - () => - distribution.map(({ week, total_sequences, cluster_counts }) => { - const total_cluster_sequences = Object.values(cluster_counts) // prettier-ignore - .reduce((result, count = 0) => result + (count ?? 0), 0) - - const others = total_sequences - total_cluster_sequences - const weekSec = DateTime.fromFormat(week, 'yyyy-MM-dd').toSeconds() - return { week: weekSec, ...cluster_counts, others, total: total_sequences } - }), - [distribution], - ) - - const { adjustedTicks, domainX, domainY } = useMemo(() => { - const adjustedTicks = adjustTicks(ticks, width ?? 0, theme.plot.tickWidthMin).slice(1) // slice ensures first tick is not outside domain - const domainX = [timeDomain[0], timeDomain[1]] - const domainY = [0, 1] - return { adjustedTicks, domainX, domainY } - }, [width]) - - return ( - - - - - {cluster_names.map((cluster) => ( - - ))} - - - - - - - - ) -} - -export interface CountryDistributionPlotProps { - cluster_names: string[] - distribution: CountryDistributionDatum[] -} - -export function CountryDistributionPlot({ cluster_names, distribution }: CountryDistributionPlotProps) { - return ( - - {({ width, height }) => ( - - )} - - ) -} diff --git a/web/src/components/CountryDistribution/CountryDistributionPlotCard.tsx b/web/src/components/CountryDistribution/CountryDistributionPlotCard.tsx deleted file mode 100644 index cf05611917..0000000000 --- a/web/src/components/CountryDistribution/CountryDistributionPlotCard.tsx +++ /dev/null @@ -1,54 +0,0 @@ -/* eslint-disable camelcase */ -import React from 'react' -import { Card, CardBody, CardHeader, Col, Row } from 'reactstrap' -import styled from 'styled-components' - -import type { CountryDistributionDatum } from 'src/io/getPerCountryData' -import { PlotCardTitle } from 'src/components/Common/PlotCardTitle' -import { CountryFlagProps } from 'src/components/Common/CountryFlag' -import { USStateCodeProps } from 'src/components/Common/USStateCode' -import { CountryDistributionPlot } from 'src/components/CountryDistribution/CountryDistributionPlot' - -const FlagAlignment = styled.span` - display: flex; - align-items: center; - > * + * { - margin-left: 0.5em; - } -` -export interface CountryDistributionPlotCardProps { - country: string - distribution: CountryDistributionDatum[] - cluster_names: string[] - Icon?: React.ComponentType -} - -export function CountryDistributionPlotCard({ - country, - distribution, - cluster_names, - Icon, -}: CountryDistributionPlotCardProps) { - return ( - - - - - {Icon && } - {country} - - - - - - - - - - - - - - - ) -} diff --git a/web/src/components/CountryDistribution/CountryDistributionPlotTooltip.tsx b/web/src/components/CountryDistribution/CountryDistributionPlotTooltip.tsx deleted file mode 100644 index 8926975026..0000000000 --- a/web/src/components/CountryDistribution/CountryDistributionPlotTooltip.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React from 'react' - -import { sortBy, reverse } from 'lodash' -import styled from 'styled-components' -import { Props as DefaultTooltipContentProps } from 'recharts/types/component/DefaultTooltipContent' - -import { formatDateBiweekly, formatInteger, formatProportion } from 'src/helpers/format' -import { getClusterColor } from 'src/io/getClusters' -import { ColoredBox } from '../Common/ColoredBox' - -const EPSILON = 1e-2 - -const Tooltip = styled.div` - display: flex; - flex-direction: column; - - padding: 5px 10px; - background-color: ${(props) => props.theme.gray100}; - box-shadow: ${(props) => props.theme.shadows.slight}; - border-radius: 3px; -` - -const TooltipTitle = styled.h1` - font-size: 1rem; - margin: 5px auto; - font-weight: 600; -` - -const TooltipTable = styled.table` - padding: 30px 35px; - font-size: 0.9rem; - border: none; - min-width: 250px; - - & > tbody > tr:nth-child(odd) { - background-color: ${(props) => props.theme.gray200}; - } -` - -const TooltipTableBody = styled.tbody`` - -export const ClusterNameText = styled.span` - font-family: ${(props) => props.theme.font.monospace}; -` - -export function CountryDistributionPlotTooltip(props: DefaultTooltipContentProps) { - const { payload } = props - if (!payload || payload.length === 0) { - return null - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument - const week = formatDateBiweekly(payload[0]?.payload.week) - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument - const total: number = formatInteger(payload[0]?.payload.total ?? 0) - - const payloadSorted = reverse(sortBy(payload, 'value')) - - return ( - - {week} - - - - - {'Variant'} - {'Num seq'} - {'Freq'} - - - - {payloadSorted.map(({ name, value }) => ( - - - - {name} - - {value !== undefined && value > EPSILON ? formatInteger(value) : '-'} - - {value !== undefined && value > EPSILON ? formatProportion(value / total) : '-'} - - - ))} - - - - - {'Total'} - - - {total} - {'1.00'} - - - - - ) -} diff --git a/web/src/components/CountryDistribution/RegionSwitcher.tsx b/web/src/components/CountryDistribution/RegionSwitcher.tsx deleted file mode 100644 index 067562b8f2..0000000000 --- a/web/src/components/CountryDistribution/RegionSwitcher.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React, { useCallback } from 'react' - -import { Button, Col, Row } from 'reactstrap' -import { safeZip } from 'src/helpers/safeZip' -import styled from 'styled-components' - -export const RegionSwitcherContainer = styled.div` - margin: 5px 5px; - padding: 0.65rem 1rem; - border-radius: 3px; -` - -export const RegionSwitcherHeading = styled.h4` - text-align: center; -` - -export const RegionButtonsContainer = styled.span` - display: flex; - flex-wrap: wrap; -` - -export const RegionButtonWrapper = styled.span` - display: flex; - flex-direction: column; - margin: auto; -` - -export const RegionButton = styled(Button)` - flex-wrap: wrap; - flex: 0; - width: 175px; - margin: 5px 5px; -` - -export interface RegionSwitcherProps { - regions: string[] - regionsHaveData: boolean[] - currentRegion: string - setCurrentRegion(region: string): void -} - -export function RegionSwitcher({ regions, regionsHaveData, currentRegion, setCurrentRegion }: RegionSwitcherProps) { - const onRegionButtonClick = useCallback((region: string) => () => setCurrentRegion(region), [setCurrentRegion]) - const getRegionButtonColor = (region: string) => (currentRegion === region ? 'success' : undefined) - - return ( - - - - {'Choose region'} - - - - - - - {safeZip(regions, regionsHaveData).map(([region, regionHaveData]) => ( - - - {region} - - - ))} - - - - - ) -} diff --git a/web/src/components/DistributionSidebar/ClusterFilters.tsx b/web/src/components/DistributionSidebar/ClusterFilters.tsx deleted file mode 100644 index 4801f3bab9..0000000000 --- a/web/src/components/DistributionSidebar/ClusterFilters.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import React, { useCallback } from 'react' - -import { - Button, - CardBody, - Col, - Container, - Form as FormBase, - FormGroup as FormGroupBase, - Input, - Label, - Row, -} from 'reactstrap' - -import type { Cluster } from 'src/state/Clusters' -import { getClusterColor } from 'src/io/getClusters' -import { ColoredBox } from 'src/components/Common/ColoredBox' -import { CardCollapsible } from 'src/components/Common/CardCollapsible' -import styled from 'styled-components' - -export const FormGroup = styled(FormGroupBase)` - flex: 1 0 320px; -` - -export const Form = styled(FormBase)` - display: flex; - flex-wrap: wrap; -` - -export const ClusterNameText = styled.span` - font-family: ${(props) => props.theme.font.monospace}; -` - -export interface ClusterFilterCheckboxProps { - cluster: string - enabled: boolean - onFilterChange(cluster: string): void -} - -export function ClusterFilterCheckbox({ cluster, enabled, onFilterChange }: ClusterFilterCheckboxProps) { - const onChange = useCallback(() => onFilterChange(cluster), [onFilterChange, cluster]) - - return ( - - - - ) -} - -export interface ClusterFiltersProps { - clusters: Cluster[] - collapsed: boolean - onFilterChange(cluster: string): void - onFilterSelectAll(): void - onFilterDeselectAll(): void - setCollapsed(collapsed: boolean): void -} - -export function ClusterFilters({ - clusters, - collapsed, - onFilterSelectAll, - onFilterDeselectAll, - onFilterChange, - setCollapsed, -}: ClusterFiltersProps) { - return ( - - - - - - - - - - - - - - -
- {clusters.map(({ cluster, enabled }) => ( - - ))} - - -
-
-
-
- ) -} diff --git a/web/src/components/DistributionSidebar/CountryFilters.tsx b/web/src/components/DistributionSidebar/CountryFilters.tsx deleted file mode 100644 index a2e38c0fa1..0000000000 --- a/web/src/components/DistributionSidebar/CountryFilters.tsx +++ /dev/null @@ -1,204 +0,0 @@ -import React, { useCallback, useMemo } from 'react' - -import { - Button, - CardBody as CardBodyBase, - Col, - Container, - Form as FormBase, - FormGroup as FormGroupBase, - Input, - Label, - Row, -} from 'reactstrap' -import { Continent, Country } from 'src/state/Places' -import styled, { useTheme } from 'styled-components' - -import type { CountryFlagProps } from 'src/components/Common/CountryFlag' -import { getCountryColor, getCountryStrokeDashArray } from 'src/io/getCountryColor' -import { CardCollapsible } from 'src/components/Common/CardCollapsible' -import { ColoredHorizontalLineIcon } from '../Common/ColoredHorizontalLineIcon' - -export const CardBody = styled(CardBodyBase)`` - -export const FormGroup = styled(FormGroupBase)` - flex: 1 0 320px; -` - -export const Form = styled(FormBase)` - display: flex; - flex-wrap: wrap; -` - -const FlagAlignment = styled.span` - display: inline-flex; - align-items: center; - margin-left: 0.25em; - > * + * { - margin-left: 0.5em; - } -` - -export interface IconOrLineComponentProps { - country: string - Icon?: React.ComponentType -} - -export function IconComponent({ country, Icon }: IconOrLineComponentProps) { - return ( - - {Icon && } - {country} - - ) -} -export function LineComponent({ country }: IconOrLineComponentProps) { - const theme = useTheme() - const { stroke, strokeDasharray } = useMemo(() => { - return { - stroke: getCountryColor(country), - strokeDasharray: getCountryStrokeDashArray(country), - } - }, [country]) - - return ( - <> - - {country} - - ) -} - -export interface CountryFilterCheckboxProps { - country: string - enabled: boolean - withIcons?: boolean - Icon?: React.ComponentType - onFilterChange(country: string): void -} - -export function CountryFilterCheckbox({ - country, - enabled, - withIcons, - Icon, - onFilterChange, -}: CountryFilterCheckboxProps) { - const onChange = useCallback(() => onFilterChange(country), [country, onFilterChange]) - const IconOrLine = useMemo(() => (withIcons ? IconComponent : LineComponent), [withIcons]) - - return ( - - - - ) -} - -export interface CountryFiltersProps { - countries: Country[] - continents: Continent[] - regionsTitle: string - collapsed: boolean - withIcons?: boolean - Icon?: React.ComponentType - onFilterChange(country: string): void - onFilterSelectRegion(regionName: string): void - onFilterSelectAll(): void - onFilterDeselectAll(): void - setCollapsed(collapsed: boolean): void -} - -export function CountryFilters({ - countries, - continents, - regionsTitle, - collapsed, - withIcons, - Icon, - onFilterSelectRegion, - onFilterSelectAll, - onFilterDeselectAll, - onFilterChange, - setCollapsed, -}: CountryFiltersProps) { - const handleContinentChange = useCallback( - (continent: string) => onFilterSelectRegion(continent), - [onFilterSelectRegion], - ) - - const continentCheckboxes = useMemo( - () => - continents.map(({ continent, enabled }) => { - return ( - - ) - }), - [Icon, continents, handleContinentChange], - ) - - const countryCheckboxes = useMemo( - () => - countries.map(({ country, enabled }) => ( - - )), - [Icon, countries, onFilterChange, withIcons], - ) - - return ( - - - - - - - - - - - - - {continents.length > 1 && ( - - -
{continentCheckboxes}
- -
- )} - - - -
{countryCheckboxes}
- -
-
-
-
- ) -} diff --git a/web/src/components/DistributionSidebar/DistributionSidebar.tsx b/web/src/components/DistributionSidebar/DistributionSidebar.tsx deleted file mode 100644 index e34721c547..0000000000 --- a/web/src/components/DistributionSidebar/DistributionSidebar.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import { get } from 'lodash' -import React, { useState, useMemo } from 'react' -import { Col, Row } from 'reactstrap' -import { Cluster } from 'src/state/Clusters' - -import type { Continent, Country } from 'src/state/Places' -import { sortClusters } from 'src/io/getClusters' -import { ClusterFilters } from './ClusterFilters' -import { CountryFilters } from './CountryFilters' - -import { CountryFlagProps } from '../Common/CountryFlag' - -export interface DistributionSidebarProps { - countries: Country[] - continents: Continent[] - clusters?: Cluster[] - regionsTitle: string - clustersCollapsedByDefault?: boolean - countriesCollapsedByDefault?: boolean - enabledFilters: string[] - Icon?: React.ComponentType - onClusterFilterChange(cluster: string): void - onClusterFilterSelectAll(): void - onClusterFilterDeselectAll(): void - onCountryFilterChange(country: string): void - onRegionFilterChange(regionName: string): void - onCountryFilterSelectAll(): void - onCountryFilterDeselectAll(): void -} - -export function DistributionSidebar({ - countries, - continents, - clusters, - regionsTitle, - clustersCollapsedByDefault = true, - countriesCollapsedByDefault = true, - enabledFilters, - Icon, - onClusterFilterChange, - onClusterFilterSelectAll, - onClusterFilterDeselectAll, - onRegionFilterChange, - onCountryFilterChange, - onCountryFilterSelectAll, - onCountryFilterDeselectAll, -}: DistributionSidebarProps) { - const [clustersCollapsed, setClustersCollapsed] = useState(clustersCollapsedByDefault) - const [countriesCollapsed, setCountriesCollapsed] = useState(countriesCollapsedByDefault) - const clustersSorted = useMemo(() => sortClusters(clusters ?? []), [clusters]) - - const availableFilters: { [key: string]: React.ReactNode } = useMemo( - () => ({ - countries: ( - - ), - countriesWithIcons: ( - - ), - clusters: clusters && ( - - ), - }), - [ - Icon, - clustersCollapsed, - clusters, - clustersSorted, - countriesCollapsed, - onClusterFilterChange, - onClusterFilterDeselectAll, - onClusterFilterSelectAll, - onCountryFilterChange, - onCountryFilterDeselectAll, - onCountryFilterSelectAll, - onRegionFilterChange, - regionsTitle, - countries, - continents, - ], - ) - - return ( - - {enabledFilters.map((filterName) => get(availableFilters, filterName))} - - ) -} diff --git a/web/src/components/Faq/FaqPage.tsx b/web/src/components/Faq/FaqPage.tsx deleted file mode 100644 index b13924e49c..0000000000 --- a/web/src/components/Faq/FaqPage.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' - -import { Col, Container, Row } from 'reactstrap' -import { CenteredEditable } from 'src/components/Common/Editable' -import { PageHeading } from 'src/components/Common/PageHeading' - -import Faq from '../../../../content/Faq.md' - -export function FaqPage() { - return ( - - - - {'Frequently asked questions'} - - - - - - - - - - - - ) -} diff --git a/web/src/components/Home/HomePage.tsx b/web/src/components/Home/HomePage.tsx index 411ba6c4aa..5265f70755 100644 --- a/web/src/components/Home/HomePage.tsx +++ b/web/src/components/Home/HomePage.tsx @@ -1,16 +1,13 @@ import React from 'react' -import { Col, Row } from 'reactstrap' +import { Col, Container, Row } from 'reactstrap' import { ClusterButtonPanelLayout } from 'src/components/ClusterButtonPanel/ClusterButtonPanelLayout' - -import { NarrowPageContainer } from 'src/components/Common/ClusterSidebarLayout' import { Editable } from 'src/components/Common/Editable' - import HomeContent from '../../../../content/Home.md' export function HomePage() { return ( - +

CoVariants

@@ -26,6 +23,6 @@ export function HomePage() {
-
+ ) } diff --git a/web/src/components/Layout/Footer.tsx b/web/src/components/Layout/Footer.tsx index 512b89c486..ba3fc48de0 100644 --- a/web/src/components/Layout/Footer.tsx +++ b/web/src/components/Layout/Footer.tsx @@ -1,14 +1,8 @@ import React from 'react' - import { Col, Container, Row } from 'reactstrap' import styled from 'styled-components' - import { PROJECT_NAME, COMPANY_NAME } from 'src/constants' -import { SharingPanel } from 'src/components/Common/SharingPanel' import { LinkExternal } from 'src/components/Link/LinkExternal' -import { TeamCredits } from 'src/components/Common/TeamCredits' -import { PoweredBy } from 'src/components/Common/PoweredBy' - import { getCopyrightYearRange } from 'src/helpers/getCopyrightYearRange' import { getVersionString } from 'src/helpers/getVersionString' @@ -50,24 +44,6 @@ export function FooterContent() { return ( - - - - - - - - - - - - - - - - - - {`${PROJECT_NAME} (c) ${copyrightYearRange} ${COMPANY_NAME}`} diff --git a/web/src/components/Layout/Layout.tsx b/web/src/components/Layout/Layout.tsx index 264c139d89..9995022605 100644 --- a/web/src/components/Layout/Layout.tsx +++ b/web/src/components/Layout/Layout.tsx @@ -1,15 +1,10 @@ import React, { PropsWithChildren } from 'react' -import { ChangelogButton } from 'src/components/Common/ChangelogButton' - import styled from 'styled-components' import { Container as ContainerBase, Row, Col } from 'reactstrap' - import GisaidLogoBase from 'src/assets/images/GISAID_logo.svg' - import { LinkExternal } from 'src/components/Link/LinkExternal' -import { NavigationBar } from './NavigationBar' -import { FooterContent } from './Footer' -import { LastUpdated } from '../Common/LastUpdated' +import { NavigationBar } from 'src/components/Layout/NavigationBar' +import { FooterContent } from 'src/components/Layout/Footer' const Container = styled(ContainerBase)` min-height: 100%; @@ -84,10 +79,6 @@ export function Layout({ children }: PropsWithChildren) { - - - - diff --git a/web/src/components/Layout/NavigationLogo.tsx b/web/src/components/Layout/NavigationLogo.tsx deleted file mode 100644 index 667914083b..0000000000 --- a/web/src/components/Layout/NavigationLogo.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react' - -import { PROJECT_NAME } from 'src/constants' - -export function NavigationLogo() { - return

{PROJECT_NAME}

-} diff --git a/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx b/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx deleted file mode 100644 index 901b922cfe..0000000000 --- a/web/src/components/MutationCounts/MutationCountsSummaryCard.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import React, { Suspense, useMemo } from 'react' -import { Row, Col, CardHeader, Card, CardBody } from 'reactstrap' -import { ErrorBoundary as ErrorBoundaryBase } from 'react-error-boundary' -import styled from 'styled-components' -import type { ClusterDatum } from 'src/io/getClusters' -import { LinkExternal } from 'src/components/Link/LinkExternal' -import { MutationCountsDatum, MutationCountsGeneRecord, useMutationCounts } from 'src/io/getMutationCounts' -import { AminoacidMutationBadge } from 'src/components/Common/MutationBadge' -import { TableSlim } from 'src/components/Common/TableSlim' -import { SPINNER } from 'src/components/Loading/Loading' - -const MutationCountsSummaryCardBody = styled(CardBody)` - padding: 1rem; - padding-top: 0.5rem; -` -export const Table = styled(TableSlim)` - max-width: 350px; - margin: auto; - font-family: ${(props) => props.theme.font.monospace}; - font-size: 0.85rem; -` - -export const Caption = styled.caption` - caption-side: top; - text-align: center; - padding: 0; - color: ${(props) => props.theme.gray700}; - font-size: 1.1rem; - font-weight: bold; -` - -export function formatError(error: unknown) { - let message = 'Unable to load data: ' - if (error instanceof Error) { - message += error.message - } - return message -} - -export interface MutationCountsSummaryRowProps { - total: number - counts: MutationCountsDatum -} - -export function MutationCountsSummaryRow({ total, counts }: MutationCountsSummaryRowProps) { - const freq = useMemo(() => ((100 * counts.count) / total).toFixed(2), [counts.count, total]) - return ( - - - - - {counts.count} - {`${freq}%`} - - ) -} - -export interface MutationCountsSummarySubTableProps { - record: MutationCountsGeneRecord - title: string -} - -export function MutationCountsSummarySubTable({ record, title }: MutationCountsSummarySubTableProps) { - return ( - - - - - - - - - - - - - - - - {record.counts.map((counts) => ( - - ))} - -
{title}
{'Mutation'}{'Count'}{'Frequency'}
{'Total'}{record.total}{'100.00%'}
- ) -} - -export interface MutationCountsSummaryCardBodyContentProps { - currentClusterBuildName: string -} - -export function MutationCountsSummaryCardBodyContent({ - currentClusterBuildName, -}: MutationCountsSummaryCardBodyContentProps) { - const { data } = useMutationCounts(currentClusterBuildName) - - if (!data) { - return null - } - - const { S, others } = data - - return ( - - - - - - - - - - ) -} - -function ErrorFallbackComponent({ error }: { error: unknown }) { - return ( -
-
{`Mutation counts are not yet available`}
-
{process.env.NODE_ENV === 'development' && formatError(error)}
-
- ) -} - -export interface MutationCountsSummaryProps { - currentCluster: ClusterDatum -} - -export function MutationCountsSummaryCard({ currentCluster }: MutationCountsSummaryProps) { - return ( - - - {'Non-defining mutation counts (data from '} - - {'CoV-Spectrum'} - - {')'} - - - - - - - - - - - - - - ) -} diff --git a/web/src/components/SharedMutations/SharedMutations.tsx b/web/src/components/SharedMutations/SharedMutations.tsx deleted file mode 100644 index b7442fdf32..0000000000 --- a/web/src/components/SharedMutations/SharedMutations.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import React, { useMemo, useState } from 'react' - -import styled from 'styled-components' - -import type { MutationShared } from 'src/io/getMutationComparison' -import { - getMutationComparisonVariants, - getMutationComparisonSharedByPos, - getMutationComparisonSharedByCommonness, - getMutationComparisonIndividual, -} from 'src/io/getMutationComparison' -import { AminoacidMutationBadge } from 'src/components/Common/MutationBadge' -import { ToggleTwoLabels } from 'src/components/Common/ToggleTwoLabels' - -const variants = getMutationComparisonVariants() -const sharedByPos = getMutationComparisonSharedByPos() -const sharedByCommonness = getMutationComparisonSharedByCommonness() -const individual = getMutationComparisonIndividual() - -const Table = styled.table` - margin: 0 auto; -` - -const TableHeader = styled.thead` - border: #7b838a solid 1px; -` - -const TableBody = styled.tbody`` - -const Th = styled.th` - width: 120px; - height: 2.5rem; - border: ${(props) => props.theme.gray500} solid 1px; - color: ${(props) => props.theme.gray100}; - background-color: ${(props) => props.theme.gray650}; -` - -const Td = styled.td` - border: ${(props) => props.theme.gray300} solid 1px; -` - -const TdTitle = styled(Td)` - color: ${(props) => props.theme.gray100}; - background-color: ${(props) => props.theme.gray650}; - height: 2.5rem; -` - -const Tr = styled.tr` - text-align: center; - - &:nth-child(odd) { - background-color: ${(props) => props.theme.gray150}; - } -` - -const AdvancedToggleWrapper = styled.div` - flex: 0 0 100%; - display: flex; - transform: scale(0.8); -` - -export interface VariantProps { - variants: string[] - shared: MutationShared -} - -export function Variant({ variants, shared }: VariantProps) { - return ( - - {shared.presence.map((mutation, i) => ( - {mutation && } - ))} - - ) -} - -export function SharedMutations() { - const [byPos, setByPos] = useState(true) - const shared = useMemo(() => (byPos ? sharedByPos : sharedByCommonness), [byPos]) - - const nCols = variants.length - - return ( - - - - {variants.map((variant) => ( - - ))} - - - - - - - {'Shared mutations'} - - {'Sort by: '} - - - - - - <> - {shared.map((shared) => ( - - ))} - - - - {'Other mutations'} - - - <> - {individual.map(({ index, mutations }) => ( - - {mutations.map((mutation, i) => ( - - ))} - - ))} - - -
{variant}
- {mutation && } -
- ) -} diff --git a/web/src/components/SharedMutations/SharedMutationsPage.tsx b/web/src/components/SharedMutations/SharedMutationsPage.tsx deleted file mode 100644 index 7c5d66cde7..0000000000 --- a/web/src/components/SharedMutations/SharedMutationsPage.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react' - -import { Col, Container, Row } from 'reactstrap' -import styled from 'styled-components' - -import { Editable, CenteredEditable } from 'src/components/Common/Editable' - -import SharedMutationsIntro from '../../../../content/SharedMutations.md' -import { SharedMutations } from './SharedMutations' -import { PageHeading } from '../Common/PageHeading' - -export const SharedMutationsPageContainer = styled(Container)` - max-width: 1200px; -` - -export const SharedMutationsWrapper = styled.div` - display: block; - flex: 0; - overflow-x: auto; -` - -export function SharedMutationsPage() { - return ( - - - - {'Shared mutations'} - - - - - - - - - - - - - - - - - - - - - - ) -} diff --git a/web/src/components/Variants/AquariaLinksCard.tsx b/web/src/components/Variants/AquariaLinksCard.tsx deleted file mode 100644 index 4e85663204..0000000000 --- a/web/src/components/Variants/AquariaLinksCard.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React, { useMemo } from 'react' - -import styled from 'styled-components' - -import { Card, CardBody, CardHeader, Col, Row } from 'reactstrap' - -import type { ClusterDatum } from 'src/io/getClusters' -import { LinkExternal } from 'src/components/Link/LinkExternal' -import { ProteinBadge as ProteinBadgeBase } from 'src/components/Common/MutationBadge' - -import AquariaLogo from 'src/assets/images/aquaria.svg' - -const AquariaLogoSmall = styled(AquariaLogo)` - margin: auto 5px; - width: 25px; - height: 25px; -` - -const AquariaLinksCardBody = styled(CardBody)` - padding-top: 5px; - padding-bottom: 5px; -` - -const AquariaLinksCardHeading = styled.h1` - display: inline; - margin: auto 0; - font-size: 1.2rem; -` - -const ProteinBadge = styled(ProteinBadgeBase)` - margin: 0.25rem; -` - -export interface AquariaLinksCardProps { - cluster: ClusterDatum -} - -export function AquariaLinksCardTitle({ cluster }: AquariaLinksCardProps) { - return ( - - - {`Aquaria protein visualisation for ${cluster.display_name}`} - - ) -} - -export function AquariaLinksCard({ cluster }: AquariaLinksCardProps) { - const proteinBadges = useMemo( - () => - (cluster?.aquaria_urls ?? []).map(({ gene, url }) => ( - - - - )), - [cluster.aquaria_urls], - ) - - const title = useMemo(() => , [cluster]) - - return ( - - {title} - - - {proteinBadges} - - - - ) -} diff --git a/web/src/components/Variants/CladeSchema.tsx b/web/src/components/Variants/CladeSchema.tsx deleted file mode 100644 index c10abda7da..0000000000 --- a/web/src/components/Variants/CladeSchema.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react' -import { LinkExternal } from 'src/components/Link/LinkExternal' - -import styled from 'styled-components' - -import CladeSchemaSvg from 'src/assets/images/clades.svg' - -const CladeSchemaFigure = styled.figure` - display: flex; - width: 100%; - max-width: 850px; - flex-direction: column; - margin: 0 auto; -` - -const CladeSchemaPicture = styled.picture` - flex: 0 1 100%; -` - -const CladeSchemaFigcaption = styled.figcaption` - flex: 1 1 100%; -` - -export function CladeSchema() { - return ( - - - - - - - {'Phylogenetic relationships of Nextstrain SARS-CoV-2 clades ('} - {'source'} - {'). Please credit/link to '} - {'Nextstrain'} - {' if using this figure.'} - - - - ) -} diff --git a/web/src/components/Variants/ClusterContentLoading.tsx b/web/src/components/Variants/ClusterContentLoading.tsx deleted file mode 100644 index f50884e98d..0000000000 --- a/web/src/components/Variants/ClusterContentLoading.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react' - -import { Col, Container, Row } from 'reactstrap' - -import { URL_GITHUB } from 'src/constants' -import { LinkExternal } from 'src/components/Link/LinkExternal' - -export type ClusterContentLoadingProps = { - error?: Error | null -} - -export function ClusterContentLoading({ error }: ClusterContentLoadingProps) { - if (!error) { - return null - } - - return ( - - - -

{'Details are not yet available for this variant'}

- -
- - - -

- {'Consider '} - {'contributing on Github'} -

- -
-
- ) -} diff --git a/web/src/components/Variants/DefiningMutations.tsx b/web/src/components/Variants/DefiningMutations.tsx deleted file mode 100644 index b621fe9f72..0000000000 --- a/web/src/components/Variants/DefiningMutations.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import React from 'react' - -import styled from 'styled-components' - -import type { ClusterDatum } from 'src/io/getClusters' -import { AminoacidMutationBadge, NucleotideMutationBadge } from 'src/components/Common/MutationBadge' -import { Row, Col } from 'reactstrap' - -const Container = styled.div` - width: 100%; - margin: 10px 5px; - padding: 0.65rem 1rem; - box-shadow: ${(props) => props.theme.shadows.light}; - border-radius: 3px; -` - -const Ul = styled.ul` - list-style: none; - padding: 0; -` - -const Li = styled.li` - line-height: 1.33rem; - padding: 0; -` - -const H3 = styled.h3` - font-size: 1.2rem; -` - -const H4 = styled.h4` - font-size: 1rem; -` - -export function NoMutations() { - return

{'None. See notes below'}

-} - -export interface DefiningMutationsProps { - cluster: ClusterDatum -} - -export function hasDefiningMutations(cluster: ClusterDatum) { - // prettier-ignore - const hasNonsynonymous = - cluster.mutations?.nonsynonymous?.length !== undefined && - cluster.mutations?.nonsynonymous?.length > 0 - - // prettier-ignore - const hasSynonymous = - cluster.mutations?.synonymous?.length !== undefined && - cluster.mutations?.synonymous?.length > 0 - - return hasNonsynonymous || hasSynonymous -} - -export function DefiningMutations({ cluster }: DefiningMutationsProps) { - if (!cluster?.mutations) { - return null - } - - const hasNonsynonymous = cluster.mutations?.nonsynonymous?.length && cluster.mutations?.nonsynonymous?.length > 0 - const hasSynonymous = cluster.mutations?.synonymous?.length && cluster.mutations?.synonymous?.length > 0 - - return ( - - - -

{'Defining mutations'}

- -
- - - -

{'Nonsynonymous'}

- {hasNonsynonymous ? ( -
    - {cluster.mutations?.nonsynonymous?.map((mutation) => ( -
  • - -
  • - ))} -
- ) : ( - - )} - - - -

{'Synonymous'}

- {hasSynonymous ? ( -
    - {cluster.mutations?.synonymous?.map((mutation) => ( -
  • - -
  • - ))} -
- ) : ( - - )} - -
-
- ) -} diff --git a/web/src/components/Variants/PlotCard.tsx b/web/src/components/Variants/PlotCard.tsx deleted file mode 100644 index 76ee9c2933..0000000000 --- a/web/src/components/Variants/PlotCard.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, { useMemo } from 'react' -import { getClusterDistribution, getCountryNames } from 'src/io/getPerClusterData' - -import styled from 'styled-components' -import { GoGraph } from 'react-icons/go' -import { Card, CardBody, Col, Row } from 'reactstrap' - -import { theme } from 'src/theme' -import { ClusterDistributionPlot } from 'src/components/ClusterDistribution/ClusterDistributionPlot' -import { ClusterDatum } from 'src/io/getClusters' - -import { Link } from '../Link/Link' - -const PlotCardTitleIcon = styled(GoGraph)` - margin: auto 5px; - width: 20px; - height: 20px; -` - -const PlotCardBody = styled(CardBody)` - padding: 0; -` - -const PlotCardHeading = styled.h1` - display: inline; - margin: auto 0; - font-size: 1.2rem; -` - -export interface PlotCardProps { - cluster: ClusterDatum -} - -export function PlotCardTitle({ cluster }: PlotCardProps) { - return ( - - - {`Distribution of ${cluster.display_name} per country`} - - - {'Compare'} - - - - ) -} - -export function PlotCard({ cluster }: PlotCardProps) { - const title = useMemo(() => , [cluster]) - const clusterDistribution = useMemo( - () => getClusterDistribution(cluster.display_name).distribution, - [cluster.display_name], - ) - const countryNames = useMemo(() => getCountryNames(), []) - - return ( - - {title} - - - - - - - - - ) -} diff --git a/web/src/components/Variants/ProteinCard.tsx b/web/src/components/Variants/ProteinCard.tsx deleted file mode 100644 index c5199c9727..0000000000 --- a/web/src/components/Variants/ProteinCard.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import React, { useCallback, useEffect, useMemo, useState } from 'react' - -import styled from 'styled-components' -import { SiMoleculer } from 'react-icons/si' -import { Card, CardBody, CardHeader, Col, Container, Row } from 'reactstrap' - -import { URL_GITHUB } from 'src/constants' -import type { ClusterDatum } from 'src/io/getClusters' -import { LinkExternal } from 'src/components/Link/LinkExternal' -import GifPlayer from 'src/components/Common/GifPlayer' - -import GisaidLogo from 'src/assets/images/GISAID_logo.svg' - -const ProteinCardTitleIcon = styled(SiMoleculer)` - margin: auto 5px; - width: 20px; - height: 20px; -` - -const ProteinCardBody = styled(CardBody)` - padding: 0; -` - -const ProteinCardHeading = styled.h1` - display: inline; - margin: auto 0; - font-size: 1.2rem; -` - -const GifPlayerWrapper = styled.div` - display: flex; - - margin: auto; - min-height: 200px; - - .gif_player { - margin: auto; - height: 100%; - - img { - margin: 0 auto; - } - } -` - -export interface ProteinCardProps { - cluster: ClusterDatum -} - -export function ProteinCardTitle({ cluster }: ProteinCardProps) { - return ( - - - {`Spike protein model for ${cluster.display_name}`} - - ) -} - -export function Placeholder() { - return ( - - - -

{'Spike protein model is not yet available for this variant'}

- -
- - - -

- {'Consider '} - - {'contributing on Github'} - -

- -
-
- ) -} - -enum GifPlayerCondition { - success, - error, - loading, -} - -export function ProteinCard({ cluster }: ProteinCardProps) { - const [condition, setCondition] = useState(GifPlayerCondition.loading) - - useEffect(() => { - setCondition(GifPlayerCondition.loading) - }, [cluster]) - - const title = useMemo(() => , [cluster]) - const style: { visibility: 'visible' | 'hidden' } = useMemo( - () => ({ visibility: condition === GifPlayerCondition.success ? 'visible' : 'hidden' }), - [condition], - ) - - const handleError = useCallback(() => { - setCondition(GifPlayerCondition.error) - }, []) - - const handleLoad = useCallback(() => { - setCondition(GifPlayerCondition.success) - }, []) - - const Player = useMemo(() => { - if (condition === GifPlayerCondition.error) { - return - } - - return ( - - ) - }, [cluster.build_name, condition, handleError, handleLoad, style]) - - return ( - - {title} - - - - {Player} -
- - {`Spike protein model for ${cluster.display_name}. Figure made via `} - - - - -
- -
-
-
- ) -} diff --git a/web/src/components/Variants/VariantTitle.tsx b/web/src/components/Variants/VariantTitle.tsx deleted file mode 100644 index 0a622c3fab..0000000000 --- a/web/src/components/Variants/VariantTitle.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React, { useMemo } from 'react' -import { ClusterDatum } from 'src/io/getClusters' - -import styled from 'styled-components' - -const VariantTitleWrapper = styled.header` - text-align: center; - min-height: 90px; -` - -const ClusterNameTitle = styled.h1`` - -const ClusterNameSubtitle = styled.p` - margin-bottom: 0; - text-align: center; -` - -export interface VariantTitleProps { - cluster?: ClusterDatum -} - -export function VariantTitle({ cluster }: VariantTitleProps) { - const subtitle = useMemo(() => { - if (!cluster?.alt_display_name || cluster?.alt_display_name?.length === 0) { - return null - } - - return ( - - {`also known as `} - {cluster.alt_display_name.join(', ')} - - ) - }, [cluster?.alt_display_name]) - - return ( - - {cluster?.display_name && `Variant: ${cluster?.display_name}`} - {subtitle} - - ) -} diff --git a/web/src/components/Variants/VariantsPage.tsx b/web/src/components/Variants/VariantsPage.tsx deleted file mode 100644 index d0b052511f..0000000000 --- a/web/src/components/Variants/VariantsPage.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import React, { useMemo } from 'react' - -import { useRouter } from 'next/router' -import { ClusterButtonPanelLayout } from 'src/components/ClusterButtonPanel/ClusterButtonPanelLayout' -import { MutationCountsSummaryCard } from 'src/components/MutationCounts/MutationCountsSummaryCard' -import styled from 'styled-components' -import { Col, Row } from 'reactstrap' - -import { theme } from 'src/theme' -import type { ClusterDatum } from 'src/io/getClusters' -import { getClusterContent } from 'src/io/getClusterContent' -import { getClusterRedirects, getClusters } from 'src/io/getClusters' -import { LinkExternal } from 'src/components/Link/LinkExternal' -import { Editable } from 'src/components/Common/Editable' -import { NarrowPageContainer } from 'src/components/Common/ClusterSidebarLayout' -import { DefiningMutations, hasDefiningMutations } from 'src/components/Variants/DefiningMutations' -import { VariantTitle } from 'src/components/Variants/VariantTitle' - -import NextstrainIconBase from 'src/assets/images/nextstrain_logo.svg' - -import { PlotCard } from './PlotCard' -import { AquariaLinksCard } from './AquariaLinksCard' -import { ProteinCard } from './ProteinCard' - -const clusters = getClusters() -const clusterRedirects = getClusterRedirects() - -const FlexContainer = styled.div` - display: flex; - flex-direction: row; - - @media (max-width: 991.98px) { - flex-direction: column; - } -` - -const FlexFixed = styled.div` - flex: 0 0 180px; - display: flex; - - @media (max-width: 991.98px) { - flex: 1 0; - } -` - -const FlexGrowing = styled.div` - display: flex; - flex: 1 0; -` - -const EditableClusterContent = styled(Editable)`` - -const NextstrainIcon = styled(NextstrainIconBase)` - display: inline; - margin: auto; - width: 25px; - height: 25px; -` - -export function useCurrentClusterName(clusterName?: string) { - const router = useRouter() - - if (clusterName) { - const clusterNewName = clusterRedirects.get(clusterName) - if (clusterNewName) { - void router.replace(`/variants/${clusterNewName}`) // eslint-disable-line no-void - return clusterNewName - } - } - - return clusterName -} - -export interface VariantsPageProps { - clusterName?: string -} - -export function VariantsPage({ clusterName: clusterNameUnsafe }: VariantsPageProps) { - const clusterName = useCurrentClusterName(clusterNameUnsafe) - const currentCluster = useMemo(() => clusters.find((cluster) => cluster.build_name === clusterName), [clusterName]) - - return ( - - - - - {currentCluster && } - - - ) -} - -const NEXTSTRAIN_ICON = - -export function VariantsPageContent({ currentCluster }: { currentCluster: ClusterDatum }) { - const ClusterContent = getClusterContent(currentCluster.build_name) - const showDefiningMutations = useMemo(() => hasDefiningMutations(currentCluster), [currentCluster]) - - const AquariaSection = useMemo(() => { - return ( - (currentCluster.aquaria_urls?.length ?? 0) > 0 && ( - - - - - - ) - ) - }, [currentCluster]) - - return ( - - - - - - {currentCluster.nextstrain_url ? ( - - {`Dedicated ${currentCluster.display_name} Nextstrain build`} - - ) : ( - {'No dedicated Nextstrain build is available'} - )} - - - - - - - - - - - - - - - - - - - - - - {AquariaSection} - - - - - - - - - - {showDefiningMutations && ( - - - - )} - - ) -} diff --git a/web/src/components/Variants/VariantsPageIndex.tsx b/web/src/components/Variants/VariantsPageIndex.tsx deleted file mode 100644 index 3ae48d0885..0000000000 --- a/web/src/components/Variants/VariantsPageIndex.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react' - -import { Col, Row } from 'reactstrap' - -import { NarrowPageContainer } from 'src/components/Common/ClusterSidebarLayout' -import { Editable } from 'src/components/Common/Editable' -import { PageHeading } from 'src/components/Common/PageHeading' - -import VariantsPageIntro from '../../../../content/VariantsPageIntro.md' -import { ClusterButtonPanelLayout } from '../ClusterButtonPanel/ClusterButtonPanelLayout' - -export function VariantsPageIndex() { - return ( - - - - {'Overview of Variants/Mutations'} - - - - - - - - - - - - - - ) -} diff --git a/web/src/io/getClusterContent.ts b/web/src/io/getClusterContent.ts deleted file mode 100644 index c4c7756811..0000000000 --- a/web/src/io/getClusterContent.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { ComponentType } from 'react' - -export function getClusterContent(cluster: string) { - // eslint-disable-next-line global-require,import/no-dynamic-require,security/detect-non-literal-require,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access,unicorn/prefer-module - return require(`../../../content/clusters/${cluster}.md`).default as ComponentType -} diff --git a/web/src/io/getClusters.ts b/web/src/io/getClusters.ts index 86b1a92796..5f0f683995 100644 --- a/web/src/io/getClusters.ts +++ b/web/src/io/getClusters.ts @@ -1,18 +1,9 @@ /* eslint-disable camelcase */ -import { notUndefinedOrNull } from 'src/helpers/notUndefined' - +import urljoin from 'url-join' import type { Mutation } from 'src/types' -import type { Cluster } from 'src/state/Clusters' -import { theme } from 'src/theme' - import { useAxiosQuery } from 'src/hooks/useAxiosQuery' -import urljoin from 'url-join' import { getDataRootUrl } from 'src/io/getDataRootUrl' -import clustersJson from 'src/../data/clusters.json' - -export const CLUSTER_NAME_OTHERS = 'others' as const - export interface AquariaDatum { gene: string url: string @@ -54,53 +45,3 @@ export function useClusterUrl(displayName: string) { } return `/variants/${cluster.build_name}` } - -/** ---------------- Functions below this line should be removed --------- */ - -export function getClusters(): ClusterDatum[] { - return clustersJson.clusters -} - -export function getClusterNames() { - return getClusters().map((cluster) => cluster.display_name) -} - -export function getClusterRedirects(): Map { - return getClusters().reduce((result, cluster) => { - if (cluster.old_build_names) { - cluster.old_build_names.forEach((oldName) => result.set(oldName, cluster.build_name)) - } - return result - }, new Map()) -} - -export function getClusterBuildNames() { - return getClusters().map((cluster) => cluster.build_name) -} - -export function getClusterOldBuildNames() { - return getClusters() - .flatMap((cluster) => cluster.old_build_names) - .filter(notUndefinedOrNull) -} - -export function getClusterColor(clusterName: string) { - if (clusterName === CLUSTER_NAME_OTHERS) { - return theme.clusters.color.others - } - - const clusters = getClusters() - const found = clusters.find(({ display_name }) => display_name === clusterName) - return found ? found.col : theme.clusters.color.unknown -} - -export function sortClusters(clusters: Cluster[]): Cluster[] { - const clusterNames = getClusterNames() - return clusterNames.reduce((result, name) => { - const cluster = clusters.find((cluster) => cluster.cluster === name) - if (cluster) { - result.push(cluster) - } - return result - }, [] as Cluster[]) -} diff --git a/web/src/io/getContributors.ts b/web/src/io/getContributors.ts deleted file mode 100644 index e109603c70..0000000000 --- a/web/src/io/getContributors.ts +++ /dev/null @@ -1,5 +0,0 @@ -import allContributors, { ContributorData } from 'json-loader!src/../../.all-contributorsrc' // eslint-disable-line import/no-extraneous-dependencies - -export function getContributors(): ContributorData[] { - return allContributors.contributors -} diff --git a/web/src/io/getCountryColor.ts b/web/src/io/getCountryColor.ts deleted file mode 100644 index c5c28755c3..0000000000 --- a/web/src/io/getCountryColor.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { get } from 'lodash' - -import countriesToPlot from 'src/../data/countriesToPlot.json' -import countryStyles from 'src/../data/countryStyles.json' - -import { lineStyleToStrokeDashArray } from 'src/helpers/lineStyleToStrokeDashArray' - -export function getCountryStyle(country: string) { - return get, string>(countryStyles, country) ?? { c: '#555555', ls: '-' } -} - -export function getCountryColor(country: string) { - return getCountryStyle(country).c -} - -export function getCountryLineStyle(country: string) { - return getCountryStyle(country).ls -} - -export function getCountryStrokeDashArray(country: string) { - return lineStyleToStrokeDashArray(getCountryLineStyle(country)) -} - -export function shouldPlotCountry(country: string): boolean { - const shouldPlot = get(countriesToPlot, country, 'False') as 'False' | 'True' - return shouldPlot === 'True' -} diff --git a/web/src/io/getLastUpdatedDate.ts b/web/src/io/getLastUpdatedDate.ts deleted file mode 100644 index 4531811afa..0000000000 --- a/web/src/io/getLastUpdatedDate.ts +++ /dev/null @@ -1,15 +0,0 @@ -import updateJson from 'src/../data/update.json' - -import { DateTime } from 'luxon' - -export function getLastUpdatedDate() { - const utc = DateTime.fromISO(updateJson.lastUpdated, { zone: 'UTC' }) - const local = utc.toLocal() - return local.toISODate() -} - -export function getLastUpdatedFull() { - const utc = DateTime.fromISO(updateJson.lastUpdated, { zone: 'UTC' }) - const local = utc.toLocal() - return `${local.toJSDate().toLocaleString()} (${local.zoneName})` -} diff --git a/web/src/io/getMutationComparison.ts b/web/src/io/getMutationComparison.ts deleted file mode 100644 index edf69807c6..0000000000 --- a/web/src/io/getMutationComparison.ts +++ /dev/null @@ -1,27 +0,0 @@ -import mutationComparisonJson from 'src/../data/mutationComparison.json' - -export interface MutationShared { - pos: number - presence: (string | null)[] -} - -export interface MutationIndividualRow { - index: number - mutations: (string | null)[] -} - -export function getMutationComparisonVariants(): string[] { - return mutationComparisonJson.variants -} - -export function getMutationComparisonSharedByPos(): MutationShared[] { - return mutationComparisonJson.shared_by_pos -} - -export function getMutationComparisonSharedByCommonness(): MutationShared[] { - return mutationComparisonJson.shared_by_commonness -} - -export function getMutationComparisonIndividual(): MutationIndividualRow[] { - return mutationComparisonJson.individual -} diff --git a/web/src/io/getMutationCounts.ts b/web/src/io/getMutationCounts.ts deleted file mode 100644 index f0f5659b17..0000000000 --- a/web/src/io/getMutationCounts.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { Mutation } from 'src/types' -import { parseAminoacidMutation } from 'src/components/Common/parseAminoacidMutation' -import { mapValues, sortBy } from 'lodash' -import { useQuery } from '@tanstack/react-query' - -export interface MutationCountsDatum { - mut: Mutation - count: number - key: string -} - -export interface MutationCountsGeneRecord { - total: number - counts: MutationCountsDatum[] -} - -export interface MutationCountsData { - S: MutationCountsGeneRecord - others: MutationCountsGeneRecord -} - -export interface MutationCountsJsonEntry { - mut: string - count: number -} - -export interface MutationCountsJsonGeneRecord { - total: number - counts: MutationCountsJsonEntry[] -} - -export interface MutationCountsJson { - S: MutationCountsJsonGeneRecord - others: MutationCountsJsonGeneRecord -} - -export function parseMutationCounts(data: MutationCountsJsonGeneRecord) { - let counts = data.counts.map((mutationCounts) => { - const mut = parseAminoacidMutation(mutationCounts.mut) - if (!mut) { - throw new Error(`Unable to parse mutation: ${mutationCounts.mut}`) - } - return { ...mutationCounts, mut, key: mutationCounts.mut } - }) - - counts = sortBy(counts, (count) => -count.count) - - return { ...data, counts } -} - -export async function getMutationCounts(clusterBuildName: string): Promise { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,unicorn/no-await-expression-member - const data = (await import(`../../data/mutationCounts/${clusterBuildName}.json`)).default as MutationCountsJson - return mapValues(data, (datum) => parseMutationCounts(datum)) -} - -export function useMutationCounts(clusterBuildName: string) { - return useQuery(['mutationCounts', clusterBuildName], async () => getMutationCounts(clusterBuildName)) -} diff --git a/web/src/io/getNameTable.ts b/web/src/io/getNameTable.ts deleted file mode 100644 index c6e4d9a8c9..0000000000 --- a/web/src/io/getNameTable.ts +++ /dev/null @@ -1,19 +0,0 @@ -import nameTableJson from 'src/../data/nameTable.json' - -export interface NameTableEntry { - name: string - url?: string | null -} - -export interface NameTableDatum { - clade: string - who: string | null - lineages: NameTableEntry[] - others: NameTableEntry[] -} - -export function getNameTable(): NameTableDatum[] { - return nameTableJson.nameTable -} - -export const NAME_TABLE = getNameTable() diff --git a/web/src/io/getParams.ts b/web/src/io/getParams.ts deleted file mode 100644 index 5c663dacbb..0000000000 --- a/web/src/io/getParams.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { DateTime, Interval } from 'luxon' -import paramsJson from 'src/../data/params.json' -import { dateStringToSeconds } from 'src/helpers/format' - -export interface GlobalParams { - min_date: string - max_date: string -} - -export function getParams(): GlobalParams { - return paramsJson -} - -export const params = getParams() - -export function getTimeDomain(): [number, number] { - const minDate = dateStringToSeconds(params.min_date) - const maxDate = dateStringToSeconds(params.max_date) - return [minDate, maxDate] -} - -export function getTicks() { - const timeDomain = getTimeDomain() - const start = timeDomain[0] - const end = timeDomain[1] - return Interval.fromDateTimes( - // prettier-ignore - DateTime.fromSeconds(start).startOf('month'), - DateTime.fromSeconds(end).endOf('month'), - ) - .splitBy({ months: 1 }) - .map((d) => d.start.toSeconds()) -} - -export const timeDomain = getTimeDomain() -export const ticks = getTicks() diff --git a/web/src/io/getPerClusterData.ts b/web/src/io/getPerClusterData.ts deleted file mode 100644 index d9b004e086..0000000000 --- a/web/src/io/getPerClusterData.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { pickBy } from 'lodash' - -import type { Country } from 'src/state/Places' -import type { Cluster } from 'src/state/Clusters' -import { getClusters, sortClusters } from 'src/io/getClusters' - -import perClusterData from '../../data/perClusterData.json' - -export interface ClusterDistributionDatum { - week: string - frequencies: { - [country: string]: number | undefined - } - interp: { - [country: string]: boolean | undefined - } - orig: { - [country: string]: boolean | undefined - } -} - -export interface ClusterDistribution { - cluster: string - distribution: ClusterDistributionDatum[] -} - -export interface PerClusterDataRaw { - country_names: string[] - distributions: ClusterDistribution[] -} - -export interface PerClusterData { - clusters: Cluster[] - clusterBuildNames: Map - clusterDistributions: ClusterDistribution[] -} - -export function getPerClusterDataRaw(): PerClusterDataRaw { - return perClusterData as PerClusterDataRaw -} -export function getPerClusterData(): PerClusterData { - const perClusterData = getPerClusterDataRaw() - - const clusterNames = perClusterData.distributions.map(({ cluster }) => cluster).sort() - const clusters = sortClusters(clusterNames.map((cluster) => ({ cluster, enabled: true }))) - - const clusterBuildNames: Map = new Map(getClusters().map((c) => [c.display_name, c.build_name])) - - const clusterDistributions: ClusterDistribution[] = perClusterData.distributions - - return { - clusters, - clusterBuildNames, - clusterDistributions, - } -} - -export function getClusterDistribution(cluster: string): ClusterDistribution { - const perClusterData = getPerClusterDataRaw() - const clusterDistributions: ClusterDistribution[] = perClusterData.distributions - const clusterDistribution = clusterDistributions.find((dist) => dist.cluster === cluster) - if (!clusterDistribution) { - throw new Error(`Cluster distribution not found for cluster '${cluster}'`) - } - return clusterDistribution -} - -export function getCountryNames(): string[] { - const perClusterData = getPerClusterDataRaw() - return perClusterData.country_names -} - -export function filterCountries(countries: Country[], withClustersFiltered: ClusterDistribution[]) { - const enabledCountries = new Set( - countries.filter((country) => country.enabled).map((country) => country.country), - ) - - const withCountriesFiltered = withClustersFiltered.map(({ cluster, distribution }) => { - const distributionFiltered = distribution.map((dist) => { - const frequenciesFiltered = pickBy(dist.frequencies, (_0, country) => { - return enabledCountries.has(country) - }) - - return { ...dist, frequencies: frequenciesFiltered } - }) - return { cluster, distribution: distributionFiltered } - }) - - return { enabledCountries: Array.from(enabledCountries), withCountriesFiltered } -} - -export function filterClusters(clusters: Cluster[], clusterDistributions: ClusterDistribution[]) { - const enabledClusters = clusters.filter(({ enabled }) => enabled).map(({ cluster }) => cluster) - const withClustersFiltered = clusterDistributions.filter(({ cluster }) => { - return enabledClusters.includes(cluster) - }) - return { enabledClusters, withClustersFiltered } -} diff --git a/web/src/io/getPerCountryCasesData.ts b/web/src/io/getPerCountryCasesData.ts deleted file mode 100644 index 30510a80d6..0000000000 --- a/web/src/io/getPerCountryCasesData.ts +++ /dev/null @@ -1,137 +0,0 @@ -/* eslint-disable camelcase */ -import copy from 'fast-copy' -import { pickBy } from 'lodash' - -import type { Cluster } from 'src/state/Clusters' -import type { Country } from 'src/state/Places' -import { sortClusters } from 'src/io/getClusters' - -import perCountryCasesDataJson from 'src/../data/perCountryDataCaseCounts.json' - -export interface PerCountryCasesDatum { - cluster_names: string[] - distributions: PerCountryCasesDistribution[] - max_date: string - min_date: string - region: string - per_country_intro_content: string -} - -export interface PerCountryCasesDataRaw { - regions: PerCountryCasesDatum[] -} - -export interface PerCountryCasesDistributionDatum { - week: string - stand_total_cases: number - stand_estimated_cases: { - [key: string]: number | undefined - } -} - -export interface PerCountryCasesDistribution { - country: string - distribution: PerCountryCasesDistributionDatum[] -} - -export interface ClusterState { - [key: string]: { enabled: boolean } -} - -export interface PerCountryCasesData { - clusterNames: string[] - clusters: Cluster[] - countries: Country[] - perCountryCasesDistributions: PerCountryCasesDistribution[] - perCountryCasesIntroContent: string -} - -export function getPerCountryCasesDataRaw(): PerCountryCasesDataRaw { - return perCountryCasesDataJson as PerCountryCasesDataRaw -} - -export function getPerCountryCasesData(): PerCountryCasesData { - const allData = getPerCountryCasesDataRaw() - - const regionName = 'World' - - const perCountryCasesData: PerCountryCasesDatum | undefined = allData.regions.find( - (candidate) => candidate.region === regionName, - ) - if (!perCountryCasesData) { - throw new Error(`Region data not found for region: ${regionName}`) - } - - const clusterNames = copy(perCountryCasesData.cluster_names).sort() - const clusters = sortClusters(clusterNames.map((cluster) => ({ cluster, enabled: true }))) - - const perCountryCasesDistributions = perCountryCasesData.distributions - - const countries: Country[] = perCountryCasesData.distributions.map((distr) => ({ - country: distr.country, - enabled: true, - })) - - const perCountryCasesIntroContent = perCountryCasesData.per_country_intro_content - - return { - clusterNames, - clusters, - countries, - perCountryCasesDistributions, - perCountryCasesIntroContent, - } -} - -export function getPerCountryCasesIntroContentFilename(region: string): string { - const allData = getPerCountryCasesDataRaw() - const perCountryCasesData: PerCountryCasesDatum | undefined = allData.regions.find( - (candidate) => candidate.region === region, - ) - if (!perCountryCasesData) { - throw new Error(`Region data not found for region: ${region}`) - } - return perCountryCasesData.per_country_intro_content -} - -export function getRegions() { - const allData = getPerCountryCasesDataRaw() - const regionNames = allData.regions.map(({ region }) => region) - const regionsHaveData = allData.regions.map( - ({ cluster_names, distributions }) => cluster_names.length > 0 && distributions.length > 0, - ) - const defaultRegionName = regionNames[0] - - return { - regionNames, - regionsHaveData, - defaultRegionName, - } -} - -export function filterCountries(countries: Country[], perCountryCasesDistributions: PerCountryCasesDistribution[]) { - const enabledCountries = new Set( - countries.filter((country) => country.enabled).map((country) => country.country), - ) - const withCountriesFiltered = perCountryCasesDistributions.filter(({ country }) => { - return enabledCountries.has(country) - }) - return { enabledCountries, withCountriesFiltered } -} - -export function filterClusters(clusters: Cluster[], withCountriesFiltered: PerCountryCasesDistribution[]) { - const enabledClusters = clusters.filter(({ enabled }) => enabled).map(({ cluster }) => cluster) - - const withClustersFiltered = withCountriesFiltered.map(({ country, distribution }) => { - const distributionFiltered = distribution.map((dist) => { - const countsFiltered = pickBy(dist.stand_estimated_cases, (_0, cluster) => { - return enabledClusters.includes(cluster) - }) - - return { ...dist, cluster_counts: countsFiltered } - }) - return { country, distribution: distributionFiltered } - }) - - return { enabledClusters, withClustersFiltered } -} diff --git a/web/src/io/getPerCountryData.ts b/web/src/io/getPerCountryData.ts deleted file mode 100644 index b1da1a40d1..0000000000 --- a/web/src/io/getPerCountryData.ts +++ /dev/null @@ -1,125 +0,0 @@ -/* eslint-disable camelcase */ -import copy from 'fast-copy' -import { pickBy } from 'lodash' - -import type { Cluster } from 'src/state/Clusters' -import type { Country } from 'src/state/Places' - -import perCountryDataJson from 'src/../data/perCountryData.json' - -export interface PerCountryDatum { - cluster_names: string[] - distributions: CountryDistribution[] - max_date: string - min_date: string - region: string - per_country_intro_content: string -} - -export interface PerCountryDataRaw { - regions: PerCountryDatum[] -} - -export interface CountryDistributionDatum { - week: string - total_sequences: number - cluster_counts: { - [key: string]: number | undefined - } -} - -export interface CountryDistribution { - country: string - distribution: CountryDistributionDatum[] -} - -export interface ClusterState { - [key: string]: { enabled: boolean } -} - -export interface PerCountryData { - clusterNames: string[] - clusters: Cluster[] - countryDistributions: CountryDistribution[] - perCountryIntroContent: string -} - -export function getPerCountryDataRaw(): PerCountryDataRaw { - return perCountryDataJson as PerCountryDataRaw -} - -export function getPerCountryData(regionName: string): PerCountryData { - const allData = getPerCountryDataRaw() - - const perCountryData: PerCountryDatum | undefined = allData.regions.find( - (candidate) => candidate.region === regionName, - ) - if (!perCountryData) { - throw new Error(`Region data not found for region: ${regionName}`) - } - - const clusterNames = copy(perCountryData.cluster_names).sort() - const clusters = clusterNames.map((cluster) => ({ cluster, enabled: true })) - - const countryDistributions = perCountryData.distributions - - const perCountryIntroContent = perCountryData.per_country_intro_content - - return { - clusterNames, - clusters, - countryDistributions, - perCountryIntroContent, - } -} - -export function getPerCountryIntroContentFilename(region: string): string { - const allData = getPerCountryDataRaw() - const perCountryData: PerCountryDatum | undefined = allData.regions.find((candidate) => candidate.region === region) - if (!perCountryData) { - throw new Error(`Region data not found for region: ${region}`) - } - return perCountryData.per_country_intro_content -} - -export function getRegions() { - const allData = getPerCountryDataRaw() - const regionNames = allData.regions.map(({ region }) => region) - const regionsHaveData = allData.regions.map( - ({ cluster_names, distributions }) => cluster_names.length > 0 && distributions.length > 0, - ) - const defaultRegionName = regionNames[0] - - return { - regionNames, - regionsHaveData, - defaultRegionName, - } -} - -export function filterCountries(countries: Country[], countryDistributions: CountryDistribution[]) { - const enabledCountries = new Set( - countries.filter((country) => country.enabled).map((country) => country.country), - ) - const withCountriesFiltered = countryDistributions.filter(({ country }) => { - return enabledCountries.has(country) - }) - return { enabledCountries, withCountriesFiltered } -} - -export function filterClusters(clusters: Cluster[], withCountriesFiltered: CountryDistribution[]) { - const enabledClusters = clusters.filter(({ enabled }) => enabled).map(({ cluster }) => cluster) - - const withClustersFiltered = withCountriesFiltered.map(({ country, distribution }) => { - const distributionFiltered = distribution.map((dist) => { - const countsFiltered = pickBy(dist.cluster_counts, (_0, cluster) => { - return enabledClusters.includes(cluster) - }) - - return { ...dist, cluster_counts: countsFiltered } - }) - return { country, distribution: distributionFiltered } - }) - - return { enabledClusters, withClustersFiltered } -} diff --git a/web/src/io/getRegionContent.ts b/web/src/io/getRegionContent.ts deleted file mode 100644 index c5e629bd72..0000000000 --- a/web/src/io/getRegionContent.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { ComponentType } from 'react' - -export function getRegionPerCountryContent(regionContent: string) { - // eslint-disable-next-line global-require,import/no-dynamic-require,security/detect-non-literal-require,@typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-member-access,unicorn/prefer-module - return require(`../../../content/PerCountryIntro/${regionContent}`).default as ComponentType -} diff --git a/web/src/io/parseCsv.ts b/web/src/io/parseCsv.ts deleted file mode 100644 index 4f851e059f..0000000000 --- a/web/src/io/parseCsv.ts +++ /dev/null @@ -1,28 +0,0 @@ -import Papa, { ParseConfig } from 'papaparse' -import { appendDash } from '../helpers/appendDash' - -export function parseCsv(content: string): T[] { - const config: ParseConfig = { - header: true, - skipEmptyLines: 'greedy', - dynamicTyping: true, - comments: '#', - } - - const { data, errors, meta } = Papa.parse(content, config) - - if (errors.length > 0) { - throw new Error( - `CSV error: ${errors - .map((error) => error.message) - .map(appendDash) - .join('\n')}`, - ) - } else if (meta.aborted) { - throw new Error('CSV error: Aborted') - } else if (data.length === 0) { - throw new Error('CSV error: There was no data') - } - - return data -} diff --git a/web/src/pages/_app.tsx b/web/src/pages/_app.tsx index 194879a7f7..21b223a66c 100644 --- a/web/src/pages/_app.tsx +++ b/web/src/pages/_app.tsx @@ -4,24 +4,18 @@ import 'resize-observer-polyfill/dist/ResizeObserver.global' import 'css.escape' import dynamic from 'next/dynamic' -import React, { Suspense, useCallback, useMemo } from 'react' +import React, { Suspense, useMemo } from 'react' import { QueryClient, QueryClientConfig, QueryClientProvider } from '@tanstack/react-query' -import { MutableSnapshot, RecoilRoot } from 'recoil' +import { RecoilRoot } from 'recoil' import { ReactQueryDevtools } from '@tanstack/react-query-devtools' import type { AppProps } from 'next/app' -import { parseUrl } from 'src/helpers/parseUrl' -import { clustersAtom, ClustersDataFlavor, urlQueryToClusters } from 'src/state/Clusters' -import { clustersCasesAtom, urlQueryToClustersCases } from 'src/state/ClustersForCaseData' -import { continentsAtom, countriesAtom, regionAtom, urlQueryToPlaces } from 'src/state/Places' -import { continentsCasesAtom, countriesCasesAtom, urlQueryToPlacesCases } from 'src/state/PlacesForCaseData' import { ThemeProvider } from 'styled-components' import { MDXProvider } from '@mdx-js/react' import { theme } from 'src/theme' import { DOMAIN_STRIPPED } from 'src/constants' import { Plausible } from 'src/components/Common/Plausible' -import { SeoApp } from 'src/components/Common/SeoApp' import { LOADING } from 'src/components/Loading/Loading' import { getMdxComponents } from 'src/components/Common/MdxComponents' import { ErrorBoundary } from 'src/components/Error/ErrorBoundary' @@ -44,67 +38,16 @@ const REACT_QUERY_OPTIONS: QueryClientConfig = { }, } -function MyApp({ Component, pageProps, router }: AppProps) { +function MyApp({ Component, pageProps }: AppProps) { const queryClient = useMemo(() => new QueryClient(REACT_QUERY_OPTIONS), []) - // NOTE: We do manual parsing here, because router.query is randomly empty on the first few renders. - const { pathname, query } = useMemo(() => parseUrl(router.asPath), [router.asPath]) - - const initializeState = useCallback( - ({ set }: MutableSnapshot) => { - // Set initial state - switch (pathname) { - case '/per-country': { - const { region, continents, countries } = urlQueryToPlaces(query) - - set(regionAtom, region) - set(continentsAtom(region), continents) - set(countriesAtom(region), countries) - - const params = { dataFlavor: ClustersDataFlavor.PerCountry, region } - const clusters = urlQueryToClusters(query, params) - set(clustersAtom(params), clusters) - - break - } - case '/per-variant': { - const { region, continents, countries } = urlQueryToPlaces(query) - - set(continentsAtom(undefined), continents) - set(countriesAtom(undefined), countries) - - const params = { dataFlavor: ClustersDataFlavor.PerCluster, region } - const clusters = urlQueryToClusters(query, params) - set(clustersAtom(params), clusters) - - break - } - case '/cases': { - const { continents, countries } = urlQueryToPlacesCases(query) - - set(continentsCasesAtom, continents) - set(countriesCasesAtom, countries) - - const clusters = urlQueryToClustersCases(query) - set(clustersCasesAtom, clusters) - - break - } - default: - break - } - }, - [pathname, query], - ) - return ( - + - diff --git a/web/src/pages/acknowledgements.tsx b/web/src/pages/acknowledgements.tsx deleted file mode 100644 index b963794364..0000000000 --- a/web/src/pages/acknowledgements.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React, { Suspense } from 'react' -import { AcknowledgementsPage as Page } from 'src/components/Acknowledgements/AcknowledgementsPage' -import { LOADING } from 'src/components/Loading/Loading' - -export default function AcknowledgementsPage() { - return ( - - - - ) -} diff --git a/web/src/pages/cases.tsx b/web/src/pages/cases.tsx deleted file mode 100644 index dcad0887b3..0000000000 --- a/web/src/pages/cases.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React, { Suspense } from 'react' -import { CasesPage as Page } from 'src/components/Cases/CasesPage' -import { LOADING } from 'src/components/Loading/Loading' - -export default function CasesPage() { - return ( - - - - ) -} diff --git a/web/src/pages/debug-badges.tsx b/web/src/pages/debug-badges.tsx deleted file mode 100644 index 5d4b5d00bb..0000000000 --- a/web/src/pages/debug-badges.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React from 'react' - -import { Col, Row } from 'reactstrap' -import { Var, WhoBadge } from 'src/components/Common/MutationBadge' - -import { LinkSmart } from 'src/components/Link/LinkSmart' - -import { getClusterNames, getClusterBuildNames, getClusterOldBuildNames } from 'src/io/getClusters' -import { GREEK_ALPHABET } from 'src/names' - -const clusterNames = getClusterNames() -const clusterBuildNames = getClusterBuildNames() -const clusterOldBuildNames = getClusterOldBuildNames() - -const domain = process.env.DOMAIN ?? '' - -export default function DebugBadges() { - return ( - <> - - - {'Display names'} -
    - {clusterNames.map((name) => ( -
  • - -
  • - ))} -
- - - - {'Build names'} -
    - {clusterBuildNames.map((buildName) => { - const url = `${domain}/variants/${buildName}` - return ( -
  • - {url} -
  • - ) - })} -
- - - - {'Old build names'} -
    - {clusterOldBuildNames.map((oldBuildName) => { - const url = `${domain}/variants/${oldBuildName}` - return ( -
  • - {url} -
  • - ) - })} -
- -
- - -
    - {Object.keys(GREEK_ALPHABET) - .map((name) => name[0].toUpperCase() + name.slice(1)) - .map((name) => { - return ( -
  • - -
  • - ) - })} -
- -
- - ) -} diff --git a/web/src/pages/faq.tsx b/web/src/pages/faq.tsx deleted file mode 100644 index f04ee7e771..0000000000 --- a/web/src/pages/faq.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React, { Suspense } from 'react' -import { FaqPage as Page } from 'src/components/Faq/FaqPage' -import { LOADING } from 'src/components/Loading/Loading' - -export default function FaqPage() { - return ( - - - - ) -} diff --git a/web/src/pages/per-country.tsx b/web/src/pages/per-country.tsx deleted file mode 100644 index 61e370bdbc..0000000000 --- a/web/src/pages/per-country.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React, { Suspense } from 'react' -import { CountryDistributionPage as Page } from 'src/components/CountryDistribution/CountryDistributionPage' -import { LOADING } from 'src/components/Loading/Loading' - -export default function CountryDistributionPage() { - return ( - - - - ) -} diff --git a/web/src/pages/per-variant.tsx b/web/src/pages/per-variant.tsx deleted file mode 100644 index 3b7776e93f..0000000000 --- a/web/src/pages/per-variant.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React, { Suspense } from 'react' -import { ClusterDistributionPage as Page } from 'src/components/ClusterDistribution/ClusterDistributionPage' -import { LOADING } from 'src/components/Loading/Loading' - -export default function ClusterDistributionPage() { - return ( - - - - ) -} diff --git a/web/src/pages/shared-mutations.tsx b/web/src/pages/shared-mutations.tsx deleted file mode 100644 index 9bfaf524ec..0000000000 --- a/web/src/pages/shared-mutations.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React, { Suspense } from 'react' -import { SharedMutationsPage as Page } from 'src/components/SharedMutations/SharedMutationsPage' -import { LOADING } from 'src/components/Loading/Loading' - -export default function SharedMutationsPage() { - return ( - - - - ) -} diff --git a/web/src/pages/variants/[clusterName].tsx b/web/src/pages/variants/[clusterName].tsx deleted file mode 100644 index 66ebe0fef4..0000000000 --- a/web/src/pages/variants/[clusterName].tsx +++ /dev/null @@ -1,28 +0,0 @@ -import type { GetStaticPathsContext, GetStaticPropsContext, GetStaticPathsResult, GetStaticPropsResult } from 'next' -import { get } from 'lodash' - -import type { VariantsPageProps } from 'src/components/Variants/VariantsPage' -import { getClusterBuildNames, getClusterOldBuildNames } from 'src/io/getClusters' -import { takeFirstMaybe } from 'src/helpers/takeFirstMaybe' - -const clusterBuildNames = getClusterBuildNames() -const clusterOldBuildNames = getClusterOldBuildNames() - -export async function getStaticProps(context: GetStaticPropsContext): Promise> { - const clusterName = takeFirstMaybe(get(context?.params, 'clusterName')) - - return { - props: { - clusterName, - }, - } -} - -export async function getStaticPaths(_0: GetStaticPathsContext): Promise { - return { - paths: [...clusterBuildNames, ...clusterOldBuildNames].map((clusterName) => `/variants/${clusterName}`), - fallback: false, - } -} - -export { VariantsPage as default } from 'src/components/Variants/VariantsPage' diff --git a/web/src/pages/variants/index.tsx b/web/src/pages/variants/index.tsx deleted file mode 100644 index 496433fe15..0000000000 --- a/web/src/pages/variants/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { VariantsPageIndex as default } from 'src/components/Variants/VariantsPageIndex' diff --git a/web/src/state/Clusters.ts b/web/src/state/Clusters.ts index f9ceb8392e..7b0013bffd 100644 --- a/web/src/state/Clusters.ts +++ b/web/src/state/Clusters.ts @@ -1,101 +1,4 @@ -import { get } from 'lodash' -import { ParsedUrlQuery } from 'querystring' -import { atomFamily } from 'recoil' -import { convertToArrayMaybe, includesCaseInsensitive } from 'src/helpers/array' - -import { updateUrlQuery } from 'src/helpers/urlQuery' -import { getPerClusterData } from 'src/io/getPerClusterData' -import { getPerCountryData } from 'src/io/getPerCountryData' - -/** Tells which clusters data to load */ -export enum ClustersDataFlavor { - PerCountry = 'PerCountry', - PerCluster = 'PerCluster', -} - -export type ClustersDataParams = { - dataFlavor: ClustersDataFlavor - region: string -} - export interface Cluster { cluster: string enabled: boolean } - -/** - * Converts values incoming from URL query into clusters. - * To be used during app startup. - */ -export function urlQueryToClusters(query: ParsedUrlQuery, { dataFlavor, region }: ClustersDataParams) { - const enabledCountries = convertToArrayMaybe(get(query, 'variant')) - - // Take all clusters and set only the clusters present in the query as `enabled` - let clusters = getAllClusters({ dataFlavor, region }) - if (enabledCountries) { - clusters = clusters.map((cluster) => ({ - ...cluster, - enabled: includesCaseInsensitive(enabledCountries, cluster.cluster), - })) - } - - return clusters -} - -export function getAllClusters({ dataFlavor, region }: ClustersDataParams): Cluster[] { - // Data is different depending on page (/par-cluster or /per-variant) - switch (dataFlavor) { - case ClustersDataFlavor.PerCountry: { - // NOTE: Per country page data also differs by region - const { clusters } = getPerCountryData(region) - return clusters - } - case ClustersDataFlavor.PerCluster: { - const { clusters } = getPerClusterData() - return clusters - } - default: - throw new RangeError('Unknown clusters data flavor. This is an internal error. Please report it to developers') - } -} - -/** - * Represents a list of currently enabled clusters (variants) - */ -export const clustersAtom = atomFamily({ - key: 'clusters', - default: (params) => getAllClusters(params), - effects: [ - ({ onSet }) => { - onSet((clusters) => { - // If all clusters are enabled, we will remove cluster url params - const hasAllEnabled = clusters.every((cluster) => cluster.enabled) - - // eslint-disable-next-line no-void - void updateUrlQuery({ - variant: hasAllEnabled ? [] : clusters.filter((cluster) => cluster.enabled).map((cluster) => cluster.cluster), - }) - }) - }, - ], -}) - -/** Toggles a given cluster enabled/disabled */ -export function toggleCluster(clusters: Cluster[], clusterName: string): Cluster[] { - return clusters.map((cluster) => { - if (cluster.cluster === clusterName) { - return { ...cluster, enabled: !cluster.enabled } - } - return cluster - }) -} - -/** Toggles all clusters enabled */ -export function enableAllClusters(clusters: Cluster[]): Cluster[] { - return clusters.map((cluster) => ({ ...cluster, enabled: true })) -} - -/** Toggles all clusters disabled */ -export function disableAllClusters(clusters: Cluster[]): Cluster[] { - return clusters.map((cluster) => ({ ...cluster, enabled: false })) -} diff --git a/web/src/state/ClustersForCaseData.ts b/web/src/state/ClustersForCaseData.ts deleted file mode 100644 index 6e29c04cda..0000000000 --- a/web/src/state/ClustersForCaseData.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { get } from 'lodash' -import { ParsedUrlQuery } from 'querystring' -import { atom } from 'recoil' -import { convertToArrayMaybe, includesCaseInsensitive } from 'src/helpers/array' - -import { updateUrlQuery } from 'src/helpers/urlQuery' -import { getPerCountryCasesData } from 'src/io/getPerCountryCasesData' -import type { Cluster } from './Clusters' - -function getAllClusters(): Cluster[] { - return getPerCountryCasesData().clusters -} - -/** - * Converts values incoming from URL query into clusters. - * To be used during app startup. - */ -export function urlQueryToClustersCases(query: ParsedUrlQuery) { - const enabledClusters = convertToArrayMaybe(get(query, 'variant')) - - // Take all clusters and set only the clusters present in the query as `enabled` - let clusters = getAllClusters() - if (enabledClusters) { - clusters = clusters.map((cluster) => ({ - ...cluster, - enabled: includesCaseInsensitive(enabledClusters, cluster.cluster), - })) - } - - return clusters -} - -/** - * Represents a list of currently enabled clusters (variants) - */ -export const clustersCasesAtom = atom({ - key: 'clustersCases', - default: getAllClusters(), - effects: [ - ({ onSet }) => { - onSet((clusters) => { - // If all clusters are enabled, we will remove cluster url params - const hasAllEnabled = clusters.every((cluster) => cluster.enabled) - - // eslint-disable-next-line no-void - void updateUrlQuery({ - variant: hasAllEnabled ? [] : clusters.filter((cluster) => cluster.enabled).map((cluster) => cluster.cluster), - }) - }) - }, - ], -}) - -/** Toggles a given cluster enabled/disabled */ -export function toggleCluster(clusters: Cluster[], clusterName: string): Cluster[] { - return clusters.map((cluster) => { - if (cluster.cluster === clusterName) { - return { ...cluster, enabled: !cluster.enabled } - } - return cluster - }) -} - -/** Toggles all clusters enabled */ -export function enableAllClusters(clusters: Cluster[]): Cluster[] { - return clusters.map((cluster) => ({ ...cluster, enabled: true })) -} - -/** Toggles all clusters disabled */ -export function disableAllClusters(clusters: Cluster[]): Cluster[] { - return clusters.map((cluster) => ({ ...cluster, enabled: false })) -} diff --git a/web/src/state/Places.ts b/web/src/state/Places.ts deleted file mode 100644 index 2cdf9813ad..0000000000 --- a/web/src/state/Places.ts +++ /dev/null @@ -1,225 +0,0 @@ -import copy from 'fast-copy' -import { ParsedUrlQuery } from 'querystring' -import { atom, atomFamily, DefaultValue, selectorFamily } from 'recoil' -import { get } from 'lodash' - -import { convertToArrayMaybe, includesCaseInsensitive } from 'src/helpers/array' -import { takeFirstMaybe } from 'src/helpers/takeFirstMaybe' -import { setUrlQuery, updateUrlQuery } from 'src/helpers/urlQuery' -import { shouldPlotCountry } from 'src/io/getCountryColor' - -import { getPerClusterDataRaw } from 'src/io/getPerClusterData' -import { getPerCountryDataRaw } from 'src/io/getPerCountryData' -import regionCountryJson from 'src/../data/region_country.json' - -export const DEFAULT_REGION = 'World' - -export interface Country { - country: string - enabled: boolean -} - -export interface Continent { - continent: string - enabled: boolean -} - -/** - * Converts values incoming from URL query into region, countries and continents. - * To be used during app startup. - */ -export function urlQueryToPlaces(query: ParsedUrlQuery) { - const regionRaw = takeFirstMaybe(get(query, 'region')) - - const region = - getAllRegions().find((candidate) => candidate.toLowerCase() === regionRaw?.toLowerCase()) ?? DEFAULT_REGION - - const enabledCountries = convertToArrayMaybe(get(query, 'country')) - - // Take all countries and set only the countries present in the query as `enabled` - let countries = getAllCountries(region) - if (enabledCountries) { - countries = countries.map((country) => ({ - ...country, - enabled: includesCaseInsensitive(enabledCountries, country.country), - })) - } - - // Enable/disable continents depending on which countries are enabled - const continents = getContinentsFromCountries(region, countries) - - return { region, continents, countries } -} - -export function getAllRegions() { - const perCountryData = getPerCountryDataRaw() - return perCountryData.regions.map((region) => region.region) -} - -export function getAllCountries(region?: string): Country[] { - // Regions are only relevant for the country distribution (/per-country) page and the data is different for them - if (region) { - const perCountryData = getPerCountryDataRaw() - const data = perCountryData.regions.find((dataRegion) => dataRegion.region === region) - if (!data) { - throw new RangeError(`Country data not found for region ${region}`) - } - return data.distributions.map(({ country }) => ({ country, enabled: true })) - } - - // If there's no region, then it's the cluster distribution (/per-variant) page - const perClusterData = getPerClusterDataRaw() - const countryNames: string[] = copy(perClusterData.country_names).sort() - return countryNames.map((country) => ({ country, enabled: shouldPlotCountry(country) })) -} - -export function getAllContinents(region?: string): Continent[] { - if (region === 'World') { - return Object.keys(regionCountryJson).map((continent) => ({ continent, enabled: true })) - } - return [{ continent: region ?? '', enabled: true }] -} - -export function getCountryToContinentMap(): Map { - return Object.entries(regionCountryJson).reduce((result, [continent, countries]) => { - // eslint-disable-next-line no-loops/no-loops - for (const country of countries) { - result.set(country, continent) - } - return result - }, new Map()) -} - -/** - * Toggles `enable` field of each country, according to whether the corresponding continent is enabled - */ -export function toggleCountriesFromContinents( - region: string | undefined, - countries: Country[], - continents: Continent[], -): Country[] { - return countries.map((country) => { - const continentMap = getCountryToContinentMap() - const continent = continentMap.get(country.country) - const continentFound = continents.find((continentCandidate) => continentCandidate.continent === continent) - const enabled = continentFound?.enabled ?? false - return { ...country, enabled } - }) -} - -/** - * Deduces which continents are enabled, depending on which countries are enabled - */ -export function getContinentsFromCountries(region: string | undefined, countries: Country[]): Continent[] { - // Continents are only relevant for the 'World' region - if (region === 'World') { - return Object.entries(regionCountryJson).map(([continent, continentCountries]) => { - // A continent is enabled if every country of this continent is enabled - const enabled = continentCountries.every((continentCountry) => { - const countryFound = countries.find((country) => country.country === continentCountry) - return countryFound?.enabled ?? true - }) - return { continent, enabled } - }) - } - - // For other regions, there is only one fake continent and it's enabled if all countries are enabled - const enabled = countries.every((country) => country.enabled) - return [{ continent: region ?? DEFAULT_REGION, enabled }] -} - -/** Toggles a given country enabled/disabled */ -export function toggleCountry(countries: Country[], countryName: string): Country[] { - return countries.map((country) => { - if (country.country === countryName) { - return { ...country, enabled: !country.enabled } - } - return country - }) -} - -/** Toggles a given continent enabled/disabled */ -export function toggleContinent(continents: Continent[], continentName: string): Continent[] { - return continents.map((continent) => { - if (continent.continent === continentName) { - return { ...continent, enabled: !continent.enabled } - } - return continent - }) -} - -/** Toggles all countries enabled */ -export function enableAllCountries(countries: Country[]): Country[] { - return countries.map((country) => ({ ...country, enabled: true })) -} - -/** Toggles all countries disabled */ -export function disableAllCountries(countries: Country[]): Country[] { - return countries.map((country) => ({ ...country, enabled: false })) -} - -/** - * Represents current region - */ -export const regionAtom = atom({ - key: 'region', - default: DEFAULT_REGION, - effects: [ - ({ onSet }) => { - onSet((region) => { - // NOTE: This will overwrite the query entirely - // eslint-disable-next-line no-void - void setUrlQuery({ region }) - }) - }, - ], -}) - -/** - * Represents a list of currently enabled countries - * NOTE: this atom can be modified, when the selector for continents is modified. - */ -export const countriesAtom = atomFamily({ - key: 'countries', - default(region?: string) { - return getAllCountries(region) - }, - effects: [ - ({ onSet }) => { - onSet((countries) => { - // If all countries are enabled, we will remove country url params - const hasAllEnabled = countries.every((country) => country.enabled) - - // eslint-disable-next-line no-void - void updateUrlQuery({ - country: hasAllEnabled - ? [] - : countries.filter((country) => country.enabled).map((country) => country.country), - }) - }) - }, - ], -}) - -/** - * Represents a list of currently enabled continents. - * NOTE: this is a selector and it's value is tied to the countries atom. - * NOTE: this selector is mutable, i.e. it can be set(). When this happens, it also modifies the countries atom. - */ -export const continentsAtom = selectorFamily({ - key: 'continents', - get: - (region?: string) => - ({ get }) => { - const countries = get(countriesAtom(region)) - return getContinentsFromCountries(region, countries) - }, - set: - (region?: string) => - ({ set, get, reset }, continentsOrDefault) => { - const countriesOld = get(countriesAtom(region)) - const continents = continentsOrDefault instanceof DefaultValue ? getAllContinents(region) : continentsOrDefault - const countries = toggleCountriesFromContinents(region, countriesOld, continents) - set(countriesAtom(region), countries) - }, -}) diff --git a/web/src/state/PlacesForCaseData.ts b/web/src/state/PlacesForCaseData.ts deleted file mode 100644 index 208d00335a..0000000000 --- a/web/src/state/PlacesForCaseData.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { get } from 'lodash' -import { ParsedUrlQuery } from 'querystring' -import { atom, DefaultValue, selector } from 'recoil' - -import { convertToArrayMaybe, includesCaseInsensitive } from 'src/helpers/array' -import type { Continent, Country } from 'src/state/Places' -import { updateUrlQuery } from 'src/helpers/urlQuery' -import { getPerCountryCasesData } from 'src/io/getPerCountryCasesData' - -import regionCountryJson from '../../data/region_country.json' - -/** - * Converts values incoming from URL query into region, countries and continents. - * To be used during app startup. - */ -export function urlQueryToPlacesCases(query: ParsedUrlQuery) { - const enabledCountries = convertToArrayMaybe(get(query, 'country')) - - // Take all countries and set only the countries present in the query as `enabled` - let countries = getAllCountries() - if (enabledCountries) { - countries = countries.map((country) => ({ - ...country, - enabled: includesCaseInsensitive(enabledCountries, country.country), - })) - } - - // Enable/disable continents depending on which countries are enabled - const continents = getContinentsFromCountries(countries) - - return { continents, countries } -} - -function getAllCountries(): Country[] { - return getPerCountryCasesData().countries -} - -export function getAllContinents(): Continent[] { - return Object.keys(regionCountryJson).map((continent) => ({ continent, enabled: true })) -} - -export function getCountryToContinentMap(): Map { - return Object.entries(regionCountryJson).reduce((result, [continent, countries]) => { - // eslint-disable-next-line no-loops/no-loops - for (const country of countries) { - result.set(country, continent) - } - return result - }, new Map()) -} - -/** - * Toggles `enable` field of each country, according to whether the corresponding continent is enabled - */ -export function toggleCountriesFromContinents(countries: Country[], continents: Continent[]): Country[] { - return countries.map((country) => { - const continentMap = getCountryToContinentMap() - const continent = continentMap.get(country.country) - const continentFound = continents.find((continentCandidate) => continentCandidate.continent === continent) - const enabled = continentFound?.enabled ?? false - return { ...country, enabled } - }) -} - -/** - * Deduces which continents are enabled, depending on which countries are enabled - */ -function getContinentsFromCountries(countries: Country[]): Continent[] { - // Continents are only relevant for the 'World' region - return Object.entries(regionCountryJson).map(([continent, continentCountries]) => { - // A continent is enabled if every country of this continent is enabled - const enabled = continentCountries.every((continentCountry) => { - const countryFound = countries.find((country) => country.country === continentCountry) - return countryFound?.enabled ?? true - }) - return { continent, enabled } - }) -} - -/** Toggles a given country enabled/disabled */ -export function toggleCountry(countries: Country[], countryName: string): Country[] { - return countries.map((country) => { - if (country.country === countryName) { - return { ...country, enabled: !country.enabled } - } - return country - }) -} - -/** Toggles a given continent enabled/disabled */ -export function toggleContinent(continents: Continent[], continentName: string): Continent[] { - return continents.map((continent) => { - if (continent.continent === continentName) { - return { ...continent, enabled: !continent.enabled } - } - return continent - }) -} - -/** Toggles all countries enabled */ -export function enableAllCountries(countries: Country[]): Country[] { - return countries.map((country) => ({ ...country, enabled: true })) -} - -/** Toggles all countries disabled */ -export function disableAllCountries(countries: Country[]): Country[] { - return countries.map((country) => ({ ...country, enabled: false })) -} - -/** - * Represents a list of currently enabled countries - * NOTE: this atom can be modified, when the selector for continents is modified. - */ -export const countriesCasesAtom = atom({ - key: 'casesCountries', - default: getAllCountries(), - effects: [ - ({ onSet }) => { - onSet((countries) => { - // If all countries are enabled, we will remove country url params - const hasAllEnabled = countries.every((country) => country.enabled) - - // eslint-disable-next-line no-void - void updateUrlQuery({ - country: hasAllEnabled - ? [] - : countries.filter((country) => country.enabled).map((country) => country.country), - }) - }) - }, - ], -}) - -/** - * Represents a list of currently enabled continents. - * NOTE: this is a selector and it's value is tied to the countries atom. - * NOTE: this selector is mutable, i.e. it can be set(). When this happens, it also modifies the countries atom. - */ -export const continentsCasesAtom = selector({ - key: 'casesContinents', - get: ({ get }) => { - const countries = get(countriesCasesAtom) - return getContinentsFromCountries(countries) - }, - set: ({ set, get, reset }, continentsOrDefault) => { - const countriesOld = get(countriesCasesAtom) - const continents = continentsOrDefault instanceof DefaultValue ? getAllContinents() : continentsOrDefault - const countries = toggleCountriesFromContinents(countriesOld, continents) - set(countriesCasesAtom, countries) - }, -}) diff --git a/web/src/state/TooltipSort.ts b/web/src/state/TooltipSort.ts deleted file mode 100644 index a74fb95ceb..0000000000 --- a/web/src/state/TooltipSort.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { atom } from 'recoil' - -export enum TooltipSortCriterion { - country = 'country', - frequency = 'frequency', -} - -export const tooltipSortAtom = atom({ - key: 'TooltipSort', - default: { - criterion: TooltipSortCriterion.frequency, - reversed: false, - }, -}) From f953ce306dfbdfaecc4e1bdac539ab5d93c1b81d Mon Sep 17 00:00:00 2001 From: ivan-aksamentov Date: Tue, 13 Dec 2022 17:10:17 +0100 Subject: [PATCH 15/26] feat: setup i18n --- web/package.json | 12 +- web/src/helpers/useTranslationSafe.ts | 22 +++ web/src/i18n/detectLocale.ts | 40 +++++ web/src/i18n/i18n.ts | 207 ++++++++++++++++++++++++++ web/src/i18n/resources/ar/common.json | 1 + web/src/i18n/resources/de/common.json | 1 + web/src/i18n/resources/el/common.json | 1 + web/src/i18n/resources/en/common.json | 1 + web/src/i18n/resources/es/common.json | 1 + web/src/i18n/resources/fa/common.json | 1 + web/src/i18n/resources/fr/common.json | 1 + web/src/i18n/resources/he/common.json | 1 + web/src/i18n/resources/hi/common.json | 1 + web/src/i18n/resources/id/common.json | 1 + web/src/i18n/resources/it/common.json | 1 + web/src/i18n/resources/ja/common.json | 1 + web/src/i18n/resources/ko/common.json | 1 + web/src/i18n/resources/nl/common.json | 1 + web/src/i18n/resources/pt/common.json | 1 + web/src/i18n/resources/ru/common.json | 1 + web/src/i18n/resources/ta/common.json | 1 + web/src/i18n/resources/th/common.json | 1 + web/src/i18n/resources/tr/common.json | 1 + web/src/i18n/resources/ur/common.json | 1 + web/src/i18n/resources/vi/common.json | 1 + web/src/i18n/resources/zh/common.json | 1 + web/src/pages/_app.tsx | 12 +- web/yarn.lock | 64 +++++++- 28 files changed, 365 insertions(+), 14 deletions(-) create mode 100644 web/src/helpers/useTranslationSafe.ts create mode 100644 web/src/i18n/detectLocale.ts create mode 100644 web/src/i18n/i18n.ts create mode 100644 web/src/i18n/resources/ar/common.json create mode 100644 web/src/i18n/resources/de/common.json create mode 100644 web/src/i18n/resources/el/common.json create mode 100644 web/src/i18n/resources/en/common.json create mode 100644 web/src/i18n/resources/es/common.json create mode 100644 web/src/i18n/resources/fa/common.json create mode 100644 web/src/i18n/resources/fr/common.json create mode 100644 web/src/i18n/resources/he/common.json create mode 100644 web/src/i18n/resources/hi/common.json create mode 100644 web/src/i18n/resources/id/common.json create mode 100644 web/src/i18n/resources/it/common.json create mode 100644 web/src/i18n/resources/ja/common.json create mode 100644 web/src/i18n/resources/ko/common.json create mode 100644 web/src/i18n/resources/nl/common.json create mode 100644 web/src/i18n/resources/pt/common.json create mode 100644 web/src/i18n/resources/ru/common.json create mode 100644 web/src/i18n/resources/ta/common.json create mode 100644 web/src/i18n/resources/th/common.json create mode 100644 web/src/i18n/resources/tr/common.json create mode 100644 web/src/i18n/resources/ur/common.json create mode 100644 web/src/i18n/resources/vi/common.json create mode 100644 web/src/i18n/resources/zh/common.json diff --git a/web/package.json b/web/package.json index c1f07c0e18..68e2775409 100644 --- a/web/package.json +++ b/web/package.json @@ -69,11 +69,14 @@ "bootstrap-icons": "1.10.2", "classnames": "2.3.2", "core-js": "3.26.1", + "countries-list": "2.6.1", "country-flag-icons": "1.5.5", "css.escape": "1.5.1", "fast-copy": "2.1.3", "fast-memoize": "2.5.2", "fasy": "9.0.2", + "flag-icon-css": "4.1.7", + "i18next": "19.3.2", "intersection-observer": "0.12.2", "is-absolute-url": "3.0.3", "iso-3166-1-alpha-2": "1.0.0", @@ -82,8 +85,10 @@ "marked": "4.2.4", "merge-anything": "5.1.4", "next": "12.1.6", + "numbro": "2.3.6", "papaparse": "5.3.2", "polished": "4.2.2", + "pretty-bytes": "5.6.0", "prop-types": "15.8.1", "react": "18.2.0", "react-aspect-ratio": "1.1.2", @@ -91,6 +96,7 @@ "react-dom": "18.2.0", "react-error-boundary": "3.1.4", "react-gif-player": "0.4.2", + "react-i18next": "11.3.3", "react-icons": "4.7.1", "react-intersection-observer": "9.4.1", "react-loader-spinner": "5.3.4", @@ -240,7 +246,7 @@ "svgo": "3.0.2", "ts-essentials": "9.3.0", "ts-toolbelt": "9.6.0", - "typescript": "4.9.4", + "typescript": "4.9.3", "url-loader": "4.1.1", "utility-types": "3.10.0", "webpack": "5.75.0", @@ -303,6 +309,7 @@ "eslint-plugin-sonarjs": "0.17.0", "eslint-plugin-unicorn": "42.0.0", "file-loader": "6.2.0", + "i18next": "19.3.2", "json-loader": "0.5.7", "lodash": "4.17.21", "luxon": "3.1.1", @@ -313,6 +320,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-error-boundary": "3.1.4", + "react-i18next": "11.3.3", "reactstrap": "8.10.1", "recharts": "2.2.0", "recoil": "0.7.6", @@ -322,7 +330,7 @@ "source-map-loader": "4.0.1", "style-loader": "3.3.1", "styled-components": "5.3.6", - "typescript": "4.9.4", + "typescript": "4.9.3", "url-loader": "4.1.1", "webpack": "5.75.0", "webpack-cli": "5.0.1" diff --git a/web/src/helpers/useTranslationSafe.ts b/web/src/helpers/useTranslationSafe.ts new file mode 100644 index 0000000000..c8608eb29d --- /dev/null +++ b/web/src/helpers/useTranslationSafe.ts @@ -0,0 +1,22 @@ +import { useCallback } from 'react' +import { isString } from 'lodash' +import { useTranslation } from 'react-i18next' + +export interface UseTranslationSafeResult { + t: (key: string, options?: Record) => string +} + +export function useTranslationSafe(): UseTranslationSafeResult { + const response = useTranslation() + const t = useCallback( + (key: string, options?: Record): string => { + const res = response.t(key, options) + if (isString(res)) { + return res + } + return key + }, + [response], + ) + return { t } +} diff --git a/web/src/i18n/detectLocale.ts b/web/src/i18n/detectLocale.ts new file mode 100644 index 0000000000..d0212c3cb5 --- /dev/null +++ b/web/src/i18n/detectLocale.ts @@ -0,0 +1,40 @@ +import { LocaleKey } from './i18n' + +type NavigatorPlus = Navigator & { browserLanguage?: string; userLanguage?: string; systemLanguage?: string } + +export interface DetectLanguageParams { + defaultLanguage: LocaleKey + availableLocales: LocaleKey[] + shorten?: boolean +} + +export function detectLocale({ defaultLanguage, availableLocales, shorten = true }: DetectLanguageParams): LocaleKey { + if (typeof navigator === 'undefined') { + return defaultLanguage + } + + const navigatorLocal = (navigator ?? window.navigator) as NavigatorPlus | undefined + + let language + language = + navigatorLocal?.languages && navigatorLocal.languages.length > 0 + ? navigatorLocal.language[0] ?? navigatorLocal.language + : navigatorLocal?.browserLanguage ?? + navigatorLocal?.userLanguage ?? + navigatorLocal?.systemLanguage ?? + defaultLanguage + + if (!language) { + language = defaultLanguage + } + + if (shorten) { + language = language.slice(0, 2) + } + + if (availableLocales.includes(language as LocaleKey)) { + return language as LocaleKey + } + + return defaultLanguage +} diff --git a/web/src/i18n/i18n.ts b/web/src/i18n/i18n.ts new file mode 100644 index 0000000000..7dfa189e83 --- /dev/null +++ b/web/src/i18n/i18n.ts @@ -0,0 +1,207 @@ +import { ElementType, FC } from 'react' + +import type { StrictOmit } from 'ts-essentials' +import { get, isNil, mapValues } from 'lodash' + +import i18nOriginal, { i18n as I18N, Resource } from 'i18next' +import { initReactI18next } from 'react-i18next' + +import { Settings as LuxonSettings } from 'luxon' +import numbro from 'numbro' +import { languages } from 'countries-list' +import prettyBytesOriginal, { Options as PrettyBytesOptionsOriginal } from 'pretty-bytes' + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import numbroLanguages from 'numbro/dist/languages.min' + +import CN from 'flag-icon-css/flags/1x1/cn.svg' +import DE from 'flag-icon-css/flags/1x1/de.svg' +import ES from 'flag-icon-css/flags/1x1/es.svg' +import FR from 'flag-icon-css/flags/1x1/fr.svg' +import GB from 'flag-icon-css/flags/1x1/gb.svg' +import GR from 'flag-icon-css/flags/1x1/gr.svg' +import ID from 'flag-icon-css/flags/1x1/id.svg' +import IL from 'flag-icon-css/flags/1x1/il.svg' +import IN from 'flag-icon-css/flags/1x1/in.svg' +import IR from 'flag-icon-css/flags/1x1/ir.svg' +import IT from 'flag-icon-css/flags/1x1/it.svg' +import JP from 'flag-icon-css/flags/1x1/jp.svg' +import KR from 'flag-icon-css/flags/1x1/kr.svg' +import NL from 'flag-icon-css/flags/1x1/nl.svg' +import PK from 'flag-icon-css/flags/1x1/pk.svg' +import PT from 'flag-icon-css/flags/1x1/pt.svg' +import RU from 'flag-icon-css/flags/1x1/ru.svg' +import SA from 'flag-icon-css/flags/1x1/sa.svg' +import TH from 'flag-icon-css/flags/1x1/th.svg' +import TR from 'flag-icon-css/flags/1x1/tr.svg' +import VN from 'flag-icon-css/flags/1x1/vn.svg' + +import ar from './resources/ar/common.json' +import de from './resources/de/common.json' +import el from './resources/el/common.json' +import en from './resources/en/common.json' +import es from './resources/es/common.json' +import fa from './resources/fa/common.json' +import fr from './resources/fr/common.json' +import he from './resources/he/common.json' +import hi from './resources/hi/common.json' +import id from './resources/id/common.json' +import it from './resources/it/common.json' +import ja from './resources/ja/common.json' +import ko from './resources/ko/common.json' +import nl from './resources/nl/common.json' +import pt from './resources/pt/common.json' +import ru from './resources/ru/common.json' +import ta from './resources/ta/common.json' +import th from './resources/th/common.json' +import tr from './resources/tr/common.json' +import ur from './resources/ur/common.json' +import vi from './resources/vi/common.json' +import zh from './resources/zh/common.json' + +export const localized = { number: '{{value, localizedNumber}}' } as const +export const translations = { + ar, + de, + el, + en, + es, + fa, + fr, + he, + hi, + id, + it, + ja, + ko, + nl, + pt, + ru, + ta, + th, + tr, + ur, + vi, + zh, +} +export const flags = new Map() + +export type LocaleKey = keyof typeof translations + +export const DEFAULT_LOCALE_KEY: LocaleKey = 'en' +export const resources: Record = mapValues(translations, (value) => ({ translation: value })) + +export interface Locale { + readonly key: LocaleKey + readonly full: string + readonly name: string + readonly native: string + readonly Flag: ElementType +} + +export const locales: Record = { + en: { key: 'en', full: 'en-US', name: languages.en.name, native: languages.en.native, Flag: GB as FC }, + ar: { key: 'ar', full: 'ar-SA', name: languages.ar.name, native: languages.ar.native, Flag: SA as FC }, + de: { key: 'de', full: 'de-DE', name: languages.de.name, native: languages.de.native, Flag: DE as FC }, + el: { key: 'el', full: 'el-GR', name: languages.el.name, native: languages.el.native, Flag: GR as FC }, + es: { key: 'es', full: 'es-ES', name: languages.es.name, native: languages.es.native, Flag: ES as FC }, + fa: { key: 'fa', full: 'fa-IR', name: languages.fa.name, native: languages.fa.native, Flag: IR as FC }, + fr: { key: 'fr', full: 'fr-FR', name: languages.fr.name, native: languages.fr.native, Flag: FR as FC }, + he: { key: 'he', full: 'he-IL', name: languages.he.name, native: languages.he.native, Flag: IL as FC }, + hi: { key: 'hi', full: 'hi-IN', name: languages.hi.name, native: languages.hi.native, Flag: IN as FC }, + id: { key: 'id', full: 'id-ID', name: languages.id.name, native: languages.id.native, Flag: ID as FC }, + it: { key: 'it', full: 'it-IT', name: languages.it.name, native: languages.it.native, Flag: IT as FC }, + ja: { key: 'ja', full: 'ja-JP', name: languages.ja.name, native: languages.ja.native, Flag: JP as FC }, + ko: { key: 'ko', full: 'ko-KR', name: languages.ko.name, native: languages.ko.native, Flag: KR as FC }, + nl: { key: 'nl', full: 'nl-NL', name: languages.nl.name, native: languages.nl.native, Flag: NL as FC }, + pt: { key: 'pt', full: 'pt-PT', name: languages.pt.name, native: languages.pt.native, Flag: PT as FC }, + ru: { key: 'ru', full: 'ru-RU', name: languages.ru.name, native: languages.ru.native, Flag: RU as FC }, + ta: { key: 'ta', full: 'ta-IN', name: languages.ta.name, native: languages.ta.native, Flag: IN as FC }, + th: { key: 'th', full: 'th-TH', name: languages.th.name, native: languages.th.native, Flag: TH as FC }, + tr: { key: 'tr', full: 'tr-TR', name: languages.tr.name, native: languages.tr.native, Flag: TR as FC }, + ur: { key: 'ur', full: 'ur-PK', name: languages.ur.name, native: languages.ur.native, Flag: PK as FC }, + vi: { key: 'vi', full: 'vi-VN', name: languages.vi.name, native: languages.vi.native, Flag: VN as FC }, + zh: { key: 'zh', full: 'zh-CN', name: languages.zh.name, native: languages.zh.native, Flag: CN as FC }, +} as const + +export const localeKeys = Object.keys(locales) + +export const localesArray: Locale[] = Object.values(locales) + +export interface I18NInitParams { + localeKey: LocaleKey +} + +export type PrettyBytesOptions = StrictOmit + +export class PrettyBytes { + private localeKey: string = DEFAULT_LOCALE_KEY as string + + public setLocale(localeKey: string) { + this.localeKey = getLocaleWithKey(localeKey).key + } + + public format(numBytes: number, options?: PrettyBytesOptions) { + return prettyBytesOriginal(numBytes, { binary: true, ...options, locale: this.localeKey }) + } +} + +const prettyBytes = new PrettyBytes() + +export function i18nInit({ localeKey }: I18NInitParams) { + const enUS = numbro.languages()['en-US'] + const allNumbroLanguages = numbroLanguages as numbro.NumbroLanguage[] + Object.values(allNumbroLanguages).forEach((languageRaw) => { + // If a language object lacks some of the features, substitute these features from English + numbro.registerLanguage({ ...enUS, ...languageRaw }) + }) + + const i18n = i18nOriginal.use(initReactI18next).createInstance({ + resources, + lng: localeKey, + fallbackLng: DEFAULT_LOCALE_KEY, + debug: process.env.DEV_ENABLE_I18N_DEBUG === '1', + keySeparator: false, // Disable dots as key separators as we use dots in keys + nsSeparator: false, + interpolation: { escapeValue: false }, + initImmediate: true, + }) + + // eslint-disable-next-line no-void + void i18n.init() + + const locale = locales[localeKey] + LuxonSettings.defaultLocale = localeKey + numbro.setLanguage(locale.full) + + return i18n +} + +export function getLocaleWithKey(key: string) { + const locale = get(locales, key) as Locale + if (isNil(locale)) { + return { ...locales[DEFAULT_LOCALE_KEY], key: DEFAULT_LOCALE_KEY } + } + return locale +} + +export async function changeLocale(i18n: I18N, localeKey: string) { + if (localeKeys.includes(localeKey)) { + const locale = getLocaleWithKey(localeKey) + LuxonSettings.defaultLocale = localeKey + numbro.setLanguage(locale.full) + await i18n.changeLanguage(localeKey) + prettyBytes.setLocale(localeKey) + return true + } + return false +} + +const i18n = i18nInit({ localeKey: DEFAULT_LOCALE_KEY }) + +export { prettyBytes } + +export default i18n + +export { default as numbro } from 'numbro' diff --git a/web/src/i18n/resources/ar/common.json b/web/src/i18n/resources/ar/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/ar/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/de/common.json b/web/src/i18n/resources/de/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/de/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/el/common.json b/web/src/i18n/resources/el/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/el/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/en/common.json b/web/src/i18n/resources/en/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/en/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/es/common.json b/web/src/i18n/resources/es/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/es/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/fa/common.json b/web/src/i18n/resources/fa/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/fa/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/fr/common.json b/web/src/i18n/resources/fr/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/fr/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/he/common.json b/web/src/i18n/resources/he/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/he/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/hi/common.json b/web/src/i18n/resources/hi/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/hi/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/id/common.json b/web/src/i18n/resources/id/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/id/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/it/common.json b/web/src/i18n/resources/it/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/it/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/ja/common.json b/web/src/i18n/resources/ja/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/ja/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/ko/common.json b/web/src/i18n/resources/ko/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/ko/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/nl/common.json b/web/src/i18n/resources/nl/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/nl/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/pt/common.json b/web/src/i18n/resources/pt/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/pt/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/ru/common.json b/web/src/i18n/resources/ru/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/ru/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/ta/common.json b/web/src/i18n/resources/ta/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/ta/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/th/common.json b/web/src/i18n/resources/th/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/th/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/tr/common.json b/web/src/i18n/resources/tr/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/tr/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/ur/common.json b/web/src/i18n/resources/ur/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/ur/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/vi/common.json b/web/src/i18n/resources/vi/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/vi/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/i18n/resources/zh/common.json b/web/src/i18n/resources/zh/common.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/src/i18n/resources/zh/common.json @@ -0,0 +1 @@ +{} diff --git a/web/src/pages/_app.tsx b/web/src/pages/_app.tsx index 21b223a66c..39280b9555 100644 --- a/web/src/pages/_app.tsx +++ b/web/src/pages/_app.tsx @@ -1,28 +1,25 @@ import 'reflect-metadata' import 'resize-observer-polyfill/dist/ResizeObserver.global' - import 'css.escape' - import dynamic from 'next/dynamic' import React, { Suspense, useMemo } from 'react' import { QueryClient, QueryClientConfig, QueryClientProvider } from '@tanstack/react-query' import { RecoilRoot } from 'recoil' import { ReactQueryDevtools } from '@tanstack/react-query-devtools' - import type { AppProps } from 'next/app' import { ThemeProvider } from 'styled-components' import { MDXProvider } from '@mdx-js/react' - +import i18n from 'src/i18n/i18n' +import { I18nextProvider } from 'react-i18next' import { theme } from 'src/theme' +import { loadPolyfills } from 'src/polyfills' import { DOMAIN_STRIPPED } from 'src/constants' import { Plausible } from 'src/components/Common/Plausible' import { LOADING } from 'src/components/Loading/Loading' import { getMdxComponents } from 'src/components/Common/MdxComponents' import { ErrorBoundary } from 'src/components/Error/ErrorBoundary' -import { loadPolyfills } from 'src/polyfills' - -import 'src/styles/global.scss' import { Layout } from 'src/components/Layout/Layout' +import 'src/styles/global.scss' const REACT_QUERY_OPTIONS: QueryClientConfig = { defaultOptions: { @@ -47,6 +44,7 @@ function MyApp({ Component, pageProps }: AppProps) { + diff --git a/web/yarn.lock b/web/yarn.lock index 883bf27d17..7c9b0a1926 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -1165,7 +1165,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@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": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.3.1", "@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.20.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== @@ -3563,6 +3563,11 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bignumber.js@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.1.1.tgz#4b072ae5aea9c20f6730e4e5d529df1271c4d885" + integrity sha512-QD46ppGintwPGuL1KqmwhR0O+N2cZUg8JG/VzwI2e28sM9TqHjQB10lI4QAaMHVbLzwVLLAwEglpKPViWX+5NQ== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -4048,6 +4053,11 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" +countries-list@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/countries-list/-/countries-list-2.6.1.tgz#d479757ac873b1e596ccea0a925962d20396c0cb" + integrity sha512-jXM1Nv3U56dPQ1DsUSsEaGmLHburo4fnB7m+1yhWDUVvx5gXCd1ok/y3gXCjXzhqyawG+igcPYcAl4qjkvopaQ== + country-flag-icons@1.5.5: version "1.5.5" resolved "https://registry.yarnpkg.com/country-flag-icons/-/country-flag-icons-1.5.5.tgz#04a41c83e2ea38ea28054d4e3eff9d1ce16aec1c" @@ -5435,6 +5445,11 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +flag-icon-css@4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/flag-icon-css/-/flag-icon-css-4.1.7.tgz#5471197f9ab965a3603b3e0face31dd513fec289" + integrity sha512-AFjSU+fv98XbU0vnTQ32vcLj89UEr1MhwDFcooQv14qWJCjg9fGZzfh9BVyDhAhIOZW/pGmJmq38RqpgPaeybQ== + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -5960,6 +5975,13 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +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" + integrity sha512-wMKQ3aJ/dwXzDHPpA7XgsRXXCkEhHkAF6Ioh7D51lgZO7Qy0LmcFddC9TI/qNQJvSM1KL8KbcR3FtuybsrzFlQ== + dependencies: + void-elements "^2.0.1" + html-void-elements@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" @@ -5990,6 +6012,13 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +i18next@19.3.2: + version "19.3.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.3.2.tgz#a17c3c8bb0dd2d8c4a8963429df99730275b3282" + integrity sha512-QDBQ8MqFWi4+L9OQjjZEKVyg9uSTy3NTU3Ri53QHe7nxtV+KD4PyLB8Kxu58gr6b9y5l8cU3mCiNHVeoxPMzAQ== + dependencies: + "@babel/runtime" "^7.3.1" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -7711,6 +7740,13 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +numbro@2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/numbro/-/numbro-2.3.6.tgz#4bd622ebe59ccbc49dad365c5b9eed200781fa21" + integrity sha512-pxpoTT3hVxQGaOA2RTzXR/muonQNd1K1HPJbWo7QOmxPwiPmoFCFfsG9XXgW3uqjyzezJ0P9IvCPDXUtJexjwg== + dependencies: + bignumber.js "^8.1.1" + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -8413,6 +8449,11 @@ prettier@2.8.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== +pretty-bytes@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + pretty-format@^27.0.2: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -8570,6 +8611,14 @@ react-gif-player@0.4.2: dependencies: prop-types "^15.6.0" +react-i18next@11.3.3: + version "11.3.3" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.3.3.tgz#a84dcc32e3ad013012964d836790d8c6afac8e88" + integrity sha512-sGnPwJ0Kf8qTRLTnTRk030KiU6WYEZ49rP9ILPvCnsmgEKyucQfTxab+klSYnCSKYija+CWL+yo+c9va9BmJeg== + dependencies: + "@babel/runtime" "^7.3.1" + html-parse-stringify2 "2.0.1" + react-icons@4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.7.1.tgz#0f4b25a5694e6972677cb189d2a72eabea7a8345" @@ -9990,10 +10039,10 @@ typeface-open-sans@0.0.75: resolved "https://registry.yarnpkg.com/typeface-open-sans/-/typeface-open-sans-0.0.75.tgz#20d0c330f14c0c40463c334adbedd6005389abe4" integrity sha512-0lLmB7pfj113OP4T78SbpSmC4OCdFQ0vUxdSXQccsSb6qF76F92iEuC/DghFgmPswTyidk8+Hwf+PS/htiJoRQ== -typescript@4.9.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== +typescript@4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" + integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== unbox-primitive@^1.0.2: version "1.0.2" @@ -10246,6 +10295,11 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" +void-elements@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== + vscode-json-languageservice@^4.1.6: version "4.2.1" resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4" From 4d29ab609a2acd497667808d73994ab069be0383 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov Date: Tue, 13 Dec 2022 18:22:11 +0100 Subject: [PATCH 16/26] feat: revamp navbar and sidebar --- content/Home.md | 30 +-- .../ClusterButtonPanel/ClusterButton.tsx | 99 +++------- .../ClusterButtonPanel/ClusterButtonGroup.tsx | 18 +- .../ClusterButtonPanel/ClusterButtonPanel.tsx | 32 ++-- .../ClusterButtonPanelLayout.tsx | 53 ------ web/src/components/Common/MutationBadge.tsx | 13 +- web/src/components/Home/HomePage.tsx | 30 ++- web/src/components/Layout/Layout.tsx | 101 +++++------ web/src/components/Layout/NavigationBar.tsx | 171 ++++++++++-------- web/src/components/Layout/PoweredByGisaid.tsx | 35 ++++ web/src/components/Link/Link.tsx | 2 +- web/src/components/Link/LinkSmart.tsx | 2 +- web/src/pages/_error.tsx | 22 +-- web/src/state/Clusters.ts | 8 + web/src/styles/global.scss | 19 +- web/src/theme.ts | 10 +- 16 files changed, 268 insertions(+), 377 deletions(-) delete mode 100644 web/src/components/ClusterButtonPanel/ClusterButtonPanelLayout.tsx create mode 100644 web/src/components/Layout/PoweredByGisaid.tsx diff --git a/content/Home.md b/content/Home.md index 9eb4e9d4d0..3c5a3906eb 100644 --- a/content/Home.md +++ b/content/Home.md @@ -1,34 +1,24 @@ -import { Link } from 'src/components/Link/Link' -import { LinkExternal } from 'src/components/Link/LinkExternal' - **Click on a variant button to start exploring!** -CoVariants provides an overview of SARS-CoV-2 variants and mutations that are of interest. Here, you can find out what -mutations define a variant, what impact they might have (with links to papers and resources), where variants are found, -and see the variants in Nextstrain builds! +CoVariants provides an overview of SARS-CoV-2 variants and mutations that are of interest. Here, you can find out what mutations define a variant, what impact they might have (with links to papers and resources), where variants are found, and see the variants in Nextstrain builds! + +Click one of the colored buttons to look at a particular [Variant](/variants) - to read information, see graphs and the protein structure, and link out to focused Nextstrain builds. +To look at many variants at once, check out the [Per Variant](/per-variant) and [Per Country](/per-country) pages, where you can view a lot of data in the same place, and compare variants and countries! -Click one of the colored buttons to look at a particular [Variant](/variants) - to read information, see graphs and the -protein structure, and link out to focused Nextstrain builds. -To look at many variants at once, check out the [Per Variant](/per-variant) and [Per Country](/per-country) pages, where -you can view a lot of data in the same place, and compare variants and countries! **What do the names mean?** -CoVariants uses the Nextstrain naming system for -variants ([read more here](https://nextstrain.org/blog/2021-01-06-updated-SARS-CoV-2-clade-naming/)). However, the fact -that there's multiple naming systems is confusing! See the table below to help find the variant you're interested in. + +CoVariants uses the Nextstrain naming system for variants ([read more here](https://nextstrain.org/blog/2021-01-06-updated-SARS-CoV-2-clade-naming/)). However, the fact that there's multiple naming systems is confusing! See the table below to help find the variant you're interested in. -How are all these variants/clades related to each other? CoVariants follows the Nextstrain Clade schema, where variants -can descend from other variants. Here's a chart to show the overall relationships of Nextstrain Clades: +How are all these variants/clades related to each other? CoVariants follows the Nextstrain Clade schema, where variants can descend from other variants. Here's a chart to show the overall relationships of Nextstrain Clades: + -This project is free and open source. The content, derived data, code used to generate the data, and code that -implements this web application can be found on -GitHub: [github.com/hodcroftlab/covariants](https://github.com/hodcroftlab/covariants/). +This project is free and open source. The content, derived data, code used to generate the data, and code that implements this web application can be found on GitHub: [github.com/hodcroftlab/covariants](https://github.com/hodcroftlab/covariants/). -> **The SARS-CoV-2 pandemic & research surrounding it is ongoing.** Every effort is made to try to keep this repository -> up-to-date, but readers should take care to double-check that the information is the latest available. +> **The SARS-CoV-2 pandemic & research surrounding it is ongoing.** Every effort is made to try to keep this repository up-to-date, but readers should take care to double-check that the information is the latest available. ## What's next? diff --git a/web/src/components/ClusterButtonPanel/ClusterButton.tsx b/web/src/components/ClusterButtonPanel/ClusterButton.tsx index 3cd12ac6b0..fa1975db69 100644 --- a/web/src/components/ClusterButtonPanel/ClusterButton.tsx +++ b/web/src/components/ClusterButtonPanel/ClusterButton.tsx @@ -1,92 +1,47 @@ /* eslint-disable camelcase */ -import React from 'react' +import React, { useCallback, useMemo } from 'react' +import { isEqual } from 'lodash' +import { useRecoilState } from 'recoil' import styled from 'styled-components' import type { ClusterDatum } from 'src/io/getClusters' -import { Link } from 'src/components/Link/Link' +import { currentClusterAtom } from 'src/state/Clusters' +import { VariantLinkBadge as VariantLinkBadgeBase } from 'src/components/Common/MutationBadge' -const ClusterButtonComponent = styled(Link)<{ $isCurrent: boolean; $color: string }>` - display: flex; - width: 200px; - height: 55px; - margin: 3px; - - border: none; - border-left: 30px solid ${(props) => props.$color}; - border-radius: 3px; - cursor: pointer; - - box-shadow: ${({ $isCurrent, theme }) => ($isCurrent ? theme.shadows.normal : theme.shadows.light)}; - background-color: ${({ $isCurrent, theme }) => ($isCurrent ? theme.white : theme.gray100)}; - text-decoration: none; - - &:active, - &:focus, - &:hover { - text-decoration: none; - } - - @media (min-width: 992px) { - } - - @media (max-width: 991.98px) { - width: 180px; - height: 45px; - } - - @media (max-width: 767.98px) { - width: 160px; - height: 40px; +const VariantLinkBadge = styled(VariantLinkBadgeBase)<{ $isCurrent: boolean }>` + @media (min-width: ${(props) => props.theme.grid.md}) { + display: block; } - @media (max-width: 575.98px) { - width: 150px; - height: 32px; - } -` - -const ClusterTitle = styled.h2<{ $isCurrent: boolean }>` - font-family: ${(props) => props.theme.font.monospace}; - font-size: 1rem; - - @media (max-width: 991.98px) { - font-size: 0.8rem; - margin: auto 7px; - } + transform: scale(1.2); + margin-bottom: 0.5rem; - @media (max-width: 767.98px) { - font-size: 0.75rem; - margin: auto 5px; - } + opacity: ${(props) => !props.$isCurrent && 0.75}; - @media (max-width: 575.98px) { - font-size: 0.7rem; - margin: auto 4px; + & > span { + border-radius: 4px; + border: ${(props) => (props.$isCurrent ? props.theme.green : 'transparent')} solid 1px; } - margin: auto 5px; - - color: ${({ $isCurrent, theme }) => ($isCurrent ? theme.gray700 : theme.gray600)}; - text-decoration: none; - - &:active, - &:focus, &:hover { - color: ${(props) => props.theme.gray700}; - text-decoration: none; + opacity: 1; } ` export interface ClusterButtonProps { cluster: ClusterDatum - isCurrent: boolean } -export function ClusterButton({ cluster, isCurrent }: ClusterButtonProps) { - const { display_name, col, build_name } = cluster +export function ClusterButton({ cluster }: ClusterButtonProps) { + const { display_name } = cluster + const [currentCluster, setCurrentCluster] = useRecoilState(currentClusterAtom) + + const isCurrent = useMemo(() => { + return isEqual(cluster, currentCluster) + }, [cluster, currentCluster]) + + const onClick = useCallback(() => { + setCurrentCluster(cluster) + }, [cluster, setCurrentCluster]) - return ( - - {display_name} - - ) + return } diff --git a/web/src/components/ClusterButtonPanel/ClusterButtonGroup.tsx b/web/src/components/ClusterButtonPanel/ClusterButtonGroup.tsx index 07e27859dc..f1b78058e1 100644 --- a/web/src/components/ClusterButtonPanel/ClusterButtonGroup.tsx +++ b/web/src/components/ClusterButtonPanel/ClusterButtonGroup.tsx @@ -1,5 +1,4 @@ import React, { useMemo, useState } from 'react' - import styled from 'styled-components' import { Button } from 'reactstrap' import type { ClusterDatum } from 'src/io/getClusters' @@ -8,21 +7,16 @@ import { ClusterButton } from 'src/components/ClusterButtonPanel/ClusterButton' const ClusterGroupContainer = styled.div` display: flex; flex-direction: column; + margin: 0 1rem; + width: 100%; ` const ClusterGroupWrapper = styled.div` display: flex; - flex-wrap: wrap; - flex: 1 1; + flex: 0; ` -const ClusterGroup = styled.div` - display: flex; - flex-wrap: wrap; - flex: 1 0; - margin: auto; - justify-content: center; -` +const ClusterGroup = styled.div`` const ShowMoreButton = styled(Button)` margin: 0 auto; @@ -45,7 +39,7 @@ export function ClusterButtonOptional({ cluster, isCurrent, showNonImportant }: return null } - return + return } export interface ClusterButtonGroupProps { @@ -55,7 +49,7 @@ export interface ClusterButtonGroupProps { export function ClusterButtonGroup({ clusterGroup, currentCluster }: ClusterButtonGroupProps) { const [showNonImportant, setShowNonImportant] = useState(false) - const toggleShowNonImportant = useMemo(() => (_: unknown) => setShowNonImportant(!showNonImportant), [showNonImportant]) // prettier-ignore + const toggleShowNonImportant = useMemo(() => (_: unknown) => setShowNonImportant(!showNonImportant), [showNonImportant]); // prettier-ignore return ( diff --git a/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx b/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx index 3cecd8eaba..a4f04e8e60 100644 --- a/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx +++ b/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx @@ -1,7 +1,7 @@ import { groupBy, isNil } from 'lodash' import React, { useMemo } from 'react' -import { Card, CardBody, CardHeader, Row } from 'reactstrap' import styled from 'styled-components' +import { Card, CardBody, CardHeader, Row } from 'reactstrap' import { ClusterDatum, useClusters } from 'src/io/getClusters' import { ClusterButtonGroup } from 'src/components/ClusterButtonPanel/ClusterButtonGroup' @@ -17,6 +17,7 @@ const ClusterGroupCard = styled(Card)` border: 0; box-shadow: none; margin-bottom: 0.5rem; + background: none; ` const ClusterGroupHeader = styled(CardHeader)` @@ -24,7 +25,7 @@ const ClusterGroupHeader = styled(CardHeader)` text-align: center; width: 100%; background: none; - color: ${(props) => props.theme.gray700}; + color: ${(props) => props.theme.gray200}; font-size: 1.1rem; font-weight: 700; text-transform: capitalize; @@ -44,23 +45,18 @@ export interface ClusterPanelProps { export function ClusterButtonPanel({ currentCluster, className }: ClusterPanelProps) { const clusters = useClusters() - const clustersGrouped = useMemo(() => { + const clusterButtons = useMemo(() => { const clustersWithType = clusters.filter((cluster) => !isNil(cluster.type)) - return groupBy(clustersWithType, 'type') - }, [clusters]) - - const clusterButtons = useMemo( - () => - Object.entries(clustersGrouped).map(([clusterType, clusterGroup]) => ( - - {clusterType} - - - - - )), - [clustersGrouped, currentCluster], - ) + const clustersGrouped = groupBy(clustersWithType, 'type') + return Object.entries(clustersGrouped).map(([clusterType, clusterGroup]) => ( + + {clusterType} + + + + + )) + }, [clusters, currentCluster]) return ( diff --git a/web/src/components/ClusterButtonPanel/ClusterButtonPanelLayout.tsx b/web/src/components/ClusterButtonPanel/ClusterButtonPanelLayout.tsx deleted file mode 100644 index 3d144a8d0e..0000000000 --- a/web/src/components/ClusterButtonPanel/ClusterButtonPanelLayout.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React, { PropsWithChildren } from 'react' - -import styled from 'styled-components' - -import type { ClusterDatum } from 'src/io/getClusters' -import { ClusterButtonPanel } from './ClusterButtonPanel' - -const FlexContainer = styled.div` - display: flex; - flex-direction: row; - max-width: calc(100ch + 256px); - margin: 0 auto; - - @media (max-width: 767.98px) { - flex-direction: column; - } -` - -const FlexFixed = styled.div` - flex: 0 0; - flex-basis: 180px; - - flex-wrap: wrap; - - @media (min-width: 1120px) { - border-right: 2px solid ${(props) => props.theme.gray200}; - padding-right: 1rem; - } -` - -const FlexGrowing = styled.div` - display: flex; - flex: 1 0; -` - -export interface ClusterButtonPanelLayoutProps { - currentCluster?: ClusterDatum -} - -export function ClusterButtonPanelLayout({ - children, - currentCluster, -}: PropsWithChildren) { - return ( - - - - - - {children} - - ) -} diff --git a/web/src/components/Common/MutationBadge.tsx b/web/src/components/Common/MutationBadge.tsx index 16164719cc..f95edef6af 100644 --- a/web/src/components/Common/MutationBadge.tsx +++ b/web/src/components/Common/MutationBadge.tsx @@ -1,13 +1,11 @@ import React, { useMemo } from 'react' - import { get } from 'lodash' import { parseVariant } from 'src/components/Common/parseVariant' import styled from 'styled-components' - import type { Mutation, MutationColors } from 'src/types' import { theme } from 'src/theme' import { AMINOACID_COLORS, CLADE_COLORS, GENE_COLORS, NUCLEOTIDE_COLORS } from 'src/colors' -import { LinkSmart } from 'src/components/Link/LinkSmart' +import { LinkSmart, LinkSmartProps } from 'src/components/Link/LinkSmart' import { parseAminoacidMutation } from 'src/components/Common/parseAminoacidMutation' import { parseNucleotideMutation } from 'src/components/Common/parseNucleotideMutation' import { formatMutation } from 'src/components/Common/formatMutation' @@ -234,17 +232,16 @@ export function variantToObjectAndString(mutation: Mutation | string) { return { mutationObj, mutationStr } } -export interface VariantLinkBadgeProps { +export interface VariantLinkBadgeProps extends LinkSmartProps { name: Mutation | string - href?: string prefix?: string } -export function VariantLinkBadge({ name, href, prefix }: VariantLinkBadgeProps) { +export function VariantLinkBadge({ name, href, prefix, ...restProps }: VariantLinkBadgeProps) { const clusterNames = useClusterNames() const { mutationObj, mutationStr } = useMemo(() => variantToObjectAndString(name), [name]) const clusterUrl = useClusterUrl(mutationStr) - const url = useMemo(() => href ?? clusterUrl, [clusterUrl, href]) + const url = useMemo(() => href?.toString() ?? clusterUrl, [clusterUrl, href]) if (!mutationObj) { return {`VariantLinkBadge: Invalid mutation: ${JSON.stringify(name)}`} @@ -263,7 +260,7 @@ export function VariantLinkBadge({ name, href, prefix }: VariantLinkBadgeProps) } return ( - + ) diff --git a/web/src/components/Home/HomePage.tsx b/web/src/components/Home/HomePage.tsx index 5265f70755..b11281dc6c 100644 --- a/web/src/components/Home/HomePage.tsx +++ b/web/src/components/Home/HomePage.tsx @@ -1,28 +1,20 @@ import React from 'react' -import { Col, Container, Row } from 'reactstrap' -import { ClusterButtonPanelLayout } from 'src/components/ClusterButtonPanel/ClusterButtonPanelLayout' import { Editable } from 'src/components/Common/Editable' +import styled from 'styled-components' import HomeContent from '../../../../content/Home.md' +const HomePageWrapper = styled.main` + margin: 0 auto; + max-width: ${(props) => props.theme.containerWidth.md}; +` + export function HomePage() { return ( - - - -

CoVariants

- -
- - - - - - - - - - -
+ + + + + ) } diff --git a/web/src/components/Layout/Layout.tsx b/web/src/components/Layout/Layout.tsx index 9995022605..ebc0debe6a 100644 --- a/web/src/components/Layout/Layout.tsx +++ b/web/src/components/Layout/Layout.tsx @@ -1,61 +1,66 @@ import React, { PropsWithChildren } from 'react' import styled from 'styled-components' import { Container as ContainerBase, Row, Col } from 'reactstrap' -import GisaidLogoBase from 'src/assets/images/GISAID_logo.svg' -import { LinkExternal } from 'src/components/Link/LinkExternal' import { NavigationBar } from 'src/components/Layout/NavigationBar' import { FooterContent } from 'src/components/Layout/Footer' +import { ClusterButtonPanel } from 'src/components/ClusterButtonPanel/ClusterButtonPanel' const Container = styled(ContainerBase)` - min-height: 100%; + overflow-y: hidden; + display: flex; + flex-direction: column; + height: 100%; width: 100%; ` const HeaderRow = styled(Row)` - display: flex; - flex-grow: 1; - flex-shrink: 0; + flex: 0; padding: 0; ` const HeaderCol = styled(Col)` - flex-grow: 1; - flex-shrink: 0; padding: 0; ` -const MainContainer = styled(ContainerBase)` - padding-bottom: 100px; -` - -const MainRow = styled(Row)`` +const MiddleRow = styled.div` + display: flex; + flex-direction: row; + margin: 0 auto; -const MainCol = styled(Col)`` + @media (max-width: 767.98px) { + flex-direction: column; + } -const FooterRow = styled(Row)` - position: relative; - margin-top: -100px; /* negative value of footer height */ - height: 100px; - clear: both; - padding-top: 50px; + @media (min-width: 1120px) { + height: 100%; + width: 100%; + } - display: flex; - flex-grow: 1; - flex-shrink: 0; + @media (max-width: 1119px) { + overflow-y: scroll; + } ` -const FooterCol = styled(Col)` - flex-grow: 1; - flex-shrink: 0; - padding: 0; +const MainContainer = styled(ContainerBase)` + @media (min-width: 1120px) { + overflow-y: scroll; + } ` -const GisaidText = styled.small` - font-size: 0.9rem; +const Sidebar = styled.aside` + flex: 0 0 250px; + flex-wrap: wrap; + + background-color: rgba(18, 42, 113, 1); + + @media (min-width: 1120px) { + overflow-y: scroll; + } ` -const GisaidLogo = styled(GisaidLogoBase)` - margin-bottom: 4px; +const FooterWrapper = styled.main` + margin: 0 auto; + max-width: ${(props) => props.theme.containerWidth.md}; ` export interface LayoutProps { @@ -71,28 +76,18 @@ export function Layout({ children }: PropsWithChildren) { - - - - {'Enabled by data from '} - - - - - - - - - - {children} - - - - - - - - + + + + + + + {children} + + + + + ) } diff --git a/web/src/components/Layout/NavigationBar.tsx b/web/src/components/Layout/NavigationBar.tsx index aac400bcb2..2264a1d17e 100644 --- a/web/src/components/Layout/NavigationBar.tsx +++ b/web/src/components/Layout/NavigationBar.tsx @@ -1,34 +1,29 @@ import { useRouter } from 'next/router' -import React, { useCallback, useState } from 'react' +import React from 'react' import styled from 'styled-components' -import { - Collapse, - Nav as NavBase, - Navbar as NavbarBase, - NavbarToggler as NavbarTogglerBase, - NavItem as NavItemBase, - NavLink as NavLinkBase, -} from 'reactstrap' +import { Nav as NavBase, Navbar as NavbarBase, NavItem as NavItemBase, NavLink as NavLinkBase } from 'reactstrap' import classNames from 'classnames' import { FaGithub, FaTwitter } from 'react-icons/fa' - -import BrandLogoBase from 'src/assets/images/logo.svg' -import BrandLogoLargeBase from 'src/assets/images/logo_text_right.svg' - import { Link } from 'src/components/Link/Link' import { LinkExternal } from 'src/components/Link/LinkExternal' import { TWITTER_USERNAME_RAW, URL_GITHUB } from 'src/constants' +import { PoweredByGisaid } from 'src/components/Layout/PoweredByGisaid' +import BrandLogoBase from 'src/assets/images/logo.svg' +import BrandLogoLargeBase from 'src/assets/images/logo_text_right.svg' let navLinksLeft: Record = { '/': 'Home', - '/faq': 'FAQ', - '/variants': 'Variants', - '/per-country': 'Per country', - '/per-variant': 'Per variant', + '/per-country': 'Countries', + '/per-variant': 'Variants', '/cases': 'Cases', - '/shared-mutations': 'Shared Mutations', - '/acknowledgements': 'Acknowledgements', + '/shared-mutations': 'Mutations', + '/credits': 'Credits', + '/faq': 'FAQ', +} + +if (process.env.NODE_ENV === 'development' || process.env.DOMAIN?.includes('vercel')) { + navLinksLeft = { ...navLinksLeft, '/debug': 'Debug' } } export function matchingUrl(url: string, pathname: string): boolean { @@ -58,18 +53,15 @@ const navLinksRight = [ }, ] -if (process.env.NODE_ENV === 'development' || process.env.DOMAIN?.includes('vercel')) { - navLinksLeft = { ...navLinksLeft, '/debug-badges': 'Debug badges' } -} - export const Navbar = styled(NavbarBase)` - box-shadow: none; + min-height: 50px; + box-shadow: 0 2px 10px 2px #222f; + background: rgb(18, 42, 113); + background: linear-gradient(0deg, rgba(18, 42, 113, 1) 0%, rgb(79, 11, 136) 100%); ` export const Nav = styled(NavBase)` - & .nav-link { - padding: 5px; - } + background-color: transparent !important; ` export const NavWrappable = styled(NavBase)` @@ -77,21 +69,13 @@ export const NavWrappable = styled(NavBase)` scrollbar-width: none; -ms-overflow-style: none; + &::-webkit-scrollbar { display: none; } width: 100%; - background-image: linear-gradient(to right, white, white), linear-gradient(to right, white, white), - linear-gradient(to right, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0)), - linear-gradient(to left, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0)); - background-position: left center, right center, left center, right center; - background-repeat: no-repeat; - background-color: white; - background-size: 20px 100%, 20px 100%, 10px 100%, 10px 100%; - background-attachment: local, local, scroll, scroll; - & .nav-link { padding: 5px; } @@ -103,13 +87,19 @@ export const NavItem = styled(NavItemBase)` flex-grow: 0; flex-shrink: 0; + font-weight: bold; + &.active { - background-color: #6bb24e; - border-radius: 5px; + } + + & > .nav-link { + padding: 5px; + color: #ddda !important; } &.active > .nav-link { - color: white !important; + color: #fff !important; + text-decoration: #fffa solid underline 3px; } @media (max-width: 991.98px) { @@ -121,64 +111,85 @@ export const NavLink = styled(NavLinkBase)` margin: 0 auto; ` +const navButtonRightSize = 37 + +export const NavLinkRight = styled(NavLinkBase)` + background-color: #fffb; + width: ${navButtonRightSize}px; + height: ${navButtonRightSize}px; + border-radius: ${navButtonRightSize}px; + margin: 0 0.25rem; + padding: 5px; +` + export const LinkRight = styled(LinkExternal)`` -export const NavbarToggler = styled(NavbarTogglerBase)` - border: none; +export const BrandLogoSmall = styled(BrandLogoBase)` + height: 40px; + margin: auto; ` -export const BrandLogo = styled(BrandLogoBase)` +export const BrandLogoLarge = styled(BrandLogoLargeBase)` height: 40px; margin-left: 10px; margin-right: 10px; - margin-top: 4px; + margin-top: 5px; ` -export const BrandLogoLarge = styled(BrandLogoLargeBase)` - height: 40px; - margin: 7px 10px 10px; +const BrandWrapper = styled.div` + margin-right: 2rem; + margin-left: 1rem; +` + +const BrandRowUpper = styled.div`` + +const BrandRowLower = styled.div` + position: relative; + top: -12px; + left: 50px; ` export function NavigationBar() { const { pathname } = useRouter() - const [isOpen, setIsOpen] = useState(false) - const toggle = useCallback(() => setIsOpen(!isOpen), [isOpen]) return ( - - - - - - - - - - - {Object.entries(navLinksLeft).map(([url, text]) => { - return ( - - - {text} - - - ) - })} - - - - + ) + })} + + + ) } diff --git a/web/src/components/Layout/PoweredByGisaid.tsx b/web/src/components/Layout/PoweredByGisaid.tsx new file mode 100644 index 0000000000..2afd3fc44c --- /dev/null +++ b/web/src/components/Layout/PoweredByGisaid.tsx @@ -0,0 +1,35 @@ +import React, { useMemo } from 'react' +import styled from 'styled-components' +import { useTranslationSafe } from 'src/helpers/useTranslationSafe' +import GisaidLogoBase from 'src/assets/images/GISAID_logo.svg' +import { LinkExternal } from 'src/components/Link/LinkExternal' +import classNames from 'classnames' + +const GisaidText = styled.small` + color: #fffd; + font-size: 0.75rem; +` + +const GisaidLogo = styled(GisaidLogoBase)`` + +export function PoweredByGisaid({ className }: { className?: string }) { + const { t } = useTranslationSafe() + + const { textBefore, textAfter } = useMemo(() => { + const [textBefore, textAfter] = t("Enabled by data from 'GISAID'").split("'GISAID'") + return { + textBefore: textBefore ? {textBefore} : null, + textAfter: textAfter ? {textAfter} : null, + } + }, [t]) + + return ( + + {textBefore} + + + + {textAfter} + + ) +} diff --git a/web/src/components/Link/Link.tsx b/web/src/components/Link/Link.tsx index c9f623aedc..b5e36a56de 100644 --- a/web/src/components/Link/Link.tsx +++ b/web/src/components/Link/Link.tsx @@ -8,7 +8,7 @@ export interface LinkProps extends PropsWithChildren + {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} {children} diff --git a/web/src/components/Link/LinkSmart.tsx b/web/src/components/Link/LinkSmart.tsx index ff514b0b7d..1da715e495 100644 --- a/web/src/components/Link/LinkSmart.tsx +++ b/web/src/components/Link/LinkSmart.tsx @@ -6,7 +6,7 @@ import isAbsoluteUrl from 'is-absolute-url' import { Link, LinkProps } from './Link' import { LinkExternal, LinkExternalProps } from './LinkExternal' -export interface LinkSmartProps extends StrictOmit { +export interface LinkSmartProps extends StrictOmit { href?: string } diff --git a/web/src/pages/_error.tsx b/web/src/pages/_error.tsx index 0a1a40b06d..8997b53d58 100644 --- a/web/src/pages/_error.tsx +++ b/web/src/pages/_error.tsx @@ -1,31 +1,11 @@ import React, { useMemo } from 'react' import type { NextPageContext } from 'next' import styled from 'styled-components' -import { Button, Col, Container as ContainerBase, Row } from 'reactstrap' - +import { Button, Col, Row } from 'reactstrap' import { ErrorContent } from 'src/components/Error/ErrorContent' import { ErrorContentExplanation } from 'src/components/Error/ErrorContentExplanation' import { useReloadPage } from 'src/hooks/useReloadPage' -export const Container = styled(ContainerBase)` - max-height: 100vh; - height: 100%; - max-width: ${(props) => props.theme.xl}; - margin: 0 auto; - display: flex; - flex-direction: column; - - @media (max-width: 991.98px) { - padding-left: 10px; - padding-right: 10px; - } - - @media (max-width: 767.98px) { - padding-left: 5px; - padding-right: 5px; - } -` - export const MainContent = styled.main` margin: 0 auto; height: 100%; diff --git a/web/src/state/Clusters.ts b/web/src/state/Clusters.ts index 7b0013bffd..6934c5bdba 100644 --- a/web/src/state/Clusters.ts +++ b/web/src/state/Clusters.ts @@ -1,4 +1,12 @@ +import type { ClusterDatum } from 'src/io/getClusters' +import { atom } from 'recoil' + export interface Cluster { cluster: string enabled: boolean } + +export const currentClusterAtom = atom({ + key: 'currentClusterAtom', + default: undefined, +}) diff --git a/web/src/styles/global.scss b/web/src/styles/global.scss index 7c1a4321f6..2be90d0634 100644 --- a/web/src/styles/global.scss +++ b/web/src/styles/global.scss @@ -23,34 +23,23 @@ } html, -body { +body, +#__next { height: 100%; + width: 100%; margin: 0; -} - -html { - overflow-y: auto; + padding: 0; } body { background-color: $body-bg; } -#__next { - height: 100%; -} - .container, .container-fluid { padding: 0; } -.main-container { - height: 100%; - background-color: $body-bg; - min-width: 320px; -} - .bi.bi-link-45deg.mdx-link-icon { color: $gray-600; } diff --git a/web/src/theme.ts b/web/src/theme.ts index 939130493c..371091c82a 100644 --- a/web/src/theme.ts +++ b/web/src/theme.ts @@ -1,6 +1,6 @@ import { rgba } from 'polished' -const gridBreakpoints = { +const grid = { xs: '0', sm: '576px', md: '768px', @@ -9,7 +9,7 @@ const gridBreakpoints = { xxl: '2000px', } -const containerMaxWidths = { +const containerWidth = { sm: '540px', md: '720px', lg: '960px', @@ -172,11 +172,13 @@ export const clusters = { } export const theme = { + bodyColor: basicColors.gray700, + bodyBg: basicColors.white, ...basicColors, ...themeColors, - ...gridBreakpoints, + grid, + containerWidth, link, - containerMaxWidths, font, shadows, plot, From c3533328b42f84334db49543b9c143380319e31e Mon Sep 17 00:00:00 2001 From: ivan-aksamentov Date: Tue, 13 Dec 2022 23:27:03 +0100 Subject: [PATCH 17/26] feat: revamp layout; add debug page --- web/.eslintrc.js | 2 +- .../ClusterButtonPanel/ClusterButton.tsx | 1 - .../ClusterButtonPanel/ClusterButtonPanel.tsx | 51 +++++--- web/src/components/Layout/Layout.tsx | 113 +++++++--------- web/src/components/Layout/NavigationBar.tsx | 12 +- web/src/io/getClusters.ts | 1 - web/src/pages/debug.tsx | 123 ++++++++++++++++++ 7 files changed, 210 insertions(+), 93 deletions(-) create mode 100644 web/src/pages/debug.tsx diff --git a/web/.eslintrc.js b/web/.eslintrc.js index c077f7042c..68cf51eeb3 100644 --- a/web/.eslintrc.js +++ b/web/.eslintrc.js @@ -82,7 +82,7 @@ module.exports = { '@typescript-eslint/unbound-method': ['off'], 'array-func/no-unnecessary-this-arg': 'off', 'array-func/prefer-array-from': 'off', - 'camelcase': 'warn', + 'camelcase': 'off', 'cflint/no-substr': 'warn', 'cflint/no-this-assignment': 'warn', 'import/extensions': [ diff --git a/web/src/components/ClusterButtonPanel/ClusterButton.tsx b/web/src/components/ClusterButtonPanel/ClusterButton.tsx index fa1975db69..9f2e4270d0 100644 --- a/web/src/components/ClusterButtonPanel/ClusterButton.tsx +++ b/web/src/components/ClusterButtonPanel/ClusterButton.tsx @@ -1,4 +1,3 @@ -/* eslint-disable camelcase */ import React, { useCallback, useMemo } from 'react' import { isEqual } from 'lodash' import { useRecoilState } from 'recoil' diff --git a/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx b/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx index a4f04e8e60..55203c9a06 100644 --- a/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx +++ b/web/src/components/ClusterButtonPanel/ClusterButtonPanel.tsx @@ -1,14 +1,14 @@ -import { groupBy, isNil } from 'lodash' +import { get, groupBy, isNil } from 'lodash' import React, { useMemo } from 'react' import styled from 'styled-components' -import { Card, CardBody, CardHeader, Row } from 'reactstrap' +import { Card, CardBody, CardHeader, Row, RowProps } from 'reactstrap' import { ClusterDatum, useClusters } from 'src/io/getClusters' import { ClusterButtonGroup } from 'src/components/ClusterButtonPanel/ClusterButtonGroup' +import { useTranslationSafe } from 'src/helpers/useTranslationSafe' const ClustersRow = styled(Row)` display: flex; - flex-wrap: wrap; - flex-direction: column; + flex-direction: row; ` const ClusterGroupCard = styled(Card)` @@ -21,45 +21,54 @@ const ClusterGroupCard = styled(Card)` ` const ClusterGroupHeader = styled(CardHeader)` - flex: 0 0 100%; - text-align: center; - width: 100%; background: none; - color: ${(props) => props.theme.gray200}; + color: ${(props) => props.theme.gray300}; font-size: 1.1rem; font-weight: 700; - text-transform: capitalize; ` const ClusterGroupBody = styled(CardBody)` display: flex; padding: 0; margin: auto; + background: none; ` -export interface ClusterPanelProps { +export interface ClusterPanelProps extends RowProps { currentCluster?: ClusterDatum className?: string } -export function ClusterButtonPanel({ currentCluster, className }: ClusterPanelProps) { +export function ClusterButtonPanel({ currentCluster, ...restProps }: ClusterPanelProps) { + const { t } = useTranslationSafe() const clusters = useClusters() const clusterButtons = useMemo(() => { const clustersWithType = clusters.filter((cluster) => !isNil(cluster.type)) const clustersGrouped = groupBy(clustersWithType, 'type') - return Object.entries(clustersGrouped).map(([clusterType, clusterGroup]) => ( - - {clusterType} - - - - - )) - }, [clusters, currentCluster]) + + return Object.entries(clustersGrouped).map(([clusterType, clusterGroup]) => { + const clusterTypeHeading = get( + { + variant: t('Variants'), + mutation: t('Mutations'), + }, + clusterType, + 'Other', + ) + return ( + + {clusterTypeHeading.toUpperCase()} + + + + + ) + }) + }, [clusters, currentCluster, t]) return ( - + {clusterButtons} ) diff --git a/web/src/components/Layout/Layout.tsx b/web/src/components/Layout/Layout.tsx index ebc0debe6a..82707379c8 100644 --- a/web/src/components/Layout/Layout.tsx +++ b/web/src/components/Layout/Layout.tsx @@ -1,66 +1,45 @@ import React, { PropsWithChildren } from 'react' import styled from 'styled-components' -import { Container as ContainerBase, Row, Col } from 'reactstrap' -import { NavigationBar } from 'src/components/Layout/NavigationBar' -import { FooterContent } from 'src/components/Layout/Footer' +import { HEIGHT_NAVBAR, NavigationBar } from 'src/components/Layout/NavigationBar' +// import { FooterContent } from 'src/components/Layout/Footer' import { ClusterButtonPanel } from 'src/components/ClusterButtonPanel/ClusterButtonPanel' -const Container = styled(ContainerBase)` - overflow-y: hidden; - display: flex; - flex-direction: column; - height: 100%; - width: 100%; +const Header = styled.div` + height: ${HEIGHT_NAVBAR}px; ` -const HeaderRow = styled(Row)` - flex: 0; - padding: 0; -` - -const HeaderCol = styled(Col)` - padding: 0; +const Body = styled.div` + position: absolute; + top: ${HEIGHT_NAVBAR}px; + right: 0; + bottom: 0; + left: 0; + display: flex; + background-color: ${(props) => props.theme.bodyBg}; ` -const MiddleRow = styled.div` +const Sidebar = styled.div` + flex: 0 0 240px; display: flex; - flex-direction: row; - margin: 0 auto; - - @media (max-width: 767.98px) { - flex-direction: column; - } - - @media (min-width: 1120px) { - height: 100%; - width: 100%; - } - - @media (max-width: 1119px) { - overflow-y: scroll; - } + flex-direction: column; + background-color: rgba(18, 42, 113, 1); ` -const MainContainer = styled(ContainerBase)` - @media (min-width: 1120px) { - overflow-y: scroll; - } +const Main = styled.div` + flex: 1; + display: flex; + flex-direction: column; ` -const Sidebar = styled.aside` - flex: 0 0 250px; - flex-wrap: wrap; - - background-color: rgba(18, 42, 113, 1); - - @media (min-width: 1120px) { - overflow-y: scroll; - } +const Content = styled.div` + flex: 1; + display: flex; + overflow: auto; ` -const FooterWrapper = styled.main` - margin: 0 auto; - max-width: ${(props) => props.theme.containerWidth.md}; +const Box = styled.div` + min-height: min-content; + display: flex; ` export interface LayoutProps { @@ -69,25 +48,31 @@ export interface LayoutProps { export function Layout({ children }: PropsWithChildren) { return ( - - - - - - +
+
+ +
- + - + + + + + - - {children} - - - - - - +
+ + + {children} + {/* */} + {/* */} + {/* */} + + +
+ +
) } diff --git a/web/src/components/Layout/NavigationBar.tsx b/web/src/components/Layout/NavigationBar.tsx index 2264a1d17e..0b9b703d08 100644 --- a/web/src/components/Layout/NavigationBar.tsx +++ b/web/src/components/Layout/NavigationBar.tsx @@ -12,6 +12,8 @@ import { PoweredByGisaid } from 'src/components/Layout/PoweredByGisaid' import BrandLogoBase from 'src/assets/images/logo.svg' import BrandLogoLargeBase from 'src/assets/images/logo_text_right.svg' +export const HEIGHT_NAVBAR = 69 + let navLinksLeft: Record = { '/': 'Home', '/per-country': 'Countries', @@ -54,7 +56,7 @@ const navLinksRight = [ ] export const Navbar = styled(NavbarBase)` - min-height: 50px; + min-height: ${HEIGHT_NAVBAR}px; box-shadow: 0 2px 10px 2px #222f; background: rgb(18, 42, 113); background: linear-gradient(0deg, rgba(18, 42, 113, 1) 0%, rgb(79, 11, 136) 100%); @@ -111,13 +113,13 @@ export const NavLink = styled(NavLinkBase)` margin: 0 auto; ` -const navButtonRightSize = 37 +const SIZE_NAV_BUTTON_RIGHT = 37 export const NavLinkRight = styled(NavLinkBase)` background-color: #fffb; - width: ${navButtonRightSize}px; - height: ${navButtonRightSize}px; - border-radius: ${navButtonRightSize}px; + width: ${SIZE_NAV_BUTTON_RIGHT}px; + height: ${SIZE_NAV_BUTTON_RIGHT}px; + border-radius: ${SIZE_NAV_BUTTON_RIGHT}px; margin: 0 0.25rem; padding: 5px; ` diff --git a/web/src/io/getClusters.ts b/web/src/io/getClusters.ts index 5f0f683995..6f61234207 100644 --- a/web/src/io/getClusters.ts +++ b/web/src/io/getClusters.ts @@ -1,4 +1,3 @@ -/* eslint-disable camelcase */ import urljoin from 'url-join' import type { Mutation } from 'src/types' import { useAxiosQuery } from 'src/hooks/useAxiosQuery' diff --git a/web/src/pages/debug.tsx b/web/src/pages/debug.tsx new file mode 100644 index 0000000000..7852536ac4 --- /dev/null +++ b/web/src/pages/debug.tsx @@ -0,0 +1,123 @@ +import React from 'react' +import styled from 'styled-components' +import { Var, WhoBadge } from 'src/components/Common/MutationBadge' +import { LinkSmart } from 'src/components/Link/LinkSmart' +import { useClusters } from 'src/io/getClusters' +import { GREEK_ALPHABET } from 'src/names' + +const domain = process.env.DOMAIN ?? '' + +const Container = styled.div` + flex: 1; + display: flex; + flex-direction: row; +` + +const Main = styled.div` + flex: 1; + display: flex; + flex-direction: column; +` + +const Heading = styled.h3` + flex: 0; + height: 40px; + text-align: center; +` + +const Content = styled.div` + flex: 1 1 100%; + display: flex; + overflow: auto; +` + +const Box = styled.div` + min-height: min-content; + display: flex; +` + +const JsonText = styled.pre` + flex: 1; + color: #222; + background-color: #ccc; + overflow: auto; + font-size: 0.8rem; + max-width: 700px; + margin: 0; +` + +const Ul = styled.ul` + flex: 1 1 100%; + list-style: none; + padding: 1rem; + margin: 0; + + & > li { + padding: 0.25rem; + } +` + +export default function DebugBadges() { + const clusters = useClusters() + + return ( + +
+ {'Display names'} + + +
    + {clusters.map(({ display_name }) => ( +
  • + +
  • + ))} +
+
+
+
+ +
+ {'Build names'} + + +
    + {clusters.map(({ build_name }) => { + const url = `${domain}/variants/${build_name}` + return ( +
  • + {build_name} +
  • + ) + })} +
+
+
+
+ +
+ {'Greek letters'} + + +
    + {Object.keys(GREEK_ALPHABET).map((letter) => ( +
  • + +
  • + ))} +
+
+
+
+ +
+ {'Clusters JSON'} + + + {JSON.stringify({ clusters }, null, 2)} + + +
+
+ ) +} From ed917c11ce23b7ea9dea4c60dbcf25fe1c0bdd38 Mon Sep 17 00:00:00 2001 From: ivan-aksamentov Date: Wed, 14 Dec 2022 00:18:07 +0100 Subject: [PATCH 18/26] fix: navbar warnings --- web/src/components/Layout/NavigationBar.tsx | 61 ++++++++++----------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/web/src/components/Layout/NavigationBar.tsx b/web/src/components/Layout/NavigationBar.tsx index 0b9b703d08..ff4574501a 100644 --- a/web/src/components/Layout/NavigationBar.tsx +++ b/web/src/components/Layout/NavigationBar.tsx @@ -1,9 +1,7 @@ import { useRouter } from 'next/router' import React from 'react' - import styled from 'styled-components' -import { Nav as NavBase, Navbar as NavbarBase, NavItem as NavItemBase, NavLink as NavLinkBase } from 'reactstrap' -import classNames from 'classnames' +import { Nav as NavBase, Navbar as NavbarBase, NavItem as NavItemBase } from 'reactstrap' import { FaGithub, FaTwitter } from 'react-icons/fa' import { Link } from 'src/components/Link/Link' import { LinkExternal } from 'src/components/Link/LinkExternal' @@ -86,45 +84,45 @@ export const NavWrappable = styled(NavBase)` export const NavItem = styled(NavItemBase)` padding: 0; - flex-grow: 0; - flex-shrink: 0; - - font-weight: bold; - &.active { } - & > .nav-link { - padding: 5px; - color: #ddda !important; - } - - &.active > .nav-link { - color: #fff !important; - text-decoration: #fffa solid underline 3px; - } - @media (max-width: 991.98px) { margin: 0 auto; } ` -export const NavLink = styled(NavLinkBase)` +export const NavLink = styled(Link)<{ $active?: boolean }>` margin: 0 auto; + padding: 5px; + color: #ddda !important; + + font-weight: bold; + + ${(props) => + props.$active && + ` + color: #fff !important; + text-decoration: #fffa solid underline 3px; + `} ` -const SIZE_NAV_BUTTON_RIGHT = 37 +const SIZE_NAV_BUTTON_RIGHT = 40 + +export const NavLinkRight = styled(LinkExternal)` + background-color: #fff; + opacity: 0.8; -export const NavLinkRight = styled(NavLinkBase)` - background-color: #fffb; width: ${SIZE_NAV_BUTTON_RIGHT}px; height: ${SIZE_NAV_BUTTON_RIGHT}px; border-radius: ${SIZE_NAV_BUTTON_RIGHT}px; margin: 0 0.25rem; - padding: 5px; -` + padding: 7px; -export const LinkRight = styled(LinkExternal)`` + &:hover { + opacity: 1; + } +` export const BrandLogoSmall = styled(BrandLogoBase)` height: 40px; @@ -171,8 +169,8 @@ export function NavigationBar() { {Object.entries(navLinksLeft).map(([url, text]) => { return ( - - + + {text} @@ -181,13 +179,10 @@ export function NavigationBar() {