From 5c75edd2143e6e1a2c266633fa91b0c75068cbe7 Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Fri, 12 May 2023 10:38:06 +1200 Subject: [PATCH 001/251] Waitp 1219 UI charts components package (#4555) * WAITP-1219 Create ui-chart-components package * WAITP-1219 remove charts folder from ui-components package * WAITP-1219 Update scripts for packages * WAITP-1219 Update web-frontend imports * WAITP-1219 Update admin panel imports * WAITP-1219 Update LESMIS imports * WAITP-1210 Update ui-components-package imports * WAITP-1219 Update date range picker story * WAITP-1219 update stories and tests * WAITP-1219 Update chart component tests * WAITP-1219 add utils for chart granularities * WAITP-1219 update package.json for utils * WAITP-1219 Update exports in utils * WAITP-1219 Update jestFileMock for web-frontend * WAITP-1219 Update readme * WAITP-1219 Update dockerfile * WAITP-1219 Update file arrangement * WAITP-1219 Update dependency files * WAITP-1219 Update ListVisual eslint error --- .eslintrc | 7 + Dockerfile | 1 + README.md | 3 +- packages/admin-panel/package.json | 2 + .../components/PreviewSection.js | 4 +- packages/devops/ci/tupaia-ci-cd.Dockerfile | 3 + packages/lesmis/package.json | 4 +- packages/lesmis/src/api/queries/utils.js | 2 +- .../src/components/DashboardReportModal.js | 8 +- .../lesmis/src/components/Visuals/Chart.js | 2 +- .../src/components/Visuals/ListVisual.js | 44 ---- .../Visuals}/ListVisual/ColorCircle.js | 2 +- .../Visuals}/ListVisual/ListVisual.js | 54 ++++- .../components/Visuals}/ListVisual/Rows.js | 2 +- .../components/Visuals/ListVisual/index.js | 1 + packages/ui-chart-components/.babelrc.js | 42 ++++ packages/ui-chart-components/.npmrc | 1 + .../.storybook/AppProviders.js | 34 +++ .../ui-chart-components/.storybook/main.js | 5 + .../.storybook/moduleMock.js | 5 + .../.storybook/preview-head.html | 4 + .../ui-chart-components/.storybook/preview.js | 23 ++ .../.storybook/webpack.config.js | 50 ++++ packages/ui-chart-components/README.md | 30 +++ packages/ui-chart-components/jest.config.js | 17 ++ packages/ui-chart-components/jestFileMock.js | 6 + packages/ui-chart-components/package.json | 42 ++++ .../public/psss-logo-white.svg | 11 + .../src/__tests__}/parseChartConfig.test.js | 9 +- .../src/components/Axes}/VerticalTick.js | 2 +- .../src/components/Axes}/XAxis.js | 6 +- .../src/components/Axes}/YAxes.js | 6 +- .../src/components/Axes/index.js | 7 + .../src/components}/CartesianChart.js | 22 +- .../src/components}/Chart.js | 18 +- .../src/components}/ChartTable.js | 8 +- .../src/components/Charts}/AreaChart.js | 4 +- .../src/components/Charts}/BarChart.js | 6 +- .../src/components/Charts}/GaugeChart.js | 6 +- .../src/components/Charts}/LineChart.js | 4 +- .../src/components/Charts}/PieChart.js | 10 +- .../src/components/Charts/index.js | 10 + .../src/components/Reference}/ChartTooltip.js | 6 +- .../src/components/Reference}/Legend.js | 4 +- .../components/Reference}/ReferenceLabel.js | 2 +- .../components/Reference}/ReferenceLines.js | 4 +- .../components/Reference}/TooltipContainer.js | 2 +- .../src/components/Reference/index.js | 10 + .../src/components/index.js | 5 + .../src}/constants/colors.js | 2 +- .../src}/constants/constants.js | 6 +- .../src}/constants/index.js | 2 +- .../src}/constants/propTypes.js | 2 +- packages/ui-chart-components/src/index.js | 3 + .../src/utils}/getChartTableData.js | 8 +- .../ui-chart-components/src/utils/index.js | 8 + .../src/utils}/parseChartConfig.js | 5 +- .../src/utils}/useChartDataExport.js | 5 +- .../src/utils}/utils.js | 6 +- .../stories}/barChart.stories.js | 6 +- .../stories}/composedChart.stories.js | 6 +- .../stories}/data/barChartViewContent.json | 0 .../data/composedChartViewContent.json | 0 .../stories}/data/gaugeChartViewContent.json | 0 .../stories}/data/lineChartViewContent.json | 0 .../stories}/data/listVisualViewContent.json | 0 .../stories}/data/pieChartViewContent.json | 0 .../stories}/data/stackedBarChart.json | 0 .../stories}/gaugeChart.stories.js | 4 +- .../stories}/helpers.js | 21 +- .../stories}/lineChart.stories.js | 6 +- .../stories}/noData.stories.js | 6 +- .../stories}/pieChart.stories.js | 6 +- .../stories}/stackedBarChart.stories.js | 6 +- .../stories/theme/colors.js | 36 +++ .../stories/theme/darkTheme.js | 12 + .../stories/theme}/index.js | 4 +- .../stories/theme/lightTheme.js | 125 ++++++++++ .../DateRangePicker/DateRangePicker.test.js | 10 +- .../src/components/Chart/index.js | 12 - .../DateRangePicker/DatePickerDialog.js | 14 +- .../DateRangePicker/DateRangePicker.js | 4 +- .../components/DateRangePicker/WeekPicker.js | 10 +- .../DateRangePicker/useDateRangePicker.js | 15 +- .../src/components/ListVisual/index.js | 6 - .../src/components/Table/TableRow.js | 2 - .../ui-components/src/components/index.js | 2 - .../stories/chart/listVisual.stories.js | 93 ------- .../stories/dateRangePicker.stories.js | 4 +- .../stories/tables/expandableTable.stories.js | 1 + packages/utils/package.json | 1 + ....js => getDateRangeForGranularity.test.js} | 2 +- .../period/periodGranularities.test.js | 227 ++++++++++++++++++ ...arity.js => getDateRangeForGranularity.js} | 0 packages/utils/src/period/index.js | 4 +- .../src/period}/periodGranularities.js | 8 +- .../src/period}/weekDisplayFormats.js | 0 packages/web-frontend/jest.config.js | 1 + packages/web-frontend/package.json | 4 +- .../src/components/View/ChartWrapper.js | 2 +- .../web-frontend/src/components/View/View.js | 2 +- .../EnlargedDialog/EnlargedDialog.js | 2 +- scripts/bash/getInternalDependencies.sh | 2 +- tupaia-packages.code-workspace | 4 + yarn.lock | 24 ++ 105 files changed, 969 insertions(+), 332 deletions(-) delete mode 100644 packages/lesmis/src/components/Visuals/ListVisual.js rename packages/{ui-components/src/components => lesmis/src/components/Visuals}/ListVisual/ColorCircle.js (96%) rename packages/{ui-components/src/components => lesmis/src/components/Visuals}/ListVisual/ListVisual.js (76%) rename packages/{ui-components/src/components => lesmis/src/components/Visuals}/ListVisual/Rows.js (97%) create mode 100644 packages/lesmis/src/components/Visuals/ListVisual/index.js create mode 100644 packages/ui-chart-components/.babelrc.js create mode 100644 packages/ui-chart-components/.npmrc create mode 100644 packages/ui-chart-components/.storybook/AppProviders.js create mode 100644 packages/ui-chart-components/.storybook/main.js create mode 100644 packages/ui-chart-components/.storybook/moduleMock.js create mode 100644 packages/ui-chart-components/.storybook/preview-head.html create mode 100644 packages/ui-chart-components/.storybook/preview.js create mode 100644 packages/ui-chart-components/.storybook/webpack.config.js create mode 100644 packages/ui-chart-components/README.md create mode 100644 packages/ui-chart-components/jest.config.js create mode 100644 packages/ui-chart-components/jestFileMock.js create mode 100644 packages/ui-chart-components/package.json create mode 100755 packages/ui-chart-components/public/psss-logo-white.svg rename packages/{ui-components/src/__tests__/components/Chart => ui-chart-components/src/__tests__}/parseChartConfig.test.js (90%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Axes}/VerticalTick.js (92%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Axes}/XAxis.js (96%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Axes}/YAxes.js (97%) create mode 100644 packages/ui-chart-components/src/components/Axes/index.js rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components}/CartesianChart.js (92%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components}/Chart.js (88%) rename packages/{ui-components/src/components/Chart/Table => ui-chart-components/src/components}/ChartTable.js (82%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Charts}/AreaChart.js (86%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Charts}/BarChart.js (93%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Charts}/GaugeChart.js (96%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Charts}/LineChart.js (94%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Charts}/PieChart.js (96%) create mode 100644 packages/ui-chart-components/src/components/Charts/index.js rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Reference}/ChartTooltip.js (95%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Reference}/Legend.js (97%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Reference}/ReferenceLabel.js (92%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Reference}/ReferenceLines.js (96%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/components/Reference}/TooltipContainer.js (78%) create mode 100644 packages/ui-chart-components/src/components/Reference/index.js create mode 100644 packages/ui-chart-components/src/components/index.js rename packages/{ui-components/src/components/Chart => ui-chart-components/src}/constants/colors.js (96%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src}/constants/constants.js (88%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src}/constants/index.js (62%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src}/constants/propTypes.js (94%) create mode 100644 packages/ui-chart-components/src/index.js rename packages/{ui-components/src/components/Chart/Table => ui-chart-components/src/utils}/getChartTableData.js (93%) create mode 100644 packages/ui-chart-components/src/utils/index.js rename packages/{ui-components/src/components/Chart => ui-chart-components/src/utils}/parseChartConfig.js (96%) rename packages/{ui-components/src/components/Chart/Table => ui-chart-components/src/utils}/useChartDataExport.js (70%) rename packages/{ui-components/src/components/Chart => ui-chart-components/src/utils}/utils.js (89%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/barChart.stories.js (82%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/composedChart.stories.js (82%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/data/barChartViewContent.json (100%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/data/composedChartViewContent.json (100%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/data/gaugeChartViewContent.json (100%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/data/lineChartViewContent.json (100%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/data/listVisualViewContent.json (100%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/data/pieChartViewContent.json (100%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/data/stackedBarChart.json (100%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/gaugeChart.stories.js (89%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/helpers.js (74%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/lineChart.stories.js (82%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/noData.stories.js (88%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/pieChart.stories.js (82%) rename packages/{ui-components/stories/chart => ui-chart-components/stories}/stackedBarChart.stories.js (81%) create mode 100644 packages/ui-chart-components/stories/theme/colors.js create mode 100644 packages/ui-chart-components/stories/theme/darkTheme.js rename packages/{ui-components/src/components/Chart/Table => ui-chart-components/stories/theme}/index.js (53%) create mode 100644 packages/ui-chart-components/stories/theme/lightTheme.js delete mode 100644 packages/ui-components/src/components/Chart/index.js delete mode 100644 packages/ui-components/src/components/ListVisual/index.js delete mode 100644 packages/ui-components/stories/chart/listVisual.stories.js rename packages/utils/src/__tests__/period/{periodGranularity.test.js => getDateRangeForGranularity.test.js} (94%) create mode 100644 packages/utils/src/__tests__/period/periodGranularities.test.js rename packages/utils/src/period/{periodGranularity.js => getDateRangeForGranularity.js} (100%) rename packages/{ui-components/src/components/Chart => utils/src/period}/periodGranularities.js (97%) rename packages/{ui-components/src/components/Chart => utils/src/period}/weekDisplayFormats.js (100%) diff --git a/.eslintrc b/.eslintrc index c840949b52..03400c972f 100644 --- a/.eslintrc +++ b/.eslintrc @@ -76,6 +76,7 @@ "packages/lesmis/**", "packages/psss/**", "packages/ui-components/**", + "packages/ui-chart-components/**", "packages/web-frontend/**" ], "env": { @@ -165,6 +166,12 @@ "import/no-extraneous-dependencies": "off" } }, + { + "files": ["packages/ui-chart-components/**"], + "rules": { + "import/no-extraneous-dependencies": "off" + } + }, { "files": ["packages/web-config-server/**"], "plugins": ["module-resolver"], diff --git a/Dockerfile b/Dockerfile index 2cbb8169eb..24d057312f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,6 +38,7 @@ COPY packages/utils/. ./packages/utils COPY packages/tsutils/. ./packages/tsutils COPY packages/types/. ./packages/types COPY packages/ui-components/. ./packages/ui-components +COPY packages/ui-chart-components/. ./packages/ui-chart-components COPY packages/weather-api/. ./packages/weather-api COPY packages/server-boilerplate/. ./packages/server-boilerplate COPY packages/kobo-api/. ./packages/kobo-api diff --git a/README.md b/README.md index d171167760..d375457ab8 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ if you prefer to pre-build internal dependencies, add `--skip-internal` to the a - [expression-parser](https://github.com/beyondessential/tupaia/blob/dev/packages/expression-parser/README.md) - [indicators](https://github.com/beyondessential/tupaia/blob/dev/packages/indicators/README.md) - [ui-components](https://github.com/beyondessential/tupaia/blob/dev/packages/ui-components/README.md) +- [ui-chart-components](https://github.com/beyondessential/tupaia/blob/dev/packages/ui-chart-components/README.md) - [server-boilerplate](https://github.com/beyondessential/tupaia/blob/dev/packages/server-boilerplate/README.md) - [utils](https://github.com/beyondessential/tupaia/blob/dev/packages/utils/README.md) @@ -72,7 +73,7 @@ We use codeship for the CI/CD ## Tests -Most of the packages support the following scripts for testing: +Most of the packages support the following scripts for testing: ``` diff --git a/packages/admin-panel/package.json b/packages/admin-panel/package.json index fecef62936..c15bb852c3 100644 --- a/packages/admin-panel/package.json +++ b/packages/admin-panel/package.json @@ -29,6 +29,7 @@ "start-admin-panel-server": "yarn workspace @tupaia/admin-panel-server start-dev", "test": "echo No tests", "start-ui-components": "yarn workspace @tupaia/ui-components build-dev:watch", + "start-ui-chart-components": "yarn workspace @tupaia/ui-chart-components build-dev:watch", "start-frontend": "npm-run-all -c -l -p start-ui-components start-dev", "start-servers": "npm-run-all -c -l -p start-central-server start-entity-server start-report-server start-admin-panel-server" }, @@ -42,6 +43,7 @@ "@material-ui/styles": "^4.9.10", "@tupaia/access-policy": "3.0.0", "@tupaia/types": "1.0.0", + "@tupaia/ui-chart-components": "1.0", "@tupaia/ui-components": "1.0", "@tupaia/utils": "1.0.0", "axios": "^0.21.1", diff --git a/packages/admin-panel/src/VizBuilderApp/components/PreviewSection.js b/packages/admin-panel/src/VizBuilderApp/components/PreviewSection.js index 5d7f46ab5e..3fdd77ecfa 100644 --- a/packages/admin-panel/src/VizBuilderApp/components/PreviewSection.js +++ b/packages/admin-panel/src/VizBuilderApp/components/PreviewSection.js @@ -7,8 +7,8 @@ import { useParams } from 'react-router-dom'; import styled from 'styled-components'; import MuiTab from '@material-ui/core/Tab'; import MuiTabs from '@material-ui/core/Tabs'; -import { Chart, FlexSpaceBetween, FetchLoader, DataTable, JsonEditor } from '@tupaia/ui-components'; - +import { FlexSpaceBetween, FetchLoader, DataTable, JsonEditor } from '@tupaia/ui-components'; +import { Chart } from '@tupaia/ui-chart-components'; import { TabPanel } from './TabPanel'; import { useReportPreview } from '../api'; import { usePreviewData, useVisualisation, useVizConfig, useVizConfigError } from '../context'; diff --git a/packages/devops/ci/tupaia-ci-cd.Dockerfile b/packages/devops/ci/tupaia-ci-cd.Dockerfile index 02c733cad3..994228ee84 100644 --- a/packages/devops/ci/tupaia-ci-cd.Dockerfile +++ b/packages/devops/ci/tupaia-ci-cd.Dockerfile @@ -91,6 +91,8 @@ RUN mkdir -p ./packages/types COPY packages/types/package.json ./packages/types RUN mkdir -p ./packages/ui-components COPY packages/ui-components/package.json ./packages/ui-components +RUN mkdir -p ./packages/ui-chart-components +COPY packages/ui-chart-components/package.json ./packages/ui-chart-components RUN mkdir -p ./packages/utils COPY packages/utils/package.json ./packages/utils RUN mkdir -p ./packages/weather-api @@ -121,6 +123,7 @@ COPY packages/utils/. ./packages/utils COPY packages/tsutils/. ./packages/tsutils COPY packages/types/. ./packages/types COPY packages/ui-components/. ./packages/ui-components +COPY packages/ui-chart-components/. ./packages/ui-chart-components COPY packages/weather-api/. ./packages/weather-api COPY packages/server-boilerplate/. ./packages/server-boilerplate COPY packages/kobo-api/. ./packages/kobo-api diff --git a/packages/lesmis/package.json b/packages/lesmis/package.json index 8194137965..d02f0a1333 100755 --- a/packages/lesmis/package.json +++ b/packages/lesmis/package.json @@ -24,7 +24,8 @@ "start-lesmis-server": "yarn workspace @tupaia/lesmis-server start-dev", "test": "yarn package:test", "start-ui-components": "yarn workspace @tupaia/ui-components build-dev:watch", - "start-frontend": "npm-run-all -c -l -p start-ui-components start-dev", + "start-ui-chart-components": "yarn workspace @tupaia/ui-chart-components build-dev:watch", + "start-frontend": "npm-run-all -c -l -p start-ui-components start-ui-chart-components start-dev", "start-servers": "npm-run-all -c -l -p start-central-server start-entity-server start-report-server start-web-config-server start-lesmis-server" }, "browserslist": [ @@ -37,6 +38,7 @@ "@material-ui/styles": "^4.9.10", "@tupaia/access-policy": "3.0.0", "@tupaia/admin-panel": "1.0.0", + "@tupaia/ui-chart-components": "1.0.0", "@tupaia/ui-components": "1.0.0", "@tupaia/utils": "1.0.0", "axios": "^0.21.1", diff --git a/packages/lesmis/src/api/queries/utils.js b/packages/lesmis/src/api/queries/utils.js index 3c23d0aa6e..0a636d46df 100644 --- a/packages/lesmis/src/api/queries/utils.js +++ b/packages/lesmis/src/api/queries/utils.js @@ -3,7 +3,7 @@ * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd * */ -import { formatDateForApi, roundStartEndDates } from '@tupaia/ui-components'; +import { formatDateForApi, roundStartEndDates } from '@tupaia/utils'; import { MIN_DATA_YEAR, SINGLE_YEAR_GRANULARITY } from '../../constants'; /** diff --git a/packages/lesmis/src/components/DashboardReportModal.js b/packages/lesmis/src/components/DashboardReportModal.js index c1ba8f4ae3..599014e662 100644 --- a/packages/lesmis/src/components/DashboardReportModal.js +++ b/packages/lesmis/src/components/DashboardReportModal.js @@ -16,12 +16,8 @@ import { Container as MuiContainer, CircularProgress, } from '@material-ui/core'; -import { - DateRangePicker, - WhiteButton, - SplitButton, - useChartDataExport, -} from '@tupaia/ui-components'; +import { DateRangePicker, WhiteButton, SplitButton } from '@tupaia/ui-components'; +import { useChartDataExport } from '@tupaia/ui-chart-components'; import * as COLORS from '../constants'; import { FlexColumn, FlexSpaceBetween, FlexStart } from './Layout'; diff --git a/packages/lesmis/src/components/Visuals/Chart.js b/packages/lesmis/src/components/Visuals/Chart.js index e560a3436e..0a272b5a48 100644 --- a/packages/lesmis/src/components/Visuals/Chart.js +++ b/packages/lesmis/src/components/Visuals/Chart.js @@ -12,7 +12,7 @@ import { Chart as ChartComponent, ChartTable as BaseChartTable, getIsChartData, -} from '@tupaia/ui-components'; +} from '@tupaia/ui-chart-components'; import { FetchLoader } from '../FetchLoader'; import { FlexStart, FlexEnd, FlexColumn } from '../Layout'; import { ToggleButton } from '../ToggleButton'; diff --git a/packages/lesmis/src/components/Visuals/ListVisual.js b/packages/lesmis/src/components/Visuals/ListVisual.js deleted file mode 100644 index e95fd10838..0000000000 --- a/packages/lesmis/src/components/Visuals/ListVisual.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd - */ -import React from 'react'; -import { ListVisual as ListVisualComponent } from '@tupaia/ui-components'; -import PropTypes from 'prop-types'; -import { VisualHeader } from './VisualHeader'; -import { FavouriteButton } from '../FavouriteButton'; -import { YearLabel } from '../YearLabel'; - -export const ListVisual = props => { - const { name, isEnlarged, isFavourite, handleFavouriteStatusChange, useYearSelector } = props; - - return ( - <> - {!isEnlarged && ( - - - - - )} - - - ); -}; - -ListVisual.propTypes = { - isEnlarged: PropTypes.bool, - useYearSelector: PropTypes.bool, - name: PropTypes.string, - isFavourite: PropTypes.bool.isRequired, - handleFavouriteStatusChange: PropTypes.func, -}; - -ListVisual.defaultProps = { - isEnlarged: false, - useYearSelector: false, - name: null, - handleFavouriteStatusChange: () => {}, -}; diff --git a/packages/ui-components/src/components/ListVisual/ColorCircle.js b/packages/lesmis/src/components/Visuals/ListVisual/ColorCircle.js similarity index 96% rename from packages/ui-components/src/components/ListVisual/ColorCircle.js rename to packages/lesmis/src/components/Visuals/ListVisual/ColorCircle.js index 4c10e6cd17..a1b779a8d7 100644 --- a/packages/ui-components/src/components/ListVisual/ColorCircle.js +++ b/packages/lesmis/src/components/Visuals/ListVisual/ColorCircle.js @@ -6,7 +6,7 @@ import React from 'react'; import styled from 'styled-components'; import { lighten } from '@material-ui/core/styles'; import PropTypes from 'prop-types'; -import { Tooltip } from '../Tooltip'; +import { Tooltip } from '@tupaia/ui-components'; const CircleCell = styled.div` display: flex; diff --git a/packages/ui-components/src/components/ListVisual/ListVisual.js b/packages/lesmis/src/components/Visuals/ListVisual/ListVisual.js similarity index 76% rename from packages/ui-components/src/components/ListVisual/ListVisual.js rename to packages/lesmis/src/components/Visuals/ListVisual/ListVisual.js index 8b0d692f00..cc7d99953f 100644 --- a/packages/ui-components/src/components/ListVisual/ListVisual.js +++ b/packages/lesmis/src/components/Visuals/ListVisual/ListVisual.js @@ -3,14 +3,16 @@ * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import PropTypes from 'prop-types'; import styled from 'styled-components'; import { useLocation } from 'react-router-dom'; +import { FetchLoader, SmallAlert } from '@tupaia/ui-components'; +import { getIsChartData, getNoDataString } from '@tupaia/ui-chart-components'; +import PropTypes from 'prop-types'; +import { VisualHeader } from '../VisualHeader'; +import { FavouriteButton } from '../../FavouriteButton'; +import { YearLabel } from '../../YearLabel'; import { ColorCircle } from './ColorCircle'; -import { HeaderRow, SubHeaderRow, StandardRow, LinkRow } from './Rows'; -import { FetchLoader } from '../FetchLoader'; -import { getIsChartData, getNoDataString } from '../Chart'; -import { SmallAlert } from '../Alert'; +import { HeaderRow, StandardRow, SubHeaderRow, LinkRow } from './Rows'; const Container = styled.div` position: relative; @@ -109,7 +111,7 @@ const NoData = styled(SmallAlert)` transform: translate(-50%, -50%); `; -export const ListVisual = React.memo( +const ListVisualContent = React.memo( ({ viewContent, isLoading, isError, error, drilldownPathname, reportCodes, isEnlarged }) => { const { data, ...config } = viewContent; @@ -140,6 +142,7 @@ export const ListVisual = React.memo( return drillDownReportCode ? ( ) : ( + // eslint-disable-next-line react/no-array-index-key ); })} @@ -156,7 +160,7 @@ export const ListVisual = React.memo( }, ); -ListVisual.propTypes = { +ListVisualContent.propTypes = { drilldownPathname: PropTypes.string, viewContent: PropTypes.object, reportCodes: PropTypes.object, @@ -167,7 +171,7 @@ ListVisual.propTypes = { error: PropTypes.string, }; -ListVisual.defaultProps = { +ListVisualContent.defaultProps = { drilldownPathname: null, viewContent: null, reportCodes: null, @@ -177,3 +181,37 @@ ListVisual.defaultProps = { isEnlarged: false, error: null, }; + +export const ListVisual = props => { + const { name, isEnlarged, isFavourite, handleFavouriteStatusChange, useYearSelector } = props; + + return ( + <> + {!isEnlarged && ( + + + + + )} + + + ); +}; + +ListVisual.propTypes = { + isEnlarged: PropTypes.bool, + useYearSelector: PropTypes.bool, + name: PropTypes.string, + isFavourite: PropTypes.bool.isRequired, + handleFavouriteStatusChange: PropTypes.func, +}; + +ListVisual.defaultProps = { + isEnlarged: false, + useYearSelector: false, + name: null, + handleFavouriteStatusChange: () => {}, +}; diff --git a/packages/ui-components/src/components/ListVisual/Rows.js b/packages/lesmis/src/components/Visuals/ListVisual/Rows.js similarity index 97% rename from packages/ui-components/src/components/ListVisual/Rows.js rename to packages/lesmis/src/components/Visuals/ListVisual/Rows.js index ebe65e3bef..12da4ecd97 100644 --- a/packages/ui-components/src/components/ListVisual/Rows.js +++ b/packages/lesmis/src/components/Visuals/ListVisual/Rows.js @@ -6,7 +6,7 @@ import React from 'react'; import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import { Link as RouterLink } from 'react-router-dom'; -import { FlexSpaceBetween } from '../Layout'; +import { FlexSpaceBetween } from '@tupaia/ui-components'; const Heading = styled(Typography)` font-size: 1.125rem; diff --git a/packages/lesmis/src/components/Visuals/ListVisual/index.js b/packages/lesmis/src/components/Visuals/ListVisual/index.js new file mode 100644 index 0000000000..147fe0b26f --- /dev/null +++ b/packages/lesmis/src/components/Visuals/ListVisual/index.js @@ -0,0 +1 @@ +export { ListVisual } from './ListVisual'; diff --git a/packages/ui-chart-components/.babelrc.js b/packages/ui-chart-components/.babelrc.js new file mode 100644 index 0000000000..de16b6aea7 --- /dev/null +++ b/packages/ui-chart-components/.babelrc.js @@ -0,0 +1,42 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + */ + +const isTest = process.env.NODE_ENV === 'test'; + +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: 'current', + }, + modules: isTest ? 'commonjs' : false, + }, + ], + '@babel/preset-react', + ], + plugins: [ + '@babel/plugin-proposal-object-rest-spread', + [ + '@babel/plugin-proposal-class-properties', + { + loose: true, + }, + ], + [ + '@babel/plugin-proposal-private-property-in-object', + { + loose: true, + }, + ], + [ + '@babel/plugin-proposal-private-methods', + { + loose: true, + }, + ], + ], +}; diff --git a/packages/ui-chart-components/.npmrc b/packages/ui-chart-components/.npmrc new file mode 100644 index 0000000000..a21347f1bd --- /dev/null +++ b/packages/ui-chart-components/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/packages/ui-chart-components/.storybook/AppProviders.js b/packages/ui-chart-components/.storybook/AppProviders.js new file mode 100644 index 0000000000..276eb96bb8 --- /dev/null +++ b/packages/ui-chart-components/.storybook/AppProviders.js @@ -0,0 +1,34 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import { MuiThemeProvider, StylesProvider } from '@material-ui/core/styles'; +import { ThemeProvider } from 'styled-components'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import PropTypes from 'prop-types'; +import { lightTheme, darkTheme } from '../stories/story-utils/theme'; + +export const AppProviders = ({ params, children }) => { + const theme = params?.theme === 'dark' ? darkTheme : lightTheme; + return ( + + + + + {children} + + + + ); +}; + +AppProviders.propTypes = { + params: PropTypes.object, + children: PropTypes.any.isRequired, +}; + +AppProviders.defaultProps = { + params: null, +}; diff --git a/packages/ui-chart-components/.storybook/main.js b/packages/ui-chart-components/.storybook/main.js new file mode 100644 index 0000000000..e731ebcce9 --- /dev/null +++ b/packages/ui-chart-components/.storybook/main.js @@ -0,0 +1,5 @@ +// import the build chain webpack config and merge it with storybook config +module.exports = { + stories: ['../stories/**/*.stories.js'], + addons: ['@storybook/addon-essentials'], +}; diff --git a/packages/ui-chart-components/.storybook/moduleMock.js b/packages/ui-chart-components/.storybook/moduleMock.js new file mode 100644 index 0000000000..7f225744d0 --- /dev/null +++ b/packages/ui-chart-components/.storybook/moduleMock.js @@ -0,0 +1,5 @@ +// mock implementation of `yargs`, because `script.js` within `@tupaia/utils` uses it but that +// breaks storybook +module.exports = { + strict: () => {}, +}; diff --git a/packages/ui-chart-components/.storybook/preview-head.html b/packages/ui-chart-components/.storybook/preview-head.html new file mode 100644 index 0000000000..5346aa0b2d --- /dev/null +++ b/packages/ui-chart-components/.storybook/preview-head.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/ui-chart-components/.storybook/preview.js b/packages/ui-chart-components/.storybook/preview.js new file mode 100644 index 0000000000..1914497bf3 --- /dev/null +++ b/packages/ui-chart-components/.storybook/preview.js @@ -0,0 +1,23 @@ +import React from 'react'; +import { addDecorator } from '@storybook/react'; +import { AppProviders } from './AppProviders'; + +export const parameters = { + backgrounds: { + default: 'light', + values: [ + { + name: 'light', + value: '#FFFFFF', + }, + { + name: 'dark', + value: '#252934', + }, + ], + }, +}; + +addDecorator((story, context) => ( + {story()} +)); diff --git a/packages/ui-chart-components/.storybook/webpack.config.js b/packages/ui-chart-components/.storybook/webpack.config.js new file mode 100644 index 0000000000..8863c7e0f1 --- /dev/null +++ b/packages/ui-chart-components/.storybook/webpack.config.js @@ -0,0 +1,50 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * + */ + +const path = require('path'); + +/** + * The doc doesn't really mention using webpack.config.js, but .storybook/main.js instead. + * + * Nevertheless, configuring the webpack.config.js seems to work fine. + * + * @param config + * @return {Promise<*>} + * @see https://storybook.js.org/docs/react/configure/webpack + * @see https://storybook.js.org/docs/react/configure/webpack#using-your-existing-config + */ +module.exports = async ({ config }) => { + /** + * Fixes npm packages that depend on `fs` module, etc. + * + * E.g: "winston" would fail to load without this, because it relies on fs, which isn't available during browser build. + * + * @see https://github.com/storybookjs/storybook/issues/4082#issuecomment-495370896 + */ + config.node = { + fs: 'empty', + tls: 'empty', + net: 'empty', + module: 'empty', + console: true, + }; + + config.resolve.alias = { + ...config.resolve.alias, + yargs: path.resolve(__dirname, 'moduleMock.js'), + child_process: path.resolve(__dirname, 'moduleMock.js'), + }; + + config.module.rules.push({ + test: /\.(js|jsx)$/, + loader: require.resolve('babel-loader'), + options: { + plugins: ['@babel/plugin-proposal-nullish-coalescing-operator'], + }, + }); + + return config; +}; diff --git a/packages/ui-chart-components/README.md b/packages/ui-chart-components/README.md new file mode 100644 index 0000000000..a126cc6790 --- /dev/null +++ b/packages/ui-chart-components/README.md @@ -0,0 +1,30 @@ +# @tupaia/ui-chart-components + +A library of chart interface components for the Tupaia project. + +## Available Scripts + +In the project directory, you can run: + +`yarn storybook` + +Runs the storybook app and pulls stories from the `src` directory which have a .stories.js suffix.
+ +The page will reload if you make edits.
+ +## Story Book + +Storybook is an open source tool for developing UI components. +[https://github.com/storybookjs/storybook](https://github.com/storybookjs/storybook) + +## Recharts + +The components are mostly built on top of components from the [ReCharts library](https://recharts.org). + +##### Notes on approach: + +- Use [styled components](https://styled-components.com) to customise components +- Import Material UI components with a Mui prefix to distinguish them from custom components. eg. `import MuiButton from '@material-ui/core/Button';` + +- Avoid hard coding children and allow them to be passed in as JSX as much as possible +- Export components using named exports diff --git a/packages/ui-chart-components/jest.config.js b/packages/ui-chart-components/jest.config.js new file mode 100644 index 0000000000..d9e71e27bd --- /dev/null +++ b/packages/ui-chart-components/jest.config.js @@ -0,0 +1,17 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + */ + +module.exports = { + moduleDirectories: ['node_modules'], + collectCoverageFrom: ['**/src/components/**/*.js'], + // handle static assets @see https://jestjs.io/docs/webpack#handling-static-assets + moduleNameMapper: { + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|css)$': + '/jestFileMock.js', + '^file-loader': '/jestFileMock.js', + }, + transformIgnorePatterns: ['/node_modules/'], + testTimeout: 30 * 1000, // 30 seconds. Needed for CI as some test take a while if CPU has high load +}; diff --git a/packages/ui-chart-components/jestFileMock.js b/packages/ui-chart-components/jestFileMock.js new file mode 100644 index 0000000000..e3e855a9a3 --- /dev/null +++ b/packages/ui-chart-components/jestFileMock.js @@ -0,0 +1,6 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * + */ +module.exports = 'test-file-stub'; diff --git a/packages/ui-chart-components/package.json b/packages/ui-chart-components/package.json new file mode 100644 index 0000000000..4328481c90 --- /dev/null +++ b/packages/ui-chart-components/package.json @@ -0,0 +1,42 @@ +{ + "name": "@tupaia/ui-chart-components", + "version": "1.0.0", + "private": true, + "description": "A library of chart components for the monorepo", + "repository": { + "type": "git", + "url": "git+https://github.com/beyondessential/tupaia", + "directory": "packages/ui-chart-components" + }, + "author": "Beyond Essential Systems (https://beyondessential.com.au)", + "source": "src/index.js", + "main": "dist/index.js", + "scripts": { + "build": "rm -rf dist && npm run --prefix ../../ package:build:js", + "build-dev": "npm run build", + "lint": "yarn package:lint:js", + "lint:fix": "yarn lint --fix", + "storybook": "start-storybook -s public -p 6006", + "test": "yarn package:test --env=jsdom", + "test:coverage": "yarn test --coverage", + "test:watch": "yarn test --watch", + "build-dev:watch": "yarn run package:build:js -w" + }, + "dependencies": { + "@material-ui/core": "^4.9.8", + "@tupaia/ui-components": "1.0.0", + "@tupaia/utils": "1.0.0", + "lodash.get": "^4.4.2", + "moment": "^2.29.1", + "prop-types": "^15.7.2", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-table": "^7.7.0", + "recharts": "^1.8.5", + "styled-components": "^5.0.1" + }, + "devDependencies": { + "@material-ui/styles": "^4.9.10", + "@storybook/react": "^6.3.9" + } +} diff --git a/packages/ui-chart-components/public/psss-logo-white.svg b/packages/ui-chart-components/public/psss-logo-white.svg new file mode 100755 index 0000000000..70419e19ef --- /dev/null +++ b/packages/ui-chart-components/public/psss-logo-white.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/ui-components/src/__tests__/components/Chart/parseChartConfig.test.js b/packages/ui-chart-components/src/__tests__/parseChartConfig.test.js similarity index 90% rename from packages/ui-components/src/__tests__/components/Chart/parseChartConfig.test.js rename to packages/ui-chart-components/src/__tests__/parseChartConfig.test.js index 804ce89d44..04a9efc684 100644 --- a/packages/ui-components/src/__tests__/components/Chart/parseChartConfig.test.js +++ b/packages/ui-chart-components/src/__tests__/parseChartConfig.test.js @@ -1,14 +1,11 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ -import { parseChartConfig } from '../../../components/Chart/parseChartConfig'; -import { - CHART_COLOR_PALETTE, - EXPANDED_CHART_COLOR_PALETTE, -} from '../../../components/Chart/constants'; +import { parseChartConfig } from '../utils/parseChartConfig'; +import { CHART_COLOR_PALETTE, EXPANDED_CHART_COLOR_PALETTE } from '../constants'; const testViewJson = { chartType: 'bar', diff --git a/packages/ui-components/src/components/Chart/VerticalTick.js b/packages/ui-chart-components/src/components/Axes/VerticalTick.js similarity index 92% rename from packages/ui-components/src/components/Chart/VerticalTick.js rename to packages/ui-chart-components/src/components/Axes/VerticalTick.js index 2697220e18..cd0f3d06c6 100644 --- a/packages/ui-components/src/components/Chart/VerticalTick.js +++ b/packages/ui-chart-components/src/components/Axes/VerticalTick.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/ui-components/src/components/Chart/XAxis.js b/packages/ui-chart-components/src/components/Axes/XAxis.js similarity index 96% rename from packages/ui-components/src/components/Chart/XAxis.js rename to packages/ui-chart-components/src/components/Axes/XAxis.js index 9e990b08ff..76e936ab8e 100644 --- a/packages/ui-components/src/components/Chart/XAxis.js +++ b/packages/ui-chart-components/src/components/Axes/XAxis.js @@ -1,14 +1,14 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; import { Text, XAxis as XAxisComponent } from 'recharts'; -import { CHART_TYPES, DARK_BLUE } from './constants'; -import { formatTimestampForChart, getIsTimeSeries, getContrastTextColor } from './utils'; +import { formatTimestampForChart, getIsTimeSeries, getContrastTextColor } from '../../utils'; import { VerticalTick } from './VerticalTick'; +import { DARK_BLUE, CHART_TYPES } from '../../constants'; const AXIS_TIME_PROPS = { dataKey: 'timestamp', diff --git a/packages/ui-components/src/components/Chart/YAxes.js b/packages/ui-chart-components/src/components/Axes/YAxes.js similarity index 97% rename from packages/ui-components/src/components/Chart/YAxes.js rename to packages/ui-chart-components/src/components/Axes/YAxes.js index d8502471c3..80f8c4896c 100644 --- a/packages/ui-components/src/components/Chart/YAxes.js +++ b/packages/ui-chart-components/src/components/Axes/YAxes.js @@ -1,14 +1,14 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; import { formatDataValueByType } from '@tupaia/utils'; import { YAxis as YAxisComponent } from 'recharts'; -import { DARK_BLUE, VALUE_TYPES } from './constants'; -import { getContrastTextColor } from './utils'; +import { DARK_BLUE, VALUE_TYPES } from '../../constants'; +import { getContrastTextColor } from '../../utils'; const { PERCENTAGE } = VALUE_TYPES; diff --git a/packages/ui-chart-components/src/components/Axes/index.js b/packages/ui-chart-components/src/components/Axes/index.js new file mode 100644 index 0000000000..9d3e985b70 --- /dev/null +++ b/packages/ui-chart-components/src/components/Axes/index.js @@ -0,0 +1,7 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +export { XAxis } from './XAxis'; +export { YAxes } from './YAxes'; +export { VerticalTick } from './VerticalTick'; diff --git a/packages/ui-components/src/components/Chart/CartesianChart.js b/packages/ui-chart-components/src/components/CartesianChart.js similarity index 92% rename from packages/ui-components/src/components/Chart/CartesianChart.js rename to packages/ui-chart-components/src/components/CartesianChart.js index b723e90298..a61d2e060f 100644 --- a/packages/ui-components/src/components/Chart/CartesianChart.js +++ b/packages/ui-chart-components/src/components/CartesianChart.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React, { useEffect, useState } from 'react'; @@ -17,17 +17,15 @@ import { Tooltip, Brush, } from 'recharts'; - -import { CHART_BLUES, CHART_TYPES, VIEW_CONTENT_SHAPE, DEFAULT_DATA_KEY } from './constants'; -import { ChartTooltip as CustomTooltip } from './ChartTooltip'; -import { BarChart as BarChartComponent } from './BarChart'; -import { LineChart as LineChartComponent } from './LineChart'; -import { AreaChart as AreaChartComponent } from './AreaChart'; -import { getCartesianLegend } from './Legend'; -import { isMobile } from './utils'; -import { XAxis as XAxisComponent } from './XAxis'; -import { YAxes } from './YAxes'; -import { ReferenceLines } from './ReferenceLines'; +import { CHART_BLUES, VIEW_CONTENT_SHAPE, DEFAULT_DATA_KEY, CHART_TYPES } from '../constants'; +import { + BarChart as BarChartComponent, + LineChart as LineChartComponent, + AreaChart as AreaChartComponent, +} from './Charts'; +import { getCartesianLegend, ReferenceLines, ChartTooltip as CustomTooltip } from './Reference'; +import { isMobile } from '../utils'; +import { XAxis as XAxisComponent, YAxes } from './Axes'; const { AREA, BAR, COMPOSED, LINE } = CHART_TYPES; diff --git a/packages/ui-components/src/components/Chart/Chart.js b/packages/ui-chart-components/src/components/Chart.js similarity index 88% rename from packages/ui-components/src/components/Chart/Chart.js rename to packages/ui-chart-components/src/components/Chart.js index 423bd05172..8dea2045bc 100644 --- a/packages/ui-components/src/components/Chart/Chart.js +++ b/packages/ui-chart-components/src/components/Chart.js @@ -1,19 +1,23 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; import Typography from '@material-ui/core/Typography'; import styled from 'styled-components'; +import { SmallAlert } from '@tupaia/ui-components'; import { CartesianChart } from './CartesianChart'; -import { PieChart } from './PieChart'; -import { GaugeChart } from './GaugeChart'; -import { CHART_TYPES } from './constants'; -import { parseChartConfig } from './parseChartConfig'; -import { getIsTimeSeries, isDataKey, getIsChartData, getNoDataString } from './utils'; -import { SmallAlert } from '../Alert'; +import { PieChart, GaugeChart } from './Charts'; +import { + getIsTimeSeries, + isDataKey, + parseChartConfig, + getIsChartData, + getNoDataString, +} from '../utils'; +import { CHART_TYPES } from '../constants'; const UnknownChartTitle = styled(Typography)` position: relative; diff --git a/packages/ui-components/src/components/Chart/Table/ChartTable.js b/packages/ui-chart-components/src/components/ChartTable.js similarity index 82% rename from packages/ui-components/src/components/Chart/Table/ChartTable.js rename to packages/ui-chart-components/src/components/ChartTable.js index 3e92e1f956..6cafa9f1ab 100644 --- a/packages/ui-components/src/components/Chart/Table/ChartTable.js +++ b/packages/ui-chart-components/src/components/ChartTable.js @@ -1,15 +1,13 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; import styled from 'styled-components'; import MuiTableContainer from '@material-ui/core/TableContainer'; -import { DataTable } from '../../DataTable'; -import { getIsChartData, getNoDataString } from '../utils'; -import { SmallAlert } from '../../Alert'; -import { getChartTableData } from './getChartTableData'; +import { DataTable, SmallAlert } from '@tupaia/ui-components'; +import { getChartTableData, getIsChartData, getNoDataString } from '../utils'; const TableContainer = styled(MuiTableContainer)` overflow: auto; diff --git a/packages/ui-components/src/components/Chart/AreaChart.js b/packages/ui-chart-components/src/components/Charts/AreaChart.js similarity index 86% rename from packages/ui-components/src/components/Chart/AreaChart.js rename to packages/ui-chart-components/src/components/Charts/AreaChart.js index 53b14d3d31..238ff5d650 100644 --- a/packages/ui-components/src/components/Chart/AreaChart.js +++ b/packages/ui-chart-components/src/components/Charts/AreaChart.js @@ -1,12 +1,12 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; import { Area } from 'recharts'; -import { BLUE } from './constants'; +import { BLUE } from '../../constants'; export const AreaChart = ({ color, dataKey, yAxisId, isEnlarged, isExporting }) => ( p.$fontSize}; diff --git a/packages/ui-components/src/components/Chart/LineChart.js b/packages/ui-chart-components/src/components/Charts/LineChart.js similarity index 94% rename from packages/ui-components/src/components/Chart/LineChart.js rename to packages/ui-chart-components/src/components/Charts/LineChart.js index 8099cfaa93..dc8ca7761f 100644 --- a/packages/ui-components/src/components/Chart/LineChart.js +++ b/packages/ui-chart-components/src/components/Charts/LineChart.js @@ -1,13 +1,13 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; import { Line, LabelList } from 'recharts'; import { formatDataValueByType } from '@tupaia/utils'; -import { BLUE, DARK_BLUE } from './constants'; +import { BLUE, DARK_BLUE } from '../../constants'; export const LineChart = ({ color, diff --git a/packages/ui-components/src/components/Chart/PieChart.js b/packages/ui-chart-components/src/components/Charts/PieChart.js similarity index 96% rename from packages/ui-components/src/components/Chart/PieChart.js rename to packages/ui-chart-components/src/components/Charts/PieChart.js index d0e3f79faf..ca7d9dfbbd 100644 --- a/packages/ui-components/src/components/Chart/PieChart.js +++ b/packages/ui-chart-components/src/components/Charts/PieChart.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ /** @@ -37,10 +37,10 @@ import { ResponsiveContainer, Tooltip, } from 'recharts'; -import { OFF_WHITE, CHART_COLOR_PALETTE, VIEW_CONTENT_SHAPE } from './constants'; -import { getPieLegend } from './Legend'; -import { isMobile } from './utils'; -import { TooltipContainer } from './TooltipContainer'; +import { OFF_WHITE, CHART_COLOR_PALETTE, VIEW_CONTENT_SHAPE } from '../../constants'; +import { getPieLegend } from '../Reference/Legend'; +import { isMobile } from '../../utils'; +import { TooltipContainer } from '../Reference'; const Heading = styled(Typography)` font-weight: 500; diff --git a/packages/ui-chart-components/src/components/Charts/index.js b/packages/ui-chart-components/src/components/Charts/index.js new file mode 100644 index 0000000000..feeea5f51a --- /dev/null +++ b/packages/ui-chart-components/src/components/Charts/index.js @@ -0,0 +1,10 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { AreaChart } from './AreaChart'; +export { BarChart } from './BarChart'; +export { GaugeChart } from './GaugeChart'; +export { LineChart } from './LineChart'; +export { PieChart } from './PieChart'; diff --git a/packages/ui-components/src/components/Chart/ChartTooltip.js b/packages/ui-chart-components/src/components/Reference/ChartTooltip.js similarity index 95% rename from packages/ui-components/src/components/Chart/ChartTooltip.js rename to packages/ui-chart-components/src/components/Reference/ChartTooltip.js index 112124fa32..31cacf46ab 100644 --- a/packages/ui-components/src/components/Chart/ChartTooltip.js +++ b/packages/ui-chart-components/src/components/Reference/ChartTooltip.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; @@ -9,8 +9,8 @@ import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import PropTypes from 'prop-types'; import { formatDataValueByType } from '@tupaia/utils'; -import { VALUE_TYPES, CHART_TYPES, PRESENTATION_OPTIONS_SHAPE } from './constants'; -import { formatTimestampForChart, getIsTimeSeries } from './utils'; +import { VALUE_TYPES, PRESENTATION_OPTIONS_SHAPE, CHART_TYPES } from '../../constants'; +import { formatTimestampForChart, getIsTimeSeries } from '../../utils'; import { TooltipContainer } from './TooltipContainer'; function formatLabelledValue(label, value, valueType, metadata) { diff --git a/packages/ui-components/src/components/Chart/Legend.js b/packages/ui-chart-components/src/components/Reference/Legend.js similarity index 97% rename from packages/ui-components/src/components/Chart/Legend.js rename to packages/ui-chart-components/src/components/Reference/Legend.js index be35c2650d..4b12730fb2 100644 --- a/packages/ui-components/src/components/Chart/Legend.js +++ b/packages/ui-chart-components/src/components/Reference/Legend.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; @@ -8,7 +8,7 @@ import styled from 'styled-components'; import MuiButton from '@material-ui/core/Button'; import Tooltip from '@material-ui/core/Tooltip'; import { formatDataValueByType } from '@tupaia/utils'; -import { isMobile } from './utils'; +import { isMobile } from '../../utils'; const LegendContainer = styled.div` display: flex; diff --git a/packages/ui-components/src/components/Chart/ReferenceLabel.js b/packages/ui-chart-components/src/components/Reference/ReferenceLabel.js similarity index 92% rename from packages/ui-components/src/components/Chart/ReferenceLabel.js rename to packages/ui-chart-components/src/components/Reference/ReferenceLabel.js index efcb05b825..3e49509238 100644 --- a/packages/ui-components/src/components/Chart/ReferenceLabel.js +++ b/packages/ui-chart-components/src/components/Reference/ReferenceLabel.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/ui-components/src/components/Chart/ReferenceLines.js b/packages/ui-chart-components/src/components/Reference/ReferenceLines.js similarity index 96% rename from packages/ui-components/src/components/Chart/ReferenceLines.js rename to packages/ui-chart-components/src/components/Reference/ReferenceLines.js index 59fa6ff539..0cdc9554f3 100644 --- a/packages/ui-components/src/components/Chart/ReferenceLines.js +++ b/packages/ui-chart-components/src/components/Reference/ReferenceLines.js @@ -1,13 +1,13 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; import { ReferenceLine } from 'recharts'; import { formatDataValueByType } from '@tupaia/utils'; -import { TUPAIA_ORANGE, CHART_TYPES } from './constants'; +import { TUPAIA_ORANGE, CHART_TYPES } from '../../constants'; import { ReferenceLabel } from './ReferenceLabel'; const ReferenceLineLabel = ({ referenceLineLabel, isExporting }) => { diff --git a/packages/ui-components/src/components/Chart/TooltipContainer.js b/packages/ui-chart-components/src/components/Reference/TooltipContainer.js similarity index 78% rename from packages/ui-components/src/components/Chart/TooltipContainer.js rename to packages/ui-chart-components/src/components/Reference/TooltipContainer.js index 4903920d5c..2566fc9a3d 100644 --- a/packages/ui-components/src/components/Chart/TooltipContainer.js +++ b/packages/ui-chart-components/src/components/Reference/TooltipContainer.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import styled from 'styled-components'; diff --git a/packages/ui-chart-components/src/components/Reference/index.js b/packages/ui-chart-components/src/components/Reference/index.js new file mode 100644 index 0000000000..84a88caf9a --- /dev/null +++ b/packages/ui-chart-components/src/components/Reference/index.js @@ -0,0 +1,10 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { ChartTooltip } from './ChartTooltip'; +export * from './Legend'; +export { ReferenceLabel } from './ReferenceLabel'; +export { ReferenceLines } from './ReferenceLines'; +export { TooltipContainer } from './TooltipContainer'; diff --git a/packages/ui-chart-components/src/components/index.js b/packages/ui-chart-components/src/components/index.js new file mode 100644 index 0000000000..e4c1889a7b --- /dev/null +++ b/packages/ui-chart-components/src/components/index.js @@ -0,0 +1,5 @@ +export * from './Axes'; +export * from './Charts'; +export * from './Reference'; +export { ChartTable } from './ChartTable'; +export { Chart } from './Chart'; diff --git a/packages/ui-components/src/components/Chart/constants/colors.js b/packages/ui-chart-components/src/constants/colors.js similarity index 96% rename from packages/ui-components/src/components/Chart/constants/colors.js rename to packages/ui-chart-components/src/constants/colors.js index 6661178288..09eee3dbac 100644 --- a/packages/ui-components/src/components/Chart/constants/colors.js +++ b/packages/ui-chart-components/src/constants/colors.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import { blue, purple, red, cyan, green, orange, brown, grey } from '@material-ui/core/colors'; diff --git a/packages/ui-components/src/components/Chart/constants/constants.js b/packages/ui-chart-components/src/constants/constants.js similarity index 88% rename from packages/ui-components/src/components/Chart/constants/constants.js rename to packages/ui-chart-components/src/constants/constants.js index f893e9f866..2e382e045a 100644 --- a/packages/ui-components/src/components/Chart/constants/constants.js +++ b/packages/ui-chart-components/src/constants/constants.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export const VALUE_TYPES = { @@ -15,6 +15,8 @@ export const VALUE_TYPES = { ONE_DECIMAL_PLACE: 'oneDecimalPlace', }; +export const DEFAULT_DATA_KEY = 'value'; + export const CHART_TYPES = { AREA: 'area', BAR: 'bar', @@ -23,5 +25,3 @@ export const CHART_TYPES = { PIE: 'pie', GAUGE: 'gauge', }; - -export const DEFAULT_DATA_KEY = 'value'; diff --git a/packages/ui-components/src/components/Chart/constants/index.js b/packages/ui-chart-components/src/constants/index.js similarity index 62% rename from packages/ui-components/src/components/Chart/constants/index.js rename to packages/ui-chart-components/src/constants/index.js index acea25bed0..c61639737b 100644 --- a/packages/ui-components/src/components/Chart/constants/index.js +++ b/packages/ui-chart-components/src/constants/index.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export * from './colors'; diff --git a/packages/ui-components/src/components/Chart/constants/propTypes.js b/packages/ui-chart-components/src/constants/propTypes.js similarity index 94% rename from packages/ui-components/src/components/Chart/constants/propTypes.js rename to packages/ui-chart-components/src/constants/propTypes.js index be69da05ca..8f269faa77 100644 --- a/packages/ui-components/src/components/Chart/constants/propTypes.js +++ b/packages/ui-chart-components/src/constants/propTypes.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import PropTypes from 'prop-types'; diff --git a/packages/ui-chart-components/src/index.js b/packages/ui-chart-components/src/index.js new file mode 100644 index 0000000000..d3a16b72e6 --- /dev/null +++ b/packages/ui-chart-components/src/index.js @@ -0,0 +1,3 @@ +export * from './components'; +export * from './constants'; +export * from './utils'; diff --git a/packages/ui-components/src/components/Chart/Table/getChartTableData.js b/packages/ui-chart-components/src/utils/getChartTableData.js similarity index 93% rename from packages/ui-components/src/components/Chart/Table/getChartTableData.js rename to packages/ui-chart-components/src/utils/getChartTableData.js index 64389099ce..93f5c77654 100644 --- a/packages/ui-components/src/components/Chart/Table/getChartTableData.js +++ b/packages/ui-chart-components/src/utils/getChartTableData.js @@ -1,13 +1,13 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React, { useMemo } from 'react'; import styled from 'styled-components'; import { formatDataValueByType } from '@tupaia/utils'; -import { formatTimestampForChart, getIsTimeSeries } from '../utils'; -import { parseChartConfig } from '../parseChartConfig'; -import { CHART_TYPES, DEFAULT_DATA_KEY } from '../constants'; +import { DEFAULT_DATA_KEY, CHART_TYPES } from '../constants'; +import { formatTimestampForChart, getIsTimeSeries } from './utils'; +import { parseChartConfig } from './parseChartConfig'; // For the rowData, ignore labelType and use percentage instead of fractionAndPercentage as // we don't want to show multiple values a table cell diff --git a/packages/ui-chart-components/src/utils/index.js b/packages/ui-chart-components/src/utils/index.js new file mode 100644 index 0000000000..9eebb49588 --- /dev/null +++ b/packages/ui-chart-components/src/utils/index.js @@ -0,0 +1,8 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +export * from './parseChartConfig'; +export * from './utils'; +export * from './useChartDataExport'; +export * from './getChartTableData'; diff --git a/packages/ui-components/src/components/Chart/parseChartConfig.js b/packages/ui-chart-components/src/utils/parseChartConfig.js similarity index 96% rename from packages/ui-components/src/components/Chart/parseChartConfig.js rename to packages/ui-chart-components/src/utils/parseChartConfig.js index 557cac09c2..30ae0cb429 100644 --- a/packages/ui-components/src/components/Chart/parseChartConfig.js +++ b/packages/ui-chart-components/src/utils/parseChartConfig.js @@ -1,9 +1,10 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * */ -import { CHART_TYPES, COLOR_PALETTES } from './constants'; +import { COLOR_PALETTES, CHART_TYPES } from '../constants'; import { isDataKey } from './utils'; const ADD_TO_ALL_KEY = '$all'; diff --git a/packages/ui-components/src/components/Chart/Table/useChartDataExport.js b/packages/ui-chart-components/src/utils/useChartDataExport.js similarity index 70% rename from packages/ui-components/src/components/Chart/Table/useChartDataExport.js rename to packages/ui-chart-components/src/utils/useChartDataExport.js index 1e1b5b1f2b..1919e42ac1 100644 --- a/packages/ui-components/src/components/Chart/Table/useChartDataExport.js +++ b/packages/ui-chart-components/src/utils/useChartDataExport.js @@ -1,10 +1,11 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * */ +import { useDataTableExport } from '@tupaia/ui-components'; import { getChartTableData } from './getChartTableData'; -import { useDataTableExport } from '../../DataTable/useDataTableExport'; export const useChartDataExport = (viewContent, title) => { const { startDate, endDate } = viewContent ?? {}; diff --git a/packages/ui-components/src/components/Chart/utils.js b/packages/ui-chart-components/src/utils/utils.js similarity index 89% rename from packages/ui-components/src/components/Chart/utils.js rename to packages/ui-chart-components/src/utils/utils.js index 50ae1d6840..56a6dc0382 100644 --- a/packages/ui-components/src/components/Chart/utils.js +++ b/packages/ui-chart-components/src/utils/utils.js @@ -1,12 +1,12 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import moment from 'moment'; import { useTheme } from '@material-ui/core/styles'; -import { GRANULARITY_CONFIG } from './periodGranularities'; -import { CHART_TYPES } from './constants'; +import { GRANULARITY_CONFIG } from '@tupaia/utils'; +import { CHART_TYPES } from '../constants'; export const isMobile = () => process.env.REACT_APP_APP_TYPE === 'mobile'; diff --git a/packages/ui-components/stories/chart/barChart.stories.js b/packages/ui-chart-components/stories/barChart.stories.js similarity index 82% rename from packages/ui-components/stories/chart/barChart.stories.js rename to packages/ui-chart-components/stories/barChart.stories.js index 04cb9eecb4..e0fdfaaa91 100644 --- a/packages/ui-components/stories/chart/barChart.stories.js +++ b/packages/ui-chart-components/stories/barChart.stories.js @@ -1,14 +1,14 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ -import { Chart } from '../../src/components/Chart'; +import { Chart } from '../src/components/Chart'; import { DarkThemeTemplate, LightThemeChartTemplate } from './helpers'; import viewContent from './data/barChartViewContent.json'; export default { - title: 'Chart/BarChart', + title: 'BarChart', component: Chart, }; diff --git a/packages/ui-components/stories/chart/composedChart.stories.js b/packages/ui-chart-components/stories/composedChart.stories.js similarity index 82% rename from packages/ui-components/stories/chart/composedChart.stories.js rename to packages/ui-chart-components/stories/composedChart.stories.js index a6bfd23c94..76bd420593 100644 --- a/packages/ui-components/stories/chart/composedChart.stories.js +++ b/packages/ui-chart-components/stories/composedChart.stories.js @@ -1,14 +1,14 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ -import { Chart } from '../../src/components/Chart'; +import { Chart } from '../src/components/Chart'; import { LightThemeChartTemplate, DarkThemeTemplate } from './helpers'; import viewContent from './data/composedChartViewContent.json'; export default { - title: 'Chart/ComposedChart', + title: 'ComposedChart', component: Chart, }; diff --git a/packages/ui-components/stories/chart/data/barChartViewContent.json b/packages/ui-chart-components/stories/data/barChartViewContent.json similarity index 100% rename from packages/ui-components/stories/chart/data/barChartViewContent.json rename to packages/ui-chart-components/stories/data/barChartViewContent.json diff --git a/packages/ui-components/stories/chart/data/composedChartViewContent.json b/packages/ui-chart-components/stories/data/composedChartViewContent.json similarity index 100% rename from packages/ui-components/stories/chart/data/composedChartViewContent.json rename to packages/ui-chart-components/stories/data/composedChartViewContent.json diff --git a/packages/ui-components/stories/chart/data/gaugeChartViewContent.json b/packages/ui-chart-components/stories/data/gaugeChartViewContent.json similarity index 100% rename from packages/ui-components/stories/chart/data/gaugeChartViewContent.json rename to packages/ui-chart-components/stories/data/gaugeChartViewContent.json diff --git a/packages/ui-components/stories/chart/data/lineChartViewContent.json b/packages/ui-chart-components/stories/data/lineChartViewContent.json similarity index 100% rename from packages/ui-components/stories/chart/data/lineChartViewContent.json rename to packages/ui-chart-components/stories/data/lineChartViewContent.json diff --git a/packages/ui-components/stories/chart/data/listVisualViewContent.json b/packages/ui-chart-components/stories/data/listVisualViewContent.json similarity index 100% rename from packages/ui-components/stories/chart/data/listVisualViewContent.json rename to packages/ui-chart-components/stories/data/listVisualViewContent.json diff --git a/packages/ui-components/stories/chart/data/pieChartViewContent.json b/packages/ui-chart-components/stories/data/pieChartViewContent.json similarity index 100% rename from packages/ui-components/stories/chart/data/pieChartViewContent.json rename to packages/ui-chart-components/stories/data/pieChartViewContent.json diff --git a/packages/ui-components/stories/chart/data/stackedBarChart.json b/packages/ui-chart-components/stories/data/stackedBarChart.json similarity index 100% rename from packages/ui-components/stories/chart/data/stackedBarChart.json rename to packages/ui-chart-components/stories/data/stackedBarChart.json diff --git a/packages/ui-components/stories/chart/gaugeChart.stories.js b/packages/ui-chart-components/stories/gaugeChart.stories.js similarity index 89% rename from packages/ui-components/stories/chart/gaugeChart.stories.js rename to packages/ui-chart-components/stories/gaugeChart.stories.js index 18bfbf6bd8..c99b8b00bd 100644 --- a/packages/ui-components/stories/chart/gaugeChart.stories.js +++ b/packages/ui-chart-components/stories/gaugeChart.stories.js @@ -2,12 +2,12 @@ * Tupaia * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd */ -import { Chart } from '../../src/components/Chart'; +import { Chart } from '../src/components/Chart'; import { LightThemeChartTemplate, DarkThemeTemplate } from './helpers'; import viewContent from './data/gaugeChartViewContent.json'; export default { - title: 'Chart/GaugeChart', + title: 'GaugeChart', component: Chart, }; diff --git a/packages/ui-components/stories/chart/helpers.js b/packages/ui-chart-components/stories/helpers.js similarity index 74% rename from packages/ui-components/stories/chart/helpers.js rename to packages/ui-chart-components/stories/helpers.js index be05405ca5..fc1bf3147b 100644 --- a/packages/ui-components/stories/chart/helpers.js +++ b/packages/ui-chart-components/stories/helpers.js @@ -1,12 +1,14 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React from 'react'; import styled from 'styled-components'; -import { Button, FlexEnd } from '../../src'; -import { Chart, ChartTable, useChartDataExport } from '../../src/components/Chart'; +import { Button, FlexEnd } from '@tupaia/ui-components'; +import { useChartDataExport } from '../src/utils'; +import { Chart } from '../src/components/Chart'; +import { ChartTable } from '../src/components'; const LightContainer = styled.div` width: 750px; @@ -25,17 +27,14 @@ const ChartContainer = styled.div` export const LightThemeChartTemplate = args => { const { viewContent } = args; - const { doExport } = useChartDataExport(viewContent); - const handleExport = () => { - doExport(); - }; + const { doExport } = useChartDataExport(viewContent); return ( <> - + @@ -56,15 +55,13 @@ const DarkContainer = styled(LightContainer)` export const DarkThemeTemplate = args => { const { viewContent } = args; - const handleExport = () => { - useChartDataExport(viewContent); - }; + const { doExport } = useChartDataExport(viewContent); return ( <> - + diff --git a/packages/ui-components/stories/chart/lineChart.stories.js b/packages/ui-chart-components/stories/lineChart.stories.js similarity index 82% rename from packages/ui-components/stories/chart/lineChart.stories.js rename to packages/ui-chart-components/stories/lineChart.stories.js index 465614e6d8..67370c76b1 100644 --- a/packages/ui-components/stories/chart/lineChart.stories.js +++ b/packages/ui-chart-components/stories/lineChart.stories.js @@ -1,14 +1,14 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ -import { Chart } from '../../src/components/Chart'; +import { Chart } from '../src/components/Chart'; import { LightThemeChartTemplate, DarkThemeTemplate } from './helpers'; import viewContent from './data/lineChartViewContent.json'; export default { - title: 'Chart/LineChart', + title: 'LineChart', component: Chart, }; diff --git a/packages/ui-components/stories/chart/noData.stories.js b/packages/ui-chart-components/stories/noData.stories.js similarity index 88% rename from packages/ui-components/stories/chart/noData.stories.js rename to packages/ui-chart-components/stories/noData.stories.js index 7d61197532..2c9c810ac8 100644 --- a/packages/ui-components/stories/chart/noData.stories.js +++ b/packages/ui-chart-components/stories/noData.stories.js @@ -1,14 +1,14 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ -import { Chart } from '../../src/components/Chart'; +import { Chart } from '../src/components/Chart'; import { DarkThemeTemplate, LightThemeChartTemplate } from './helpers'; export default { - title: 'Chart/NoData', + title: 'NoData', component: Chart, }; diff --git a/packages/ui-components/stories/chart/pieChart.stories.js b/packages/ui-chart-components/stories/pieChart.stories.js similarity index 82% rename from packages/ui-components/stories/chart/pieChart.stories.js rename to packages/ui-chart-components/stories/pieChart.stories.js index 9fc10be8d9..f3cb3fe65e 100644 --- a/packages/ui-components/stories/chart/pieChart.stories.js +++ b/packages/ui-chart-components/stories/pieChart.stories.js @@ -1,13 +1,13 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import { Chart } from '../../src/components/Chart'; +import { Chart } from '../src/components/Chart'; import { LightThemeChartTemplate, DarkThemeTemplate } from './helpers'; import viewContent from './data/pieChartViewContent.json'; export default { - title: 'Chart/PieChart', + title: 'PieChart', component: Chart, }; diff --git a/packages/ui-components/stories/chart/stackedBarChart.stories.js b/packages/ui-chart-components/stories/stackedBarChart.stories.js similarity index 81% rename from packages/ui-components/stories/chart/stackedBarChart.stories.js rename to packages/ui-chart-components/stories/stackedBarChart.stories.js index 67cdd0550c..037bc8191d 100644 --- a/packages/ui-components/stories/chart/stackedBarChart.stories.js +++ b/packages/ui-chart-components/stories/stackedBarChart.stories.js @@ -1,14 +1,14 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ -import { Chart } from '../../src/components/Chart'; +import { Chart } from '../src/components/Chart'; import { DarkThemeTemplate, LightThemeChartTemplate } from './helpers'; import viewContent from './data/stackedBarChart.json'; export default { - title: 'Chart/StackedBarChart', + title: 'StackedBarChart', component: Chart, }; diff --git a/packages/ui-chart-components/stories/theme/colors.js b/packages/ui-chart-components/stories/theme/colors.js new file mode 100644 index 0000000000..a185550554 --- /dev/null +++ b/packages/ui-chart-components/stories/theme/colors.js @@ -0,0 +1,36 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + */ + +// Primary & Secondary colors +export const WHITE = '#FFFFFF'; +export const BLACK = '#000000'; +export const BLUE = '#3884B8'; +export const DARK_BLUE = '#135D8F'; +export const YELLOW = '#FFCC24'; +export const RED = '#D13333'; +export const ORANGE = '#EF5A06'; +export const GREEN = '#02B851'; +export const DARKGREY = '#283238'; // dark background +export const LIGHTGREY = '#F9F9F9'; // page background +export const TEXT_DARKGREY = '#414D55'; +export const TEXT_MIDGREY = '#6F7B82'; +export const TEXT_LIGHTGREY = '#9AA8B0'; + +// Greys (based on first 2 letters of hex code) +export const GREY_72 = '#727D84'; +export const GREY_9F = '#9FA6AA'; +export const GREY_DE = '#DEDEE0'; // use for border colors of cards +export const GREY_E2 = '#E2E2E2'; +export const GREY_F1 = '#F1F1F1'; +export const GREY_FB = '#FBF9F9'; + +// Blues +export const LIGHT_BLUE = '#99D6FF'; + +// Reds +export const LIGHT_RED = '#FEE2E2'; + +// Greens +export const DARK_GREEN = '#00972E'; diff --git a/packages/ui-chart-components/stories/theme/darkTheme.js b/packages/ui-chart-components/stories/theme/darkTheme.js new file mode 100644 index 0000000000..179e5781b3 --- /dev/null +++ b/packages/ui-chart-components/stories/theme/darkTheme.js @@ -0,0 +1,12 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * + */ +import { createMuiTheme } from '@material-ui/core/styles'; + +const DARKENED_BLUE = '#0296c5'; + +export const darkTheme = createMuiTheme({ + palette: { type: 'dark', primary: { main: DARKENED_BLUE }, contrastText: 'white' }, +}); diff --git a/packages/ui-components/src/components/Chart/Table/index.js b/packages/ui-chart-components/stories/theme/index.js similarity index 53% rename from packages/ui-components/src/components/Chart/Table/index.js rename to packages/ui-chart-components/stories/theme/index.js index 29b0a74afd..2f77229134 100644 --- a/packages/ui-components/src/components/Chart/Table/index.js +++ b/packages/ui-chart-components/stories/theme/index.js @@ -2,5 +2,5 @@ * Tupaia * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd */ -export * from './ChartTable'; -export * from './useChartDataExport'; +export * from './darkTheme'; +export * from './lightTheme'; diff --git a/packages/ui-chart-components/stories/theme/lightTheme.js b/packages/ui-chart-components/stories/theme/lightTheme.js new file mode 100644 index 0000000000..8948680393 --- /dev/null +++ b/packages/ui-chart-components/stories/theme/lightTheme.js @@ -0,0 +1,125 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * + */ + +import { createMuiTheme } from '@material-ui/core/styles'; +import * as COLORS from './colors'; + +const themeName = 'Tupaia-Storybook'; +const palette = { + primary: { + main: COLORS.BLUE, + light: COLORS.LIGHT_BLUE, + }, + secondary: { + main: COLORS.DARK_BLUE, + light: COLORS.LIGHT_BLUE, + }, + error: { + main: COLORS.RED, + light: COLORS.LIGHT_RED, + }, + warning: { + main: COLORS.RED, + light: COLORS.LIGHT_RED, + }, + success: { + main: COLORS.GREEN, + dark: COLORS.DARK_GREEN, + }, + text: { + primary: COLORS.TEXT_DARKGREY, + secondary: COLORS.TEXT_MIDGREY, + tertiary: COLORS.TEXT_LIGHTGREY, + }, + contrastText: COLORS.TEXT_MIDGREY, + grey: { + 100: COLORS.GREY_FB, + 200: COLORS.GREY_F1, + 300: COLORS.GREY_E2, + 400: COLORS.GREY_DE, + 500: COLORS.GREY_9F, + 600: COLORS.GREY_72, + }, + background: { + default: 'transparent', // use background addon to switch colors + paper: COLORS.WHITE, + }, +}; +const typography = { + h1: { + fontSize: '3.125rem', + fontWeight: 500, + lineHeight: 1.18, + letterSpacing: 0, + }, + h2: { + fontSize: '2rem', + fontWeight: 600, + lineHeight: 1.18, + letterSpacing: 0, + }, + h3: { + fontSize: '1.5rem', + fontWeight: 600, + lineHeight: 1.18, + letterSpacing: 0, + }, + h4: { + fontSize: '1.3125rem', + fontWeight: 600, + lineHeight: 1.18, + letterSpacing: 0, + }, + h5: { + fontSize: '1.3125rem', + fontWeight: 500, + lineHeight: 1.18, + letterSpacing: 0, + }, + h6: { + fontSize: '1.125rem', + fontWeight: 500, + lineHeight: 1.18, + letterSpacing: 0, + }, + subtitle1: { + fontSize: '1.125rem', + fontWeight: 500, + lineHeight: 1.18, + letterSpacing: 0, + }, + subtitle2: { + fontSize: '0.8125rem', + fontWeight: 600, + lineHeight: 1.18, + letterSpacing: 0, + }, + body1: { + fontSize: '0.9375rem', + fontWeight: 400, + lineHeight: 1.18, + letterSpacing: 0, + }, + body2: { + fontSize: '0.875rem', + fontWeight: 400, + lineHeight: 1.18, + letterSpacing: 0, + }, + button: { + textTransform: 'none', + letterSpacing: '0.035em', + }, +}; +const shape = { borderRadius: 3 }; +const overrides = { + MuiCard: { + root: { + borderColor: COLORS.GREY_DE, + }, + }, +}; +export const lightTheme = createMuiTheme({ palette, themeName, typography, shape, overrides }); diff --git a/packages/ui-components/src/__tests__/components/DateRangePicker/DateRangePicker.test.js b/packages/ui-components/src/__tests__/components/DateRangePicker/DateRangePicker.test.js index 875c592585..c445b37492 100644 --- a/packages/ui-components/src/__tests__/components/DateRangePicker/DateRangePicker.test.js +++ b/packages/ui-components/src/__tests__/components/DateRangePicker/DateRangePicker.test.js @@ -8,15 +8,15 @@ import React from 'react'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import moment from 'moment'; -import { render } from '../../../../helpers/testingRenderer'; -import { DateRangePicker } from '../../../components/DateRangePicker'; import { DEFAULT_MIN_DATE, GRANULARITY_CONFIG, GRANULARITIES_WITH_ONE_DATE, - momentToDateString, + momentToDateDisplayString, GRANULARITIES, -} from '../../../components/Chart/periodGranularities'; +} from '@tupaia/utils'; +import { render } from '../../../../helpers/testingRenderer'; +import { DateRangePicker } from '../../../components/DateRangePicker'; const MAX_MOMENT_DATE = moment(); @@ -73,7 +73,7 @@ describe('dateRangePicker', () => { const labelText = screen.getByLabelText('active-date'); const startDate = MIN_MOMENT_STRINGS[key]; - const endDate = momentToDateString(MAX_MOMENT_DATE, key, value.rangeFormat); + const endDate = momentToDateDisplayString(MAX_MOMENT_DATE, key, value.rangeFormat); if (GRANULARITIES_WITH_ONE_DATE.includes(key)) { expect(labelText).toHaveTextContent(endDate); diff --git a/packages/ui-components/src/components/Chart/index.js b/packages/ui-components/src/components/Chart/index.js deleted file mode 100644 index dae5262ad4..0000000000 --- a/packages/ui-components/src/components/Chart/index.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -export * from './Chart'; -export * from './Table'; -export * from './periodGranularities'; -export * from './parseChartConfig'; -export * from './constants'; -export * from './utils'; -export * from './weekDisplayFormats'; diff --git a/packages/ui-components/src/components/DateRangePicker/DatePickerDialog.js b/packages/ui-components/src/components/DateRangePicker/DatePickerDialog.js index b3033d593f..0000304809 100644 --- a/packages/ui-components/src/components/DateRangePicker/DatePickerDialog.js +++ b/packages/ui-components/src/components/DateRangePicker/DatePickerDialog.js @@ -8,6 +8,13 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import styled from 'styled-components'; +import { + DEFAULT_MIN_DATE, + GRANULARITIES, + GRANULARITIES_WITH_ONE_DATE, + GRANULARITY_SHAPE, + roundStartEndDates, +} from '@tupaia/utils'; import { Dialog, DialogHeader, DialogContent, DialogFooter } from '../Dialog'; import { DayPicker } from './DayPicker'; import { MonthPicker } from './MonthPicker'; @@ -15,13 +22,6 @@ import { YearPicker } from './YearPicker'; import { WeekPicker } from './WeekPicker'; import { QuarterPicker } from './QuarterPicker'; import { Button, OutlinedButton } from '../Button'; -import { - DEFAULT_MIN_DATE, - GRANULARITIES, - GRANULARITIES_WITH_ONE_DATE, - GRANULARITY_SHAPE, - roundStartEndDates, -} from '../Chart'; const { DAY, diff --git a/packages/ui-components/src/components/DateRangePicker/DateRangePicker.js b/packages/ui-components/src/components/DateRangePicker/DateRangePicker.js index 353fbb8e75..78dc7e2bb3 100644 --- a/packages/ui-components/src/components/DateRangePicker/DateRangePicker.js +++ b/packages/ui-components/src/components/DateRangePicker/DateRangePicker.js @@ -14,9 +14,7 @@ import CircularProgress from '@material-ui/core/CircularProgress'; import MuiButton from '@material-ui/core/Button'; import MuiButtonGroup from '@material-ui/core/ButtonGroup'; import MuiIconButton from '@material-ui/core/IconButton'; -// Todo: Move period granularities to tupaia utils -// @see https://app.zenhub.com/workspaces/active-sprints-5eea9d3de8519e0019186490/issues/beyondessential/tupaia-backlog/2788 -import { GRANULARITIES, GRANULARITY_SHAPE } from '../Chart'; +import { GRANULARITIES, GRANULARITY_SHAPE } from '@tupaia/utils'; import { useDateRangePicker } from './useDateRangePicker'; import { DatePickerDialog } from './DatePickerDialog'; import { FlexStart } from '../Layout'; diff --git a/packages/ui-components/src/components/DateRangePicker/WeekPicker.js b/packages/ui-components/src/components/DateRangePicker/WeekPicker.js index 5aca8b97cb..df030233db 100644 --- a/packages/ui-components/src/components/DateRangePicker/WeekPicker.js +++ b/packages/ui-components/src/components/DateRangePicker/WeekPicker.js @@ -6,14 +6,14 @@ import React from 'react'; import moment from 'moment'; import PropTypes from 'prop-types'; -import { MenuItem } from '../Inputs'; -import { DatePicker } from './DatePicker'; import { GRANULARITY_CONFIG, GRANULARITIES, WEEK_DISPLAY_CONFIG, - momentToDateString, -} from '../Chart'; + momentToDateDisplayString, +} from '@tupaia/utils'; +import { MenuItem } from '../Inputs'; +import { DatePicker } from './DatePicker'; const useBoundaryWeekOrDefault = (currentDate, boundaryDate, defaultWeek) => currentDate.isoWeekYear() === boundaryDate.isoWeekYear() ? boundaryDate.isoWeek() : defaultWeek; @@ -39,7 +39,7 @@ export const WeekPicker = ({ // Prefer moment mutation to creation for performance reasons const mutatingMoment = date.clone(); for (let w = 1; w <= weeksInYear; w++) { - const weekLabel = momentToDateString( + const weekLabel = momentToDateDisplayString( mutatingMoment.isoWeek(w), GRANULARITIES.SINGLE_WEEK, pickerFormat, diff --git a/packages/ui-components/src/components/DateRangePicker/useDateRangePicker.js b/packages/ui-components/src/components/DateRangePicker/useDateRangePicker.js index 0ed7049f25..add5e5a9f7 100644 --- a/packages/ui-components/src/components/DateRangePicker/useDateRangePicker.js +++ b/packages/ui-components/src/components/DateRangePicker/useDateRangePicker.js @@ -11,13 +11,13 @@ import { GRANULARITIES, GRANULARITIES_WITH_ONE_DATE, GRANULARITY_CONFIG, - momentToDateString, + WEEK_DISPLAY_CONFIG, + momentToDateDisplayString, roundStartEndDates, roundStartDate, roundEndDate, toStandardDateString, - WEEK_DISPLAY_CONFIG, -} from '../Chart'; +} from '@tupaia/utils'; const DEFAULT_GRANULARITY = GRANULARITIES.DAY; @@ -42,8 +42,13 @@ const getDatesAsString = ( ? WEEK_DISPLAY_CONFIG[weekDisplayFormat] : GRANULARITY_CONFIG[granularity]; - const formattedStartDate = momentToDateString(startDate, granularity, rangeFormat, modifier); - const formattedEndDate = momentToDateString(endDate, granularity, rangeFormat, modifier); + const formattedStartDate = momentToDateDisplayString( + startDate, + granularity, + rangeFormat, + modifier, + ); + const formattedEndDate = momentToDateDisplayString(endDate, granularity, rangeFormat, modifier); return isSingleDate ? formattedEndDate : `${formattedStartDate} - ${formattedEndDate}`; }; diff --git a/packages/ui-components/src/components/ListVisual/index.js b/packages/ui-components/src/components/ListVisual/index.js deleted file mode 100644 index b2df161756..0000000000 --- a/packages/ui-components/src/components/ListVisual/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd - */ - -export * from './ListVisual'; diff --git a/packages/ui-components/src/components/Table/TableRow.js b/packages/ui-components/src/components/Table/TableRow.js index 701accc4cd..3d0bffe111 100644 --- a/packages/ui-components/src/components/Table/TableRow.js +++ b/packages/ui-components/src/components/Table/TableRow.js @@ -6,10 +6,8 @@ import React from 'react'; import styled from 'styled-components'; import MuiTableCell from '@material-ui/core/TableCell'; import PropTypes from 'prop-types'; -import { AddCircle, RemoveCircle } from '@material-ui/icons'; import MuiTableRow from '@material-ui/core/TableRow'; import { tableColumnShape } from './tableColumnShape'; -import { IconButton } from '../IconButton'; export const TableCell = styled(MuiTableCell)` height: 70px; diff --git a/packages/ui-components/src/components/index.js b/packages/ui-components/src/components/index.js index ff996b612b..e843a99804 100644 --- a/packages/ui-components/src/components/index.js +++ b/packages/ui-components/src/components/index.js @@ -3,7 +3,6 @@ * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd */ -export * from './Chart'; export * from './DataLibrary'; export * from './DataTable'; export * from './DateRangePicker'; @@ -12,7 +11,6 @@ export * from './Icons'; export * from './Inputs'; export * from './JsonEditor'; export * from './Layout'; -export * from './ListVisual'; export * from './Map'; export * from './Modal'; export * from './Table'; diff --git a/packages/ui-components/stories/chart/listVisual.stories.js b/packages/ui-components/stories/chart/listVisual.stories.js deleted file mode 100644 index 1e365b6053..0000000000 --- a/packages/ui-components/stories/chart/listVisual.stories.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd - */ -import React from 'react'; -import styled from 'styled-components'; -import { ListVisual } from '../../src'; -import viewContent from './data/listVisualViewContent.json'; -import { RouterProvider } from '../../helpers/RouterProvider'; - -export default { - title: 'Chart/ListVisual', - component: ListVisual, - decorators: [story => {story()}], -}; - -const Container = styled.div` - width: 750px; - overflow: auto; - margin-bottom: 2rem; - padding: 3rem; -`; - -const NotEnlargedContainer = styled(Container)` - height: 350px; - overflow-y: hidden; - outline: 1px solid yellow; -`; - -const EnlargedContainer = styled(Container)` - height: 500px; - outline: 1px solid yellow; -`; - -const Template = args => { - return ( - - - - ); -}; - -const NotEnlargedTemplate = args => { - return ( - <> - - - - - - ); -}; - -const EnlargedTemplate = args => { - return ( - <> - - - - - - ); -}; - -const reportCodes = { - LESMIS_enrolment_ece_0_2_target: 'LESMIS_enrolment_ece_0_2_target', - LESMIS_enrolment_ece_3_4_target: 'LESMIS_enrolment_ece_3_4_target', - LESMIS_enrolment_ece_5_target: 'LESMIS_enrolment_ece_5_target', -}; - -export const LightTheme = Template.bind({}); -LightTheme.args = { - viewContent, - reportCodes, - drilldownPathname: `/LA_Huoixai%20District/dashboard`, - isEnlarged: true, -}; - -export const NotEnlarged = NotEnlargedTemplate.bind({}); -NotEnlarged.args = { - viewContent, - reportCodes, - drilldownPathname: `/LA_Huoixai%20District/dashboard`, - isEnlarged: false, -}; - -export const Enlarged = EnlargedTemplate.bind({}); -Enlarged.args = { - viewContent, - reportCodes, - drilldownPathname: `/LA_Huoixai%20District/dashboard`, - isEnlarged: true, -}; diff --git a/packages/ui-components/stories/dateRangePicker.stories.js b/packages/ui-components/stories/dateRangePicker.stories.js index c6b25cf722..627bb4e0a4 100644 --- a/packages/ui-components/stories/dateRangePicker.stories.js +++ b/packages/ui-components/stories/dateRangePicker.stories.js @@ -5,8 +5,8 @@ import React, { useState } from 'react'; import styled from 'styled-components'; -import { DateRangePicker, WEEK_DISPLAY_FORMATS } from '../src'; -import { GRANULARITIES } from '../src/components/Chart'; +import { WEEK_DISPLAY_FORMATS, GRANULARITIES } from '@tupaia/utils'; +import { DateRangePicker } from '../src'; import { Table, TableBody, TableCell, TableHead, TableRow } from '@material-ui/core'; const Container = styled.div` diff --git a/packages/ui-components/stories/tables/expandableTable.stories.js b/packages/ui-components/stories/tables/expandableTable.stories.js index 64ed9e8171..0d140ce570 100644 --- a/packages/ui-components/stories/tables/expandableTable.stories.js +++ b/packages/ui-components/stories/tables/expandableTable.stories.js @@ -131,6 +131,7 @@ const TableBody = ({ ...props }) => { expanded={expanded} rowIndex={rowIndex} key={rowData.id} + rowData={rowData} {...props} /> ); diff --git a/packages/utils/package.json b/packages/utils/package.json index 573610bc6d..9b8a113314 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -32,6 +32,7 @@ "moment-timezone": "^0.5.27", "node-fetch": "^1.7.3", "numeral": "^2.0.6", + "prop-types": "^15.6.2", "validator": "^8.2.0", "winston": "^3.3.3", "xlsx": "^0.10.9", diff --git a/packages/utils/src/__tests__/period/periodGranularity.test.js b/packages/utils/src/__tests__/period/getDateRangeForGranularity.test.js similarity index 94% rename from packages/utils/src/__tests__/period/periodGranularity.test.js rename to packages/utils/src/__tests__/period/getDateRangeForGranularity.test.js index 3f7b0ad19f..eb095c033e 100644 --- a/packages/utils/src/__tests__/period/periodGranularity.test.js +++ b/packages/utils/src/__tests__/period/getDateRangeForGranularity.test.js @@ -1,4 +1,4 @@ -import { getDateRangeForGranularity } from '../../period/periodGranularity'; +import { getDateRangeForGranularity } from '../../period/getDateRangeForGranularity'; describe('getDateRangeForGranularity', () => { const testData = [ diff --git a/packages/utils/src/__tests__/period/periodGranularities.test.js b/packages/utils/src/__tests__/period/periodGranularities.test.js new file mode 100644 index 0000000000..5b0bb0c061 --- /dev/null +++ b/packages/utils/src/__tests__/period/periodGranularities.test.js @@ -0,0 +1,227 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + */ + +import moment from 'moment'; +import sinon from 'sinon'; +import { roundStartEndDates, getDefaultDates, getLimits } from '../../period/periodGranularities'; + +const DEFAULT_NOW_TIMESTAMP = 1549360800000; // 2019-02-05T10:00:00.000Z + +const mockNow = (whenIsNow = DEFAULT_NOW_TIMESTAMP) => { + sinon.useFakeTimers(whenIsNow); + moment.tz.setDefault('Australia/Melbourne'); +}; + +const resetMocks = () => { + sinon.restore(); + moment.tz.setDefault(); +}; + +describe('chartGranularities', () => { + beforeEach(() => { + mockNow(1549360800 * 1000); // (2019-02-05 10:00 UTC) + }); + + afterEach(() => { + resetMocks(); + }); + + describe('roundStartEndDates', () => { + it('rounds', () => { + const { startDate, endDate } = roundStartEndDates( + 'day', + moment('2019-02-01T13:14:15+11:00'), + moment('2019-02-02T13:14:15+11:00'), + ); + expect(startDate.format()).toEqual('2019-02-01T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-02T23:59:59+11:00'); + }); + + it('uses today if dates not specified', () => { + const { startDate, endDate } = roundStartEndDates('day'); + expect(startDate.format()).toEqual('2019-02-05T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-05T23:59:59+11:00'); + }); + }); + + describe('getDefaultDates', () => { + it('gives nothing if no period granularity set', () => { + const result = getDefaultDates({}); + expect(result).toEqual({}); + }); + + describe('defaultTimePeriod with single period', () => { + it('gives today by default', () => { + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'one_day_at_a_time', + defaultTimePeriod: null, + }); + expect(startDate.format()).toEqual('2019-02-05T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-05T23:59:59+11:00'); + }); + + it('basic config works', () => { + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'one_day_at_a_time', + defaultTimePeriod: { + start: { unit: 'day', offset: -1 }, + }, + }); + expect(startDate.format()).toEqual('2019-02-04T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-04T23:59:59+11:00'); + }); + + it('throws if unit does not match period granularity', () => { + // The reason for this limitation is to prevent devs from confusing themselves. + // E.g. if periodGranularity is one_month_at_a_time, and offset is +5 days, it will not take + // effect, the start date will be rounded to the start of the month. + const functionCall = () => + getDefaultDates({ + periodGranularity: 'one_month_at_a_time', + defaultTimePeriod: { + start: { unit: 'day', offset: -3 }, + }, + }); + expect(functionCall).toThrow('defaultTimePeriod unit must match periodGranularity'); + }); + + it('ignores end offset if both provided', () => { + // Because we are one_day_at_a_time, end date is restricted to the end of that period (in this case, the day), + // so is ignored when specified alongside start. + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'one_day_at_a_time', + defaultTimePeriod: { + start: { unit: 'day', offset: -1 }, + end: { unit: 'day', offset: 3 }, + }, + }); + expect(startDate.format()).toEqual('2019-02-04T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-04T23:59:59+11:00'); + }); + + it('works when only end date provided', () => { + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'one_day_at_a_time', + defaultTimePeriod: { + end: { unit: 'day', offset: -2 }, + }, + }); + expect(startDate.format()).toEqual('2019-02-03T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-03T23:59:59+11:00'); + }); + + it('works when only end date provided, with range granularity', () => { + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'one_week_at_a_time', + defaultTimePeriod: { + end: { unit: 'week', offset: -2 }, + }, + }); + expect(startDate.format()).toEqual('2019-01-21T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-01-27T23:59:59+11:00'); + }); + + it('rounds to closest week when start is a date string', () => { + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'week', + defaultTimePeriod: { + start: '2019-02-05', + }, + }); + expect(startDate.format()).toEqual('2019-02-04T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-10T23:59:59+11:00'); + }); + + it('throws an error when start is a date string with daily granularity', () => { + const functionCall = () => + getDefaultDates({ + periodGranularity: 'one_day_at_a_time', + defaultTimePeriod: { + start: '2019-02-05', + }, + }); + expect(functionCall).toThrow( + 'defaultTimePeriod unit must match periodGranularity (periodGranularity: one_day_at_a_time, valid unit: day, given: undefined)', + ); + }); + + it('rounds to closest week when start and end are date strings', () => { + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'week', + defaultTimePeriod: { + start: '2019-02-05', + end: '2019-02-11', + }, + }); + expect(startDate.format()).toEqual('2019-02-04T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-10T23:59:59+11:00'); + }); + + it('shorthand syntax', () => { + /* + * Equivalent to: + * defaultTimePeriod: { + * start: { unit: 'day', offset: -1 }, + * } + */ + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'one_day_at_a_time', + defaultTimePeriod: { + unit: 'day', + offset: -1, + }, + }); + expect(startDate.format()).toEqual('2019-02-04T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-04T23:59:59+11:00'); + }); + }); + + describe('defaultTimePeriod with a date range', () => { + it('uses the default date range for empty config', () => { + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'day', + defaultTimePeriod: null, + }); + expect(startDate.format()).toEqual('2015-01-01T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-05T21:00:00+11:00'); + }); + + it('basic config works', () => { + const { startDate, endDate } = getDefaultDates({ + periodGranularity: 'day', + defaultTimePeriod: { + start: { unit: 'day', offset: -1 }, + end: { unit: 'day', offset: 3 }, + }, + }); + expect(startDate.format()).toEqual('2019-02-04T00:00:00+11:00'); + expect(endDate.format()).toEqual('2019-02-08T23:59:59+11:00'); + }); + }); + }); + + describe('getLimits', () => { + it('gives nothing if no config', () => { + const { startDate, endDate } = getLimits('day'); + expect(startDate).toBeNull(); + expect(endDate).toBeNull(); + }); + + it('throws if either unit does not match period granularity', () => { + // The reason for this limitation is to prevent devs from confusing themselves. + // E.g. if periodGranularity is one_month_at_a_time, and offset is +5 days, it will not take + // effect, the start date will be rounded to the start of the month. + const functionCall = () => + getLimits('one_month_at_a_time', { start: { unit: 'day', offset: -3 } }); + expect(functionCall).toThrow('limit unit must match periodGranularity'); + }); + + it('calculates limits', () => { + const { startDate, endDate } = getLimits('day', { start: { unit: 'day', offset: -3 } }); + expect(startDate.format()).toEqual('2019-02-02T00:00:00+11:00'); // rounded + expect(endDate.format()).toEqual('2019-02-05T23:59:59+11:00'); // rounded + }); + }); +}); diff --git a/packages/utils/src/period/periodGranularity.js b/packages/utils/src/period/getDateRangeForGranularity.js similarity index 100% rename from packages/utils/src/period/periodGranularity.js rename to packages/utils/src/period/getDateRangeForGranularity.js diff --git a/packages/utils/src/period/index.js b/packages/utils/src/period/index.js index d0b749a96e..c0ff8a6c75 100644 --- a/packages/utils/src/period/index.js +++ b/packages/utils/src/period/index.js @@ -13,5 +13,7 @@ export { convertDateRangeToPeriodQueryString } from './convertDateRangeToPeriodQ export { getMostRecentPeriod, getMostAncientPeriod } from './periodExtremes'; export * from './getDefaultPeriod'; export * from './period'; -export * from './periodGranularity'; +export * from './getDateRangeForGranularity'; export { getExportDatesString } from './getExportDatesString'; +export * from './periodGranularities'; +export * from './weekDisplayFormats'; diff --git a/packages/ui-components/src/components/Chart/periodGranularities.js b/packages/utils/src/period/periodGranularities.js similarity index 97% rename from packages/ui-components/src/components/Chart/periodGranularities.js rename to packages/utils/src/period/periodGranularities.js index d31019ad86..d1b29610ee 100644 --- a/packages/ui-components/src/components/Chart/periodGranularities.js +++ b/packages/utils/src/period/periodGranularities.js @@ -1,15 +1,14 @@ /** * Tupaia Web - * Copyright (c) 2019 Beyond Essential Systems Pty Ltd. + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd. * This source code is licensed under the AGPL-3.0 license * found in the LICENSE file in the root directory of this source tree. */ import PropTypes from 'prop-types'; import moment from 'moment'; - -import { addMomentOffset } from '@tupaia/utils'; import { WEEK_DISPLAY_CONFIG, WEEK_DISPLAY_FORMATS } from './weekDisplayFormats'; +import { addMomentOffset } from './addMomentOffset'; export const DEFAULT_MIN_DATE = '20150101'; @@ -145,7 +144,7 @@ export const roundStartEndDates = (granularity, startDate, endDate) => ({ * @param {'startOfWeek' | 'endOfWeek' | undefined} modifier * @return {*} */ -export const momentToDateString = (date, granularity, format, modifier) => { +export const momentToDateDisplayString = (date, granularity, format, modifier) => { // Use the explicit modifier passed in, otherwise fall back to the default modifier of the granularity const mod = modifier ?? GRANULARITY_CONFIG[granularity].modifier ?? null; switch (mod) { @@ -194,7 +193,6 @@ const getDefaultDatesForSingleDateGranularities = (periodGranularity, defaultTim // else, assume defaultTimePeriod is the period config. Eg: {defaultTimePeriod: {unit: 'month', offset: -1}} singleDateConfig = defaultTimePeriod; } - const validDateOffsetUnit = GRANULARITIES_WITH_ONE_DATE_VALID_OFFSET_UNIT[periodGranularity]; if (singleDateConfig.unit !== validDateOffsetUnit) { throw new Error( diff --git a/packages/ui-components/src/components/Chart/weekDisplayFormats.js b/packages/utils/src/period/weekDisplayFormats.js similarity index 100% rename from packages/ui-components/src/components/Chart/weekDisplayFormats.js rename to packages/utils/src/period/weekDisplayFormats.js diff --git a/packages/web-frontend/jest.config.js b/packages/web-frontend/jest.config.js index feec9b3f68..a08a2bda3a 100644 --- a/packages/web-frontend/jest.config.js +++ b/packages/web-frontend/jest.config.js @@ -15,5 +15,6 @@ module.exports = { moduleNameMapper: { '^react-native$': 'react-native-web', '^@tupaia/ui-components$': '/jestFileMock.js', + '^@tupaia/ui-chart-components$': '/jestFileMock.js', }, }; diff --git a/packages/web-frontend/package.json b/packages/web-frontend/package.json index 77cd4eabf2..e7ac64739d 100644 --- a/packages/web-frontend/package.json +++ b/packages/web-frontend/package.json @@ -28,7 +28,8 @@ "storybook": "start-storybook -s public -p 6007", "test": "node scripts/test.js --env=jsdom", "start-ui-components": "yarn workspace @tupaia/ui-components build-dev:watch", - "start-frontend": "npm-run-all -c -l -p start-ui-components start-dev" + "start-ui-chart-components": "yarn workspace @tupaia/ui-chart-components build-dev:watch", + "start-frontend": "npm-run-all -c -l -p start-ui-components start-ui-chart-components start-dev" }, "resolutions": { "jss": "10.0.0" @@ -39,6 +40,7 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.57", "@material-ui/styles": "^4.9.10", + "@tupaia/ui-chart-components": "1.0", "@tupaia/ui-components": "1.0", "@tupaia/utils": "1.0.0", "core-js": "^3.16.1", diff --git a/packages/web-frontend/src/components/View/ChartWrapper.js b/packages/web-frontend/src/components/View/ChartWrapper.js index ed49564fe5..6a808be57e 100644 --- a/packages/web-frontend/src/components/View/ChartWrapper.js +++ b/packages/web-frontend/src/components/View/ChartWrapper.js @@ -10,7 +10,7 @@ import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; import ToggleButtonComponent from '@material-ui/lab/ToggleButton'; import BarChartIcon from '@material-ui/icons/BarChart'; import GridOnIcon from '@material-ui/icons/GridOn'; -import { Chart as ChartComponent, ChartTable } from '@tupaia/ui-components'; +import { Chart as ChartComponent, ChartTable } from '@tupaia/ui-chart-components'; import { VIEW_CONTENT_SHAPE } from './propTypes'; import { ChartContainer, ChartViewContainer } from './Layout'; import { FlexEnd } from '../Flexbox'; diff --git a/packages/web-frontend/src/components/View/View.js b/packages/web-frontend/src/components/View/View.js index e63ceb9ec6..db7be41f57 100644 --- a/packages/web-frontend/src/components/View/View.js +++ b/packages/web-frontend/src/components/View/View.js @@ -7,7 +7,7 @@ import PropTypes from 'prop-types'; import styled from 'styled-components'; import CircularProgress from 'material-ui/CircularProgress'; import { periodToMoment } from '@tupaia/utils'; -import { CHART_TYPES } from '@tupaia/ui-components'; +import { CHART_TYPES } from '@tupaia/ui-chart-components'; import { VIEW_STYLES } from '../../styles'; import { NoDataMessage } from './NoDataMessage'; import { VIEW_CONTENT_SHAPE } from './propTypes'; diff --git a/packages/web-frontend/src/containers/EnlargedDialog/EnlargedDialog.js b/packages/web-frontend/src/containers/EnlargedDialog/EnlargedDialog.js index cf8382576f..d9c6ebe071 100644 --- a/packages/web-frontend/src/containers/EnlargedDialog/EnlargedDialog.js +++ b/packages/web-frontend/src/containers/EnlargedDialog/EnlargedDialog.js @@ -8,7 +8,7 @@ import moment from 'moment'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { toFilename } from '@tupaia/utils'; -import { useChartDataExport } from '@tupaia/ui-components'; +import { useChartDataExport } from '@tupaia/ui-chart-components'; import { fetchEnlargedDialogData, setEnlargedDashboardDateRange, diff --git a/scripts/bash/getInternalDependencies.sh b/scripts/bash/getInternalDependencies.sh index 47f4e5ac6d..4830b16bc1 100755 --- a/scripts/bash/getInternalDependencies.sh +++ b/scripts/bash/getInternalDependencies.sh @@ -12,7 +12,7 @@ dependencies_already_visited=($@) # if no package.json entrypoint is specified, just return all internal dependencies if [ -z ${package_path} ]; then - echo "types ui-components" "utils" "tsutils" "access-policy" "admin-panel" "aggregator" "api-client" "auth" "database" "data-api" "dhis-api" "data-lake-api" "expression-parser" "indicators" "weather-api" "kobo-api" "superset-api" "data-broker" "server-boilerplate" + echo "types ui-components" "ui-chart-components" "utils" "tsutils" "access-policy" "admin-panel" "aggregator" "api-client" "auth" "database" "data-api" "dhis-api" "data-lake-api" "expression-parser" "indicators" "weather-api" "kobo-api" "superset-api" "data-broker" "server-boilerplate" exit 0 fi diff --git a/tupaia-packages.code-workspace b/tupaia-packages.code-workspace index 8a4cd76ee4..0395306e9e 100644 --- a/tupaia-packages.code-workspace +++ b/tupaia-packages.code-workspace @@ -112,6 +112,10 @@ "name": "superset-api", "path": "packages/superset-api" }, + { + "name": "ui-chart-components", + "path": "packages/ui-chart-components" + }, { "name": "ui-components", "path": "packages/ui-components" diff --git a/yarn.lock b/yarn.lock index 8906801fd7..5c569964b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5081,6 +5081,7 @@ __metadata: "@material-ui/styles": ^4.9.10 "@tupaia/access-policy": 3.0.0 "@tupaia/types": 1.0.0 + "@tupaia/ui-chart-components": 1.0 "@tupaia/ui-components": 1.0 "@tupaia/utils": 1.0.0 axios: ^0.21.1 @@ -5470,6 +5471,7 @@ __metadata: "@material-ui/styles": ^4.9.10 "@tupaia/access-policy": 3.0.0 "@tupaia/admin-panel": 1.0.0 + "@tupaia/ui-chart-components": 1.0.0 "@tupaia/ui-components": 1.0.0 "@tupaia/utils": 1.0.0 axios: ^0.21.1 @@ -5754,6 +5756,26 @@ __metadata: languageName: unknown linkType: soft +"@tupaia/ui-chart-components@1.0, @tupaia/ui-chart-components@1.0.0, @tupaia/ui-chart-components@workspace:packages/ui-chart-components": + version: 0.0.0-use.local + resolution: "@tupaia/ui-chart-components@workspace:packages/ui-chart-components" + dependencies: + "@material-ui/core": ^4.9.8 + "@material-ui/styles": ^4.9.10 + "@storybook/react": ^6.3.9 + "@tupaia/ui-components": 1.0.0 + "@tupaia/utils": 1.0.0 + lodash.get: ^4.4.2 + moment: ^2.29.1 + prop-types: ^15.7.2 + react: ^16.13.1 + react-dom: ^16.13.1 + react-table: ^7.7.0 + recharts: ^1.8.5 + styled-components: ^5.0.1 + languageName: unknown + linkType: soft + "@tupaia/ui-components@1.0, @tupaia/ui-components@1.0.0, @tupaia/ui-components@workspace:packages/ui-components": version: 0.0.0-use.local resolution: "@tupaia/ui-components@workspace:packages/ui-components" @@ -5807,6 +5829,7 @@ __metadata: node-fetch: ^1.7.3 npm-run-all: ^4.1.5 numeral: ^2.0.6 + prop-types: ^15.6.2 validator: ^8.2.0 winston: ^3.3.3 xlsx: ^0.10.9 @@ -5890,6 +5913,7 @@ __metadata: "@testing-library/jest-dom": ^5.11.0 "@testing-library/react": ^11.0.2 "@testing-library/user-event": ^12.0.11 + "@tupaia/ui-chart-components": 1.0 "@tupaia/ui-components": 1.0 "@tupaia/utils": 1.0.0 case: ^1.6.3 From 38cd74294536d042144f8ec08b6f260a8064f67c Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Fri, 12 May 2023 16:08:25 +1200 Subject: [PATCH 002/251] WAITP-1261: UI map components package (#4562) * split out ui-map-components * update usage in tupaia-web and lesmis * fix builds * update copywright * storybook * tweaks --- .eslintrc | 7 + Dockerfile | 1 + README.md | 1 + packages/devops/ci/tupaia-ci-cd.Dockerfile | 2 + packages/lesmis/package.json | 1 + .../api/queries/useMapOverlayReportData.js | 2 +- .../lesmis/src/components/MapTableModal.js | 10 +- packages/lesmis/src/components/MiniMap.js | 2 +- packages/lesmis/src/views/MapView.js | 2 +- .../src/components/Map/Legend/index.js | 6 - .../ui-components/src/components/index.js | 1 - packages/ui-map-components/.babelrc.js | 42 ++++++ packages/ui-map-components/.npmrc | 1 + .../.storybook/AppProviders.js | 34 +++++ packages/ui-map-components/.storybook/main.js | 5 + .../.storybook/moduleMock.js | 5 + .../.storybook/preview-head.html | 4 + .../ui-map-components/.storybook/preview.js | 23 ++++ .../.storybook/webpack.config.js | 50 +++++++ packages/ui-map-components/README.md | 30 +++++ packages/ui-map-components/jest.config.js | 17 +++ packages/ui-map-components/jestFileMock.js | 6 + packages/ui-map-components/package.json | 43 ++++++ .../src/__tests}/markerColors.test.js | 5 +- .../src/__tests}/markerFormats.test.js | 7 +- .../src/components}/ActivePolygon.js | 4 +- .../src/components}/AreaTooltip.js | 2 +- .../src/components}/EntityPolygon.js | 2 +- .../src/components}/InteractivePolygon.js | 4 +- .../src/components}/InversePolygonMask.js | 2 +- .../src/components}/LeafletMap.js | 4 +- .../src/components}/LeafletStyles.js | 2 +- .../src/components}/Legend/Legend.js | 4 +- .../src/components}/Legend/LegendEntry.js | 2 +- .../src/components}/Legend/MarkerLegend.js | 6 +- .../src/components}/Legend/SpectrumLegend.js | 6 +- .../src/components/Legend/index.js | 6 + .../src/components}/MarkerLayer.js | 4 +- .../Markers/CircleProportionMarker.js | 4 +- .../src/components}/Markers/IconContainer.js | 0 .../src/components}/Markers/IconMarker.js | 2 +- .../src/components}/Markers/MeasureMarker.js | 2 +- .../src/components}/Markers/MeasurePopup.js | 2 +- .../src/components}/Markers/PopupMarker.js | 2 +- .../Markers/arrowIcons/DownArrow.js | 2 +- .../Markers/arrowIcons/RightArrow.js | 2 +- .../components}/Markers/arrowIcons/UpArrow.js | 2 +- .../components}/Markers/arrowIcons/index.js | 0 .../src/components}/Markers/constants.js | 0 .../Markers/disasterIcons/Cyclone.js | 2 +- .../Markers/disasterIcons/Earthquake.js | 2 +- .../Markers/disasterIcons/Flood.js | 2 +- .../Markers/disasterIcons/Tsunami.js | 2 +- .../Markers/disasterIcons/Volcano.js | 2 +- .../Markers/disasterIcons/index.js | 0 .../components}/Markers/images/TupaiaIcon.svg | 0 .../components}/Markers/images/cyclone.svg | 0 .../components}/Markers/images/earthquake.svg | 0 .../src/components}/Markers/images/flood.svg | 0 .../components}/Markers/images/tsunami.svg | 0 .../components}/Markers/images/volcano.svg | 0 .../src/components}/Markers/index.js | 2 +- .../src/components}/Markers/markerIcons.js | 4 +- .../src/components}/PolygonLayer.js | 2 +- .../src/components}/PopupDataItemList.js | 4 +- .../src/components}/Table/MapTable.js | 4 +- .../src/components}/Table/getMapTableData.js | 4 +- .../src/components}/Table/index.js | 2 +- .../src/components}/Table/useMapDataExport.js | 4 +- .../src/components}/TileLayer.js | 2 +- .../src/components}/TilePicker/TileButton.js | 4 +- .../src/components}/TilePicker/TileControl.js | 2 +- .../src/components}/TilePicker/TilePicker.js | 2 +- .../src/components}/TilePicker/constants.js | 2 +- .../src/components}/TilePicker/index.js | 2 +- .../src/components}/TilePicker/keyFrames.js | 2 +- .../src/components}/index.js | 4 +- .../src}/constants/colors.js | 2 +- .../src}/constants/constants.js | 2 +- .../ui-map-components/src/constants/index.js | 7 + packages/ui-map-components/src/index.js | 8 ++ .../src}/utils/index.js | 2 +- .../src}/utils/markerColors.js | 2 +- .../src}/utils/markerFormats.js | 4 +- .../stories}/data/entityAreaData.json | 0 .../stories}/data/entityData.json | 0 .../data/interactivePolygonSerieses.json | 0 .../stories}/data/mapOverlaySerieses.json | 0 .../data/spectrumMapOverlaySerieses.json | 0 .../stories}/interactivePolygon.stories.js | 7 +- .../stories}/legend.stories.js | 7 +- .../stories}/marker.stories.js | 7 +- .../stories}/polygon.stories.js | 7 +- .../ui-map-components/stories/theme/colors.js | 36 +++++ .../stories/theme/darkTheme.js | 12 ++ .../stories/theme}/index.js | 5 +- .../stories/theme/lightTheme.js | 125 ++++++++++++++++++ .../stories}/tilePicker.stories.js | 9 +- packages/web-frontend/package.json | 4 +- .../web-frontend/src/components/MapDiv.js | 2 +- .../MatrixWrapper/components/FooterRow.js | 2 +- .../InteractivePolygonLayer.js | 2 +- .../Map/DataVisualsLayer/MarkerLayer.js | 2 +- .../src/containers/Map/DemoLand/DemoLand.js | 2 +- .../src/containers/Map/DisasterLayer.js | 2 +- .../web-frontend/src/containers/Map/Map.js | 2 +- .../containers/MapTableModal/MapTableModal.js | 9 +- .../src/containers/mobile/MapOverlayLegend.js | 2 +- .../src/selectors/measureSelectors.js | 2 +- packages/web-frontend/src/utils/measures.js | 2 +- scripts/bash/getInternalDependencies.sh | 2 +- tupaia-packages.code-workspace | 4 + yarn.lock | 23 ++++ 113 files changed, 599 insertions(+), 134 deletions(-) delete mode 100644 packages/ui-components/src/components/Map/Legend/index.js create mode 100644 packages/ui-map-components/.babelrc.js create mode 100644 packages/ui-map-components/.npmrc create mode 100644 packages/ui-map-components/.storybook/AppProviders.js create mode 100644 packages/ui-map-components/.storybook/main.js create mode 100644 packages/ui-map-components/.storybook/moduleMock.js create mode 100644 packages/ui-map-components/.storybook/preview-head.html create mode 100644 packages/ui-map-components/.storybook/preview.js create mode 100644 packages/ui-map-components/.storybook/webpack.config.js create mode 100644 packages/ui-map-components/README.md create mode 100644 packages/ui-map-components/jest.config.js create mode 100644 packages/ui-map-components/jestFileMock.js create mode 100644 packages/ui-map-components/package.json rename packages/{ui-components/src/__tests__/components/Map => ui-map-components/src/__tests}/markerColors.test.js (92%) rename packages/{ui-components/src/__tests__/components/Map => ui-map-components/src/__tests}/markerFormats.test.js (98%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/ActivePolygon.js (92%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/AreaTooltip.js (96%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/EntityPolygon.js (94%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/InteractivePolygon.js (97%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/InversePolygonMask.js (92%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/LeafletMap.js (98%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/LeafletStyles.js (96%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Legend/Legend.js (98%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Legend/LegendEntry.js (96%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Legend/MarkerLegend.js (97%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Legend/SpectrumLegend.js (96%) create mode 100644 packages/ui-map-components/src/components/Legend/index.js rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/MarkerLayer.js (95%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/CircleProportionMarker.js (92%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/IconContainer.js (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/IconMarker.js (93%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/MeasureMarker.js (94%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/MeasurePopup.js (96%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/PopupMarker.js (97%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/arrowIcons/DownArrow.js (93%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/arrowIcons/RightArrow.js (93%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/arrowIcons/UpArrow.js (94%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/arrowIcons/index.js (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/constants.js (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/disasterIcons/Cyclone.js (93%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/disasterIcons/Earthquake.js (94%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/disasterIcons/Flood.js (96%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/disasterIcons/Tsunami.js (89%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/disasterIcons/Volcano.js (92%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/disasterIcons/index.js (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/images/TupaiaIcon.svg (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/images/cyclone.svg (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/images/earthquake.svg (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/images/flood.svg (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/images/tsunami.svg (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/images/volcano.svg (100%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/index.js (74%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Markers/markerIcons.js (98%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/PolygonLayer.js (91%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/PopupDataItemList.js (94%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Table/MapTable.js (87%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Table/getMapTableData.js (92%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Table/index.js (56%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/Table/useMapDataExport.js (68%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/TileLayer.js (95%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/TilePicker/TileButton.js (94%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/TilePicker/TileControl.js (98%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/TilePicker/TilePicker.js (97%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/TilePicker/constants.js (73%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/TilePicker/index.js (56%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/TilePicker/keyFrames.js (93%) rename packages/{ui-components/src/components/Map => ui-map-components/src/components}/index.js (83%) rename packages/{ui-components/src/components/Map => ui-map-components/src}/constants/colors.js (97%) rename packages/{ui-components/src/components/Map => ui-map-components/src}/constants/constants.js (95%) create mode 100644 packages/ui-map-components/src/constants/index.js create mode 100644 packages/ui-map-components/src/index.js rename packages/{ui-components/src/components/Map => ui-map-components/src}/utils/index.js (57%) rename packages/{ui-components/src/components/Map => ui-map-components/src}/utils/markerColors.js (99%) rename packages/{ui-components/src/components/Map => ui-map-components/src}/utils/markerFormats.js (98%) rename packages/{ui-components/stories/map => ui-map-components/stories}/data/entityAreaData.json (100%) rename packages/{ui-components/stories/map => ui-map-components/stories}/data/entityData.json (100%) rename packages/{ui-components/stories/map => ui-map-components/stories}/data/interactivePolygonSerieses.json (100%) rename packages/{ui-components/stories/map => ui-map-components/stories}/data/mapOverlaySerieses.json (100%) rename packages/{ui-components/stories/map => ui-map-components/stories}/data/spectrumMapOverlaySerieses.json (100%) rename packages/{ui-components/stories/map => ui-map-components/stories}/interactivePolygon.stories.js (90%) rename packages/{ui-components/stories/map => ui-map-components/stories}/legend.stories.js (92%) rename packages/{ui-components/stories/map => ui-map-components/stories}/marker.stories.js (95%) rename packages/{ui-components/stories/map => ui-map-components/stories}/polygon.stories.js (86%) create mode 100644 packages/ui-map-components/stories/theme/colors.js create mode 100644 packages/ui-map-components/stories/theme/darkTheme.js rename packages/{ui-components/src/components/Map/constants => ui-map-components/stories/theme}/index.js (57%) create mode 100644 packages/ui-map-components/stories/theme/lightTheme.js rename packages/{ui-components/stories/map => ui-map-components/stories}/tilePicker.stories.js (89%) diff --git a/.eslintrc b/.eslintrc index 03400c972f..f3c78b1c1e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -77,6 +77,7 @@ "packages/psss/**", "packages/ui-components/**", "packages/ui-chart-components/**", + "packages/ui-map-components/**", "packages/web-frontend/**" ], "env": { @@ -172,6 +173,12 @@ "import/no-extraneous-dependencies": "off" } }, + { + "files": ["packages/ui-map-components/**"], + "rules": { + "import/no-extraneous-dependencies": "off" + } + }, { "files": ["packages/web-config-server/**"], "plugins": ["module-resolver"], diff --git a/Dockerfile b/Dockerfile index 24d057312f..16c3134109 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,6 +39,7 @@ COPY packages/tsutils/. ./packages/tsutils COPY packages/types/. ./packages/types COPY packages/ui-components/. ./packages/ui-components COPY packages/ui-chart-components/. ./packages/ui-chart-components +COPY packages/ui-map-components/. ./packages/ui-map-components COPY packages/weather-api/. ./packages/weather-api COPY packages/server-boilerplate/. ./packages/server-boilerplate COPY packages/kobo-api/. ./packages/kobo-api diff --git a/README.md b/README.md index d375457ab8..e71634579c 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ if you prefer to pre-build internal dependencies, add `--skip-internal` to the a - [indicators](https://github.com/beyondessential/tupaia/blob/dev/packages/indicators/README.md) - [ui-components](https://github.com/beyondessential/tupaia/blob/dev/packages/ui-components/README.md) - [ui-chart-components](https://github.com/beyondessential/tupaia/blob/dev/packages/ui-chart-components/README.md) +- [ui-map-components](https://github.com/beyondessential/tupaia/blob/dev/packages/ui-map-components/README.md) - [server-boilerplate](https://github.com/beyondessential/tupaia/blob/dev/packages/server-boilerplate/README.md) - [utils](https://github.com/beyondessential/tupaia/blob/dev/packages/utils/README.md) diff --git a/packages/devops/ci/tupaia-ci-cd.Dockerfile b/packages/devops/ci/tupaia-ci-cd.Dockerfile index 994228ee84..43523f4981 100644 --- a/packages/devops/ci/tupaia-ci-cd.Dockerfile +++ b/packages/devops/ci/tupaia-ci-cd.Dockerfile @@ -93,6 +93,8 @@ RUN mkdir -p ./packages/ui-components COPY packages/ui-components/package.json ./packages/ui-components RUN mkdir -p ./packages/ui-chart-components COPY packages/ui-chart-components/package.json ./packages/ui-chart-components +RUN mkdir -p ./packages/ui-map-components +COPY packages/ui-map-components/package.json ./packages/ui-map-components RUN mkdir -p ./packages/utils COPY packages/utils/package.json ./packages/utils RUN mkdir -p ./packages/weather-api diff --git a/packages/lesmis/package.json b/packages/lesmis/package.json index d02f0a1333..f9226d2500 100755 --- a/packages/lesmis/package.json +++ b/packages/lesmis/package.json @@ -40,6 +40,7 @@ "@tupaia/admin-panel": "1.0.0", "@tupaia/ui-chart-components": "1.0.0", "@tupaia/ui-components": "1.0.0", + "@tupaia/ui-map-components": "1.0.0", "@tupaia/utils": "1.0.0", "axios": "^0.21.1", "camelcase": "^6.2.0", diff --git a/packages/lesmis/src/api/queries/useMapOverlayReportData.js b/packages/lesmis/src/api/queries/useMapOverlayReportData.js index a33aab358b..96ad9c16d2 100644 --- a/packages/lesmis/src/api/queries/useMapOverlayReportData.js +++ b/packages/lesmis/src/api/queries/useMapOverlayReportData.js @@ -14,7 +14,7 @@ import { SPECTRUM_MEASURE_TYPES, getMeasureDisplayInfo, calculateRadiusScaleFactor, -} from '@tupaia/ui-components'; +} from '@tupaia/ui-map-components'; import { useEntitiesData } from './useEntitiesData'; import { yearToApiDates } from './utils'; import { useUrlSearchParam } from '../../utils/useUrlSearchParams'; diff --git a/packages/lesmis/src/components/MapTableModal.js b/packages/lesmis/src/components/MapTableModal.js index 12f7852b15..e5c12ae9f2 100644 --- a/packages/lesmis/src/components/MapTableModal.js +++ b/packages/lesmis/src/components/MapTableModal.js @@ -5,14 +5,8 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import DownloadIcon from '@material-ui/icons/GetApp'; -import { - Dialog, - DialogHeader, - DialogContent, - MapTable, - useMapDataExport, -} from '@tupaia/ui-components'; - +import { Dialog, DialogHeader, DialogContent } from '@tupaia/ui-components'; +import { MapTable, useMapDataExport } from '@tupaia/ui-map-components'; import MuiIconButton from '@material-ui/core/IconButton'; export const MapTableModal = ({ Button, overlayReportData, title }) => { diff --git a/packages/lesmis/src/components/MiniMap.js b/packages/lesmis/src/components/MiniMap.js index 89bfd0983d..4bd5c964b5 100644 --- a/packages/lesmis/src/components/MiniMap.js +++ b/packages/lesmis/src/components/MiniMap.js @@ -12,7 +12,7 @@ import { IconMarker, InversePolygonMask, LeafletMapContainer, -} from '@tupaia/ui-components'; +} from '@tupaia/ui-map-components'; import { TILE_SETS, RED, COUNTRY_CODE } from '../constants'; import { useEntityData } from '../api'; diff --git a/packages/lesmis/src/views/MapView.js b/packages/lesmis/src/views/MapView.js index f63be1ddf1..c6aefbd328 100644 --- a/packages/lesmis/src/views/MapView.js +++ b/packages/lesmis/src/views/MapView.js @@ -13,7 +13,7 @@ import { Legend, ZoomControl, TilePicker as TilePickerComponent, -} from '@tupaia/ui-components'; +} from '@tupaia/ui-map-components'; import { YearSelector, MapOverlaysPanel } from '../components'; import { useMapOverlayReportData, useMapOverlaysData } from '../api'; import { TILE_SETS, DEFAULT_DATA_YEAR } from '../constants'; diff --git a/packages/ui-components/src/components/Map/Legend/index.js b/packages/ui-components/src/components/Map/Legend/index.js deleted file mode 100644 index 2a7e0f6006..0000000000 --- a/packages/ui-components/src/components/Map/Legend/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -export * from './Legend'; diff --git a/packages/ui-components/src/components/index.js b/packages/ui-components/src/components/index.js index e843a99804..1a43ad1348 100644 --- a/packages/ui-components/src/components/index.js +++ b/packages/ui-components/src/components/index.js @@ -11,7 +11,6 @@ export * from './Icons'; export * from './Inputs'; export * from './JsonEditor'; export * from './Layout'; -export * from './Map'; export * from './Modal'; export * from './Table'; export * from './UserMessage'; diff --git a/packages/ui-map-components/.babelrc.js b/packages/ui-map-components/.babelrc.js new file mode 100644 index 0000000000..acb867ab25 --- /dev/null +++ b/packages/ui-map-components/.babelrc.js @@ -0,0 +1,42 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +const isTest = process.env.NODE_ENV === 'test'; + +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: 'current', + }, + modules: isTest ? 'commonjs' : false, + }, + ], + '@babel/preset-react', + ], + plugins: [ + '@babel/plugin-proposal-object-rest-spread', + [ + '@babel/plugin-proposal-class-properties', + { + loose: true, + }, + ], + [ + '@babel/plugin-proposal-private-property-in-object', + { + loose: true, + }, + ], + [ + '@babel/plugin-proposal-private-methods', + { + loose: true, + }, + ], + ], +}; diff --git a/packages/ui-map-components/.npmrc b/packages/ui-map-components/.npmrc new file mode 100644 index 0000000000..a21347f1bd --- /dev/null +++ b/packages/ui-map-components/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/packages/ui-map-components/.storybook/AppProviders.js b/packages/ui-map-components/.storybook/AppProviders.js new file mode 100644 index 0000000000..bb6f190224 --- /dev/null +++ b/packages/ui-map-components/.storybook/AppProviders.js @@ -0,0 +1,34 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import { MuiThemeProvider, StylesProvider } from '@material-ui/core/styles'; +import { ThemeProvider } from 'styled-components'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import PropTypes from 'prop-types'; +import { lightTheme, darkTheme } from '../stories/theme'; + +export const AppProviders = ({ params, children }) => { + const theme = params?.theme === 'dark' ? darkTheme : lightTheme; + return ( + + + + + {children} + + + + ); +}; + +AppProviders.propTypes = { + params: PropTypes.object, + children: PropTypes.any.isRequired, +}; + +AppProviders.defaultProps = { + params: null, +}; diff --git a/packages/ui-map-components/.storybook/main.js b/packages/ui-map-components/.storybook/main.js new file mode 100644 index 0000000000..e731ebcce9 --- /dev/null +++ b/packages/ui-map-components/.storybook/main.js @@ -0,0 +1,5 @@ +// import the build chain webpack config and merge it with storybook config +module.exports = { + stories: ['../stories/**/*.stories.js'], + addons: ['@storybook/addon-essentials'], +}; diff --git a/packages/ui-map-components/.storybook/moduleMock.js b/packages/ui-map-components/.storybook/moduleMock.js new file mode 100644 index 0000000000..7f225744d0 --- /dev/null +++ b/packages/ui-map-components/.storybook/moduleMock.js @@ -0,0 +1,5 @@ +// mock implementation of `yargs`, because `script.js` within `@tupaia/utils` uses it but that +// breaks storybook +module.exports = { + strict: () => {}, +}; diff --git a/packages/ui-map-components/.storybook/preview-head.html b/packages/ui-map-components/.storybook/preview-head.html new file mode 100644 index 0000000000..5346aa0b2d --- /dev/null +++ b/packages/ui-map-components/.storybook/preview-head.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/ui-map-components/.storybook/preview.js b/packages/ui-map-components/.storybook/preview.js new file mode 100644 index 0000000000..1914497bf3 --- /dev/null +++ b/packages/ui-map-components/.storybook/preview.js @@ -0,0 +1,23 @@ +import React from 'react'; +import { addDecorator } from '@storybook/react'; +import { AppProviders } from './AppProviders'; + +export const parameters = { + backgrounds: { + default: 'light', + values: [ + { + name: 'light', + value: '#FFFFFF', + }, + { + name: 'dark', + value: '#252934', + }, + ], + }, +}; + +addDecorator((story, context) => ( + {story()} +)); diff --git a/packages/ui-map-components/.storybook/webpack.config.js b/packages/ui-map-components/.storybook/webpack.config.js new file mode 100644 index 0000000000..1cd252a8bd --- /dev/null +++ b/packages/ui-map-components/.storybook/webpack.config.js @@ -0,0 +1,50 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * + */ + +const path = require('path'); + +/** + * The doc doesn't really mention using webpack.config.js, but .storybook/main.js instead. + * + * Nevertheless, configuring the webpack.config.js seems to work fine. + * + * @param config + * @return {Promise<*>} + * @see https://storybook.js.org/docs/react/configure/webpack + * @see https://storybook.js.org/docs/react/configure/webpack#using-your-existing-config + */ +module.exports = async ({ config }) => { + /** + * Fixes npm packages that depend on `fs` module, etc. + * + * E.g: "winston" would fail to load without this, because it relies on fs, which isn't available during browser build. + * + * @see https://github.com/storybookjs/storybook/issues/4082#issuecomment-495370896 + */ + config.node = { + fs: 'empty', + tls: 'empty', + net: 'empty', + module: 'empty', + console: true, + }; + + config.resolve.alias = { + ...config.resolve.alias, + yargs: path.resolve(__dirname, 'moduleMock.js'), + child_process: path.resolve(__dirname, 'moduleMock.js'), + }; + + config.module.rules.push({ + test: /\.(js|jsx)$/, + loader: require.resolve('babel-loader'), + options: { + plugins: ['@babel/plugin-proposal-nullish-coalescing-operator'], + }, + }); + + return config; +}; diff --git a/packages/ui-map-components/README.md b/packages/ui-map-components/README.md new file mode 100644 index 0000000000..3400f69a4f --- /dev/null +++ b/packages/ui-map-components/README.md @@ -0,0 +1,30 @@ +# @tupaia/ui-chart-components + +A library of chart interface components for the Tupaia project. + +## Available Scripts + +In the project directory, you can run: + +`yarn storybook` + +Runs the storybook app and pulls stories from the `src` directory which have a .stories.js suffix.
+ +The page will reload if you make edits.
+ +## Story Book + +Storybook is an open source tool for developing UI components. +[https://github.com/storybookjs/storybook](https://github.com/storybookjs/storybook) + +## Leaflet + +The components are mostly built on top of components from the [Leaflet JS library](https://leafletjs.com). + +##### Notes on approach: + +- Use [styled components](https://styled-components.com) to customise components +- Import Material UI components with a Mui prefix to distinguish them from custom components. eg. `import MuiButton from '@material-ui/core/Button';` + +- Avoid hard coding children and allow them to be passed in as JSX as much as possible +- Export components using named exports diff --git a/packages/ui-map-components/jest.config.js b/packages/ui-map-components/jest.config.js new file mode 100644 index 0000000000..31ed09a0b5 --- /dev/null +++ b/packages/ui-map-components/jest.config.js @@ -0,0 +1,17 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +module.exports = { + moduleDirectories: ['node_modules'], + collectCoverageFrom: ['**/src/components/**/*.js'], + // handle static assets @see https://jestjs.io/docs/webpack#handling-static-assets + moduleNameMapper: { + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|css)$': + '/jestFileMock.js', + '^file-loader': '/jestFileMock.js', + }, + transformIgnorePatterns: ['/node_modules/'], + testTimeout: 30 * 1000, // 30 seconds. Needed for CI as some test take a while if CPU has high load +}; diff --git a/packages/ui-map-components/jestFileMock.js b/packages/ui-map-components/jestFileMock.js new file mode 100644 index 0000000000..e3e855a9a3 --- /dev/null +++ b/packages/ui-map-components/jestFileMock.js @@ -0,0 +1,6 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * + */ +module.exports = 'test-file-stub'; diff --git a/packages/ui-map-components/package.json b/packages/ui-map-components/package.json new file mode 100644 index 0000000000..09a277c2f1 --- /dev/null +++ b/packages/ui-map-components/package.json @@ -0,0 +1,43 @@ +{ + "name": "@tupaia/ui-map-components", + "version": "1.0.0", + "private": true, + "description": "A library of map components for the tupaia monorepo", + "repository": { + "type": "git", + "url": "git+https://github.com/beyondessential/tupaia", + "directory": "packages/ui-map-components" + }, + "author": "Beyond Essential Systems (https://beyondessential.com.au)", + "source": "src/index.js", + "main": "dist/index.js", + "scripts": { + "build": "rm -rf dist && npm run --prefix ../../ package:build:js", + "build-dev": "npm run build", + "lint": "yarn package:lint:js", + "lint:fix": "yarn lint --fix", + "storybook": "start-storybook -s public -p 6006", + "test": "yarn package:test --env=jsdom", + "test:coverage": "yarn test --coverage", + "test:watch": "yarn test --watch", + "build-dev:watch": "yarn run package:build:js -w" + }, + "dependencies": { + "@material-ui/core": "^4.9.8", + "@material-ui/icons": "^4.9.1", + "@tupaia/ui-components": "1.0.0", + "@tupaia/utils": "1.0.0", + "leaflet": "^1.7.1", + "moment": "^2.29.1", + "prop-types": "^15.7.2", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-leaflet": "^3.2.1", + "react-table": "^7.7.0", + "styled-components": "^5.0.1" + }, + "devDependencies": { + "@material-ui/styles": "^4.9.10", + "@storybook/react": "^6.3.9" + } +} diff --git a/packages/ui-components/src/__tests__/components/Map/markerColors.test.js b/packages/ui-map-components/src/__tests/markerColors.test.js similarity index 92% rename from packages/ui-components/src/__tests__/components/Map/markerColors.test.js rename to packages/ui-map-components/src/__tests/markerColors.test.js index 69a839a9e9..3e730ae119 100644 --- a/packages/ui-components/src/__tests__/components/Map/markerColors.test.js +++ b/packages/ui-map-components/src/__tests/markerColors.test.js @@ -1,10 +1,9 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - * + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import { getHeatmapColor, getReverseHeatmapColor } from '../../../components/Map/utils'; +import { getHeatmapColor, getReverseHeatmapColor } from '../utils'; describe('getHeatmapColorByOrder()', () => { it('getHeatmapColor() should return expected rgb', () => { diff --git a/packages/ui-components/src/__tests__/components/Map/markerFormats.test.js b/packages/ui-map-components/src/__tests/markerFormats.test.js similarity index 98% rename from packages/ui-components/src/__tests__/components/Map/markerFormats.test.js rename to packages/ui-map-components/src/__tests/markerFormats.test.js index b83afa3d65..7ad48a0e00 100644 --- a/packages/ui-components/src/__tests__/components/Map/markerFormats.test.js +++ b/packages/ui-map-components/src/__tests/markerFormats.test.js @@ -1,17 +1,16 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - * + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import { YES_COLOR, NO_COLOR } from '../../../components/Map/constants'; +import { YES_COLOR, NO_COLOR } from '../constants'; import { autoAssignColors, createValueMapping, getMeasureDisplayInfo, getFormattedInfo, flattenNumericalMeasureData, -} from '../../../components/Map/utils'; +} from '../utils'; describe('measures', () => { describe('processing', () => { diff --git a/packages/ui-components/src/components/Map/ActivePolygon.js b/packages/ui-map-components/src/components/ActivePolygon.js similarity index 92% rename from packages/ui-components/src/components/Map/ActivePolygon.js rename to packages/ui-map-components/src/components/ActivePolygon.js index 3df34130bf..243199c5da 100644 --- a/packages/ui-components/src/components/Map/ActivePolygon.js +++ b/packages/ui-map-components/src/components/ActivePolygon.js @@ -1,13 +1,13 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; import { Polygon } from 'react-leaflet'; import styled from 'styled-components'; -import { MAP_COLORS } from './constants'; +import { MAP_COLORS } from '../constants'; const { POLYGON_HIGHLIGHT } = MAP_COLORS; diff --git a/packages/ui-components/src/components/Map/AreaTooltip.js b/packages/ui-map-components/src/components/AreaTooltip.js similarity index 96% rename from packages/ui-components/src/components/Map/AreaTooltip.js rename to packages/ui-map-components/src/components/AreaTooltip.js index ea9f25dc5e..cec7152976 100644 --- a/packages/ui-components/src/components/Map/AreaTooltip.js +++ b/packages/ui-map-components/src/components/AreaTooltip.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/EntityPolygon.js b/packages/ui-map-components/src/components/EntityPolygon.js similarity index 94% rename from packages/ui-components/src/components/Map/EntityPolygon.js rename to packages/ui-map-components/src/components/EntityPolygon.js index bf6244555a..c3a8099f34 100644 --- a/packages/ui-components/src/components/Map/EntityPolygon.js +++ b/packages/ui-map-components/src/components/EntityPolygon.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/InteractivePolygon.js b/packages/ui-map-components/src/components/InteractivePolygon.js similarity index 97% rename from packages/ui-components/src/components/Map/InteractivePolygon.js rename to packages/ui-map-components/src/components/InteractivePolygon.js index 779c6783f0..d6c44290b2 100644 --- a/packages/ui-components/src/components/Map/InteractivePolygon.js +++ b/packages/ui-map-components/src/components/InteractivePolygon.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; @@ -8,7 +8,7 @@ import PropTypes from 'prop-types'; import { Polygon } from 'react-leaflet'; import styled from 'styled-components'; import { AreaTooltip } from './AreaTooltip'; -import { MAP_COLORS, BREWER_PALETTE } from './constants'; +import { MAP_COLORS, BREWER_PALETTE } from '../constants'; import ActivePolygon from './ActivePolygon'; const { POLYGON_BLUE, POLYGON_HIGHLIGHT } = MAP_COLORS; diff --git a/packages/ui-components/src/components/Map/InversePolygonMask.js b/packages/ui-map-components/src/components/InversePolygonMask.js similarity index 92% rename from packages/ui-components/src/components/Map/InversePolygonMask.js rename to packages/ui-map-components/src/components/InversePolygonMask.js index d32fc5e6e9..5deeaed6dd 100644 --- a/packages/ui-components/src/components/Map/InversePolygonMask.js +++ b/packages/ui-map-components/src/components/InversePolygonMask.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/LeafletMap.js b/packages/ui-map-components/src/components/LeafletMap.js similarity index 98% rename from packages/ui-components/src/components/Map/LeafletMap.js rename to packages/ui-map-components/src/components/LeafletMap.js index 38730c84ad..dfd390636a 100644 --- a/packages/ui-components/src/components/Map/LeafletMap.js +++ b/packages/ui-map-components/src/components/LeafletMap.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ /** @@ -21,7 +21,7 @@ import PropTypes from 'prop-types'; import styled from 'styled-components'; import { MapContainer as LeafletMapContainer } from 'react-leaflet'; import { LeafletStyles } from './LeafletStyles'; -import { DEFAULT_BOUNDS } from './constants'; +import { DEFAULT_BOUNDS } from '../constants'; const Map = styled(LeafletMapContainer)` ${LeafletStyles}; diff --git a/packages/ui-components/src/components/Map/LeafletStyles.js b/packages/ui-map-components/src/components/LeafletStyles.js similarity index 96% rename from packages/ui-components/src/components/Map/LeafletStyles.js rename to packages/ui-map-components/src/components/LeafletStyles.js index 185954a1de..8a98d3548d 100644 --- a/packages/ui-components/src/components/Map/LeafletStyles.js +++ b/packages/ui-map-components/src/components/LeafletStyles.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/Legend/Legend.js b/packages/ui-map-components/src/components/Legend/Legend.js similarity index 98% rename from packages/ui-components/src/components/Map/Legend/Legend.js rename to packages/ui-map-components/src/components/Legend/Legend.js index 171478bd07..2fd4daa6f9 100644 --- a/packages/ui-components/src/components/Map/Legend/Legend.js +++ b/packages/ui-map-components/src/components/Legend/Legend.js @@ -1,6 +1,6 @@ /** * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import PropTypes from 'prop-types'; @@ -13,7 +13,7 @@ import { MEASURE_TYPE_SHADED_SPECTRUM, MEASURE_TYPE_SPECTRUM, MEASURE_TYPE_POPUP_ONLY, -} from '../utils'; +} from '../../utils'; import { MarkerLegend } from './MarkerLegend'; import { SpectrumLegend } from './SpectrumLegend'; diff --git a/packages/ui-components/src/components/Map/Legend/LegendEntry.js b/packages/ui-map-components/src/components/Legend/LegendEntry.js similarity index 96% rename from packages/ui-components/src/components/Map/Legend/LegendEntry.js rename to packages/ui-map-components/src/components/Legend/LegendEntry.js index d64f61570a..317744f23d 100644 --- a/packages/ui-components/src/components/Map/Legend/LegendEntry.js +++ b/packages/ui-map-components/src/components/Legend/LegendEntry.js @@ -1,6 +1,6 @@ /** * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/Legend/MarkerLegend.js b/packages/ui-map-components/src/components/Legend/MarkerLegend.js similarity index 97% rename from packages/ui-components/src/components/Map/Legend/MarkerLegend.js rename to packages/ui-map-components/src/components/Legend/MarkerLegend.js index c078973be5..2d1dd31136 100644 --- a/packages/ui-components/src/components/Map/Legend/MarkerLegend.js +++ b/packages/ui-map-components/src/components/Legend/MarkerLegend.js @@ -1,6 +1,6 @@ /** * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import PropTypes from 'prop-types'; @@ -8,7 +8,7 @@ import React from 'react'; import styled from 'styled-components'; import { useTheme } from '@material-ui/core/styles'; import MuiBox from '@material-ui/core/Box'; -import { UNKNOWN_COLOR } from '../constants'; +import { UNKNOWN_COLOR } from '../../constants'; import { DEFAULT_ICON, HIDDEN_ICON, @@ -23,7 +23,7 @@ import { MEASURE_TYPE_SHADING, MEASURE_VALUE_NULL, MEASURE_VALUE_OTHER, -} from '../utils'; +} from '../../utils'; import { LegendEntry } from './LegendEntry'; const Container = styled(MuiBox)` diff --git a/packages/ui-components/src/components/Map/Legend/SpectrumLegend.js b/packages/ui-map-components/src/components/Legend/SpectrumLegend.js similarity index 96% rename from packages/ui-components/src/components/Map/Legend/SpectrumLegend.js rename to packages/ui-map-components/src/components/Legend/SpectrumLegend.js index a5aab71d33..76f62b58c0 100644 --- a/packages/ui-components/src/components/Map/Legend/SpectrumLegend.js +++ b/packages/ui-map-components/src/components/Legend/SpectrumLegend.js @@ -1,6 +1,6 @@ /** * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import moment from 'moment'; @@ -9,9 +9,9 @@ import PropTypes from 'prop-types'; import MuiBox from '@material-ui/core/Box'; import styled from 'styled-components'; import { formatDataValueByType } from '@tupaia/utils'; -import { resolveSpectrumColour } from '../utils'; +import { resolveSpectrumColour } from '../../utils'; import { LEGEND_SHADING_ICON, getMarkerForOption } from '../Markers/markerIcons'; -import { SCALE_TYPES } from '../constants'; +import { SCALE_TYPES } from '../../constants'; import { LegendEntry } from './LegendEntry'; const FlexCenter = styled(MuiBox)` diff --git a/packages/ui-map-components/src/components/Legend/index.js b/packages/ui-map-components/src/components/Legend/index.js new file mode 100644 index 0000000000..216c8c3d4e --- /dev/null +++ b/packages/ui-map-components/src/components/Legend/index.js @@ -0,0 +1,6 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export * from './Legend'; diff --git a/packages/ui-components/src/components/Map/MarkerLayer.js b/packages/ui-map-components/src/components/MarkerLayer.js similarity index 95% rename from packages/ui-components/src/components/Map/MarkerLayer.js rename to packages/ui-map-components/src/components/MarkerLayer.js index bcc19a29b5..03a88925b0 100644 --- a/packages/ui-components/src/components/Map/MarkerLayer.js +++ b/packages/ui-map-components/src/components/MarkerLayer.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React from 'react'; @@ -9,7 +9,7 @@ import PropTypes from 'prop-types'; import { LayerGroup, Polygon } from 'react-leaflet'; import { MeasureMarker, MeasurePopup } from './Markers'; import { AreaTooltip } from './AreaTooltip'; -import { getSingleFormattedValue, MEASURE_TYPE_RADIUS } from './utils'; +import { getSingleFormattedValue, MEASURE_TYPE_RADIUS } from '../utils'; const ShadedPolygon = styled(Polygon)` fill-opacity: 0.5; diff --git a/packages/ui-components/src/components/Map/Markers/CircleProportionMarker.js b/packages/ui-map-components/src/components/Markers/CircleProportionMarker.js similarity index 92% rename from packages/ui-components/src/components/Map/Markers/CircleProportionMarker.js rename to packages/ui-map-components/src/components/Markers/CircleProportionMarker.js index f074cb36a8..abbdf9c187 100644 --- a/packages/ui-components/src/components/Map/Markers/CircleProportionMarker.js +++ b/packages/ui-map-components/src/components/Markers/CircleProportionMarker.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ @@ -8,7 +8,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { CircleMarker } from 'react-leaflet'; import styled from 'styled-components'; -import { getColor } from '../utils'; +import { getColor } from '../../utils'; const HoverCircle = styled(CircleMarker)` &:hover { diff --git a/packages/ui-components/src/components/Map/Markers/IconContainer.js b/packages/ui-map-components/src/components/Markers/IconContainer.js similarity index 100% rename from packages/ui-components/src/components/Map/Markers/IconContainer.js rename to packages/ui-map-components/src/components/Markers/IconContainer.js diff --git a/packages/ui-components/src/components/Map/Markers/IconMarker.js b/packages/ui-map-components/src/components/Markers/IconMarker.js similarity index 93% rename from packages/ui-components/src/components/Map/Markers/IconMarker.js rename to packages/ui-map-components/src/components/Markers/IconMarker.js index ea35b85072..045d62e92f 100644 --- a/packages/ui-components/src/components/Map/Markers/IconMarker.js +++ b/packages/ui-map-components/src/components/Markers/IconMarker.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/Markers/MeasureMarker.js b/packages/ui-map-components/src/components/Markers/MeasureMarker.js similarity index 94% rename from packages/ui-components/src/components/Map/Markers/MeasureMarker.js rename to packages/ui-map-components/src/components/Markers/MeasureMarker.js index 0497ed24e2..2eeb799c80 100644 --- a/packages/ui-components/src/components/Map/Markers/MeasureMarker.js +++ b/packages/ui-map-components/src/components/Markers/MeasureMarker.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/Markers/MeasurePopup.js b/packages/ui-map-components/src/components/Markers/MeasurePopup.js similarity index 96% rename from packages/ui-components/src/components/Map/Markers/MeasurePopup.js rename to packages/ui-map-components/src/components/Markers/MeasurePopup.js index 93dd73a5d1..add6160120 100644 --- a/packages/ui-components/src/components/Map/Markers/MeasurePopup.js +++ b/packages/ui-map-components/src/components/Markers/MeasurePopup.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/Markers/PopupMarker.js b/packages/ui-map-components/src/components/Markers/PopupMarker.js similarity index 97% rename from packages/ui-components/src/components/Map/Markers/PopupMarker.js rename to packages/ui-map-components/src/components/Markers/PopupMarker.js index a9c17bdfa9..fd4707483c 100644 --- a/packages/ui-components/src/components/Map/Markers/PopupMarker.js +++ b/packages/ui-map-components/src/components/Markers/PopupMarker.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/Markers/arrowIcons/DownArrow.js b/packages/ui-map-components/src/components/Markers/arrowIcons/DownArrow.js similarity index 93% rename from packages/ui-components/src/components/Map/Markers/arrowIcons/DownArrow.js rename to packages/ui-map-components/src/components/Markers/arrowIcons/DownArrow.js index f4926aadfc..309feaab29 100644 --- a/packages/ui-components/src/components/Map/Markers/arrowIcons/DownArrow.js +++ b/packages/ui-map-components/src/components/Markers/arrowIcons/DownArrow.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; diff --git a/packages/ui-components/src/components/Map/Markers/arrowIcons/RightArrow.js b/packages/ui-map-components/src/components/Markers/arrowIcons/RightArrow.js similarity index 93% rename from packages/ui-components/src/components/Map/Markers/arrowIcons/RightArrow.js rename to packages/ui-map-components/src/components/Markers/arrowIcons/RightArrow.js index 8bbe05cb54..fc0e8f4f65 100644 --- a/packages/ui-components/src/components/Map/Markers/arrowIcons/RightArrow.js +++ b/packages/ui-map-components/src/components/Markers/arrowIcons/RightArrow.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; diff --git a/packages/ui-components/src/components/Map/Markers/arrowIcons/UpArrow.js b/packages/ui-map-components/src/components/Markers/arrowIcons/UpArrow.js similarity index 94% rename from packages/ui-components/src/components/Map/Markers/arrowIcons/UpArrow.js rename to packages/ui-map-components/src/components/Markers/arrowIcons/UpArrow.js index 3b12b40f79..fc0e122e9e 100644 --- a/packages/ui-components/src/components/Map/Markers/arrowIcons/UpArrow.js +++ b/packages/ui-map-components/src/components/Markers/arrowIcons/UpArrow.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; diff --git a/packages/ui-components/src/components/Map/Markers/arrowIcons/index.js b/packages/ui-map-components/src/components/Markers/arrowIcons/index.js similarity index 100% rename from packages/ui-components/src/components/Map/Markers/arrowIcons/index.js rename to packages/ui-map-components/src/components/Markers/arrowIcons/index.js diff --git a/packages/ui-components/src/components/Map/Markers/constants.js b/packages/ui-map-components/src/components/Markers/constants.js similarity index 100% rename from packages/ui-components/src/components/Map/Markers/constants.js rename to packages/ui-map-components/src/components/Markers/constants.js diff --git a/packages/ui-components/src/components/Map/Markers/disasterIcons/Cyclone.js b/packages/ui-map-components/src/components/Markers/disasterIcons/Cyclone.js similarity index 93% rename from packages/ui-components/src/components/Map/Markers/disasterIcons/Cyclone.js rename to packages/ui-map-components/src/components/Markers/disasterIcons/Cyclone.js index 52f99f662d..91fc7a40c9 100644 --- a/packages/ui-components/src/components/Map/Markers/disasterIcons/Cyclone.js +++ b/packages/ui-map-components/src/components/Markers/disasterIcons/Cyclone.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/Markers/disasterIcons/Earthquake.js b/packages/ui-map-components/src/components/Markers/disasterIcons/Earthquake.js similarity index 94% rename from packages/ui-components/src/components/Map/Markers/disasterIcons/Earthquake.js rename to packages/ui-map-components/src/components/Markers/disasterIcons/Earthquake.js index cac15ca107..7354bce54e 100644 --- a/packages/ui-components/src/components/Map/Markers/disasterIcons/Earthquake.js +++ b/packages/ui-map-components/src/components/Markers/disasterIcons/Earthquake.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/Markers/disasterIcons/Flood.js b/packages/ui-map-components/src/components/Markers/disasterIcons/Flood.js similarity index 96% rename from packages/ui-components/src/components/Map/Markers/disasterIcons/Flood.js rename to packages/ui-map-components/src/components/Markers/disasterIcons/Flood.js index 7023a85c32..7f935f5588 100644 --- a/packages/ui-components/src/components/Map/Markers/disasterIcons/Flood.js +++ b/packages/ui-map-components/src/components/Markers/disasterIcons/Flood.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/Markers/disasterIcons/Tsunami.js b/packages/ui-map-components/src/components/Markers/disasterIcons/Tsunami.js similarity index 89% rename from packages/ui-components/src/components/Map/Markers/disasterIcons/Tsunami.js rename to packages/ui-map-components/src/components/Markers/disasterIcons/Tsunami.js index c75a2f1fa5..59c14465c4 100644 --- a/packages/ui-components/src/components/Map/Markers/disasterIcons/Tsunami.js +++ b/packages/ui-map-components/src/components/Markers/disasterIcons/Tsunami.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/Markers/disasterIcons/Volcano.js b/packages/ui-map-components/src/components/Markers/disasterIcons/Volcano.js similarity index 92% rename from packages/ui-components/src/components/Map/Markers/disasterIcons/Volcano.js rename to packages/ui-map-components/src/components/Markers/disasterIcons/Volcano.js index 9089310269..5c125fd828 100644 --- a/packages/ui-components/src/components/Map/Markers/disasterIcons/Volcano.js +++ b/packages/ui-map-components/src/components/Markers/disasterIcons/Volcano.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/Markers/disasterIcons/index.js b/packages/ui-map-components/src/components/Markers/disasterIcons/index.js similarity index 100% rename from packages/ui-components/src/components/Map/Markers/disasterIcons/index.js rename to packages/ui-map-components/src/components/Markers/disasterIcons/index.js diff --git a/packages/ui-components/src/components/Map/Markers/images/TupaiaIcon.svg b/packages/ui-map-components/src/components/Markers/images/TupaiaIcon.svg similarity index 100% rename from packages/ui-components/src/components/Map/Markers/images/TupaiaIcon.svg rename to packages/ui-map-components/src/components/Markers/images/TupaiaIcon.svg diff --git a/packages/ui-components/src/components/Map/Markers/images/cyclone.svg b/packages/ui-map-components/src/components/Markers/images/cyclone.svg similarity index 100% rename from packages/ui-components/src/components/Map/Markers/images/cyclone.svg rename to packages/ui-map-components/src/components/Markers/images/cyclone.svg diff --git a/packages/ui-components/src/components/Map/Markers/images/earthquake.svg b/packages/ui-map-components/src/components/Markers/images/earthquake.svg similarity index 100% rename from packages/ui-components/src/components/Map/Markers/images/earthquake.svg rename to packages/ui-map-components/src/components/Markers/images/earthquake.svg diff --git a/packages/ui-components/src/components/Map/Markers/images/flood.svg b/packages/ui-map-components/src/components/Markers/images/flood.svg similarity index 100% rename from packages/ui-components/src/components/Map/Markers/images/flood.svg rename to packages/ui-map-components/src/components/Markers/images/flood.svg diff --git a/packages/ui-components/src/components/Map/Markers/images/tsunami.svg b/packages/ui-map-components/src/components/Markers/images/tsunami.svg similarity index 100% rename from packages/ui-components/src/components/Map/Markers/images/tsunami.svg rename to packages/ui-map-components/src/components/Markers/images/tsunami.svg diff --git a/packages/ui-components/src/components/Map/Markers/images/volcano.svg b/packages/ui-map-components/src/components/Markers/images/volcano.svg similarity index 100% rename from packages/ui-components/src/components/Map/Markers/images/volcano.svg rename to packages/ui-map-components/src/components/Markers/images/volcano.svg diff --git a/packages/ui-components/src/components/Map/Markers/index.js b/packages/ui-map-components/src/components/Markers/index.js similarity index 74% rename from packages/ui-components/src/components/Map/Markers/index.js rename to packages/ui-map-components/src/components/Markers/index.js index 0bfda4994f..4dbd7ff278 100644 --- a/packages/ui-components/src/components/Map/Markers/index.js +++ b/packages/ui-map-components/src/components/Markers/index.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/Markers/markerIcons.js b/packages/ui-map-components/src/components/Markers/markerIcons.js similarity index 98% rename from packages/ui-components/src/components/Map/Markers/markerIcons.js rename to packages/ui-map-components/src/components/Markers/markerIcons.js index 0b5e988cd7..bf00e67524 100644 --- a/packages/ui-components/src/components/Map/Markers/markerIcons.js +++ b/packages/ui-map-components/src/components/Markers/markerIcons.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ @@ -18,7 +18,7 @@ import { ICON_BASE_SIZE } from './constants'; // from https://thenounproject.com/ochavisual/collection/ocha-humanitarian-icons/ import { Cyclone, Earthquake, Tsunami, Volcano, Flood } from './disasterIcons'; import { UpArrow, DownArrow, RightArrow } from './arrowIcons'; -import { BREWER_PALETTE, WHITE } from '../constants'; +import { BREWER_PALETTE, WHITE } from '../../constants'; import { IconContainer } from './IconContainer'; // allows passing a color to a material icon & scales it down a bit diff --git a/packages/ui-components/src/components/Map/PolygonLayer.js b/packages/ui-map-components/src/components/PolygonLayer.js similarity index 91% rename from packages/ui-components/src/components/Map/PolygonLayer.js rename to packages/ui-map-components/src/components/PolygonLayer.js index 8134f315ce..4fe8a2a284 100644 --- a/packages/ui-components/src/components/Map/PolygonLayer.js +++ b/packages/ui-map-components/src/components/PolygonLayer.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React from 'react'; diff --git a/packages/ui-components/src/components/Map/PopupDataItemList.js b/packages/ui-map-components/src/components/PopupDataItemList.js similarity index 94% rename from packages/ui-components/src/components/Map/PopupDataItemList.js rename to packages/ui-map-components/src/components/PopupDataItemList.js index cd7c02c49d..05e4eab251 100644 --- a/packages/ui-components/src/components/Map/PopupDataItemList.js +++ b/packages/ui-map-components/src/components/PopupDataItemList.js @@ -1,12 +1,12 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React from 'react'; import PropTypes from 'prop-types'; -import { getFormattedInfo } from './utils'; +import { getFormattedInfo } from '../utils'; const getMetadata = (data, key) => { if (data.metadata) { diff --git a/packages/ui-components/src/components/Map/Table/MapTable.js b/packages/ui-map-components/src/components/Table/MapTable.js similarity index 87% rename from packages/ui-components/src/components/Map/Table/MapTable.js rename to packages/ui-map-components/src/components/Table/MapTable.js index 72f9dff171..ed9a11446d 100644 --- a/packages/ui-components/src/components/Map/Table/MapTable.js +++ b/packages/ui-map-components/src/components/Table/MapTable.js @@ -1,11 +1,11 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import PropTypes from 'prop-types'; +import { DataTable } from '@tupaia/ui-components'; import { getMapTableData } from './getMapTableData'; -import { DataTable } from '../../DataTable'; export const MapTable = ({ serieses, measureData, className }) => { const { columns, data } = getMapTableData(serieses, measureData); diff --git a/packages/ui-components/src/components/Map/Table/getMapTableData.js b/packages/ui-map-components/src/components/Table/getMapTableData.js similarity index 92% rename from packages/ui-components/src/components/Map/Table/getMapTableData.js rename to packages/ui-map-components/src/components/Table/getMapTableData.js index ea63212981..76afe10dea 100644 --- a/packages/ui-components/src/components/Map/Table/getMapTableData.js +++ b/packages/ui-map-components/src/components/Table/getMapTableData.js @@ -1,10 +1,10 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React, { useMemo } from 'react'; import styled from 'styled-components'; -import { getFormattedInfo } from '../utils'; +import { getFormattedInfo } from '../../utils'; const FirstColumnCell = styled.span` font-weight: 500; diff --git a/packages/ui-components/src/components/Map/Table/index.js b/packages/ui-map-components/src/components/Table/index.js similarity index 56% rename from packages/ui-components/src/components/Map/Table/index.js rename to packages/ui-map-components/src/components/Table/index.js index 11ef503534..7979b578e9 100644 --- a/packages/ui-components/src/components/Map/Table/index.js +++ b/packages/ui-map-components/src/components/Table/index.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export * from './MapTable'; export * from './useMapDataExport'; diff --git a/packages/ui-components/src/components/Map/Table/useMapDataExport.js b/packages/ui-map-components/src/components/Table/useMapDataExport.js similarity index 68% rename from packages/ui-components/src/components/Map/Table/useMapDataExport.js rename to packages/ui-map-components/src/components/Table/useMapDataExport.js index f78e3d7571..3bed1d2908 100644 --- a/packages/ui-components/src/components/Map/Table/useMapDataExport.js +++ b/packages/ui-map-components/src/components/Table/useMapDataExport.js @@ -1,10 +1,10 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +import { useDataTableExport } from '@tupaia/ui-components'; import { getMapTableData } from './getMapTableData'; -import { useDataTableExport } from '../../DataTable/useDataTableExport'; export const useMapDataExport = (serieses, measureData, title, startDate, endDate) => { const { columns, data } = getMapTableData(serieses, measureData); diff --git a/packages/ui-components/src/components/Map/TileLayer.js b/packages/ui-map-components/src/components/TileLayer.js similarity index 95% rename from packages/ui-components/src/components/Map/TileLayer.js rename to packages/ui-map-components/src/components/TileLayer.js index a8efe72878..2a4154bc6b 100644 --- a/packages/ui-components/src/components/Map/TileLayer.js +++ b/packages/ui-map-components/src/components/TileLayer.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/TilePicker/TileButton.js b/packages/ui-map-components/src/components/TilePicker/TileButton.js similarity index 94% rename from packages/ui-components/src/components/Map/TilePicker/TileButton.js rename to packages/ui-map-components/src/components/TilePicker/TileButton.js index 6a4a71347d..7e897b6440 100644 --- a/packages/ui-components/src/components/Map/TilePicker/TileButton.js +++ b/packages/ui-map-components/src/components/TilePicker/TileButton.js @@ -1,16 +1,16 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React from 'react'; import styled from 'styled-components'; import PropTypes from 'prop-types'; +import { ReferenceTooltip } from '@tupaia/ui-components'; import Typography from '@material-ui/core/Typography'; import Button from '@material-ui/core/Button'; import { tileSetShape } from './constants'; -import { ReferenceTooltip } from '../../ReferenceTooltip'; const StyledButton = styled(Button)` position: relative; diff --git a/packages/ui-components/src/components/Map/TilePicker/TileControl.js b/packages/ui-map-components/src/components/TilePicker/TileControl.js similarity index 98% rename from packages/ui-components/src/components/Map/TilePicker/TileControl.js rename to packages/ui-map-components/src/components/TilePicker/TileControl.js index 59347b33d1..f136f83ad3 100644 --- a/packages/ui-components/src/components/Map/TilePicker/TileControl.js +++ b/packages/ui-map-components/src/components/TilePicker/TileControl.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/TilePicker/TilePicker.js b/packages/ui-map-components/src/components/TilePicker/TilePicker.js similarity index 97% rename from packages/ui-components/src/components/Map/TilePicker/TilePicker.js rename to packages/ui-map-components/src/components/TilePicker/TilePicker.js index 50262a0866..4ac7cb9fdb 100644 --- a/packages/ui-components/src/components/Map/TilePicker/TilePicker.js +++ b/packages/ui-map-components/src/components/TilePicker/TilePicker.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React, { useState } from 'react'; diff --git a/packages/ui-components/src/components/Map/TilePicker/constants.js b/packages/ui-map-components/src/components/TilePicker/constants.js similarity index 73% rename from packages/ui-components/src/components/Map/TilePicker/constants.js rename to packages/ui-map-components/src/components/TilePicker/constants.js index 4f52e687e0..6a235e09c1 100644 --- a/packages/ui-components/src/components/Map/TilePicker/constants.js +++ b/packages/ui-map-components/src/components/TilePicker/constants.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/TilePicker/index.js b/packages/ui-map-components/src/components/TilePicker/index.js similarity index 56% rename from packages/ui-components/src/components/Map/TilePicker/index.js rename to packages/ui-map-components/src/components/TilePicker/index.js index a83b23f320..0f241f3fff 100644 --- a/packages/ui-components/src/components/Map/TilePicker/index.js +++ b/packages/ui-map-components/src/components/TilePicker/index.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/TilePicker/keyFrames.js b/packages/ui-map-components/src/components/TilePicker/keyFrames.js similarity index 93% rename from packages/ui-components/src/components/Map/TilePicker/keyFrames.js rename to packages/ui-map-components/src/components/TilePicker/keyFrames.js index 64b149ec01..7259fb3399 100644 --- a/packages/ui-components/src/components/Map/TilePicker/keyFrames.js +++ b/packages/ui-map-components/src/components/TilePicker/keyFrames.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/index.js b/packages/ui-map-components/src/components/index.js similarity index 83% rename from packages/ui-components/src/components/Map/index.js rename to packages/ui-map-components/src/components/index.js index 598cb0a272..c63e5b84da 100644 --- a/packages/ui-components/src/components/Map/index.js +++ b/packages/ui-map-components/src/components/index.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ export { @@ -13,7 +13,6 @@ export { Polygon, } from 'react-leaflet'; export * from './AreaTooltip'; -export * from './constants'; export * from './EntityPolygon'; export * from './InversePolygonMask'; export * from './InteractivePolygon'; @@ -26,4 +25,3 @@ export * from './PopupDataItemList'; export * from './Table'; export * from './TileLayer'; export * from './TilePicker'; -export * from './utils'; diff --git a/packages/ui-components/src/components/Map/constants/colors.js b/packages/ui-map-components/src/constants/colors.js similarity index 97% rename from packages/ui-components/src/components/Map/constants/colors.js rename to packages/ui-map-components/src/constants/colors.js index f2e30805a9..6845fae0aa 100644 --- a/packages/ui-components/src/components/Map/constants/colors.js +++ b/packages/ui-map-components/src/constants/colors.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import { blue, red, green, lightGreen, yellow, orange } from '@material-ui/core/colors'; diff --git a/packages/ui-components/src/components/Map/constants/constants.js b/packages/ui-map-components/src/constants/constants.js similarity index 95% rename from packages/ui-components/src/components/Map/constants/constants.js rename to packages/ui-map-components/src/constants/constants.js index a79669da4f..b1b62f4c7b 100644 --- a/packages/ui-components/src/components/Map/constants/constants.js +++ b/packages/ui-map-components/src/constants/constants.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-map-components/src/constants/index.js b/packages/ui-map-components/src/constants/index.js new file mode 100644 index 0000000000..9deeb3e699 --- /dev/null +++ b/packages/ui-map-components/src/constants/index.js @@ -0,0 +1,7 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * + */ +export * from './constants'; +export * from './colors'; diff --git a/packages/ui-map-components/src/index.js b/packages/ui-map-components/src/index.js new file mode 100644 index 0000000000..66168efa97 --- /dev/null +++ b/packages/ui-map-components/src/index.js @@ -0,0 +1,8 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * + */ +export * from './components'; +export * from './constants'; +export * from './utils'; diff --git a/packages/ui-components/src/components/Map/utils/index.js b/packages/ui-map-components/src/utils/index.js similarity index 57% rename from packages/ui-components/src/components/Map/utils/index.js rename to packages/ui-map-components/src/utils/index.js index 249afad1a3..c0f9e5e3dd 100644 --- a/packages/ui-components/src/components/Map/utils/index.js +++ b/packages/ui-map-components/src/utils/index.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ export * from './markerColors'; diff --git a/packages/ui-components/src/components/Map/utils/markerColors.js b/packages/ui-map-components/src/utils/markerColors.js similarity index 99% rename from packages/ui-components/src/components/Map/utils/markerColors.js rename to packages/ui-map-components/src/utils/markerColors.js index e52d3b7d82..55d1c3582e 100644 --- a/packages/ui-components/src/components/Map/utils/markerColors.js +++ b/packages/ui-map-components/src/utils/markerColors.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ diff --git a/packages/ui-components/src/components/Map/utils/markerFormats.js b/packages/ui-map-components/src/utils/markerFormats.js similarity index 98% rename from packages/ui-components/src/components/Map/utils/markerFormats.js rename to packages/ui-map-components/src/utils/markerFormats.js index 4eea38637b..7119541949 100644 --- a/packages/ui-components/src/components/Map/utils/markerFormats.js +++ b/packages/ui-map-components/src/utils/markerFormats.js @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ @@ -14,7 +14,7 @@ import { MAP_COLORS, SCALE_TYPES, } from '../constants'; -import { SPECTRUM_ICON, DEFAULT_ICON, UNKNOWN_ICON } from '../Markers/markerIcons'; +import { SPECTRUM_ICON, DEFAULT_ICON, UNKNOWN_ICON } from '../components/Markers/markerIcons'; export const MEASURE_TYPE_ICON = 'icon'; export const MEASURE_TYPE_COLOR = 'color'; diff --git a/packages/ui-components/stories/map/data/entityAreaData.json b/packages/ui-map-components/stories/data/entityAreaData.json similarity index 100% rename from packages/ui-components/stories/map/data/entityAreaData.json rename to packages/ui-map-components/stories/data/entityAreaData.json diff --git a/packages/ui-components/stories/map/data/entityData.json b/packages/ui-map-components/stories/data/entityData.json similarity index 100% rename from packages/ui-components/stories/map/data/entityData.json rename to packages/ui-map-components/stories/data/entityData.json diff --git a/packages/ui-components/stories/map/data/interactivePolygonSerieses.json b/packages/ui-map-components/stories/data/interactivePolygonSerieses.json similarity index 100% rename from packages/ui-components/stories/map/data/interactivePolygonSerieses.json rename to packages/ui-map-components/stories/data/interactivePolygonSerieses.json diff --git a/packages/ui-components/stories/map/data/mapOverlaySerieses.json b/packages/ui-map-components/stories/data/mapOverlaySerieses.json similarity index 100% rename from packages/ui-components/stories/map/data/mapOverlaySerieses.json rename to packages/ui-map-components/stories/data/mapOverlaySerieses.json diff --git a/packages/ui-components/stories/map/data/spectrumMapOverlaySerieses.json b/packages/ui-map-components/stories/data/spectrumMapOverlaySerieses.json similarity index 100% rename from packages/ui-components/stories/map/data/spectrumMapOverlaySerieses.json rename to packages/ui-map-components/stories/data/spectrumMapOverlaySerieses.json diff --git a/packages/ui-components/stories/map/interactivePolygon.stories.js b/packages/ui-map-components/stories/interactivePolygon.stories.js similarity index 90% rename from packages/ui-components/stories/map/interactivePolygon.stories.js rename to packages/ui-map-components/stories/interactivePolygon.stories.js index cf2f91241d..88a754e622 100644 --- a/packages/ui-components/stories/map/interactivePolygon.stories.js +++ b/packages/ui-map-components/stories/interactivePolygon.stories.js @@ -1,7 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - * + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import { @@ -10,7 +9,7 @@ import { AttributionControl, MapContainer, } from 'react-leaflet'; -import { InteractivePolygon } from '../../src/components/Map'; +import { InteractivePolygon } from '../src'; import multiOverlaySerieses from './data/interactivePolygonSerieses.json'; import area from './data/entityAreaData.json'; @@ -27,7 +26,7 @@ const position = { }; export default { - title: 'Map/InteractivePolygon', + title: 'InteractivePolygon', decorators: [ Story => ( ( diff --git a/packages/ui-components/stories/map/polygon.stories.js b/packages/ui-map-components/stories/polygon.stories.js similarity index 86% rename from packages/ui-components/stories/map/polygon.stories.js rename to packages/ui-map-components/stories/polygon.stories.js index cfabf0fb92..f8710eee15 100644 --- a/packages/ui-components/stories/map/polygon.stories.js +++ b/packages/ui-map-components/stories/polygon.stories.js @@ -1,12 +1,11 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - * + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import styled from 'styled-components'; import L from 'leaflet'; -import { LeafletMapContainer, TileLayer, PolygonLayer } from '../../src/components/Map'; +import { LeafletMapContainer, TileLayer, PolygonLayer } from '../src'; import entityData from './data/entityData.json'; const Container = styled.div` @@ -15,7 +14,7 @@ const Container = styled.div` `; export default { - title: 'Map/MapLayers', + title: 'MapLayers', decorators: [ Story => ( diff --git a/packages/ui-map-components/stories/theme/colors.js b/packages/ui-map-components/stories/theme/colors.js new file mode 100644 index 0000000000..a185550554 --- /dev/null +++ b/packages/ui-map-components/stories/theme/colors.js @@ -0,0 +1,36 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + */ + +// Primary & Secondary colors +export const WHITE = '#FFFFFF'; +export const BLACK = '#000000'; +export const BLUE = '#3884B8'; +export const DARK_BLUE = '#135D8F'; +export const YELLOW = '#FFCC24'; +export const RED = '#D13333'; +export const ORANGE = '#EF5A06'; +export const GREEN = '#02B851'; +export const DARKGREY = '#283238'; // dark background +export const LIGHTGREY = '#F9F9F9'; // page background +export const TEXT_DARKGREY = '#414D55'; +export const TEXT_MIDGREY = '#6F7B82'; +export const TEXT_LIGHTGREY = '#9AA8B0'; + +// Greys (based on first 2 letters of hex code) +export const GREY_72 = '#727D84'; +export const GREY_9F = '#9FA6AA'; +export const GREY_DE = '#DEDEE0'; // use for border colors of cards +export const GREY_E2 = '#E2E2E2'; +export const GREY_F1 = '#F1F1F1'; +export const GREY_FB = '#FBF9F9'; + +// Blues +export const LIGHT_BLUE = '#99D6FF'; + +// Reds +export const LIGHT_RED = '#FEE2E2'; + +// Greens +export const DARK_GREEN = '#00972E'; diff --git a/packages/ui-map-components/stories/theme/darkTheme.js b/packages/ui-map-components/stories/theme/darkTheme.js new file mode 100644 index 0000000000..179e5781b3 --- /dev/null +++ b/packages/ui-map-components/stories/theme/darkTheme.js @@ -0,0 +1,12 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * + */ +import { createMuiTheme } from '@material-ui/core/styles'; + +const DARKENED_BLUE = '#0296c5'; + +export const darkTheme = createMuiTheme({ + palette: { type: 'dark', primary: { main: DARKENED_BLUE }, contrastText: 'white' }, +}); diff --git a/packages/ui-components/src/components/Map/constants/index.js b/packages/ui-map-components/stories/theme/index.js similarity index 57% rename from packages/ui-components/src/components/Map/constants/index.js rename to packages/ui-map-components/stories/theme/index.js index c85fafc01d..2f77229134 100644 --- a/packages/ui-components/src/components/Map/constants/index.js +++ b/packages/ui-map-components/stories/theme/index.js @@ -1,7 +1,6 @@ /* * Tupaia * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - * */ -export * from './constants'; -export * from './colors'; +export * from './darkTheme'; +export * from './lightTheme'; diff --git a/packages/ui-map-components/stories/theme/lightTheme.js b/packages/ui-map-components/stories/theme/lightTheme.js new file mode 100644 index 0000000000..8948680393 --- /dev/null +++ b/packages/ui-map-components/stories/theme/lightTheme.js @@ -0,0 +1,125 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * + */ + +import { createMuiTheme } from '@material-ui/core/styles'; +import * as COLORS from './colors'; + +const themeName = 'Tupaia-Storybook'; +const palette = { + primary: { + main: COLORS.BLUE, + light: COLORS.LIGHT_BLUE, + }, + secondary: { + main: COLORS.DARK_BLUE, + light: COLORS.LIGHT_BLUE, + }, + error: { + main: COLORS.RED, + light: COLORS.LIGHT_RED, + }, + warning: { + main: COLORS.RED, + light: COLORS.LIGHT_RED, + }, + success: { + main: COLORS.GREEN, + dark: COLORS.DARK_GREEN, + }, + text: { + primary: COLORS.TEXT_DARKGREY, + secondary: COLORS.TEXT_MIDGREY, + tertiary: COLORS.TEXT_LIGHTGREY, + }, + contrastText: COLORS.TEXT_MIDGREY, + grey: { + 100: COLORS.GREY_FB, + 200: COLORS.GREY_F1, + 300: COLORS.GREY_E2, + 400: COLORS.GREY_DE, + 500: COLORS.GREY_9F, + 600: COLORS.GREY_72, + }, + background: { + default: 'transparent', // use background addon to switch colors + paper: COLORS.WHITE, + }, +}; +const typography = { + h1: { + fontSize: '3.125rem', + fontWeight: 500, + lineHeight: 1.18, + letterSpacing: 0, + }, + h2: { + fontSize: '2rem', + fontWeight: 600, + lineHeight: 1.18, + letterSpacing: 0, + }, + h3: { + fontSize: '1.5rem', + fontWeight: 600, + lineHeight: 1.18, + letterSpacing: 0, + }, + h4: { + fontSize: '1.3125rem', + fontWeight: 600, + lineHeight: 1.18, + letterSpacing: 0, + }, + h5: { + fontSize: '1.3125rem', + fontWeight: 500, + lineHeight: 1.18, + letterSpacing: 0, + }, + h6: { + fontSize: '1.125rem', + fontWeight: 500, + lineHeight: 1.18, + letterSpacing: 0, + }, + subtitle1: { + fontSize: '1.125rem', + fontWeight: 500, + lineHeight: 1.18, + letterSpacing: 0, + }, + subtitle2: { + fontSize: '0.8125rem', + fontWeight: 600, + lineHeight: 1.18, + letterSpacing: 0, + }, + body1: { + fontSize: '0.9375rem', + fontWeight: 400, + lineHeight: 1.18, + letterSpacing: 0, + }, + body2: { + fontSize: '0.875rem', + fontWeight: 400, + lineHeight: 1.18, + letterSpacing: 0, + }, + button: { + textTransform: 'none', + letterSpacing: '0.035em', + }, +}; +const shape = { borderRadius: 3 }; +const overrides = { + MuiCard: { + root: { + borderColor: COLORS.GREY_DE, + }, + }, +}; +export const lightTheme = createMuiTheme({ palette, themeName, typography, shape, overrides }); diff --git a/packages/ui-components/stories/map/tilePicker.stories.js b/packages/ui-map-components/stories/tilePicker.stories.js similarity index 89% rename from packages/ui-components/stories/map/tilePicker.stories.js rename to packages/ui-map-components/stories/tilePicker.stories.js index 0ff849139b..54c30786fd 100644 --- a/packages/ui-components/stories/map/tilePicker.stories.js +++ b/packages/ui-map-components/stories/tilePicker.stories.js @@ -1,16 +1,13 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ import React, { useState } from 'react'; import styled from 'styled-components'; -import { - MapContainer, - TileLayer, - TilePicker as TilePickerComponent, -} from '../../src/components/Map'; +import { MapContainer } from 'react-leaflet'; +import { TileLayer, TilePicker as TilePickerComponent } from '../src/components'; const Container = styled.div` position: relative; diff --git a/packages/web-frontend/package.json b/packages/web-frontend/package.json index e7ac64739d..c3b9200376 100644 --- a/packages/web-frontend/package.json +++ b/packages/web-frontend/package.json @@ -29,7 +29,8 @@ "test": "node scripts/test.js --env=jsdom", "start-ui-components": "yarn workspace @tupaia/ui-components build-dev:watch", "start-ui-chart-components": "yarn workspace @tupaia/ui-chart-components build-dev:watch", - "start-frontend": "npm-run-all -c -l -p start-ui-components start-ui-chart-components start-dev" + "start-ui-map-components": "yarn workspace @tupaia/ui-map-components build-dev:watch", + "start-frontend": "npm-run-all -c -l -p start-ui-components start-ui-chart-components start-ui-map-components start-dev" }, "resolutions": { "jss": "10.0.0" @@ -42,6 +43,7 @@ "@material-ui/styles": "^4.9.10", "@tupaia/ui-chart-components": "1.0", "@tupaia/ui-components": "1.0", + "@tupaia/ui-map-components": "1.0", "@tupaia/utils": "1.0.0", "core-js": "^3.16.1", "dom-to-image": "2.6.0", diff --git a/packages/web-frontend/src/components/MapDiv.js b/packages/web-frontend/src/components/MapDiv.js index 508873dfc9..556cac50ed 100644 --- a/packages/web-frontend/src/components/MapDiv.js +++ b/packages/web-frontend/src/components/MapDiv.js @@ -15,7 +15,7 @@ import React from 'react'; import styled from 'styled-components'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { Legend as MapLegend, TilePicker, tileSetShape } from '@tupaia/ui-components'; +import { Legend as MapLegend, TilePicker, tileSetShape } from '@tupaia/ui-map-components'; import { CONTROL_BAR_PADDING } from '../styles'; import { MapOverlayBar } from '../containers/MapOverlayBar'; import { MapWatermark } from './MapWatermark'; diff --git a/packages/web-frontend/src/components/View/MatrixWrapper/components/FooterRow.js b/packages/web-frontend/src/components/View/MatrixWrapper/components/FooterRow.js index 62bd165f73..e73cf00175 100644 --- a/packages/web-frontend/src/components/View/MatrixWrapper/components/FooterRow.js +++ b/packages/web-frontend/src/components/View/MatrixWrapper/components/FooterRow.js @@ -5,7 +5,7 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { getMarkerForOption, LEGEND_COLOR_ICON } from '@tupaia/ui-components'; +import { getMarkerForOption, LEGEND_COLOR_ICON } from '@tupaia/ui-map-components'; import { CONDITIONAL_MATRIX_CONDITION_SHAPE } from '../../propTypes'; const Legend = ({ legend, styles }) => { diff --git a/packages/web-frontend/src/containers/Map/DataVisualsLayer/InteractivePolygonLayer.js b/packages/web-frontend/src/containers/Map/DataVisualsLayer/InteractivePolygonLayer.js index 8431950a81..0d53a775e4 100644 --- a/packages/web-frontend/src/containers/Map/DataVisualsLayer/InteractivePolygonLayer.js +++ b/packages/web-frontend/src/containers/Map/DataVisualsLayer/InteractivePolygonLayer.js @@ -9,7 +9,7 @@ import { connect } from 'react-redux'; import { omitBy } from 'lodash'; import PropTypes from 'prop-types'; -import { InteractivePolygon } from '@tupaia/ui-components'; +import { InteractivePolygon } from '@tupaia/ui-map-components'; import { organisationUnitIsArea } from '../../../utils'; import { diff --git a/packages/web-frontend/src/containers/Map/DataVisualsLayer/MarkerLayer.js b/packages/web-frontend/src/containers/Map/DataVisualsLayer/MarkerLayer.js index 6d0a41ab2a..80aa26e10c 100644 --- a/packages/web-frontend/src/containers/Map/DataVisualsLayer/MarkerLayer.js +++ b/packages/web-frontend/src/containers/Map/DataVisualsLayer/MarkerLayer.js @@ -5,7 +5,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { MarkerLayer as UIMarkerLayer } from '@tupaia/ui-components'; +import { MarkerLayer as UIMarkerLayer } from '@tupaia/ui-map-components'; import { connect } from 'react-redux'; import { selectMeasureOptions } from '../../../selectors'; diff --git a/packages/web-frontend/src/containers/Map/DemoLand/DemoLand.js b/packages/web-frontend/src/containers/Map/DemoLand/DemoLand.js index dee2b855d4..d969f9578d 100644 --- a/packages/web-frontend/src/containers/Map/DemoLand/DemoLand.js +++ b/packages/web-frontend/src/containers/Map/DemoLand/DemoLand.js @@ -4,7 +4,7 @@ */ import React from 'react'; -import { LayerGroup, GeoJSON } from '@tupaia/ui-components'; +import { LayerGroup, GeoJSON } from '@tupaia/ui-map-components'; import land from './demoLandLand.json'; import rivers from './demoLandRivers.json'; import roads from './demoLandRoads.json'; diff --git a/packages/web-frontend/src/containers/Map/DisasterLayer.js b/packages/web-frontend/src/containers/Map/DisasterLayer.js index 503897d32a..3e68bd2a8f 100644 --- a/packages/web-frontend/src/containers/Map/DisasterLayer.js +++ b/packages/web-frontend/src/containers/Map/DisasterLayer.js @@ -6,7 +6,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { LayerGroup, IconMarker, DEFAULT_DISASTER_COLOR } from '@tupaia/ui-components'; +import { LayerGroup, IconMarker, DEFAULT_DISASTER_COLOR } from '@tupaia/ui-map-components'; import { selectDisaster } from '../../disaster/actions'; import { selectCurrentProjectCode } from '../../selectors'; diff --git a/packages/web-frontend/src/containers/Map/Map.js b/packages/web-frontend/src/containers/Map/Map.js index d94eedd942..c4fe85968e 100644 --- a/packages/web-frontend/src/containers/Map/Map.js +++ b/packages/web-frontend/src/containers/Map/Map.js @@ -6,7 +6,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import styled from 'styled-components'; -import { TileLayer, LeafletMap, ZoomControl } from '@tupaia/ui-components'; +import { TileLayer, LeafletMap, ZoomControl } from '@tupaia/ui-map-components'; import { checkBoundsDifference } from '../../utils'; import { DemoLand } from './DemoLand'; diff --git a/packages/web-frontend/src/containers/MapTableModal/MapTableModal.js b/packages/web-frontend/src/containers/MapTableModal/MapTableModal.js index 2c1da96eeb..ca0591ba16 100644 --- a/packages/web-frontend/src/containers/MapTableModal/MapTableModal.js +++ b/packages/web-frontend/src/containers/MapTableModal/MapTableModal.js @@ -8,13 +8,8 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import AssignmentIcon from '@material-ui/icons/Assignment'; import DownloadIcon from '@material-ui/icons/GetApp'; -import { - Dialog, - DialogHeader, - DialogContent, - MapTable, - useMapDataExport, -} from '@tupaia/ui-components'; +import { Dialog, DialogHeader, DialogContent } from '@tupaia/ui-components'; +import { MapTable, useMapDataExport } from '@tupaia/ui-map-components'; import MuiIconButton from '@material-ui/core/IconButton'; import { diff --git a/packages/web-frontend/src/containers/mobile/MapOverlayLegend.js b/packages/web-frontend/src/containers/mobile/MapOverlayLegend.js index 3065260853..34e6c4ef98 100644 --- a/packages/web-frontend/src/containers/mobile/MapOverlayLegend.js +++ b/packages/web-frontend/src/containers/mobile/MapOverlayLegend.js @@ -11,7 +11,7 @@ import Button from '@material-ui/core/Button'; import IconButton from '@material-ui/core/IconButton'; import ExpandLessIcon from '@material-ui/icons/ExpandLess'; import CloseIcon from '@material-ui/icons/Close'; -import { Legend } from '@tupaia/ui-components'; +import { Legend } from '@tupaia/ui-map-components'; import { selectCurrentMapOverlayCodes } from '../../selectors'; import { LEAFLET_Z_INDEX, MOBILE_BACKGROUND_COLOR } from '../../styles'; diff --git a/packages/web-frontend/src/selectors/measureSelectors.js b/packages/web-frontend/src/selectors/measureSelectors.js index ada9b668cf..5c532bf6c0 100644 --- a/packages/web-frontend/src/selectors/measureSelectors.js +++ b/packages/web-frontend/src/selectors/measureSelectors.js @@ -7,7 +7,7 @@ import createCachedSelector from 're-reselect'; import { createSelector } from 'reselect'; -import { getMeasureDisplayInfo } from '@tupaia/ui-components'; +import { getMeasureDisplayInfo } from '@tupaia/ui-map-components'; import { POLYGON_MEASURE_TYPES } from '../utils/measures'; import { selectActiveProjectCountries, diff --git a/packages/web-frontend/src/utils/measures.js b/packages/web-frontend/src/utils/measures.js index 87eca58548..7416260790 100644 --- a/packages/web-frontend/src/utils/measures.js +++ b/packages/web-frontend/src/utils/measures.js @@ -11,7 +11,7 @@ import { BREWER_AUTO, UNKNOWN_COLOR, UNKNOWN_ICON, -} from '@tupaia/ui-components'; +} from '@tupaia/ui-map-components'; import { VALUE_TYPES } from '../components/View/constants'; import { MAP_COLORS } from '../styles'; import { MARKER_TYPES, SCALE_TYPES } from '../constants'; diff --git a/scripts/bash/getInternalDependencies.sh b/scripts/bash/getInternalDependencies.sh index 4830b16bc1..ba8a2b7c1a 100755 --- a/scripts/bash/getInternalDependencies.sh +++ b/scripts/bash/getInternalDependencies.sh @@ -12,7 +12,7 @@ dependencies_already_visited=($@) # if no package.json entrypoint is specified, just return all internal dependencies if [ -z ${package_path} ]; then - echo "types ui-components" "ui-chart-components" "utils" "tsutils" "access-policy" "admin-panel" "aggregator" "api-client" "auth" "database" "data-api" "dhis-api" "data-lake-api" "expression-parser" "indicators" "weather-api" "kobo-api" "superset-api" "data-broker" "server-boilerplate" + echo "types ui-components" "ui-chart-components" "ui-map-components" "utils" "tsutils" "access-policy" "admin-panel" "aggregator" "api-client" "auth" "database" "data-api" "dhis-api" "data-lake-api" "expression-parser" "indicators" "weather-api" "kobo-api" "superset-api" "data-broker" "server-boilerplate" exit 0 fi diff --git a/tupaia-packages.code-workspace b/tupaia-packages.code-workspace index 0395306e9e..acc99810c4 100644 --- a/tupaia-packages.code-workspace +++ b/tupaia-packages.code-workspace @@ -116,6 +116,10 @@ "name": "ui-chart-components", "path": "packages/ui-chart-components" }, + { + "name": "ui-map-components", + "path": "packages/ui-map-components" + }, { "name": "ui-components", "path": "packages/ui-components" diff --git a/yarn.lock b/yarn.lock index 5c569964b3..dcfe20bce5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5473,6 +5473,7 @@ __metadata: "@tupaia/admin-panel": 1.0.0 "@tupaia/ui-chart-components": 1.0.0 "@tupaia/ui-components": 1.0.0 + "@tupaia/ui-map-components": 1.0.0 "@tupaia/utils": 1.0.0 axios: ^0.21.1 camelcase: ^6.2.0 @@ -5814,6 +5815,27 @@ __metadata: languageName: unknown linkType: soft +"@tupaia/ui-map-components@1.0, @tupaia/ui-map-components@1.0.0, @tupaia/ui-map-components@workspace:packages/ui-map-components": + version: 0.0.0-use.local + resolution: "@tupaia/ui-map-components@workspace:packages/ui-map-components" + dependencies: + "@material-ui/core": ^4.9.8 + "@material-ui/icons": ^4.9.1 + "@material-ui/styles": ^4.9.10 + "@storybook/react": ^6.3.9 + "@tupaia/ui-components": 1.0.0 + "@tupaia/utils": 1.0.0 + leaflet: ^1.7.1 + moment: ^2.29.1 + prop-types: ^15.7.2 + react: ^16.13.1 + react-dom: ^16.13.1 + react-leaflet: ^3.2.1 + react-table: ^7.7.0 + styled-components: ^5.0.1 + languageName: unknown + linkType: soft + "@tupaia/utils@1.0.0, @tupaia/utils@workspace:packages/utils": version: 0.0.0-use.local resolution: "@tupaia/utils@workspace:packages/utils" @@ -5915,6 +5937,7 @@ __metadata: "@testing-library/user-event": ^12.0.11 "@tupaia/ui-chart-components": 1.0 "@tupaia/ui-components": 1.0 + "@tupaia/ui-map-components": 1.0 "@tupaia/utils": 1.0.0 case: ^1.6.3 chalk: 1.1.3 From 28347c6e60b65e96098bf90a9455586631f15f9f Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Mon, 15 May 2023 11:18:50 +1200 Subject: [PATCH 003/251] Waitp 1257 UI components ts setup (#4563) * WAITP-1257 configure ts in ui-components * WAITP-1257 update scripts that watch ui-components * WAITP-1257 revert change with build-dev script --------- Co-authored-by: Tom Caiger --- packages/admin-panel/package.json | 4 +- packages/lesmis/package.json | 4 +- packages/psss/package.json | 2 +- packages/ui-chart-components/package.json | 7 +- packages/ui-components/.storybook/main.js | 2 +- packages/ui-components/package.json | 13 ++-- .../ui-components/src/components/index.js | 2 +- packages/ui-components/tsconfig-build.json | 7 ++ packages/ui-components/tsconfig.json | 17 +++++ yarn.lock | 64 ++++++++++++++++++- 10 files changed, 105 insertions(+), 17 deletions(-) create mode 100644 packages/ui-components/tsconfig-build.json create mode 100644 packages/ui-components/tsconfig.json diff --git a/packages/admin-panel/package.json b/packages/admin-panel/package.json index c15bb852c3..861948db92 100644 --- a/packages/admin-panel/package.json +++ b/packages/admin-panel/package.json @@ -28,8 +28,8 @@ "start-report-server": "yarn workspace @tupaia/report-server start-dev", "start-admin-panel-server": "yarn workspace @tupaia/admin-panel-server start-dev", "test": "echo No tests", - "start-ui-components": "yarn workspace @tupaia/ui-components build-dev:watch", - "start-ui-chart-components": "yarn workspace @tupaia/ui-chart-components build-dev:watch", + "start-ui-components": "yarn workspace @tupaia/ui-components build -w", + "start-ui-chart-components": "yarn workspace @tupaia/ui-chart-components build -w", "start-frontend": "npm-run-all -c -l -p start-ui-components start-dev", "start-servers": "npm-run-all -c -l -p start-central-server start-entity-server start-report-server start-admin-panel-server" }, diff --git a/packages/lesmis/package.json b/packages/lesmis/package.json index f9226d2500..21607161a1 100755 --- a/packages/lesmis/package.json +++ b/packages/lesmis/package.json @@ -23,8 +23,8 @@ "start-web-config-server": "yarn workspace @tupaia/web-config-server start-dev", "start-lesmis-server": "yarn workspace @tupaia/lesmis-server start-dev", "test": "yarn package:test", - "start-ui-components": "yarn workspace @tupaia/ui-components build-dev:watch", - "start-ui-chart-components": "yarn workspace @tupaia/ui-chart-components build-dev:watch", + "start-ui-components": "yarn workspace @tupaia/ui-components build -w", + "start-ui-chart-components": "yarn workspace @tupaia/ui-chart-components build -w", "start-frontend": "npm-run-all -c -l -p start-ui-components start-ui-chart-components start-dev", "start-servers": "npm-run-all -c -l -p start-central-server start-entity-server start-report-server start-web-config-server start-lesmis-server" }, diff --git a/packages/psss/package.json b/packages/psss/package.json index 427499df8d..b902fe8603 100644 --- a/packages/psss/package.json +++ b/packages/psss/package.json @@ -28,7 +28,7 @@ "test:cypress:open": "start-server-and-test start-fullstack 3000 cypress:open", "test:cypress:run": "start-server-and-test start-fullstack 3000 cypress:run", "test:jest": "yarn package:test --env=jsdom", - "start-ui-components": "yarn workspace @tupaia/ui-components build-dev:watch", + "start-ui-components": "yarn workspace @tupaia/ui-components build -w", "start-frontend": "npm-run-all -c -l -p start-ui-components start-dev", "start-servers": "npm-run-all -c -l -p start-psss-server start-entity-server start-central-server start-report-server" }, diff --git a/packages/ui-chart-components/package.json b/packages/ui-chart-components/package.json index 4328481c90..d1f7fca0d0 100644 --- a/packages/ui-chart-components/package.json +++ b/packages/ui-chart-components/package.json @@ -12,15 +12,14 @@ "source": "src/index.js", "main": "dist/index.js", "scripts": { - "build": "rm -rf dist && npm run --prefix ../../ package:build:js", - "build-dev": "npm run build", + "build": "rm -rf dist && yarn package:build:js", + "build-dev": "npm run build", "lint": "yarn package:lint:js", "lint:fix": "yarn lint --fix", "storybook": "start-storybook -s public -p 6006", "test": "yarn package:test --env=jsdom", "test:coverage": "yarn test --coverage", - "test:watch": "yarn test --watch", - "build-dev:watch": "yarn run package:build:js -w" + "test:watch": "yarn test --watch" }, "dependencies": { "@material-ui/core": "^4.9.8", diff --git a/packages/ui-components/.storybook/main.js b/packages/ui-components/.storybook/main.js index e731ebcce9..e723272433 100644 --- a/packages/ui-components/.storybook/main.js +++ b/packages/ui-components/.storybook/main.js @@ -1,5 +1,5 @@ // import the build chain webpack config and merge it with storybook config module.exports = { - stories: ['../stories/**/*.stories.js'], + stories: ['../stories/**/*.stories.js', '../stories/**/*.stories.ts'], addons: ['@storybook/addon-essentials'], }; diff --git a/packages/ui-components/package.json b/packages/ui-components/package.json index 13f1923074..f113cfb93c 100644 --- a/packages/ui-components/package.json +++ b/packages/ui-components/package.json @@ -12,15 +12,14 @@ "source": "src/index.js", "main": "dist/index.js", "scripts": { - "build": "rm -rf dist && npm run --prefix ../../ package:build:js", - "build-dev": "npm run build", + "build": "rm -rf dist && yarn package:build:ts", + "build-dev": "npm run build", "lint": "yarn package:lint:js", "lint:fix": "yarn lint --fix", "storybook": "start-storybook -s public -p 6006", "test": "yarn package:test --env=jsdom", "test:coverage": "yarn test --coverage", - "test:watch": "yarn test --watch", - "build-dev:watch": "yarn run package:build:js -w" + "test:watch": "yarn test --watch" }, "dependencies": { "@date-io/date-fns": "1.x", @@ -52,9 +51,13 @@ "devDependencies": { "@material-ui/styles": "^4.9.10", "@storybook/react": "^6.3.9", + "@types/react": "^18.2.6", + "@types/react-dom": "^18.2.4", + "@types/styled-components": "^5.1.26", "faker": "^4.1.0", "fast-glob": "^3.2.5", "react-hook-form": "^6.0.6", - "react-password-strength-bar": "^0.3.3" + "react-password-strength-bar": "^0.3.3", + "typescript": "^5.0.4" } } diff --git a/packages/ui-components/src/components/index.js b/packages/ui-components/src/components/index.js index 1a43ad1348..3e7a5508d4 100644 --- a/packages/ui-components/src/components/index.js +++ b/packages/ui-components/src/components/index.js @@ -43,4 +43,4 @@ export * from './Toolbar'; export * from './Tooltip'; export * from './PDFExportComponent'; export * from './CheckboxList'; -export * from './FavouriteButton'; +export * from './FavouriteButton'; diff --git a/packages/ui-components/tsconfig-build.json b/packages/ui-components/tsconfig-build.json new file mode 100644 index 0000000000..87d4d4f13a --- /dev/null +++ b/packages/ui-components/tsconfig-build.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "noEmit": false, + } +} \ No newline at end of file diff --git a/packages/ui-components/tsconfig.json b/packages/ui-components/tsconfig.json new file mode 100644 index 0000000000..ac2972d6da --- /dev/null +++ b/packages/ui-components/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig-ts.json", + "compileOnSave": true, + "compilerOptions": { + "jsx": "react", + "target": "es5", + "allowJs": true, + "outDir": "dist", + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "src/__tests__", + "src/stories/**/*" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 718fe4d1ec..9a41cca44a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5788,6 +5788,9 @@ __metadata: "@material-ui/styles": ^4.9.10 "@storybook/react": ^6.3.9 "@tupaia/utils": 1.0.0 + "@types/react": ^18.2.6 + "@types/react-dom": ^18.2.4 + "@types/styled-components": ^5.1.26 ace-builds: ^1.4.13 date-fns: ^2.12.0 faker: ^4.1.0 @@ -5810,6 +5813,7 @@ __metadata: react-table: ^7.7.0 recharts: ^1.8.5 styled-components: ^5.0.1 + typescript: ^5.0.4 xlsx: ^0.17.0 languageName: unknown linkType: soft @@ -6280,7 +6284,7 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:^3.3.0": +"@types/hoist-non-react-statics@npm:*, @types/hoist-non-react-statics@npm:^3.3.0": version: 3.3.1 resolution: "@types/hoist-non-react-statics@npm:3.3.1" dependencies: @@ -6731,6 +6735,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.2.4": + version: 18.2.4 + resolution: "@types/react-dom@npm:18.2.4" + dependencies: + "@types/react": "*" + checksum: 8301f35cf1cbfec8c723e9477aecf87774e3c168bd457d353b23c45064737213d3e8008b067c6767b7b08e4f2b3823ee239242a6c225fc91e7f8725ef8734124 + languageName: node + linkType: hard + "@types/react-native@npm:>=0.50.0": version: 0.60.26 resolution: "@types/react-native@npm:0.60.26" @@ -6790,6 +6803,17 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^18.2.6": + version: 18.2.6 + resolution: "@types/react@npm:18.2.6" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: dea9d232d8df7ac357367a69dcb557711ab3d5501807ffa77cebeee73d49ee94d095f298e36853c63ed47cce097eee4c7eae2aaa8c02fac3f0171ec1b523a819 + languageName: node + linkType: hard + "@types/resolve@npm:0.0.8": version: 0.0.8 resolution: "@types/resolve@npm:0.0.8" @@ -6808,6 +6832,13 @@ __metadata: languageName: node linkType: hard +"@types/scheduler@npm:*": + version: 0.16.3 + resolution: "@types/scheduler@npm:0.16.3" + checksum: 2b0aec39c24268e3ce938c5db2f2e77f5c3dd280e05c262d9c2fe7d890929e4632a6b8e94334017b66b45e4f92a5aa42ba3356640c2a1175fa37bef2f5200767 + languageName: node + linkType: hard + "@types/semver-compare@npm:^1.0.1": version: 1.0.1 resolution: "@types/semver-compare@npm:1.0.1" @@ -6860,6 +6891,17 @@ __metadata: languageName: node linkType: hard +"@types/styled-components@npm:^5.1.26": + version: 5.1.26 + resolution: "@types/styled-components@npm:5.1.26" + dependencies: + "@types/hoist-non-react-statics": "*" + "@types/react": "*" + csstype: ^3.0.2 + checksum: 84f53b3101739b20d1731554fb7735bc2f3f5d050a8b392e9845403c8c8bbd729737d033978649f9195a97b557875b010d46e35a4538564a2d0dbcce661dbf76 + languageName: node + linkType: hard + "@types/styled-jsx@npm:^2.2.8": version: 2.2.8 resolution: "@types/styled-jsx@npm:2.2.8" @@ -34769,6 +34811,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.0.4": + version: 5.0.4 + resolution: "typescript@npm:5.0.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + languageName: node + linkType: hard + "typescript@npm:~4.8.2": version: 4.8.4 resolution: "typescript@npm:4.8.4" @@ -34789,6 +34841,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^5.0.4#~builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 6a1fe9a77bb9c5176ead919cc4a1499ee63e46b4e05bf667079f11bf3a8f7887f135aa72460a4c3b016e6e6bb65a822cb8689a6d86cbfe92d22cc9f501f09213 + languageName: node + linkType: hard + "typescript@patch:typescript@~4.8.2#~builtin": version: 4.8.4 resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=7ad353" From b2a855bfc5afa80696c631aceacbedeb4a151e8d Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Mon, 15 May 2023 11:29:08 +1200 Subject: [PATCH 004/251] add ts build --- packages/ui-chart-components/package.json | 2 +- .../ui-chart-components/tsconfig-build.json | 7 +++++++ packages/ui-chart-components/tsconfig.json | 17 +++++++++++++++++ packages/ui-components/tsconfig-build.json | 2 +- packages/ui-components/tsconfig.json | 2 +- 5 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 packages/ui-chart-components/tsconfig-build.json create mode 100644 packages/ui-chart-components/tsconfig.json diff --git a/packages/ui-chart-components/package.json b/packages/ui-chart-components/package.json index d1f7fca0d0..59445b1ed7 100644 --- a/packages/ui-chart-components/package.json +++ b/packages/ui-chart-components/package.json @@ -12,7 +12,7 @@ "source": "src/index.js", "main": "dist/index.js", "scripts": { - "build": "rm -rf dist && yarn package:build:js", + "build": "rm -rf dist && yarn package:build:ts", "build-dev": "npm run build", "lint": "yarn package:lint:js", "lint:fix": "yarn lint --fix", diff --git a/packages/ui-chart-components/tsconfig-build.json b/packages/ui-chart-components/tsconfig-build.json new file mode 100644 index 0000000000..df76f9c4ca --- /dev/null +++ b/packages/ui-chart-components/tsconfig-build.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "noEmit": false, + } +} diff --git a/packages/ui-chart-components/tsconfig.json b/packages/ui-chart-components/tsconfig.json new file mode 100644 index 0000000000..ab59b9f086 --- /dev/null +++ b/packages/ui-chart-components/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig-ts.json", + "compileOnSave": true, + "compilerOptions": { + "jsx": "react", + "target": "es5", + "allowJs": true, + "outDir": "dist", + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "src/__tests__", + "src/stories/**/*" + ] +} diff --git a/packages/ui-components/tsconfig-build.json b/packages/ui-components/tsconfig-build.json index 87d4d4f13a..df76f9c4ca 100644 --- a/packages/ui-components/tsconfig-build.json +++ b/packages/ui-components/tsconfig-build.json @@ -4,4 +4,4 @@ "declaration": true, "noEmit": false, } -} \ No newline at end of file +} diff --git a/packages/ui-components/tsconfig.json b/packages/ui-components/tsconfig.json index ac2972d6da..ab59b9f086 100644 --- a/packages/ui-components/tsconfig.json +++ b/packages/ui-components/tsconfig.json @@ -14,4 +14,4 @@ "src/__tests__", "src/stories/**/*" ] -} \ No newline at end of file +} From ed8f7076a119af1dcecd0ff6452df07a0219131f Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 16 May 2023 09:24:11 +1200 Subject: [PATCH 005/251] vertical tick --- packages/ui-chart-components/package.json | 2 +- .../{VerticalTick.js => VerticalTick.tsx} | 19 ++++++++++--------- packages/ui-components/package.json | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) rename packages/ui-chart-components/src/components/Axes/{VerticalTick.js => VerticalTick.tsx} (66%) diff --git a/packages/ui-chart-components/package.json b/packages/ui-chart-components/package.json index 59445b1ed7..c1cc4b01e4 100644 --- a/packages/ui-chart-components/package.json +++ b/packages/ui-chart-components/package.json @@ -13,7 +13,7 @@ "main": "dist/index.js", "scripts": { "build": "rm -rf dist && yarn package:build:ts", - "build-dev": "npm run build", + "build-dev": "npm run build", "lint": "yarn package:lint:js", "lint:fix": "yarn lint --fix", "storybook": "start-storybook -s public -p 6006", diff --git a/packages/ui-chart-components/src/components/Axes/VerticalTick.js b/packages/ui-chart-components/src/components/Axes/VerticalTick.tsx similarity index 66% rename from packages/ui-chart-components/src/components/Axes/VerticalTick.js rename to packages/ui-chart-components/src/components/Axes/VerticalTick.tsx index cd0f3d06c6..6a65dc3861 100644 --- a/packages/ui-chart-components/src/components/Axes/VerticalTick.js +++ b/packages/ui-chart-components/src/components/Axes/VerticalTick.tsx @@ -4,16 +4,23 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; -const truncate = (str, num, ellipsis = false) => { +const truncate = (str: string, num: number, ellipsis = false): string => { if (str.length <= num) { return str; } return ellipsis ? `${str.slice(0, num)}...` : str.slice(0, num); }; -export const VerticalTick = ({ x, y, payload }) => { +interface VerticalTickProps { + x: number; + y: number; + payload: { + value: string; + }; +} + +export const VerticalTick: React.FC = ({ x, y, payload }) => { return ( { ); }; - -VerticalTick.propTypes = { - x: PropTypes.number.isRequired, - y: PropTypes.number.isRequired, - payload: PropTypes.object.isRequired, -}; diff --git a/packages/ui-components/package.json b/packages/ui-components/package.json index f113cfb93c..125ca8d819 100644 --- a/packages/ui-components/package.json +++ b/packages/ui-components/package.json @@ -13,7 +13,7 @@ "main": "dist/index.js", "scripts": { "build": "rm -rf dist && yarn package:build:ts", - "build-dev": "npm run build", + "build-dev": "npm run build", "lint": "yarn package:lint:js", "lint:fix": "yarn lint --fix", "storybook": "start-storybook -s public -p 6006", From 102dfc08464de2142f3c5b3bbf9bf0cbfb1ccbf5 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 16 May 2023 11:58:52 +1200 Subject: [PATCH 006/251] BarChart --- .../models-extra/dashboard-item/index.ts | 7 + .../types/src/types/models-extra/index.ts | 9 +- packages/types/src/types/models.ts | 842 +++++++++--------- packages/ui-chart-components/package.json | 3 +- .../Charts/{BarChart.js => BarChart.tsx} | 50 +- .../components/Reference/ReferenceLabel.js | 33 - .../components/Reference/ReferenceLabel.tsx | 34 + ...oltipContainer.js => TooltipContainer.tsx} | 0 .../src/utils/{index.js => index.tsx} | 0 packages/ui-chart-components/tsconfig.json | 2 +- packages/ui-components/package.json | 4 +- yarn.lock | 49 +- 12 files changed, 542 insertions(+), 491 deletions(-) rename packages/ui-chart-components/src/components/Charts/{BarChart.js => BarChart.tsx} (76%) delete mode 100644 packages/ui-chart-components/src/components/Reference/ReferenceLabel.js create mode 100644 packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx rename packages/ui-chart-components/src/components/Reference/{TooltipContainer.js => TooltipContainer.tsx} (100%) rename packages/ui-chart-components/src/utils/{index.js => index.tsx} (100%) diff --git a/packages/types/src/types/models-extra/dashboard-item/index.ts b/packages/types/src/types/models-extra/dashboard-item/index.ts index fca31d24db..42732b0275 100644 --- a/packages/types/src/types/models-extra/dashboard-item/index.ts +++ b/packages/types/src/types/models-extra/dashboard-item/index.ts @@ -25,6 +25,13 @@ import type { SingleValueViewConfig, } from './views'; +export type { + BarChartConfig, + ComposedChartConfig, + GaugeChartConfig, + LineChartConfig, + PieChartConfig, +} from './charts'; /** * The master list of viz types. * Please also keep ../../utils/vizTypes up to date when making changes diff --git a/packages/types/src/types/models-extra/index.ts b/packages/types/src/types/models-extra/index.ts index dab3a4e8c1..48b86821a9 100644 --- a/packages/types/src/types/models-extra/index.ts +++ b/packages/types/src/types/models-extra/index.ts @@ -4,4 +4,11 @@ */ export type { ReportConfig, StandardOrCustomReportConfig } from './report'; -export type { DashboardItemConfig } from './dashboard-item'; +export type { + DashboardItemConfig, + BarChartConfig, + ComposedChartConfig, + GaugeChartConfig, + LineChartConfig, + PieChartConfig, +} from './dashboard-item'; diff --git a/packages/types/src/types/models.ts b/packages/types/src/types/models.ts index 37cb28810b..5504bcd0a3 100644 --- a/packages/types/src/types/models.ts +++ b/packages/types/src/types/models.ts @@ -10,553 +10,561 @@ import { ReportConfig } from './models-extra'; import { DashboardItemConfig } from './models-extra'; -export { StandardOrCustomReportConfig } from './models-extra'; +export { + DashboardItemConfig, + StandardOrCustomReportConfig, + BarChartConfig, + ComposedChartConfig, + GaugeChartConfig, + LineChartConfig, + PieChartConfig, +} from './models-extra'; export interface AccessRequest { - 'approved'?: boolean | null; - 'created_time'?: Date; - 'entity_id'?: string | null; - 'id': string; - 'message'?: string | null; - 'note'?: string | null; - 'permission_group_id'?: string | null; - 'processed_by'?: string | null; - 'processed_date'?: Date | null; - 'project_id'?: string | null; - 'user_id'?: string | null; + approved?: boolean | null; + created_time?: Date; + entity_id?: string | null; + id: string; + message?: string | null; + note?: string | null; + permission_group_id?: string | null; + processed_by?: string | null; + processed_date?: Date | null; + project_id?: string | null; + user_id?: string | null; } export interface AdminPanelSession { - 'access_policy': any; - 'access_token': string; - 'access_token_expiry': string; - 'email': string; - 'id': string; - 'refresh_token': string; + access_policy: any; + access_token: string; + access_token_expiry: string; + email: string; + id: string; + refresh_token: string; } export interface Analytics { - 'answer_entity_m_row$'?: string | null; - 'answer_m_row$'?: string | null; - 'data_element_code'?: string | null; - 'data_element_m_row$'?: string | null; - 'data_group_code'?: string | null; - 'date'?: Date | null; - 'day_period'?: string | null; - 'entity_code'?: string | null; - 'entity_m_row$'?: string | null; - 'entity_name'?: string | null; - 'event_id'?: string | null; - 'month_period'?: string | null; - 'question_m_row$'?: string | null; - 'survey_m_row$'?: string | null; - 'survey_response_m_row$'?: string | null; - 'type'?: string | null; - 'value'?: string | null; - 'week_period'?: string | null; - 'year_period'?: string | null; + answer_entity_m_row$?: string | null; + answer_m_row$?: string | null; + data_element_code?: string | null; + data_element_m_row$?: string | null; + data_group_code?: string | null; + date?: Date | null; + day_period?: string | null; + entity_code?: string | null; + entity_m_row$?: string | null; + entity_name?: string | null; + event_id?: string | null; + month_period?: string | null; + question_m_row$?: string | null; + survey_m_row$?: string | null; + survey_response_m_row$?: string | null; + type?: string | null; + value?: string | null; + week_period?: string | null; + year_period?: string | null; } export interface AncestorDescendantRelation { - 'ancestor_id': string; - 'descendant_id': string; - 'entity_hierarchy_id': string; - 'generational_distance': number; - 'id': string; + ancestor_id: string; + descendant_id: string; + entity_hierarchy_id: string; + generational_distance: number; + id: string; } export interface Answer { - 'id': string; - 'm_row$'?: string; - 'question_id': string; - 'survey_response_id': string; - 'text'?: string | null; - 'type': string; + id: string; + m_row$?: string; + question_id: string; + survey_response_id: string; + text?: string | null; + type: string; } export interface ApiClient { - 'id': string; - 'secret_key_hash': string; - 'user_account_id'?: string | null; - 'username': string; + id: string; + secret_key_hash: string; + user_account_id?: string | null; + username: string; } export interface ApiRequestLog { - 'api': string; - 'endpoint': string; - 'id': string; - 'metadata'?: any | null; - 'method'?: string | null; - 'query'?: any | null; - 'refresh_token'?: string | null; - 'request_time'?: Date | null; - 'user_id'?: string | null; - 'version': number; + api: string; + endpoint: string; + id: string; + metadata?: any | null; + method?: string | null; + query?: any | null; + refresh_token?: string | null; + request_time?: Date | null; + user_id?: string | null; + version: number; } export interface Clinic { - 'category_code'?: string | null; - 'code': string; - 'country_id': string; - 'geographical_area_id': string; - 'id': string; - 'name': string; - 'type'?: string | null; - 'type_name'?: string | null; + category_code?: string | null; + code: string; + country_id: string; + geographical_area_id: string; + id: string; + name: string; + type?: string | null; + type_name?: string | null; } export interface Comment { - 'created_time'?: Date; - 'id': string; - 'last_modified_time'?: Date; - 'text': string; - 'user_id'?: string | null; + created_time?: Date; + id: string; + last_modified_time?: Date; + text: string; + user_id?: string | null; } export interface Country { - 'code': string; - 'id': string; - 'name': string; + code: string; + id: string; + name: string; } export interface Dashboard { - 'code': string; - 'id': string; - 'name': string; - 'root_entity_code': string; - 'sort_order'?: number | null; + code: string; + id: string; + name: string; + root_entity_code: string; + sort_order?: number | null; } export interface DashboardItem { - 'code': string; - 'config'?: DashboardItemConfig; - 'id': string; - 'legacy'?: boolean; - 'permission_group_ids'?: string[] | null; - 'report_code'?: string | null; + code: string; + config?: DashboardItemConfig; + id: string; + legacy?: boolean; + permission_group_ids?: string[] | null; + report_code?: string | null; } export interface DashboardRelation { - 'child_id': string; - 'dashboard_id': string; - 'entity_types': any; - 'id': string; - 'permission_groups': string[]; - 'project_codes': string[]; - 'sort_order'?: number | null; + child_id: string; + dashboard_id: string; + entity_types: any; + id: string; + permission_groups: string[]; + project_codes: string[]; + sort_order?: number | null; } export interface DataElement { - 'code': string; - 'config'?: any; - 'id': string; - 'm_row$'?: string; - 'permission_groups'?: string[]; - 'service_type': ServiceType; + code: string; + config?: any; + id: string; + m_row$?: string; + permission_groups?: string[]; + service_type: ServiceType; } export interface DataElementDataGroup { - 'data_element_id': string; - 'data_group_id': string; - 'id': string; + data_element_id: string; + data_group_id: string; + id: string; } export interface DataElementDataService { - 'country_code': string; - 'data_element_code': string; - 'id': string; - 'service_config'?: any; - 'service_type': ServiceType; + country_code: string; + data_element_code: string; + id: string; + service_config?: any; + service_type: ServiceType; } export interface DataGroup { - 'code': string; - 'config'?: any; - 'id': string; - 'service_type': ServiceType; + code: string; + config?: any; + id: string; + service_type: ServiceType; } export interface DataServiceEntity { - 'config': any; - 'entity_code': string; - 'id': string; + config: any; + entity_code: string; + id: string; } export interface DataServiceSyncGroup { - 'code': string; - 'config': any; - 'data_group_code': string; - 'id': string; - 'service_type': ServiceType; - 'sync_cursor'?: string | null; - 'sync_status'?: SyncGroupSyncStatus | null; + code: string; + config: any; + data_group_code: string; + id: string; + service_type: ServiceType; + sync_cursor?: string | null; + sync_status?: SyncGroupSyncStatus | null; } export interface DataTable { - 'code': string; - 'config'?: any; - 'description'?: string | null; - 'id': string; - 'permission_groups': string[]; - 'type': DataTableType; + code: string; + config?: any; + description?: string | null; + id: string; + permission_groups: string[]; + type: DataTableType; } export interface DhisInstance { - 'code': string; - 'config': any; - 'id': string; - 'readonly': boolean; + code: string; + config: any; + id: string; + readonly: boolean; } export interface DhisSyncLog { - 'data'?: string | null; - 'deleted'?: number | null; - 'dhis_reference'?: string | null; - 'error_list'?: string | null; - 'id': string; - 'ignored'?: number | null; - 'imported'?: number | null; - 'record_id': string; - 'record_type': string; - 'updated'?: number | null; + data?: string | null; + deleted?: number | null; + dhis_reference?: string | null; + error_list?: string | null; + id: string; + ignored?: number | null; + imported?: number | null; + record_id: string; + record_type: string; + updated?: number | null; } export interface DhisSyncQueue { - 'bad_request_count'?: number | null; - 'change_time'?: number | null; - 'details'?: string | null; - 'id': string; - 'is_dead_letter'?: boolean | null; - 'is_deleted'?: boolean | null; - 'priority'?: number | null; - 'record_id': string; - 'record_type': string; - 'type': string; + bad_request_count?: number | null; + change_time?: number | null; + details?: string | null; + id: string; + is_dead_letter?: boolean | null; + is_deleted?: boolean | null; + priority?: number | null; + record_id: string; + record_type: string; + type: string; } export interface Disaster { - 'countryCode': string; - 'description'?: string | null; - 'id': string; - 'name': string; - 'type': DisasterType; + countryCode: string; + description?: string | null; + id: string; + name: string; + type: DisasterType; } export interface DisasterEvent { - 'date': Date; - 'disasterId': string; - 'id': string; - 'organisationUnitCode': string; - 'type': DisasterEventType; + date: Date; + disasterId: string; + id: string; + organisationUnitCode: string; + type: DisasterEventType; } export interface Entity { - 'attributes'?: any | null; - 'bounds'?: any | null; - 'code': string; - 'country_code'?: string | null; - 'id': string; - 'image_url'?: string | null; - 'm_row$'?: string; - 'metadata'?: any | null; - 'name': string; - 'parent_id'?: string | null; - 'point'?: any | null; - 'region'?: any | null; - 'type'?: EntityType | null; + attributes?: any | null; + bounds?: any | null; + code: string; + country_code?: string | null; + id: string; + image_url?: string | null; + m_row$?: string; + metadata?: any | null; + name: string; + parent_id?: string | null; + point?: any | null; + region?: any | null; + type?: EntityType | null; } export interface EntityHierarchy { - 'canonical_types'?: string[] | null; - 'id': string; - 'name': string; + canonical_types?: string[] | null; + id: string; + name: string; } export interface EntityRelation { - 'child_id': string; - 'entity_hierarchy_id': string; - 'id': string; - 'parent_id': string; + child_id: string; + entity_hierarchy_id: string; + id: string; + parent_id: string; } export interface ErrorLog { - 'api_request_log_id'?: string | null; - 'error_time'?: Date | null; - 'id': string; - 'message'?: string | null; - 'type'?: string | null; + api_request_log_id?: string | null; + error_time?: Date | null; + id: string; + message?: string | null; + type?: string | null; } export interface ExternalDatabaseConnection { - 'code': string; - 'description'?: string | null; - 'id': string; - 'name': string; - 'permission_groups'?: string[]; + code: string; + description?: string | null; + id: string; + name: string; + permission_groups?: string[]; } export interface FeedItem { - 'country_id'?: string | null; - 'creation_date'?: Date | null; - 'geographical_area_id'?: string | null; - 'id': string; - 'permission_group_id'?: string | null; - 'record_id'?: string | null; - 'template_variables'?: Object | null; - 'type'?: string | null; - 'user_id'?: string | null; + country_id?: string | null; + creation_date?: Date | null; + geographical_area_id?: string | null; + id: string; + permission_group_id?: string | null; + record_id?: string | null; + template_variables?: Object | null; + type?: string | null; + user_id?: string | null; } export interface GeographicalArea { - 'code'?: string | null; - 'country_id': string; - 'id': string; - 'level_code': string; - 'level_name': string; - 'name': string; - 'parent_id'?: string | null; + code?: string | null; + country_id: string; + id: string; + level_code: string; + level_name: string; + name: string; + parent_id?: string | null; } export interface Indicator { - 'builder': string; - 'code': string; - 'config'?: any; - 'id': string; + builder: string; + code: string; + config?: any; + id: string; } export interface LegacyReport { - 'code': string; - 'data_builder'?: string | null; - 'data_builder_config'?: any | null; - 'data_services'?: any | null; - 'id': string; + code: string; + data_builder?: string | null; + data_builder_config?: any | null; + data_services?: any | null; + id: string; } export interface LesmisSession { - 'access_policy': any; - 'access_token': string; - 'access_token_expiry': string; - 'email': string; - 'id': string; - 'refresh_token': string; + access_policy: any; + access_token: string; + access_token_expiry: string; + email: string; + id: string; + refresh_token: string; } export interface MapOverlay { - 'code': string; - 'config'?: any; - 'country_codes'?: string[] | null; - 'data_services'?: any | null; - 'id'?: string; - 'legacy'?: boolean; - 'linked_measures'?: string[] | null; - 'name': string; - 'permission_group': string; - 'project_codes'?: string[] | null; - 'report_code'?: string | null; + code: string; + config?: any; + country_codes?: string[] | null; + data_services?: any | null; + id?: string; + legacy?: boolean; + linked_measures?: string[] | null; + name: string; + permission_group: string; + project_codes?: string[] | null; + report_code?: string | null; } export interface MapOverlayGroup { - 'code': string; - 'id': string; - 'name': string; + code: string; + id: string; + name: string; } export interface MapOverlayGroupRelation { - 'child_id': string; - 'child_type': string; - 'id': string; - 'map_overlay_group_id': string; - 'sort_order'?: number | null; + child_id: string; + child_type: string; + id: string; + map_overlay_group_id: string; + sort_order?: number | null; } export interface MeditrakDevice { - 'app_version'?: string | null; - 'config'?: any | null; - 'id': string; - 'install_id': string; - 'platform'?: string | null; - 'user_id': string; + app_version?: string | null; + config?: any | null; + id: string; + install_id: string; + platform?: string | null; + user_id: string; } export interface MeditrakSyncQueue { - 'change_time'?: number | null; - 'id': string; - 'record_id': string; - 'record_type': string; - 'type': string; + change_time?: number | null; + id: string; + record_id: string; + record_type: string; + type: string; } export interface Ms1SyncLog { - 'count'?: number | null; - 'data'?: string | null; - 'endpoint'?: string | null; - 'error_list'?: string | null; - 'id': string; - 'record_id': string; - 'record_type': string; + count?: number | null; + data?: string | null; + endpoint?: string | null; + error_list?: string | null; + id: string; + record_id: string; + record_type: string; } export interface Ms1SyncQueue { - 'bad_request_count'?: number | null; - 'change_time'?: number | null; - 'details'?: string | null; - 'id': string; - 'is_dead_letter'?: boolean | null; - 'is_deleted'?: boolean | null; - 'priority'?: number | null; - 'record_id': string; - 'record_type': string; - 'type': string; + bad_request_count?: number | null; + change_time?: number | null; + details?: string | null; + id: string; + is_dead_letter?: boolean | null; + is_deleted?: boolean | null; + priority?: number | null; + record_id: string; + record_type: string; + type: string; } export interface OneTimeLogin { - 'creation_date'?: Date | null; - 'id': string; - 'token': string; - 'use_date'?: Date | null; - 'user_id': string; + creation_date?: Date | null; + id: string; + token: string; + use_date?: Date | null; + user_id: string; } export interface Option { - 'attributes'?: any | null; - 'id': string; - 'label'?: string | null; - 'option_set_id': string; - 'sort_order'?: number | null; - 'value': string; + attributes?: any | null; + id: string; + label?: string | null; + option_set_id: string; + sort_order?: number | null; + value: string; } export interface OptionSet { - 'id': string; - 'name': string; + id: string; + name: string; } export interface PermissionGroup { - 'id': string; - 'name': string; - 'parent_id'?: string | null; + id: string; + name: string; + parent_id?: string | null; } export interface PermissionsBasedMeditrakSyncQueue { - 'change_time'?: number | null; - 'country_ids'?: string[] | null; - 'entity_type'?: EntityType | null; - 'id'?: string | null; - 'permission_groups'?: string[] | null; - 'record_id'?: string | null; - 'record_type'?: string | null; - 'type'?: string | null; + change_time?: number | null; + country_ids?: string[] | null; + entity_type?: EntityType | null; + id?: string | null; + permission_groups?: string[] | null; + record_id?: string | null; + record_type?: string | null; + type?: string | null; } export interface Project { - 'code': string; - 'config'?: any | null; - 'dashboard_group_name'?: string | null; - 'default_measure'?: string | null; - 'description'?: string | null; - 'entity_hierarchy_id'?: string | null; - 'entity_id'?: string | null; - 'id': string; - 'image_url'?: string | null; - 'logo_url'?: string | null; - 'permission_groups'?: string[] | null; - 'sort_order'?: number | null; + code: string; + config?: any | null; + dashboard_group_name?: string | null; + default_measure?: string | null; + description?: string | null; + entity_hierarchy_id?: string | null; + entity_id?: string | null; + id: string; + image_url?: string | null; + logo_url?: string | null; + permission_groups?: string[] | null; + sort_order?: number | null; } export interface PsssSession { - 'access_policy': any; - 'access_token': string; - 'access_token_expiry': string; - 'email': string; - 'id': string; - 'refresh_token': string; + access_policy: any; + access_token: string; + access_token_expiry: string; + email: string; + id: string; + refresh_token: string; } export interface Question { - 'code'?: string | null; - 'data_element_id'?: string | null; - 'detail'?: string | null; - 'hook'?: string | null; - 'id': string; - 'm_row$'?: string; - 'name'?: string | null; - 'option_set_id'?: string | null; - 'options'?: string[] | null; - 'text': string; - 'type': string; + code?: string | null; + data_element_id?: string | null; + detail?: string | null; + hook?: string | null; + id: string; + m_row$?: string; + name?: string | null; + option_set_id?: string | null; + options?: string[] | null; + text: string; + type: string; } export interface RefreshToken { - 'device'?: string | null; - 'expiry'?: number | null; - 'id': string; - 'meditrak_device_id'?: string | null; - 'token': string; - 'user_id': string; + device?: string | null; + expiry?: number | null; + id: string; + meditrak_device_id?: string | null; + token: string; + user_id: string; } export interface Report { - 'code': string; - 'config': ReportConfig; - 'id': string; - 'permission_group_id': string; + code: string; + config: ReportConfig; + id: string; + permission_group_id: string; } export interface Setting { - 'id': string; - 'key': string; - 'value'?: string | null; + id: string; + key: string; + value?: string | null; } export interface SupersetInstance { - 'code': string; - 'config': any; - 'id': string; + code: string; + config: any; + id: string; } export interface Survey { - 'can_repeat'?: boolean | null; - 'code': string; - 'country_ids'?: string[] | null; - 'data_group_id'?: string | null; - 'id': string; - 'integration_metadata'?: any | null; - 'm_row$'?: string; - 'name': string; - 'period_granularity'?: PeriodGranularity | null; - 'permission_group_id'?: string | null; - 'requires_approval'?: boolean | null; - 'survey_group_id'?: string | null; + can_repeat?: boolean | null; + code: string; + country_ids?: string[] | null; + data_group_id?: string | null; + id: string; + integration_metadata?: any | null; + m_row$?: string; + name: string; + period_granularity?: PeriodGranularity | null; + permission_group_id?: string | null; + requires_approval?: boolean | null; + survey_group_id?: string | null; } export interface SurveyGroup { - 'id': string; - 'name': string; + id: string; + name: string; } export interface SurveyResponse { - 'approval_status'?: ApprovalStatus | null; - 'assessor_name': string; - 'data_time'?: Date | null; - 'end_time': Date; - 'entity_id': string; - 'id': string; - 'm_row$'?: string; - 'metadata'?: string | null; - 'outdated'?: boolean | null; - 'start_time': Date; - 'survey_id': string; - 'timezone'?: string | null; - 'user_id': string; + approval_status?: ApprovalStatus | null; + assessor_name: string; + data_time?: Date | null; + end_time: Date; + entity_id: string; + id: string; + m_row$?: string; + metadata?: string | null; + outdated?: boolean | null; + start_time: Date; + survey_id: string; + timezone?: string | null; + user_id: string; } export interface SurveyResponseComment { - 'comment_id': string; - 'id': string; - 'survey_response_id': string; + comment_id: string; + id: string; + survey_response_id: string; } export interface SurveyScreen { - 'id': string; - 'screen_number': number; - 'survey_id': string; + id: string; + screen_number: number; + survey_id: string; } export interface SurveyScreenComponent { - 'answers_enabling_follow_up'?: string[] | null; - 'component_number': number; - 'config'?: string | null; - 'detail_label'?: string | null; - 'id': string; - 'is_follow_up'?: boolean | null; - 'question_id': string; - 'question_label'?: string | null; - 'screen_id': string; - 'validation_criteria'?: string | null; - 'visibility_criteria'?: string | null; + answers_enabling_follow_up?: string[] | null; + component_number: number; + config?: string | null; + detail_label?: string | null; + id: string; + is_follow_up?: boolean | null; + question_id: string; + question_label?: string | null; + screen_id: string; + validation_criteria?: string | null; + visibility_criteria?: string | null; } export interface SyncGroupLog { - 'id': string; - 'log_message': string; - 'service_type': ServiceType; - 'sync_group_code': string; - 'timestamp'?: Date | null; + id: string; + log_message: string; + service_type: ServiceType; + sync_group_code: string; + timestamp?: Date | null; } export interface UserAccount { - 'creation_date'?: Date | null; - 'email': string; - 'employer'?: string | null; - 'first_name'?: string | null; - 'gender'?: string | null; - 'id': string; - 'last_name'?: string | null; - 'mobile_number'?: string | null; - 'password_hash': string; - 'password_salt': string; - 'position'?: string | null; - 'primary_platform'?: PrimaryPlatform | null; - 'profile_image'?: string | null; - 'verified_email'?: VerifiedEmail | null; + creation_date?: Date | null; + email: string; + employer?: string | null; + first_name?: string | null; + gender?: string | null; + id: string; + last_name?: string | null; + mobile_number?: string | null; + password_hash: string; + password_salt: string; + position?: string | null; + primary_platform?: PrimaryPlatform | null; + profile_image?: string | null; + verified_email?: VerifiedEmail | null; } export interface UserEntityPermission { - 'entity_id'?: string | null; - 'id': string; - 'permission_group_id'?: string | null; - 'user_id'?: string | null; + entity_id?: string | null; + id: string; + permission_group_id?: string | null; + user_id?: string | null; } export interface UserFavouriteDashboardItem { - 'dashboard_item_id': string; - 'id': string; - 'user_id': string; + dashboard_item_id: string; + id: string; + user_id: string; } export interface UserSession { - 'access_token_expiry'?: string; - 'accessPolicy'?: any | null; - 'accessToken'?: string | null; - 'id': string; - 'refreshToken': string; - 'userName': string; + access_token_expiry?: string; + accessPolicy?: any | null; + accessToken?: string | null; + id: string; + refreshToken: string; + userName: string; } export enum VerifiedEmail { 'unverified' = 'unverified', diff --git a/packages/ui-chart-components/package.json b/packages/ui-chart-components/package.json index c1cc4b01e4..e21e7cd69d 100644 --- a/packages/ui-chart-components/package.json +++ b/packages/ui-chart-components/package.json @@ -36,6 +36,7 @@ }, "devDependencies": { "@material-ui/styles": "^4.9.10", - "@storybook/react": "^6.3.9" + "@storybook/react": "^6.3.9", + "@types/recharts": "^1.8.24" } } diff --git a/packages/ui-chart-components/src/components/Charts/BarChart.js b/packages/ui-chart-components/src/components/Charts/BarChart.tsx similarity index 76% rename from packages/ui-chart-components/src/components/Charts/BarChart.js rename to packages/ui-chart-components/src/components/Charts/BarChart.tsx index e2d5580737..3aabc98e14 100644 --- a/packages/ui-chart-components/src/components/Charts/BarChart.js +++ b/packages/ui-chart-components/src/components/Charts/BarChart.tsx @@ -4,24 +4,44 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; import { Bar, LabelList } from 'recharts'; +import { BarChartConfig } from '@tupaia/types'; import { formatDataValueByType } from '@tupaia/utils'; import { BLUE, CHART_TYPES } from '../../constants'; import { getIsTimeSeries } from '../../utils'; -export const BarChart = ({ +interface DataProps { + name: string; + value: string; + timestamp?: string; +} + +interface BarChartProps { + dataKey: string; + yAxisId: string; + stackId: string; + valueType: string; + color?: string; + data: DataProps[]; + isEnlarged?: boolean; + isExporting?: boolean; + chartConfig: BarChartConfig; + exportWithLabels?: boolean; +} + +export const BarChart: React.FC = ({ color = BLUE, dataKey, yAxisId, stackId, valueType, data, - isEnlarged, - isExporting, + isEnlarged = false, + isExporting = false, chartConfig, - exportWithLabels, + exportWithLabels = true, }) => { + console.log({ data }); const getBarSize = () => { if (chartConfig.chartType === CHART_TYPES.COMPOSED || data.length === 1) { return isEnlarged ? 100 : 50; @@ -71,23 +91,3 @@ export const BarChart = ({ ); }; - -BarChart.propTypes = { - dataKey: PropTypes.string.isRequired, - yAxisId: PropTypes.string.isRequired, - stackId: PropTypes.string.isRequired, - valueType: PropTypes.string.isRequired, - color: PropTypes.string, - chartConfig: PropTypes.object.isRequired, - isExporting: PropTypes.bool, - isEnlarged: PropTypes.bool, - data: PropTypes.array.isRequired, - exportWithLabels: PropTypes.bool, -}; - -BarChart.defaultProps = { - color: BLUE, - exportWithLabels: true, - isExporting: false, - isEnlarged: false, -}; diff --git a/packages/ui-chart-components/src/components/Reference/ReferenceLabel.js b/packages/ui-chart-components/src/components/Reference/ReferenceLabel.js deleted file mode 100644 index 3e49509238..0000000000 --- a/packages/ui-chart-components/src/components/Reference/ReferenceLabel.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import PropTypes from 'prop-types'; - -const isMaxLabel = value => value.toLowerCase().includes('max'); - -export const ReferenceLabel = ({ fill, fontSize, value, viewBox }) => { - const x = viewBox.width / 2 + 30; - const y = isMaxLabel(value) ? viewBox.y - 5 : viewBox.y + 15; - - if (value == null) return null; - return ( - - {`${value}`} - - ); -}; - -ReferenceLabel.propTypes = { - value: PropTypes.string.isRequired, - fill: PropTypes.string.isRequired, - viewBox: PropTypes.object, - fontSize: PropTypes.number, -}; - -ReferenceLabel.defaultProps = { - fontSize: 14, - viewBox: null, -}; diff --git a/packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx b/packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx new file mode 100644 index 0000000000..d5206e9215 --- /dev/null +++ b/packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx @@ -0,0 +1,34 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; + +interface ReferenceLabelProps { + value: string; + fill: string; + viewBox?: { + width: number; + y: number; + }; + fontSize?: number; +} + +const isMaxLabel = (value: string): boolean => value.toLowerCase().includes('max'); + +export const ReferenceLabel: React.FC = ({ + fill, + fontSize = 14, + value, + viewBox, +}) => { + const x = (viewBox?.width || 0) / 2 + 30; + const y = isMaxLabel(value) ? (viewBox?.y || 0) - 5 : (viewBox?.y || 0) + 15; + + if (value == null) return null; + return ( + + {value} + + ); +}; diff --git a/packages/ui-chart-components/src/components/Reference/TooltipContainer.js b/packages/ui-chart-components/src/components/Reference/TooltipContainer.tsx similarity index 100% rename from packages/ui-chart-components/src/components/Reference/TooltipContainer.js rename to packages/ui-chart-components/src/components/Reference/TooltipContainer.tsx diff --git a/packages/ui-chart-components/src/utils/index.js b/packages/ui-chart-components/src/utils/index.tsx similarity index 100% rename from packages/ui-chart-components/src/utils/index.js rename to packages/ui-chart-components/src/utils/index.tsx diff --git a/packages/ui-chart-components/tsconfig.json b/packages/ui-chart-components/tsconfig.json index ab59b9f086..3c416cc281 100644 --- a/packages/ui-chart-components/tsconfig.json +++ b/packages/ui-chart-components/tsconfig.json @@ -5,7 +5,7 @@ "jsx": "react", "target": "es5", "allowJs": true, - "outDir": "dist", + "outDir": "dist" }, "include": [ "src/**/*" diff --git a/packages/ui-components/package.json b/packages/ui-components/package.json index 125ca8d819..5ee92d414c 100644 --- a/packages/ui-components/package.json +++ b/packages/ui-components/package.json @@ -51,8 +51,8 @@ "devDependencies": { "@material-ui/styles": "^4.9.10", "@storybook/react": "^6.3.9", - "@types/react": "^18.2.6", - "@types/react-dom": "^18.2.4", + "@types/react": "16.*", + "@types/react-dom": "16.*", "@types/styled-components": "^5.1.26", "faker": "^4.1.0", "fast-glob": "^3.2.5", diff --git a/yarn.lock b/yarn.lock index 9a41cca44a..2d91d5c227 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5765,6 +5765,7 @@ __metadata: "@storybook/react": ^6.3.9 "@tupaia/ui-components": 1.0.0 "@tupaia/utils": 1.0.0 + "@types/recharts": ^1.8.24 lodash.get: ^4.4.2 moment: ^2.29.1 prop-types: ^15.7.2 @@ -5788,8 +5789,8 @@ __metadata: "@material-ui/styles": ^4.9.10 "@storybook/react": ^6.3.9 "@tupaia/utils": 1.0.0 - "@types/react": ^18.2.6 - "@types/react-dom": ^18.2.4 + "@types/react": 16.* + "@types/react-dom": 16.* "@types/styled-components": ^5.1.26 ace-builds: ^1.4.13 date-fns: ^2.12.0 @@ -6166,6 +6167,22 @@ __metadata: languageName: node linkType: hard +"@types/d3-path@npm:^1": + version: 1.0.9 + resolution: "@types/d3-path@npm:1.0.9" + checksum: acbf7376fd7bef61701bce915bf5a9cb5eaa9741b7919d3e644f841a65faf1aea3cf63ba949c21ddda8c9849221394856a2054805aa698d3bb5ac3fe7d029817 + languageName: node + linkType: hard + +"@types/d3-shape@npm:^1": + version: 1.3.8 + resolution: "@types/d3-shape@npm:1.3.8" + dependencies: + "@types/d3-path": ^1 + checksum: a7f78a3f0be1215b512efb636ba381768ab4104ef9b72b7fcc2ab9810e7d6fc2ee062f3103ef99236f4462deabac60d2fd96375315ec7ad33278757918c94592 + languageName: node + linkType: hard + "@types/eslint-visitor-keys@npm:^1.0.0": version: 1.0.0 resolution: "@types/eslint-visitor-keys@npm:1.0.0" @@ -6735,12 +6752,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.2.4": - version: 18.2.4 - resolution: "@types/react-dom@npm:18.2.4" +"@types/react-dom@npm:16.*": + version: 16.9.19 + resolution: "@types/react-dom@npm:16.9.19" dependencies: - "@types/react": "*" - checksum: 8301f35cf1cbfec8c723e9477aecf87774e3c168bd457d353b23c45064737213d3e8008b067c6767b7b08e4f2b3823ee239242a6c225fc91e7f8725ef8734124 + "@types/react": ^16 + checksum: c696f137aba09be0ea87ad6e99a083607b4fc574857d92c264cc6518ee929ef7e94855362436c2ef5fefb70ebfc9b7413634bb3a2f3a8c2b7522521faaac7d62 languageName: node linkType: hard @@ -6803,14 +6820,24 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^18.2.6": - version: 18.2.6 - resolution: "@types/react@npm:18.2.6" +"@types/react@npm:16.*, @types/react@npm:^16": + version: 16.14.41 + resolution: "@types/react@npm:16.14.41" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: dea9d232d8df7ac357367a69dcb557711ab3d5501807ffa77cebeee73d49ee94d095f298e36853c63ed47cce097eee4c7eae2aaa8c02fac3f0171ec1b523a819 + checksum: 48b721b41af4b4b6fa0433ddca27aee72bd8969e95c7bcb1fd2e9fda81e0a602dea5f855072f1458996d3e45ceeae0751d7d1f6687e6dd1698a6fc5c67cc7b82 + languageName: node + linkType: hard + +"@types/recharts@npm:^1.8.24": + version: 1.8.24 + resolution: "@types/recharts@npm:1.8.24" + dependencies: + "@types/d3-shape": ^1 + "@types/react": "*" + checksum: 1341e5472bf62a83ab98648bc5c14a9a81fba16af9255203ef12a21caa21a988fac3198d9771703394eb876d4fbefb42e818865e35ecfe0d105aee1d1164aa6e languageName: node linkType: hard From 04ad2f8f8a08b77545cf006a8d8fa7141909a4af Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 16 May 2023 15:10:10 +1200 Subject: [PATCH 007/251] add charts --- .../components/Axes/{index.js => index.ts} | 0 .../src/components/{Chart.js => Chart.tsx} | 51 ++++++++-------- .../{ChartTable.js => ChartTable.tsx} | 28 +++------ .../src/components/Charts/AreaChart.js | 35 ----------- .../src/components/Charts/AreaChart.tsx | 34 +++++++++++ .../Charts/{GaugeChart.js => GaugeChart.tsx} | 46 +++++++-------- .../Charts/{LineChart.js => LineChart.tsx} | 59 ++++++++----------- .../Charts/{PieChart.js => PieChart.tsx} | 0 .../components/Charts/{index.js => index.ts} | 0 .../src/components/{index.js => index.ts} | 0 .../src/constants/{colors.js => colors.ts} | 0 .../constants/{constants.js => constants.ts} | 0 .../src/constants/{index.js => index.ts} | 0 .../constants/{propTypes.js => propTypes.ts} | 0 packages/ui-chart-components/src/types.ts | 21 +++++++ ...artDataExport.js => useChartDataExport.ts} | 0 .../src/utils/{utils.js => utils.ts} | 0 17 files changed, 133 insertions(+), 141 deletions(-) rename packages/ui-chart-components/src/components/Axes/{index.js => index.ts} (100%) rename packages/ui-chart-components/src/components/{Chart.js => Chart.tsx} (78%) rename packages/ui-chart-components/src/components/{ChartTable.js => ChartTable.tsx} (63%) delete mode 100644 packages/ui-chart-components/src/components/Charts/AreaChart.js create mode 100644 packages/ui-chart-components/src/components/Charts/AreaChart.tsx rename packages/ui-chart-components/src/components/Charts/{GaugeChart.js => GaugeChart.tsx} (86%) rename packages/ui-chart-components/src/components/Charts/{LineChart.js => LineChart.tsx} (60%) rename packages/ui-chart-components/src/components/Charts/{PieChart.js => PieChart.tsx} (100%) rename packages/ui-chart-components/src/components/Charts/{index.js => index.ts} (100%) rename packages/ui-chart-components/src/components/{index.js => index.ts} (100%) rename packages/ui-chart-components/src/constants/{colors.js => colors.ts} (100%) rename packages/ui-chart-components/src/constants/{constants.js => constants.ts} (100%) rename packages/ui-chart-components/src/constants/{index.js => index.ts} (100%) rename packages/ui-chart-components/src/constants/{propTypes.js => propTypes.ts} (100%) create mode 100644 packages/ui-chart-components/src/types.ts rename packages/ui-chart-components/src/utils/{useChartDataExport.js => useChartDataExport.ts} (100%) rename packages/ui-chart-components/src/utils/{utils.js => utils.ts} (100%) diff --git a/packages/ui-chart-components/src/components/Axes/index.js b/packages/ui-chart-components/src/components/Axes/index.ts similarity index 100% rename from packages/ui-chart-components/src/components/Axes/index.js rename to packages/ui-chart-components/src/components/Axes/index.ts diff --git a/packages/ui-chart-components/src/components/Chart.js b/packages/ui-chart-components/src/components/Chart.tsx similarity index 78% rename from packages/ui-chart-components/src/components/Chart.js rename to packages/ui-chart-components/src/components/Chart.tsx index 8dea2045bc..387e1ca6da 100644 --- a/packages/ui-chart-components/src/components/Chart.js +++ b/packages/ui-chart-components/src/components/Chart.tsx @@ -19,6 +19,19 @@ import { } from '../utils'; import { CHART_TYPES } from '../constants'; +interface ChartProps { + viewContent: { + name?: string; + chartType?: string; + data?: any[]; + chartConfig?: any; + }; + isEnlarged?: boolean; + isExporting?: boolean; + onItemClick?: (item: any) => void; + legendPosition?: string; +} + const UnknownChartTitle = styled(Typography)` position: relative; color: rgba(255, 255, 255, 0.87); @@ -32,7 +45,7 @@ const UnknownChartContainer = styled.div` position: relative; `; -const UnknownChart = () => ( +const UnknownChart: React.FC = () => ( New chart coming soon @@ -44,9 +57,9 @@ const NoData = styled(SmallAlert)` margin-right: auto; `; -const removeNonNumericData = data => +const removeNonNumericData = (data: any[]): any[] => data.map(dataSeries => { - const filteredDataSeries = {}; + const filteredDataSeries: any = {}; Object.entries(dataSeries).forEach(([key, value]) => { if (!isDataKey(key) || !Number.isNaN(Number(value))) { filteredDataSeries[key] = value; @@ -55,10 +68,10 @@ const removeNonNumericData = data => return filteredDataSeries; }); -const sortData = data => +const sortData = (data: any[]): any[] => getIsTimeSeries(data) ? data.sort((a, b) => a.timestamp - b.timestamp) : data; -const getViewContent = viewContent => { +const getViewContent = (viewContent: ChartProps['viewContent']) => { const { chartConfig, data } = viewContent; const massagedData = sortData(removeNonNumericData(data)); return chartConfig @@ -81,7 +94,13 @@ const getChartComponent = chartType => { } }; -export const Chart = ({ viewContent, isExporting, isEnlarged, onItemClick, legendPosition }) => { +export const Chart: React.FC = ({ + viewContent, + isExporting = false, + isEnlarged = true, + onItemClick = () => {}, + legendPosition = 'bottom', +}) => { const { chartType } = viewContent; if (!Object.values(CHART_TYPES).includes(chartType)) { @@ -109,23 +128,3 @@ export const Chart = ({ viewContent, isExporting, isEnlarged, onItemClick, legen /> ); }; - -Chart.propTypes = { - viewContent: PropTypes.shape({ - name: PropTypes.string, - chartType: PropTypes.string, - data: PropTypes.array, - }), - isEnlarged: PropTypes.bool, - isExporting: PropTypes.bool, - onItemClick: PropTypes.func, - legendPosition: PropTypes.string, -}; - -Chart.defaultProps = { - viewContent: null, - isEnlarged: true, - isExporting: false, - legendPosition: 'bottom', - onItemClick: () => {}, -}; diff --git a/packages/ui-chart-components/src/components/ChartTable.js b/packages/ui-chart-components/src/components/ChartTable.tsx similarity index 63% rename from packages/ui-chart-components/src/components/ChartTable.js rename to packages/ui-chart-components/src/components/ChartTable.tsx index 6cafa9f1ab..47f619debe 100644 --- a/packages/ui-chart-components/src/components/ChartTable.js +++ b/packages/ui-chart-components/src/components/ChartTable.tsx @@ -3,12 +3,17 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import PropTypes from 'prop-types'; import styled from 'styled-components'; import MuiTableContainer from '@material-ui/core/TableContainer'; import { DataTable, SmallAlert } from '@tupaia/ui-components'; +import { ViewContent } from '../types'; import { getChartTableData, getIsChartData, getNoDataString } from '../utils'; +interface ChartTableProps { + viewContent?: ViewContent; + className?: string; +} + const TableContainer = styled(MuiTableContainer)` overflow: auto; `; @@ -19,7 +24,7 @@ const NoData = styled(SmallAlert)` margin-right: auto; `; -export const ChartTable = ({ viewContent, className }) => { +export const ChartTable: React.FC = ({ viewContent, className }) => { const { columns, data } = getChartTableData(viewContent); if (!getIsChartData(viewContent)) { @@ -36,22 +41,3 @@ export const ChartTable = ({ viewContent, className }) => { ); }; - -ChartTable.propTypes = { - viewContent: PropTypes.shape({ - name: PropTypes.string, - xName: PropTypes.string, - periodGranularity: PropTypes.string, - valueType: PropTypes.string, - labelType: PropTypes.string, - chartType: PropTypes.string, - data: PropTypes.array, - chartConfig: PropTypes.object, - }), - className: PropTypes.string, -}; - -ChartTable.defaultProps = { - viewContent: null, - className: null, -}; diff --git a/packages/ui-chart-components/src/components/Charts/AreaChart.js b/packages/ui-chart-components/src/components/Charts/AreaChart.js deleted file mode 100644 index 238ff5d650..0000000000 --- a/packages/ui-chart-components/src/components/Charts/AreaChart.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import PropTypes from 'prop-types'; -import { Area } from 'recharts'; -import { BLUE } from '../../constants'; - -export const AreaChart = ({ color, dataKey, yAxisId, isEnlarged, isExporting }) => ( - -); - -AreaChart.propTypes = { - dataKey: PropTypes.string.isRequired, - yAxisId: PropTypes.string.isRequired, - color: PropTypes.string, - isExporting: PropTypes.bool, - isEnlarged: PropTypes.bool, -}; - -AreaChart.defaultProps = { - color: BLUE, - isExporting: false, - isEnlarged: false, -}; diff --git a/packages/ui-chart-components/src/components/Charts/AreaChart.tsx b/packages/ui-chart-components/src/components/Charts/AreaChart.tsx new file mode 100644 index 0000000000..9b1dc72d60 --- /dev/null +++ b/packages/ui-chart-components/src/components/Charts/AreaChart.tsx @@ -0,0 +1,34 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import { Area } from 'recharts'; +import { BLUE } from '../../constants'; + +interface AreaChartProps { + color?: string; + dataKey: string; + yAxisId: string; + isEnlarged?: boolean; + isExporting?: boolean; +} + +export const AreaChart: React.FC = ({ + color = BLUE, + dataKey, + yAxisId, + isEnlarged = false, + isExporting = false, +}) => ( + +); diff --git a/packages/ui-chart-components/src/components/Charts/GaugeChart.js b/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx similarity index 86% rename from packages/ui-chart-components/src/components/Charts/GaugeChart.js rename to packages/ui-chart-components/src/components/Charts/GaugeChart.tsx index 66406a7602..2c94f3281e 100644 --- a/packages/ui-chart-components/src/components/Charts/GaugeChart.js +++ b/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx @@ -18,8 +18,7 @@ } */ -import React, { useCallback, useMemo } from 'react'; -import PropTypes from 'prop-types'; +import React, { useMemo } from 'react'; import styled from 'styled-components'; import { formatDataValueByType } from '@tupaia/utils'; import { @@ -33,23 +32,37 @@ import { import { VIEW_CONTENT_SHAPE, BLUE, TRANS_BLACK, WHITE } from '../../constants'; import { isMobile } from '../../utils'; -const Text = styled(RechartText)` +interface GaugeChartProps { + viewContent: { + data: { value: number }[]; + color?: string; + [key: string]: any; + }; + isEnlarged?: boolean; + isExporting?: boolean; + onItemClick?: (item: any) => void; +} + +const Text = styled(RechartText)`<{ $fontSize: string; $isExporting: boolean }> font-size: ${p => p.$fontSize}; font-weight: bold; fill: ${({ theme, $isExporting }) => { return theme.palette.type === 'light' || $isExporting ? TRANS_BLACK : WHITE; - }}; -`; + }};`; -const getHeight = (isExporting, isEnlarged) => { +const getHeight = (isExporting?: boolean, isEnlarged?: boolean) => { if (isExporting) { return 420; } return isEnlarged && isMobile() ? 320 : undefined; }; -export const GaugeChart = props => { - const { viewContent, isExporting, isEnlarged, onItemClick } = props; +export const GaugeChart: React.FC = ({ + viewContent, + isExporting = false, + isEnlarged = false, + onItemClick = () => {}, +}) => { const { data, color = BLUE, ...restOfConfigs } = viewContent; const generateElements = () => { @@ -73,7 +86,7 @@ export const GaugeChart = props => { const innerRadius = 60 * responsiveStyle; const outerRadius = innerRadius * 1.4; - const getLabelContent = useCallback(({ value, x, y, fontSize }) => { + const getLabelContent = ({ value, x, y, fontSize }) => { const positioningProps = { x, y, @@ -85,7 +98,7 @@ export const GaugeChart = props => { {value} ); - }); + }; return ( @@ -147,16 +160,3 @@ export const GaugeChart = props => { ); }; - -GaugeChart.propTypes = { - viewContent: PropTypes.shape(VIEW_CONTENT_SHAPE).isRequired, - isEnlarged: PropTypes.bool, - isExporting: PropTypes.bool, - onItemClick: PropTypes.func, -}; - -GaugeChart.defaultProps = { - isEnlarged: false, - isExporting: false, - onItemClick: () => {}, -}; diff --git a/packages/ui-chart-components/src/components/Charts/LineChart.js b/packages/ui-chart-components/src/components/Charts/LineChart.tsx similarity index 60% rename from packages/ui-chart-components/src/components/Charts/LineChart.js rename to packages/ui-chart-components/src/components/Charts/LineChart.tsx index dc8ca7761f..c76d4d663f 100644 --- a/packages/ui-chart-components/src/components/Charts/LineChart.js +++ b/packages/ui-chart-components/src/components/Charts/LineChart.tsx @@ -2,25 +2,37 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - import React from 'react'; -import PropTypes from 'prop-types'; import { Line, LabelList } from 'recharts'; import { formatDataValueByType } from '@tupaia/utils'; import { BLUE, DARK_BLUE } from '../../constants'; -export const LineChart = ({ - color, +interface LineChartProps { + dataKey: string; + opacity?: string; + yAxisId: string; + valueType: string; + color?: string; + isExporting?: boolean; + isEnlarged?: boolean; + connectNulls?: boolean; + exportWithLabels?: boolean; + strokeDasharray?: string; + dot?: boolean; +} + +export const LineChart: React.FC = ({ dataKey, + opacity, yAxisId, valueType, - isEnlarged, - isExporting, - opacity, - connectNulls, - exportWithLabels, strokeDasharray, - dot, + color = BLUE, + isExporting = false, + isEnlarged = false, + connectNulls = false, + exportWithLabels = true, + dot = true, }) => { const defaultColor = isExporting ? DARK_BLUE : BLUE; const showDot = isExporting ? false : dot; // Always hide when exporting as it doesn't look nice @@ -45,35 +57,10 @@ export const LineChart = ({ dataKey={dataKey} position="insideTopRight" offset={-20} - angle="50" + angle={50} formatter={value => formatDataValueByType({ value }, valueType)} /> )} ); }; - -LineChart.propTypes = { - dataKey: PropTypes.string.isRequired, - opacity: PropTypes.string, - yAxisId: PropTypes.string.isRequired, - valueType: PropTypes.string.isRequired, - color: PropTypes.string, - isExporting: PropTypes.bool, - isEnlarged: PropTypes.bool, - connectNulls: PropTypes.bool, - exportWithLabels: PropTypes.bool, - strokeDasharray: PropTypes.string, - dot: PropTypes.bool, -}; - -LineChart.defaultProps = { - color: BLUE, - isExporting: false, - isEnlarged: false, - opacity: null, - connectNulls: false, - exportWithLabels: true, - strokeDasharray: undefined, - dot: true, -}; diff --git a/packages/ui-chart-components/src/components/Charts/PieChart.js b/packages/ui-chart-components/src/components/Charts/PieChart.tsx similarity index 100% rename from packages/ui-chart-components/src/components/Charts/PieChart.js rename to packages/ui-chart-components/src/components/Charts/PieChart.tsx diff --git a/packages/ui-chart-components/src/components/Charts/index.js b/packages/ui-chart-components/src/components/Charts/index.ts similarity index 100% rename from packages/ui-chart-components/src/components/Charts/index.js rename to packages/ui-chart-components/src/components/Charts/index.ts diff --git a/packages/ui-chart-components/src/components/index.js b/packages/ui-chart-components/src/components/index.ts similarity index 100% rename from packages/ui-chart-components/src/components/index.js rename to packages/ui-chart-components/src/components/index.ts diff --git a/packages/ui-chart-components/src/constants/colors.js b/packages/ui-chart-components/src/constants/colors.ts similarity index 100% rename from packages/ui-chart-components/src/constants/colors.js rename to packages/ui-chart-components/src/constants/colors.ts diff --git a/packages/ui-chart-components/src/constants/constants.js b/packages/ui-chart-components/src/constants/constants.ts similarity index 100% rename from packages/ui-chart-components/src/constants/constants.js rename to packages/ui-chart-components/src/constants/constants.ts diff --git a/packages/ui-chart-components/src/constants/index.js b/packages/ui-chart-components/src/constants/index.ts similarity index 100% rename from packages/ui-chart-components/src/constants/index.js rename to packages/ui-chart-components/src/constants/index.ts diff --git a/packages/ui-chart-components/src/constants/propTypes.js b/packages/ui-chart-components/src/constants/propTypes.ts similarity index 100% rename from packages/ui-chart-components/src/constants/propTypes.js rename to packages/ui-chart-components/src/constants/propTypes.ts diff --git a/packages/ui-chart-components/src/types.ts b/packages/ui-chart-components/src/types.ts new file mode 100644 index 0000000000..675b791c5d --- /dev/null +++ b/packages/ui-chart-components/src/types.ts @@ -0,0 +1,21 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export interface DataProps { + name: string; + value: string; + timestamp?: string; +} + +export interface ViewContent { + name?: string; + xName?: string; + periodGranularity?: string; + valueType?: string; + labelType?: string; + chartType?: string; + data?: DataProps[]; + chartConfig?: object; +} diff --git a/packages/ui-chart-components/src/utils/useChartDataExport.js b/packages/ui-chart-components/src/utils/useChartDataExport.ts similarity index 100% rename from packages/ui-chart-components/src/utils/useChartDataExport.js rename to packages/ui-chart-components/src/utils/useChartDataExport.ts diff --git a/packages/ui-chart-components/src/utils/utils.js b/packages/ui-chart-components/src/utils/utils.ts similarity index 100% rename from packages/ui-chart-components/src/utils/utils.js rename to packages/ui-chart-components/src/utils/utils.ts From ebf965d2e2cb7e621ab3203e65d6c4a30c3ee930 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 16 May 2023 16:45:28 +1200 Subject: [PATCH 008/251] utils --- .../models-extra/dashboard-item/charts.ts | 2 +- .../models-extra/dashboard-item/index.ts | 1 + .../types/src/types/models-extra/index.ts | 1 + packages/types/src/types/models.ts | 1 + packages/ui-chart-components/package.json | 3 +- .../src/components/Axes/XAxis.js | 5 +- .../src/components/Axes/YAxes.js | 11 ++-- .../{CartesianChart.js => CartesianChart.tsx} | 63 +++++++++---------- .../src/components/Chart.tsx | 34 +++++----- .../src/components/Charts/BarChart.tsx | 6 +- .../src/components/Charts/GaugeChart.tsx | 18 +----- .../src/components/Reference/ChartTooltip.js | 9 +-- .../components/Reference/ReferenceLines.js | 5 +- .../Reference/{index.js => index.ts} | 0 .../src/constants/constants.ts | 21 ------- packages/ui-chart-components/src/types.ts | 39 ++++++++++-- ...hartTableData.js => getChartTableData.tsx} | 20 +++--- ...arseChartConfig.js => parseChartConfig.ts} | 31 +++++---- .../src/utils/useChartDataExport.ts | 4 +- .../ui-chart-components/src/utils/utils.ts | 17 +++-- yarn.lock | 1 + 21 files changed, 149 insertions(+), 143 deletions(-) rename packages/ui-chart-components/src/components/{CartesianChart.js => CartesianChart.tsx} (87%) rename packages/ui-chart-components/src/components/Reference/{index.js => index.ts} (100%) rename packages/ui-chart-components/src/utils/{getChartTableData.js => getChartTableData.tsx} (84%) rename packages/ui-chart-components/src/utils/{parseChartConfig.js => parseChartConfig.ts} (81%) diff --git a/packages/types/src/types/models-extra/dashboard-item/charts.ts b/packages/types/src/types/models-extra/dashboard-item/charts.ts index 3f7d3e7af2..b21e8309c8 100644 --- a/packages/types/src/types/models-extra/dashboard-item/charts.ts +++ b/packages/types/src/types/models-extra/dashboard-item/charts.ts @@ -6,7 +6,7 @@ import type { BaseConfig, ValueType } from './common'; import { CssColor } from '../../css'; -type BaseChartConfig = BaseConfig & { +export type BaseChartConfig = BaseConfig & { ticks?: any; startDate?: string; diff --git a/packages/types/src/types/models-extra/dashboard-item/index.ts b/packages/types/src/types/models-extra/dashboard-item/index.ts index 42732b0275..59896ba43a 100644 --- a/packages/types/src/types/models-extra/dashboard-item/index.ts +++ b/packages/types/src/types/models-extra/dashboard-item/index.ts @@ -31,6 +31,7 @@ export type { GaugeChartConfig, LineChartConfig, PieChartConfig, + BaseChartConfig, } from './charts'; /** * The master list of viz types. diff --git a/packages/types/src/types/models-extra/index.ts b/packages/types/src/types/models-extra/index.ts index 48b86821a9..1e65e1f4a1 100644 --- a/packages/types/src/types/models-extra/index.ts +++ b/packages/types/src/types/models-extra/index.ts @@ -11,4 +11,5 @@ export type { GaugeChartConfig, LineChartConfig, PieChartConfig, + BaseChartConfig, } from './dashboard-item'; diff --git a/packages/types/src/types/models.ts b/packages/types/src/types/models.ts index 5504bcd0a3..62bacba2f4 100644 --- a/packages/types/src/types/models.ts +++ b/packages/types/src/types/models.ts @@ -18,6 +18,7 @@ export { GaugeChartConfig, LineChartConfig, PieChartConfig, + BaseChartConfig, } from './models-extra'; export interface AccessRequest { diff --git a/packages/ui-chart-components/package.json b/packages/ui-chart-components/package.json index e21e7cd69d..782aa2bd22 100644 --- a/packages/ui-chart-components/package.json +++ b/packages/ui-chart-components/package.json @@ -37,6 +37,7 @@ "devDependencies": { "@material-ui/styles": "^4.9.10", "@storybook/react": "^6.3.9", - "@types/recharts": "^1.8.24" + "@types/recharts": "^1.8.24", + "@tupaia/types": "1.0.0" } } diff --git a/packages/ui-chart-components/src/components/Axes/XAxis.js b/packages/ui-chart-components/src/components/Axes/XAxis.js index 76e936ab8e..6b300ce8ff 100644 --- a/packages/ui-chart-components/src/components/Axes/XAxis.js +++ b/packages/ui-chart-components/src/components/Axes/XAxis.js @@ -8,7 +8,8 @@ import PropTypes from 'prop-types'; import { Text, XAxis as XAxisComponent } from 'recharts'; import { formatTimestampForChart, getIsTimeSeries, getContrastTextColor } from '../../utils'; import { VerticalTick } from './VerticalTick'; -import { DARK_BLUE, CHART_TYPES } from '../../constants'; +import { DARK_BLUE } from '../../constants'; +import { ChartTypes } from '../../types'; const AXIS_TIME_PROPS = { dataKey: 'timestamp', @@ -58,7 +59,7 @@ const calculateXAxisHeight = (data, isExporting) => { export const XAxis = ({ viewContent, isExporting, isEnlarged }) => { const fillColor = isExporting ? DARK_BLUE : getContrastTextColor(); - const { BAR, COMPOSED } = CHART_TYPES; + const { Bar, Composed } = ChartTypes; const { chartType, chartConfig = {}, data } = viewContent; const axisHeight = calculateXAxisHeight(data, isExporting); const isTimeSeries = getIsTimeSeries(data); diff --git a/packages/ui-chart-components/src/components/Axes/YAxes.js b/packages/ui-chart-components/src/components/Axes/YAxes.js index 80f8c4896c..1f443be52b 100644 --- a/packages/ui-chart-components/src/components/Axes/YAxes.js +++ b/packages/ui-chart-components/src/components/Axes/YAxes.js @@ -7,10 +7,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import { formatDataValueByType } from '@tupaia/utils'; import { YAxis as YAxisComponent } from 'recharts'; -import { DARK_BLUE, VALUE_TYPES } from '../../constants'; +import { DARK_BLUE } from '../../constants'; +import { ValueTypes } from '../../types'; import { getContrastTextColor } from '../../utils'; -const { PERCENTAGE } = VALUE_TYPES; +const { Percentage } = ValueTypes; const Y_AXIS_IDS = { left: 0, @@ -48,7 +49,7 @@ const parseDomainConfig = config => { }; const getDefaultYAxisDomain = viewContent => - viewContent.valueType === PERCENTAGE ? PERCENTAGE_Y_DOMAIN : DEFAULT_Y_AXIS.yAxisDomain; + viewContent.valueType === Percentage ? PERCENTAGE_Y_DOMAIN : DEFAULT_Y_AXIS.yAxisDomain; const calculateYAxisDomain = ({ min, max }) => { return [parseDomainConfig(min), parseDomainConfig(max)]; @@ -73,7 +74,7 @@ const renderYAxisLabel = (label, orientation, fillColor, isEnlarged) => { */ const getAxisWidth = (data, dataKeys, valueType) => { // Only use a dynamic width for number types. Otherwise fallback to the recharts default - if (valueType === VALUE_TYPES.NUMBER || valueType === undefined) { + if (valueType === ValueTypes.Number || valueType === undefined) { const values = data.map(item => dataKeys.map(key => item[key])).flat(); const maxValue = Math.max(...values); @@ -116,7 +117,7 @@ const YAxis = ({ config = {}, viewContent, chartDataConfig, isExporting, isEnlar yAxisId={yAxisId} orientation={orientation} domain={calculateYAxisDomain(yAxisDomain)} - allowDataOverflow={valueType === PERCENTAGE || containsClamp(yAxisDomain)} + allowDataOverflow={valueType === Percentage || containsClamp(yAxisDomain)} // The above 2 props stop floating point imprecision making Y axis go above 100% in stacked charts. label={renderYAxisLabel(yName || yAxisLabel, orientation, fillColor, isEnlarged)} tickFormatter={value => diff --git a/packages/ui-chart-components/src/components/CartesianChart.js b/packages/ui-chart-components/src/components/CartesianChart.tsx similarity index 87% rename from packages/ui-chart-components/src/components/CartesianChart.js rename to packages/ui-chart-components/src/components/CartesianChart.tsx index a61d2e060f..99f5f54219 100644 --- a/packages/ui-chart-components/src/components/CartesianChart.js +++ b/packages/ui-chart-components/src/components/CartesianChart.tsx @@ -4,7 +4,6 @@ */ import React, { useEffect, useState } from 'react'; -import PropTypes from 'prop-types'; import get from 'lodash.get'; import { AreaChart, @@ -17,7 +16,9 @@ import { Tooltip, Brush, } from 'recharts'; -import { CHART_BLUES, VIEW_CONTENT_SHAPE, DEFAULT_DATA_KEY, CHART_TYPES } from '../constants'; +import { BaseChartConfig } from '@tupaia/types'; +import { CHART_BLUES, DEFAULT_DATA_KEY } from '../constants'; +import { ChartTypes, ViewContent } from '../types'; import { BarChart as BarChartComponent, LineChart as LineChartComponent, @@ -27,7 +28,7 @@ import { getCartesianLegend, ReferenceLines, ChartTooltip as CustomTooltip } fro import { isMobile } from '../utils'; import { XAxis as XAxisComponent, YAxes } from './Axes'; -const { AREA, BAR, COMPOSED, LINE } = CHART_TYPES; +const { Area, Bar, Composed, Line } = ChartTypes; // Orientation of the axis is used as an alias for its id const Y_AXIS_IDS = { @@ -55,23 +56,23 @@ const LEGEND_ALL_DATA = { }; const CHART_TYPE_TO_CONTAINER = { - [AREA]: AreaChart, - [BAR]: BarChart, - [COMPOSED]: ComposedChart, - [LINE]: LineChart, + [Area]: AreaChart, + [Bar]: BarChart, + [Composed]: ComposedChart, + [Line]: LineChart, }; const CHART_TYPE_TO_CHART = { - [AREA]: AreaChartComponent, - [BAR]: BarChartComponent, - [COMPOSED]: BarChartComponent, - [LINE]: LineChartComponent, + [Area]: AreaChartComponent, + [Bar]: BarChartComponent, + [Composed]: BarChartComponent, + [Line]: LineChartComponent, }; -const getRealDataKeys = chartConfig => +const getRealDataKeys = (chartConfig: BaseChartConfig) => Object.keys(chartConfig).filter(key => key !== LEGEND_ALL_DATA_KEY); -const getLegendAlignment = (legendPosition, isExporting) => { +const getLegendAlignment = (legendPosition: string, isExporting: boolean) => { if (isExporting) { return { verticalAlign: 'top', align: 'right', layout: 'vertical' }; } @@ -81,14 +82,14 @@ const getLegendAlignment = (legendPosition, isExporting) => { return { verticalAlign: 'top', align: 'left' }; }; -const getHeight = (isExporting, isEnlarged, hasLegend) => { +const getHeight = (isExporting: boolean, isEnlarged: boolean, hasLegend: boolean) => { if (isExporting) { return 500; } return isEnlarged && hasLegend && isMobile() ? 320 : undefined; }; -const getMargin = (isExporting, isEnlarged) => { +const getMargin = (isExporting: string, isEnlarged: boolean) => { if (isExporting) { return { left: 20, right: 20, top: 20, bottom: 60 }; } @@ -100,11 +101,19 @@ const getMargin = (isExporting, isEnlarged) => { return { left: 0, right: 0, top: 0, bottom: 0 }; }; -/** - * Cartesian Chart types using recharts - * @see https://recharts.org - */ -export const CartesianChart = ({ viewContent, isEnlarged, isExporting, legendPosition }) => { +interface CartesianChartProps { + viewContent: ViewContent; + legendPosition: string; + isEnlarged?: boolean; + isExporting?: boolean; +} + +export const CartesianChart: React.FC = ({ + viewContent, + isEnlarged = false, + isExporting = false, + legendPosition = 'bottom', +}) => { const [chartConfig, setChartConfig] = useState(viewContent.chartConfig || {}); const [activeDataKeys, setActiveDataKeys] = useState([]); // eslint-disable-next-line no-unused-vars @@ -255,17 +264,3 @@ export const CartesianChart = ({ viewContent, isEnlarged, isExporting, legendPos ); }; - -CartesianChart.propTypes = { - isEnlarged: PropTypes.bool, - isExporting: PropTypes.bool, - viewContent: PropTypes.shape(VIEW_CONTENT_SHAPE), - legendPosition: PropTypes.string, -}; - -CartesianChart.defaultProps = { - isEnlarged: false, - isExporting: false, - viewContent: null, - legendPosition: 'bottom', -}; diff --git a/packages/ui-chart-components/src/components/Chart.tsx b/packages/ui-chart-components/src/components/Chart.tsx index 387e1ca6da..a60776610b 100644 --- a/packages/ui-chart-components/src/components/Chart.tsx +++ b/packages/ui-chart-components/src/components/Chart.tsx @@ -4,7 +4,6 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; import Typography from '@material-ui/core/Typography'; import styled from 'styled-components'; import { SmallAlert } from '@tupaia/ui-components'; @@ -17,20 +16,7 @@ import { getIsChartData, getNoDataString, } from '../utils'; -import { CHART_TYPES } from '../constants'; - -interface ChartProps { - viewContent: { - name?: string; - chartType?: string; - data?: any[]; - chartConfig?: any; - }; - isEnlarged?: boolean; - isExporting?: boolean; - onItemClick?: (item: any) => void; - legendPosition?: string; -} +import { ChartTypes, ViewContent } from '../types'; const UnknownChartTitle = styled(Typography)` position: relative; @@ -83,17 +69,25 @@ const getViewContent = (viewContent: ChartProps['viewContent']) => { : { ...viewContent, data: massagedData }; }; -const getChartComponent = chartType => { +const getChartComponent = (chartType: ChartTypes) => { switch (chartType) { - case CHART_TYPES.PIE: + case ChartTypes.Pie: return PieChart; - case CHART_TYPES.GAUGE: + case ChartTypes.Gauge: return GaugeChart; default: return CartesianChart; } }; +interface ChartProps { + viewContent: ViewContent; + isEnlarged?: boolean; + isExporting?: boolean; + onItemClick?: (item: any) => void; + legendPosition?: string; +} + export const Chart: React.FC = ({ viewContent, isExporting = false, @@ -103,11 +97,11 @@ export const Chart: React.FC = ({ }) => { const { chartType } = viewContent; - if (!Object.values(CHART_TYPES).includes(chartType)) { + if (!Object.values(ChartTypes).includes(chartType)) { return ; } - if (!getIsChartData(viewContent)) { + if (!getIsChartData({ chartType: viewContent.chartType, data: viewContent.data })) { return ( {getNoDataString(viewContent)} diff --git a/packages/ui-chart-components/src/components/Charts/BarChart.tsx b/packages/ui-chart-components/src/components/Charts/BarChart.tsx index 3aabc98e14..df33bd92f8 100644 --- a/packages/ui-chart-components/src/components/Charts/BarChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/BarChart.tsx @@ -7,7 +7,8 @@ import React from 'react'; import { Bar, LabelList } from 'recharts'; import { BarChartConfig } from '@tupaia/types'; import { formatDataValueByType } from '@tupaia/utils'; -import { BLUE, CHART_TYPES } from '../../constants'; +import { BLUE } from '../../constants'; +import { ChartTypes } from '../../types'; import { getIsTimeSeries } from '../../utils'; interface DataProps { @@ -41,9 +42,8 @@ export const BarChart: React.FC = ({ chartConfig, exportWithLabels = true, }) => { - console.log({ data }); const getBarSize = () => { - if (chartConfig.chartType === CHART_TYPES.COMPOSED || data.length === 1) { + if (chartConfig.chartType === ChartTypes.Composed || data.length === 1) { return isEnlarged ? 100 : 50; } // Too many stacks will automatically set bar size to 0. diff --git a/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx b/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx index 2c94f3281e..c5dab0fd79 100644 --- a/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx @@ -2,22 +2,6 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - -/** - * GaugeChart - * - * Renders a recharts GaugeChart from data provided by viewContent object - * @prop {object} viewContent An object with the following structure - { - "type":"chart", - "chartType":"gauge", - "name":"% Stock on Hand", - "valueType": "percentage", - "color": "#111111", - "data":[{ value:0.485 }] - } - */ - import React, { useMemo } from 'react'; import styled from 'styled-components'; import { formatDataValueByType } from '@tupaia/utils'; @@ -29,7 +13,7 @@ import { Label, Text as RechartText, } from 'recharts'; -import { VIEW_CONTENT_SHAPE, BLUE, TRANS_BLACK, WHITE } from '../../constants'; +import { BLUE, TRANS_BLACK, WHITE } from '../../constants'; import { isMobile } from '../../utils'; interface GaugeChartProps { diff --git a/packages/ui-chart-components/src/components/Reference/ChartTooltip.js b/packages/ui-chart-components/src/components/Reference/ChartTooltip.js index 31cacf46ab..64012e50df 100644 --- a/packages/ui-chart-components/src/components/Reference/ChartTooltip.js +++ b/packages/ui-chart-components/src/components/Reference/ChartTooltip.js @@ -9,7 +9,8 @@ import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import PropTypes from 'prop-types'; import { formatDataValueByType } from '@tupaia/utils'; -import { VALUE_TYPES, PRESENTATION_OPTIONS_SHAPE, CHART_TYPES } from '../../constants'; +import { PRESENTATION_OPTIONS_SHAPE } from '../../constants'; +import { ChartTypes, ValueTypes } from '../../types'; import { formatTimestampForChart, getIsTimeSeries } from '../../utils'; import { TooltipContainer } from './TooltipContainer'; @@ -68,10 +69,10 @@ const MultiValueTooltip = ({ const { name: headline, timestamp } = data; if (chartType) { - if (chartType === CHART_TYPES.BAR) { + if (chartType === ChartTypes.Bar) { payload.reverse(); } - if (chartType === CHART_TYPES.LINE) { + if (chartType === ChartTypes.Line) { payload.sort((obj1, obj2) => obj2.value - obj1.value); } } @@ -168,7 +169,7 @@ export const ChartTooltip = props => { }; ChartTooltip.propTypes = { - valueType: PropTypes.oneOf(Object.values(VALUE_TYPES)), + valueType: PropTypes.oneOf(Object.values(ValueTypes)), presentationOptions: PropTypes.shape(PRESENTATION_OPTIONS_SHAPE), payload: PropTypes.array, }; diff --git a/packages/ui-chart-components/src/components/Reference/ReferenceLines.js b/packages/ui-chart-components/src/components/Reference/ReferenceLines.js index 0cdc9554f3..972dc188b5 100644 --- a/packages/ui-chart-components/src/components/Reference/ReferenceLines.js +++ b/packages/ui-chart-components/src/components/Reference/ReferenceLines.js @@ -7,7 +7,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { ReferenceLine } from 'recharts'; import { formatDataValueByType } from '@tupaia/utils'; -import { TUPAIA_ORANGE, CHART_TYPES } from '../../constants'; +import { TUPAIA_ORANGE } from '../../constants'; +import { ChartTypes } from '../../types'; import { ReferenceLabel } from './ReferenceLabel'; const ReferenceLineLabel = ({ referenceLineLabel, isExporting }) => { @@ -123,7 +124,7 @@ const BarReferenceLine = ({ viewContent, isExporting, isEnlarged }) => { }; export const ReferenceLines = ({ viewContent, isExporting, isEnlarged }) => { - if (viewContent.chartType === CHART_TYPES.BAR) { + if (viewContent.chartType === ChartTypes.Bar) { return BarReferenceLine({ viewContent, isExporting, isEnlarged }); } return ValueReferenceLine({ viewContent, isExporting, isEnlarged }); diff --git a/packages/ui-chart-components/src/components/Reference/index.js b/packages/ui-chart-components/src/components/Reference/index.ts similarity index 100% rename from packages/ui-chart-components/src/components/Reference/index.js rename to packages/ui-chart-components/src/components/Reference/index.ts diff --git a/packages/ui-chart-components/src/constants/constants.ts b/packages/ui-chart-components/src/constants/constants.ts index 2e382e045a..853337ae01 100644 --- a/packages/ui-chart-components/src/constants/constants.ts +++ b/packages/ui-chart-components/src/constants/constants.ts @@ -3,25 +3,4 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -export const VALUE_TYPES = { - BOOLEAN: 'boolean', - CURRENCY: 'currency', - FRACTION: 'fraction', - PERCENTAGE: 'percentage', - FRACTION_AND_PERCENTAGE: 'fractionAndPercentage', - NUMBER_AND_PERCENTAGE: 'numberAndPercentage', - TEXT: 'text', - NUMBER: 'number', - ONE_DECIMAL_PLACE: 'oneDecimalPlace', -}; - export const DEFAULT_DATA_KEY = 'value'; - -export const CHART_TYPES = { - AREA: 'area', - BAR: 'bar', - COMPOSED: 'composed', - LINE: 'line', - PIE: 'pie', - GAUGE: 'gauge', -}; diff --git a/packages/ui-chart-components/src/types.ts b/packages/ui-chart-components/src/types.ts index 675b791c5d..ae14e67eb7 100644 --- a/packages/ui-chart-components/src/types.ts +++ b/packages/ui-chart-components/src/types.ts @@ -2,20 +2,47 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - +// Todo: move some of these types to @tupaia/types and integrate export interface DataProps { name: string; - value: string; + value: string | number; timestamp?: string; } -export interface ViewContent { +export enum ChartTypes { + Area = 'area', + Bar = 'bar', + Composed = 'composed', + Line = 'line', + Pie = 'pie', + Gauge = 'gauge', +} + +// Todo: add period granularity to this type +export type ViewContent = { + chartType: ChartTypes; + valueType?: ValueTypes; name?: string; xName?: string; + noDataMessage?: string; + source?: string; + startDate?: string; + endDate?: string; + colorPalette?: string; periodGranularity?: string; - valueType?: string; labelType?: string; - chartType?: string; - data?: DataProps[]; + data: DataProps[]; chartConfig?: object; +}; + +export enum ValueTypes { + Boolean = 'boolean', + Currency = 'currency', + Fraction = 'fraction', + Percentage = 'percentage', + FractionAndPercentage = 'fractionAndPercentage', + NumberAndPercentage = 'numberAndPercentage', + Text = 'text', + Number = 'number', + OneDecimalPlace = 'oneDecimalPlace', } diff --git a/packages/ui-chart-components/src/utils/getChartTableData.js b/packages/ui-chart-components/src/utils/getChartTableData.tsx similarity index 84% rename from packages/ui-chart-components/src/utils/getChartTableData.js rename to packages/ui-chart-components/src/utils/getChartTableData.tsx index 93f5c77654..34ecf1b33c 100644 --- a/packages/ui-chart-components/src/utils/getChartTableData.js +++ b/packages/ui-chart-components/src/utils/getChartTableData.tsx @@ -5,16 +5,18 @@ import React, { useMemo } from 'react'; import styled from 'styled-components'; import { formatDataValueByType } from '@tupaia/utils'; -import { DEFAULT_DATA_KEY, CHART_TYPES } from '../constants'; +import { DEFAULT_DATA_KEY } from '../constants'; +import { ChartTypes } from '../types'; import { formatTimestampForChart, getIsTimeSeries } from './utils'; import { parseChartConfig } from './parseChartConfig'; +import { ValueTypes, ViewContent } from '../types'; // For the rowData, ignore labelType and use percentage instead of fractionAndPercentage as // we don't want to show multiple values a table cell -const sanitizeValueType = valueType => - valueType === 'fractionAndPercentage' ? 'percentage' : valueType; - -const getFormattedValue = (value, valueType) => +const sanitizeValueType = (valueType: ValueTypes): ValueTypes => { + return valueType === ValueTypes.FractionAndPercentage ? ValueTypes.Percentage : valueType; +}; +const getFormattedValue = (value: string | undefined, valueType: ValueTypes): any => value === undefined ? 'No Data' : formatDataValueByType({ value }, sanitizeValueType(valueType)); const FirstColumnCell = styled.span` @@ -41,7 +43,7 @@ const makeFirstColumn = (header, accessor, sortRows) => { * Use the keys in chartConfig to determine which columns to render, and if chartConfig doesn't exist * use value as the only column */ -const processColumns = (viewContent, sortByTimestamp) => { +const processColumns = (viewContent: ViewContent, sortByTimestamp: Function) => { if (!viewContent?.data) { return []; } @@ -92,14 +94,14 @@ const sortDates = (dateA, dateB) => { return dateAMoreRecent ? 1 : -1; }; -const processData = viewContent => { +const processData = (viewContent: ViewContent) => { if (!viewContent?.data) { return []; } const { data, chartType } = viewContent; - if (chartType === CHART_TYPES.PIE) { + if (chartType === ChartTypes.Pie) { return data.sort((a, b) => b.value - a.value); } // For time series, sort by timestamp so that the table is in chronological order always @@ -110,7 +112,7 @@ const processData = viewContent => { return data; }; -export const getChartTableData = viewContent => { +export const getChartTableData = (viewContent: ViewContent) => { // Because react-table wants its sort function to be memoized, it needs to live here, outside of // the other useMemo hooks const sortByTimestamp = useMemo(() => (rowA, rowB) => diff --git a/packages/ui-chart-components/src/utils/parseChartConfig.js b/packages/ui-chart-components/src/utils/parseChartConfig.ts similarity index 81% rename from packages/ui-chart-components/src/utils/parseChartConfig.js rename to packages/ui-chart-components/src/utils/parseChartConfig.ts index 30ae0cb429..59d8140c9b 100644 --- a/packages/ui-chart-components/src/utils/parseChartConfig.js +++ b/packages/ui-chart-components/src/utils/parseChartConfig.ts @@ -3,8 +3,9 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ - -import { COLOR_PALETTES, CHART_TYPES } from '../constants'; +import { BaseChartConfig } from '@tupaia/types'; +import { COLOR_PALETTES } from '../constants'; +import { ChartTypes, ViewContent } from '../types'; import { isDataKey } from './utils'; const ADD_TO_ALL_KEY = '$all'; @@ -20,7 +21,7 @@ export const getLayeredOpacity = (numberOfLayers, index, ascending = false) => { return ascending ? (index + 1) / numberOfLayers : 1 - index / numberOfLayers; }; -export const parseChartConfig = viewContent => { +export const parseChartConfig = (viewContent: ViewContent) => { const { chartType, chartConfig = {}, data, colorPalette: paletteName } = viewContent; const { [ADD_TO_ALL_KEY]: configForAllKeys, ...restOfConfig } = chartConfig; @@ -41,7 +42,7 @@ export const parseChartConfig = viewContent => { /** * Sets numeric values for each chart config opacity */ -const setOpacityValues = chartConfig => { +const setOpacityValues = (chartConfig: BaseChartConfig): BaseChartConfig => { const newConfig = {}; Object.entries(chartConfig).forEach(([key, configItem], index, array) => { @@ -57,7 +58,11 @@ const setOpacityValues = chartConfig => { }; // Adds default colors for every element with no color defined -const addDefaultColorsToConfig = (chartConfig, paletteName, chartType) => { +const addDefaultColorsToConfig = ( + chartConfig: BaseChartConfig, + paletteName, + chartType: ChartTypes, +) => { const newConfig = {}; const palette = paletteName || getDefaultPaletteName(chartType, Object.keys(chartConfig).length); @@ -77,8 +82,8 @@ const addDefaultColorsToConfig = (chartConfig, paletteName, chartType) => { return newConfig; }; -const getDefaultPaletteName = (chartType, numberRequired) => { - if (chartType === CHART_TYPES.COMPOSED) { +const getDefaultPaletteName = (chartType: ChartTypes, numberRequired: number): string => { + if (chartType === ChartTypes.Composed) { return 'COMPOSED_CHART_COLOR_PALETTE'; } return numberRequired > Object.keys(COLOR_PALETTES.CHART_COLOR_PALETTE).length @@ -88,8 +93,8 @@ const getDefaultPaletteName = (chartType, numberRequired) => { // Used to layer line charts on top of bar charts for composed charts. const CHART_SORT_ORDER = { - [CHART_TYPES.LINE]: 0, - [CHART_TYPES.BAR]: 1, + [ChartTypes.Line]: 0, + [ChartTypes.Bar]: 1, }; const defaultSort = (a, b) => { @@ -97,7 +102,7 @@ const defaultSort = (a, b) => { }; // Bad practice to rely on object ordering: https://stackoverflow.com/questions/9179680/is-it-acceptable-style-for-node-js-libraries-to-rely-on-object-key-order -const sortChartConfigByLegendOrder = chartConfig => { +const sortChartConfigByLegendOrder = (chartConfig: BaseChartConfig) => { return Object.entries(chartConfig) .sort(defaultSort) .sort(([, cfg1], [, cfg2]) => { @@ -115,7 +120,11 @@ const sortChartConfigByLegendOrder = chartConfig => { ); }; -const createDynamicConfig = (chartConfig, dynamicChartConfig, data) => { +const createDynamicConfig = ( + chartConfig: BaseChartConfig, + dynamicChartConfig: BaseChartConfig, + data, +): BaseChartConfig => { // Just find keys. Doesn't include keys which end in _metadata. const dataKeys = data.map(dataPoint => Object.keys(dataPoint).filter(isDataKey)).flat(); const keys = new Set(dataKeys); diff --git a/packages/ui-chart-components/src/utils/useChartDataExport.ts b/packages/ui-chart-components/src/utils/useChartDataExport.ts index 1919e42ac1..f7728e019c 100644 --- a/packages/ui-chart-components/src/utils/useChartDataExport.ts +++ b/packages/ui-chart-components/src/utils/useChartDataExport.ts @@ -3,11 +3,11 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd * */ - import { useDataTableExport } from '@tupaia/ui-components'; import { getChartTableData } from './getChartTableData'; +import { ViewContent } from '../types'; -export const useChartDataExport = (viewContent, title) => { +export const useChartDataExport = (viewContent: ViewContent, title: string) => { const { startDate, endDate } = viewContent ?? {}; const { columns, data } = getChartTableData(viewContent); return useDataTableExport(columns, data, title, startDate, endDate); diff --git a/packages/ui-chart-components/src/utils/utils.ts b/packages/ui-chart-components/src/utils/utils.ts index 56a6dc0382..fb35b5b831 100644 --- a/packages/ui-chart-components/src/utils/utils.ts +++ b/packages/ui-chart-components/src/utils/utils.ts @@ -6,7 +6,7 @@ import moment from 'moment'; import { useTheme } from '@material-ui/core/styles'; import { GRANULARITY_CONFIG } from '@tupaia/utils'; -import { CHART_TYPES } from '../constants'; +import { DataProps, ChartTypes, ViewContent } from '../types'; export const isMobile = () => process.env.REACT_APP_APP_TYPE === 'mobile'; @@ -14,7 +14,7 @@ export const isMobile = () => process.env.REACT_APP_APP_TYPE === 'mobile'; export const formatTimestampForChart = (timestamp, granularity, periodTickFormat) => moment.utc(timestamp).format(periodTickFormat || GRANULARITY_CONFIG[granularity].chartFormat); -export const getIsTimeSeries = data => data && data.length > 0 && data[0]?.timestamp; +export const getIsTimeSeries = (data: DataProps[]) => data && data.length > 0 && data[0]?.timestamp; export const isDataKey = key => !(['name', 'timestamp'].includes(key) || key.substr(-9) === '_metadata'); @@ -24,16 +24,23 @@ export const getContrastTextColor = () => { return theme.palette.type === 'light' ? theme.palette.text.secondary : 'white'; }; -export const getIsChartData = ({ chartType, data }) => { +export const getIsChartData = ({ + chartType, + data, +}: { + chartType: ChartTypes; + data: DataProps[]; +}): boolean => { // If all segments of a pie chart are "0", display the no data message - if (chartType === CHART_TYPES.PIE && data && data.every(segment => segment.value === 0)) { + if (chartType === ChartTypes.Pie && data && data.every(segment => segment.value === 0)) { return false; } return data && data.length > 0; }; -export const getNoDataString = ({ noDataMessage, source, startDate, endDate }) => { +export const getNoDataString = (viewContent: ViewContent) => { + const { noDataMessage, source, startDate, endDate } = viewContent; if (noDataMessage) { return noDataMessage; } diff --git a/yarn.lock b/yarn.lock index 2d91d5c227..86fd5f3b0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5763,6 +5763,7 @@ __metadata: "@material-ui/core": ^4.9.8 "@material-ui/styles": ^4.9.10 "@storybook/react": ^6.3.9 + "@tupaia/types": 1.0.0 "@tupaia/ui-components": 1.0.0 "@tupaia/utils": 1.0.0 "@types/recharts": ^1.8.24 From 6da75a7eb8bc0aa8720766ed2dfbbcbe9831f367 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Wed, 17 May 2023 16:56:20 +1200 Subject: [PATCH 009/251] chart types --- packages/ui-chart-components/package.json | 5 +- .../components/Axes/{XAxis.js => XAxis.tsx} | 38 +++++----- .../components/Axes/{YAxes.js => YAxes.tsx} | 70 +++++++++---------- .../src/components/CartesianChart.tsx | 57 ++++++++------- .../src/components/ChartTable.tsx | 10 +-- .../src/components/Charts/AreaChart.tsx | 2 +- .../src/components/Charts/BarChart.tsx | 2 +- .../src/components/Charts/LineChart.tsx | 2 +- .../src/components/Charts/PieChart.tsx | 69 ++++++------------ .../{ChartTooltip.js => ChartTooltip.tsx} | 4 +- .../Reference/{Legend.js => Legend.tsx} | 0 .../src/constants/propTypes.ts | 13 ---- packages/ui-chart-components/src/types.ts | 48 +++++++++---- .../src/utils/getChartTableData.tsx | 8 +-- yarn.lock | 10 +++ 15 files changed, 165 insertions(+), 173 deletions(-) rename packages/ui-chart-components/src/components/Axes/{XAxis.js => XAxis.tsx} (86%) rename packages/ui-chart-components/src/components/Axes/{YAxes.js => YAxes.tsx} (81%) rename packages/ui-chart-components/src/components/Reference/{ChartTooltip.js => ChartTooltip.tsx} (97%) rename packages/ui-chart-components/src/components/Reference/{Legend.js => Legend.tsx} (100%) diff --git a/packages/ui-chart-components/package.json b/packages/ui-chart-components/package.json index 782aa2bd22..26a1b07b26 100644 --- a/packages/ui-chart-components/package.json +++ b/packages/ui-chart-components/package.json @@ -37,7 +37,8 @@ "devDependencies": { "@material-ui/styles": "^4.9.10", "@storybook/react": "^6.3.9", - "@types/recharts": "^1.8.24", - "@tupaia/types": "1.0.0" + "@tupaia/types": "1.0.0", + "@types/lodash.get": "^4.4.7", + "@types/recharts": "^1.8.24" } } diff --git a/packages/ui-chart-components/src/components/Axes/XAxis.js b/packages/ui-chart-components/src/components/Axes/XAxis.tsx similarity index 86% rename from packages/ui-chart-components/src/components/Axes/XAxis.js rename to packages/ui-chart-components/src/components/Axes/XAxis.tsx index 6b300ce8ff..7baedaee68 100644 --- a/packages/ui-chart-components/src/components/Axes/XAxis.js +++ b/packages/ui-chart-components/src/components/Axes/XAxis.tsx @@ -4,12 +4,11 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; import { Text, XAxis as XAxisComponent } from 'recharts'; import { formatTimestampForChart, getIsTimeSeries, getContrastTextColor } from '../../utils'; import { VerticalTick } from './VerticalTick'; import { DARK_BLUE } from '../../constants'; -import { ChartTypes } from '../../types'; +import { ChartTypes, ViewContent } from '../../types'; const AXIS_TIME_PROPS = { dataKey: 'timestamp', @@ -33,7 +32,7 @@ const X_AXIS_PADDING = { }, }; -const renderXAxisLabel = (label, fillColor, isEnlarged, isExporting) => { +const renderXAxisLabel = (label, fillColor, isEnlarged: boolean, isExporting: boolean) => { if (label && isEnlarged && !isExporting) return { value: label, @@ -46,7 +45,7 @@ const renderXAxisLabel = (label, fillColor, isEnlarged, isExporting) => { const BASE_H = 40; -const calculateXAxisHeight = (data, isExporting) => { +const calculateXAxisHeight = (data, isExporting: boolean) => { if (getIsTimeSeries(data)) { return BASE_H; } @@ -57,7 +56,17 @@ const calculateXAxisHeight = (data, isExporting) => { return BASE_H; }; -export const XAxis = ({ viewContent, isExporting, isEnlarged }) => { +interface XAxisProps { + viewContent: ViewContent; + isEnlarged?: boolean; + isExporting?: boolean; +} + +export const XAxis: React.FC = ({ + viewContent, + isExporting = false, + isEnlarged = false, +}) => { const fillColor = isExporting ? DARK_BLUE : getContrastTextColor(); const { Bar, Composed } = ChartTypes; const { chartType, chartConfig = {}, data } = viewContent; @@ -70,7 +79,7 @@ export const XAxis = ({ viewContent, isExporting, isEnlarged }) => { @see https://recharts.org/en-US/api/YAxis */ const getXAxisTickInterval = () => { - if (chartType === BAR || chartType === COMPOSED) { + if (chartType === Bar || chartType === Composed) { if (isTimeSeries) { return 'preserveStartEnd'; } @@ -110,13 +119,13 @@ export const XAxis = ({ viewContent, isExporting, isEnlarged }) => { if (isExporting) { return renderVerticalTick; } - return isEnlarged || chartType === BAR ? undefined : renderTickFirstAndLastLabel; + return isEnlarged || chartType === Bar ? undefined : renderTickFirstAndLastLabel; }; const getXAxisPadding = () => { const hasBars = - chartType === BAR || - Object.values(chartConfig).some(({ chartType: composedType }) => composedType === BAR); + chartType === Bar || + Object.values(chartConfig).some(({ chartType: composedType }) => composedType === Bar); if (hasBars && data.length > 1 && isTimeSeries) { const paddingKey = isEnlarged ? 'enlarged' : 'preview'; @@ -158,14 +167,3 @@ export const XAxis = ({ viewContent, isExporting, isEnlarged }) => { /> ); }; - -XAxis.propTypes = { - viewContent: PropTypes.object.isRequired, - isExporting: PropTypes.bool, - isEnlarged: PropTypes.bool, -}; - -XAxis.defaultProps = { - isExporting: false, - isEnlarged: false, -}; diff --git a/packages/ui-chart-components/src/components/Axes/YAxes.js b/packages/ui-chart-components/src/components/Axes/YAxes.tsx similarity index 81% rename from packages/ui-chart-components/src/components/Axes/YAxes.js rename to packages/ui-chart-components/src/components/Axes/YAxes.tsx index 1f443be52b..8271a10794 100644 --- a/packages/ui-chart-components/src/components/Axes/YAxes.js +++ b/packages/ui-chart-components/src/components/Axes/YAxes.tsx @@ -4,15 +4,12 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; import { formatDataValueByType } from '@tupaia/utils'; import { YAxis as YAxisComponent } from 'recharts'; import { DARK_BLUE } from '../../constants'; -import { ValueTypes } from '../../types'; +import { ViewContent } from '../../types'; import { getContrastTextColor } from '../../utils'; -const { Percentage } = ValueTypes; - const Y_AXIS_IDS = { left: 0, right: 1, @@ -48,8 +45,8 @@ const parseDomainConfig = config => { } }; -const getDefaultYAxisDomain = viewContent => - viewContent.valueType === Percentage ? PERCENTAGE_Y_DOMAIN : DEFAULT_Y_AXIS.yAxisDomain; +const getDefaultYAxisDomain = (viewContent: ViewContent) => + viewContent.valueType === 'percentage' ? PERCENTAGE_Y_DOMAIN : DEFAULT_Y_AXIS.yAxisDomain; const calculateYAxisDomain = ({ min, max }) => { return [parseDomainConfig(min), parseDomainConfig(max)]; @@ -74,7 +71,7 @@ const renderYAxisLabel = (label, orientation, fillColor, isEnlarged) => { */ const getAxisWidth = (data, dataKeys, valueType) => { // Only use a dynamic width for number types. Otherwise fallback to the recharts default - if (valueType === ValueTypes.Number || valueType === undefined) { + if (valueType === 'number' || valueType === undefined) { const values = data.map(item => dataKeys.map(key => item[key])).flat(); const maxValue = Math.max(...values); @@ -92,8 +89,21 @@ const getAxisWidth = (data, dataKeys, valueType) => { return undefined; }; - -const YAxis = ({ config = {}, viewContent, chartDataConfig, isExporting, isEnlarged }) => { +interface YAxisProps { + viewContent: ViewContent; + config?: object; + chartDataConfig: object; + isEnlarged?: boolean; + isExporting?: boolean; +} + +const YAxis: React.FC = ({ + config = {}, + viewContent, + chartDataConfig, + isExporting = false, + isEnlarged = false, +}) => { const fillColor = isExporting ? DARK_BLUE : getContrastTextColor(); const { @@ -117,7 +127,7 @@ const YAxis = ({ config = {}, viewContent, chartDataConfig, isExporting, isEnlar yAxisId={yAxisId} orientation={orientation} domain={calculateYAxisDomain(yAxisDomain)} - allowDataOverflow={valueType === Percentage || containsClamp(yAxisDomain)} + allowDataOverflow={valueType === 'percentage' || containsClamp(yAxisDomain)} // The above 2 props stop floating point imprecision making Y axis go above 100% in stacked charts. label={renderYAxisLabel(yName || yAxisLabel, orientation, fillColor, isEnlarged)} tickFormatter={value => @@ -136,21 +146,19 @@ const YAxis = ({ config = {}, viewContent, chartDataConfig, isExporting, isEnlar ); }; -YAxis.propTypes = { - config: PropTypes.object, - viewContent: PropTypes.object.isRequired, - chartDataConfig: PropTypes.object.isRequired, - isExporting: PropTypes.bool, - isEnlarged: PropTypes.bool, -}; - -YAxis.defaultProps = { - config: {}, - isExporting: false, - isEnlarged: false, -}; - -export const YAxes = ({ viewContent, chartDataConfig, isExporting, isEnlarged }) => { +interface YAxesProps { + viewContent: ViewContent; + chartDataConfig: object; + isEnlarged?: boolean; + isExporting?: boolean; +} + +export const YAxes: React.FC = ({ + viewContent, + chartDataConfig, + isExporting = false, + isEnlarged = false, +}) => { const { chartConfig = {} } = viewContent; const axisPropsById = { @@ -180,15 +188,3 @@ export const YAxes = ({ viewContent, chartDataConfig, isExporting, isEnlarged }) ? axesProps.map(props => YAxis({ config: props, ...baseProps })) : YAxis(baseProps); }; - -YAxes.propTypes = { - viewContent: PropTypes.object.isRequired, - chartDataConfig: PropTypes.object.isRequired, - isExporting: PropTypes.bool, - isEnlarged: PropTypes.bool, -}; - -YAxes.defaultProps = { - isExporting: false, - isEnlarged: false, -}; diff --git a/packages/ui-chart-components/src/components/CartesianChart.tsx b/packages/ui-chart-components/src/components/CartesianChart.tsx index 99f5f54219..858fd61c0e 100644 --- a/packages/ui-chart-components/src/components/CartesianChart.tsx +++ b/packages/ui-chart-components/src/components/CartesianChart.tsx @@ -31,10 +31,10 @@ import { XAxis as XAxisComponent, YAxes } from './Axes'; const { Area, Bar, Composed, Line } = ChartTypes; // Orientation of the axis is used as an alias for its id -const Y_AXIS_IDS = { - left: 0, - right: 1, -}; +enum Y_AXIS_IDS { + left = 0, + right = 1, +} const DEFAULT_Y_AXIS = { id: Y_AXIS_IDS.left, @@ -45,7 +45,8 @@ const DEFAULT_Y_AXIS = { }, }; -const orientationToYAxisId = orientation => Y_AXIS_IDS[orientation] || DEFAULT_Y_AXIS.id; +const orientationToYAxisId = (orientation: 'left' | 'right'): number => + Y_AXIS_IDS[orientation] || DEFAULT_Y_AXIS.id; const LEGEND_ALL_DATA_KEY = 'LEGEND_ALL_DATA_KEY'; @@ -69,7 +70,7 @@ const CHART_TYPE_TO_CHART = { [Line]: LineChartComponent, }; -const getRealDataKeys = (chartConfig: BaseChartConfig) => +const getRealDataKeys = (chartConfig: BaseChartConfig | {}) => Object.keys(chartConfig).filter(key => key !== LEGEND_ALL_DATA_KEY); const getLegendAlignment = (legendPosition: string, isExporting: boolean) => { @@ -89,7 +90,7 @@ const getHeight = (isExporting: boolean, isEnlarged: boolean, hasLegend: boolean return isEnlarged && hasLegend && isMobile() ? 320 : undefined; }; -const getMargin = (isExporting: string, isEnlarged: boolean) => { +const getMargin = (isExporting: boolean, isEnlarged: boolean) => { if (isExporting) { return { left: 20, right: 20, top: 20, bottom: 60 }; } @@ -114,8 +115,10 @@ export const CartesianChart: React.FC = ({ isExporting = false, legendPosition = 'bottom', }) => { - const [chartConfig, setChartConfig] = useState(viewContent.chartConfig || {}); - const [activeDataKeys, setActiveDataKeys] = useState([]); + const [chartConfig, setChartConfig] = useState( + viewContent.chartConfig || {}, + ); + const [activeDataKeys, setActiveDataKeys] = useState([]); // eslint-disable-next-line no-unused-vars const [_, setLoaded] = useState(false); @@ -137,48 +140,50 @@ export const CartesianChart: React.FC = ({ referenceAreas, } = viewContent; - const getIsActiveKey = legendDatakey => + const getIsActiveKey = (legendDataKey: string) => activeDataKeys.length === 0 || - activeDataKeys.includes(legendDatakey) || - legendDatakey === LEGEND_ALL_DATA_KEY; + activeDataKeys.includes(legendDataKey) || + legendDataKey === LEGEND_ALL_DATA_KEY; - const updateChartConfig = hasDisabledData => { + const updateChartConfig = (hasDisabledData: boolean) => { const newChartConfig = { ...chartConfig }; - if (hasDisabledData && !chartConfig[LEGEND_ALL_DATA_KEY]) { + if (hasDisabledData && !chartConfig.hasOwnProperty(LEGEND_ALL_DATA_KEY)) { const allChartType = Object.values(chartConfig)[0].chartType || defaultChartType || 'line'; newChartConfig[LEGEND_ALL_DATA_KEY] = { ...LEGEND_ALL_DATA, chartType: allChartType }; setChartConfig(newChartConfig); - } else if (!hasDisabledData && chartConfig[LEGEND_ALL_DATA_KEY]) { + } else if (!hasDisabledData && chartConfig.hasOwnProperty(LEGEND_ALL_DATA_KEY)) { delete newChartConfig[LEGEND_ALL_DATA_KEY]; setChartConfig(newChartConfig); } }; - const onLegendClick = legendDatakey => { + const onLegendClick = (legendDataKey: string) => { const actionWillSelectAllKeys = activeDataKeys.length + 1 >= getRealDataKeys(chartConfig).length && - !activeDataKeys.includes(legendDatakey); + !activeDataKeys.includes(legendDataKey); - if (legendDatakey === LEGEND_ALL_DATA_KEY || actionWillSelectAllKeys) { + if (legendDataKey === LEGEND_ALL_DATA_KEY || actionWillSelectAllKeys) { setActiveDataKeys([]); return; } // Note, may be false even if the dataKey is active - if (activeDataKeys.includes(legendDatakey)) { - setActiveDataKeys(activeDataKeys.filter(dk => dk !== legendDatakey)); + if (activeDataKeys.includes(legendDataKey)) { + setActiveDataKeys(activeDataKeys.filter(dk => dk !== legendDataKey)); } else { - setActiveDataKeys([...activeDataKeys, legendDatakey]); + setActiveDataKeys([...activeDataKeys, legendDataKey]); } }; - const filterDisabledData = data => { + const filterDisabledData = (data: object[]) => { // Can't disable data without chartConfig - if (!Object.keys(chartConfig).length === 0) return data; + if (Object.keys(chartConfig).length === 0) { + return data; + } const hasDisabledData = activeDataKeys.length >= 1; - updateChartConfig(hasDisabledData, viewContent); + updateChartConfig(hasDisabledData); return hasDisabledData ? data.map(dataSeries => @@ -207,7 +212,7 @@ export const CartesianChart: React.FC = ({ {referenceAreas && referenceAreas.map(areaProps => )} {XAxisComponent({ isEnlarged, isExporting, viewContent })} @@ -257,7 +262,7 @@ export const CartesianChart: React.FC = ({ }); })} {ReferenceLines({ viewContent, isExporting, isEnlarged })} - {defaultChartType === BAR && data.length > 20 && !isExporting && isEnlarged && ( + {defaultChartType === Bar && data.length > 20 && !isExporting && isEnlarged && ( )} diff --git a/packages/ui-chart-components/src/components/ChartTable.tsx b/packages/ui-chart-components/src/components/ChartTable.tsx index 47f619debe..1c8726b21e 100644 --- a/packages/ui-chart-components/src/components/ChartTable.tsx +++ b/packages/ui-chart-components/src/components/ChartTable.tsx @@ -9,11 +9,6 @@ import { DataTable, SmallAlert } from '@tupaia/ui-components'; import { ViewContent } from '../types'; import { getChartTableData, getIsChartData, getNoDataString } from '../utils'; -interface ChartTableProps { - viewContent?: ViewContent; - className?: string; -} - const TableContainer = styled(MuiTableContainer)` overflow: auto; `; @@ -24,6 +19,11 @@ const NoData = styled(SmallAlert)` margin-right: auto; `; +interface ChartTableProps { + viewContent: ViewContent; + className?: string; +} + export const ChartTable: React.FC = ({ viewContent, className }) => { const { columns, data } = getChartTableData(viewContent); diff --git a/packages/ui-chart-components/src/components/Charts/AreaChart.tsx b/packages/ui-chart-components/src/components/Charts/AreaChart.tsx index 9b1dc72d60..3d30a5452d 100644 --- a/packages/ui-chart-components/src/components/Charts/AreaChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/AreaChart.tsx @@ -10,7 +10,7 @@ import { BLUE } from '../../constants'; interface AreaChartProps { color?: string; dataKey: string; - yAxisId: string; + yAxisId: string | number; isEnlarged?: boolean; isExporting?: boolean; } diff --git a/packages/ui-chart-components/src/components/Charts/BarChart.tsx b/packages/ui-chart-components/src/components/Charts/BarChart.tsx index df33bd92f8..041c4f2b1f 100644 --- a/packages/ui-chart-components/src/components/Charts/BarChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/BarChart.tsx @@ -19,7 +19,7 @@ interface DataProps { interface BarChartProps { dataKey: string; - yAxisId: string; + yAxisId: string | number; stackId: string; valueType: string; color?: string; diff --git a/packages/ui-chart-components/src/components/Charts/LineChart.tsx b/packages/ui-chart-components/src/components/Charts/LineChart.tsx index c76d4d663f..9b92a8b611 100644 --- a/packages/ui-chart-components/src/components/Charts/LineChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/LineChart.tsx @@ -10,7 +10,7 @@ import { BLUE, DARK_BLUE } from '../../constants'; interface LineChartProps { dataKey: string; opacity?: string; - yAxisId: string; + yAxisId: string | number; valueType: string; color?: string; isExporting?: boolean; diff --git a/packages/ui-chart-components/src/components/Charts/PieChart.tsx b/packages/ui-chart-components/src/components/Charts/PieChart.tsx index ca7d9dfbbd..d5b2e06f9b 100644 --- a/packages/ui-chart-components/src/components/Charts/PieChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/PieChart.tsx @@ -2,30 +2,7 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - -/** - * PieChart - * - * Renders a recharts PieChart from data provided by viewContent object - * @prop {object} viewContent An object with the following structure - { - "type":"chart", - "chartType":"pie", - "name":"% Stock on Hand", - "valueType": "percentage", - "presentationOptions": { - "sectorKey1": { "color": "#111111", "label": "Satanic" }, - "sectorKey2": { "color": "#222222", "label": "Nesting" }, - "sectorKey3": { "color": "#333333", "label": "HelpMe" } - }, - "data":[{ name: "Total value stock consumables", value:24063409.4 }, - { name: "Total value stock medicines", value:24565440.6 }, - ...] - } - */ - import React, { useState, useEffect } from 'react'; -import PropTypes from 'prop-types'; import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import { formatDataValueByType } from '@tupaia/utils'; @@ -37,10 +14,11 @@ import { ResponsiveContainer, Tooltip, } from 'recharts'; -import { OFF_WHITE, CHART_COLOR_PALETTE, VIEW_CONTENT_SHAPE } from '../../constants'; +import { OFF_WHITE, CHART_COLOR_PALETTE } from '../../constants'; import { getPieLegend } from '../Reference/Legend'; import { isMobile } from '../../utils'; import { TooltipContainer } from '../Reference'; +import { ViewContent } from '../../types'; const Heading = styled(Typography)` font-weight: 500; @@ -69,7 +47,7 @@ const Text = styled(Typography)` color: #333; `; -const getLegendAlignment = (legendPosition, isExporting) => { +const getLegendAlignment = (legendPosition: string, isExporting: boolean) => { if (isExporting) { return { verticalAlign: 'top', align: 'right', layout: 'vertical' }; } @@ -79,7 +57,7 @@ const getLegendAlignment = (legendPosition, isExporting) => { return { verticalAlign: 'top', align: 'left' }; }; -const getFormattedValue = (viewContent, data) => { +const getFormattedValue = (viewContent: ViewContent, data) => { const { valueType, labelType } = viewContent; const valueTypeForLabel = labelType || valueType; const { name, value, originalItem } = data; @@ -88,9 +66,7 @@ const getFormattedValue = (viewContent, data) => { return formatDataValueByType({ value, metadata }, valueTypeForLabel); }; -const makeCustomTooltip = viewContent => props => { - const { active, payload } = props; - +const makeCustomTooltip = (viewContent: ViewContent) => ({ active, payload }) => { if (!active || !payload || !payload.length) { return null; } @@ -109,21 +85,33 @@ const makeCustomTooltip = viewContent => props => { ); }; -const makeLabel = viewContent => props => { - const { payload } = props; +const makeLabel = (viewContent: ViewContent) => ({ payload }) => { return getFormattedValue(viewContent, payload.payload); }; const chartColorAtIndex = (colorArray, index) => colorArray[index % colorArray.length]; -const getHeight = (isExporting, isEnlarged) => { +const getHeight = (isExporting: boolean, isEnlarged: boolean) => { if (isExporting) { return 420; } return isEnlarged && isMobile() ? 320 : undefined; }; -export const PieChart = ({ viewContent, isExporting, isEnlarged, onItemClick, legendPosition }) => { +interface PieChartProps { + viewContent: ViewContent; + isEnlarged?: boolean; + isExporting?: boolean; + onItemClick?: (item: any) => void; + legendPosition?: string; +} +export const PieChart: React.FC = ({ + viewContent, + isExporting = false, + isEnlarged = false, + onItemClick = () => {}, + legendPosition = 'bottom', +}) => { const [activeIndex, setActiveIndex] = useState(-1); const { presentationOptions, data } = viewContent; // eslint-disable-next-line no-unused-vars @@ -217,18 +205,3 @@ export const PieChart = ({ viewContent, isExporting, isEnlarged, onItemClick, le ); }; - -PieChart.propTypes = { - viewContent: PropTypes.shape(VIEW_CONTENT_SHAPE).isRequired, - isEnlarged: PropTypes.bool, - isExporting: PropTypes.bool, - onItemClick: PropTypes.func, - legendPosition: PropTypes.string, -}; - -PieChart.defaultProps = { - isEnlarged: false, - isExporting: false, - onItemClick: () => {}, - legendPosition: 'bottom', -}; diff --git a/packages/ui-chart-components/src/components/Reference/ChartTooltip.js b/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx similarity index 97% rename from packages/ui-chart-components/src/components/Reference/ChartTooltip.js rename to packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx index 64012e50df..89417b1a7a 100644 --- a/packages/ui-chart-components/src/components/Reference/ChartTooltip.js +++ b/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx @@ -10,7 +10,7 @@ import Typography from '@material-ui/core/Typography'; import PropTypes from 'prop-types'; import { formatDataValueByType } from '@tupaia/utils'; import { PRESENTATION_OPTIONS_SHAPE } from '../../constants'; -import { ChartTypes, ValueTypes } from '../../types'; +import { ChartTypes, ValueType } from '../../types'; import { formatTimestampForChart, getIsTimeSeries } from '../../utils'; import { TooltipContainer } from './TooltipContainer'; @@ -169,7 +169,7 @@ export const ChartTooltip = props => { }; ChartTooltip.propTypes = { - valueType: PropTypes.oneOf(Object.values(ValueTypes)), + valueType: PropTypes.oneOf(Object.values(ValueType)), presentationOptions: PropTypes.shape(PRESENTATION_OPTIONS_SHAPE), payload: PropTypes.array, }; diff --git a/packages/ui-chart-components/src/components/Reference/Legend.js b/packages/ui-chart-components/src/components/Reference/Legend.tsx similarity index 100% rename from packages/ui-chart-components/src/components/Reference/Legend.js rename to packages/ui-chart-components/src/components/Reference/Legend.tsx diff --git a/packages/ui-chart-components/src/constants/propTypes.ts b/packages/ui-chart-components/src/constants/propTypes.ts index 8f269faa77..0108066134 100644 --- a/packages/ui-chart-components/src/constants/propTypes.ts +++ b/packages/ui-chart-components/src/constants/propTypes.ts @@ -4,19 +4,6 @@ */ import PropTypes from 'prop-types'; -export const VIEW_CONTENT_SHAPE = { - noDataMessage: PropTypes.string, - source: PropTypes.string, - startDate: PropTypes.string, - endDate: PropTypes.string, - type: PropTypes.string, - viewType: PropTypes.string, // Required if type = 'view' - chartType: PropTypes.string, // Required if type = 'chart' - name: PropTypes.string, - data: PropTypes.arrayOf(PropTypes.object), - periodGranularity: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), -}; - export const CONDITIONAL_MATRIX_CONDITION_SHAPE = { key: PropTypes.string.isRequired, color: PropTypes.string.isRequired, diff --git a/packages/ui-chart-components/src/types.ts b/packages/ui-chart-components/src/types.ts index ae14e67eb7..79a0122250 100644 --- a/packages/ui-chart-components/src/types.ts +++ b/packages/ui-chart-components/src/types.ts @@ -2,6 +2,9 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +import { BaseChartConfig } from '@tupaia/types'; +import { ReferenceAreaProps } from 'recharts'; + // Todo: move some of these types to @tupaia/types and integrate export interface DataProps { name: string; @@ -18,10 +21,26 @@ export enum ChartTypes { Gauge = 'gauge', } +/** + * { + * "type":"chart", + * "chartType":"pie", + * "name":"% Stock on Hand", + * "valueType": "percentage", + * "presentationOptions": { + * "sectorKey1": { "color": "#111111", "label": "Satanic" }, + * "sectorKey2": { "color": "#222222", "label": "Nesting" }, + * "sectorKey3": { "color": "#333333", "label": "HelpMe" } + * }, + * "data":[{ name: "Total value stock consumables", value:24063409.4 }, + * { name: "Total value stock medicines", value:24565440.6 }, + * ...] + * } + */ // Todo: add period granularity to this type export type ViewContent = { chartType: ChartTypes; - valueType?: ValueTypes; + valueType?: ValueType; name?: string; xName?: string; noDataMessage?: string; @@ -32,17 +51,20 @@ export type ViewContent = { periodGranularity?: string; labelType?: string; data: DataProps[]; - chartConfig?: object; + chartConfig?: BaseChartConfig; + presentationOptions?: object; + renderLegendForOneItem?: boolean; + referenceAreas?: ReferenceAreaProps[]; }; -export enum ValueTypes { - Boolean = 'boolean', - Currency = 'currency', - Fraction = 'fraction', - Percentage = 'percentage', - FractionAndPercentage = 'fractionAndPercentage', - NumberAndPercentage = 'numberAndPercentage', - Text = 'text', - Number = 'number', - OneDecimalPlace = 'oneDecimalPlace', -} +export type ValueType = + | 'boolean' + | 'fractionAndPercentage' + | 'percentage' + | 'text' + | 'number' + | 'color' + | 'currency' + | 'view' + | 'oneDecimalPlace' + | 'fraction'; diff --git a/packages/ui-chart-components/src/utils/getChartTableData.tsx b/packages/ui-chart-components/src/utils/getChartTableData.tsx index 34ecf1b33c..42c5d42e46 100644 --- a/packages/ui-chart-components/src/utils/getChartTableData.tsx +++ b/packages/ui-chart-components/src/utils/getChartTableData.tsx @@ -9,14 +9,14 @@ import { DEFAULT_DATA_KEY } from '../constants'; import { ChartTypes } from '../types'; import { formatTimestampForChart, getIsTimeSeries } from './utils'; import { parseChartConfig } from './parseChartConfig'; -import { ValueTypes, ViewContent } from '../types'; +import { ValueType, ViewContent } from '../types'; // For the rowData, ignore labelType and use percentage instead of fractionAndPercentage as // we don't want to show multiple values a table cell -const sanitizeValueType = (valueType: ValueTypes): ValueTypes => { - return valueType === ValueTypes.FractionAndPercentage ? ValueTypes.Percentage : valueType; +const sanitizeValueType = (valueType: ValueType): ValueType => { + return valueType === 'fractionAndPercentage' ? 'percentage' : valueType; }; -const getFormattedValue = (value: string | undefined, valueType: ValueTypes): any => +const getFormattedValue = (value: string | undefined, valueType: ValueType): any => value === undefined ? 'No Data' : formatDataValueByType({ value }, sanitizeValueType(valueType)); const FirstColumnCell = styled.span` diff --git a/yarn.lock b/yarn.lock index 86fd5f3b0e..17d6a6e34c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5766,6 +5766,7 @@ __metadata: "@tupaia/types": 1.0.0 "@tupaia/ui-components": 1.0.0 "@tupaia/utils": 1.0.0 + "@types/lodash.get": ^4.4.7 "@types/recharts": ^1.8.24 lodash.get: ^4.4.2 moment: ^2.29.1 @@ -6456,6 +6457,15 @@ __metadata: languageName: node linkType: hard +"@types/lodash.get@npm:^4.4.7": + version: 4.4.7 + resolution: "@types/lodash.get@npm:4.4.7" + dependencies: + "@types/lodash": "*" + checksum: 0dbf1960606e4707c34e8ffbe97ffaad0e47fc5df7a6e24ea6e4fe5838d2468aa13360f38815c77b06e3c9932631ae15662b4139036a69ee16aeb54827a21405 + languageName: node + linkType: hard + "@types/lodash.groupby@npm:^4.6.0": version: 4.6.6 resolution: "@types/lodash.groupby@npm:4.6.6" From 906749e90bef955996e61d981748c9377c7405ce Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Thu, 18 May 2023 17:28:00 +1200 Subject: [PATCH 010/251] update chart config --- .../src/components/Axes/XAxis.tsx | 26 +++++++++++------ .../src/components/CartesianChart.tsx | 4 +-- .../src/components/Chart.tsx | 10 +++---- .../src/components/Charts/BarChart.tsx | 8 ++--- .../src/components/Charts/GaugeChart.tsx | 13 +++++---- .../src/components/Charts/PieChart.tsx | 19 +++++++----- .../src/components/Reference/ChartTooltip.tsx | 6 ++-- .../components/Reference/ReferenceLines.js | 4 +-- packages/ui-chart-components/src/types.ts | 23 +++++++++++++-- .../src/utils/getChartTableData.tsx | 4 +-- .../src/utils/parseChartConfig.ts | 29 ++++++++----------- .../ui-chart-components/src/utils/utils.ts | 16 ++++++---- 12 files changed, 97 insertions(+), 65 deletions(-) diff --git a/packages/ui-chart-components/src/components/Axes/XAxis.tsx b/packages/ui-chart-components/src/components/Axes/XAxis.tsx index 7baedaee68..1f8ac9250c 100644 --- a/packages/ui-chart-components/src/components/Axes/XAxis.tsx +++ b/packages/ui-chart-components/src/components/Axes/XAxis.tsx @@ -8,7 +8,7 @@ import { Text, XAxis as XAxisComponent } from 'recharts'; import { formatTimestampForChart, getIsTimeSeries, getContrastTextColor } from '../../utils'; import { VerticalTick } from './VerticalTick'; import { DARK_BLUE } from '../../constants'; -import { ChartTypes, ViewContent } from '../../types'; +import { ChartType, DataProps, ViewContent } from '../../types'; const AXIS_TIME_PROPS = { dataKey: 'timestamp', @@ -32,20 +32,26 @@ const X_AXIS_PADDING = { }, }; -const renderXAxisLabel = (label, fillColor, isEnlarged: boolean, isExporting: boolean) => { - if (label && isEnlarged && !isExporting) +const renderXAxisLabel = ( + label: string | number | undefined, + fillColor: string | undefined, + isEnlarged: boolean, + isExporting: boolean, +) => { + if (label && isEnlarged && !isExporting) { return { value: label, fill: fillColor, offset: -5, position: 'insideBottom', }; - return null; + } + return undefined; }; const BASE_H = 40; -const calculateXAxisHeight = (data, isExporting: boolean) => { +const calculateXAxisHeight = (data: DataProps[], isExporting: boolean) => { if (getIsTimeSeries(data)) { return BASE_H; } @@ -68,7 +74,7 @@ export const XAxis: React.FC = ({ isEnlarged = false, }) => { const fillColor = isExporting ? DARK_BLUE : getContrastTextColor(); - const { Bar, Composed } = ChartTypes; + const { Bar, Composed } = ChartType; const { chartType, chartConfig = {}, data } = viewContent; const axisHeight = calculateXAxisHeight(data, isExporting); const isTimeSeries = getIsTimeSeries(data); @@ -90,7 +96,7 @@ export const XAxis: React.FC = ({ return isEnlarged ? 'preserveStartEnd' : 0; }; - const formatXAxisTick = tickData => { + const formatXAxisTick = (tickData: number) => { const { periodGranularity, presentationOptions = {} } = viewContent; const { periodTickFormat } = presentationOptions; @@ -99,7 +105,7 @@ export const XAxis: React.FC = ({ : tickData; }; - const renderTickFirstAndLastLabel = tickProps => { + const renderTickFirstAndLastLabel = (tickProps: any) => { const { index, payload } = tickProps; // Only render first and last ticks labels, the rest just have a tick mark without text @@ -125,6 +131,7 @@ export const XAxis: React.FC = ({ const getXAxisPadding = () => { const hasBars = chartType === Bar || + // @ts-ignore Object.values(chartConfig).some(({ chartType: composedType }) => composedType === Bar); if (hasBars && data.length > 1 && isTimeSeries) { @@ -137,7 +144,7 @@ export const XAxis: React.FC = ({ return { left: 0, right: 10 }; }; - const renderVerticalTick = tickProps => { + const renderVerticalTick = (tickProps: any) => { const { payload, ...restOfProps } = tickProps; return ( @@ -155,6 +162,7 @@ export const XAxis: React.FC = ({ return ( { : { ...viewContent, data: massagedData }; }; -const getChartComponent = (chartType: ChartTypes) => { +const getChartComponent = (chartType: ChartType) => { switch (chartType) { - case ChartTypes.Pie: + case ChartType.Pie: return PieChart; - case ChartTypes.Gauge: + case ChartType.Gauge: return GaugeChart; default: return CartesianChart; @@ -97,7 +97,7 @@ export const Chart: React.FC = ({ }) => { const { chartType } = viewContent; - if (!Object.values(ChartTypes).includes(chartType)) { + if (!Object.values(ChartType).includes(chartType)) { return ; } diff --git a/packages/ui-chart-components/src/components/Charts/BarChart.tsx b/packages/ui-chart-components/src/components/Charts/BarChart.tsx index 041c4f2b1f..5897740e84 100644 --- a/packages/ui-chart-components/src/components/Charts/BarChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/BarChart.tsx @@ -5,10 +5,10 @@ import React from 'react'; import { Bar, LabelList } from 'recharts'; -import { BarChartConfig } from '@tupaia/types'; +import { BarChartConfig, ComposedChartConfig } from '@tupaia/types'; import { formatDataValueByType } from '@tupaia/utils'; import { BLUE } from '../../constants'; -import { ChartTypes } from '../../types'; +import { ChartType } from '../../types'; import { getIsTimeSeries } from '../../utils'; interface DataProps { @@ -26,7 +26,7 @@ interface BarChartProps { data: DataProps[]; isEnlarged?: boolean; isExporting?: boolean; - chartConfig: BarChartConfig; + chartConfig: BarChartConfig | ComposedChartConfig; exportWithLabels?: boolean; } @@ -43,7 +43,7 @@ export const BarChart: React.FC = ({ exportWithLabels = true, }) => { const getBarSize = () => { - if (chartConfig.chartType === ChartTypes.Composed || data.length === 1) { + if (chartConfig.chartType === ChartType.Composed || data.length === 1) { return isEnlarged ? 100 : 50; } // Too many stacks will automatically set bar size to 0. diff --git a/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx b/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx index c5dab0fd79..20e3d4b329 100644 --- a/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx @@ -12,6 +12,7 @@ import { ResponsiveContainer, Label, Text as RechartText, + LabelProps, } from 'recharts'; import { BLUE, TRANS_BLACK, WHITE } from '../../constants'; import { isMobile } from '../../utils'; @@ -27,12 +28,13 @@ interface GaugeChartProps { onItemClick?: (item: any) => void; } -const Text = styled(RechartText)`<{ $fontSize: string; $isExporting: boolean }> - font-size: ${p => p.$fontSize}; +const Text = styled(RechartText)<{ $fontSize: string | number | undefined; $isExporting: boolean }>` + font-size: ${({ $fontSize }) => $fontSize}; font-weight: bold; fill: ${({ theme, $isExporting }) => { return theme.palette.type === 'light' || $isExporting ? TRANS_BLACK : WHITE; - }};`; + }}; +`; const getHeight = (isExporting?: boolean, isEnlarged?: boolean) => { if (isExporting) { @@ -70,7 +72,7 @@ export const GaugeChart: React.FC = ({ const innerRadius = 60 * responsiveStyle; const outerRadius = innerRadius * 1.4; - const getLabelContent = ({ value, x, y, fontSize }) => { + const getLabelContent = ({ value, x, y, fontSize }: LabelProps) => { const positioningProps = { x, y, @@ -78,6 +80,7 @@ export const GaugeChart: React.FC = ({ verticalAnchor: 'middle', }; return ( + // @ts-ignore {value} @@ -85,7 +88,7 @@ export const GaugeChart: React.FC = ({ }; return ( - + { return { verticalAlign: 'top', align: 'left' }; }; -const getFormattedValue = (viewContent: ViewContent, data) => { +const getFormattedValue = (viewContent: ViewContent, data: any) => { const { valueType, labelType } = viewContent; const valueTypeForLabel = labelType || valueType; const { name, value, originalItem } = data; @@ -66,7 +68,7 @@ const getFormattedValue = (viewContent: ViewContent, data) => { return formatDataValueByType({ value, metadata }, valueTypeForLabel); }; -const makeCustomTooltip = (viewContent: ViewContent) => ({ active, payload }) => { +const makeCustomTooltip = (viewContent: ViewContent) => ({ active, payload }: TooltipProps) => { if (!active || !payload || !payload.length) { return null; } @@ -85,11 +87,12 @@ const makeCustomTooltip = (viewContent: ViewContent) => ({ active, payload }) => ); }; -const makeLabel = (viewContent: ViewContent) => ({ payload }) => { +const makeLabel = (viewContent: ViewContent) => ({ payload }: any) => { return getFormattedValue(viewContent, payload.payload); }; -const chartColorAtIndex = (colorArray, index) => colorArray[index % colorArray.length]; +const chartColorAtIndex = (colorArray: string[], index: number) => + colorArray[index % colorArray.length]; const getHeight = (isExporting: boolean, isEnlarged: boolean) => { if (isExporting) { @@ -125,7 +128,7 @@ export const PieChart: React.FC = ({ }, 50); }, []); - const handleMouseEnter = (event, index) => { + const handleMouseEnter = (event: React.MouseEvent, index: number) => { setActiveIndex(index); }; @@ -133,8 +136,10 @@ export const PieChart: React.FC = ({ setActiveIndex(-1); }; - const getPresentationOption = (key, option) => - presentationOptions && presentationOptions[key] && presentationOptions[key][option]; + const getPresentationOption = (key: string, option: string) => + !!presentationOptions && + presentationOptions.hasOwnProperty(key) && + presentationOptions[key][option]; const getValidData = () => data diff --git a/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx b/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx index 89417b1a7a..9065c028c6 100644 --- a/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx +++ b/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx @@ -10,7 +10,7 @@ import Typography from '@material-ui/core/Typography'; import PropTypes from 'prop-types'; import { formatDataValueByType } from '@tupaia/utils'; import { PRESENTATION_OPTIONS_SHAPE } from '../../constants'; -import { ChartTypes, ValueType } from '../../types'; +import { ChartType, ValueType } from '../../types'; import { formatTimestampForChart, getIsTimeSeries } from '../../utils'; import { TooltipContainer } from './TooltipContainer'; @@ -69,10 +69,10 @@ const MultiValueTooltip = ({ const { name: headline, timestamp } = data; if (chartType) { - if (chartType === ChartTypes.Bar) { + if (chartType === ChartType.Bar) { payload.reverse(); } - if (chartType === ChartTypes.Line) { + if (chartType === ChartType.Line) { payload.sort((obj1, obj2) => obj2.value - obj1.value); } } diff --git a/packages/ui-chart-components/src/components/Reference/ReferenceLines.js b/packages/ui-chart-components/src/components/Reference/ReferenceLines.js index 972dc188b5..ac21610235 100644 --- a/packages/ui-chart-components/src/components/Reference/ReferenceLines.js +++ b/packages/ui-chart-components/src/components/Reference/ReferenceLines.js @@ -8,7 +8,7 @@ import PropTypes from 'prop-types'; import { ReferenceLine } from 'recharts'; import { formatDataValueByType } from '@tupaia/utils'; import { TUPAIA_ORANGE } from '../../constants'; -import { ChartTypes } from '../../types'; +import { ChartType } from '../../types'; import { ReferenceLabel } from './ReferenceLabel'; const ReferenceLineLabel = ({ referenceLineLabel, isExporting }) => { @@ -124,7 +124,7 @@ const BarReferenceLine = ({ viewContent, isExporting, isEnlarged }) => { }; export const ReferenceLines = ({ viewContent, isExporting, isEnlarged }) => { - if (viewContent.chartType === ChartTypes.Bar) { + if (viewContent.chartType === ChartType.Bar) { return BarReferenceLine({ viewContent, isExporting, isEnlarged }); } return ValueReferenceLine({ viewContent, isExporting, isEnlarged }); diff --git a/packages/ui-chart-components/src/types.ts b/packages/ui-chart-components/src/types.ts index 79a0122250..136dfb5cc2 100644 --- a/packages/ui-chart-components/src/types.ts +++ b/packages/ui-chart-components/src/types.ts @@ -12,7 +12,7 @@ export interface DataProps { timestamp?: string; } -export enum ChartTypes { +export enum ChartType { Area = 'area', Bar = 'bar', Composed = 'composed', @@ -38,8 +38,25 @@ export enum ChartTypes { * } */ // Todo: add period granularity to this type + +export type VizPeriodGranularity = + | 'day' + | 'one_day_at_a_time' + | 'week' + | 'one_week_at_a_time' + | 'month' + | 'one_month_at_a_time' + | 'quarter' + | 'one_quarter_at_a_time' + | 'year' + | 'one_year_at_a_time'; + +type PresentationOptions = { + periodTickFormat?: string; +}; + export type ViewContent = { - chartType: ChartTypes; + chartType: ChartType; valueType?: ValueType; name?: string; xName?: string; @@ -52,7 +69,7 @@ export type ViewContent = { labelType?: string; data: DataProps[]; chartConfig?: BaseChartConfig; - presentationOptions?: object; + presentationOptions?: PresentationOptions; renderLegendForOneItem?: boolean; referenceAreas?: ReferenceAreaProps[]; }; diff --git a/packages/ui-chart-components/src/utils/getChartTableData.tsx b/packages/ui-chart-components/src/utils/getChartTableData.tsx index 42c5d42e46..7bdcc24315 100644 --- a/packages/ui-chart-components/src/utils/getChartTableData.tsx +++ b/packages/ui-chart-components/src/utils/getChartTableData.tsx @@ -6,7 +6,7 @@ import React, { useMemo } from 'react'; import styled from 'styled-components'; import { formatDataValueByType } from '@tupaia/utils'; import { DEFAULT_DATA_KEY } from '../constants'; -import { ChartTypes } from '../types'; +import { ChartType } from '../types'; import { formatTimestampForChart, getIsTimeSeries } from './utils'; import { parseChartConfig } from './parseChartConfig'; import { ValueType, ViewContent } from '../types'; @@ -101,7 +101,7 @@ const processData = (viewContent: ViewContent) => { const { data, chartType } = viewContent; - if (chartType === ChartTypes.Pie) { + if (chartType === ChartType.Pie) { return data.sort((a, b) => b.value - a.value); } // For time series, sort by timestamp so that the table is in chronological order always diff --git a/packages/ui-chart-components/src/utils/parseChartConfig.ts b/packages/ui-chart-components/src/utils/parseChartConfig.ts index 59d8140c9b..5f5bce13ab 100644 --- a/packages/ui-chart-components/src/utils/parseChartConfig.ts +++ b/packages/ui-chart-components/src/utils/parseChartConfig.ts @@ -5,21 +5,16 @@ */ import { BaseChartConfig } from '@tupaia/types'; import { COLOR_PALETTES } from '../constants'; -import { ChartTypes, ViewContent } from '../types'; +import { ChartType, ViewContent } from '../types'; import { isDataKey } from './utils'; const ADD_TO_ALL_KEY = '$all'; -/** - * - * @param {number} numberOfLayers - * @param {number} index - * @param {boolean = false} ascending - * @returns {number} opacity value - */ -export const getLayeredOpacity = (numberOfLayers, index, ascending = false) => { - return ascending ? (index + 1) / numberOfLayers : 1 - index / numberOfLayers; -}; +export const getLayeredOpacity = ( + numberOfLayers: number, + index: number, + ascending: boolean = false, +) => (ascending ? (index + 1) / numberOfLayers : 1 - index / numberOfLayers); export const parseChartConfig = (viewContent: ViewContent) => { const { chartType, chartConfig = {}, data, colorPalette: paletteName } = viewContent; @@ -60,8 +55,8 @@ const setOpacityValues = (chartConfig: BaseChartConfig): BaseChartConfig => { // Adds default colors for every element with no color defined const addDefaultColorsToConfig = ( chartConfig: BaseChartConfig, - paletteName, - chartType: ChartTypes, + paletteName: string, + chartType: ChartType, ) => { const newConfig = {}; @@ -82,8 +77,8 @@ const addDefaultColorsToConfig = ( return newConfig; }; -const getDefaultPaletteName = (chartType: ChartTypes, numberRequired: number): string => { - if (chartType === ChartTypes.Composed) { +const getDefaultPaletteName = (chartType: ChartType, numberRequired: number): string => { + if (chartType === ChartType.Composed) { return 'COMPOSED_CHART_COLOR_PALETTE'; } return numberRequired > Object.keys(COLOR_PALETTES.CHART_COLOR_PALETTE).length @@ -93,8 +88,8 @@ const getDefaultPaletteName = (chartType: ChartTypes, numberRequired: number): s // Used to layer line charts on top of bar charts for composed charts. const CHART_SORT_ORDER = { - [ChartTypes.Line]: 0, - [ChartTypes.Bar]: 1, + [ChartType.Line]: 0, + [ChartType.Bar]: 1, }; const defaultSort = (a, b) => { diff --git a/packages/ui-chart-components/src/utils/utils.ts b/packages/ui-chart-components/src/utils/utils.ts index fb35b5b831..80a40db41e 100644 --- a/packages/ui-chart-components/src/utils/utils.ts +++ b/packages/ui-chart-components/src/utils/utils.ts @@ -6,17 +6,21 @@ import moment from 'moment'; import { useTheme } from '@material-ui/core/styles'; import { GRANULARITY_CONFIG } from '@tupaia/utils'; -import { DataProps, ChartTypes, ViewContent } from '../types'; +import { DataProps, ChartType, ViewContent, VizPeriodGranularity } from '../types'; export const isMobile = () => process.env.REACT_APP_APP_TYPE === 'mobile'; // Timestamps returned from the back-end correspond to UTC time -export const formatTimestampForChart = (timestamp, granularity, periodTickFormat) => - moment.utc(timestamp).format(periodTickFormat || GRANULARITY_CONFIG[granularity].chartFormat); +// @ts-ignore +export const formatTimestampForChart = ( + timestamp: number, + granularity: VizPeriodGranularity, + periodTickFormat: any, +) => moment.utc(timestamp).format(periodTickFormat || GRANULARITY_CONFIG[granularity].chartFormat); export const getIsTimeSeries = (data: DataProps[]) => data && data.length > 0 && data[0]?.timestamp; -export const isDataKey = key => +export const isDataKey = (key: string) => !(['name', 'timestamp'].includes(key) || key.substr(-9) === '_metadata'); export const getContrastTextColor = () => { @@ -28,11 +32,11 @@ export const getIsChartData = ({ chartType, data, }: { - chartType: ChartTypes; + chartType: ChartType; data: DataProps[]; }): boolean => { // If all segments of a pie chart are "0", display the no data message - if (chartType === ChartTypes.Pie && data && data.every(segment => segment.value === 0)) { + if (chartType === ChartType.Pie && data && data.every(segment => segment.value === 0)) { return false; } From 57745fcf57068cbd23f9e5fed89cf443ecd3775f Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Fri, 19 May 2023 11:03:54 +1200 Subject: [PATCH 011/251] Reference lines --- .../src/components/CartesianChart.tsx | 13 ++- .../src/components/Chart.tsx | 4 +- .../src/components/Charts/PieChart.tsx | 7 +- .../src/components/Reference/ChartTooltip.tsx | 60 ++++++++------ .../src/components/Reference/Legend.tsx | 47 ++++++++--- .../{ReferenceLines.js => ReferenceLines.tsx} | 81 +++++++------------ .../src/constants/index.ts | 1 - .../src/constants/propTypes.ts | 21 ----- packages/ui-chart-components/src/types.ts | 29 ++++++- .../src/utils/getChartTableData.tsx | 25 +++--- .../src/utils/parseChartConfig.ts | 10 ++- .../ui-chart-components/src/utils/utils.ts | 7 +- 12 files changed, 163 insertions(+), 142 deletions(-) rename packages/ui-chart-components/src/components/Reference/{ReferenceLines.js => ReferenceLines.tsx} (69%) delete mode 100644 packages/ui-chart-components/src/constants/propTypes.ts diff --git a/packages/ui-chart-components/src/components/CartesianChart.tsx b/packages/ui-chart-components/src/components/CartesianChart.tsx index 381ec8e852..39dfafe095 100644 --- a/packages/ui-chart-components/src/components/CartesianChart.tsx +++ b/packages/ui-chart-components/src/components/CartesianChart.tsx @@ -18,7 +18,7 @@ import { } from 'recharts'; import { BaseChartConfig } from '@tupaia/types'; import { CHART_BLUES, DEFAULT_DATA_KEY } from '../constants'; -import { ChartType, ViewContent } from '../types'; +import { ChartType, ViewContent, LegendPosition } from '../types'; import { BarChart as BarChartComponent, LineChart as LineChartComponent, @@ -73,7 +73,7 @@ const CHART_TYPE_TO_CHART = { const getRealDataKeys = (chartConfig: BaseChartConfig | {}) => Object.keys(chartConfig).filter(key => key !== LEGEND_ALL_DATA_KEY); -const getLegendAlignment = (legendPosition: string, isExporting: boolean) => { +const getLegendAlignment = (legendPosition: LegendPosition, isExporting: boolean) => { if (isExporting) { return { verticalAlign: 'top', align: 'right', layout: 'vertical' }; } @@ -104,7 +104,7 @@ const getMargin = (isExporting: boolean, isEnlarged: boolean) => { interface CartesianChartProps { viewContent: ViewContent; - legendPosition: string; + legendPosition: LegendPosition; isEnlarged?: boolean; isExporting?: boolean; } @@ -263,7 +263,12 @@ export const CartesianChart: React.FC = ({ })} {ReferenceLines({ viewContent, isExporting, isEnlarged })} {defaultChartType === Bar && data.length > 20 && !isExporting && isEnlarged && ( - + )}
diff --git a/packages/ui-chart-components/src/components/Chart.tsx b/packages/ui-chart-components/src/components/Chart.tsx index 08d052bc00..0ece45b9a7 100644 --- a/packages/ui-chart-components/src/components/Chart.tsx +++ b/packages/ui-chart-components/src/components/Chart.tsx @@ -16,7 +16,7 @@ import { getIsChartData, getNoDataString, } from '../utils'; -import { ChartType, ViewContent } from '../types'; +import { ChartType, ViewContent, LegendPosition } from '../types'; const UnknownChartTitle = styled(Typography)` position: relative; @@ -85,7 +85,7 @@ interface ChartProps { isEnlarged?: boolean; isExporting?: boolean; onItemClick?: (item: any) => void; - legendPosition?: string; + legendPosition?: LegendPosition; } export const Chart: React.FC = ({ diff --git a/packages/ui-chart-components/src/components/Charts/PieChart.tsx b/packages/ui-chart-components/src/components/Charts/PieChart.tsx index db42cf3d9d..113623a76a 100644 --- a/packages/ui-chart-components/src/components/Charts/PieChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/PieChart.tsx @@ -14,13 +14,12 @@ import { ResponsiveContainer, Tooltip, TooltipProps, - LegendProps, } from 'recharts'; import { OFF_WHITE, CHART_COLOR_PALETTE } from '../../constants'; import { getPieLegend } from '../Reference/Legend'; import { isMobile } from '../../utils'; import { TooltipContainer } from '../Reference'; -import { ViewContent } from '../../types'; +import { ViewContent, LegendPosition } from '../../types'; const Heading = styled(Typography)` font-weight: 500; @@ -49,7 +48,7 @@ const Text = styled(Typography)` color: #333; `; -const getLegendAlignment = (legendPosition: string, isExporting: boolean) => { +const getLegendAlignment = (legendPosition: LegendPosition, isExporting: boolean) => { if (isExporting) { return { verticalAlign: 'top', align: 'right', layout: 'vertical' }; } @@ -106,7 +105,7 @@ interface PieChartProps { isEnlarged?: boolean; isExporting?: boolean; onItemClick?: (item: any) => void; - legendPosition?: string; + legendPosition?: LegendPosition; } export const PieChart: React.FC = ({ viewContent, diff --git a/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx b/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx index 9065c028c6..9713ce4540 100644 --- a/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx +++ b/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx @@ -7,14 +7,19 @@ import React from 'react'; import get from 'lodash.get'; import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; -import PropTypes from 'prop-types'; import { formatDataValueByType } from '@tupaia/utils'; -import { PRESENTATION_OPTIONS_SHAPE } from '../../constants'; -import { ChartType, ValueType } from '../../types'; +import { + ChartType, + ValueType, + PresentationOptions, + LooseObject, + VizPeriodGranularity, +} from '../../types'; import { formatTimestampForChart, getIsTimeSeries } from '../../utils'; import { TooltipContainer } from './TooltipContainer'; +import { BaseChartConfig } from '@tupaia/types'; -function formatLabelledValue(label, value, valueType, metadata) { +function formatLabelledValue(label: string, value: any, valueType: string, metadata: LooseObject) { const valueText = formatDataValueByType({ value, metadata }, valueType); if (label) { return `${label}: ${valueText}`; @@ -56,7 +61,18 @@ const Box = styled.div` margin-right: 5px; `; -const MultiValueTooltip = ({ +interface ChartTooltipProps { + payload: any[]; + active?: boolean; + presentationOptions?: PresentationOptions; + valueType: ValueType; + chartConfig?: BaseChartConfig; + chartType?: ChartType; + labelType?: ValueType; + periodGranularity?: VizPeriodGranularity; +} + +const MultiValueTooltip: React.FC = ({ valueType, chartConfig, presentationOptions, @@ -78,6 +94,7 @@ const MultiValueTooltip = ({ } const valueLabels = payload.map(({ dataKey, value, color }) => { + // @ts-ignore const options = chartConfig && chartConfig[dataKey]; const label = (options && options.label) || dataKey; const valueTypeForLabel = @@ -112,7 +129,12 @@ const MultiValueTooltip = ({ ); }; -const SingleValueTooltip = ({ valueType, payload, periodGranularity, labelType }) => { +const SingleValueTooltip: React.FC = ({ + valueType, + payload, + periodGranularity, + labelType, +}) => { const data = payload[0].payload; const { name, value, timestamp } = data; const metadata = data.value_metadata; @@ -133,7 +155,13 @@ const SingleValueTooltip = ({ valueType, payload, periodGranularity, labelType } ); }; -const NoDataTooltip = ({ payload, periodGranularity }) => { +const NoDataTooltip = ({ + payload, + periodGranularity, +}: { + payload: any[]; + periodGranularity?: VizPeriodGranularity; +}) => { const data = payload[0]?.payload; const { name = undefined, timestamp = undefined } = data || {}; @@ -150,7 +178,7 @@ const NoDataTooltip = ({ payload, periodGranularity }) => { ); }; -export const ChartTooltip = props => { +export const ChartTooltip: React.FC = props => { const { payload, active, presentationOptions } = props; const data = payload || []; // This is to handle when recharts overrides the payload as null @@ -167,19 +195,3 @@ export const ChartTooltip = props => { // For no data display, pass the non-filtered data so we can pull the name return ; }; - -ChartTooltip.propTypes = { - valueType: PropTypes.oneOf(Object.values(ValueType)), - presentationOptions: PropTypes.shape(PRESENTATION_OPTIONS_SHAPE), - payload: PropTypes.array, -}; - -ChartTooltip.defaultProps = { - payload: [], - valueType: null, - presentationOptions: null, -}; - -SingleValueTooltip.propTypes = ChartTooltip.propTypes; -MultiValueTooltip.propTypes = ChartTooltip.propTypes; -NoDataTooltip.propTypes = ChartTooltip.propTypes; diff --git a/packages/ui-chart-components/src/components/Reference/Legend.tsx b/packages/ui-chart-components/src/components/Reference/Legend.tsx index 4b12730fb2..5b8e6dcf59 100644 --- a/packages/ui-chart-components/src/components/Reference/Legend.tsx +++ b/packages/ui-chart-components/src/components/Reference/Legend.tsx @@ -8,9 +8,14 @@ import styled from 'styled-components'; import MuiButton from '@material-ui/core/Button'; import Tooltip from '@material-ui/core/Tooltip'; import { formatDataValueByType } from '@tupaia/utils'; +import { LegendPosition, ViewContent } from '../../types'; import { isMobile } from '../../utils'; +import { PieChartConfig } from '@tupaia/types'; -const LegendContainer = styled.div` +const LegendContainer = styled.div<{ + $position?: LegendPosition; + $isExporting?: boolean; +}>` display: flex; flex-wrap: ${props => (props.$isExporting ? 'nowrap' : 'wrap')}; justify-content: ${props => (props.$position === 'bottom' ? 'center' : 'flex-start')}; @@ -28,7 +33,7 @@ const PieLegendContainer = styled(LegendContainer)` padding: 0; `; -const getLegendTextColor = (theme, isExporting) => { +const getLegendTextColor = (theme: any, isExporting: boolean) => { if (isExporting) { return '#2c3236'; } @@ -97,8 +102,24 @@ const Text = styled.span` line-height: 1.4; `; -const getPieLegendDisplayValue = (chartConfig, value, item, isEnlarged, viewContent) => { +interface PieLegendProps { + chartConfig: PieChartConfig; + isEnlarged?: boolean; + isExporting?: boolean; + legendPosition?: LegendPosition; + viewContent: ViewContent; +} + +const getPieLegendDisplayValue = ( + chartConfig: PieChartConfig, + value: string, + item: any, + viewContent: ViewContent, + isEnlarged?: boolean, +) => { + // @ts-ignore if (chartConfig[value]?.label) { + // @ts-ignore return chartConfig[value].label; } @@ -110,20 +131,20 @@ const getPieLegendDisplayValue = (chartConfig, value, item, isEnlarged, viewCont }; export const getPieLegend = ({ - chartConfig = {}, + chartConfig, isEnlarged, isExporting, legendPosition, viewContent, -}) => ({ payload }) => ( +}: PieLegendProps) => ({ payload }: { payload: any }) => ( - {payload.map(({ color, value, payload: item }) => { + {payload.map(({ color, value, payload: item }: any) => { const displayValue = getPieLegendDisplayValue( chartConfig, value, item, - isEnlarged, viewContent, + isEnlarged, ); return ( @@ -146,15 +167,23 @@ export const getPieLegend = ({ ); +interface CartesianLegendProps { + chartConfig?: any; + onClick: any; + getIsActiveKey: any; + isExporting?: boolean; + legendPosition?: LegendPosition; +} + export const getCartesianLegend = ({ chartConfig, onClick, getIsActiveKey, isExporting, legendPosition, -}) => ({ payload }) => ( +}: CartesianLegendProps) => ({ payload }: { payload: any }) => ( - {payload.map(({ color, value, dataKey }) => { + {payload.map(({ color, value, dataKey }: any) => { const displayValue = chartConfig[value]?.label || value; return ( diff --git a/packages/ui-chart-components/src/components/Reference/ReferenceLines.js b/packages/ui-chart-components/src/components/Reference/ReferenceLines.tsx similarity index 69% rename from packages/ui-chart-components/src/components/Reference/ReferenceLines.js rename to packages/ui-chart-components/src/components/Reference/ReferenceLines.tsx index ac21610235..c272e5e074 100644 --- a/packages/ui-chart-components/src/components/Reference/ReferenceLines.js +++ b/packages/ui-chart-components/src/components/Reference/ReferenceLines.tsx @@ -4,35 +4,30 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; import { ReferenceLine } from 'recharts'; import { formatDataValueByType } from '@tupaia/utils'; import { TUPAIA_ORANGE } from '../../constants'; import { ChartType } from '../../types'; import { ReferenceLabel } from './ReferenceLabel'; - -const ReferenceLineLabel = ({ referenceLineLabel, isExporting }) => { +import { ViewContent } from '../../types'; + +const ReferenceLineLabel = ({ + referenceLineLabel, + isExporting, +}: { + referenceLineLabel: string; + isExporting: boolean; +}) => { if (referenceLineLabel === undefined) return null; return ( ); }; -ReferenceLineLabel.propTypes = { - referenceLineLabel: PropTypes.string.isRequired, - isExporting: PropTypes.bool, -}; - -ReferenceLineLabel.defaultProps = { - isExporting: false, -}; - -// Todo: move orientationToYAxis to constants or utils -// Orientation of the axis is used as an alias for its id -const Y_AXIS_IDS = { - left: 0, - right: 1, -}; +enum Y_AXIS_IDS { + left = 0, + right = 1, +} const DEFAULT_Y_AXIS = { id: Y_AXIS_IDS.left, @@ -43,9 +38,16 @@ const DEFAULT_Y_AXIS = { }, }; -const orientationToYAxisId = orientation => Y_AXIS_IDS[orientation] || DEFAULT_Y_AXIS.id; +const orientationToYAxisId = (orientation: 'left' | 'right'): number => + Y_AXIS_IDS[orientation] || DEFAULT_Y_AXIS.id; + +interface ReferenceLineProps { + viewContent: ViewContent; + isExporting: boolean; + isEnlarged?: boolean; +} -const ValueReferenceLine = ({ viewContent, isExporting }) => { +const ValueReferenceLine = ({ viewContent, isExporting }: ReferenceLineProps) => { const { chartConfig = {} } = viewContent; const referenceLines = Object.entries(chartConfig) @@ -61,6 +63,7 @@ const ValueReferenceLine = ({ viewContent, isExporting }) => { { )); }; -ValueReferenceLine.propTypes = { - viewContent: PropTypes.object.isRequired, - isExporting: PropTypes.bool, -}; - -ValueReferenceLine.defaultProps = { - isExporting: false, -}; - -const AverageReferenceLine = ({ viewContent, isExporting, isEnlarged }) => { +const AverageReferenceLine = ({ viewContent, isExporting, isEnlarged }: ReferenceLineProps) => { const { valueType, data, presentationOptions } = viewContent; // show reference line by default const shouldHideReferenceLine = presentationOptions && presentationOptions.hideAverage; @@ -99,23 +93,13 @@ const AverageReferenceLine = ({ viewContent, isExporting, isEnlarged }) => { fill={TUPAIA_ORANGE} /> } + // @ts-ignore isAnimationActive={isEnlarged && !isExporting} /> ); }; -AverageReferenceLine.propTypes = { - viewContent: PropTypes.object.isRequired, - isExporting: PropTypes.bool, - isEnlarged: PropTypes.bool, -}; - -AverageReferenceLine.defaultProps = { - isExporting: false, - isEnlarged: false, -}; - -const BarReferenceLine = ({ viewContent, isExporting, isEnlarged }) => { +const BarReferenceLine = ({ viewContent, isExporting, isEnlarged }: ReferenceLineProps) => { const { referenceLines } = viewContent.presentationOptions || {}; if (referenceLines) { return ValueReferenceLine({ viewContent: { chartConfig: { ...referenceLines } }, isExporting }); @@ -123,20 +107,9 @@ const BarReferenceLine = ({ viewContent, isExporting, isEnlarged }) => { return AverageReferenceLine({ viewContent, isExporting, isEnlarged }); }; -export const ReferenceLines = ({ viewContent, isExporting, isEnlarged }) => { +export const ReferenceLines = ({ viewContent, isExporting, isEnlarged }: ReferenceLineProps) => { if (viewContent.chartType === ChartType.Bar) { return BarReferenceLine({ viewContent, isExporting, isEnlarged }); } return ValueReferenceLine({ viewContent, isExporting, isEnlarged }); }; - -ReferenceLines.propTypes = { - viewContent: PropTypes.object.isRequired, - isExporting: PropTypes.bool, - isEnlarged: PropTypes.bool, -}; - -ReferenceLines.defaultProps = { - isExporting: false, - isEnlarged: false, -}; diff --git a/packages/ui-chart-components/src/constants/index.ts b/packages/ui-chart-components/src/constants/index.ts index c61639737b..ad7007b189 100644 --- a/packages/ui-chart-components/src/constants/index.ts +++ b/packages/ui-chart-components/src/constants/index.ts @@ -4,5 +4,4 @@ */ export * from './colors'; -export * from './propTypes'; export * from './constants'; diff --git a/packages/ui-chart-components/src/constants/propTypes.ts b/packages/ui-chart-components/src/constants/propTypes.ts deleted file mode 100644 index 0108066134..0000000000 --- a/packages/ui-chart-components/src/constants/propTypes.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import PropTypes from 'prop-types'; - -export const CONDITIONAL_MATRIX_CONDITION_SHAPE = { - key: PropTypes.string.isRequired, - color: PropTypes.string.isRequired, - label: PropTypes.string, - legendLabel: PropTypes.string, - condition: PropTypes.oneOfType([PropTypes.number, PropTypes.object]).isRequired, // 0 or object e.g. { "<": 3 } - description: PropTypes.string, -}; - -export const PRESENTATION_OPTIONS_SHAPE = { - type: PropTypes.string, - showRawValue: PropTypes.bool, - exportWithLabels: PropTypes.bool, - conditions: PropTypes.arrayOf(PropTypes.shape(CONDITIONAL_MATRIX_CONDITION_SHAPE)), -}; diff --git a/packages/ui-chart-components/src/types.ts b/packages/ui-chart-components/src/types.ts index 136dfb5cc2..66515798eb 100644 --- a/packages/ui-chart-components/src/types.ts +++ b/packages/ui-chart-components/src/types.ts @@ -4,6 +4,7 @@ */ import { BaseChartConfig } from '@tupaia/types'; import { ReferenceAreaProps } from 'recharts'; +import { ConfirmModal } from '@tupaia/ui-components'; // Todo: move some of these types to @tupaia/types and integrate export interface DataProps { @@ -12,6 +13,12 @@ export interface DataProps { timestamp?: string; } +export type TableAccessor = Function | string; + +export interface LooseObject { + [k: string]: any; +} + export enum ChartType { Area = 'area', Bar = 'bar', @@ -21,6 +28,8 @@ export enum ChartType { Gauge = 'gauge', } +export type LegendPosition = 'top' | 'bottom'; + /** * { * "type":"chart", @@ -37,7 +46,6 @@ export enum ChartType { * ...] * } */ -// Todo: add period granularity to this type export type VizPeriodGranularity = | 'day' @@ -51,8 +59,23 @@ export type VizPeriodGranularity = | 'year' | 'one_year_at_a_time'; -type PresentationOptions = { +type ConditionalMatrixConditionShape = { + key: string; + color: string; + label?: string; + legendLabel?: string; + condition: number | object; + description?: string; +}; + +export type PresentationOptions = { + type?: string; + showRawValue?: boolean; periodTickFormat?: string; + exportWithLabels?: boolean; + hideAverage?: boolean; + valueFormat?: string; + conditions?: ConditionalMatrixConditionShape[]; }; export type ViewContent = { @@ -65,7 +88,7 @@ export type ViewContent = { startDate?: string; endDate?: string; colorPalette?: string; - periodGranularity?: string; + periodGranularity?: VizPeriodGranularity; labelType?: string; data: DataProps[]; chartConfig?: BaseChartConfig; diff --git a/packages/ui-chart-components/src/utils/getChartTableData.tsx b/packages/ui-chart-components/src/utils/getChartTableData.tsx index 7bdcc24315..82b18b269d 100644 --- a/packages/ui-chart-components/src/utils/getChartTableData.tsx +++ b/packages/ui-chart-components/src/utils/getChartTableData.tsx @@ -6,7 +6,7 @@ import React, { useMemo } from 'react'; import styled from 'styled-components'; import { formatDataValueByType } from '@tupaia/utils'; import { DEFAULT_DATA_KEY } from '../constants'; -import { ChartType } from '../types'; +import { ChartType, LooseObject, TableAccessor } from '../types'; import { formatTimestampForChart, getIsTimeSeries } from './utils'; import { parseChartConfig } from './parseChartConfig'; import { ValueType, ViewContent } from '../types'; @@ -24,12 +24,11 @@ const FirstColumnCell = styled.span` text-align: left; `; -const makeFirstColumn = (header, accessor, sortRows) => { - const firstColumn = { +const makeFirstColumn = (header: string, accessor: TableAccessor, sortRows?: string) => { + const firstColumn: LooseObject = { Header: header, accessor, - // eslint-disable-next-line react/prop-types - Cell: ({ value }) => {String(value)}, + Cell: ({ value }: { value: string }) => {String(value)}, }; if (sortRows) { firstColumn.sortType = sortRows; @@ -43,7 +42,7 @@ const makeFirstColumn = (header, accessor, sortRows) => { * Use the keys in chartConfig to determine which columns to render, and if chartConfig doesn't exist * use value as the only column */ -const processColumns = (viewContent: ViewContent, sortByTimestamp: Function) => { +const processColumns = (viewContent: ViewContent, sortByTimestamp: string) => { if (!viewContent?.data) { return []; } @@ -60,7 +59,7 @@ const processColumns = (viewContent: ViewContent, sortByTimestamp: Function) => if (hasTimeSeriesData) { firstColumn = makeFirstColumn( xName || 'Date', - row => formatTimestampForChart(row.timestamp, periodGranularity), + (row: LooseObject) => formatTimestampForChart(row.timestamp, periodGranularity), sortByTimestamp, ); } @@ -73,11 +72,11 @@ const processColumns = (viewContent: ViewContent, sortByTimestamp: Function) => const configColumns = Object.keys(chartDataConfig).map(columnKey => { return { id: columnKey, - Header: props => { + Header: (props: LooseObject) => { const columnId = props.column.id; return chartConfig[columnId]?.label || columnId; }, - accessor: row => { + accessor: (row: LooseObject) => { const rowValue = row[columnKey]; const columnConfig = chartConfig[columnKey]; const valueType = columnConfig?.valueType || viewContent.valueType; @@ -89,7 +88,7 @@ const processColumns = (viewContent: ViewContent, sortByTimestamp: Function) => return firstColumn ? [firstColumn, ...configColumns] : configColumns; }; -const sortDates = (dateA, dateB) => { +const sortDates = (dateA: Date, dateB: Date) => { const dateAMoreRecent = dateA > dateB; return dateAMoreRecent ? 1 : -1; }; @@ -102,11 +101,11 @@ const processData = (viewContent: ViewContent) => { const { data, chartType } = viewContent; if (chartType === ChartType.Pie) { - return data.sort((a, b) => b.value - a.value); + return data.sort((a: any, b: any) => b.value - a.value); } // For time series, sort by timestamp so that the table is in chronological order always if (getIsTimeSeries(data)) { - return data.sort((a, b) => sortDates(a.timestamp, b.timestamp)); + return data.sort((a: any, b: any) => sortDates(a.timestamp, b.timestamp)); } return data; @@ -115,7 +114,7 @@ const processData = (viewContent: ViewContent) => { export const getChartTableData = (viewContent: ViewContent) => { // Because react-table wants its sort function to be memoized, it needs to live here, outside of // the other useMemo hooks - const sortByTimestamp = useMemo(() => (rowA, rowB) => + const sortByTimestamp = useMemo(() => (rowA: any, rowB: any) => sortDates(rowA.original.timestamp, rowB.original.timestamp), ); const columns = useMemo(() => processColumns(viewContent, sortByTimestamp), [ diff --git a/packages/ui-chart-components/src/utils/parseChartConfig.ts b/packages/ui-chart-components/src/utils/parseChartConfig.ts index 5f5bce13ab..30bcee3f2f 100644 --- a/packages/ui-chart-components/src/utils/parseChartConfig.ts +++ b/packages/ui-chart-components/src/utils/parseChartConfig.ts @@ -5,7 +5,7 @@ */ import { BaseChartConfig } from '@tupaia/types'; import { COLOR_PALETTES } from '../constants'; -import { ChartType, ViewContent } from '../types'; +import { ChartType, DataProps, ViewContent } from '../types'; import { isDataKey } from './utils'; const ADD_TO_ALL_KEY = '$all'; @@ -24,7 +24,8 @@ export const parseChartConfig = (viewContent: ViewContent) => { ? createDynamicConfig(restOfConfig, configForAllKeys, data) : restOfConfig; - const addDefaultColors = config => addDefaultColorsToConfig(config, paletteName, chartType); + const addDefaultColors = (config: BaseChartConfig) => + addDefaultColorsToConfig(config, paletteName, chartType); const chartConfigs = [baseConfig]; @@ -55,7 +56,7 @@ const setOpacityValues = (chartConfig: BaseChartConfig): BaseChartConfig => { // Adds default colors for every element with no color defined const addDefaultColorsToConfig = ( chartConfig: BaseChartConfig, - paletteName: string, + paletteName?: string, chartType: ChartType, ) => { const newConfig = {}; @@ -118,9 +119,10 @@ const sortChartConfigByLegendOrder = (chartConfig: BaseChartConfig) => { const createDynamicConfig = ( chartConfig: BaseChartConfig, dynamicChartConfig: BaseChartConfig, - data, + data: DataProps[], ): BaseChartConfig => { // Just find keys. Doesn't include keys which end in _metadata. + // @ts-ignore const dataKeys = data.map(dataPoint => Object.keys(dataPoint).filter(isDataKey)).flat(); const keys = new Set(dataKeys); diff --git a/packages/ui-chart-components/src/utils/utils.ts b/packages/ui-chart-components/src/utils/utils.ts index 80a40db41e..df9f369d2e 100644 --- a/packages/ui-chart-components/src/utils/utils.ts +++ b/packages/ui-chart-components/src/utils/utils.ts @@ -10,13 +10,14 @@ import { DataProps, ChartType, ViewContent, VizPeriodGranularity } from '../type export const isMobile = () => process.env.REACT_APP_APP_TYPE === 'mobile'; +const granularityConfig = GRANULARITY_CONFIG as any; + // Timestamps returned from the back-end correspond to UTC time -// @ts-ignore export const formatTimestampForChart = ( timestamp: number, granularity: VizPeriodGranularity, - periodTickFormat: any, -) => moment.utc(timestamp).format(periodTickFormat || GRANULARITY_CONFIG[granularity].chartFormat); + periodTickFormat?: any, +) => moment.utc(timestamp).format(periodTickFormat || granularityConfig[granularity].chartFormat); export const getIsTimeSeries = (data: DataProps[]) => data && data.length > 0 && data[0]?.timestamp; From 400ee6bc49420f9f6059b7a83e055d354239e4e0 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Mon, 22 May 2023 09:51:36 +1200 Subject: [PATCH 012/251] remove React.FC --- .../src/components/Axes/VerticalTick.tsx | 2 +- .../ui-chart-components/src/components/Axes/XAxis.tsx | 6 +----- .../ui-chart-components/src/components/Axes/YAxes.tsx | 8 ++++---- .../src/components/CartesianChart.tsx | 4 ++-- packages/ui-chart-components/src/components/Chart.tsx | 6 +++--- .../ui-chart-components/src/components/ChartTable.tsx | 2 +- .../src/components/Charts/AreaChart.tsx | 4 ++-- .../src/components/Charts/BarChart.tsx | 4 ++-- .../src/components/Charts/GaugeChart.tsx | 4 ++-- .../src/components/Charts/LineChart.tsx | 4 ++-- .../src/components/Charts/PieChart.tsx | 4 ++-- .../src/components/Reference/ChartTooltip.tsx | 10 +++++----- .../src/components/Reference/ReferenceLabel.tsx | 7 +------ 13 files changed, 28 insertions(+), 37 deletions(-) diff --git a/packages/ui-chart-components/src/components/Axes/VerticalTick.tsx b/packages/ui-chart-components/src/components/Axes/VerticalTick.tsx index 6a65dc3861..8272f2893c 100644 --- a/packages/ui-chart-components/src/components/Axes/VerticalTick.tsx +++ b/packages/ui-chart-components/src/components/Axes/VerticalTick.tsx @@ -20,7 +20,7 @@ interface VerticalTickProps { }; } -export const VerticalTick: React.FC = ({ x, y, payload }) => { +export const VerticalTick = ({ x, y, payload }: VerticalTickProps) => { return ( = ({ - viewContent, - isExporting = false, - isEnlarged = false, -}) => { +export const XAxis = ({ viewContent, isExporting = false, isEnlarged = false }: XAxisProps) => { const fillColor = isExporting ? DARK_BLUE : getContrastTextColor(); const { Bar, Composed } = ChartType; const { chartType, chartConfig = {}, data } = viewContent; diff --git a/packages/ui-chart-components/src/components/Axes/YAxes.tsx b/packages/ui-chart-components/src/components/Axes/YAxes.tsx index 8271a10794..56fe36e7d3 100644 --- a/packages/ui-chart-components/src/components/Axes/YAxes.tsx +++ b/packages/ui-chart-components/src/components/Axes/YAxes.tsx @@ -97,13 +97,13 @@ interface YAxisProps { isExporting?: boolean; } -const YAxis: React.FC = ({ +const YAxis = ({ config = {}, viewContent, chartDataConfig, isExporting = false, isEnlarged = false, -}) => { +}: YAxisProps) => { const fillColor = isExporting ? DARK_BLUE : getContrastTextColor(); const { @@ -153,12 +153,12 @@ interface YAxesProps { isExporting?: boolean; } -export const YAxes: React.FC = ({ +export const YAxes = ({ viewContent, chartDataConfig, isExporting = false, isEnlarged = false, -}) => { +}: YAxesProps) => { const { chartConfig = {} } = viewContent; const axisPropsById = { diff --git a/packages/ui-chart-components/src/components/CartesianChart.tsx b/packages/ui-chart-components/src/components/CartesianChart.tsx index 39dfafe095..0db789c372 100644 --- a/packages/ui-chart-components/src/components/CartesianChart.tsx +++ b/packages/ui-chart-components/src/components/CartesianChart.tsx @@ -109,12 +109,12 @@ interface CartesianChartProps { isExporting?: boolean; } -export const CartesianChart: React.FC = ({ +export const CartesianChart = ({ viewContent, isEnlarged = false, isExporting = false, legendPosition = 'bottom', -}) => { +}: CartesianChartProps) => { const [chartConfig, setChartConfig] = useState( viewContent.chartConfig || {}, ); diff --git a/packages/ui-chart-components/src/components/Chart.tsx b/packages/ui-chart-components/src/components/Chart.tsx index 0ece45b9a7..48372c9917 100644 --- a/packages/ui-chart-components/src/components/Chart.tsx +++ b/packages/ui-chart-components/src/components/Chart.tsx @@ -31,7 +31,7 @@ const UnknownChartContainer = styled.div` position: relative; `; -const UnknownChart: React.FC = () => ( +const UnknownChart = () => ( New chart coming soon @@ -88,13 +88,13 @@ interface ChartProps { legendPosition?: LegendPosition; } -export const Chart: React.FC = ({ +export const Chart = ({ viewContent, isExporting = false, isEnlarged = true, onItemClick = () => {}, legendPosition = 'bottom', -}) => { +}: ChartProps) => { const { chartType } = viewContent; if (!Object.values(ChartType).includes(chartType)) { diff --git a/packages/ui-chart-components/src/components/ChartTable.tsx b/packages/ui-chart-components/src/components/ChartTable.tsx index 1c8726b21e..f10a4fed19 100644 --- a/packages/ui-chart-components/src/components/ChartTable.tsx +++ b/packages/ui-chart-components/src/components/ChartTable.tsx @@ -24,7 +24,7 @@ interface ChartTableProps { className?: string; } -export const ChartTable: React.FC = ({ viewContent, className }) => { +export const ChartTable = ({ viewContent, className }: ChartTableProps) => { const { columns, data } = getChartTableData(viewContent); if (!getIsChartData(viewContent)) { diff --git a/packages/ui-chart-components/src/components/Charts/AreaChart.tsx b/packages/ui-chart-components/src/components/Charts/AreaChart.tsx index 3d30a5452d..3e167065e6 100644 --- a/packages/ui-chart-components/src/components/Charts/AreaChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/AreaChart.tsx @@ -15,13 +15,13 @@ interface AreaChartProps { isExporting?: boolean; } -export const AreaChart: React.FC = ({ +export const AreaChart = ({ color = BLUE, dataKey, yAxisId, isEnlarged = false, isExporting = false, -}) => ( +}: AreaChartProps) => ( = ({ +export const BarChart = ({ color = BLUE, dataKey, yAxisId, @@ -41,7 +41,7 @@ export const BarChart: React.FC = ({ isExporting = false, chartConfig, exportWithLabels = true, -}) => { +}: BarChartProps) => { const getBarSize = () => { if (chartConfig.chartType === ChartType.Composed || data.length === 1) { return isEnlarged ? 100 : 50; diff --git a/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx b/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx index 20e3d4b329..94e45760a0 100644 --- a/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx @@ -43,12 +43,12 @@ const getHeight = (isExporting?: boolean, isEnlarged?: boolean) => { return isEnlarged && isMobile() ? 320 : undefined; }; -export const GaugeChart: React.FC = ({ +export const GaugeChart = ({ viewContent, isExporting = false, isEnlarged = false, onItemClick = () => {}, -}) => { +}: GaugeChartProps) => { const { data, color = BLUE, ...restOfConfigs } = viewContent; const generateElements = () => { diff --git a/packages/ui-chart-components/src/components/Charts/LineChart.tsx b/packages/ui-chart-components/src/components/Charts/LineChart.tsx index 9b92a8b611..3117e9e3cb 100644 --- a/packages/ui-chart-components/src/components/Charts/LineChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/LineChart.tsx @@ -21,7 +21,7 @@ interface LineChartProps { dot?: boolean; } -export const LineChart: React.FC = ({ +export const LineChart = ({ dataKey, opacity, yAxisId, @@ -33,7 +33,7 @@ export const LineChart: React.FC = ({ connectNulls = false, exportWithLabels = true, dot = true, -}) => { +}: LineChartProps) => { const defaultColor = isExporting ? DARK_BLUE : BLUE; const showDot = isExporting ? false : dot; // Always hide when exporting as it doesn't look nice diff --git a/packages/ui-chart-components/src/components/Charts/PieChart.tsx b/packages/ui-chart-components/src/components/Charts/PieChart.tsx index 113623a76a..ef11a3ffbe 100644 --- a/packages/ui-chart-components/src/components/Charts/PieChart.tsx +++ b/packages/ui-chart-components/src/components/Charts/PieChart.tsx @@ -107,13 +107,13 @@ interface PieChartProps { onItemClick?: (item: any) => void; legendPosition?: LegendPosition; } -export const PieChart: React.FC = ({ +export const PieChart = ({ viewContent, isExporting = false, isEnlarged = false, onItemClick = () => {}, legendPosition = 'bottom', -}) => { +}: PieChartProps) => { const [activeIndex, setActiveIndex] = useState(-1); const { presentationOptions, data } = viewContent; // eslint-disable-next-line no-unused-vars diff --git a/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx b/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx index 9713ce4540..ff352a1f42 100644 --- a/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx +++ b/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx @@ -72,7 +72,7 @@ interface ChartTooltipProps { periodGranularity?: VizPeriodGranularity; } -const MultiValueTooltip: React.FC = ({ +const MultiValueTooltip = ({ valueType, chartConfig, presentationOptions, @@ -80,7 +80,7 @@ const MultiValueTooltip: React.FC = ({ periodGranularity, labelType, chartType, -}) => { +}: ChartTooltipProps) => { const data = payload[0].payload; const { name: headline, timestamp } = data; @@ -129,12 +129,12 @@ const MultiValueTooltip: React.FC = ({ ); }; -const SingleValueTooltip: React.FC = ({ +const SingleValueTooltip = ({ valueType, payload, periodGranularity, labelType, -}) => { +}: ChartTooltipProps) => { const data = payload[0].payload; const { name, value, timestamp } = data; const metadata = data.value_metadata; @@ -178,7 +178,7 @@ const NoDataTooltip = ({ ); }; -export const ChartTooltip: React.FC = props => { +export const ChartTooltip = (props: ChartTooltipProps) => { const { payload, active, presentationOptions } = props; const data = payload || []; // This is to handle when recharts overrides the payload as null diff --git a/packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx b/packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx index d5206e9215..34a1d3f9b1 100644 --- a/packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx +++ b/packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx @@ -16,12 +16,7 @@ interface ReferenceLabelProps { const isMaxLabel = (value: string): boolean => value.toLowerCase().includes('max'); -export const ReferenceLabel: React.FC = ({ - fill, - fontSize = 14, - value, - viewBox, -}) => { +export const ReferenceLabel = ({ fill, fontSize = 14, value, viewBox }: ReferenceLabelProps) => { const x = (viewBox?.width || 0) / 2 + 30; const y = isMaxLabel(value) ? (viewBox?.y || 0) - 5 : (viewBox?.y || 0) + 15; From 1bbef80f0ae761e2b8786ffdbf2a7f982b6f0f21 Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Mon, 22 May 2023 10:24:13 +1200 Subject: [PATCH 013/251] Waitp 1260 merged changes (#4584) * Waitp 1260 ts UI components1 (#4578) * WAITP-1260 convert to typescript part 1 * WAITP-1260 UI component typescript conversion part 2 * WAITP=1260 remove FC typing as is not recommended * WAITP-1260 Update overrideable buttons * WAITP-1260 Update copyright dates * WAITP-1260 fix issues * WAITP-1260 get storybook working * WAITP-1260 add default loading text to button * WAITP-1260 setup tests for ts * Revert "WAITP-1260 Update copyright dates" This reverts commit d468b5015a0a2e1fa52dee6df8546d2859c91821. * WAITP-1260 remove unnecessary file * WAITP-1260 FIx issues * Update tsconfig.json * Update tsconfig-build.json * Waitp 1260 ts UI components2 (#4577) * WAITP-1260 DataTable to ts * WAITP-1260 Datepicker ts part 1 * WAITP=1260 remove FC typing as is not recommended * WAITP-1260 DatePicker to ts part 2 * WAITP-1260 Datatable part 2 * WAITP-1260 Update copyright dates * WAITP-1260 fix issues * WAITP-1260 get working in web frontend * WAITP-1260 get storybook working * WAITP-1260 setup tests for ts * Revert "WAITP-1260 Update copyright dates" This reverts commit 3209c14ed3807d6f56c523a07ad1313129851ddc. * WAITP-1260 Add config for ts * WAITP-1260 Add DataTable interface * WAITP-1260 add in types * WAITP-1260 Update typings * Waitp 1260 ts UI components3 (#4579) * WAITP-1260 Icons to ts components * WAITP-1260 Inputs to ts part 1 * WAITP-1260 inputs to ts part 2 * WAITP-1260 Update copyright dates * WAITP-1260 fix issues * WAITP-1260 get storybook working * WAITP-1260 setup tests for ts * Revert "WAITP-1260 Update copyright dates" This reverts commit 8ded7f569863f85f00057fd3dca652b5146914a5. * WAITP-1260 Add in types * WAITP-1260 Fix conflicts * WAITP-1260 fix file names * WAITP1260 Fix file names --- .eslintrc | 96 +++++-- packages/ui-chart-components/package.json | 4 +- packages/ui-components/.storybook/main.js | 3 + packages/ui-components/jest.config.js | 12 +- packages/ui-components/package.json | 10 +- .../{ActionsMenu.js => ActionsMenu.tsx} | 19 +- .../src/components/{Alert.js => Alert.tsx} | 49 ++-- .../ui-components/src/components/Avatar.js | 23 -- .../ui-components/src/components/Avatar.tsx | 23 ++ .../components/{BarMeter.js => BarMeter.tsx} | 19 +- .../{Breadcrumbs.js => Breadcrumbs.tsx} | 43 ++- .../src/components/{Button.js => Button.tsx} | 56 ++-- .../src/components/{Card.js => Card.tsx} | 28 +- .../components/{CardTabs.js => CardTabs.tsx} | 71 +++-- .../src/components/CheckboxList.js | 137 --------- .../src/components/CheckboxList.tsx | 186 ++++++++++++ .../{CircleMeter.js => CircleMeter.tsx} | 22 +- ...mDeleteModal.js => ConfirmDeleteModal.tsx} | 46 ++- .../DataTable/{DataTable.js => DataTable.tsx} | 70 +++-- .../{DataTableCell.js => DataTableCell.tsx} | 26 +- .../{StyledTable.js => StyledTable.tsx} | 0 .../DataTable/{index.js => index.ts} | 0 ...aTableExport.js => useDataTableExport.tsx} | 21 +- .../components/DateRangePicker/DatePicker.js | 21 -- .../components/DateRangePicker/DatePicker.tsx | 23 ++ ...tePickerDialog.js => DatePickerDialog.tsx} | 57 ++-- ...DateRangePicker.js => DateRangePicker.tsx} | 44 ++- .../{DayPicker.js => DayPicker.tsx} | 17 +- .../{MonthPicker.js => MonthPicker.tsx} | 16 +- .../{QuarterPicker.js => QuarterPicker.tsx} | 16 +- .../{WeekPicker.js => WeekPicker.tsx} | 23 +- .../{YearPicker.js => YearPicker.tsx} | 25 +- .../DateRangePicker/{index.js => index.ts} | 0 ...eRangePicker.js => useDateRangePicker.tsx} | 83 +++--- .../src/components/{Dialog.js => Dialog.tsx} | 43 ++- .../{EnvBanner.js => EnvBanner.tsx} | 23 +- .../{ErrorBoundary.js => ErrorBoundary.tsx} | 15 +- ...FavouriteButton.js => FavouriteButton.tsx} | 29 +- .../{FetchLoader.js => FetchLoader.tsx} | 47 ++- .../{FullPageLoader.js => FullPageLoader.tsx} | 0 .../src/components/HomeButton.js | 37 --- .../src/components/HomeButton.tsx | 34 +++ .../{IconButton.js => IconButton.tsx} | 4 +- .../Icons/{BaseIcon.js => BaseIcon.tsx} | 0 .../{CalendarToday.js => CalendarToday.tsx} | 4 +- .../Icons/{Clipboard.js => Clipboard.tsx} | 4 +- .../Icons/{Dashboard.js => Dashboard.tsx} | 4 +- .../components/Icons/{Home.js => Home.tsx} | 4 +- .../Icons/{SaveAlt.js => SaveAlt.tsx} | 4 +- .../Icons/{TupaiaIcon.js => TupaiaIcon.tsx} | 4 +- .../components/Icons/{Virus.js => Virus.tsx} | 4 +- .../{WarningCloud.js => WarningCloud.tsx} | 4 +- .../components/Icons/{index.js => index.ts} | 0 ...cAutocomplete.js => AsyncAutocomplete.tsx} | 61 ++-- .../{Autocomplete.js => Autocomplete.tsx} | 92 +++--- .../{ButtonSelect.js => ButtonSelect.tsx} | 57 ++-- .../Inputs/{Checkbox.js => Checkbox.tsx} | 34 ++- .../Inputs/{DatePicker.js => DatePicker.tsx} | 60 ++-- ...FileUploadField.js => FileUploadField.tsx} | 38 ++- .../{GroupedSelect.js => GroupedSelect.tsx} | 50 ++-- .../{MultiSelect.js => MultiSelect.tsx} | 52 ++-- ...ileImageField.js => ProfileImageField.tsx} | 36 ++- .../Inputs/{RadioGroup.js => RadioGroup.tsx} | 47 ++- .../Inputs/{Select.js => Select.tsx} | 115 +++----- .../Inputs/{TextField.js => TextField.tsx} | 10 +- .../components/Inputs/{index.js => index.ts} | 0 ...adingContainer.js => LoadingContainer.tsx} | 67 ++--- .../src/components/{NavBar.js => NavBar.tsx} | 58 ++-- ...ortComponent.js => PDFExportComponent.tsx} | 0 ...StrengthBar.js => PasswordStrengthBar.tsx} | 47 ++- .../{ProfileButton.js => ProfileButton.tsx} | 125 ++++---- .../src/components/ReferenceTooltip.js | 89 ------ .../src/components/ReferenceTooltip.tsx | 93 ++++++ .../{SplitButton.js => SplitButton.tsx} | 58 ++-- .../src/components/{Tabs.js => Tabs.tsx} | 6 +- .../src/components/{Toast.js => Toast.tsx} | 35 +-- .../components/{Toolbar.js => Toolbar.tsx} | 48 ++-- .../components/{Tooltip.js => Tooltip.tsx} | 23 +- .../src/components/{index.js => index.ts} | 0 .../ui-components/src/{index.js => index.ts} | 0 .../src/types/date-picker-types.d.ts | 29 ++ packages/ui-components/src/types/index.d.ts | 2 + .../src/types/react-table-config.d.ts | 20 ++ packages/ui-components/src/types/types.d.ts | 5 + .../ui-components/stories/button.stories.js | 4 +- packages/ui-components/tsconfig-build.json | 9 +- packages/ui-components/tsconfig.json | 18 +- .../DateRangePicker/DateRangePicker.js | 2 +- yarn.lock | 268 ++++++++++++++++-- 89 files changed, 1736 insertions(+), 1475 deletions(-) rename packages/ui-components/src/components/{ActionsMenu.js => ActionsMenu.tsx} (85%) rename packages/ui-components/src/components/{Alert.js => Alert.tsx} (66%) delete mode 100644 packages/ui-components/src/components/Avatar.js create mode 100644 packages/ui-components/src/components/Avatar.tsx rename packages/ui-components/src/components/{BarMeter.js => BarMeter.tsx} (80%) rename packages/ui-components/src/components/{Breadcrumbs.js => Breadcrumbs.tsx} (62%) rename packages/ui-components/src/components/{Button.js => Button.tsx} (80%) rename packages/ui-components/src/components/{Card.js => Card.tsx} (73%) rename packages/ui-components/src/components/{CardTabs.js => CardTabs.tsx} (67%) delete mode 100644 packages/ui-components/src/components/CheckboxList.js create mode 100644 packages/ui-components/src/components/CheckboxList.tsx rename packages/ui-components/src/components/{CircleMeter.js => CircleMeter.tsx} (86%) rename packages/ui-components/src/components/{ConfirmDeleteModal.js => ConfirmDeleteModal.tsx} (65%) rename packages/ui-components/src/components/DataTable/{DataTable.js => DataTable.tsx} (65%) rename packages/ui-components/src/components/DataTable/{DataTableCell.js => DataTableCell.tsx} (51%) rename packages/ui-components/src/components/DataTable/{StyledTable.js => StyledTable.tsx} (100%) rename packages/ui-components/src/components/DataTable/{index.js => index.ts} (100%) rename packages/ui-components/src/components/DataTable/{useDataTableExport.js => useDataTableExport.tsx} (77%) delete mode 100644 packages/ui-components/src/components/DateRangePicker/DatePicker.js create mode 100644 packages/ui-components/src/components/DateRangePicker/DatePicker.tsx rename packages/ui-components/src/components/DateRangePicker/{DatePickerDialog.js => DatePickerDialog.tsx} (83%) rename packages/ui-components/src/components/DateRangePicker/{DateRangePicker.js => DateRangePicker.tsx} (85%) rename packages/ui-components/src/components/DateRangePicker/{DayPicker.js => DayPicker.tsx} (69%) rename packages/ui-components/src/components/DateRangePicker/{MonthPicker.js => MonthPicker.tsx} (71%) rename packages/ui-components/src/components/DateRangePicker/{QuarterPicker.js => QuarterPicker.tsx} (75%) rename packages/ui-components/src/components/DateRangePicker/{WeekPicker.js => WeekPicker.tsx} (76%) rename packages/ui-components/src/components/DateRangePicker/{YearPicker.js => YearPicker.tsx} (58%) rename packages/ui-components/src/components/DateRangePicker/{index.js => index.ts} (100%) rename packages/ui-components/src/components/DateRangePicker/{useDateRangePicker.js => useDateRangePicker.tsx} (71%) rename packages/ui-components/src/components/{Dialog.js => Dialog.tsx} (77%) rename packages/ui-components/src/components/{EnvBanner.js => EnvBanner.tsx} (76%) rename packages/ui-components/src/components/{ErrorBoundary.js => ErrorBoundary.tsx} (75%) rename packages/ui-components/src/components/{FavouriteButton.js => FavouriteButton.tsx} (51%) rename packages/ui-components/src/components/{FetchLoader.js => FetchLoader.tsx} (65%) rename packages/ui-components/src/components/{FullPageLoader.js => FullPageLoader.tsx} (100%) delete mode 100644 packages/ui-components/src/components/HomeButton.js create mode 100644 packages/ui-components/src/components/HomeButton.tsx rename packages/ui-components/src/components/{IconButton.js => IconButton.tsx} (54%) rename packages/ui-components/src/components/Icons/{BaseIcon.js => BaseIcon.tsx} (100%) rename packages/ui-components/src/components/Icons/{CalendarToday.js => CalendarToday.tsx} (77%) rename packages/ui-components/src/components/Icons/{Clipboard.js => Clipboard.tsx} (93%) rename packages/ui-components/src/components/Icons/{Dashboard.js => Dashboard.tsx} (95%) rename packages/ui-components/src/components/Icons/{Home.js => Home.tsx} (90%) rename packages/ui-components/src/components/Icons/{SaveAlt.js => SaveAlt.tsx} (78%) rename packages/ui-components/src/components/Icons/{TupaiaIcon.js => TupaiaIcon.tsx} (92%) rename packages/ui-components/src/components/Icons/{Virus.js => Virus.tsx} (97%) rename packages/ui-components/src/components/Icons/{WarningCloud.js => WarningCloud.tsx} (95%) rename packages/ui-components/src/components/Icons/{index.js => index.ts} (100%) rename packages/ui-components/src/components/Inputs/{AsyncAutocomplete.js => AsyncAutocomplete.tsx} (55%) rename packages/ui-components/src/components/Inputs/{Autocomplete.js => Autocomplete.tsx} (62%) rename packages/ui-components/src/components/Inputs/{ButtonSelect.js => ButtonSelect.tsx} (81%) rename packages/ui-components/src/components/Inputs/{Checkbox.js => Checkbox.tsx} (69%) rename packages/ui-components/src/components/Inputs/{DatePicker.js => DatePicker.tsx} (56%) rename packages/ui-components/src/components/Inputs/{FileUploadField.js => FileUploadField.tsx} (69%) rename packages/ui-components/src/components/Inputs/{GroupedSelect.js => GroupedSelect.tsx} (76%) rename packages/ui-components/src/components/Inputs/{MultiSelect.js => MultiSelect.tsx} (51%) rename packages/ui-components/src/components/Inputs/{ProfileImageField.js => ProfileImageField.tsx} (84%) rename packages/ui-components/src/components/Inputs/{RadioGroup.js => RadioGroup.tsx} (73%) rename packages/ui-components/src/components/Inputs/{Select.js => Select.tsx} (52%) rename packages/ui-components/src/components/Inputs/{TextField.js => TextField.tsx} (89%) rename packages/ui-components/src/components/Inputs/{index.js => index.ts} (100%) rename packages/ui-components/src/components/{LoadingContainer.js => LoadingContainer.tsx} (68%) rename packages/ui-components/src/components/{NavBar.js => NavBar.tsx} (66%) rename packages/ui-components/src/components/{PDFExportComponent.js => PDFExportComponent.tsx} (100%) rename packages/ui-components/src/components/{PasswordStrengthBar.js => PasswordStrengthBar.tsx} (64%) rename packages/ui-components/src/components/{ProfileButton.js => ProfileButton.tsx} (51%) delete mode 100644 packages/ui-components/src/components/ReferenceTooltip.js create mode 100644 packages/ui-components/src/components/ReferenceTooltip.tsx rename packages/ui-components/src/components/{SplitButton.js => SplitButton.tsx} (73%) rename packages/ui-components/src/components/{Tabs.js => Tabs.tsx} (89%) rename packages/ui-components/src/components/{Toast.js => Toast.tsx} (72%) rename packages/ui-components/src/components/{Toolbar.js => Toolbar.tsx} (69%) rename packages/ui-components/src/components/{Tooltip.js => Tooltip.tsx} (63%) rename packages/ui-components/src/components/{index.js => index.ts} (100%) rename packages/ui-components/src/{index.js => index.ts} (100%) create mode 100644 packages/ui-components/src/types/date-picker-types.d.ts create mode 100644 packages/ui-components/src/types/index.d.ts create mode 100644 packages/ui-components/src/types/react-table-config.d.ts create mode 100644 packages/ui-components/src/types/types.d.ts diff --git a/.eslintrc b/.eslintrc index f3c78b1c1e..b8e57010dd 100644 --- a/.eslintrc +++ b/.eslintrc @@ -22,7 +22,10 @@ "**/packages/web-frontend/config/**", "**/packages/web-frontend/scripts/**" ], - "packageDir": ["../../", "."] + "packageDir": [ + "../../", + "." + ] } ], "jsx-a11y/href-no-hash": "off", @@ -58,15 +61,24 @@ "import/no-extraneous-dependencies": [ "error", { - "devDependencies": ["jest.setup.ts", "global.d.ts"], - "packageDir": ["../../", "."] + "devDependencies": [ + "jest.setup.ts", + "global.d.ts" + ], + "packageDir": [ + "../../", + "." + ] } ] } }, // Packages using jest { - "files": ["packages/**/__tests__/**", "packages/web-frontend/src/tests/**"], + "files": [ + "packages/**/__tests__/**", + "packages/web-frontend/src/tests/**" + ], "extends": "@beyondessential/jest" }, // Frontend packages @@ -86,7 +98,10 @@ }, // Overrides per file pattern { - "files": ["**/cypress/**", "packages/utils/src/cypress.js"], + "files": [ + "**/cypress/**", + "packages/utils/src/cypress.js" + ], "extends": "plugin:cypress/recommended", "env": { "browser": true, @@ -106,7 +121,12 @@ { "files": "**/__tests__/**", "rules": { - "jest/valid-expect": ["error", { "maxArgs": 2 }], + "jest/valid-expect": [ + "error", + { + "maxArgs": 2 + } + ], "no-new": "off" } }, @@ -134,9 +154,19 @@ }, // Root folder overrides { - "files": ["jest.setup.js", "scripts/**"], + "files": [ + "jest.setup.js", + "scripts/**" + ], "rules": { - "import/no-extraneous-dependencies": ["error", { "packageDir": ["."] }] + "import/no-extraneous-dependencies": [ + "error", + { + "packageDir": [ + "." + ] + } + ] } }, // Package overrides @@ -151,37 +181,63 @@ } }, { - "files": ["packages/meditrak-app/**"], - "plugins": ["react-native"], + "files": [ + "packages/meditrak-app/**" + ], + "plugins": [ + "react-native" + ], // "env": { // "react-native/react-native": true // }, "rules": { "react/destructuring-assignment": "off", - "react/prop-types": ["error", { "ignore": ["navigation"] }] + "react/prop-types": [ + "error", + { + "ignore": [ + "navigation" + ] + } + ] } }, { - "files": ["packages/ui-components/**"], + "files": [ + "packages/ui-components/**" + ], "rules": { - "import/no-extraneous-dependencies": "off" + "import/no-extraneous-dependencies": "off", + "react/prop-types": "off", + "import/no-unresolved": 0, // Turn off linting error for imports + "import/extensions": 0, // Turn off linting error for imports + "react/require-default-props": "off", + "no-bitwise": "off" // Turn off linting error for bitwise operators because of generic style types using '>>' } }, { - "files": ["packages/ui-chart-components/**"], + "files": [ + "packages/ui-chart-components/**" + ], "rules": { "import/no-extraneous-dependencies": "off" } }, { - "files": ["packages/ui-map-components/**"], + "files": [ + "packages/ui-map-components/**" + ], "rules": { "import/no-extraneous-dependencies": "off" } }, { - "files": ["packages/web-config-server/**"], - "plugins": ["module-resolver"], + "files": [ + "packages/web-config-server/**" + ], + "plugins": [ + "module-resolver" + ], "rules": { "import/no-absolute-path": "off", "module-resolver/use-alias": "warn" @@ -193,7 +249,9 @@ } }, { - "files": ["packages/web-frontend/**"], + "files": [ + "packages/web-frontend/**" + ], "rules": { "camelcase": "warn", "import/no-named-as-default": "off", @@ -224,4 +282,4 @@ } } ] -} +} \ No newline at end of file diff --git a/packages/ui-chart-components/package.json b/packages/ui-chart-components/package.json index d1f7fca0d0..d2449f1d9b 100644 --- a/packages/ui-chart-components/package.json +++ b/packages/ui-chart-components/package.json @@ -12,8 +12,8 @@ "source": "src/index.js", "main": "dist/index.js", "scripts": { - "build": "rm -rf dist && yarn package:build:js", - "build-dev": "npm run build", + "build": "rm -rf dist && yarn package:build:js", + "build-dev": "npm run build", "lint": "yarn package:lint:js", "lint:fix": "yarn lint --fix", "storybook": "start-storybook -s public -p 6006", diff --git a/packages/ui-components/.storybook/main.js b/packages/ui-components/.storybook/main.js index e723272433..aca7007334 100644 --- a/packages/ui-components/.storybook/main.js +++ b/packages/ui-components/.storybook/main.js @@ -2,4 +2,7 @@ module.exports = { stories: ['../stories/**/*.stories.js', '../stories/**/*.stories.ts'], addons: ['@storybook/addon-essentials'], + typescript: { + reactDocgen: 'react-docgen-typescript-plugin', + }, }; diff --git a/packages/ui-components/jest.config.js b/packages/ui-components/jest.config.js index 7606544d93..cbebce9025 100644 --- a/packages/ui-components/jest.config.js +++ b/packages/ui-components/jest.config.js @@ -1,16 +1,24 @@ /* * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +const baseConfig = require('../../jest.config-ts.json'); module.exports = { + ...baseConfig, + rootDir: '.', moduleDirectories: ['node_modules', 'helpers'], - collectCoverageFrom: ['**/src/components/**/*.js'], + collectCoverageFrom: ['**/src/components/**/**'], + testMatch: ['/src/__tests__/**/**.test.**'], // handle static assets @see https://jestjs.io/docs/webpack#handling-static-assets moduleNameMapper: { '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|css)$': '/jestFileMock.js', '^file-loader': '/jestFileMock.js', }, + transform: { + '^.+\\.tsx?$': 'ts-jest', + '^.+\\.js$': 'babel-jest', + }, testTimeout: 30 * 1000, // 30 seconds. Needed for CI as some test take a while if CPU has high load }; diff --git a/packages/ui-components/package.json b/packages/ui-components/package.json index f113cfb93c..e106c2ce00 100644 --- a/packages/ui-components/package.json +++ b/packages/ui-components/package.json @@ -11,9 +11,10 @@ "author": "Beyond Essential Systems (https://beyondessential.com.au)", "source": "src/index.js", "main": "dist/index.js", + "types": "dist/index.d.ts", "scripts": { "build": "rm -rf dist && yarn package:build:ts", - "build-dev": "npm run build", + "build-dev": "npm run build", "lint": "yarn package:lint:js", "lint:fix": "yarn lint --fix", "storybook": "start-storybook -s public -p 6006", @@ -50,12 +51,17 @@ }, "devDependencies": { "@material-ui/styles": "^4.9.10", + "@mui/types": "^7.2.4", "@storybook/react": "^6.3.9", - "@types/react": "^18.2.6", + "@types/jest": "^29.5.1", + "@types/lodash.throttle": "^4.1.7", "@types/react-dom": "^18.2.4", + "@types/react-router-dom": "^5.3.3", + "@types/react-table": "^7.7.14", "@types/styled-components": "^5.1.26", "faker": "^4.1.0", "fast-glob": "^3.2.5", + "react-docgen-typescript-plugin": "^1.0.5", "react-hook-form": "^6.0.6", "react-password-strength-bar": "^0.3.3", "typescript": "^5.0.4" diff --git a/packages/ui-components/src/components/ActionsMenu.js b/packages/ui-components/src/components/ActionsMenu.tsx similarity index 85% rename from packages/ui-components/src/components/ActionsMenu.js rename to packages/ui-components/src/components/ActionsMenu.tsx index 6d25dc52bb..4cb89f386e 100644 --- a/packages/ui-components/src/components/ActionsMenu.js +++ b/packages/ui-components/src/components/ActionsMenu.tsx @@ -3,8 +3,7 @@ * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd */ -import React from 'react'; -import PropTypes from 'prop-types'; +import React, { CSSProperties } from 'react'; import MuiMenu from '@material-ui/core/Menu'; import MuiMenuItem from '@material-ui/core/MenuItem'; import IconButton from '@material-ui/core/IconButton'; @@ -64,8 +63,14 @@ const StyledMenuIcon = styled(MoreVertIcon)` } `; -export const ActionsMenu = ({ options }) => { - const [anchorEl, setAnchorEl] = React.useState(null); +interface Option { + label: string; + action: () => void; + style?: CSSProperties; +} + +export const ActionsMenu = ({ options }: { options: Option[] }) => { + const [anchorEl, setAnchorEl] = React.useState<(EventTarget & HTMLButtonElement) | null>(null); return ( <> setAnchorEl(event.currentTarget)}> @@ -83,7 +88,7 @@ export const ActionsMenu = ({ options }) => { horizontal: -85, }} > - {options.map(({ label, action, style }) => ( + {options.map(({ label, action, style }: Option) => ( { ); }; - -ActionsMenu.propTypes = { - options: PropTypes.array.isRequired, -}; diff --git a/packages/ui-components/src/components/Alert.js b/packages/ui-components/src/components/Alert.tsx similarity index 66% rename from packages/ui-components/src/components/Alert.js rename to packages/ui-components/src/components/Alert.tsx index 618c3ecb57..51f4a442e4 100644 --- a/packages/ui-components/src/components/Alert.js +++ b/packages/ui-components/src/components/Alert.tsx @@ -4,10 +4,9 @@ */ import React from 'react'; -import MuiAlert from '@material-ui/lab/Alert'; +import MuiAlert, { AlertProps } from '@material-ui/lab/Alert'; import styled from 'styled-components'; import { CheckCircle, Warning } from '@material-ui/icons'; -import PropTypes from 'prop-types'; const StyledAlert = styled(MuiAlert)` border-radius: 0; @@ -27,25 +26,18 @@ const StyledAlert = styled(MuiAlert)` } `; -export const Alert = ({ variant, severity, iconMapping, ...props }) => ( - -); - -Alert.propTypes = { - severity: PropTypes.string, - variant: PropTypes.string, - iconMapping: PropTypes.object, -}; - -Alert.defaultProps = { - severity: 'success', - variant: 'filled', - iconMapping: { +export const Alert = ({ + variant = 'filled', + severity = 'success', + iconMapping = { success: , error: , warning: , }, -}; + ...props +}: AlertProps) => ( + +); const StyledSmallAlert = styled(StyledAlert)` font-size: 0.875rem; @@ -60,22 +52,17 @@ const StyledSmallAlert = styled(StyledAlert)` } `; -export const SmallAlert = ({ variant, severity, iconMapping, ...props }) => ( - -); - -SmallAlert.propTypes = { - severity: PropTypes.string, - variant: PropTypes.string, - iconMapping: PropTypes.object, -}; +export const SmallAlert = ({ + variant = 'filled', + severity = 'success', -SmallAlert.defaultProps = { - severity: 'success', - variant: 'filled', - iconMapping: { + iconMapping = { success: , error: , warning: , }, -}; + + ...props +}: AlertProps) => ( + +); diff --git a/packages/ui-components/src/components/Avatar.js b/packages/ui-components/src/components/Avatar.js deleted file mode 100644 index e70daaa59b..0000000000 --- a/packages/ui-components/src/components/Avatar.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import PropTypes from 'prop-types'; -import MuiAvatar from '@material-ui/core/Avatar'; - -export const Avatar = React.memo(({ initial, avatarColors, ...props }) => { - const avatarColor = avatarColors[initial.charCodeAt(0) % avatarColors.length]; - return ; -}); - -Avatar.propTypes = { - initial: PropTypes.string, - avatarColors: PropTypes.array, -}; - -Avatar.defaultProps = { - initial: '', - avatarColors: ['#D13333', '#02B851', '#EF5A06', '#D434E2', '#856226'], -}; diff --git a/packages/ui-components/src/components/Avatar.tsx b/packages/ui-components/src/components/Avatar.tsx new file mode 100644 index 0000000000..016b54fd32 --- /dev/null +++ b/packages/ui-components/src/components/Avatar.tsx @@ -0,0 +1,23 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import MuiAvatar, { AvatarProps as MuiAvatarProps } from '@material-ui/core/Avatar'; + +interface AvatarProps extends MuiAvatarProps { + initial?: string; + avatarColors?: string[]; +} + +export const Avatar = React.memo( + ({ + initial = '', + avatarColors = ['#D13333', '#02B851', '#EF5A06', '#D434E2', '#856226'], + ...props + }: AvatarProps) => { + const avatarColor = avatarColors[initial.charCodeAt(0) % avatarColors.length]; + return ; + }, +); diff --git a/packages/ui-components/src/components/BarMeter.js b/packages/ui-components/src/components/BarMeter.tsx similarity index 80% rename from packages/ui-components/src/components/BarMeter.js rename to packages/ui-components/src/components/BarMeter.tsx index a9d366ab52..c0149f47fc 100644 --- a/packages/ui-components/src/components/BarMeter.js +++ b/packages/ui-components/src/components/BarMeter.tsx @@ -5,7 +5,6 @@ import React from 'react'; import styled from 'styled-components'; -import PropTypes from 'prop-types'; import Typography from '@material-ui/core/Typography'; const Bar = styled.div` @@ -41,7 +40,13 @@ const LegendValue = styled.span` color: ${props => props.theme.palette.text.primary}; `; -export const BarMeter = ({ value, total, legend }) => ( +interface BarMeterProps { + value: number; + total: number; + legend?: string; +} + +export const BarMeter = ({ value, total, legend = 'Value' }: BarMeterProps) => (
{legend}: {`${value}/${total}`} @@ -52,13 +57,3 @@ export const BarMeter = ({ value, total, legend }) => (
); - -BarMeter.propTypes = { - value: PropTypes.number.isRequired, - total: PropTypes.number.isRequired, - legend: PropTypes.string, -}; - -BarMeter.defaultProps = { - legend: 'Value', -}; diff --git a/packages/ui-components/src/components/Breadcrumbs.js b/packages/ui-components/src/components/Breadcrumbs.tsx similarity index 62% rename from packages/ui-components/src/components/Breadcrumbs.js rename to packages/ui-components/src/components/Breadcrumbs.tsx index d3dc2baec9..302aaf1d74 100644 --- a/packages/ui-components/src/components/Breadcrumbs.js +++ b/packages/ui-components/src/components/Breadcrumbs.tsx @@ -3,11 +3,16 @@ * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd */ import React, { useEffect, useState } from 'react'; -import MuiBreadcrumbs from '@material-ui/core/Breadcrumbs'; -import MuiLink from '@material-ui/core/Link'; +import MuiBreadcrumbs, { + BreadcrumbsProps as MuiBreadcrumbsProps, +} from '@material-ui/core/Breadcrumbs'; +import MuiLink, { LinkProps as MuiLinkProps } from '@material-ui/core/Link'; import NavigateNextIcon from '@material-ui/icons/NavigateNext'; -import { Link as RouterLink, useLocation } from 'react-router-dom'; -import PropTypes from 'prop-types'; +import { + LinkProps as ReactRouterLinkProps, + Link as RouterLink, + useLocation, +} from 'react-router-dom'; import styled from 'styled-components'; import { Home as HomeIcon } from './Icons'; @@ -39,14 +44,30 @@ const StyledBreadcrumbs = styled(MuiBreadcrumbs)` } `; -const Link = props => ; +/** + * +This is a workaround for a typescript error that appears because of the 'component' props on Link. It is [a known issue]{@link https://github.com/mui/material-ui/issues/16846} with MUI v4, and is supposed to be fixed in MUI v5 + + */ +const LinkRef = React.forwardRef((props, ref) => ( + +)); + +const Link = (props: MuiLinkProps & ReactRouterLinkProps) => ( + +); /** * Breadcrumbs */ -export const Breadcrumbs = ({ home, ...props }) => { + +interface BreadcrumbsProps extends MuiBreadcrumbsProps { + home?: string; +} + +export const Breadcrumbs = ({ home = 'Dashboard', ...props }: BreadcrumbsProps) => { const location = useLocation(); - const [pathnames, setPathnames] = useState([]); + const [pathnames, setPathnames] = useState([]); useEffect(() => { const newPathnames = location.pathname.split('/').filter(x => x); @@ -74,14 +95,6 @@ export const Breadcrumbs = ({ home, ...props }) => { ); }; -Breadcrumbs.propTypes = { - home: PropTypes.string, -}; - -Breadcrumbs.defaultProps = { - home: 'Dashboard', -}; - /* * Light Breadcrumbs */ diff --git a/packages/ui-components/src/components/Button.js b/packages/ui-components/src/components/Button.tsx similarity index 80% rename from packages/ui-components/src/components/Button.js rename to packages/ui-components/src/components/Button.tsx index d19cba7e6e..f19d2952f7 100644 --- a/packages/ui-components/src/components/Button.js +++ b/packages/ui-components/src/components/Button.tsx @@ -2,11 +2,11 @@ * Tupaia * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd */ -import React from 'react'; +import React, { ReactNode } from 'react'; import styled from 'styled-components'; -import MuiButton from '@material-ui/core/Button'; -import PropTypes from 'prop-types'; -import MuiLink from '@material-ui/core/Link'; +import MuiButton, { ButtonProps as MuiButtonProps } from '@material-ui/core/Button'; +import MuiLink, { LinkProps as MuiLinkProps } from '@material-ui/core/Link'; +import { OverrideableComponentProps } from '../types'; const StyledButton = styled(MuiButton)` font-size: 0.9375rem; @@ -40,25 +40,23 @@ const StyledButton = styled(MuiButton)` * * Default button is styled as material ui contained with the primary color */ -export const Button = ({ children, isLoading, loadingText, disabled, ...props }) => ( +interface ButtonProps extends MuiButtonProps { + isLoading?: boolean; + loadingText?: string; +} + +export const Button = ({ + children, + isLoading = false, + loadingText = 'Loading', + disabled = false, + ...props +}: ButtonProps) => ( {isLoading ? `${loadingText}...` : children} ); -Button.propTypes = { - children: PropTypes.node.isRequired, - isLoading: PropTypes.bool, - loadingText: PropTypes.string, - disabled: PropTypes.bool, -}; - -Button.defaultProps = { - loadingText: 'Loading', - isLoading: false, - disabled: false, -}; - export const LightPrimaryButton = styled(Button)` background-color: #dceffb; color: ${props => props.theme.palette.primary.main}; @@ -71,7 +69,7 @@ export const LightPrimaryButton = styled(Button)` } `; -export const GreyButton = styled(Button)` +export const GreyButton = styled(Button)>` background-color: #6f7b82; color: ${props => props.theme.palette.common.white}; `; @@ -145,7 +143,7 @@ export const SmallButton = styled(Button)` /* * Light Outlined Button */ -export const OutlinedButton = props => + + + + ); }; diff --git a/packages/tupaia-web/src/pages/Project.tsx b/packages/tupaia-web/src/pages/Project.tsx index 31eff2df2b..9593ec3717 100644 --- a/packages/tupaia-web/src/pages/Project.tsx +++ b/packages/tupaia-web/src/pages/Project.tsx @@ -2,18 +2,25 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +import { useParams, useLoaderData } from 'react-router-dom'; +import { get } from '../api'; -import { useParams } from 'react-router-dom'; - +export async function loader({ params }) { + const { projects } = await get('projects'); + return projects.find(p => p.code === params.code); +} export const Project = () => { + console.log('mount'); // Use these to fetch the project and any other entity info you might need - const { projectCode, entityCode, dashboardCode } = useParams(); + const { code, entityCode } = useParams(); + const { description } = useLoaderData(); + console.log('description', description); return (
-

Project: {projectCode}

+

Project: {code}

Entity: {entityCode}

-

Dashboard: {dashboardCode}

+

Description: {description}

); }; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index d7390c1adb..dbdeaa04ba 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -3,9 +3,9 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export { LandingPage } from './LandingPage'; -export { LoginForm } from './LoginForm'; +export { LoginForm, action as loginAction } from './LoginForm'; export { PasswordResetForm } from './PasswordResetForm'; -export { Project } from './Project'; +export { Project, loader as projectLoader } from './Project'; export { RegisterForm } from './RegisterForm'; export { RequestAccessForm } from './RequestAccessForm'; export { VerifyEmailForm } from './VerifyEmailForm'; diff --git a/packages/tupaia-web/vite.config.ts b/packages/tupaia-web/vite.config.ts index ad3f35b389..d3a038332a 100644 --- a/packages/tupaia-web/vite.config.ts +++ b/packages/tupaia-web/vite.config.ts @@ -15,6 +15,7 @@ export default defineConfig({ global: {}, }, resolve: { + dedupe: ['@material-ui/core', 'styled-components'], preserveSymlinks: true, // this is the fix! alias: { http: 'moduleMock.js', diff --git a/yarn.lock b/yarn.lock index f617fe1f45..71a6aa6beb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,17 +22,6 @@ __metadata: languageName: node linkType: hard -"@aw-web-design/x-default-browser@npm:1.4.88": - version: 1.4.88 - resolution: "@aw-web-design/x-default-browser@npm:1.4.88" - dependencies: - default-browser-id: 3.0.0 - bin: - x-default-browser: bin/x-default-browser.js - checksum: c85e61dc9e5bb04906d8ac29cce35369705c3ea3abe36a5afdecc9caefd7ee0f14596ccc6eb617c86790a67b6ee7f7f070a3e2f9e9152a8ba92adf2ccee1433a - languageName: node - linkType: hard - "@babel/cli@npm:^7.11.6": version: 7.21.5 resolution: "@babel/cli@npm:7.21.5" @@ -87,7 +76,7 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.5, @babel/compat-data@npm:^7.22.0, @babel/compat-data@npm:^7.22.3": +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.0, @babel/compat-data@npm:^7.22.3": version: 7.22.3 resolution: "@babel/compat-data@npm:7.22.3" checksum: eb001646f41459f42ccb0d39ee8bb3c3c495bc297234817044c0002689c625e3159a6678c53fd31bd98cf21f31472b73506f350fc6906e3bdfa49cb706e2af8d @@ -142,7 +131,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.0.0, @babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.16.0, @babel/core@npm:^7.20.12, @babel/core@npm:^7.20.2, @babel/core@npm:^7.21.4, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.0, @babel/core@npm:^7.8.4": +"@babel/core@npm:^7.0.0, @babel/core@npm:^7.1.0, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.21.4, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.0, @babel/core@npm:^7.8.4": version: 7.22.1 resolution: "@babel/core@npm:7.22.1" dependencies: @@ -165,30 +154,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:~7.21.0": - version: 7.21.8 - resolution: "@babel/core@npm:7.21.8" - dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.21.4 - "@babel/generator": ^7.21.5 - "@babel/helper-compilation-targets": ^7.21.5 - "@babel/helper-module-transforms": ^7.21.5 - "@babel/helpers": ^7.21.5 - "@babel/parser": ^7.21.8 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.5 - "@babel/types": ^7.21.5 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.2 - semver: ^6.3.0 - checksum: f28118447355af2a90bd340e2e60699f94c8020517eba9b71bf8ebff62fa9e00d63f076e033f9dfb97548053ad62ada45fafb0d96584b1a90e8aef5a3b8241b1 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.21.5, @babel/generator@npm:^7.22.0, @babel/generator@npm:^7.22.3, @babel/generator@npm:^7.5.0, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.22.0, @babel/generator@npm:^7.5.0, @babel/generator@npm:^7.7.2": version: 7.22.3 resolution: "@babel/generator@npm:7.22.3" dependencies: @@ -200,18 +166,6 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:~7.21.1": - version: 7.21.9 - resolution: "@babel/generator@npm:7.21.9" - dependencies: - "@babel/types": ^7.21.5 - "@jridgewell/gen-mapping": ^0.3.2 - "@jridgewell/trace-mapping": ^0.3.17 - jsesc: ^2.5.1 - checksum: 5bd10334ebdf7f2a30eb4a1fd99d369a57703aa2234527784449187512c254a1174fa739c9d4c31bcbb6018732012a0664bec7c314f12b5ec2458737ddbb01c7 - languageName: node - linkType: hard - "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -230,7 +184,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.5, @babel/helper-compilation-targets@npm:^7.22.1": +"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.22.1": version: 7.22.1 resolution: "@babel/helper-compilation-targets@npm:7.22.1" dependencies: @@ -295,22 +249,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.3.3": - version: 0.3.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" - dependencies: - "@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 - peerDependencies: - "@babel/core": ^7.4.0-0 - checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c - languageName: node - linkType: hard - "@babel/helper-define-polyfill-provider@npm:^0.4.0": version: 0.4.0 resolution: "@babel/helper-define-polyfill-provider@npm:0.4.0" @@ -327,7 +265,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.18.9, @babel/helper-environment-visitor@npm:^7.21.5, @babel/helper-environment-visitor@npm:^7.22.1": +"@babel/helper-environment-visitor@npm:^7.18.9, @babel/helper-environment-visitor@npm:^7.22.1": version: 7.22.1 resolution: "@babel/helper-environment-visitor@npm:7.22.1" checksum: a6b4bb5505453bff95518d361ac1de393f0029aeb8b690c70540f4317934c53c43cc4afcda8c752ffa8c272e63ed6b929a56eca28e4978424177b24238b21bf9 @@ -498,7 +436,7 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.21.5, @babel/helpers@npm:^7.22.0": +"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.22.0": version: 7.22.3 resolution: "@babel/helpers@npm:7.22.3" dependencies: @@ -547,24 +485,6 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.13.16, @babel/parser@npm:^7.21.5, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.22.4": - version: 7.22.4 - resolution: "@babel/parser@npm:7.22.4" - bin: - parser: ./bin/babel-parser.js - checksum: 0ca6d3a2d9aae2504ba1bc494704b64a83140884f7379f609de69bd39b60adb58a4f8ec692fe53fef8657dd82705d01b7e6efb65e18296326bdd66f71d52d9a9 - languageName: node - linkType: hard - -"@babel/parser@npm:~7.21.2": - version: 7.21.9 - resolution: "@babel/parser@npm:7.21.9" - bin: - parser: ./bin/babel-parser.js - checksum: 985ccc311eb286a320331fd21ff54d94935df76e081abdb304cd4591ea2051a6c799c6b0d8e26d09a9dd041797d9a91ebadeb0c50699d0101bd39fc565082d5c - languageName: node - linkType: hard - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -576,7 +496,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.0, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.3": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.3" dependencies: @@ -600,21 +520,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-remap-async-to-generator": ^7.18.9 - "@babel/plugin-syntax-async-generators": ^7.8.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 111109ee118c9e69982f08d5e119eab04190b36a0f40e22e873802d941956eee66d2aa5a15f5321e51e3f9aa70a91136451b987fe15185ef8cc547ac88937723 - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.12.1, @babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.16.0, @babel/plugin-proposal-class-properties@npm:^7.18.6": +"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.12.1, @babel/plugin-proposal-class-properties@npm:^7.16.0": version: 7.18.6 resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" dependencies: @@ -626,19 +532,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-static-block@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/plugin-proposal-class-static-block@npm:7.21.0" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 236c0ad089e7a7acab776cc1d355330193314bfcd62e94e78f2df35817c6144d7e0e0368976778afd6b7c13e70b5068fa84d7abbf967d4f182e60d03f9ef802b - languageName: node - linkType: hard - "@babel/plugin-proposal-decorators@npm:^7.12.12, @babel/plugin-proposal-decorators@npm:^7.16.4": version: 7.22.3 resolution: "@babel/plugin-proposal-decorators@npm:7.22.3" @@ -654,18 +547,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-dynamic-import@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-dynamic-import@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 96b1c8a8ad8171d39e9ab106be33bde37ae09b22fb2c449afee9a5edf3c537933d79d963dcdc2694d10677cb96da739cdf1b53454e6a5deab9801f28a818bb2f - languageName: node - linkType: hard - "@babel/plugin-proposal-export-default-from@npm:^7.0.0, @babel/plugin-proposal-export-default-from@npm:^7.12.1": version: 7.18.10 resolution: "@babel/plugin-proposal-export-default-from@npm:7.18.10" @@ -678,43 +559,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-export-namespace-from@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 84ff22bacc5d30918a849bfb7e0e90ae4c5b8d8b65f2ac881803d1cf9068dffbe53bd657b0e4bc4c20b4db301b1c85f1e74183cf29a0dd31e964bd4e97c363ef - languageName: node - linkType: hard - -"@babel/plugin-proposal-json-strings@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-json-strings@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-json-strings": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 25ba0e6b9d6115174f51f7c6787e96214c90dd4026e266976b248a2ed417fe50fddae72843ffb3cbe324014a18632ce5648dfac77f089da858022b49fd608cb3 - languageName: node - linkType: hard - -"@babel/plugin-proposal-logical-assignment-operators@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.20.7" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cdd7b8136cc4db3f47714d5266f9e7b592a2ac5a94a5878787ce08890e97c8ab1ca8e94b27bfeba7b0f2b1549a026d9fc414ca2196de603df36fb32633bbdc19 - languageName: node - linkType: hard - -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.0.0, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.12.1, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.14.5, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.0.0, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.12.1, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.14.5, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0": version: 7.18.6 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" dependencies: @@ -726,7 +571,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-numeric-separator@npm:^7.16.0, @babel/plugin-proposal-numeric-separator@npm:^7.18.6": +"@babel/plugin-proposal-numeric-separator@npm:^7.16.0": version: 7.18.6 resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" dependencies: @@ -751,7 +596,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.12.1, @babel/plugin-proposal-object-rest-spread@npm:^7.20.7": +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.12.1": version: 7.20.7 resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" dependencies: @@ -766,7 +611,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-catch-binding@npm:^7.0.0, @babel/plugin-proposal-optional-catch-binding@npm:^7.18.6": +"@babel/plugin-proposal-optional-catch-binding@npm:^7.0.0": version: 7.18.6 resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" dependencies: @@ -778,7 +623,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.0.0, @babel/plugin-proposal-optional-chaining@npm:^7.12.7, @babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.16.0, @babel/plugin-proposal-optional-chaining@npm:^7.21.0": +"@babel/plugin-proposal-optional-chaining@npm:^7.0.0, @babel/plugin-proposal-optional-chaining@npm:^7.12.7, @babel/plugin-proposal-optional-chaining@npm:^7.16.0": version: 7.21.0 resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" dependencies: @@ -791,7 +636,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-methods@npm:^7.12.1, @babel/plugin-proposal-private-methods@npm:^7.16.0, @babel/plugin-proposal-private-methods@npm:^7.18.6": +"@babel/plugin-proposal-private-methods@npm:^7.12.1, @babel/plugin-proposal-private-methods@npm:^7.16.0": version: 7.18.6 resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6" dependencies: @@ -817,7 +662,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": version: 7.18.6 resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" dependencies: @@ -939,7 +784,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.22.0, @babel/plugin-syntax-import-attributes@npm:^7.22.3": +"@babel/plugin-syntax-import-attributes@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.3" dependencies: @@ -1116,7 +961,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.22.0, @babel/plugin-transform-async-generator-functions@npm:^7.22.3": +"@babel/plugin-transform-async-generator-functions@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.3" dependencies: @@ -1165,7 +1010,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.22.0, @babel/plugin-transform-class-properties@npm:^7.22.3": +"@babel/plugin-transform-class-properties@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-class-properties@npm:7.22.3" dependencies: @@ -1177,7 +1022,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.22.0, @babel/plugin-transform-class-static-block@npm:^7.22.3": +"@babel/plugin-transform-class-static-block@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-class-static-block@npm:7.22.3" dependencies: @@ -1279,7 +1124,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.22.0, @babel/plugin-transform-export-namespace-from@npm:^7.22.3": +"@babel/plugin-transform-export-namespace-from@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.3" dependencies: @@ -1327,7 +1172,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.22.0, @babel/plugin-transform-json-strings@npm:^7.22.3": +"@babel/plugin-transform-json-strings@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-json-strings@npm:7.22.3" dependencies: @@ -1350,7 +1195,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.0, @babel/plugin-transform-logical-assignment-operators@npm:^7.22.3": +"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.3" dependencies: @@ -1385,7 +1230,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.21.5": +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.21.5": version: 7.21.5 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.21.5" dependencies: @@ -1398,7 +1243,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.20.11, @babel/plugin-transform-modules-systemjs@npm:^7.22.0, @babel/plugin-transform-modules-systemjs@npm:^7.22.3": +"@babel/plugin-transform-modules-systemjs@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.22.3" dependencies: @@ -1424,7 +1269,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.20.5, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.0, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.3": +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.3" dependencies: @@ -1436,7 +1281,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.18.6, @babel/plugin-transform-new-target@npm:^7.22.0, @babel/plugin-transform-new-target@npm:^7.22.3": +"@babel/plugin-transform-new-target@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-new-target@npm:7.22.3" dependencies: @@ -1447,7 +1292,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.0, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3": +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.3" dependencies: @@ -1459,7 +1304,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.22.0, @babel/plugin-transform-numeric-separator@npm:^7.22.3": +"@babel/plugin-transform-numeric-separator@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.3" dependencies: @@ -1482,7 +1327,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.22.0, @babel/plugin-transform-object-rest-spread@npm:^7.22.3": +"@babel/plugin-transform-object-rest-spread@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.3" dependencies: @@ -1509,7 +1354,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.22.0, @babel/plugin-transform-optional-catch-binding@npm:^7.22.3": +"@babel/plugin-transform-optional-catch-binding@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.3" dependencies: @@ -1534,7 +1379,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.21.3, @babel/plugin-transform-parameters@npm:^7.22.0, @babel/plugin-transform-parameters@npm:^7.22.3": +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.22.0, @babel/plugin-transform-parameters@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-parameters@npm:7.22.3" dependencies: @@ -1545,7 +1390,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.22.0, @babel/plugin-transform-private-methods@npm:^7.22.3": +"@babel/plugin-transform-private-methods@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-private-methods@npm:7.22.3" dependencies: @@ -1557,7 +1402,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.22.0, @babel/plugin-transform-private-property-in-object@npm:^7.22.3": +"@babel/plugin-transform-private-property-in-object@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.3" dependencies: @@ -1615,7 +1460,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.0.0, @babel/plugin-transform-react-jsx-self@npm:^7.18.6, @babel/plugin-transform-react-jsx-self@npm:^7.21.0": +"@babel/plugin-transform-react-jsx-self@npm:^7.0.0, @babel/plugin-transform-react-jsx-self@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.21.0" dependencies: @@ -1637,7 +1482,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.12.12, @babel/plugin-transform-react-jsx@npm:^7.18.6, @babel/plugin-transform-react-jsx@npm:^7.19.0, @babel/plugin-transform-react-jsx@npm:^7.22.3": +"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.12.12, @babel/plugin-transform-react-jsx@npm:^7.18.6, @babel/plugin-transform-react-jsx@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-react-jsx@npm:7.22.3" dependencies: @@ -1784,7 +1629,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.22.0, @babel/plugin-transform-unicode-property-regex@npm:^7.22.3": +"@babel/plugin-transform-unicode-property-regex@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.3" dependencies: @@ -1808,7 +1653,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.0, @babel/plugin-transform-unicode-sets-regex@npm:^7.22.3": +"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.0": version: 7.22.3 resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.3" dependencies: @@ -1920,183 +1765,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.20.2": - version: 7.22.4 - resolution: "@babel/preset-env@npm:7.22.4" - dependencies: - "@babel/compat-data": ^7.22.3 - "@babel/helper-compilation-targets": ^7.22.1 - "@babel/helper-plugin-utils": ^7.21.5 - "@babel/helper-validator-option": ^7.21.0 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.22.3 - "@babel/plugin-proposal-private-property-in-object": ^7.21.0 - "@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-import-attributes": ^7.22.3 - "@babel/plugin-syntax-import-meta": ^7.10.4 - "@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 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@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-syntax-unicode-sets-regex": ^7.18.6 - "@babel/plugin-transform-arrow-functions": ^7.21.5 - "@babel/plugin-transform-async-generator-functions": ^7.22.3 - "@babel/plugin-transform-async-to-generator": ^7.20.7 - "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.21.0 - "@babel/plugin-transform-class-properties": ^7.22.3 - "@babel/plugin-transform-class-static-block": ^7.22.3 - "@babel/plugin-transform-classes": ^7.21.0 - "@babel/plugin-transform-computed-properties": ^7.21.5 - "@babel/plugin-transform-destructuring": ^7.21.3 - "@babel/plugin-transform-dotall-regex": ^7.18.6 - "@babel/plugin-transform-duplicate-keys": ^7.18.9 - "@babel/plugin-transform-dynamic-import": ^7.22.1 - "@babel/plugin-transform-exponentiation-operator": ^7.18.6 - "@babel/plugin-transform-export-namespace-from": ^7.22.3 - "@babel/plugin-transform-for-of": ^7.21.5 - "@babel/plugin-transform-function-name": ^7.18.9 - "@babel/plugin-transform-json-strings": ^7.22.3 - "@babel/plugin-transform-literals": ^7.18.9 - "@babel/plugin-transform-logical-assignment-operators": ^7.22.3 - "@babel/plugin-transform-member-expression-literals": ^7.18.6 - "@babel/plugin-transform-modules-amd": ^7.20.11 - "@babel/plugin-transform-modules-commonjs": ^7.21.5 - "@babel/plugin-transform-modules-systemjs": ^7.22.3 - "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.3 - "@babel/plugin-transform-new-target": ^7.22.3 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.22.3 - "@babel/plugin-transform-numeric-separator": ^7.22.3 - "@babel/plugin-transform-object-rest-spread": ^7.22.3 - "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-optional-catch-binding": ^7.22.3 - "@babel/plugin-transform-optional-chaining": ^7.22.3 - "@babel/plugin-transform-parameters": ^7.22.3 - "@babel/plugin-transform-private-methods": ^7.22.3 - "@babel/plugin-transform-private-property-in-object": ^7.22.3 - "@babel/plugin-transform-property-literals": ^7.18.6 - "@babel/plugin-transform-regenerator": ^7.21.5 - "@babel/plugin-transform-reserved-words": ^7.18.6 - "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.20.7 - "@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.21.5 - "@babel/plugin-transform-unicode-property-regex": ^7.22.3 - "@babel/plugin-transform-unicode-regex": ^7.18.6 - "@babel/plugin-transform-unicode-sets-regex": ^7.22.3 - "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.22.4 - babel-plugin-polyfill-corejs2: ^0.4.3 - babel-plugin-polyfill-corejs3: ^0.8.1 - babel-plugin-polyfill-regenerator: ^0.5.0 - core-js-compat: ^3.30.2 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 68ae8b712e7548cb0aa593019bf22ed473bd83887c621c1f820ef0af99958d48b687c01b8aee16035cbc70edae1edc703b892e6efed14b95c8435343a2cb2bda - languageName: node - linkType: hard - -"@babel/preset-env@npm:~7.21.0": - version: 7.21.5 - resolution: "@babel/preset-env@npm:7.21.5" - dependencies: - "@babel/compat-data": ^7.21.5 - "@babel/helper-compilation-targets": ^7.21.5 - "@babel/helper-plugin-utils": ^7.21.5 - "@babel/helper-validator-option": ^7.21.0 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.20.7 - "@babel/plugin-proposal-async-generator-functions": ^7.20.7 - "@babel/plugin-proposal-class-properties": ^7.18.6 - "@babel/plugin-proposal-class-static-block": ^7.21.0 - "@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.20.7 - "@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.7 - "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 - "@babel/plugin-proposal-optional-chaining": ^7.21.0 - "@babel/plugin-proposal-private-methods": ^7.18.6 - "@babel/plugin-proposal-private-property-in-object": ^7.21.0 - "@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-import-meta": ^7.10.4 - "@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 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@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.21.5 - "@babel/plugin-transform-async-to-generator": ^7.20.7 - "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.21.0 - "@babel/plugin-transform-classes": ^7.21.0 - "@babel/plugin-transform-computed-properties": ^7.21.5 - "@babel/plugin-transform-destructuring": ^7.21.3 - "@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.21.5 - "@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.20.11 - "@babel/plugin-transform-modules-commonjs": ^7.21.5 - "@babel/plugin-transform-modules-systemjs": ^7.20.11 - "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.20.5 - "@babel/plugin-transform-new-target": ^7.18.6 - "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-parameters": ^7.21.3 - "@babel/plugin-transform-property-literals": ^7.18.6 - "@babel/plugin-transform-regenerator": ^7.21.5 - "@babel/plugin-transform-reserved-words": ^7.18.6 - "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.20.7 - "@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.21.5 - "@babel/plugin-transform-unicode-regex": ^7.18.6 - "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.21.5 - 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 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 86e167f3a351c89f8cd1409262481ece6ddc085b76147e801530ce29d60b1cfda8b264b1efd1ae27b8181b073a923c7161f21e2ebc0a41d652d717b10cf1c829 - languageName: node - linkType: hard - -"@babel/preset-flow@npm:^7.0.0, @babel/preset-flow@npm:^7.12.1, @babel/preset-flow@npm:^7.13.13": +"@babel/preset-flow@npm:^7.0.0, @babel/preset-flow@npm:^7.12.1": version: 7.21.4 resolution: "@babel/preset-flow@npm:7.21.4" dependencies: @@ -2140,7 +1809,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.12.7, @babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.16.0": +"@babel/preset-typescript@npm:^7.12.7, @babel/preset-typescript@npm:^7.16.0": version: 7.21.5 resolution: "@babel/preset-typescript@npm:7.21.5" dependencies: @@ -2155,7 +1824,7 @@ __metadata: languageName: node linkType: hard -"@babel/register@npm:^7.0.0, @babel/register@npm:^7.12.1, @babel/register@npm:^7.13.16, @babel/register@npm:^7.21.0": +"@babel/register@npm:^7.0.0, @babel/register@npm:^7.12.1, @babel/register@npm:^7.21.0": version: 7.21.0 resolution: "@babel/register@npm:7.21.0" dependencies: @@ -2187,7 +1856,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.2, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.2, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.22.3 resolution: "@babel/runtime@npm:7.22.3" dependencies: @@ -2225,42 +1894,6 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.21.5": - version: 7.22.4 - resolution: "@babel/traverse@npm:7.22.4" - dependencies: - "@babel/code-frame": ^7.21.4 - "@babel/generator": ^7.22.3 - "@babel/helper-environment-visitor": ^7.22.1 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.22.4 - "@babel/types": ^7.22.4 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 9560ae22092d5a7c52849145dd3e5aed2ffb73d61255e70e19e3fbd06bcbafbbdecea28df40a42ee3b60b01e85a42224ec841df93e867547e329091cc2f2bb6f - languageName: node - linkType: hard - -"@babel/traverse@npm:~7.21.2": - version: 7.21.5 - resolution: "@babel/traverse@npm:7.21.5" - dependencies: - "@babel/code-frame": ^7.21.4 - "@babel/generator": ^7.21.5 - "@babel/helper-environment-visitor": ^7.21.5 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.21.5 - "@babel/types": ^7.21.5 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: b403733fa7d858f0c8e224f0434a6ade641bc469a4f92975363391e796629d5bf53e544761dfe85039aab92d5389ebe7721edb309d7a5bb7df2bf74f37bf9f47 - languageName: node - linkType: hard - "@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.12.7, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.4, @babel/types@npm:^7.21.5, @babel/types@npm:^7.22.0, @babel/types@npm:^7.22.3, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0, @babel/types@npm:^7.8.3": version: 7.22.3 resolution: "@babel/types@npm:7.22.3" @@ -2272,28 +1905,6 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.22.4": - version: 7.22.4 - resolution: "@babel/types@npm:7.22.4" - dependencies: - "@babel/helper-string-parser": ^7.21.5 - "@babel/helper-validator-identifier": ^7.19.1 - to-fast-properties: ^2.0.0 - checksum: ffe36bb4f4a99ad13c426a98c3b508d70736036cae4e471d9c862e3a579847ed4f480686af0fce2633f6f7c0f0d3bf02da73da36e7edd3fde0b2061951dcba9a - languageName: node - linkType: hard - -"@babel/types@npm:~7.21.2": - version: 7.21.5 - resolution: "@babel/types@npm:7.21.5" - dependencies: - "@babel/helper-string-parser": ^7.21.5 - "@babel/helper-validator-identifier": ^7.19.1 - to-fast-properties: ^2.0.0 - checksum: 43242a99c612d13285ee4af46cc0f1066bcb6ffd38307daef7a76e8c70f36cfc3255eb9e75c8e768b40e761176c313aec4d5c0b9d97a21e494d49d5fd123a9f7 - languageName: node - linkType: hard - "@base2/pretty-print-object@npm:1.0.1": version: 1.0.1 resolution: "@base2/pretty-print-object@npm:1.0.1" @@ -2565,15 +2176,6 @@ __metadata: languageName: node linkType: hard -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0": - version: 1.0.1 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" - peerDependencies: - react: ">=16.8.0" - checksum: 700b6e5bbb37a9231f203bb3af11295eed01d73b2293abece0bc2a2237015e944d7b5114d4887ad9a79776504aa51ed2a8b0ddbc117c54495dd01a6b22f93786 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/android-arm64@npm:0.17.19" @@ -2745,13 +2347,6 @@ __metadata: languageName: node linkType: hard -"@fal-works/esbuild-plugin-global-externals@npm:^2.1.2": - version: 2.1.2 - resolution: "@fal-works/esbuild-plugin-global-externals@npm:2.1.2" - checksum: c59715902b9062aa7ff38973f298b509499fd146dbf564dc338b3f9e896da5bffb4ca676c27587fde79b3586003e24d65960acb62f009bca43dca34c76f8cbf7 - languageName: node - linkType: hard - "@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" @@ -3291,29 +2886,6 @@ __metadata: languageName: node linkType: hard -"@jest/transform@npm:^29.3.1": - version: 29.5.0 - resolution: "@jest/transform@npm:29.5.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^29.5.0 - "@jridgewell/trace-mapping": ^0.3.15 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^2.0.0 - fast-json-stable-stringify: ^2.1.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 - jest-regex-util: ^29.4.3 - jest-util: ^29.5.0 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.2 - checksum: d55d604085c157cf5112e165ff5ac1fa788873b3b31265fb4734ca59892ee24e44119964cc47eb6d178dd9512bbb6c576d1e20e51a201ff4e24d31e818a1c92d - languageName: node - linkType: hard - "@jest/types@npm:^24.9.0": version: 24.9.0 resolution: "@jest/types@npm:24.9.0" @@ -3377,24 +2949,6 @@ __metadata: languageName: node linkType: hard -"@joshwooding/vite-plugin-react-docgen-typescript@npm:0.2.1": - version: 0.2.1 - resolution: "@joshwooding/vite-plugin-react-docgen-typescript@npm:0.2.1" - dependencies: - glob: ^7.2.0 - glob-promise: ^4.2.0 - magic-string: ^0.27.0 - react-docgen-typescript: ^2.2.2 - peerDependencies: - typescript: ">= 4.3.x" - vite: ^3.0.0 || ^4.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 91401505b379396cb48c74e99ebafb8a3f85bb0c38783d4b17df42d5420782bf733f049f9a97659feb4423b4e4db9ba35fd8230add5fd32e615d5633d37cdcfd - languageName: node - linkType: hard - "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.3 resolution: "@jridgewell/gen-mapping@npm:0.3.3" @@ -3444,7 +2998,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13": +"@jridgewell/sourcemap-codec@npm:^1.4.10": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 @@ -3461,7 +3015,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.18 resolution: "@jridgewell/trace-mapping@npm:0.3.18" dependencies: @@ -3471,13 +3025,6 @@ __metadata: languageName: node linkType: hard -"@juggle/resize-observer@npm:^3.3.1": - version: 3.4.0 - resolution: "@juggle/resize-observer@npm:3.4.0" - checksum: 2505028c05cc2e17639fcad06218b1c4b60f932a4ebb4b41ab546ef8c157031ae377e3f560903801f6d01706dbefd4943b6c4704bf19ed86dfa1c62f1473a570 - languageName: node - linkType: hard - "@mapbox/polyline@npm:^0.2.0": version: 0.2.0 resolution: "@mapbox/polyline@npm:0.2.0" @@ -3675,18 +3222,6 @@ __metadata: languageName: node linkType: hard -"@mdx-js/react@npm:^2.1.5": - version: 2.3.0 - resolution: "@mdx-js/react@npm:2.3.0" - dependencies: - "@types/mdx": ^2.0.0 - "@types/react": ">=16" - peerDependencies: - react: ">=16" - checksum: f45fe779556e6cd9a787f711274480e0638b63c460f192ebdcd77cc07ffa61e23c98cb46dd46e577093e1cb4997a232a848d1fb0ba850ae204422cf603add524 - languageName: node - linkType: hard - "@mdx-js/util@npm:1.6.22": version: 1.6.22 resolution: "@mdx-js/util@npm:1.6.22" @@ -3716,17 +3251,6 @@ __metadata: languageName: node linkType: hard -"@ndelangen/get-tarball@npm:^3.0.7": - version: 3.0.9 - resolution: "@ndelangen/get-tarball@npm:3.0.9" - dependencies: - gunzip-maybe: ^1.4.2 - pump: ^3.0.0 - tar-fs: ^2.1.1 - checksum: 7fa8ac40b4e85738a4ee6bf891bc27fce2445b65b4477e0ec86aed0fa62ab18bdf5d193ce04553ad9bfa639e1eef33b8b30da4ef3e7218f12bf95f24c8786e5b - languageName: node - linkType: hard - "@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3": version: 2.1.8-no-fsevents.3 resolution: "@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3" @@ -4384,307 +3908,6 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-actions@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-actions@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/manager-api": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/theming": 7.0.18 - "@storybook/types": 7.0.18 - dequal: ^2.0.2 - lodash: ^4.17.21 - polished: ^4.2.2 - prop-types: ^15.7.2 - react-inspector: ^6.0.0 - telejson: ^7.0.3 - ts-dedent: ^2.0.0 - uuid: ^9.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: dcb6a9f80b6534e836494fde3c5965a5bd6d81634868a85b46c6869cc5d6dab7f41c9967f86d70442c1e54608518983528ae028bc32240b36a3e1351fc9dbca2 - languageName: node - linkType: hard - -"@storybook/addon-backgrounds@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-backgrounds@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/manager-api": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/theming": 7.0.18 - "@storybook/types": 7.0.18 - memoizerific: ^1.11.3 - ts-dedent: ^2.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: a97218ca2d85ec4935e6e976ef95fff71605ec1a518a786b4a5b7b3bf4a915b734c1e63ac564d4c73beeee66a19b620cf91b66458b95cdf638cb910790325609 - languageName: node - linkType: hard - -"@storybook/addon-controls@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-controls@npm:7.0.18" - dependencies: - "@storybook/blocks": 7.0.18 - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/core-common": 7.0.18 - "@storybook/manager-api": 7.0.18 - "@storybook/node-logger": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/theming": 7.0.18 - "@storybook/types": 7.0.18 - lodash: ^4.17.21 - ts-dedent: ^2.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 5800e809c9a68e833c6025635d36bc2592eb6d6b5bc9111cebf931a948be59e6993bd5d543a79382a71f89c7314f4b7198cff75adba3caebecddf3b000bc5ae9 - languageName: node - linkType: hard - -"@storybook/addon-docs@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-docs@npm:7.0.18" - dependencies: - "@babel/core": ^7.20.2 - "@babel/plugin-transform-react-jsx": ^7.19.0 - "@jest/transform": ^29.3.1 - "@mdx-js/react": ^2.1.5 - "@storybook/blocks": 7.0.18 - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/csf-plugin": 7.0.18 - "@storybook/csf-tools": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/mdx2-csf": ^1.0.0 - "@storybook/node-logger": 7.0.18 - "@storybook/postinstall": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/react-dom-shim": 7.0.18 - "@storybook/theming": 7.0.18 - "@storybook/types": 7.0.18 - fs-extra: ^11.1.0 - remark-external-links: ^8.0.0 - remark-slug: ^6.0.0 - ts-dedent: ^2.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 5c35821067d317e39183aed709b3b18100e015bd5bce155e34cf71b9926ebc4cd37dd9bf296658bfb7a812a30d5dbb3692196d54349de07e43797d763ec10a14 - languageName: node - linkType: hard - -"@storybook/addon-essentials@npm:^7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-essentials@npm:7.0.18" - dependencies: - "@storybook/addon-actions": 7.0.18 - "@storybook/addon-backgrounds": 7.0.18 - "@storybook/addon-controls": 7.0.18 - "@storybook/addon-docs": 7.0.18 - "@storybook/addon-highlight": 7.0.18 - "@storybook/addon-measure": 7.0.18 - "@storybook/addon-outline": 7.0.18 - "@storybook/addon-toolbars": 7.0.18 - "@storybook/addon-viewport": 7.0.18 - "@storybook/core-common": 7.0.18 - "@storybook/manager-api": 7.0.18 - "@storybook/node-logger": 7.0.18 - "@storybook/preview-api": 7.0.18 - ts-dedent: ^2.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: b0209f48ec40c141aa589904c7ef21f65ac695cbb1807e1a32b10472c3aa80a73b0897ff3377fec5c7821353fa1de5a05b73b467584a2054c7715fbc7fe6188a - languageName: node - linkType: hard - -"@storybook/addon-highlight@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-highlight@npm:7.0.18" - dependencies: - "@storybook/core-events": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/preview-api": 7.0.18 - checksum: bb90dc181d2946328f390f7b9ecf8ecb392dbac6bfedbc677157693bbabd288571e25deaec44edf583c030e12be6926aa85eb4622e7f6bb516960a15d1a7c45c - languageName: node - linkType: hard - -"@storybook/addon-interactions@npm:^7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-interactions@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/core-common": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/instrumenter": 7.0.18 - "@storybook/manager-api": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/theming": 7.0.18 - "@storybook/types": 7.0.18 - jest-mock: ^27.0.6 - polished: ^4.2.2 - ts-dedent: ^2.2.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 8208d22bc424ac64b85fcebbd75b5ef2cc74b2ad9fdc931dc51bee977383f6216b80ae8129ae3063df2f1ceb3aab679a3c92622d3de09d59fbad70fffd313156 - languageName: node - linkType: hard - -"@storybook/addon-links@npm:^7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-links@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/csf": ^0.1.0 - "@storybook/global": ^5.0.0 - "@storybook/manager-api": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/router": 7.0.18 - "@storybook/types": 7.0.18 - prop-types: ^15.7.2 - ts-dedent: ^2.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: c88637a1bf6ce9a660d271f904fac11556ba81d0c9b52b311d2e4bbbec131c7ccc3f72ae8f3d747d1e5756cdde8c42ac04116815f89dea67517bebb392c9c8cb - languageName: node - linkType: hard - -"@storybook/addon-measure@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-measure@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/manager-api": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/types": 7.0.18 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 857ba8e4e60ec5befe084f8028b93dcb587566e20f1b089e61441c350447b5bc2c0cddb56aee60882744c60163c8946bdf87921c208dc2952f12ad48607094cd - languageName: node - linkType: hard - -"@storybook/addon-outline@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-outline@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/manager-api": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/types": 7.0.18 - ts-dedent: ^2.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: e4e9d3ed7eeb922f5a7ea03bb1d2638e10ea0bc3c9eccaab6fdf527b99d6f381b5bab6cb80e7799d6fe52014de9913954392857419b45b618439279c1cd68003 - languageName: node - linkType: hard - -"@storybook/addon-toolbars@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-toolbars@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/manager-api": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/theming": 7.0.18 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: eacabdb93d6134e8dd65345e57d52a64e37102987bbb01977da4fed4e3fb0b210aba9fa8b0986322b682ade11d33cf2d98e29823f407d9a3ef644afc52c5a79b - languageName: node - linkType: hard - -"@storybook/addon-viewport@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/addon-viewport@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/manager-api": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/theming": 7.0.18 - memoizerific: ^1.11.3 - prop-types: ^15.7.2 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 13ac399be9496bfc0cfb05b81ac37fec332ad93855c75073b098506b4b3a5e0ac9a5f862a151ac5738f8ae01c918f3a5f8a506d9126e27906e2f8741b4345eed - languageName: node - linkType: hard - "@storybook/addons@npm:6.5.16": version: 6.5.16 resolution: "@storybook/addons@npm:6.5.16" @@ -4735,103 +3958,6 @@ __metadata: languageName: node linkType: hard -"@storybook/blocks@npm:7.0.18, @storybook/blocks@npm:^7.0.18": - version: 7.0.18 - resolution: "@storybook/blocks@npm:7.0.18" - dependencies: - "@storybook/channels": 7.0.18 - "@storybook/client-logger": 7.0.18 - "@storybook/components": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/csf": ^0.1.0 - "@storybook/docs-tools": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/manager-api": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/theming": 7.0.18 - "@storybook/types": 7.0.18 - "@types/lodash": ^4.14.167 - color-convert: ^2.0.1 - dequal: ^2.0.2 - lodash: ^4.17.21 - markdown-to-jsx: ^7.1.8 - memoizerific: ^1.11.3 - polished: ^4.2.2 - react-colorful: ^5.1.2 - telejson: ^7.0.3 - ts-dedent: ^2.0.0 - util-deprecate: ^1.0.2 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 7c841fc70b926789775859f267d3fa023b2dcad55b53595f2fc0c413de761697968be1f4035a2c8ace591f248ff111684cc5cab2a9031a61823309a2d383165f - languageName: node - linkType: hard - -"@storybook/builder-manager@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/builder-manager@npm:7.0.18" - dependencies: - "@fal-works/esbuild-plugin-global-externals": ^2.1.2 - "@storybook/core-common": 7.0.18 - "@storybook/manager": 7.0.18 - "@storybook/node-logger": 7.0.18 - "@types/ejs": ^3.1.1 - "@types/find-cache-dir": ^3.2.1 - "@yarnpkg/esbuild-plugin-pnp": ^3.0.0-rc.10 - browser-assert: ^1.2.1 - ejs: ^3.1.8 - esbuild: ^0.17.0 - esbuild-plugin-alias: ^0.2.1 - express: ^4.17.3 - find-cache-dir: ^3.0.0 - fs-extra: ^11.1.0 - process: ^0.11.10 - util: ^0.12.4 - checksum: b3863f0c2675d08bb3fedfa9fc27ff017c487407106405a20f11bed57274fe318c2d985168f3361b5c810635452e1dd5f41afc876401fe1af5dbe77fbff05824 - languageName: node - linkType: hard - -"@storybook/builder-vite@npm:7.0.18, @storybook/builder-vite@npm:^7.0.18": - version: 7.0.18 - resolution: "@storybook/builder-vite@npm:7.0.18" - dependencies: - "@storybook/channel-postmessage": 7.0.18 - "@storybook/channel-websocket": 7.0.18 - "@storybook/client-logger": 7.0.18 - "@storybook/core-common": 7.0.18 - "@storybook/csf-plugin": 7.0.18 - "@storybook/mdx2-csf": ^1.0.0 - "@storybook/node-logger": 7.0.18 - "@storybook/preview": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/types": 7.0.18 - browser-assert: ^1.2.1 - es-module-lexer: ^0.9.3 - express: ^4.17.3 - fs-extra: ^11.1.0 - glob: ^8.1.0 - glob-promise: ^6.0.2 - magic-string: ^0.27.0 - remark-external-links: ^8.0.0 - remark-slug: ^6.0.0 - rollup: ^2.25.0 || ^3.3.0 - peerDependencies: - "@preact/preset-vite": "*" - typescript: ">= 4.3.x" - vite: ^3.0.0 || ^4.0.0 - vite-plugin-glimmerx: "*" - peerDependenciesMeta: - "@preact/preset-vite": - optional: true - typescript: - optional: true - vite-plugin-glimmerx: - optional: true - checksum: 825728e34cccdc3293cb7c03eee60be77f14f93daee7b4b6f9fa737d4ab105231766204cd0bc3d25ca99efd4aaf3c046f719c5a413bae6f74037a02c62953d48 - languageName: node - linkType: hard - "@storybook/builder-webpack4@npm:6.5.16": version: 6.5.16 resolution: "@storybook/builder-webpack4@npm:6.5.16" @@ -4908,20 +4034,6 @@ __metadata: languageName: node linkType: hard -"@storybook/channel-postmessage@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/channel-postmessage@npm:7.0.18" - dependencies: - "@storybook/channels": 7.0.18 - "@storybook/client-logger": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/global": ^5.0.0 - qs: ^6.10.0 - telejson: ^7.0.3 - checksum: 04b2dfd36462195566e00269901f919743b9a65faa79f9708e35f58638f37cb4885332763d6602047d2e7a2afdf69d5da8af4afd5f43f614741357027fd54dbd - languageName: node - linkType: hard - "@storybook/channel-websocket@npm:6.5.16": version: 6.5.16 resolution: "@storybook/channel-websocket@npm:6.5.16" @@ -4935,18 +4047,6 @@ __metadata: languageName: node linkType: hard -"@storybook/channel-websocket@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/channel-websocket@npm:7.0.18" - dependencies: - "@storybook/channels": 7.0.18 - "@storybook/client-logger": 7.0.18 - "@storybook/global": ^5.0.0 - telejson: ^7.0.3 - checksum: 766ebcdc1724a9f9219dae5d95151ef0014f5e72cee5dbad9252c97f026f9a27187908705e7ed308c42e696ecbf38caf7292f4f5c8bd8f0ae0ea0624ce7f4dfc - languageName: node - linkType: hard - "@storybook/channels@npm:6.5.16": version: 6.5.16 resolution: "@storybook/channels@npm:6.5.16" @@ -4958,63 +4058,6 @@ __metadata: languageName: node linkType: hard -"@storybook/channels@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/channels@npm:7.0.18" - checksum: 582ac0a8766dfb9a927363124b96b3afec0683165c9b5bc916e0d483ab983173ad71723f19d6b278da2cbc5c6220929bf344a855a51fc9871d00425dcc0bde4a - languageName: node - linkType: hard - -"@storybook/cli@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/cli@npm:7.0.18" - dependencies: - "@babel/core": ^7.20.2 - "@babel/preset-env": ^7.20.2 - "@ndelangen/get-tarball": ^3.0.7 - "@storybook/codemod": 7.0.18 - "@storybook/core-common": 7.0.18 - "@storybook/core-server": 7.0.18 - "@storybook/csf-tools": 7.0.18 - "@storybook/node-logger": 7.0.18 - "@storybook/telemetry": 7.0.18 - "@storybook/types": 7.0.18 - "@types/semver": ^7.3.4 - boxen: ^5.1.2 - chalk: ^4.1.0 - commander: ^6.2.1 - cross-spawn: ^7.0.3 - detect-indent: ^6.1.0 - envinfo: ^7.7.3 - execa: ^5.0.0 - express: ^4.17.3 - find-up: ^5.0.0 - fs-extra: ^11.1.0 - get-npm-tarball-url: ^2.0.3 - get-port: ^5.1.1 - giget: ^1.0.0 - globby: ^11.0.2 - jscodeshift: ^0.14.0 - leven: ^3.1.0 - ora: ^5.4.1 - prettier: ^2.8.0 - prompts: ^2.4.0 - puppeteer-core: ^2.1.1 - read-pkg-up: ^7.0.1 - semver: ^7.3.7 - shelljs: ^0.8.5 - simple-update-notifier: ^1.0.0 - strip-json-comments: ^3.0.1 - tempy: ^1.0.1 - ts-dedent: ^2.0.0 - util-deprecate: ^1.0.2 - bin: - getstorybook: bin/index.js - sb: bin/index.js - checksum: eaf834f981c87af64a38bb2a566b17c926bef4b6ddc07f69416d2b0d384ce24de15cf5dec49237ec3a4b2e153ee0d2aff21410624edbbc4f011fc33fcba5a4de - languageName: node - linkType: hard - "@storybook/client-api@npm:6.5.16": version: 6.5.16 resolution: "@storybook/client-api@npm:6.5.16" @@ -5056,36 +4099,6 @@ __metadata: languageName: node linkType: hard -"@storybook/client-logger@npm:7.0.18, @storybook/client-logger@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0": - version: 7.0.18 - resolution: "@storybook/client-logger@npm:7.0.18" - dependencies: - "@storybook/global": ^5.0.0 - checksum: 273a3a6997865c1518a4d6d5177ed2aa34b638caffa5d317d09a2c37092f4b2f9bc9fe0db64f3b1d8b14dc9d2feb2666ff07aa54e3568ef101ed345350920945 - languageName: node - linkType: hard - -"@storybook/codemod@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/codemod@npm:7.0.18" - dependencies: - "@babel/core": ~7.21.0 - "@babel/preset-env": ~7.21.0 - "@babel/types": ~7.21.2 - "@storybook/csf": ^0.1.0 - "@storybook/csf-tools": 7.0.18 - "@storybook/node-logger": 7.0.18 - "@storybook/types": 7.0.18 - cross-spawn: ^7.0.3 - globby: ^11.0.2 - jscodeshift: ^0.14.0 - lodash: ^4.17.21 - prettier: ^2.8.0 - recast: ^0.23.1 - checksum: e11b63f98d667b450ea572bbd53a1ddb0164f393c7373e4b7d054b834a9795b8a45feda1a2c3955b932744b6d0fcfdd03b0d4ef9243a4fb76dce04e58e355c7e - languageName: node - linkType: hard - "@storybook/components@npm:6.5.16": version: 6.5.16 resolution: "@storybook/components@npm:6.5.16" @@ -5105,25 +4118,6 @@ __metadata: languageName: node linkType: hard -"@storybook/components@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/components@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/csf": ^0.1.0 - "@storybook/global": ^5.0.0 - "@storybook/theming": 7.0.18 - "@storybook/types": 7.0.18 - memoizerific: ^1.11.3 - use-resize-observer: ^9.1.0 - util-deprecate: ^1.0.2 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: ca422a1d499b79924caf6bc7ea96603641695a1c234f66a00fc169d5cd49569735d16bf6954c7bb714f78e95a4b4824c83ef7b0869130e9e24c39777aa9e95de - languageName: node - linkType: hard - "@storybook/core-client@npm:6.5.16": version: 6.5.16 resolution: "@storybook/core-client@npm:6.5.16" @@ -5159,16 +4153,6 @@ __metadata: languageName: node linkType: hard -"@storybook/core-client@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/core-client@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/preview-api": 7.0.18 - checksum: 1ce0a7e2a3f4b640d9303de1ce2f95d49aa735292cffdad34aa83c7933b239e54d11e802e5d6d1f068c6cd97eafdd8202caa7440f5aaf1f9efbc8c947b11ebcd - languageName: node - linkType: hard - "@storybook/core-common@npm:6.5.16": version: 6.5.16 resolution: "@storybook/core-common@npm:6.5.16" @@ -5233,33 +4217,6 @@ __metadata: languageName: node linkType: hard -"@storybook/core-common@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/core-common@npm:7.0.18" - dependencies: - "@storybook/node-logger": 7.0.18 - "@storybook/types": 7.0.18 - "@types/node": ^16.0.0 - "@types/pretty-hrtime": ^1.0.0 - chalk: ^4.1.0 - esbuild: ^0.17.0 - esbuild-register: ^3.4.0 - file-system-cache: ^2.0.0 - find-up: ^5.0.0 - fs-extra: ^11.1.0 - glob: ^8.1.0 - glob-promise: ^6.0.2 - handlebars: ^4.7.7 - lazy-universal-dotenv: ^4.0.0 - picomatch: ^2.3.0 - pkg-dir: ^5.0.0 - pretty-hrtime: ^1.0.3 - resolve-from: ^5.0.0 - ts-dedent: ^2.0.0 - checksum: c23fe9e40a49cc2a963553e7b54418a719a74277218cc0d53c68c059b7a99b3c9fefa797c992c325e94ab7e049eb130ab465c869d87027a06225b7a7dfcc6781 - languageName: node - linkType: hard - "@storybook/core-events@npm:6.5.16": version: 6.5.16 resolution: "@storybook/core-events@npm:6.5.16" @@ -5269,13 +4226,6 @@ __metadata: languageName: node linkType: hard -"@storybook/core-events@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/core-events@npm:7.0.18" - checksum: 1df1fd422353b717b6f7e3d7ffec107bf8dd2afcfd9725a4240034542152225844e089498f393aa19e2771226e38f324644e6346477f1aca74539a070ef4dce3 - languageName: node - linkType: hard - "@storybook/core-server@npm:6.5.16": version: 6.5.16 resolution: "@storybook/core-server@npm:6.5.16" @@ -5339,56 +4289,6 @@ __metadata: languageName: node linkType: hard -"@storybook/core-server@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/core-server@npm:7.0.18" - dependencies: - "@aw-web-design/x-default-browser": 1.4.88 - "@discoveryjs/json-ext": ^0.5.3 - "@storybook/builder-manager": 7.0.18 - "@storybook/core-common": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/csf": ^0.1.0 - "@storybook/csf-tools": 7.0.18 - "@storybook/docs-mdx": ^0.1.0 - "@storybook/global": ^5.0.0 - "@storybook/manager": 7.0.18 - "@storybook/node-logger": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/telemetry": 7.0.18 - "@storybook/types": 7.0.18 - "@types/detect-port": ^1.3.0 - "@types/node": ^16.0.0 - "@types/node-fetch": ^2.5.7 - "@types/pretty-hrtime": ^1.0.0 - "@types/semver": ^7.3.4 - better-opn: ^2.1.1 - boxen: ^5.1.2 - chalk: ^4.1.0 - cli-table3: ^0.6.1 - compression: ^1.7.4 - detect-port: ^1.3.0 - express: ^4.17.3 - fs-extra: ^11.1.0 - globby: ^11.0.2 - ip: ^2.0.0 - lodash: ^4.17.21 - node-fetch: ^2.6.7 - open: ^8.4.0 - pretty-hrtime: ^1.0.3 - prompts: ^2.4.0 - read-pkg-up: ^7.0.1 - semver: ^7.3.7 - serve-favicon: ^2.5.0 - telejson: ^7.0.3 - ts-dedent: ^2.0.0 - util-deprecate: ^1.0.2 - watchpack: ^2.2.0 - ws: ^8.2.3 - checksum: 575072ce7a65986fd5b70928d78062955f07101c7eedaa0216667cb2654902c7dba85c31a3a8d25bec0c6bbe8461b2bf94cff67b64919a39db728aed88faf71b - languageName: node - linkType: hard - "@storybook/core@npm:6.5.16": version: 6.5.16 resolution: "@storybook/core@npm:6.5.16" @@ -5410,16 +4310,6 @@ __metadata: languageName: node linkType: hard -"@storybook/csf-plugin@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/csf-plugin@npm:7.0.18" - dependencies: - "@storybook/csf-tools": 7.0.18 - unplugin: ^0.10.2 - checksum: 61c57e98668272e782fcdc24ed1e73fdaf13e77e9f88e726b8d8e1e86055d387a311f309f15a20e6390a8873be0af759a6964ebe1454bb2898eb830fffc387a1 - languageName: node - linkType: hard - "@storybook/csf-tools@npm:6.5.16": version: 6.5.16 resolution: "@storybook/csf-tools@npm:6.5.16" @@ -5447,23 +4337,6 @@ __metadata: languageName: node linkType: hard -"@storybook/csf-tools@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/csf-tools@npm:7.0.18" - dependencies: - "@babel/generator": ~7.21.1 - "@babel/parser": ~7.21.2 - "@babel/traverse": ~7.21.2 - "@babel/types": ~7.21.2 - "@storybook/csf": ^0.1.0 - "@storybook/types": 7.0.18 - fs-extra: ^11.1.0 - recast: ^0.23.1 - ts-dedent: ^2.0.0 - checksum: 632b599012b6e00f264f24c3d8eab75804af3591e5a95ecb8b7e270ebc5f8d92a6094a0068bbceb48ce3b57db85ce695710ddab2747fe36a2cf885e1ea1984aa - languageName: node - linkType: hard - "@storybook/csf@npm:0.0.2--canary.4566f4d.1": version: 0.0.2--canary.4566f4d.1 resolution: "@storybook/csf@npm:0.0.2--canary.4566f4d.1" @@ -5473,22 +4346,6 @@ __metadata: languageName: node linkType: hard -"@storybook/csf@npm:^0.1.0": - version: 0.1.0 - resolution: "@storybook/csf@npm:0.1.0" - dependencies: - type-fest: ^2.19.0 - checksum: f1784f2aff27d5c27ab897878b08e3b04a64e7f62da1ea95fd11bfe9f558300e55f0d483d58282e8254a4b4e8935201178e70c264ccc96104c67403215d651f0 - languageName: node - linkType: hard - -"@storybook/docs-mdx@npm:^0.1.0": - version: 0.1.0 - resolution: "@storybook/docs-mdx@npm:0.1.0" - checksum: a7770842c3947a761bcbe776a9c4fd35163d30c3274fca034169f69ff614242eaa4cacaa2c95fd215827081ef9a43f4774d521a6f43a4d063ea5f4ea14b1d69a - languageName: node - linkType: hard - "@storybook/docs-tools@npm:6.5.16": version: 6.5.16 resolution: "@storybook/docs-tools@npm:6.5.16" @@ -5504,67 +4361,6 @@ __metadata: languageName: node linkType: hard -"@storybook/docs-tools@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/docs-tools@npm:7.0.18" - dependencies: - "@babel/core": ^7.12.10 - "@storybook/core-common": 7.0.18 - "@storybook/preview-api": 7.0.18 - "@storybook/types": 7.0.18 - "@types/doctrine": ^0.0.3 - doctrine: ^3.0.0 - lodash: ^4.17.21 - checksum: 1552d15b9da25247709b4fda37dcf0dc0fe242b00ab4ca4dfdf78d78af64105b9bf5f3897a8dd5b828667fdab32d2c9e34bd2c3200b8b41a0f993a0c54c22a6c - languageName: node - linkType: hard - -"@storybook/global@npm:^5.0.0": - version: 5.0.0 - resolution: "@storybook/global@npm:5.0.0" - checksum: ede0ad35ec411fe31c61150dbd118fef344d1d0e72bf5d3502368e35cf68126f6b7ae4a0ab5e2ffe2f0baa3b4286f03ad069ba3e098e1725449ef08b7e154ba8 - languageName: node - linkType: hard - -"@storybook/instrumenter@npm:7.0.18, @storybook/instrumenter@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0": - version: 7.0.18 - resolution: "@storybook/instrumenter@npm:7.0.18" - dependencies: - "@storybook/channels": 7.0.18 - "@storybook/client-logger": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/preview-api": 7.0.18 - checksum: 9803e2d6944ef6e18ee410ca03189a46cdd33f82a7deec2a6e226926cd98e551392bc27a9af42857e41ca2ba29285f694c1683d0a28504fcf06fda17b58cff4f - languageName: node - linkType: hard - -"@storybook/manager-api@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/manager-api@npm:7.0.18" - dependencies: - "@storybook/channels": 7.0.18 - "@storybook/client-logger": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/csf": ^0.1.0 - "@storybook/global": ^5.0.0 - "@storybook/router": 7.0.18 - "@storybook/theming": 7.0.18 - "@storybook/types": 7.0.18 - dequal: ^2.0.2 - lodash: ^4.17.21 - memoizerific: ^1.11.3 - semver: ^7.3.7 - store2: ^2.14.2 - telejson: ^7.0.3 - ts-dedent: ^2.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: dfea72bd16cda103c276847a9e494e57caa3253424cedee967b5447429118c441a6443f635affa5ed55d5b60532ffd05c71fa994039712b7f3d5abcb8e75d39e - languageName: node - linkType: hard - "@storybook/manager-webpack4@npm:6.5.16": version: 6.5.16 resolution: "@storybook/manager-webpack4@npm:6.5.16" @@ -5614,13 +4410,6 @@ __metadata: languageName: node linkType: hard -"@storybook/manager@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/manager@npm:7.0.18" - checksum: dcafa28f08fee33b7c03516a7fe2d705d6ee097d36f8644ee7c5ac60dda630d05d16c18904305e473fe4cfeaa4e3bd5c62a1eafd54bab660c13d407a68d7ba60 - languageName: node - linkType: hard - "@storybook/mdx1-csf@npm:^0.0.1": version: 0.0.1 resolution: "@storybook/mdx1-csf@npm:0.0.1" @@ -5640,13 +4429,6 @@ __metadata: languageName: node linkType: hard -"@storybook/mdx2-csf@npm:^1.0.0": - version: 1.1.0 - resolution: "@storybook/mdx2-csf@npm:1.1.0" - checksum: 5ccdb13f4e59b989499f76e54ffaffb96b5710a696346efe19989b3373f375703adf516780894b270fa64a7e765b55274dc18575fc4a84e7fa92b844a4467c5d - languageName: node - linkType: hard - "@storybook/node-logger@npm:6.5.16": version: 6.5.16 resolution: "@storybook/node-logger@npm:6.5.16" @@ -5660,48 +4442,6 @@ __metadata: languageName: node linkType: hard -"@storybook/node-logger@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/node-logger@npm:7.0.18" - dependencies: - "@types/npmlog": ^4.1.2 - chalk: ^4.1.0 - npmlog: ^5.0.1 - pretty-hrtime: ^1.0.3 - checksum: aefaf1ef87728665f894c10c51bdb832f7721a9ecd46440f4d0bcb8ec94b52318183d85b4c9c03e2a3e3e1a122d3940221428a556d1f35e393d3b53252bb4337 - languageName: node - linkType: hard - -"@storybook/postinstall@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/postinstall@npm:7.0.18" - checksum: a6da745c36c394a3f056b4f6dd2e7d57410071f251aca27ed5069911f8f73729424bf6544dc11eaaff543f6c35132ee6bc6218fc9cae894a4e0b54a2432ba915 - languageName: node - linkType: hard - -"@storybook/preview-api@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/preview-api@npm:7.0.18" - dependencies: - "@storybook/channel-postmessage": 7.0.18 - "@storybook/channels": 7.0.18 - "@storybook/client-logger": 7.0.18 - "@storybook/core-events": 7.0.18 - "@storybook/csf": ^0.1.0 - "@storybook/global": ^5.0.0 - "@storybook/types": 7.0.18 - "@types/qs": ^6.9.5 - dequal: ^2.0.2 - lodash: ^4.17.21 - memoizerific: ^1.11.3 - qs: ^6.10.0 - synchronous-promise: ^2.0.15 - ts-dedent: ^2.0.0 - util-deprecate: ^1.0.2 - checksum: 2ec6e5c66b2ad698dc4581465a41124efaae40c2c51675585137b1e86dcdc44b679355ccaa07d9fb44f90a465d76b22ee224cafb678417e171cf3b07b99da117 - languageName: node - linkType: hard - "@storybook/preview-web@npm:6.5.16": version: 6.5.16 resolution: "@storybook/preview-web@npm:6.5.16" @@ -5729,13 +4469,6 @@ __metadata: languageName: node linkType: hard -"@storybook/preview@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/preview@npm:7.0.18" - checksum: c959f63a8c936dc5b760c92e3ac888040faba7776b823b4021c4f48117888baf5be61c719b43d5e38c929361d633f3984854938b550a0e86262f0c7364c0bb01 - languageName: node - linkType: hard - "@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0": version: 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0 resolution: "@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0" @@ -5754,71 +4487,6 @@ __metadata: languageName: node linkType: hard -"@storybook/react-dom-shim@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/react-dom-shim@npm:7.0.18" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: a52626efcd1445529040dad47b3d72b882b23aa15fa9f505cc48c1aeb61893afaa442604556c5042789bab315f7800c257e014d678c870829800efc60d7828be - languageName: node - linkType: hard - -"@storybook/react-vite@npm:^7.0.18": - version: 7.0.18 - resolution: "@storybook/react-vite@npm:7.0.18" - dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript": 0.2.1 - "@rollup/pluginutils": ^4.2.0 - "@storybook/builder-vite": 7.0.18 - "@storybook/react": 7.0.18 - "@vitejs/plugin-react": ^3.0.1 - ast-types: ^0.14.2 - magic-string: ^0.27.0 - react-docgen: 6.0.0-alpha.3 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - vite: ^3.0.0 || ^4.0.0 - checksum: 29448775062fb9e7d865bb443da08dfa43107766154edf3711533c99e80d9efaaefc90b747429752f1dd01a85402b2d25c3822821f6fcb37cbe63109c18f41fc - languageName: node - linkType: hard - -"@storybook/react@npm:7.0.18, @storybook/react@npm:^7.0.18": - version: 7.0.18 - resolution: "@storybook/react@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/core-client": 7.0.18 - "@storybook/docs-tools": 7.0.18 - "@storybook/global": ^5.0.0 - "@storybook/preview-api": 7.0.18 - "@storybook/react-dom-shim": 7.0.18 - "@storybook/types": 7.0.18 - "@types/escodegen": ^0.0.6 - "@types/estree": ^0.0.51 - "@types/node": ^16.0.0 - acorn: ^7.4.1 - acorn-jsx: ^5.3.1 - acorn-walk: ^7.2.0 - escodegen: ^2.0.0 - html-tags: ^3.1.0 - lodash: ^4.17.21 - prop-types: ^15.7.2 - react-element-to-jsx-string: ^15.0.0 - ts-dedent: ^2.0.0 - type-fest: ^2.19.0 - util-deprecate: ^1.0.2 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: a6bd267f01b49e937330ae97f770216e2ba2d706b999f558dea2780c342a2f789943a1e7c92c62fcf81904d221cb70730d119d6e8b347e9b9d9ff1a68fe6b8a4 - languageName: node - linkType: hard - "@storybook/react@npm:^6.3.9": version: 6.5.16 resolution: "@storybook/react@npm:6.5.16" @@ -5900,20 +4568,6 @@ __metadata: languageName: node linkType: hard -"@storybook/router@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/router@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - memoizerific: ^1.11.3 - qs: ^6.10.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: b92687d1b9738202e7bef19af59989a7faf4a5c1972d074fef7b6742b1eb95f5e3ecb3e6bd634129740a98b6be2d4ab9a821c3c28c275425d48807e5b04e807f - languageName: node - linkType: hard - "@storybook/semver@npm:^7.3.2": version: 7.3.2 resolution: "@storybook/semver@npm:7.3.2" @@ -5972,36 +4626,6 @@ __metadata: languageName: node linkType: hard -"@storybook/telemetry@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/telemetry@npm:7.0.18" - dependencies: - "@storybook/client-logger": 7.0.18 - "@storybook/core-common": 7.0.18 - chalk: ^4.1.0 - detect-package-manager: ^2.0.1 - fetch-retry: ^5.0.2 - fs-extra: ^11.1.0 - isomorphic-unfetch: ^3.1.0 - nanoid: ^3.3.1 - read-pkg-up: ^7.0.1 - checksum: bc53845826879da9905d51a0f2ddfd3b03cc9a32b0ddc35ab6dd463f614622f64d5deeaa59433a12780a8b656f8fbda629ceae9fb5e845ef1e7e93f3138fa69b - languageName: node - linkType: hard - -"@storybook/testing-library@npm:^0.0.14-next.2": - version: 0.0.14-next.2 - resolution: "@storybook/testing-library@npm:0.0.14-next.2" - dependencies: - "@storybook/client-logger": ^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0 - "@storybook/instrumenter": ^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0 - "@testing-library/dom": ^8.3.0 - "@testing-library/user-event": ^13.2.1 - ts-dedent: ^2.2.0 - checksum: c471578493798e74e1f02f4a8cd046f24d1c387f32d5b3469f3331563d93c6dd872937aa9ce6a4dc12832e0c9f378639265c3b6862cbbc0b1887f6e26c102601 - languageName: node - linkType: hard - "@storybook/theming@npm:6.5.16": version: 6.5.16 resolution: "@storybook/theming@npm:6.5.16" @@ -6017,33 +4641,6 @@ __metadata: languageName: node linkType: hard -"@storybook/theming@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/theming@npm:7.0.18" - dependencies: - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 - "@storybook/client-logger": 7.0.18 - "@storybook/global": ^5.0.0 - memoizerific: ^1.11.3 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 32f9ded9f552b9a8672befc95c8b2d876fb92585aec7fe3426e7e87e0da5f3d5cbb41a6ee451959cd2e978240f26afb819dd5cbec7cb9535370de313608d9e7b - languageName: node - linkType: hard - -"@storybook/types@npm:7.0.18": - version: 7.0.18 - resolution: "@storybook/types@npm:7.0.18" - dependencies: - "@storybook/channels": 7.0.18 - "@types/babel__core": ^7.0.0 - "@types/express": ^4.7.0 - file-system-cache: ^2.0.0 - checksum: 63140bb7f01125ec3cb61cf4dd493587d8766702081f11117f1d8f8156a63433ab8d15c5bb13f57e0e9877927d7ab52164e256ca62cafc5c4e83699db63a5f7c - languageName: node - linkType: hard - "@storybook/ui@npm:6.5.16": version: 6.5.16 resolution: "@storybook/ui@npm:6.5.16" @@ -6238,22 +4835,6 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^8.3.0": - version: 8.20.0 - resolution: "@testing-library/dom@npm:8.20.0" - dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/runtime": ^7.12.5 - "@types/aria-query": ^5.0.1 - 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 - checksum: 1e599129a2fe91959ce80900a0a4897232b89e2a8e22c1f5950c36d39c97629ea86b4986b60b173b5525a05de33fde1e35836ea597b03de78cc51b122835c6f0 - languageName: node - linkType: hard - "@testing-library/jest-dom@npm:^5.11.0": version: 5.16.5 resolution: "@testing-library/jest-dom@npm:5.16.5" @@ -6295,17 +4876,6 @@ __metadata: languageName: node linkType: hard -"@testing-library/user-event@npm:^13.2.1": - version: 13.5.0 - resolution: "@testing-library/user-event@npm:13.5.0" - dependencies: - "@babel/runtime": ^7.12.5 - peerDependencies: - "@testing-library/dom": ">=7.21.4" - checksum: 16319de685fbb7008f1ba667928f458b2d08196918002daca56996de80ef35e6d9de26e9e1ece7d00a004692b95a597cf9142fff0dc53f2f51606a776584f549 - languageName: node - linkType: hard - "@tootallnate/once@npm:1": version: 1.1.2 resolution: "@tootallnate/once@npm:1.1.2" @@ -7067,16 +5637,6 @@ __metadata: "@material-ui/lab": ^4.0.0-alpha.57 "@material-ui/styles": ^4.9.10 "@mui/types": ^7.2.4 - "@storybook/addon-essentials": ^7.0.18 - "@storybook/addon-interactions": ^7.0.18 - "@storybook/addon-links": ^7.0.18 - "@storybook/blocks": ^7.0.18 - "@storybook/builder-vite": ^7.0.18 - "@storybook/react": ^7.0.18 - "@storybook/react-vite": ^7.0.18 - "@storybook/testing-library": ^0.0.14-next.2 - "@types/dom-to-image": ^2.6.4 - "@types/downloadjs": ^1.4.3 "@types/material-ui": ^0.21.12 "@types/react": ^18.0.28 "@types/react-dom": ^18.0.11 @@ -7084,14 +5644,14 @@ __metadata: "@types/react-router-dom": ^5.3.3 "@vitejs/plugin-react": ^4.0.0 axios: ^1.4.0 - material-ui: ^0.18.3 npm-run-all: ^4.1.5 - react: ^18.2.0 - react-dom: ^18.2.0 + react: ^16.13.1 + react-dom: ^16.13.1 + react-hook-form: ^6.15.1 + react-query: ^3.19.0 react-router: ^6.11.2 react-router-dom: ^6.11.2 - storybook: ^7.0.18 - styled-components: ^5.3.11 + styled-components: ^5.0.1 vite: ^4.3.2 vite-plugin-ejs: ^1.6.4 vite-plugin-env-compatible: ^1.1.1 @@ -7371,13 +5931,6 @@ __metadata: languageName: node linkType: hard -"@types/aria-query@npm:^5.0.1": - version: 5.0.1 - resolution: "@types/aria-query@npm:5.0.1" - checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de - languageName: node - linkType: hard - "@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7": version: 7.20.1 resolution: "@types/babel__core@npm:7.20.1" @@ -7499,48 +6052,6 @@ __metadata: languageName: node linkType: hard -"@types/detect-port@npm:^1.3.0": - version: 1.3.3 - resolution: "@types/detect-port@npm:1.3.3" - checksum: 0dadb520286a5cfd2832d12189dc795cc3589dfd9166d1b033453fb94b0212c4067a847045833e85b0f7c73135c944cb4ccb49c8e683491845c2e8a3da5d5c1c - languageName: node - linkType: hard - -"@types/doctrine@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/doctrine@npm:0.0.3" - checksum: 7ca9c8ff4d2da437785151c9eef0dd80b8fa12e0ff0fcb988458a78de4b6f0fc92727ba5bbee446e1df615a91f03053c5783b30b7c21ab6ceab6a42557e93e50 - languageName: node - linkType: hard - -"@types/dom-to-image@npm:^2.6.4": - version: 2.6.4 - resolution: "@types/dom-to-image@npm:2.6.4" - checksum: ddc8d74b944909040a6e6d9ca2feb246b50dc8c3ad908a90634fb6e46e4c438b47aa0a5df4994bd19c1d6f110eb90a15146d1c1a7b8762ab9d050f70e6de4050 - languageName: node - linkType: hard - -"@types/downloadjs@npm:^1.4.3": - version: 1.4.3 - resolution: "@types/downloadjs@npm:1.4.3" - checksum: d5b5e29399fdbb415f351fee64e7f7b3ddef0f251d2375ddaa0c16cd5c026f4a8dce1b4c76d05e019bc65c96f589d70f13512b44e54d568063fdefa0dbfd40c8 - languageName: node - linkType: hard - -"@types/ejs@npm:^3.1.1": - version: 3.1.2 - resolution: "@types/ejs@npm:3.1.2" - checksum: e4f0745b6ed53a63c08bdfdeb019a7d0e0c400896722b44d6732b4ee6bf6061d2dc965206186b8b0ae2ecd71303c29f1af1feddbca2df0acbd7bd234a74ca518 - languageName: node - linkType: hard - -"@types/escodegen@npm:^0.0.6": - version: 0.0.6 - resolution: "@types/escodegen@npm:0.0.6" - checksum: 7b25aeedd48dbef68345224082c6bc774845cbfc1d9b2ce91a477130fe7ccabf33da126c1d6d55e5dfd838db429a7c80890628a167e5aa55b6a4620974da38d3 - languageName: node - linkType: hard - "@types/eslint-scope@npm:^3.7.3": version: 3.7.4 resolution: "@types/eslint-scope@npm:3.7.4" @@ -7611,7 +6122,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.8, @types/express@npm:^4.7.0": +"@types/express@npm:*, @types/express@npm:^4.17.8": version: 4.17.17 resolution: "@types/express@npm:4.17.17" dependencies: @@ -7623,14 +6134,7 @@ __metadata: languageName: node linkType: hard -"@types/find-cache-dir@npm:^3.2.1": - version: 3.2.1 - resolution: "@types/find-cache-dir@npm:3.2.1" - checksum: bf5c4e96da40247cd9e6327f54dfccda961a0fb2d70e3c71bd05def94de4c2e6fb310fe8ecb0f04ecf5dbc52214e184b55a2337b0f87250d4ae1e2e7d58321e4 - languageName: node - linkType: hard - -"@types/glob@npm:*, @types/glob@npm:^8.0.0": +"@types/glob@npm:*": version: 8.1.0 resolution: "@types/glob@npm:8.1.0" dependencies: @@ -7640,7 +6144,7 @@ __metadata: languageName: node linkType: hard -"@types/glob@npm:^7.1.1, @types/glob@npm:^7.1.3": +"@types/glob@npm:^7.1.1": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" dependencies: @@ -7650,7 +6154,7 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.2, @types/graceful-fs@npm:^4.1.3": +"@types/graceful-fs@npm:^4.1.2": version: 4.1.6 resolution: "@types/graceful-fs@npm:4.1.6" dependencies: @@ -7930,20 +6434,6 @@ __metadata: languageName: node linkType: hard -"@types/mdx@npm:^2.0.0": - version: 2.0.5 - resolution: "@types/mdx@npm:2.0.5" - checksum: 1069baff0b2d0fb0bc724748e2386af626cc30f8ef99e680afb4dee566ed0aeabd31cea774212a7033f491e594a0acc234116078b252cba94ac413f91eb585a3 - languageName: node - linkType: hard - -"@types/mime-types@npm:^2.1.0": - version: 2.1.1 - resolution: "@types/mime-types@npm:2.1.1" - checksum: 106b5d556add46446a579ad25ff15d6b421851790d887edcad558c90c1e64b1defc72bfbaf4b08f208916e21d9cc45cdb951d77be51268b18221544cfe054a3c - languageName: node - linkType: hard - "@types/mime@npm:*": version: 3.0.1 resolution: "@types/mime@npm:3.0.1" @@ -8023,7 +6513,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.0.10 || ^16.0.0, @types/node@npm:^14.14.20 || ^16.0.0, @types/node@npm:^16.0.0, @types/node@npm:^16.9.2": +"@types/node@npm:^14.0.10 || ^16.0.0, @types/node@npm:^14.14.20 || ^16.0.0, @types/node@npm:^16.9.2": version: 16.18.34 resolution: "@types/node@npm:16.18.34" checksum: 35c0ffe09687578d002ceb7e706d0ba450546aeb3d2716f28691f2af0063bd274dbde0f741d087ea217f2a8db413eb700d22dfb4f08a67986ff801423bd7be8d @@ -8188,7 +6678,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:>=16, @types/react@npm:^18.0.28": +"@types/react@npm:*, @types/react@npm:^18.0.28": version: 18.2.7 resolution: "@types/react@npm:18.2.7" dependencies: @@ -8241,13 +6731,6 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.4": - version: 7.5.0 - resolution: "@types/semver@npm:7.5.0" - checksum: 0a64b9b9c7424d9a467658b18dd70d1d781c2d6f033096a6e05762d20ebbad23c1b69b0083b0484722aabf35640b78ccc3de26368bcae1129c87e9df028a22e2 - languageName: node - linkType: hard - "@types/send@npm:*": version: 0.17.1 resolution: "@types/send@npm:0.17.1" @@ -8671,21 +7154,6 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-react@npm:^3.0.1": - version: 3.1.0 - resolution: "@vitejs/plugin-react@npm:3.1.0" - dependencies: - "@babel/core": ^7.20.12 - "@babel/plugin-transform-react-jsx-self": ^7.18.6 - "@babel/plugin-transform-react-jsx-source": ^7.19.6 - magic-string: ^0.27.0 - react-refresh: ^0.14.0 - peerDependencies: - vite: ^4.1.0-beta.0 - checksum: 450fac79e67cba9e1581c860f78e687b44108ab4117663ef20db279316e03cd8e87f94fef376e27cc5e200bd52813dcc09b70ea570c7c7cc291fcd47eb260fbc - languageName: node - linkType: hard - "@vitejs/plugin-react@npm:^4.0.0": version: 4.0.0 resolution: "@vitejs/plugin-react@npm:4.0.0" @@ -9053,17 +7521,6 @@ __metadata: languageName: node linkType: hard -"@yarnpkg/esbuild-plugin-pnp@npm:^3.0.0-rc.10": - version: 3.0.0-rc.15 - resolution: "@yarnpkg/esbuild-plugin-pnp@npm:3.0.0-rc.15" - dependencies: - tslib: ^2.4.0 - peerDependencies: - esbuild: ">=0.10.0" - checksum: 04da15355a99773b441742814ba4d0f3453a83df47aa07e215f167e156f109ab8e971489c8b1a4ddf3c79d568d35213f496ad52e97298228597e1aacc22680aa - languageName: node - linkType: hard - "abab@npm:^2.0.3, abab@npm:^2.0.5": version: 2.0.6 resolution: "abab@npm:2.0.6" @@ -9171,7 +7628,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": +"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.1": version: 8.8.2 resolution: "acorn@npm:8.8.2" bin: @@ -9249,13 +7706,6 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:5": - version: 5.1.1 - resolution: "agent-base@npm:5.1.1" - checksum: 61ae789f3019f1dc10e8cba6d3ae9826949299a4e54aaa1cfa2fa37c95a108e70e95423b963bb987d7891a703fd9a5c383a506f4901819f3ee56f3147c0aa8ab - languageName: node - linkType: hard - "agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -10115,18 +8565,6 @@ __metadata: languageName: node linkType: hard -"assert@npm:^2.0.0": - version: 2.0.0 - resolution: "assert@npm:2.0.0" - dependencies: - es6-object-assign: ^1.1.0 - is-nan: ^1.2.1 - object-is: ^1.0.1 - util: ^0.12.0 - checksum: bb91f181a86d10588ee16c5e09c280f9811373974c29974cbe401987ea34e966699d7989a812b0e19377b511ea0bc627f5905647ce569311824848ede382cae8 - languageName: node - linkType: hard - "assertion-error@npm:^1.1.0": version: 1.1.0 resolution: "assertion-error@npm:1.1.0" @@ -10148,15 +8586,6 @@ __metadata: languageName: node linkType: hard -"ast-types@npm:0.15.2": - version: 0.15.2 - resolution: "ast-types@npm:0.15.2" - dependencies: - tslib: ^2.0.1 - checksum: 24f0d86bf9e4c8dae16fa24b13c1776f2c2677040bcfbd4eb4f27911db49020be4876885e45e6cfcc548ed4dfea3a0742d77e3346b84fae47379cb0b89e9daa0 - languageName: node - linkType: hard - "ast-types@npm:^0.14.2": version: 0.14.2 resolution: "ast-types@npm:0.14.2" @@ -10166,15 +8595,6 @@ __metadata: languageName: node linkType: hard -"ast-types@npm:^0.16.1": - version: 0.16.1 - resolution: "ast-types@npm:0.16.1" - dependencies: - tslib: ^2.0.1 - checksum: 21c186da9fdb1d8087b1b7dabbc4059f91aa5a1e593a9776b4393cc1eaa857e741b2dda678d20e34b16727b78fef3ab59cf8f0c75ed1ba649c78fe194e5c114b - languageName: node - linkType: hard - "astral-regex@npm:^1.0.0": version: 1.0.0 resolution: "astral-regex@npm:1.0.0" @@ -10406,15 +8826,6 @@ __metadata: languageName: node linkType: hard -"babel-core@npm:^7.0.0-bridge.0": - version: 7.0.0-bridge.0 - resolution: "babel-core@npm:7.0.0-bridge.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2a1cb879019dffb08d17bec36e13c3a6d74c94773f41c1fd8b14de13f149cc34b705b0a1e07b42fcf35917b49d78db6ff0c5c3b00b202a5235013d517b5c6bbb - languageName: node - linkType: hard - "babel-eslint@npm:10.1.0, babel-eslint@npm:^10.1.0": version: 10.1.0 resolution: "babel-eslint@npm:10.1.0" @@ -10649,20 +9060,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.3.3": - version: 0.3.3 - resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" - dependencies: - "@babel/compat-data": ^7.17.7 - "@babel/helper-define-polyfill-provider": ^0.3.3 - semver: ^6.1.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.4.2, babel-plugin-polyfill-corejs2@npm:^0.4.3": +"babel-plugin-polyfill-corejs2@npm:^0.4.2": version: 0.4.3 resolution: "babel-plugin-polyfill-corejs2@npm:0.4.3" dependencies: @@ -10687,18 +9085,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.6.0": - version: 0.6.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 - core-js-compat: ^3.25.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 - languageName: node - linkType: hard - "babel-plugin-polyfill-corejs3@npm:^0.8.1": version: 0.8.1 resolution: "babel-plugin-polyfill-corejs3@npm:0.8.1" @@ -10711,17 +9097,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.4.1": - version: 0.4.1 - resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c - languageName: node - linkType: hard - "babel-plugin-polyfill-regenerator@npm:^0.5.0": version: 0.5.0 resolution: "babel-plugin-polyfill-regenerator@npm:0.5.0" @@ -11101,7 +9476,7 @@ __metadata: languageName: node linkType: hard -"big-integer@npm:1.6.x, big-integer@npm:^1.6.16, big-integer@npm:^1.6.44, big-integer@npm:^1.6.7": +"big-integer@npm:1.6.x, big-integer@npm:^1.6.16, big-integer@npm:^1.6.7": version: 1.6.51 resolution: "big-integer@npm:1.6.51" checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 @@ -11145,7 +9520,7 @@ __metadata: languageName: node linkType: hard -"bl@npm:^4.0.3, bl@npm:^4.1.0": +"bl@npm:^4.0.3": version: 4.1.0 resolution: "bl@npm:4.1.0" dependencies: @@ -11295,15 +9670,6 @@ __metadata: languageName: node linkType: hard -"bplist-parser@npm:^0.2.0": - version: 0.2.0 - resolution: "bplist-parser@npm:0.2.0" - dependencies: - big-integer: ^1.6.44 - checksum: d5339dd16afc51de6c88f88f58a45b72ed6a06aa31f5557d09877575f220b7c1d3fbe375da0b62e6a10d4b8ed80523567e351f24014f5bc886ad523758142cdd - languageName: node - linkType: hard - "brace-expansion@npm:^1.0.0, brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -11373,13 +9739,6 @@ __metadata: languageName: node linkType: hard -"browser-assert@npm:^1.2.1": - version: 1.2.1 - resolution: "browser-assert@npm:1.2.1" - checksum: 8b2407cd04c1ed592cf892dec35942b7d72635829221e0788c9a16c4d2afa8b7156bc9705b1c4b32c30d88136c576fda3cbcb8f494d6f865264c706ea8798d92 - languageName: node - linkType: hard - "browser-process-hrtime@npm:^1.0.0": version: 1.0.0 resolution: "browser-process-hrtime@npm:1.0.0" @@ -11458,15 +9817,6 @@ __metadata: languageName: node linkType: hard -"browserify-zlib@npm:^0.1.4": - version: 0.1.4 - resolution: "browserify-zlib@npm:0.1.4" - dependencies: - pako: ~0.2.0 - checksum: abee4cb4349e8a21391fd874564f41b113fe691372913980e6fa06a777e4ea2aad4e942af14ab99bce190d5ac8f5328201432f4ef0eae48c6d02208bc212976f - languageName: node - linkType: hard - "browserify-zlib@npm:^0.2.0": version: 0.2.0 resolution: "browserify-zlib@npm:0.2.0" @@ -12313,7 +10663,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.4.0, chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": +"chokidar@npm:^3.4.0, chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2": version: 3.5.3 resolution: "chokidar@npm:3.5.3" dependencies: @@ -12460,16 +10810,7 @@ __metadata: languageName: node linkType: hard -"cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: ^3.1.0 - checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 - languageName: node - linkType: hard - -"cli-spinners@npm:^2.0.0, cli-spinners@npm:^2.5.0": +"cli-spinners@npm:^2.0.0": version: 2.9.0 resolution: "cli-spinners@npm:2.9.0" checksum: a9c56e1f44457d4a9f4f535364e729cb8726198efa9e98990cfd9eda9e220dfa4ba12f92808d1be5e29029cdfead781db82dc8549b97b31c907d55f96aa9b0e2 @@ -12737,7 +11078,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.16, colorette@npm:^2.0.19": +"colorette@npm:^2.0.16": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d @@ -13099,13 +11440,6 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 - languageName: node - linkType: hard - "convert-string@npm:~0.1.0": version: 0.1.0 resolution: "convert-string@npm:0.1.0" @@ -13189,7 +11523,7 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.25.1, core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.30.2, core-js-compat@npm:^3.8.1": +"core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.30.2, core-js-compat@npm:^3.8.1": version: 3.30.2 resolution: "core-js-compat@npm:3.30.2" dependencies: @@ -13500,13 +11834,6 @@ __metadata: languageName: node linkType: hard -"crypto-random-string@npm:^2.0.0": - version: 2.0.0 - resolution: "crypto-random-string@npm:2.0.0" - checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 - languageName: node - linkType: hard - "css-blank-pseudo@npm:^0.1.4": version: 0.1.4 resolution: "css-blank-pseudo@npm:0.1.4" @@ -14430,16 +12757,6 @@ __metadata: languageName: node linkType: hard -"default-browser-id@npm:3.0.0": - version: 3.0.0 - resolution: "default-browser-id@npm:3.0.0" - dependencies: - bplist-parser: ^0.2.0 - untildify: ^4.0.0 - checksum: 279c7ad492542e5556336b6c254a4eaf31b2c63a5433265655ae6e47301197b6cfb15c595a6fdc6463b2ff8e1a1a1ed3cba56038a60e1527ba4ab1628c6b9941 - languageName: node - linkType: hard - "default-browser-id@npm:^1.0.4": version: 1.0.4 resolution: "default-browser-id@npm:1.0.4" @@ -14526,13 +12843,6 @@ __metadata: languageName: node linkType: hard -"defu@npm:^6.1.2": - version: 6.1.2 - resolution: "defu@npm:6.1.2" - checksum: 2ec0ff8414d5a1ab2b8c7e9a79bbad6d97d23ea7ebf5dcf80c3c7ffd9715c30f84a3cc47b917379ea756b3db0dc4701ce6400e493a1ae1688dffcd0f884233b2 - languageName: node - linkType: hard - "del@npm:^2.2.2": version: 2.2.2 resolution: "del@npm:2.2.2" @@ -14563,22 +12873,6 @@ __metadata: languageName: node linkType: hard -"del@npm:^6.0.0": - version: 6.1.1 - resolution: "del@npm:6.1.1" - dependencies: - globby: ^11.0.1 - graceful-fs: ^4.2.4 - is-glob: ^4.0.1 - is-path-cwd: ^2.2.0 - is-path-inside: ^3.0.2 - p-map: ^4.0.0 - rimraf: ^3.0.2 - slash: ^3.0.0 - checksum: 563288b73b8b19a7261c47fd21a330eeab6e2acd7c6208c49790dfd369127120dd7836cdf0c1eca216b77c94782a81507eac6b4734252d3bef2795cb366996b6 - languageName: node - linkType: hard - "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -14629,13 +12923,6 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.2": - version: 2.0.3 - resolution: "dequal@npm:2.0.3" - checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 - languageName: node - linkType: hard - "des.js@npm:^1.0.0": version: 1.0.1 resolution: "des.js@npm:1.0.1" @@ -14678,13 +12965,6 @@ __metadata: languageName: node linkType: hard -"detect-indent@npm:^6.1.0": - version: 6.1.0 - resolution: "detect-indent@npm:6.1.0" - checksum: ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d - languageName: node - linkType: hard - "detect-libc@npm:^1.0.2": version: 1.0.3 resolution: "detect-libc@npm:1.0.3" @@ -14923,7 +13203,7 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.6": version: 0.5.16 resolution: "dom-accessibility-api@npm:0.5.16" checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 @@ -15110,13 +13390,6 @@ __metadata: languageName: node linkType: hard -"dotenv-expand@npm:^10.0.0": - version: 10.0.0 - resolution: "dotenv-expand@npm:10.0.0" - checksum: 2a38b470efe0abcb1ac8490421a55e1d764dc9440fd220942bce40965074f3fb00b585f4346020cb0f0f219966ee6b4ee5023458b3e2953fe5b3214de1b314ee - languageName: node - linkType: hard - "dotenv-expand@npm:^8.0.2": version: 8.0.3 resolution: "dotenv-expand@npm:8.0.3" @@ -15199,7 +13472,7 @@ __metadata: languageName: node linkType: hard -"duplexify@npm:^3.4.2, duplexify@npm:^3.5.0, duplexify@npm:^3.6.0": +"duplexify@npm:^3.4.2, duplexify@npm:^3.6.0": version: 3.7.1 resolution: "duplexify@npm:3.7.1" dependencies: @@ -15455,7 +13728,7 @@ __metadata: languageName: node linkType: hard -"envinfo@npm:^7.7.2, envinfo@npm:^7.7.3": +"envinfo@npm:^7.7.2": version: 7.8.1 resolution: "envinfo@npm:7.8.1" bin: @@ -15576,13 +13849,6 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^0.9.3": - version: 0.9.3 - resolution: "es-module-lexer@npm:0.9.3" - checksum: 84bbab23c396281db2c906c766af58b1ae2a1a2599844a504df10b9e8dc77ec800b3211fdaa133ff700f5703d791198807bba25d9667392d27a5e9feda344da8 - languageName: node - linkType: hard - "es-module-lexer@npm:^1.2.1": version: 1.2.1 resolution: "es-module-lexer@npm:1.2.1" @@ -15657,13 +13923,6 @@ __metadata: languageName: node linkType: hard -"es6-object-assign@npm:^1.1.0": - version: 1.1.0 - resolution: "es6-object-assign@npm:1.1.0" - checksum: 8d4fdf63484d78b5c64cacc2c2e1165bc7b6a64b739d2a9db6a4dc8641d99cc9efb433cdd4dc3d3d6b00bfa6ce959694e4665e3255190339945c5f33b692b5d8 - languageName: node - linkType: hard - "es6-promise@npm:^4.0.3": version: 4.2.8 resolution: "es6-promise@npm:4.2.8" @@ -15697,25 +13956,7 @@ __metadata: languageName: node linkType: hard -"esbuild-plugin-alias@npm:^0.2.1": - version: 0.2.1 - resolution: "esbuild-plugin-alias@npm:0.2.1" - checksum: afe2d2c8b5f09d5321cb8d9c0825e8a9f6e03c2d50df92f953a291d4620cc29eddb3da9e33b238f6d8f77738e0277bdcb831f127399449fecf78fb84c04e5da9 - languageName: node - linkType: hard - -"esbuild-register@npm:^3.4.0": - version: 3.4.2 - resolution: "esbuild-register@npm:3.4.2" - dependencies: - debug: ^4.3.4 - peerDependencies: - esbuild: ">=0.12 <1" - checksum: f65d1ccb58b1ccbba376efb1fc023abe22731d9b79eead1b0120e57d4413318f063696257a5af637b527fa1d3f009095aa6edb1bf6ff69d637a9ab281fb727b3 - languageName: node - linkType: hard - -"esbuild@npm:^0.17.0, esbuild@npm:^0.17.5": +"esbuild@npm:^0.17.5": version: 0.17.19 resolution: "esbuild@npm:0.17.19" dependencies: @@ -16406,7 +14647,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -16743,7 +14984,7 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.16.2, express@npm:^4.16.4, express@npm:^4.17.1, express@npm:^4.17.3": +"express@npm:^4.16.2, express@npm:^4.16.4, express@npm:^4.17.1": version: 4.18.2 resolution: "express@npm:4.18.2" dependencies: @@ -16870,7 +15111,7 @@ __metadata: languageName: node linkType: hard -"extract-zip@npm:^1.6.6, extract-zip@npm:^1.7.0": +"extract-zip@npm:^1.7.0": version: 1.7.0 resolution: "extract-zip@npm:1.7.0" dependencies: @@ -17190,16 +15431,6 @@ __metadata: languageName: node linkType: hard -"file-system-cache@npm:^2.0.0": - version: 2.3.0 - resolution: "file-system-cache@npm:2.3.0" - dependencies: - fs-extra: 11.1.1 - ramda: 0.29.0 - checksum: 74afa2870a062500643d41e02d1fbd47a3f30100f9e153dec5233d59f05545f4c8ada6085629d624e043479ac28c0cafc31824f7b49a3f997efab8cc5d05bfee - languageName: node - linkType: hard - "file-uri-to-path@npm:1.0.0": version: 1.0.0 resolution: "file-uri-to-path@npm:1.0.0" @@ -17319,7 +15550,7 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^3.0.0, find-cache-dir@npm:^3.2.0, find-cache-dir@npm:^3.3.1": +"find-cache-dir@npm:^3.2.0, find-cache-dir@npm:^3.3.1": version: 3.3.2 resolution: "find-cache-dir@npm:3.3.2" dependencies: @@ -17462,13 +15693,6 @@ __metadata: languageName: node linkType: hard -"flow-parser@npm:0.*": - version: 0.207.0 - resolution: "flow-parser@npm:0.207.0" - checksum: 3bd638f601f016f67eb7156f4d0233e722f468008cd47fd6ea63bb14846b1c02202e4e096eb169a7d9a7b3322a8121fb79ddf7214bfbe29e6379a19bf3409680 - languageName: node - linkType: hard - "flush-write-stream@npm:^1.0.0": version: 1.1.1 resolution: "flush-write-stream@npm:1.1.1" @@ -17717,17 +15941,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:11.1.1, fs-extra@npm:^11.1.0": - version: 11.1.1 - resolution: "fs-extra@npm:11.1.1" - dependencies: - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: fb883c68245b2d777fbc1f2082c9efb084eaa2bbf9fddaa366130d196c03608eebef7fb490541276429ee1ca99f317e2d73e96f5ca0999eefedf5a624ae1edfd - languageName: node - linkType: hard - "fs-extra@npm:3.0.1": version: 3.0.1 resolution: "fs-extra@npm:3.0.1" @@ -18012,13 +16225,6 @@ __metadata: languageName: node linkType: hard -"get-npm-tarball-url@npm:^2.0.3": - version: 2.0.3 - resolution: "get-npm-tarball-url@npm:2.0.3" - checksum: 8ad48a6f1126697665e12ebf053e0d1c3b15b3c4f29ea6c458387ac68d044ea1c08f0f2eb5c0fe35447fdd2da4f2fb5c9882feb5a2ea195c773f94e762c9b886 - languageName: node - linkType: hard - "get-own-enumerable-property-symbols@npm:^3.0.0": version: 3.0.2 resolution: "get-own-enumerable-property-symbols@npm:3.0.2" @@ -18033,13 +16239,6 @@ __metadata: languageName: node linkType: hard -"get-port@npm:^5.1.1": - version: 5.1.1 - resolution: "get-port@npm:5.1.1" - checksum: 0162663ffe5c09e748cd79d97b74cd70e5a5c84b760a475ce5767b357fb2a57cb821cee412d646aa8a156ed39b78aab88974eddaa9e5ee926173c036c0713787 - languageName: node - linkType: hard - "get-stdin@npm:^4.0.1": version: 4.0.1 resolution: "get-stdin@npm:4.0.1" @@ -18128,30 +16327,6 @@ __metadata: languageName: node linkType: hard -"giget@npm:^1.0.0": - version: 1.1.2 - resolution: "giget@npm:1.1.2" - dependencies: - colorette: ^2.0.19 - defu: ^6.1.2 - https-proxy-agent: ^5.0.1 - mri: ^1.2.0 - node-fetch-native: ^1.0.2 - pathe: ^1.1.0 - tar: ^6.1.13 - bin: - giget: dist/cli.mjs - checksum: 76ad0f7e792ee95dd6c4e1096697fdcce61a2a3235a6c21761fc3e0d1053342074ce71c80059d6d4363fd34152e5d7b2e58221412f300c852ff7d4a12d0321fe - languageName: node - linkType: hard - -"github-slugger@npm:^1.0.0": - version: 1.5.0 - resolution: "github-slugger@npm:1.5.0" - checksum: c70988224578b3bdaa25df65973ffc8c24594a77a28550c3636e495e49d17aef5cdb04c04fa3f1744babef98c61eecc6a43299a13ea7f3cc33d680bf9053ffbe - languageName: node - linkType: hard - "glob-parent@npm:^3.1.0": version: 3.1.0 resolution: "glob-parent@npm:3.1.0" @@ -18182,28 +16357,6 @@ __metadata: languageName: node linkType: hard -"glob-promise@npm:^4.2.0": - version: 4.2.2 - resolution: "glob-promise@npm:4.2.2" - dependencies: - "@types/glob": ^7.1.3 - peerDependencies: - glob: ^7.1.6 - checksum: c1a3d95f7c8393e4151d4899ec4e42bb2e8237160f840ad1eccbe9247407da8b6c13e28f463022e011708bc40862db87b9b77236d35afa3feb8aa86d518f2dfe - languageName: node - linkType: hard - -"glob-promise@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-promise@npm:6.0.2" - dependencies: - "@types/glob": ^8.0.0 - peerDependencies: - glob: ^8.0.3 - checksum: 3caa63b052ddcf28d3498a0c93ef623bc43d0fa57487844782b77175c32db1602fd63e4e26091075125083b21eb3e81b4318d5d24139b9b033a764e64b6b3bc3 - languageName: node - linkType: hard - "glob-to-regexp@npm:^0.3.0": version: 0.3.0 resolution: "glob-to-regexp@npm:0.3.0" @@ -18258,7 +16411,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7, glob@npm:^7.2.0": +"glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7, glob@npm:^7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -18272,7 +16425,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.1, glob@npm:^8.0.3, glob@npm:^8.1.0": +"glob@npm:^8.0.1, glob@npm:^8.0.3": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: @@ -18394,7 +16547,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.0, globby@npm:^11.0.1, globby@npm:^11.0.2, globby@npm:^11.0.3": +"globby@npm:^11.0.0, globby@npm:^11.0.2, globby@npm:^11.0.3": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -18520,22 +16673,6 @@ __metadata: languageName: node linkType: hard -"gunzip-maybe@npm:^1.4.2": - version: 1.4.2 - resolution: "gunzip-maybe@npm:1.4.2" - dependencies: - browserify-zlib: ^0.1.4 - is-deflate: ^1.0.0 - is-gzip: ^1.0.0 - peek-stream: ^1.1.0 - pumpify: ^1.3.3 - through2: ^2.0.3 - bin: - gunzip-maybe: bin.js - checksum: bc4d4977c24a2860238df271de75d53dd72a359d19f1248d1c613807dc221d3b8ae09624e3085c8106663e3e1b59db62a85b261d1138c2cc24efad9df577d4e1 - languageName: node - linkType: hard - "gzip-size@npm:3.0.0": version: 3.0.0 resolution: "gzip-size@npm:3.0.0" @@ -19380,16 +17517,6 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^4.0.0": - version: 4.0.0 - resolution: "https-proxy-agent@npm:4.0.0" - dependencies: - agent-base: 5 - debug: 4 - checksum: 19471d5aae3e747b1c98b17556647e2a1362e68220c6b19585a8527498f32e62e03c41d2872d059d8720d56846bd7460a80ac06f876bccfa786468ff40dd5eef - languageName: node - linkType: hard - "human-signals@npm:^1.1.1": version: 1.1.1 resolution: "human-signals@npm:1.1.1" @@ -19804,7 +17931,7 @@ __metadata: languageName: node linkType: hard -"interpret@npm:^1.0.0, interpret@npm:^1.1.0": +"interpret@npm:^1.1.0": version: 1.4.0 resolution: "interpret@npm:1.4.0" checksum: 2e5f51268b5941e4a17e4ef0575bc91ed0ab5f8515e3cf77486f7c14d13f3010df9c0959f37063dcc96e78d12dc6b0bb1b9e111cdfe69771f4656d2993d36155 @@ -19879,7 +18006,7 @@ __metadata: languageName: node linkType: hard -"is-absolute-url@npm:^3.0.0, is-absolute-url@npm:^3.0.3": +"is-absolute-url@npm:^3.0.3": version: 3.0.3 resolution: "is-absolute-url@npm:3.0.3" checksum: 5159b51d065d9ad29e16a2f78d6c0e41c43227caf90a45e659c54ea6fd50ef0595b1871ce392e84b1df7cfdcad9a8e66eec0813a029112188435abf115accb16 @@ -20092,13 +18219,6 @@ __metadata: languageName: node linkType: hard -"is-deflate@npm:^1.0.0": - version: 1.0.0 - resolution: "is-deflate@npm:1.0.0" - checksum: c2f9f2d3db79ac50c5586697d1e69a55282a2b0cc5e437b3c470dd47f24e40b6216dcd7e024511e21381607bf57afa019343e3bd0e08a119032818b596004262 - languageName: node - linkType: hard - "is-descriptor@npm:^0.1.0": version: 0.1.6 resolution: "is-descriptor@npm:0.1.6" @@ -20231,13 +18351,6 @@ __metadata: languageName: node linkType: hard -"is-gzip@npm:^1.0.0": - version: 1.0.0 - resolution: "is-gzip@npm:1.0.0" - checksum: 0d28931c1f445fa29c900cf9f48e06e9d1d477a3bf7bd7332e7ce68f1333ccd8cb381de2f0f62a9a262d9c0912608a9a71b4a40e788e201b3dbd67072bb20d86 - languageName: node - linkType: hard - "is-hexadecimal@npm:^1.0.0": version: 1.0.4 resolution: "is-hexadecimal@npm:1.0.4" @@ -20262,13 +18375,6 @@ __metadata: languageName: node linkType: hard -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 - languageName: node - linkType: hard - "is-ip@npm:^2.0.0": version: 2.0.0 resolution: "is-ip@npm:2.0.0" @@ -20306,16 +18412,6 @@ __metadata: languageName: node linkType: hard -"is-nan@npm:^1.2.1": - version: 1.3.2 - resolution: "is-nan@npm:1.3.2" - dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - checksum: 5dfadcef6ad12d3029d43643d9800adbba21cf3ce2ec849f734b0e14ee8da4070d82b15fdb35138716d02587c6578225b9a22779cab34888a139cc43e4e3610a - languageName: node - linkType: hard - "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -20392,7 +18488,7 @@ __metadata: languageName: node linkType: hard -"is-path-cwd@npm:^2.0.0, is-path-cwd@npm:^2.2.0": +"is-path-cwd@npm:^2.0.0": version: 2.2.0 resolution: "is-path-cwd@npm:2.2.0" checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 @@ -20435,7 +18531,7 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.1, is-path-inside@npm:^3.0.2": +"is-path-inside@npm:^3.0.1": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 @@ -21415,29 +19511,6 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-haste-map@npm:29.5.0" - dependencies: - "@jest/types": ^29.5.0 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^29.4.3 - jest-util: ^29.5.0 - jest-worker: ^29.5.0 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: 3828ff7783f168e34be2c63887f82a01634261f605dcae062d83f979a61c37739e21b9607ecb962256aea3fbe5a530a1acee062d0026fcb47c607c12796cf3b7 - languageName: node - linkType: hard - "jest-jasmine2@npm:^26.6.3": version: 26.6.3 resolution: "jest-jasmine2@npm:26.6.3" @@ -21654,7 +19727,7 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^27.0.6, jest-mock@npm:^27.5.1": +"jest-mock@npm:^27.5.1": version: 27.5.1 resolution: "jest-mock@npm:27.5.1" dependencies: @@ -21697,13 +19770,6 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-regex-util@npm:29.4.3" - checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a - languageName: node - linkType: hard - "jest-resolve-dependencies@npm:^26.6.3": version: 26.6.3 resolution: "jest-resolve-dependencies@npm:26.6.3" @@ -22174,18 +20240,6 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-worker@npm:29.5.0" - dependencies: - "@types/node": "*" - jest-util: ^29.5.0 - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 - languageName: node - linkType: hard - "jest@npm:26.6.0": version: 26.6.0 resolution: "jest@npm:26.6.0" @@ -22370,37 +20424,6 @@ __metadata: languageName: node linkType: hard -"jscodeshift@npm:^0.14.0": - version: 0.14.0 - resolution: "jscodeshift@npm:0.14.0" - dependencies: - "@babel/core": ^7.13.16 - "@babel/parser": ^7.13.16 - "@babel/plugin-proposal-class-properties": ^7.13.0 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.13.8 - "@babel/plugin-proposal-optional-chaining": ^7.13.12 - "@babel/plugin-transform-modules-commonjs": ^7.13.8 - "@babel/preset-flow": ^7.13.13 - "@babel/preset-typescript": ^7.13.0 - "@babel/register": ^7.13.16 - babel-core: ^7.0.0-bridge.0 - chalk: ^4.1.2 - flow-parser: 0.* - graceful-fs: ^4.2.4 - micromatch: ^4.0.4 - neo-async: ^2.5.0 - node-dir: ^0.1.17 - recast: ^0.21.0 - temp: ^0.8.4 - write-file-atomic: ^2.3.0 - peerDependencies: - "@babel/preset-env": ^7.1.6 - bin: - jscodeshift: bin/jscodeshift.js - checksum: 54ea6d639455883336f80b38a70648821c88b7942315dc0fbab01bc34a9ad0f0f78e3bd69304b5ab167e4262d6ed7e6284c6d32525ab01c89d9118df89b3e2a0 - languageName: node - linkType: hard - "jsdom@npm:^16.4.0, jsdom@npm:^16.6.0": version: 16.7.0 resolution: "jsdom@npm:16.7.0" @@ -23083,17 +21106,6 @@ __metadata: languageName: node linkType: hard -"lazy-universal-dotenv@npm:^4.0.0": - version: 4.0.0 - resolution: "lazy-universal-dotenv@npm:4.0.0" - dependencies: - app-root-dir: ^1.0.2 - dotenv: ^16.0.0 - dotenv-expand: ^10.0.0 - checksum: 196e0d701100144fbfe078d604a477573413ebf38dfe8d543748605e6a7074978508a3bb9f8135acd319db4fa947eef78836497163617d15a22163c59a00996b - languageName: node - linkType: hard - "leaflet@npm:^1.7.1": version: 1.9.4 resolution: "leaflet@npm:1.9.4" @@ -24021,7 +22033,7 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": +"log-symbols@npm:^4.0.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -24182,15 +22194,6 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.27.0": - version: 0.27.0 - resolution: "magic-string@npm:0.27.0" - dependencies: - "@jridgewell/sourcemap-codec": ^1.4.13 - checksum: 273faaa50baadb7a2df6e442eac34ad611304fc08fe16e24fe2e472fd944bfcb73ffb50d2dc972dc04e92784222002af46868cb9698b1be181c81830fd95a13e - languageName: node - linkType: hard - "make-dir@npm:^2.0.0, make-dir@npm:^2.1.0": version: 2.1.0 resolution: "make-dir@npm:2.1.0" @@ -24351,15 +22354,6 @@ __metadata: languageName: node linkType: hard -"markdown-to-jsx@npm:^7.1.8": - version: 7.2.0 - resolution: "markdown-to-jsx@npm:7.2.0" - peerDependencies: - react: ">= 0.14.0" - checksum: ea417e684d7eec9f1beebc9423aba377116ef77c3cd83a2d622df1b9030ffef99aa9b3f431192b94f3237943a33560e6dda9be8a4c1d25187518d09986dad22f - languageName: node - linkType: hard - "match-sorter@npm:^6.0.2": version: 6.3.1 resolution: "match-sorter@npm:6.3.1" @@ -24489,13 +22483,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-string@npm:^1.0.0": - version: 1.1.0 - resolution: "mdast-util-to-string@npm:1.1.0" - checksum: eec1eb283f3341376c8398b67ce512a11ab3e3191e3dbd5644d32a26784eac8d5f6d0b0fb81193af00d75a2c545cde765c8b03e966bd890076efb5d357fb4fe2 - languageName: node - linkType: hard - "mdn-data@npm:2.0.14": version: 2.0.14 resolution: "mdn-data@npm:2.0.14" @@ -25018,7 +23005,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.25, mime-types@npm:^2.1.27, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -25036,7 +23023,7 @@ __metadata: languageName: node linkType: hard -"mime@npm:^2.0.3, mime@npm:^2.4.1, mime@npm:^2.4.4": +"mime@npm:^2.4.1, mime@npm:^2.4.4": version: 2.6.0 resolution: "mime@npm:2.6.0" bin: @@ -25433,13 +23420,6 @@ __metadata: languageName: node linkType: hard -"mri@npm:^1.2.0": - version: 1.2.0 - resolution: "mri@npm:1.2.0" - checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 - languageName: node - linkType: hard - "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -25743,7 +23723,7 @@ __metadata: languageName: node linkType: hard -"node-dir@npm:^0.1.10, node-dir@npm:^0.1.17": +"node-dir@npm:^0.1.10": version: 0.1.17 resolution: "node-dir@npm:0.1.17" dependencies: @@ -25762,13 +23742,6 @@ __metadata: languageName: node linkType: hard -"node-fetch-native@npm:^1.0.2": - version: 1.1.1 - resolution: "node-fetch-native@npm:1.1.1" - checksum: 41fe59179eb94b6ffb25e657e5ed14b4b50e2ba7f6bf5346622970638c8abbf29653b011141c919c6c081979962edd1eb94424a7621412cd78c47a9cd8be1227 - languageName: node - linkType: hard - "node-fetch@npm:2.6.7": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" @@ -26698,23 +24671,6 @@ __metadata: languageName: node linkType: hard -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: ^4.1.0 - chalk: ^4.1.0 - cli-cursor: ^3.1.0 - cli-spinners: ^2.5.0 - is-interactive: ^1.0.0 - is-unicode-supported: ^0.1.0 - log-symbols: ^4.1.0 - strip-ansi: ^6.0.0 - wcwidth: ^1.0.1 - checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 - languageName: node - linkType: hard - "original@npm:>=0.0.5": version: 1.0.2 resolution: "original@npm:1.0.2" @@ -26972,13 +24928,6 @@ __metadata: languageName: node linkType: hard -"pako@npm:~0.2.0": - version: 0.2.9 - resolution: "pako@npm:0.2.9" - checksum: 055f9487cd57fbb78df84315873bbdd089ba286f3499daed47d2effdc6253e981f5db6898c23486de76d4a781559f890d643bd3a49f70f1b4a18019c98aa5125 - languageName: node - linkType: hard - "pako@npm:~1.0.5": version: 1.0.11 resolution: "pako@npm:1.0.11" @@ -27331,13 +25280,6 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^1.1.0": - version: 1.1.0 - resolution: "pathe@npm:1.1.0" - checksum: 6b9be9968ea08a90c0824934799707a1c6a1ad22ac1f22080f377e3f75856d5e53a331b01d327329bfce538a14590587cfb250e8e7947f64408797c84c252056 - languageName: node - linkType: hard - "pathval@npm:^1.1.1": version: 1.1.1 resolution: "pathval@npm:1.1.1" @@ -27358,17 +25300,6 @@ __metadata: languageName: node linkType: hard -"peek-stream@npm:^1.1.0": - version: 1.1.3 - resolution: "peek-stream@npm:1.1.3" - dependencies: - buffer-from: ^1.0.0 - duplexify: ^3.5.0 - through2: ^2.0.3 - checksum: a0e09d6d1a8a01158a3334f20d6b1cdd91747eba24eb06a1d742eefb620385593121a76d4378cc81f77cdce6a66df0575a41041b1189c510254aec91878afc99 - languageName: node - linkType: hard - "pend@npm:~1.2.0": version: 1.2.0 resolution: "pend@npm:1.2.0" @@ -27693,15 +25624,6 @@ __metadata: languageName: node linkType: hard -"polished@npm:^4.2.2": - version: 4.2.2 - resolution: "polished@npm:4.2.2" - dependencies: - "@babel/runtime": ^7.17.8 - checksum: 97fb927dc55cd34aeb11b31ae2a3332463f114351c86e8aa6580d7755864a0120164fdc3770e6160c8b1775052f0eda14db9a6e34402cd4b08ab2d658a593725 - languageName: node - linkType: hard - "popper.js@npm:1.16.1-lts": version: 1.16.1-lts resolution: "popper.js@npm:1.16.1-lts" @@ -28646,7 +26568,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.0.2, prettier@npm:^2.8.0": +"prettier@npm:^2.0.2": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -28718,7 +26640,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.2, pretty-format@npm:^27.5.1": +"pretty-format@npm:^27.0.0, pretty-format@npm:^27.5.1": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" dependencies: @@ -28786,7 +26708,7 @@ __metadata: languageName: node linkType: hard -"progress@npm:2.0.3, progress@npm:^2.0.0, progress@npm:^2.0.1, progress@npm:^2.0.3": +"progress@npm:2.0.3, progress@npm:^2.0.0, progress@npm:^2.0.3": version: 2.0.3 resolution: "progress@npm:2.0.3" checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 @@ -28946,7 +26868,7 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:1.1.0, proxy-from-env@npm:^1.0.0, proxy-from-env@npm:^1.1.0": +"proxy-from-env@npm:1.1.0, proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 @@ -29059,24 +26981,6 @@ __metadata: languageName: node linkType: hard -"puppeteer-core@npm:^2.1.1": - version: 2.1.1 - resolution: "puppeteer-core@npm:2.1.1" - dependencies: - "@types/mime-types": ^2.1.0 - debug: ^4.1.0 - extract-zip: ^1.6.6 - https-proxy-agent: ^4.0.0 - mime: ^2.0.3 - mime-types: ^2.1.25 - progress: ^2.0.1 - proxy-from-env: ^1.0.0 - rimraf: ^2.6.1 - ws: ^6.1.0 - checksum: 2ddb597ef1b2d162b4aa49833b977734129edf7c8fa558fc38c59d273e79aa1bd079481c642de87f7163665f7f37aa52683da2716bafb7d3cab68c262c36ec28 - languageName: node - linkType: hard - "puppeteer@npm:^15.4.0": version: 15.5.0 resolution: "puppeteer@npm:15.5.0" @@ -29257,13 +27161,6 @@ __metadata: languageName: node linkType: hard -"ramda@npm:0.29.0": - version: 0.29.0 - resolution: "ramda@npm:0.29.0" - checksum: 9ab26c06eb7545cbb7eebcf75526d6ee2fcaae19e338f165b2bf32772121e7b28192d6664d1ba222ff76188ba26ab307342d66e805dbb02c860560adc4d5dd57 - languageName: node - linkType: hard - "ramda@npm:^0.28.0": version: 0.28.0 resolution: "ramda@npm:0.28.0" @@ -29462,16 +27359,6 @@ __metadata: languageName: node linkType: hard -"react-colorful@npm:^5.1.2": - version: 5.6.1 - resolution: "react-colorful@npm:5.6.1" - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: e432b7cb0df57e8f0bcdc3b012d2e93fcbcb6092c9e0f85654788d5ebfc4442536d8cc35b2418061ba3c4afb8b7788cc101c606d86a1732407921de7a9244c8d - languageName: node - linkType: hard - "react-datepicker@npm:^1.6.0": version: 1.8.0 resolution: "react-datepicker@npm:1.8.0" @@ -29584,26 +27471,6 @@ __metadata: languageName: node linkType: hard -"react-docgen@npm:6.0.0-alpha.3": - version: 6.0.0-alpha.3 - resolution: "react-docgen@npm:6.0.0-alpha.3" - dependencies: - "@babel/core": ^7.7.5 - "@babel/generator": ^7.12.11 - ast-types: ^0.14.2 - commander: ^2.19.0 - doctrine: ^3.0.0 - estree-to-babel: ^3.1.0 - neo-async: ^2.6.1 - node-dir: ^0.1.10 - resolve: ^1.17.0 - strip-indent: ^3.0.0 - bin: - react-docgen: bin/react-docgen.js - checksum: db4c300910e2ef7b854ccf4f454bd701875b787d0bc0f444f89415223e7c288a5808d6cd0f7ef6346332c9de2d068d648bc801d16b6b07a1699c3e10670c4801 - languageName: node - linkType: hard - "react-docgen@npm:^5.0.0": version: 5.4.3 resolution: "react-docgen@npm:5.4.3" @@ -29638,18 +27505,6 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" - dependencies: - loose-envify: ^1.1.0 - scheduler: ^0.23.0 - peerDependencies: - react: ^18.2.0 - checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc - languageName: node - linkType: hard - "react-element-to-jsx-string@npm:^14.3.4": version: 14.3.4 resolution: "react-element-to-jsx-string@npm:14.3.4" @@ -29664,20 +27519,6 @@ __metadata: languageName: node linkType: hard -"react-element-to-jsx-string@npm:^15.0.0": - version: 15.0.0 - resolution: "react-element-to-jsx-string@npm:15.0.0" - dependencies: - "@base2/pretty-print-object": 1.0.1 - is-plain-object: 5.0.0 - react-is: 18.1.0 - peerDependencies: - react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - checksum: c3907cc4c1d3e9ecc8ca7727058ebcba6ec89848d9e07bfd2c77ee8f28f1ad99bf55e38359dec8a1125de83d41ac09a2874f53c41415edc86ffa9840fa1b7856 - languageName: node - linkType: hard - "react-error-overlay@npm:^1.0.7": version: 1.0.10 resolution: "react-error-overlay@npm:1.0.10" @@ -29756,15 +27597,6 @@ __metadata: languageName: node linkType: hard -"react-inspector@npm:^6.0.0": - version: 6.0.1 - resolution: "react-inspector@npm:6.0.1" - peerDependencies: - react: ^16.8.4 || ^17.0.0 || ^18.0.0 - checksum: 877cbccf36fdc6213abb9611fb9279c4bb76ef7ecb4ec554b3935419a99d55e6d30a80799a054d468d43cc59a9777f21d22d6219a4597bfbd27f3f08a4cdfdc6 - languageName: node - linkType: hard - "react-is@npm:17.0.2, react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1, react-is@npm:^17.0.2": version: 17.0.2 resolution: "react-is@npm:17.0.2" @@ -29772,13 +27604,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:18.1.0": - version: 18.1.0 - resolution: "react-is@npm:18.1.0" - checksum: d206a0fe6790851bff168727bfb896de02c5591695afb0c441163e8630136a3e13ee1a7ddd59fdccddcc93968b4721ae112c10f790b194b03b35a3dc13a355ef - languageName: node - linkType: hard - "react-is@npm:^16.12.0, react-is@npm:^16.13.0, react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0, react-is@npm:^16.8.1, react-is@npm:^16.8.4, react-is@npm:^16.8.6": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -30606,15 +28431,6 @@ __metadata: languageName: node linkType: hard -"react@npm:^18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" - dependencies: - loose-envify: ^1.1.0 - checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b - languageName: node - linkType: hard - "reactstrap@npm:^5.0.0": version: 5.0.0 resolution: "reactstrap@npm:5.0.0" @@ -30836,31 +28652,6 @@ __metadata: languageName: node linkType: hard -"recast@npm:^0.21.0": - version: 0.21.5 - resolution: "recast@npm:0.21.5" - dependencies: - ast-types: 0.15.2 - esprima: ~4.0.0 - source-map: ~0.6.1 - tslib: ^2.0.1 - checksum: 03cc7f57562238ba258d468be67bf7446ce7a707bc87a087891dad15afead46c36e9aaeedf2130e2ab5a465244a9c62bfd4127849761cf8f4085abe2f3e5f485 - languageName: node - linkType: hard - -"recast@npm:^0.23.1": - version: 0.23.2 - resolution: "recast@npm:0.23.2" - dependencies: - assert: ^2.0.0 - ast-types: ^0.16.1 - esprima: ~4.0.0 - source-map: ~0.6.1 - tslib: ^2.0.1 - checksum: 04c2617cb04c4d02a5c9e1bb75b8e7afc21d1ba7babce25303732f035c3d4b2f945d727f34c3976223d800592ea31e6641cfd33700a8699c02025040174af0b6 - languageName: node - linkType: hard - "recharts-scale@npm:^0.4.2": version: 0.4.5 resolution: "recharts-scale@npm:0.4.5" @@ -31194,19 +28985,6 @@ __metadata: languageName: node linkType: hard -"remark-external-links@npm:^8.0.0": - version: 8.0.0 - resolution: "remark-external-links@npm:8.0.0" - dependencies: - extend: ^3.0.0 - is-absolute-url: ^3.0.0 - mdast-util-definitions: ^4.0.0 - space-separated-tokens: ^1.0.0 - unist-util-visit: ^2.0.0 - checksum: 48c4a41fe38916f79febb390b0c4deefe82b554dd36dc534262d851860d17fb6d15d78d515f29194e5fa48db5f01f4405a6f6dd077aaf32812a2efffb01700d7 - languageName: node - linkType: hard - "remark-footnotes@npm:2.0.0": version: 2.0.0 resolution: "remark-footnotes@npm:2.0.0" @@ -31254,17 +29032,6 @@ __metadata: languageName: node linkType: hard -"remark-slug@npm:^6.0.0": - version: 6.1.0 - resolution: "remark-slug@npm:6.1.0" - dependencies: - github-slugger: ^1.0.0 - mdast-util-to-string: ^1.0.0 - unist-util-visit: ^2.0.0 - checksum: 81fff0dcfaf6d6117ef1293bb1d26c3e25483d99c65c22434298eed93583a89ea5d7b94063d9a7f47c0647a708ce84f00ff62d274503f248feec03c344cabb20 - languageName: node - linkType: hard - "remark-squeeze-paragraphs@npm:4.0.0": version: 4.0.0 resolution: "remark-squeeze-paragraphs@npm:4.0.0" @@ -31592,16 +29359,6 @@ __metadata: languageName: node linkType: hard -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" - dependencies: - onetime: ^5.1.0 - signal-exit: ^3.0.2 - checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 - languageName: node - linkType: hard - "ret@npm:~0.1.10": version: 0.1.15 resolution: "ret@npm:0.1.15" @@ -31714,17 +29471,6 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:~2.6.2": - version: 2.6.3 - resolution: "rimraf@npm:2.6.3" - dependencies: - glob: ^7.1.3 - bin: - rimraf: ./bin.js - checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10 - languageName: node - linkType: hard - "ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": version: 2.0.2 resolution: "ripemd160@npm:2.0.2" @@ -31785,7 +29531,7 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^2.25.0 || ^3.3.0, rollup@npm:^3.21.0": +"rollup@npm:^3.21.0": version: 3.23.0 resolution: "rollup@npm:3.23.0" dependencies: @@ -32055,15 +29801,6 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" - dependencies: - loose-envify: ^1.1.0 - checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a - languageName: node - linkType: hard - "schema-utils@npm:2.7.0": version: 2.7.0 resolution: "schema-utils@npm:2.7.0" @@ -32156,7 +29893,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": +"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5": version: 7.5.1 resolution: "semver@npm:7.5.1" dependencies: @@ -32441,19 +30178,6 @@ __metadata: languageName: node linkType: hard -"shelljs@npm:^0.8.5": - version: 0.8.5 - resolution: "shelljs@npm:0.8.5" - dependencies: - glob: ^7.0.0 - interpret: ^1.0.0 - rechoir: ^0.6.2 - bin: - shjs: bin/shjs - checksum: 7babc46f732a98f4c054ec1f048b55b9149b98aa2da32f6cf9844c434b43c6251efebd6eec120937bd0999e13811ebd45efe17410edb3ca938f82f9381302748 - languageName: node - linkType: hard - "shellwords@npm:^0.1.1": version: 0.1.1 resolution: "shellwords@npm:0.1.1" @@ -32526,7 +30250,7 @@ __metadata: languageName: node linkType: hard -"simple-update-notifier@npm:^1.0.0, simple-update-notifier@npm:^1.0.7": +"simple-update-notifier@npm:^1.0.7": version: 1.1.0 resolution: "simple-update-notifier@npm:1.1.0" dependencies: @@ -33188,25 +30912,13 @@ __metadata: languageName: node linkType: hard -"store2@npm:^2.12.0, store2@npm:^2.14.2": +"store2@npm:^2.12.0": version: 2.14.2 resolution: "store2@npm:2.14.2" checksum: 6f270fc5bab99b63f45fcc7bd8b99c2714b4adf880f557ed7ffb5ed3987131251165bccde425a00928aaf044870aee79ddeef548576d093c68703ed2edec45d7 languageName: node linkType: hard -"storybook@npm:^7.0.18": - version: 7.0.18 - resolution: "storybook@npm:7.0.18" - dependencies: - "@storybook/cli": 7.0.18 - bin: - sb: index.js - storybook: index.js - checksum: 8d6019583c8e586b241d8fec55ed11eec0ffbf48b73b33092bca10cfbb68fd6cf14730cd6fc615b0033420c02e32bbc18e610e7edfc4bef86b9ff45ae06590df - languageName: node - linkType: hard - "stream-browserify@npm:^2.0.1": version: 2.0.2 resolution: "stream-browserify@npm:2.0.2" @@ -33581,7 +31293,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 @@ -33616,7 +31328,7 @@ __metadata: languageName: node linkType: hard -"styled-components@npm:^5.0.1, styled-components@npm:^5.1.0, styled-components@npm:^5.3.11": +"styled-components@npm:^5.0.1, styled-components@npm:^5.1.0": version: 5.3.11 resolution: "styled-components@npm:5.3.11" dependencies: @@ -33862,7 +31574,7 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:2.1.1, tar-fs@npm:^2.1.1": +"tar-fs@npm:2.1.1": version: 2.1.1 resolution: "tar-fs@npm:2.1.1" dependencies: @@ -33902,7 +31614,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.0.1, tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.13, tar@npm:^6.1.2": +"tar@npm:^6.0.1, tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.15 resolution: "tar@npm:6.1.15" dependencies: @@ -33946,15 +31658,6 @@ __metadata: languageName: node linkType: hard -"telejson@npm:^7.0.3": - version: 7.1.0 - resolution: "telejson@npm:7.1.0" - dependencies: - memoizerific: ^1.11.3 - checksum: 8000e43dc862a87ab1ca342a2635641923d55c2585f85ea8c7c60293681d6f920e8b9570cc12d90ecef286f065c176da5f769f42f4828ba18a626627bed1ac07 - languageName: node - linkType: hard - "temp-dir@npm:^1.0.0": version: 1.0.0 resolution: "temp-dir@npm:1.0.0" @@ -33962,13 +31665,6 @@ __metadata: languageName: node linkType: hard -"temp-dir@npm:^2.0.0": - version: 2.0.0 - resolution: "temp-dir@npm:2.0.0" - checksum: cc4f0404bf8d6ae1a166e0e64f3f409b423f4d1274d8c02814a59a5529f07db6cd070a749664141b992b2c1af337fa9bb451a460a43bb9bcddc49f235d3115aa - languageName: node - linkType: hard - "temp@npm:0.8.3": version: 0.8.3 resolution: "temp@npm:0.8.3" @@ -33979,15 +31675,6 @@ __metadata: languageName: node linkType: hard -"temp@npm:^0.8.4": - version: 0.8.4 - resolution: "temp@npm:0.8.4" - dependencies: - rimraf: ~2.6.2 - checksum: f35bed78565355dfdf95f730b7b489728bd6b7e35071bcc6497af7c827fb6c111fbe9063afc7b8cbc19522a072c278679f9a0ee81e684aa2c8617cc0f2e9c191 - languageName: node - linkType: hard - "tempy@npm:^0.3.0": version: 0.3.0 resolution: "tempy@npm:0.3.0" @@ -33999,19 +31686,6 @@ __metadata: languageName: node linkType: hard -"tempy@npm:^1.0.1": - version: 1.0.1 - resolution: "tempy@npm:1.0.1" - dependencies: - del: ^6.0.0 - is-stream: ^2.0.0 - temp-dir: ^2.0.0 - type-fest: ^0.16.0 - unique-string: ^2.0.0 - checksum: e77ca4440af18e42dc64d8903b7ed0be673455b76680ff94a7d7c6ee7c16f7604bdcdee3c39436342b1082c23eda010dbe48f6094e836e0bd53c8b1aa63e5b95 - languageName: node - linkType: hard - "terminal-link@npm:^2.0.0": version: 2.1.1 resolution: "terminal-link@npm:2.1.1" @@ -34186,7 +31860,7 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.0, through2@npm:^2.0.1, through2@npm:^2.0.3": +"through2@npm:^2.0.0, through2@npm:^2.0.1": version: 2.0.5 resolution: "through2@npm:2.0.5" dependencies: @@ -34518,7 +32192,7 @@ __metadata: languageName: node linkType: hard -"ts-dedent@npm:^2.0.0, ts-dedent@npm:^2.2.0": +"ts-dedent@npm:^2.0.0": version: 2.2.0 resolution: "ts-dedent@npm:2.2.0" checksum: 93ed8f7878b6d5ed3c08d99b740010eede6bccfe64bce61c5a4da06a2c17d6ddbb80a8c49c2d15251de7594a4f93ffa21dd10e7be75ef66a4dc9951b4a94e2af @@ -34625,7 +32299,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.4.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3": version: 2.5.2 resolution: "tslib@npm:2.5.2" checksum: 4d3c1e238b94127ed0e88aa0380db3c2ddae581dc0f4bae5a982345e9f50ee5eda90835b8bfba99b02df10a5734470be197158c36f9129ac49fdc14a6a9da222 @@ -34739,13 +32413,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.16.0": - version: 0.16.0 - resolution: "type-fest@npm:0.16.0" - checksum: 1a4102c06dc109db00418c753062e206cab65befd469d000ece4452ee649bf2a9cf57686d96fb42326bc9d918d9a194d4452897b486dcc41989e5c99e4e87094 - languageName: node - linkType: hard - "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -34795,13 +32462,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^2.19.0": - version: 2.19.0 - resolution: "type-fest@npm:2.19.0" - checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278 - languageName: node - linkType: hard - "type-is@npm:^1.6.4, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -35168,15 +32828,6 @@ __metadata: languageName: node linkType: hard -"unique-string@npm:^2.0.0": - version: 2.0.0 - resolution: "unique-string@npm:2.0.0" - dependencies: - crypto-random-string: ^2.0.0 - checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e - languageName: node - linkType: hard - "unist-builder@npm:2.0.3, unist-builder@npm:^2.0.0": version: 2.0.3 resolution: "unist-builder@npm:2.0.3" @@ -35291,18 +32942,6 @@ __metadata: languageName: node linkType: hard -"unplugin@npm:^0.10.2": - version: 0.10.2 - resolution: "unplugin@npm:0.10.2" - dependencies: - acorn: ^8.8.0 - chokidar: ^3.5.3 - webpack-sources: ^3.2.3 - webpack-virtual-modules: ^0.4.5 - checksum: 984199a8ecbceb7d7b37d14d5bea88dc6ae3e1fa6f1ec5b4a9263160424ee5b5ecf809ce667ff2ff819731650fc9bd42fcc7b2b33dd888a1eb047349eba63960 - languageName: node - linkType: hard - "unquote@npm:^1.1.0, unquote@npm:~1.1.1": version: 1.1.1 resolution: "unquote@npm:1.1.1" @@ -35472,18 +33111,6 @@ __metadata: languageName: node linkType: hard -"use-resize-observer@npm:^9.1.0": - version: 9.1.0 - resolution: "use-resize-observer@npm:9.1.0" - dependencies: - "@juggle/resize-observer": ^3.3.1 - peerDependencies: - react: 16.8.0 - 18 - react-dom: 16.8.0 - 18 - checksum: 92be0ac34a3b3cf884cd55847c90792b5b44833dc258e96d650152815ad246afe45825aa223332203004d836535a927ab74f18dc0313229e2c7c69510eddf382 - languageName: node - linkType: hard - "use-subscription@npm:^1.0.0": version: 1.8.0 resolution: "use-subscription@npm:1.8.0" @@ -35572,7 +33199,7 @@ __metadata: languageName: node linkType: hard -"util@npm:^0.12.0, util@npm:^0.12.4": +"util@npm:^0.12.4": version: 0.12.5 resolution: "util@npm:0.12.5" dependencies: @@ -35626,15 +33253,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^9.0.0": - version: 9.0.0 - resolution: "uuid@npm:9.0.0" - bin: - uuid: dist/bin/uuid - checksum: 8dd2c83c43ddc7e1c71e36b60aea40030a6505139af6bee0f382ebcd1a56f6cd3028f7f06ffb07f8cf6ced320b76aea275284b224b002b289f89fe89c389b028 - languageName: node - linkType: hard - "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -35922,7 +33540,7 @@ __metadata: languageName: node linkType: hard -"walker@npm:^1.0.7, walker@npm:^1.0.8, walker@npm:~1.0.5": +"walker@npm:^1.0.7, walker@npm:~1.0.5": version: 1.0.8 resolution: "walker@npm:1.0.8" dependencies: @@ -36164,13 +33782,6 @@ __metadata: languageName: node linkType: hard -"webpack-virtual-modules@npm:^0.4.5": - version: 0.4.6 - resolution: "webpack-virtual-modules@npm:0.4.6" - checksum: cb056ba8c50b35436ae43149554b051b80065b0cf79f2d528ca692ddf344a422ac71c415adb9da83dc3acc6e7e58f518388cc1cd11cb4fa29dc04f2c4494afe3 - languageName: node - linkType: hard - "webpack@npm:4": version: 4.46.0 resolution: "webpack@npm:4.46.0" @@ -36817,17 +34428,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^2.3.0": - version: 2.4.3 - resolution: "write-file-atomic@npm:2.4.3" - dependencies: - graceful-fs: ^4.1.11 - imurmurhash: ^0.1.4 - signal-exit: ^3.0.2 - checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae - languageName: node - linkType: hard - "write-file-atomic@npm:^3.0.0": version: 3.0.3 resolution: "write-file-atomic@npm:3.0.3" @@ -36840,16 +34440,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.2": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^3.0.7 - checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c - languageName: node - linkType: hard - "ws@npm:8.8.0": version: 8.8.0 resolution: "ws@npm:8.8.0" @@ -36875,7 +34465,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^6.1.0, ws@npm:^6.2.1": +"ws@npm:^6.2.1": version: 6.2.2 resolution: "ws@npm:6.2.2" dependencies: From d1a27b24532d59890934a5a40b6c2dccea84c87a Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Fri, 2 Jun 2023 17:36:43 +1200 Subject: [PATCH 090/251] Update yarn.lock --- yarn.lock | 16125 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 11000 insertions(+), 5125 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7c7ecb0a15..6ed454a280 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,13 +5,6 @@ __metadata: version: 6 cacheKey: 8 -"@adobe/css-tools@npm:^4.0.1": - version: 4.2.0 - resolution: "@adobe/css-tools@npm:4.2.0" - checksum: dc5cc92ba3d562e7ffddb79d6d222c7e00b65f255fd2725b3d71490ff268844be322f917415d8c4ab39eca646343b632058db8bd5b1d646193fcc94d1d3e420b - languageName: node - linkType: hard - "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -34,29 +27,27 @@ __metadata: linkType: hard "@babel/cli@npm:^7.11.6": - version: 7.21.5 - resolution: "@babel/cli@npm:7.21.5" + version: 7.11.6 + resolution: "@babel/cli@npm:7.11.6" dependencies: - "@jridgewell/trace-mapping": ^0.3.17 - "@nicolo-ribaudo/chokidar-2": 2.1.8-no-fsevents.3 - chokidar: ^3.4.0 + chokidar: ^2.1.8 commander: ^4.0.1 convert-source-map: ^1.1.0 fs-readdir-recursive: ^1.1.0 - glob: ^7.2.0 + glob: ^7.0.0 + lodash: ^4.17.19 make-dir: ^2.1.0 slash: ^2.0.0 + source-map: ^0.5.0 peerDependencies: "@babel/core": ^7.0.0-0 dependenciesMeta: - "@nicolo-ribaudo/chokidar-2": - optional: true chokidar: optional: true bin: babel: ./bin/babel.js babel-external-helpers: ./bin/babel-external-helpers.js - checksum: 5d2e48e63b37120e44e9fd0bd74c3c5561f3cfaff8aab844227194708142f9b8210f86a129041787c199db58f6911bea9999e8469b4f46874baaf4ecc1725f47 + checksum: 634c05dc483943799c545e35d1942477f11f47e1d2459a0224b4291af4cd65170cc150d2146e10e4c23e38cde8947da65dbe42bc73d09810a2564ee406063ef9 languageName: node linkType: hard @@ -78,7 +69,25 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.5.5, @babel/code-frame@npm:^7.8.3": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.14.5, @babel/code-frame@npm:^7.5.5, @babel/code-frame@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/code-frame@npm:7.14.5" + dependencies: + "@babel/highlight": ^7.14.5 + checksum: 0adbe4f8d91586f764f524e57631f582ab988b2ef504391a5d89db29bfaaf7c67c237798ed4a249b6a2d7135852cf94d3d07ce6b9739dd1df1f271d5ed069565 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/code-frame@npm:7.18.6" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.21.4": version: 7.21.4 resolution: "@babel/code-frame@npm:7.21.4" dependencies: @@ -87,7 +96,21 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.5, @babel/compat-data@npm:^7.22.0, @babel/compat-data@npm:^7.22.3": +"@babel/compat-data@npm:^7.12.1, @babel/compat-data@npm:^7.13.11, @babel/compat-data@npm:^7.15.0": + version: 7.15.0 + resolution: "@babel/compat-data@npm:7.15.0" + checksum: 65088d87b14966dcdba397c799f312beb1e7a4dac178e7daa922a17ee9b65d8cfd9f35ff8352ccb6e20bb9a169df1171263ef5fd5967aa25d544ea3f62681993 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.18.8": + version: 7.18.8 + resolution: "@babel/compat-data@npm:7.18.8" + checksum: 3096aafad74936477ebdd039bcf342fba84eb3100e608f3360850fb63e1efa1c66037c4824f814d62f439ab47d25164439343a6e92e9b4357024fdf571505eb9 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.5, @babel/compat-data@npm:^7.22.0, @babel/compat-data@npm:^7.22.3": version: 7.22.3 resolution: "@babel/compat-data@npm:7.22.3" checksum: eb001646f41459f42ccb0d39ee8bb3c3c495bc297234817044c0002689c625e3159a6678c53fd31bd98cf21f31472b73506f350fc6906e3bdfa49cb706e2af8d @@ -142,7 +165,30 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.0.0, @babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.16.0, @babel/core@npm:^7.20.12, @babel/core@npm:^7.20.2, @babel/core@npm:^7.21.4, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.0, @babel/core@npm:^7.8.4": +"@babel/core@npm:^7.0.0, @babel/core@npm:^7.1.0, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.4": + version: 7.15.5 + resolution: "@babel/core@npm:7.15.5" + dependencies: + "@babel/code-frame": ^7.14.5 + "@babel/generator": ^7.15.4 + "@babel/helper-compilation-targets": ^7.15.4 + "@babel/helper-module-transforms": ^7.15.4 + "@babel/helpers": ^7.15.4 + "@babel/parser": ^7.15.5 + "@babel/template": ^7.15.4 + "@babel/traverse": ^7.15.4 + "@babel/types": ^7.15.4 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.1.2 + semver: ^6.3.0 + source-map: ^0.5.0 + checksum: 8121bf74040d98562b773c1e92a174cd53c99a5158ae5a9ef25645ed35d6f821c64155e394cdb04e7dc77a0871ba42a638f6703b2c44a75bc04564b21cad9e1b + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.12, @babel/core@npm:^7.20.2, @babel/core@npm:^7.21.4": version: 7.22.1 resolution: "@babel/core@npm:7.22.1" dependencies: @@ -188,7 +234,29 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.21.5, @babel/generator@npm:^7.22.0, @babel/generator@npm:^7.22.3, @babel/generator@npm:^7.5.0, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.15.4, @babel/generator@npm:^7.5.0, @babel/generator@npm:^7.7.2": + version: 7.15.4 + resolution: "@babel/generator@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + jsesc: ^2.5.1 + source-map: ^0.5.0 + checksum: fec8e8fa46723d7edf4087dc07b1f65a64488cba9662458431dd00d2a24f7c41b21e3160cfa1ba3df9373b2bb5e84189a95206c9ce6f14845a3929fc1ab58f57 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.18.7": + version: 7.18.7 + resolution: "@babel/generator@npm:7.18.7" + dependencies: + "@babel/types": ^7.18.7 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: aad4b6873130165e9483af2888bce5a3a5ad9cca0757fc90ae11a0396757d0b295a3bff49282c8df8ab01b31972cc855ae88fd9ddc9ab00d9427dc0e01caeea9 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.21.5, @babel/generator@npm:^7.22.0, @babel/generator@npm:^7.22.3": version: 7.22.3 resolution: "@babel/generator@npm:7.22.3" dependencies: @@ -212,6 +280,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.0.0, @babel/helper-annotate-as-pure@npm:^7.14.5, @babel/helper-annotate-as-pure@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-annotate-as-pure@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: 94e3b5714748cc4fe419c3e75656b1747f7e985d46a178dbd87e4a97f8f4d0ba94374c6768516cdc9c744d40202f1c2bb7930a7a153274c3d42edb196e945404 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -221,6 +298,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.14.5": + version: 7.15.4 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.15.4" + dependencies: + "@babel/helper-explode-assignable-expression": ^7.15.4 + "@babel/types": ^7.15.4 + checksum: 0753698e94ae5852e19c4865c3265061643f3ba617360eddf913c4d15b18400e9c47a8a6abed08a83d8b65301394f21d43e21702a79bf90d3f2e566f027cb745 + languageName: node + linkType: hard + "@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6": version: 7.22.3 resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.3" @@ -230,7 +317,35 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.5, @babel/helper-compilation-targets@npm:^7.22.1": +"@babel/helper-compilation-targets@npm:^7.12.1, @babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-compilation-targets@npm:7.15.4" + dependencies: + "@babel/compat-data": ^7.15.0 + "@babel/helper-validator-option": ^7.14.5 + browserslist: ^4.16.6 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a2b9767d5658da90bd79170b4b0d2987930fb6708d48428619f9f4664c47e3f9409801b76c7603446404b453c67e54682cc86840cb1c29aa06c956533ebaf5ba + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.17.7": + version: 7.18.9 + resolution: "@babel/helper-compilation-targets@npm:7.18.9" + dependencies: + "@babel/compat-data": ^7.18.8 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.20.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2a9d71e124e098a9f45de4527ddd1982349d231827d341e00da9dfb967e260ecc7662c8b62abee4a010fb34d5f07a8d2155c974e0bc1928144cee5644910621d + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.5, @babel/helper-compilation-targets@npm:^7.22.1": version: 7.22.1 resolution: "@babel/helper-compilation-targets@npm:7.22.1" dependencies: @@ -245,7 +360,40 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.22.1": +"@babel/helper-create-class-features-plugin@npm:^7.12.1, @babel/helper-create-class-features-plugin@npm:^7.14.5, @babel/helper-create-class-features-plugin@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-create-class-features-plugin@npm:7.15.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.15.4 + "@babel/helper-function-name": ^7.15.4 + "@babel/helper-member-expression-to-functions": ^7.15.4 + "@babel/helper-optimise-call-expression": ^7.15.4 + "@babel/helper-replace-supers": ^7.15.4 + "@babel/helper-split-export-declaration": ^7.15.4 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 42fa8550125cd26ec5ff62f8d5383924b896a35326a31acced93a166661d1a1446199e5d2c8dc3685d70482127dc57cc6c22c5ffccadb58e72bfedf906fba817 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-create-class-features-plugin@npm:7.18.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.6 + "@babel/helper-function-name": ^7.18.6 + "@babel/helper-member-expression-to-functions": ^7.18.6 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-replace-supers": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 4d6da441ce329867338825c044c143f0b273cbfc6a20b9099e824a46f916584f44eabab073f78f02047d86719913e8f1a8bd72f42099ebe52691c29fabb992e4 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.22.1": version: 7.22.1 resolution: "@babel/helper-create-class-features-plugin@npm:7.22.1" dependencies: @@ -264,6 +412,18 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.14.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.14.5 + regexpu-core: ^4.7.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c2636d0a6ea6d57eb3603ba9b223fd6ec273a3d8171eb8d84a357ff028cd747ab383b1d7cef84a4df5f9aebb321d43599895f562f3c8aa96314d4847aa59710e + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.1": version: 7.22.1 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.1" @@ -295,6 +455,40 @@ __metadata: languageName: node linkType: hard +"@babel/helper-define-polyfill-provider@npm:^0.2.2": + version: 0.2.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.2.3" + 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 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + semver: ^6.1.2 + peerDependencies: + "@babel/core": ^7.4.0-0 + checksum: 797699fe870e45bdbc7c4128963427f7d6240609b700b3f2c0a2f2f187e5f848ba704bcfe58d7d91796cabc5001fae01746b3efda113beb5b5b824927cf59fdb + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.3.2": + version: 0.3.2 + resolution: "@babel/helper-define-polyfill-provider@npm:0.3.2" + dependencies: + "@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 + peerDependencies: + "@babel/core": ^7.4.0-0 + checksum: 8f693ab8e9d73873c2e547c7764c7d32d73c14f8dcefdd67fd3a038eb75527e2222aa53412ea673b9bfc01c32a8779a60e77a7381bbdd83452f05c9b7ef69c2c + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.3.3": version: 0.3.3 resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" @@ -327,6 +521,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-environment-visitor@npm:7.18.6" + checksum: 64fce65a26efb50d2496061ab2de669dc4c42175a8e05c82279497127e5c542538ed22b38194f6f5a4e86bed6ef5a4890aed23408480db0555728b4ca660fc9c + languageName: node + linkType: hard + "@babel/helper-environment-visitor@npm:^7.18.9, @babel/helper-environment-visitor@npm:^7.21.5, @babel/helper-environment-visitor@npm:^7.22.1": version: 7.22.1 resolution: "@babel/helper-environment-visitor@npm:7.22.1" @@ -334,6 +535,36 @@ __metadata: languageName: node linkType: hard +"@babel/helper-explode-assignable-expression@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-explode-assignable-expression@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: a302fa05ba3eec575044711b9050c1e4db9b6409e59f30b7ae6733bd9bab9ccb81ffaee01276e98c334f4dc0084c4071c6749f8195d0f2555054b55d7320360a + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.14.5, @babel/helper-function-name@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-function-name@npm:7.15.4" + dependencies: + "@babel/helper-get-function-arity": ^7.15.4 + "@babel/template": ^7.15.4 + "@babel/types": ^7.15.4 + checksum: 0500e8e40753fdc25252b30609b12df8ebb997a4e5b4c2145774855c026a4338c0510fc7b819035d5f9d76cf3bd63417c0b7b58f0836a10996300f2f925c4e0f + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-function-name@npm:7.18.6" + dependencies: + "@babel/template": ^7.18.6 + "@babel/types": ^7.18.6 + checksum: bf84c2e0699aa07c3559d4262d199d4a9d0320037c2932efe3246866c3e01ce042c9c2131b5db32ba2409a9af01fb468171052819af759babc8ca93bdc6c9aeb + languageName: node + linkType: hard + "@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.21.0": version: 7.21.0 resolution: "@babel/helper-function-name@npm:7.21.0" @@ -344,6 +575,24 @@ __metadata: languageName: node linkType: hard +"@babel/helper-get-function-arity@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-get-function-arity@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: 1a3dba8700ec69b5b120401769897a1a0ca2edcf6b546659d49946dcc8b0755c4c58dd8f15739f5cf851d4ca1db76f56759897c6f5b9f76f2fef989dc4f8fd54 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-hoist-variables@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: 1a9ae0a27112b5f4e4ab91da2a1b40a8f91d8ce195e965d900ec3f13b583a1ab36834fb3edc2812523fa1d586ce21c3e6d8ce437d168e23a5d8e7e2e46b50f6f + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-hoist-variables@npm:7.18.6" @@ -353,6 +602,24 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-member-expression-to-functions@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: 30cf27e2afbaf1d58d189c5f36951a6af7d2bfccdfdb7d57e91749620d9c3c37d78324a1725079d3ab4a0e5c4e5f3d5f19a275d5dd269baa2aa8852835b05d6d + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-member-expression-to-functions@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: 20c8e82d2375534dfe4d4adeb01d94906e5e616143bb2775e9f1d858039d87a0f79220e0a5c2ed410c54ccdeda47a4c09609b396db1f98fe8ce9e420894ac2f3 + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.22.0": version: 7.22.3 resolution: "@babel/helper-member-expression-to-functions@npm:7.22.3" @@ -362,7 +629,25 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.21.4": +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.1, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.14.5, @babel/helper-module-imports@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-module-imports@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: 519681cb9c27fcacd85ef13534020db3a2bac1d53a4d988fd9f3cf1ec223854311d4193c961cc2031c4d1df3b1a35a849b38237302752ae3d29eb00e5b9a904a + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-module-imports@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.21.4": version: 7.21.4 resolution: "@babel/helper-module-imports@npm:7.21.4" dependencies: @@ -371,7 +656,23 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11, @babel/helper-module-transforms@npm:^7.21.5, @babel/helper-module-transforms@npm:^7.22.1": +"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.14.5, @babel/helper-module-transforms@npm:^7.15.4": + version: 7.15.7 + resolution: "@babel/helper-module-transforms@npm:7.15.7" + dependencies: + "@babel/helper-module-imports": ^7.15.4 + "@babel/helper-replace-supers": ^7.15.4 + "@babel/helper-simple-access": ^7.15.4 + "@babel/helper-split-export-declaration": ^7.15.4 + "@babel/helper-validator-identifier": ^7.15.7 + "@babel/template": ^7.15.4 + "@babel/traverse": ^7.15.4 + "@babel/types": ^7.15.6 + checksum: 7e09aa7c3cfff4d715891af13a09626962aadb822501fbb587218abe35d82174255f5aa79b67e40b75c1d374a6b5976e6836237ece69c651c7e11e604783a5c9 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11, @babel/helper-module-transforms@npm:^7.21.5, @babel/helper-module-transforms@npm:^7.22.1": version: 7.22.1 resolution: "@babel/helper-module-transforms@npm:7.22.1" dependencies: @@ -387,6 +688,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-optimise-call-expression@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: 7c929d1a3dbed7ee776dd8a4502b92433bb14ce6217372581db117de294edcf7b8678b1f703b8309c769bb46f2e4f005cdb3958dec508a486b2b03a9a919b542 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" @@ -403,13 +713,45 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.21.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.1, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/helper-plugin-utils@npm:7.14.5" + checksum: fe20e90a24d02770a60ebe80ab9f0dfd7258503cea8006c71709ac9af1aa3e47b0de569499673f11ea6c99597f8c0e4880ae1d505986e61101b69716820972fe + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-plugin-utils@npm:7.18.9" + checksum: ebae876cd60f1fe238c7210986093845fa5c4cad5feeda843ea4d780bf068256717650376d3af2a5e760f2ed6a35c065ae144f99c47da3e54aa6cba99d8804e0 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-plugin-utils@npm:7.18.6" + checksum: 3dbfceb6c10fdf6c78a0e57f24e991ff8967b8a0bd45fe0314fb4a8ccf7c8ad4c3778c319a32286e7b1f63d507173df56b4e69fb31b71e1b447a73efa1ca723e + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.21.5": version: 7.21.5 resolution: "@babel/helper-plugin-utils@npm:7.21.5" checksum: 6f086e9a84a50ea7df0d5639c8f9f68505af510ea3258b3c8ac8b175efdfb7f664436cb48996f71791a1350ba68f47ad3424131e8e718c5e2ad45564484cbb36 languageName: node linkType: hard +"@babel/helper-remap-async-to-generator@npm:^7.14.5, @babel/helper-remap-async-to-generator@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-remap-async-to-generator@npm:7.15.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.15.4 + "@babel/helper-wrap-function": ^7.15.4 + "@babel/types": ^7.15.4 + checksum: 80918caa96fcb679a89887f7997fd1428d77810e3fa11de0c7475594a09c7b96adee872b84202f8301ee707dec43575c6d92799f07959d595d2da1940388d8aa + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" @@ -424,7 +766,32 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.20.7, @babel/helper-replace-supers@npm:^7.22.1": +"@babel/helper-replace-supers@npm:^7.14.5, @babel/helper-replace-supers@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-replace-supers@npm:7.15.4" + dependencies: + "@babel/helper-member-expression-to-functions": ^7.15.4 + "@babel/helper-optimise-call-expression": ^7.15.4 + "@babel/traverse": ^7.15.4 + "@babel/types": ^7.15.4 + checksum: b08a23914a5f7f964aefa4518255006d3a58e4c0cf972527c1fe3c79ebff4d6d50c9f1d370b8d62e0085766a654910e39ba196fab522d794142d2219eea8430d + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-replace-supers@npm:7.18.6" + dependencies: + "@babel/helper-environment-visitor": ^7.18.6 + "@babel/helper-member-expression-to-functions": ^7.18.6 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/traverse": ^7.18.6 + "@babel/types": ^7.18.6 + checksum: 48e869dc8d3569136d239cd6354687e49c3225b114cb2141ed3a5f31cff5278f463eb25913df3345489061f377ad5d6e49778bddedd098fa8ee3adcec07cc1d3 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.20.7, @babel/helper-replace-supers@npm:^7.22.1": version: 7.22.1 resolution: "@babel/helper-replace-supers@npm:7.22.1" dependencies: @@ -438,6 +805,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-simple-access@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: 8c3462264d6755c1e190a709fa90667c1691cb61cdca2d3f9119dd93adfd9fbcb292bcc48dbd7e065b8c27d9371f2793799a92aec124a3260288ed112e00c839 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.21.5": version: 7.21.5 resolution: "@babel/helper-simple-access@npm:7.21.5" @@ -447,6 +823,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.12.1, @babel/helper-skip-transparent-expression-wrappers@npm:^7.14.5, @babel/helper-skip-transparent-expression-wrappers@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: ebec4ea6fc93fd39e610f7b274cb63e420fffee1cbe5002e41bdf9d39ce6121d541163124730fb22b242d0f58d3be447b339ec6b323feeda687a978cafabfeaa + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": version: 7.20.0 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" @@ -456,6 +841,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-split-export-declaration@npm:7.15.4" + dependencies: + "@babel/types": ^7.15.4 + checksum: 6baf45996e1323fdfc30666e9c0b3219d74c54dc71e9130acfa4d9d4c53faa95618ac383a1c82a156555908323384a416b4a29e88b337de98fdb476212134f99 + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-split-export-declaration@npm:7.18.6" @@ -472,13 +866,41 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": +"@babel/helper-validator-identifier@npm:^7.14.5, @babel/helper-validator-identifier@npm:^7.14.9, @babel/helper-validator-identifier@npm:^7.15.7": + version: 7.15.7 + resolution: "@babel/helper-validator-identifier@npm:7.15.7" + checksum: f041c28c531d1add5cc345b25d5df3c29c62bce3205b4d4a93dcd164ccf630350acba252d374fad8f5d8ea526995a215829f27183ba7ce7ce141843bf23068a6 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-identifier@npm:7.18.6" + checksum: e295254d616bbe26e48c196a198476ab4d42a73b90478c9842536cf910ead887f5af6b5c4df544d3052a25ccb3614866fa808dc1e3a5a4291acd444e243c0648 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.19.1": version: 7.19.1 resolution: "@babel/helper-validator-identifier@npm:7.19.1" checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.12.1, @babel/helper-validator-option@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/helper-validator-option@npm:7.14.5" + checksum: 1b25c34a5cb3d8602280f33b9ab687d2a77895e3616458d0f70ddc450ada9b05e342c44f322bc741d51b252e84cff6ec44ae93d622a3354828579a643556b523 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-option@npm:7.18.6" + checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.21.0": version: 7.21.0 resolution: "@babel/helper-validator-option@npm:7.21.0" @@ -486,6 +908,18 @@ __metadata: languageName: node linkType: hard +"@babel/helper-wrap-function@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helper-wrap-function@npm:7.15.4" + dependencies: + "@babel/helper-function-name": ^7.15.4 + "@babel/template": ^7.15.4 + "@babel/traverse": ^7.15.4 + "@babel/types": ^7.15.4 + checksum: 66422c8abd69ac3b9be44de62fe9e460ae8faa2b692757eeed920523633a1921b29af8867eb5f0832b1f029c489cf01c703ae51fa2dc078ea636abcc52e092bc + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.18.9": version: 7.20.5 resolution: "@babel/helper-wrap-function@npm:7.20.5" @@ -498,7 +932,18 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.21.5, @babel/helpers@npm:^7.22.0": +"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/helpers@npm:7.15.4" + dependencies: + "@babel/template": ^7.15.4 + "@babel/traverse": ^7.15.4 + "@babel/types": ^7.15.4 + checksum: e60738110086c183d0ce369ad56949d5dceeb7d73d8fdb892f36d5b8525192e6b97f4563eb77334f47ac27ac43a21f3c4cd53bff342c2a0d5f4008a2b0169c89 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.21.5, @babel/helpers@npm:^7.22.0": version: 7.22.3 resolution: "@babel/helpers@npm:7.22.3" dependencies: @@ -509,7 +954,18 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.18.6": +"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/highlight@npm:7.14.5" + dependencies: + "@babel/helper-validator-identifier": ^7.14.5 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: 4e4b22fb886c939551d73307de16232c186fdb4d8ec8f514541b058feaecdba5234788a0740ca5bcd28777f4108596c39ac4b7463684c63b3812f6071e3fb88f + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" dependencies: @@ -521,33 +977,33 @@ __metadata: linkType: hard "@babel/node@npm:^7.10.5": - version: 7.22.1 - resolution: "@babel/node@npm:7.22.1" + version: 7.15.4 + resolution: "@babel/node@npm:7.15.4" dependencies: - "@babel/register": ^7.21.0 + "@babel/register": ^7.15.3 commander: ^4.0.1 - core-js: ^3.30.2 + core-js: ^3.16.0 node-environment-flags: ^1.0.5 - regenerator-runtime: ^0.13.11 + regenerator-runtime: ^0.13.4 v8flags: ^3.1.1 peerDependencies: "@babel/core": ^7.0.0-0 bin: babel-node: ./bin/babel-node.js - checksum: 1ef4b8be7de320fe0838451eca55508bd55830eb9b9d422e24cbccb85d7ab12224cf136211ef515217bfd94f416358980305a7660075982c5a39758edd3fd588 + checksum: 9867ff7023ee5d1821ed2d362b497253fd52f68856fb207997d29ebdee3605eafc55415fe5b6a5d50e3edc5b79a365628acd102b22d58211e012cb60f605395c languageName: node linkType: hard -"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.9, @babel/parser@npm:^7.22.0, @babel/parser@npm:^7.7.0": - version: 7.22.3 - resolution: "@babel/parser@npm:7.22.3" +"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.15.4, @babel/parser@npm:^7.15.5, @babel/parser@npm:^7.7.0, @babel/parser@npm:^7.7.2": + version: 7.15.7 + resolution: "@babel/parser@npm:7.15.7" bin: parser: ./bin/babel-parser.js - checksum: 016f2960212fd86817e15d90b9b3450d2b51af189b1c17a20ade5735d9ec69e76e29def317e09188ecd5fa6eab4f9ab72d88b8b829c1b2994400a6a2c2dc1958 + checksum: bd828b933118354ecae482240e100205738b9d8bff06cf615493c470cad09198d8c024f3e28053f38f875f90d566a5994c19a4c0329bb0c126a994cb031e90e1 languageName: node linkType: hard -"@babel/parser@npm:^7.13.16, @babel/parser@npm:^7.21.5, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.22.4": +"@babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.21.5, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.21.9, @babel/parser@npm:^7.22.0, @babel/parser@npm:^7.22.4": version: 7.22.4 resolution: "@babel/parser@npm:7.22.4" bin: @@ -556,6 +1012,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.18.6, @babel/parser@npm:^7.18.8": + version: 7.18.8 + resolution: "@babel/parser@npm:7.18.8" + bin: + parser: ./bin/babel-parser.js + checksum: b8426083f753a000bdb4929cb18c6ce5b68c23759245bf123515bf86cacb9f6e7ff61341a6e0d01a779a9a8a826c86062a0f4db424b88b5b51f67e121985d400 + languageName: node + linkType: hard + "@babel/parser@npm:~7.21.2": version: 7.21.9 resolution: "@babel/parser@npm:7.21.9" @@ -576,7 +1041,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.0, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.3": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.15.4" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.15.4 + "@babel/plugin-proposal-optional-chaining": ^7.14.5 + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 6c4f264951a51b22ae52e97ed8ba272c1b7a068a0b4a3472c24998a9ce0c3174c3157457a7c886664cc5c77f7693b779d07b1def2545a6cfdf66ee5ff2064423 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.3" dependencies: @@ -590,13 +1068,26 @@ __metadata: linkType: hard "@babel/plugin-external-helpers@npm:^7.0.0": - version: 7.18.6 - resolution: "@babel/plugin-external-helpers@npm:7.18.6" + version: 7.14.5 + resolution: "@babel/plugin-external-helpers@npm:7.14.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: aaf681b6339d7ab3c82c157f3e9c7e9404a5e2120dca35b1ceff5a8bb1a9a3d5646af9a53ed4440ba376e2a25db5bfae2b65d0f458ada9ae8ed11450a5329c6a + checksum: 194e76c8563a32fe4ace53ba49448f6774ddbf18743098b37b942b797d11c7f819182133cdff0e2a7764956d0d4d9e6c421a88bf836a3f92a9fb852af402ffe1 + languageName: node + linkType: hard + +"@babel/plugin-proposal-async-generator-functions@npm:^7.12.1, @babel/plugin-proposal-async-generator-functions@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.15.4" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-remap-async-to-generator": ^7.15.4 + "@babel/plugin-syntax-async-generators": ^7.8.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 23fdc2b4fe7482ee4d4de31da5433d660cd7251a417d3a99826f69d8684db2225b640afc16b4014a55ee737eb0e966357f4063ad0128893c6f54e24ffe0318bd languageName: node linkType: hard @@ -614,7 +1105,31 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.12.1, @babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.16.0, @babel/plugin-proposal-class-properties@npm:^7.18.6": +"@babel/plugin-proposal-class-properties@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-proposal-class-properties@npm:7.12.1" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.12.1 + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 55b5e6cd83d2c710c10edee514de5552464d720fd07c961be99820c7036db0c493745806d10ab037f9e06cd4fa1fe6a68640bc8fb846a1fd5318ea97870bb10a + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.12.1, @babel/plugin-proposal-class-properties@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-class-properties@npm:7.14.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fe2aa0a44f8ea121e10c856d6fb4fca418dc42451258ef6ed29321ca740080fba420ebd3d6700d0456c34c2ab2044f9ce4308498321f52a93184ff5adb015aae + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" dependencies: @@ -626,6 +1141,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-class-static-block@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/plugin-proposal-class-static-block@npm:7.15.4" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.15.4 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 2c77531cf6637fbebed18cc0485651737a875c507c7ebfc35c702bde9aeac303708c825bcd7c9882ae5c007ab1c44fbea322ac3b26ef3774d89f4e5d494da0fb + languageName: node + linkType: hard + "@babel/plugin-proposal-class-static-block@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-proposal-class-static-block@npm:7.21.0" @@ -639,18 +1167,41 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-decorators@npm:^7.12.12, @babel/plugin-proposal-decorators@npm:^7.16.4": - version: 7.22.3 - resolution: "@babel/plugin-proposal-decorators@npm:7.22.3" +"@babel/plugin-proposal-decorators@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-proposal-decorators@npm:7.12.1" dependencies: - "@babel/helper-create-class-features-plugin": ^7.22.1 - "@babel/helper-plugin-utils": ^7.21.5 - "@babel/helper-replace-supers": ^7.22.1 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/plugin-syntax-decorators": ^7.22.3 + "@babel/helper-create-class-features-plugin": ^7.12.1 + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-syntax-decorators": ^7.12.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8ff81b841a592a6790fc35a5d7a5f48ec975feb672000e7905ef016a7c87ede1fb3d7380f6562582f51b1227bbd3a07f5ad3a7ae3f3ad83bb243c3086f7a28f9 + languageName: node + linkType: hard + +"@babel/plugin-proposal-decorators@npm:^7.12.12": + version: 7.15.4 + resolution: "@babel/plugin-proposal-decorators@npm:7.15.4" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.15.4 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-decorators": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 02d966e11bf9b4a6984940cc77319f901e21574bca542a294d384ef8b05a6571b2b60c6ac5aa4e97beeec95e3ec6b440c8fc04d1e37996bb1fd366cfe672c0db + languageName: node + linkType: hard + +"@babel/plugin-proposal-dynamic-import@npm:^7.12.1, @babel/plugin-proposal-dynamic-import@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-dynamic-import@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e68d9311924095d6e35a8ed52dfaa06ec8a24bbfa2ca2a241a9ef31a543b014eaf32e6434b737cf87368ffc3051d80091d8640554f99f34211caaa7e90985ea9 + checksum: 47be4b5f8824f8690b47d99a34d52de0e6c19d0b99f26c1f9a2e4cc49e05082bcef7248c610bb3830ae84cec928713c7774f4929fca4fa72df570df7a76a9d2b languageName: node linkType: hard @@ -667,14 +1218,26 @@ __metadata: linkType: hard "@babel/plugin-proposal-export-default-from@npm:^7.0.0, @babel/plugin-proposal-export-default-from@npm:^7.12.1": - version: 7.18.10 - resolution: "@babel/plugin-proposal-export-default-from@npm:7.18.10" + version: 7.14.5 + resolution: "@babel/plugin-proposal-export-default-from@npm:7.14.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/plugin-syntax-export-default-from": ^7.18.6 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-export-default-from": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2a12387e095ccd02a1560e5dd40812a83befe581d319685ae2a95f0650a4500381c1d9c710e6e29b34a1b053f9632ee2d3827b937e1cc5c9d2555280da22df53 + checksum: 706f22a67bb45f3c7d998b5c0dba4c7263dec747427c2a086460475c10c45b61204c9252ff4ca1300be076d1fafca593d6ee53744f478d2f67447133abd8b92f + languageName: node + linkType: hard + +"@babel/plugin-proposal-export-namespace-from@npm:^7.12.1, @babel/plugin-proposal-export-namespace-from@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b3f4e0cc196f7ad9132816bb350124e8932bc047ab946e431f85bae9649b0de384c54261a60c050a2b8220703408fc089f90349ad008ed69a70944a6f3048d0e languageName: node linkType: hard @@ -690,6 +1253,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-json-strings@npm:^7.12.1, @babel/plugin-proposal-json-strings@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-json-strings@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-json-strings": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 51dafe70237860569c9c27dc6a0db83e149bf7babb0fcafa9dbcd55a960b443f7b5bb695956c6e116e46b3dbd2a6777ead62bcad843aff8c1916c1be56e2f504 + languageName: node + linkType: hard + "@babel/plugin-proposal-json-strings@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-json-strings@npm:7.18.6" @@ -702,6 +1277,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-logical-assignment-operators@npm:^7.12.1, @babel/plugin-proposal-logical-assignment-operators@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 08b6dbc991c4824b0d8bfabf46c8254fce02d2df04627b8849cf15a4b6de75629c10c7c83d1e6834cdcebfc98b16264ce2dd32aa9c0fae900ed2af807d5ac42b + languageName: node + linkType: hard + "@babel/plugin-proposal-logical-assignment-operators@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.20.7" @@ -714,7 +1301,31 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.0.0, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.12.1, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.14.5, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.12.1" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 88da9cea3e3e83bd87047e13f0b6a51139d559cf59d178d496c52586d34631078f822e7d6dbcebf67ac0016d875fe58b1d0cfe19bd24b156065e48f84e7a2731 + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.0.0, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.12.1, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 033d9483c2feb74928fbb83a73948eb1179c8852d2ae507fbfc37752d2dbf702c9ad0daaf1eaa029f81b12b7e2470061b4f611db88b7293f0e9a71eba288a430 + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" dependencies: @@ -726,7 +1337,31 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-numeric-separator@npm:^7.16.0, @babel/plugin-proposal-numeric-separator@npm:^7.18.6": +"@babel/plugin-proposal-numeric-separator@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-proposal-numeric-separator@npm:7.12.1" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d5547b815a80e180ed3c10236ebebd86c432eff0827f83decf081c431dbb36e003cabd2d637090448dfbd21439519c9f75bc3f6c66ec5971d0873dfcef6adfa3 + languageName: node + linkType: hard + +"@babel/plugin-proposal-numeric-separator@npm:^7.12.1, @babel/plugin-proposal-numeric-separator@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-numeric-separator@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 22093297ec9aed3938b39f4efa1b518252fe7b0835902c3066f0ae6a864ac253b986a4a21a6092aa068d0702d7b09bed74e56cf39f2da8b4f3f43e0747bffb62 + languageName: node + linkType: hard + +"@babel/plugin-proposal-numeric-separator@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" dependencies: @@ -751,7 +1386,22 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.12.1, @babel/plugin-proposal-object-rest-spread@npm:^7.20.7": +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.12.1, @babel/plugin-proposal-object-rest-spread@npm:^7.15.6": + version: 7.15.6 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.15.6" + dependencies: + "@babel/compat-data": ^7.15.0 + "@babel/helper-compilation-targets": ^7.15.4 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.15.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fef884b9e2e235c449f317b4fb0f90c23bdfbfec160c3ed105a3bbf2a85a6e449883953f8229ba132ad65090ff38094fca8475225ad462d1bd87f1392f3f60ed + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" dependencies: @@ -766,7 +1416,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-catch-binding@npm:^7.0.0, @babel/plugin-proposal-optional-catch-binding@npm:^7.18.6": +"@babel/plugin-proposal-optional-catch-binding@npm:^7.0.0, @babel/plugin-proposal-optional-catch-binding@npm:^7.12.1, @babel/plugin-proposal-optional-catch-binding@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f9c1b2b34fef1bde85feeb0b438131f526056161e10b6fb91c74a5828ad39d2a20521b5c3cefc7367a7e5fc792b7c7e607bf278d7999b5d89824c34af3174eae + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-catch-binding@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" dependencies: @@ -778,7 +1440,33 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.0.0, @babel/plugin-proposal-optional-chaining@npm:^7.12.7, @babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.16.0, @babel/plugin-proposal-optional-chaining@npm:^7.21.0": +"@babel/plugin-proposal-optional-chaining@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.12.1" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/helper-skip-transparent-expression-wrappers": ^7.12.1 + "@babel/plugin-syntax-optional-chaining": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2e66cdffd0acf1427b3239c6584258fd83ca9c57ca63bedefad902240600f0f9b470ced85b6cb6cb12971039882c96ff3d2b66617b8078969f5146b59f9e585e + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.0.0, @babel/plugin-proposal-optional-chaining@npm:^7.12.1, @babel/plugin-proposal-optional-chaining@npm:^7.12.7, @babel/plugin-proposal-optional-chaining@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.14.5 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9e39e20d162bea2241b4c24ea8a339f872a04954a5155c606bf2437edaa1a15b8a517daee4b2b09cfd42d826b93c57f080aa9fbb13c60a8f3a7a72963badf2df + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" dependencies: @@ -791,7 +1479,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-methods@npm:^7.12.1, @babel/plugin-proposal-private-methods@npm:^7.16.0, @babel/plugin-proposal-private-methods@npm:^7.18.6": +"@babel/plugin-proposal-private-methods@npm:^7.12.1, @babel/plugin-proposal-private-methods@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-proposal-private-methods@npm:7.14.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: badacc1d68c8cf92a7ba973e3c283bc3aebf586a6573b6d18a96461ce18039d4cdc0135edac1b810df8d92cfca628115d98a0ad83ed8f15bf15eaff21539bf32 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-methods@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6" dependencies: @@ -803,7 +1503,35 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-property-in-object@npm:^7.12.1, @babel/plugin-proposal-private-property-in-object@npm:^7.16.0, @babel/plugin-proposal-private-property-in-object@npm:^7.21.0": +"@babel/plugin-proposal-private-property-in-object@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.15.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.15.4 + "@babel/helper-create-class-features-plugin": ^7.15.4 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 39a0ab24dcc3464997dbac785ad4f69eac26496c6848000f4886da47a18547e635a34b0ca6fd943674f280d4b146d20b7baeb31e05276af8f508f884198dcea9 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:^7.16.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.18.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c8e56a972930730345f39f2384916fd8e711b3f4b4eae2ca9740e99958980118120d5cc9b6ac150f0965a5a35f825910e2c3013d90be3e9993ab6111df444569 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0" dependencies: @@ -817,7 +1545,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@npm:^7.12.1, @babel/plugin-proposal-unicode-property-regex@npm:^7.14.5, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": + version: 7.14.5 + resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.14.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 58bd3277a972a33d101d29ab4f52e964b6e8ec218eb84f764b4ea67bf8ed362909760812d3f7451ee5e54dc273bd81bc5a00cd2c13e8fb64a47ec117cb69d51b + languageName: node + linkType: hard + +"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" dependencies: @@ -829,7 +1569,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-async-generators@npm:^7.8.4": +"@babel/plugin-syntax-async-generators@npm:^7.8.0, @babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" dependencies: @@ -851,7 +1591,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.1, @babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -873,18 +1613,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-decorators@npm:^7.22.3": - version: 7.22.3 - resolution: "@babel/plugin-syntax-decorators@npm:7.22.3" +"@babel/plugin-syntax-decorators@npm:^7.12.1, @babel/plugin-syntax-decorators@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-decorators@npm:7.14.5" dependencies: - "@babel/helper-plugin-utils": ^7.21.5 + "@babel/helper-plugin-utils": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1886778ae5284202329e60f5be3322307dc77d0764a75e23f8fc222bc05409f4153035eb817cabd40265cc1c20eb201ca539c8cd2e883b312024dbb6480cdd95 + checksum: 7e725deeba3848e8e1b57bc8a74c1a852aa253b9ffd293aa0bc043b93e1e7b669414caae3d20c653d2fab907a9388e526f2138e3783b22e49272098566cf9734 languageName: node linkType: hard -"@babel/plugin-syntax-dynamic-import@npm:^7.0.0, @babel/plugin-syntax-dynamic-import@npm:^7.8.3": +"@babel/plugin-syntax-dynamic-import@npm:^7.0.0, @babel/plugin-syntax-dynamic-import@npm:^7.8.0, @babel/plugin-syntax-dynamic-import@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" dependencies: @@ -895,14 +1635,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-export-default-from@npm:^7.0.0, @babel/plugin-syntax-export-default-from@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-export-default-from@npm:7.18.6" +"@babel/plugin-syntax-export-default-from@npm:^7.0.0, @babel/plugin-syntax-export-default-from@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-export-default-from@npm:7.14.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4258156553d825abb2ebac920eae6837087b485eb8e0011e05ad1e57004a03441335325feb18185ffbfa0c33a340673e7ab79549080ff2beb4607f88936fedf2 + checksum: c480fad64ac4fd1d7c6f54250999adb7600263491d15be28998bc7d2aea4cae12966e905d80d69f9d98b170ee28d164a7529025f250e2a285d97dff9d421fe48 languageName: node linkType: hard @@ -917,7 +1657,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.18.6, @babel/plugin-syntax-flow@npm:^7.2.0": +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.12.1, @babel/plugin-syntax-flow@npm:^7.14.5, @babel/plugin-syntax-flow@npm:^7.2.0": + version: 7.14.5 + resolution: "@babel/plugin-syntax-flow@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ba6c81325930283bed75c59f92bd7f5873beb006e35fdb092f62498d1f1ecb90f3eaa3d586400ad48dd6d03c63d2bf59a72998e431bab2bd20b3137bd2b10ac0 + languageName: node + linkType: hard + +"@babel/plugin-syntax-flow@npm:^7.18.6": version: 7.21.4 resolution: "@babel/plugin-syntax-flow@npm:7.21.4" dependencies: @@ -939,7 +1690,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.22.0, @babel/plugin-syntax-import-attributes@npm:^7.22.3": +"@babel/plugin-syntax-import-attributes@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.3" dependencies: @@ -961,7 +1712,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-json-strings@npm:^7.8.3": +"@babel/plugin-syntax-json-strings@npm:^7.8.0, @babel/plugin-syntax-json-strings@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" dependencies: @@ -983,7 +1734,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.21.4": +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a2ba87534b0f9ee70eba0754d2ae544825c25afd98efb8e42b41399e02de4cc5b1f70fc5ce444fb7a7e5b09972c289eed2f00917be5b88d67407f4cbde8e960 + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.21.4": version: 7.21.4 resolution: "@babel/plugin-syntax-jsx@npm:7.21.4" dependencies: @@ -1005,7 +1767,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.0.0, @babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.0.0, @babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.0, @babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" dependencies: @@ -1038,7 +1800,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.0, @babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" dependencies: @@ -1049,7 +1811,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-optional-chaining@npm:^7.0.0, @babel/plugin-syntax-optional-chaining@npm:^7.8.3": +"@babel/plugin-syntax-optional-chaining@npm:^7.0.0, @babel/plugin-syntax-optional-chaining@npm:^7.8.0, @babel/plugin-syntax-optional-chaining@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" dependencies: @@ -1071,7 +1833,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.12.1, @babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -1082,7 +1844,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.21.4, @babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.14.5, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.14.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5447d13b31aeeeaa5c2b945e60a598642dedca480f11d3232b0927aeb6a6bb8201a0025f509bc23851da4bf126f69b0522790edbd58f4560f0a4984cabd0d126 + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.21.4": version: 7.21.4 resolution: "@babel/plugin-syntax-typescript@npm:7.21.4" dependencies: @@ -1105,7 +1878,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.12.1, @babel/plugin-transform-arrow-functions@npm:^7.21.5": +"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.12.1, @babel/plugin-transform-arrow-functions@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 126196ea0107e97f711c0d48d8d1e01a30f5a5e127628f7367658b4c5832182c4e28914294408374690c5bfbb4ad4fe6560068d8bf370cafe8d4fe23599aaa95 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.21.5": version: 7.21.5 resolution: "@babel/plugin-transform-arrow-functions@npm:7.21.5" dependencies: @@ -1116,7 +1900,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.22.0, @babel/plugin-transform-async-generator-functions@npm:^7.22.3": +"@babel/plugin-transform-async-generator-functions@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.3" dependencies: @@ -1130,6 +1914,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-to-generator@npm:^7.0.0, @babel/plugin-transform-async-to-generator@npm:^7.12.1, @babel/plugin-transform-async-to-generator@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.14.5" + dependencies: + "@babel/helper-module-imports": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-remap-async-to-generator": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4c47016c5f65adaa5836054fcc99402f1d295aedd7ebd44e6df128a90977952f2a8abdf3b3d0aa5a9e1186184da538452c4d9a3b1482376759c6962627201da5 + languageName: node + linkType: hard + "@babel/plugin-transform-async-to-generator@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-transform-async-to-generator@npm:7.20.7" @@ -1143,7 +1940,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.18.6": +"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.12.1, @babel/plugin-transform-block-scoped-functions@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9994d9f107308b21be043de115fe1d06956807d93a3039ddab54333d1fbb39ad50cc5f9eccaedf5317f4699230e923662254974f3a974c4f000e986837bc020a + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.18.6" dependencies: @@ -1154,7 +1962,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.12.12, @babel/plugin-transform-block-scoping@npm:^7.21.0": +"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.12.1, @babel/plugin-transform-block-scoping@npm:^7.12.12, @babel/plugin-transform-block-scoping@npm:^7.15.3": + version: 7.15.3 + resolution: "@babel/plugin-transform-block-scoping@npm:7.15.3" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ee28f51711b5f6569a9bb86be5b2a5456f3e6e22e68488ee77f8082fae5563f45c858dc8323e0e51085d880db1be73e28dc5d108c8a855c831fb29310a01b549 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-transform-block-scoping@npm:7.21.0" dependencies: @@ -1165,7 +1984,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.22.0, @babel/plugin-transform-class-properties@npm:^7.22.3": +"@babel/plugin-transform-class-properties@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-class-properties@npm:7.22.3" dependencies: @@ -1177,7 +1996,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.22.0, @babel/plugin-transform-class-static-block@npm:^7.22.3": +"@babel/plugin-transform-class-static-block@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-class-static-block@npm:7.22.3" dependencies: @@ -1190,7 +2009,24 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.12.1, @babel/plugin-transform-classes@npm:^7.21.0": +"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.12.1, @babel/plugin-transform-classes@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/plugin-transform-classes@npm:7.15.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.15.4 + "@babel/helper-function-name": ^7.15.4 + "@babel/helper-optimise-call-expression": ^7.15.4 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-replace-supers": ^7.15.4 + "@babel/helper-split-export-declaration": ^7.15.4 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c795bb3f49eff5a5a7357650fb233e6a84089278d8b917ef46c566dd112de660240e7ffca6ba274d7596034806b9655974082cf99746ea492f3be98613d5fc01 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-transform-classes@npm:7.21.0" dependencies: @@ -1209,7 +2045,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.21.5": +"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.12.1, @babel/plugin-transform-computed-properties@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-computed-properties@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87bd4c46255359ab8d53d0e9b5aa5e1ef218c1447874bd8c2eff759d3a2b5fe6b3ec55046babe0087f7e3890f6167524c729737e912080ea1c9758a559765130 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.21.5": version: 7.21.5 resolution: "@babel/plugin-transform-computed-properties@npm:7.21.5" dependencies: @@ -1221,7 +2068,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.12.1, @babel/plugin-transform-destructuring@npm:^7.21.3": +"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.12.1, @babel/plugin-transform-destructuring@npm:^7.14.7": + version: 7.14.7 + resolution: "@babel/plugin-transform-destructuring@npm:7.14.7" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0b0cf8ed9fb92c53e3888c17402c4f1e8f329f05a759829b559df883b19b442d3950b7f319df419d0cff122ea76fc8b3b55779fdbb9e394e5f058419a8d5ba14 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.21.3": version: 7.21.3 resolution: "@babel/plugin-transform-destructuring@npm:7.21.3" dependencies: @@ -1232,7 +2090,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": +"@babel/plugin-transform-dotall-regex@npm:^7.12.1, @babel/plugin-transform-dotall-regex@npm:^7.14.5, @babel/plugin-transform-dotall-regex@npm:^7.4.4": + version: 7.14.5 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.14.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4da3dac9580823c1fe8aaedf6109d3a26d17ad7ef7d1b278ddbcd7c148e02c465cf49250794529a34bac0bda6b53db558ae08d185a96b76efaaa17a5da3911df + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6" dependencies: @@ -1244,6 +2114,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-duplicate-keys@npm:^7.12.1, @babel/plugin-transform-duplicate-keys@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c6c951d2f7ed528a8103d08293d4aaf95efa38c697e7b2b27b7e6c9780280484373e2f7ef8d77daf17dffdc86748fbf75e776e0542b1c7b17e29308bc31ebd8c + languageName: node + linkType: hard + "@babel/plugin-transform-duplicate-keys@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.9" @@ -1267,7 +2148,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.0.0, @babel/plugin-transform-exponentiation-operator@npm:^7.18.6": +"@babel/plugin-transform-exponentiation-operator@npm:^7.0.0, @babel/plugin-transform-exponentiation-operator@npm:^7.12.1, @babel/plugin-transform-exponentiation-operator@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.14.5" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7588a582d0bc5c80fda7f1c631354a35a9a7d284dd80ccaf2bbfd086a39a9d6461718dc7dd45a3ca59228593270a7c6a907a9cbe7ddc349d80c7342af0263c5c + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.18.6" dependencies: @@ -1279,7 +2172,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.22.0, @babel/plugin-transform-export-namespace-from@npm:^7.22.3": +"@babel/plugin-transform-export-namespace-from@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.3" dependencies: @@ -1291,7 +2184,31 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.16.0, @babel/plugin-transform-flow-strip-types@npm:^7.21.0": +"@babel/plugin-transform-flow-strip-types@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.12.1" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-syntax-flow": ^7.12.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5b6929ae7fb7d516cabbc6d10cc8cf6a25c11a04d6d6a872cad19505e6a36693f1b072e9cf5d3475113e4c8400cad5a164127d98cbfae562c32cf0c89212424a + languageName: node + linkType: hard + +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.10.1, @babel/plugin-transform-flow-strip-types@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-flow": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c1d6d0612e9c55301d7ed9477cae1a2c6b1f7958b943c0289466ea7a4d2d53f93cf22fa4ab55756ed207b0672c042bbbd67fe38c89d48787345423e111850f96 + languageName: node + linkType: hard + +"@babel/plugin-transform-flow-strip-types@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.21.0" dependencies: @@ -1303,7 +2220,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.12.1, @babel/plugin-transform-for-of@npm:^7.21.5": +"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.12.1, @babel/plugin-transform-for-of@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/plugin-transform-for-of@npm:7.15.4" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 908307b89d05bfb464a4a33033f68fdfedf6302a0203d45c2a34abc3a5bacf23767284892b21b52d0cbeb7e10330a1d5d81990000fef1592adbb3556fd96d1d0 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.21.5": version: 7.21.5 resolution: "@babel/plugin-transform-for-of@npm:7.21.5" dependencies: @@ -1314,7 +2242,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.18.9": +"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.12.1, @babel/plugin-transform-function-name@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-function-name@npm:7.14.5" + dependencies: + "@babel/helper-function-name": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3db2fa1bcd21b76a91ce78db8ebca047fdadbf198f816e2621e531a751a0d40976cf2a25262dee9352fd0c53bff5b25fddefadebdbb4ba3da6d89b849ab075b6 + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-function-name@npm:7.18.9" dependencies: @@ -1327,7 +2267,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.22.0, @babel/plugin-transform-json-strings@npm:^7.22.3": +"@babel/plugin-transform-json-strings@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-json-strings@npm:7.22.3" dependencies: @@ -1339,7 +2279,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.18.9": +"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.12.1, @babel/plugin-transform-literals@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-literals@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2341cfaaf8ac7199c578407ea4de41205d3d74c5a48899aa96c41b08c09d18c46d9018fdc6a2f69f0bccc2662223afc47b60130ae4ff36a79351fface71a61f3 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-literals@npm:7.18.9" dependencies: @@ -1350,7 +2301,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.0, @babel/plugin-transform-logical-assignment-operators@npm:^7.22.3": +"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.3" dependencies: @@ -1362,7 +2313,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.18.6": +"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.12.1, @babel/plugin-transform-member-expression-literals@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a94ff910e8d0e28effd58c64f2d15c9772ea4c209644f116fd81dc5c93ce232304f42ef14d5ec2baf095c824786698fcf6c1d4c91952dc3762350f4ec0eb1f17 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.18.6" dependencies: @@ -1373,6 +2335,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-amd@npm:^7.12.1, @babel/plugin-transform-modules-amd@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-modules-amd@npm:7.14.5" + dependencies: + "@babel/helper-module-transforms": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + babel-plugin-dynamic-import-node: ^2.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 963d9ebb11b282d5c5f462e3e1ad6991e60fb4d190b5a7aa0d9937e0fa83d89cf5f94268f0b0b343576f2cee0cf545bcaf40da40eb8b9dca5c79840fd86a65ed + languageName: node + linkType: hard + "@babel/plugin-transform-modules-amd@npm:^7.20.11": version: 7.20.11 resolution: "@babel/plugin-transform-modules-amd@npm:7.20.11" @@ -1385,7 +2360,21 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.21.5": +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.12.1, @babel/plugin-transform-modules-commonjs@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.15.4" + dependencies: + "@babel/helper-module-transforms": ^7.15.4 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-simple-access": ^7.15.4 + babel-plugin-dynamic-import-node: ^2.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4782b0dad09a9a593be94c7d71fc134ba190e04125a0bf7127dfb5f23413438467b50d92f5d91faa2d377cecccfaf9cdd61156a033fc772816772fdddd82e0ad + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.21.5": version: 7.21.5 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.21.5" dependencies: @@ -1398,7 +2387,22 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.20.11, @babel/plugin-transform-modules-systemjs@npm:^7.22.0, @babel/plugin-transform-modules-systemjs@npm:^7.22.3": +"@babel/plugin-transform-modules-systemjs@npm:^7.12.1, @babel/plugin-transform-modules-systemjs@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.15.4" + dependencies: + "@babel/helper-hoist-variables": ^7.15.4 + "@babel/helper-module-transforms": ^7.15.4 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-validator-identifier": ^7.14.9 + babel-plugin-dynamic-import-node: ^2.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c5ba905680781237a8e86ae6434a9ca33e49deb8e7c3ac28d7b8079bc51c39b557aeecb06e97dc519912815fc99cbd75eaa23bfaa5428ee36aef2dfeae617c29 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.20.11, @babel/plugin-transform-modules-systemjs@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.22.3" dependencies: @@ -1412,6 +2416,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-umd@npm:^7.12.1, @babel/plugin-transform-modules-umd@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-modules-umd@npm:7.14.5" + dependencies: + "@babel/helper-module-transforms": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 455ff383bed47e104d4b2b32f11bc5a44a25c797fad26b5eab9b8a81856f9945350b45ad28b9b20b0bbf324832c7a826c9c3d6f865e85c26a1771663132e4145 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-umd@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-modules-umd@npm:7.18.6" @@ -1424,7 +2440,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.20.5, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.0, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.3": +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.12.1, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.14.9": + version: 7.14.9 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.14.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 81dda376c0af4c07ae252703481e8bd16d49045bd624697ff6b6635326f3f20fca9c574a2f0036bf7f4aa8c36baa9d926912538de486a189a3515bec7f72e16a + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.20.5, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.3" dependencies: @@ -1436,7 +2463,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.18.6, @babel/plugin-transform-new-target@npm:^7.22.0, @babel/plugin-transform-new-target@npm:^7.22.3": +"@babel/plugin-transform-new-target@npm:^7.12.1, @babel/plugin-transform-new-target@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-new-target@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5b806c86926cd0b03fa2f22cf21a6d6a86e5831b80e8a1e898877acd3a03fd07078e45da33b671200ec98a5c7ac9be2f3592cd88933e262feffba248ca7ca4e7 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.18.6, @babel/plugin-transform-new-target@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-new-target@npm:7.22.3" dependencies: @@ -1447,7 +2485,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.0, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3": +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.3" dependencies: @@ -1459,7 +2497,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.22.0, @babel/plugin-transform-numeric-separator@npm:^7.22.3": +"@babel/plugin-transform-numeric-separator@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.3" dependencies: @@ -1472,17 +2510,17 @@ __metadata: linkType: hard "@babel/plugin-transform-object-assign@npm:^7.0.0": - version: 7.18.6 - resolution: "@babel/plugin-transform-object-assign@npm:7.18.6" + version: 7.14.5 + resolution: "@babel/plugin-transform-object-assign@npm:7.14.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a9738264cc996c54febafa0701c5a182d99afbddbfe9fbcc0b2536e3b2332b3318a8143aacd0368e31e18c24cd1b1980be7a3b0b2e5122efb520952d863a1203 + checksum: caca35365b261d283f38ccaa6db19ae43f90c6c842cdf4b12a3317b6d6c383a2d0193414804e3d63150f5e14090ea82f113324c16a5710ae35091122504ca6a9 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.22.0, @babel/plugin-transform-object-rest-spread@npm:^7.22.3": +"@babel/plugin-transform-object-rest-spread@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.3" dependencies: @@ -1497,7 +2535,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.18.6": +"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.12.1, @babel/plugin-transform-object-super@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-object-super@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-replace-supers": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 88477a8b27e76042ffbff1345088422f5b3135346d69f264e71d90b3749a3d73d5a579c97a33cd11c61c5d499a655911c7cd97dbe68edb36e090dfd5f154d777 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-object-super@npm:7.18.6" dependencies: @@ -1509,7 +2559,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.22.0, @babel/plugin-transform-optional-catch-binding@npm:^7.22.3": +"@babel/plugin-transform-optional-catch-binding@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.3" dependencies: @@ -1521,7 +2571,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.22.0, @babel/plugin-transform-optional-chaining@npm:^7.22.3": +"@babel/plugin-transform-optional-chaining@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.3" dependencies: @@ -1534,7 +2584,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.21.3, @babel/plugin-transform-parameters@npm:^7.22.0, @babel/plugin-transform-parameters@npm:^7.22.3": +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.15.4": + version: 7.15.4 + resolution: "@babel/plugin-transform-parameters@npm:7.15.4" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0d8bf881156669a2a6fa279e80fa2f1f47ec6404a72be87adb3e8fa40e72d26f2413ce942208dd1b0f6deb47332d8d2fd81b5e5d6f744779c7d9b13f85b608a5 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.21.3, @babel/plugin-transform-parameters@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-parameters@npm:7.22.3" dependencies: @@ -1545,7 +2606,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.22.0, @babel/plugin-transform-private-methods@npm:^7.22.3": +"@babel/plugin-transform-private-methods@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-private-methods@npm:7.22.3" dependencies: @@ -1557,7 +2618,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.22.0, @babel/plugin-transform-private-property-in-object@npm:^7.22.3": +"@babel/plugin-transform-private-property-in-object@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.3" dependencies: @@ -1571,7 +2632,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.18.6": +"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.12.1, @babel/plugin-transform-property-literals@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-property-literals@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 426e7b13a048220314e35bd4e6732640293c616173ef05ceca3a2bfadd043199e35ec693f1604f77178c3a88bea241b6d7ce92d8fc837faeb37117ad7866350f + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" dependencies: @@ -1583,39 +2655,61 @@ __metadata: linkType: hard "@babel/plugin-transform-react-constant-elements@npm:^7.12.1": - version: 7.22.3 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.22.3" + version: 7.14.5 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.14.5" dependencies: - "@babel/helper-plugin-utils": ^7.21.5 + "@babel/helper-plugin-utils": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 33a1849de4c1993a666e835022ee7f55691778458f05f0f1b053b12a8e11ccad2659ac21160ee05072d9661507087b7152c0b02d607af2856920739e2514f8f7 + checksum: 7e4168535cd3ae1bae5acf8d7cc77a2bd885f8abed46672160631e23ded0c7e0be5152cefb1f87b123c4e3c38a542ca0ce06b3b0d8e7b7694f43687b63c0a9fb languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.0.0, @babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" +"@babel/plugin-transform-react-display-name@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-transform-react-display-name@npm:7.12.1" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.10.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 51c087ab9e41ef71a29335587da28417536c6f816c292e092ffc0e0985d2f032656801d4dd502213ce32481f4ba6c69402993ffa67f0818a07606ff811e4be49 + checksum: 53a4cc0b0ae0588c6a7d8745b5aedb04fd2e5848632f5bad2d4d864bcd3be8ffe67ba17b351676dbd807cfecaeb5c6f7cbf292eab3c47682d22bd1594479c8a2 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.18.6" +"@babel/plugin-transform-react-display-name@npm:^7.0.0, @babel/plugin-transform-react-display-name@npm:^7.12.1, @babel/plugin-transform-react-display-name@npm:^7.14.5": + version: 7.15.1 + resolution: "@babel/plugin-transform-react-display-name@npm:7.15.1" dependencies: - "@babel/plugin-transform-react-jsx": ^7.18.6 + "@babel/helper-plugin-utils": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ec9fa65db66f938b75c45e99584367779ac3e0af8afc589187262e1337c7c4205ea312877813ae4df9fb93d766627b8968d74ac2ba702e4883b1dbbe4953ecee + checksum: c3808762f5d258f0c8ce9ef940cb20ad4c5e495ff9c738344f5374d08dea2fdce795cd14f3a1881cf5eb25c184481d3e03c75c2cb72b94d4267428acce131618 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.0.0, @babel/plugin-transform-react-jsx-self@npm:^7.18.6, @babel/plugin-transform-react-jsx-self@npm:^7.21.0": +"@babel/plugin-transform-react-jsx-development@npm:^7.12.1, @babel/plugin-transform-react-jsx-development@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.14.5" + dependencies: + "@babel/plugin-transform-react-jsx": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b49d6e703aeb4fbaacbb8449418dc3c599bcb3ce608cb900ed21a288c3bce42a33209524693b1978766b645aa2b751c15aa9da5337cc6ac2a79fd9b7c9ae9246 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-self@npm:^7.0.0, @babel/plugin-transform-react-jsx-self@npm:^7.12.1": + version: 7.14.9 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.14.9" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2fa79482c2b00d922857762dc75925e37eec5d8b5e65423262d8ff3644a5ddf47015af17a9ff251e646df471ca5cd664607ec751a96d060e77c11134b6376eb2 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-self@npm:^7.18.6, @babel/plugin-transform-react-jsx-self@npm:^7.21.0": version: 7.21.0 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.21.0" dependencies: @@ -1626,7 +2720,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.0.0, @babel/plugin-transform-react-jsx-source@npm:^7.19.6": +"@babel/plugin-transform-react-jsx-source@npm:^7.0.0, @babel/plugin-transform-react-jsx-source@npm:^7.12.1": + version: 7.14.5 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e7e7336bbd07d6c1a281bac1b242e8cb8172f3b1e1d9d214160ab220142fbefc5d79786d57bf197b18f4c694edfc7614dddae2f990adb4b7484146635b58dfe6 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-source@npm:^7.19.6": version: 7.19.6 resolution: "@babel/plugin-transform-react-jsx-source@npm:7.19.6" dependencies: @@ -1637,7 +2742,22 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.12.12, @babel/plugin-transform-react-jsx@npm:^7.18.6, @babel/plugin-transform-react-jsx@npm:^7.19.0, @babel/plugin-transform-react-jsx@npm:^7.22.3": +"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.12.1, @babel/plugin-transform-react-jsx@npm:^7.12.12, @babel/plugin-transform-react-jsx@npm:^7.14.5": + version: 7.14.9 + resolution: "@babel/plugin-transform-react-jsx@npm:7.14.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.14.5 + "@babel/helper-module-imports": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-jsx": ^7.14.5 + "@babel/types": ^7.14.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 833426a5d3f63ae8ae0d11a5966ddb26fe281c46695ecb1deab7aebc5a4ed3ecd3bcd49499cb5e355be46fa22dd012508f86b26a2962dc29660db1ec32705a2b + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.19.0": version: 7.22.3 resolution: "@babel/plugin-transform-react-jsx@npm:7.22.3" dependencies: @@ -1652,19 +2772,30 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.18.6" +"@babel/plugin-transform-react-pure-annotations@npm:^7.12.1, @babel/plugin-transform-react-pure-annotations@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.14.5" dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-annotate-as-pure": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3b62cc6af2c838eabc28c07473eab1392b41a5db2f0f326b1ba3ec52b95529e1c46098d6a259c7debb6a17489445828b89f7737a6fb85345ea5d27e4819a31fe + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.0.0, @babel/plugin-transform-regenerator@npm:^7.12.1, @babel/plugin-transform-regenerator@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-regenerator@npm:7.14.5" + dependencies: + regenerator-transform: ^0.14.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 97c4873d409088f437f9084d084615948198dd87fc6723ada0e7e29c5a03623c2f3e03df3f52e7e7d4d23be32a08ea00818bff302812e48713c706713bd06219 + checksum: f606bc04da7d0cfd651914cb144e85a0ea6fe20ee453ed21d002747cc47b09c853bc97166c32dc47e959581b772d9883f7d96d1c8e795c81ed21dbbb300e3aa7 languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.0.0, @babel/plugin-transform-regenerator@npm:^7.21.5": +"@babel/plugin-transform-regenerator@npm:^7.21.5": version: 7.21.5 resolution: "@babel/plugin-transform-regenerator@npm:7.21.5" dependencies: @@ -1676,6 +2807,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-reserved-words@npm:^7.12.1, @babel/plugin-transform-reserved-words@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-reserved-words@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8a40d7b48e1b4a549272d603e7b28ead70213e12353d65edd07156b7169d7933cee8b79987b54f374f3c41b835d941aca4b13b8aa23a922c94113af2131ca686 + languageName: node + linkType: hard + "@babel/plugin-transform-reserved-words@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-reserved-words@npm:7.18.6" @@ -1687,23 +2829,64 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-runtime@npm:^7.0.0, @babel/plugin-transform-runtime@npm:^7.16.4, @babel/plugin-transform-runtime@npm:^7.18.10": - version: 7.22.2 - resolution: "@babel/plugin-transform-runtime@npm:7.22.2" +"@babel/plugin-transform-runtime@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/plugin-transform-runtime@npm:7.12.1" dependencies: - "@babel/helper-module-imports": ^7.21.4 - "@babel/helper-plugin-utils": ^7.21.5 - babel-plugin-polyfill-corejs2: ^0.4.2 - babel-plugin-polyfill-corejs3: ^0.8.1 - babel-plugin-polyfill-regenerator: ^0.5.0 + "@babel/helper-module-imports": ^7.12.1 + "@babel/helper-plugin-utils": ^7.10.4 + resolve: ^1.8.1 + semver: ^5.5.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d341e72bc05ad2c5b13fc2bb677c63ac51e07ef07692807b948c3440eb380435422936584498377c6d5bb66ad82440a657970703f3df0f5233ecaae0ccd0322b + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.0.0": + version: 7.15.0 + resolution: "@babel/plugin-transform-runtime@npm:7.15.0" + dependencies: + "@babel/helper-module-imports": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + babel-plugin-polyfill-corejs2: ^0.2.2 + babel-plugin-polyfill-corejs3: ^0.2.2 + babel-plugin-polyfill-regenerator: ^0.2.2 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1fedc30de67a921edca22505bfb31807b47634e413bb5ee42c194b6c70c32dceab9e4e4d0eaabadda7b45d975bf46cdfc8111c43c090ec8a19b1f722308ba9b1 + checksum: 5717e0e6d2f77ef71996b22440e5e68ae4f9e7f4ae85e2dc6e3b99155840a0fdc71a62db1979f19be646a34fef022db506a1036a6e4bf5e89d53a6d94713cc74 languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.12.1, @babel/plugin-transform-shorthand-properties@npm:^7.18.6": +"@babel/plugin-transform-runtime@npm:^7.18.10": + version: 7.18.10 + resolution: "@babel/plugin-transform-runtime@npm:7.18.10" + dependencies: + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 + babel-plugin-polyfill-corejs2: ^0.3.2 + babel-plugin-polyfill-corejs3: ^0.5.3 + babel-plugin-polyfill-regenerator: ^0.4.0 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 98c18680b4258b8bd3f04926b73c72ae77037d5ea5b50761ca35de15896bf0d04bedabde39a81be56dbd4859c96ffaa7103fbefb5d5b58a36e0a80381e4a146c + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.12.1, @babel/plugin-transform-shorthand-properties@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 60cdd17e347a6a0973c8ea5c08ae4b3f8e59ce0e188453c4bda045d2a5c34495af8e0e9393631aa9f3fd51282455b9c5d6ba07e262576171dbe2b4094bdaf8ad + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.18.6" dependencies: @@ -1714,7 +2897,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.12.1, @babel/plugin-transform-spread@npm:^7.20.7": +"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.12.1, @babel/plugin-transform-spread@npm:^7.14.6": + version: 7.14.6 + resolution: "@babel/plugin-transform-spread@npm:7.14.6" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 20c11de962dd7ddab110d6c4ab9f3c0bea97393ce09cbe4e46be53182c3df0577eaf0e31aaa2d76344ae21ed3a3b7e779fe814b845d188e11a6031c619648b89 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.20.7": version: 7.20.7 resolution: "@babel/plugin-transform-spread@npm:7.20.7" dependencies: @@ -1726,7 +2921,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.0.0, @babel/plugin-transform-sticky-regex@npm:^7.18.6": +"@babel/plugin-transform-sticky-regex@npm:^7.0.0, @babel/plugin-transform-sticky-regex@npm:^7.12.1, @babel/plugin-transform-sticky-regex@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d77e0641c4c72203d592d54fdb11770de22a34d659d3335e4c537e95b930d03142b11f1d41d103da3de063c628a0f34bdd4c6534b591bc59d9ce67fafb836dc + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-sticky-regex@npm:7.18.6" dependencies: @@ -1737,7 +2943,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.12.1, @babel/plugin-transform-template-literals@npm:^7.18.9": +"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.12.1, @babel/plugin-transform-template-literals@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-template-literals@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 56d273470c16e83bac1bfab5057a64f23191b51460a009b522b3b29806d7a9f64cbd94323836ceb997c4f331b85564f952eb5566c7bd140d0b278f0191a31985 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-template-literals@npm:7.18.9" dependencies: @@ -1748,6 +2965,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typeof-symbol@npm:^7.12.1, @babel/plugin-transform-typeof-symbol@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1e71ec00ea8b64522b8677c030f334cc5b3833a5b7269a152a2ba7a6b36f0e0a4333a61072e69113e4062e71554d4751ef2e3ddd5e81994978123323f266981c + languageName: node + linkType: hard + "@babel/plugin-transform-typeof-symbol@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.18.9" @@ -1759,7 +2987,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.21.3, @babel/plugin-transform-typescript@npm:^7.5.0": +"@babel/plugin-transform-typescript@npm:^7.12.1, @babel/plugin-transform-typescript@npm:^7.15.0, @babel/plugin-transform-typescript@npm:^7.5.0": + version: 7.15.4 + resolution: "@babel/plugin-transform-typescript@npm:7.15.4" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.15.4 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/plugin-syntax-typescript": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a6fb1f2f831024aff5110fa1be44e5fff96ce11a51178869f09d98675528c6878ff3a95caa42868cb55eae97d23c77e68913aa1737eb38befd2cb49301e2601d + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.21.3": version: 7.22.3 resolution: "@babel/plugin-transform-typescript@npm:7.22.3" dependencies: @@ -1773,6 +3014,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-escapes@npm:^7.12.1, @babel/plugin-transform-unicode-escapes@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2a6979c5b886d9c7d9d3887374d75384542fe05a71eb7738b2cde659386089a930d37d1a34ffb4b87def98fbed3526d78b7cd5dd9bffde4d406b368faba81b7d + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-escapes@npm:^7.21.5": version: 7.21.5 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.21.5" @@ -1784,7 +3036,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.22.0, @babel/plugin-transform-unicode-property-regex@npm:^7.22.3": +"@babel/plugin-transform-unicode-property-regex@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.3" dependencies: @@ -1796,7 +3048,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.0.0, @babel/plugin-transform-unicode-regex@npm:^7.18.6": +"@babel/plugin-transform-unicode-regex@npm:^7.0.0, @babel/plugin-transform-unicode-regex@npm:^7.12.1, @babel/plugin-transform-unicode-regex@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.14.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.14.5 + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1b7a4c0dc6b07390f991e7cac8409f7a1ae74495d94b9e1fb5a716d5362a349a35717cfad883074e3f80e16bb630bbd1986a3436f739f6b01c30a96ef3f9ea9a + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-unicode-regex@npm:7.18.6" dependencies: @@ -1808,7 +3072,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.0, @babel/plugin-transform-unicode-sets-regex@npm:^7.22.3": +"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.3": version: 7.22.3 resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.3" dependencies: @@ -1830,25 +3094,111 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.12.11, @babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.8.4": - version: 7.22.2 - resolution: "@babel/preset-env@npm:7.22.2" +"@babel/preset-env@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/preset-env@npm:7.12.1" dependencies: - "@babel/compat-data": ^7.22.0 - "@babel/helper-compilation-targets": ^7.22.1 - "@babel/helper-plugin-utils": ^7.21.5 - "@babel/helper-validator-option": ^7.21.0 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.22.0 - "@babel/plugin-proposal-private-property-in-object": ^7.21.0 + "@babel/compat-data": ^7.12.1 + "@babel/helper-compilation-targets": ^7.12.1 + "@babel/helper-module-imports": ^7.12.1 + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/helper-validator-option": ^7.12.1 + "@babel/plugin-proposal-async-generator-functions": ^7.12.1 + "@babel/plugin-proposal-class-properties": ^7.12.1 + "@babel/plugin-proposal-dynamic-import": ^7.12.1 + "@babel/plugin-proposal-export-namespace-from": ^7.12.1 + "@babel/plugin-proposal-json-strings": ^7.12.1 + "@babel/plugin-proposal-logical-assignment-operators": ^7.12.1 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.12.1 + "@babel/plugin-proposal-numeric-separator": ^7.12.1 + "@babel/plugin-proposal-object-rest-spread": ^7.12.1 + "@babel/plugin-proposal-optional-catch-binding": ^7.12.1 + "@babel/plugin-proposal-optional-chaining": ^7.12.1 + "@babel/plugin-proposal-private-methods": ^7.12.1 + "@babel/plugin-proposal-unicode-property-regex": ^7.12.1 + "@babel/plugin-syntax-async-generators": ^7.8.0 + "@babel/plugin-syntax-class-properties": ^7.12.1 + "@babel/plugin-syntax-dynamic-import": ^7.8.0 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-json-strings": ^7.8.0 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.0 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.0 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.0 + "@babel/plugin-syntax-optional-chaining": ^7.8.0 + "@babel/plugin-syntax-top-level-await": ^7.12.1 + "@babel/plugin-transform-arrow-functions": ^7.12.1 + "@babel/plugin-transform-async-to-generator": ^7.12.1 + "@babel/plugin-transform-block-scoped-functions": ^7.12.1 + "@babel/plugin-transform-block-scoping": ^7.12.1 + "@babel/plugin-transform-classes": ^7.12.1 + "@babel/plugin-transform-computed-properties": ^7.12.1 + "@babel/plugin-transform-destructuring": ^7.12.1 + "@babel/plugin-transform-dotall-regex": ^7.12.1 + "@babel/plugin-transform-duplicate-keys": ^7.12.1 + "@babel/plugin-transform-exponentiation-operator": ^7.12.1 + "@babel/plugin-transform-for-of": ^7.12.1 + "@babel/plugin-transform-function-name": ^7.12.1 + "@babel/plugin-transform-literals": ^7.12.1 + "@babel/plugin-transform-member-expression-literals": ^7.12.1 + "@babel/plugin-transform-modules-amd": ^7.12.1 + "@babel/plugin-transform-modules-commonjs": ^7.12.1 + "@babel/plugin-transform-modules-systemjs": ^7.12.1 + "@babel/plugin-transform-modules-umd": ^7.12.1 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.12.1 + "@babel/plugin-transform-new-target": ^7.12.1 + "@babel/plugin-transform-object-super": ^7.12.1 + "@babel/plugin-transform-parameters": ^7.12.1 + "@babel/plugin-transform-property-literals": ^7.12.1 + "@babel/plugin-transform-regenerator": ^7.12.1 + "@babel/plugin-transform-reserved-words": ^7.12.1 + "@babel/plugin-transform-shorthand-properties": ^7.12.1 + "@babel/plugin-transform-spread": ^7.12.1 + "@babel/plugin-transform-sticky-regex": ^7.12.1 + "@babel/plugin-transform-template-literals": ^7.12.1 + "@babel/plugin-transform-typeof-symbol": ^7.12.1 + "@babel/plugin-transform-unicode-escapes": ^7.12.1 + "@babel/plugin-transform-unicode-regex": ^7.12.1 + "@babel/preset-modules": ^0.1.3 + "@babel/types": ^7.12.1 + core-js-compat: ^3.6.2 + semver: ^5.5.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1a07935d95a2b36bfb7f462e9ce94c6c3d665ee36ddaf286f0ebc292006bd72841a9e67c4abcc878478b44b3c2cec2ad7af6a7b1cec9ac0a667054e1539859cf + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.12.11, @babel/preset-env@npm:^7.8.4": + version: 7.15.6 + resolution: "@babel/preset-env@npm:7.15.6" + dependencies: + "@babel/compat-data": ^7.15.0 + "@babel/helper-compilation-targets": ^7.15.4 + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-validator-option": ^7.14.5 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.15.4 + "@babel/plugin-proposal-async-generator-functions": ^7.15.4 + "@babel/plugin-proposal-class-properties": ^7.14.5 + "@babel/plugin-proposal-class-static-block": ^7.15.4 + "@babel/plugin-proposal-dynamic-import": ^7.14.5 + "@babel/plugin-proposal-export-namespace-from": ^7.14.5 + "@babel/plugin-proposal-json-strings": ^7.14.5 + "@babel/plugin-proposal-logical-assignment-operators": ^7.14.5 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.14.5 + "@babel/plugin-proposal-numeric-separator": ^7.14.5 + "@babel/plugin-proposal-object-rest-spread": ^7.15.6 + "@babel/plugin-proposal-optional-catch-binding": ^7.14.5 + "@babel/plugin-proposal-optional-chaining": ^7.14.5 + "@babel/plugin-proposal-private-methods": ^7.14.5 + "@babel/plugin-proposal-private-property-in-object": ^7.15.4 + "@babel/plugin-proposal-unicode-property-regex": ^7.14.5 "@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-import-attributes": ^7.22.0 - "@babel/plugin-syntax-import-meta": ^7.10.4 "@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 @@ -1858,65 +3208,48 @@ __metadata: "@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-syntax-unicode-sets-regex": ^7.18.6 - "@babel/plugin-transform-arrow-functions": ^7.21.5 - "@babel/plugin-transform-async-generator-functions": ^7.22.0 - "@babel/plugin-transform-async-to-generator": ^7.20.7 - "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.21.0 - "@babel/plugin-transform-class-properties": ^7.22.0 - "@babel/plugin-transform-class-static-block": ^7.22.0 - "@babel/plugin-transform-classes": ^7.21.0 - "@babel/plugin-transform-computed-properties": ^7.21.5 - "@babel/plugin-transform-destructuring": ^7.21.3 - "@babel/plugin-transform-dotall-regex": ^7.18.6 - "@babel/plugin-transform-duplicate-keys": ^7.18.9 - "@babel/plugin-transform-dynamic-import": ^7.22.1 - "@babel/plugin-transform-exponentiation-operator": ^7.18.6 - "@babel/plugin-transform-export-namespace-from": ^7.22.0 - "@babel/plugin-transform-for-of": ^7.21.5 - "@babel/plugin-transform-function-name": ^7.18.9 - "@babel/plugin-transform-json-strings": ^7.22.0 - "@babel/plugin-transform-literals": ^7.18.9 - "@babel/plugin-transform-logical-assignment-operators": ^7.22.0 - "@babel/plugin-transform-member-expression-literals": ^7.18.6 - "@babel/plugin-transform-modules-amd": ^7.20.11 - "@babel/plugin-transform-modules-commonjs": ^7.21.5 - "@babel/plugin-transform-modules-systemjs": ^7.22.0 - "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.0 - "@babel/plugin-transform-new-target": ^7.22.0 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.22.0 - "@babel/plugin-transform-numeric-separator": ^7.22.0 - "@babel/plugin-transform-object-rest-spread": ^7.22.0 - "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-optional-catch-binding": ^7.22.0 - "@babel/plugin-transform-optional-chaining": ^7.22.0 - "@babel/plugin-transform-parameters": ^7.22.0 - "@babel/plugin-transform-private-methods": ^7.22.0 - "@babel/plugin-transform-private-property-in-object": ^7.22.0 - "@babel/plugin-transform-property-literals": ^7.18.6 - "@babel/plugin-transform-regenerator": ^7.21.5 - "@babel/plugin-transform-reserved-words": ^7.18.6 - "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.20.7 - "@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.21.5 - "@babel/plugin-transform-unicode-property-regex": ^7.22.0 - "@babel/plugin-transform-unicode-regex": ^7.18.6 - "@babel/plugin-transform-unicode-sets-regex": ^7.22.0 - "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.22.0 - babel-plugin-polyfill-corejs2: ^0.4.2 - babel-plugin-polyfill-corejs3: ^0.8.1 - babel-plugin-polyfill-regenerator: ^0.5.0 - core-js-compat: ^3.30.2 + "@babel/plugin-transform-arrow-functions": ^7.14.5 + "@babel/plugin-transform-async-to-generator": ^7.14.5 + "@babel/plugin-transform-block-scoped-functions": ^7.14.5 + "@babel/plugin-transform-block-scoping": ^7.15.3 + "@babel/plugin-transform-classes": ^7.15.4 + "@babel/plugin-transform-computed-properties": ^7.14.5 + "@babel/plugin-transform-destructuring": ^7.14.7 + "@babel/plugin-transform-dotall-regex": ^7.14.5 + "@babel/plugin-transform-duplicate-keys": ^7.14.5 + "@babel/plugin-transform-exponentiation-operator": ^7.14.5 + "@babel/plugin-transform-for-of": ^7.15.4 + "@babel/plugin-transform-function-name": ^7.14.5 + "@babel/plugin-transform-literals": ^7.14.5 + "@babel/plugin-transform-member-expression-literals": ^7.14.5 + "@babel/plugin-transform-modules-amd": ^7.14.5 + "@babel/plugin-transform-modules-commonjs": ^7.15.4 + "@babel/plugin-transform-modules-systemjs": ^7.15.4 + "@babel/plugin-transform-modules-umd": ^7.14.5 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.14.9 + "@babel/plugin-transform-new-target": ^7.14.5 + "@babel/plugin-transform-object-super": ^7.14.5 + "@babel/plugin-transform-parameters": ^7.15.4 + "@babel/plugin-transform-property-literals": ^7.14.5 + "@babel/plugin-transform-regenerator": ^7.14.5 + "@babel/plugin-transform-reserved-words": ^7.14.5 + "@babel/plugin-transform-shorthand-properties": ^7.14.5 + "@babel/plugin-transform-spread": ^7.14.6 + "@babel/plugin-transform-sticky-regex": ^7.14.5 + "@babel/plugin-transform-template-literals": ^7.14.5 + "@babel/plugin-transform-typeof-symbol": ^7.14.5 + "@babel/plugin-transform-unicode-escapes": ^7.14.5 + "@babel/plugin-transform-unicode-regex": ^7.14.5 + "@babel/preset-modules": ^0.1.4 + "@babel/types": ^7.15.6 + babel-plugin-polyfill-corejs2: ^0.2.2 + babel-plugin-polyfill-corejs3: ^0.2.2 + babel-plugin-polyfill-regenerator: ^0.2.2 + core-js-compat: ^3.16.0 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bf74b935bcd59ca2274309bf82c3ee1341ab45cd83e2c8d80bca87a776202d3f719c64c2a5ccb223735b60dec03112f7a73c89ad829e168f99eadc4accf84b4b + checksum: 096902ac397b6ab53bd6c03c59cc451d98b407d1863c185837f0cb56ff45414aa08ae6b950ef179c66a30c0680d4d1846cda0766a990f850ee477022353daf5b languageName: node linkType: hard @@ -2096,7 +3429,32 @@ __metadata: languageName: node linkType: hard -"@babel/preset-flow@npm:^7.0.0, @babel/preset-flow@npm:^7.12.1, @babel/preset-flow@npm:^7.13.13": +"@babel/preset-flow@npm:^7.0.0": + version: 7.10.1 + resolution: "@babel/preset-flow@npm:7.10.1" + dependencies: + "@babel/helper-plugin-utils": ^7.10.1 + "@babel/plugin-transform-flow-strip-types": ^7.10.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8a3ef933f0719c6315c3357cb288a2b7f316749b878105e11ab2dee029a1f10a9d6ddc53f4b23ebe243c4724856c551b55439f75a96cab86c77133b4ecf6d574 + languageName: node + linkType: hard + +"@babel/preset-flow@npm:^7.12.1": + version: 7.14.5 + resolution: "@babel/preset-flow@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-validator-option": ^7.14.5 + "@babel/plugin-transform-flow-strip-types": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 439fb55719f62750cb55418c0c57a15f1e59be914981d899f45cc6145defc3457f1bf41d16e4350c7336df6d8f1a16cdde21dbf77554e6be7bd5f0962dd32f33 + languageName: node + linkType: hard + +"@babel/preset-flow@npm:^7.13.13": version: 7.21.4 resolution: "@babel/preset-flow@npm:7.21.4" dependencies: @@ -2109,6 +3467,36 @@ __metadata: languageName: node linkType: hard +"@babel/preset-modules@npm:^0.1.3": + version: 0.1.3 + resolution: "@babel/preset-modules@npm:0.1.3" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@babel/plugin-proposal-unicode-property-regex": ^7.4.4 + "@babel/plugin-transform-dotall-regex": ^7.4.4 + "@babel/types": ^7.4.4 + esutils: ^2.0.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 35937b630d023fbfc39b9b7ad7da9e248e8512d905130570152062e7d577d660fce708fd1f87dffb3127f667cab54087abd35450548dcbe1a156a1b2a207c38c + languageName: node + linkType: hard + +"@babel/preset-modules@npm:^0.1.4": + version: 0.1.4 + resolution: "@babel/preset-modules@npm:0.1.4" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@babel/plugin-proposal-unicode-property-regex": ^7.4.4 + "@babel/plugin-transform-dotall-regex": ^7.4.4 + "@babel/types": ^7.4.4 + esutils: ^2.0.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7c6500be06be9a341e377eb63292a4a22d0da2b4fb8c68714aff703ddb341cbd58e37d4119d64fc3e602f73801103af471fca2c60b4c1e48e08eea3e6b1afc93 + languageName: node + linkType: hard + "@babel/preset-modules@npm:^0.1.5": version: 0.1.5 resolution: "@babel/preset-modules@npm:0.1.5" @@ -2124,23 +3512,65 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.12.10, @babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.16.0": - version: 7.22.3 - resolution: "@babel/preset-react@npm:7.22.3" +"@babel/preset-react@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/preset-react@npm:7.12.1" dependencies: - "@babel/helper-plugin-utils": ^7.21.5 - "@babel/helper-validator-option": ^7.21.0 - "@babel/plugin-transform-react-display-name": ^7.18.6 - "@babel/plugin-transform-react-jsx": ^7.22.3 - "@babel/plugin-transform-react-jsx-development": ^7.18.6 - "@babel/plugin-transform-react-pure-annotations": ^7.18.6 + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-transform-react-display-name": ^7.12.1 + "@babel/plugin-transform-react-jsx": ^7.12.1 + "@babel/plugin-transform-react-jsx-development": ^7.12.1 + "@babel/plugin-transform-react-jsx-self": ^7.12.1 + "@babel/plugin-transform-react-jsx-source": ^7.12.1 + "@babel/plugin-transform-react-pure-annotations": ^7.12.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0b6210e8ea7485d71dfa7745e6b03e6252e3fd363cc84765c81709b51ad89bcf0a5887a82651dedfc007b7e47ae918496ee963f42c52d9ce3ddbcc5815b96bb7 + checksum: 62f244b4c294554aa69476e337f4c9aec2ca24a93adb8fdf1361c38229534d3e0c87cce846d9f2541f725819f3d49c33426978ba5f851f1ef0f559b1bf435e65 languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.12.7, @babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.16.0": +"@babel/preset-react@npm:^7.12.10, @babel/preset-react@npm:^7.12.5": + version: 7.14.5 + resolution: "@babel/preset-react@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-validator-option": ^7.14.5 + "@babel/plugin-transform-react-display-name": ^7.14.5 + "@babel/plugin-transform-react-jsx": ^7.14.5 + "@babel/plugin-transform-react-jsx-development": ^7.14.5 + "@babel/plugin-transform-react-pure-annotations": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 413c507f853b95c71ecb64f29ea7b0786464a237c54977b03a4410dd837b03bfa55df81d0e337f9792d9abc61f4bf3d616f857d00a36ff4ede79407c143ac865 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/preset-typescript@npm:7.12.1" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + "@babel/plugin-transform-typescript": ^7.12.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: da5df86cbe8cbbd3d2589622b78474f30d7f5a7b1722fc0cd81b908a195f63751c46b6ee4307b9dd65bee501c6629e3720d0a456dcde933b47edfa2ff743cc08 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.12.7": + version: 7.15.0 + resolution: "@babel/preset-typescript@npm:7.15.0" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-validator-option": ^7.14.5 + "@babel/plugin-transform-typescript": ^7.15.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2c480bb0ef76418357d92ccfae67df544a069ca8f59785e8bd0d1d3111bfc671f9f04672583506f1ee62afc3872bf21ed85d6d0c97ba1bc09a6efd1f7c20a10f + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.13.0": version: 7.21.5 resolution: "@babel/preset-typescript@npm:7.21.5" dependencies: @@ -2155,7 +3585,22 @@ __metadata: languageName: node linkType: hard -"@babel/register@npm:^7.0.0, @babel/register@npm:^7.12.1, @babel/register@npm:^7.13.16, @babel/register@npm:^7.21.0": +"@babel/register@npm:^7.0.0, @babel/register@npm:^7.12.1, @babel/register@npm:^7.15.3": + version: 7.15.3 + resolution: "@babel/register@npm:7.15.3" + dependencies: + clone-deep: ^4.0.1 + find-cache-dir: ^2.0.0 + make-dir: ^2.1.0 + pirates: ^4.0.0 + source-map-support: ^0.5.16 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7da9d0399baebe6a5e517abd864cb22eef17d608e893d4f3b95d10411f0038b2b39c954fc611da9c3dc3d87427b8bdb45a576b1528100e65b36c1e9ad31987ca + languageName: node + linkType: hard + +"@babel/register@npm:^7.13.16": version: 7.21.0 resolution: "@babel/register@npm:7.21.0" dependencies: @@ -2177,17 +3622,44 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.10.2, @babel/runtime-corejs3@npm:^7.12.1": - version: 7.22.3 - resolution: "@babel/runtime-corejs3@npm:7.22.3" +"@babel/runtime-corejs3@npm:^7.10.2, @babel/runtime-corejs3@npm:^7.8.3": + version: 7.15.4 + resolution: "@babel/runtime-corejs3@npm:7.15.4" dependencies: - core-js-pure: ^3.30.2 - regenerator-runtime: ^0.13.11 - checksum: ec92a0b874669bb5eff9e7f20d4e0dbfb0bb5d433bd9e2d6f892c38884079d657240165306a402bb4747942765bdd37b7b5857c573505d2179c1fa4162bf966b + core-js-pure: ^3.16.0 + regenerator-runtime: ^0.13.4 + checksum: ba3b7ed66a00e4d00b0ee1d7a9b9902007c1cd1db511a6153032f19ed964d3a22ef76d8f75ff7d14da9ff70f1b43edba6eccce55097a78e84d249c2991c9959e + languageName: node + linkType: hard + +"@babel/runtime@npm:7.12.1": + version: 7.12.1 + resolution: "@babel/runtime@npm:7.12.1" + dependencies: + regenerator-runtime: ^0.13.4 + checksum: fb4b4c8f704a338d3500ff75bfd28a35927444e0c48254d60ce87a9402d7e149e2189e5f55fa3bd2927d4c10fa25fe34c239ae0be68df77af040b01561c5bcc8 languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.2, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.0, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.14.8, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.2, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": + version: 7.15.4 + resolution: "@babel/runtime@npm:7.15.4" + dependencies: + regenerator-runtime: ^0.13.4 + checksum: c40825430400e47c19b97e4142d5315d2910305b9714d44a711472587ee2fd4521fdba5f02ddd9df3902f5e988d9854fa83f4da1e0c091f70f6983fa52480606 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.15.4": + version: 7.18.9 + resolution: "@babel/runtime@npm:7.18.9" + dependencies: + regenerator-runtime: ^0.13.4 + checksum: 36dd736baba7164e82b3cc9d43e081f0cb2d05ff867ad39cac515d99546cee75b7f782018b02a3dcf5f2ef3d27f319faa68965fdfec49d4912c60c6002353a2e + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.17.8": version: 7.22.3 resolution: "@babel/runtime@npm:7.22.3" dependencies: @@ -2196,7 +3668,18 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.0.0, @babel/template@npm:^7.10.4, @babel/template@npm:^7.12.7, @babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.21.9, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.0.0, @babel/template@npm:^7.10.4, @babel/template@npm:^7.12.7, @babel/template@npm:^7.15.4, @babel/template@npm:^7.3.3": + version: 7.15.4 + resolution: "@babel/template@npm:7.15.4" + dependencies: + "@babel/code-frame": ^7.14.5 + "@babel/parser": ^7.15.4 + "@babel/types": ^7.15.4 + checksum: 58ca51fdd40bbaaddf2e46513dd05d5823f214cb2877b3f353abf5541a033a1b6570c29c2c80e60f2b55966326e40bebbf53666b261646ccf410b3d984af42ce + languageName: node + linkType: hard + +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.21.9": version: 7.21.9 resolution: "@babel/template@npm:7.21.9" dependencies: @@ -2207,25 +3690,35 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.22.1, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.0, @babel/traverse@npm:^7.7.2, @babel/traverse@npm:^7.7.4": - version: 7.22.1 - resolution: "@babel/traverse@npm:7.22.1" +"@babel/template@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/template@npm:7.18.6" dependencies: - "@babel/code-frame": ^7.21.4 - "@babel/generator": ^7.22.0 - "@babel/helper-environment-visitor": ^7.22.1 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.22.0 - "@babel/types": ^7.22.0 + "@babel/code-frame": ^7.18.6 + "@babel/parser": ^7.18.6 + "@babel/types": ^7.18.6 + checksum: cb02ed804b7b1938dbecef4e01562013b80681843dd391933315b3dd9880820def3b5b1bff6320d6e4c6a1d63d1d5799630d658ec6b0369c5505e7e4029c38fb + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.15.4, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.0, @babel/traverse@npm:^7.7.2": + version: 7.15.4 + resolution: "@babel/traverse@npm:7.15.4" + dependencies: + "@babel/code-frame": ^7.14.5 + "@babel/generator": ^7.15.4 + "@babel/helper-function-name": ^7.15.4 + "@babel/helper-hoist-variables": ^7.15.4 + "@babel/helper-split-export-declaration": ^7.15.4 + "@babel/parser": ^7.15.4 + "@babel/types": ^7.15.4 debug: ^4.1.0 globals: ^11.1.0 - checksum: 5761837f9ce9b6ec2fe851ce76c6048d4fc11fc5be13218b7492849e42497ea957dafd2b84ab673aaabf31ac26ddc79c298d2a0fcff79ebdfc5c204cb35071a1 + checksum: 831506a92c8ed76dc60504de37663bf5a553d7b1b009a94defc082cddb6c380c5487a1aa9438bcd7b9891a2a72758a63e4f878154aa70699d09b388b1445d774 languageName: node linkType: hard -"@babel/traverse@npm:^7.21.5": +"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.21.5, @babel/traverse@npm:^7.22.1": version: 7.22.4 resolution: "@babel/traverse@npm:7.22.4" dependencies: @@ -2243,6 +3736,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.18.6": + version: 7.18.8 + resolution: "@babel/traverse@npm:7.18.8" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.18.7 + "@babel/helper-environment-visitor": ^7.18.6 + "@babel/helper-function-name": ^7.18.6 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.18.8 + "@babel/types": ^7.18.8 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: c406e01f45f13a666083f6e4ea32d2d5e20ce3a51ea48f6c8fe9d6a0469069f857af06866749959c4396f191393e39e7e6e7b2a8769afca7f50ca1046d6172bd + languageName: node + linkType: hard + "@babel/traverse@npm:~7.21.2": version: 7.21.5 resolution: "@babel/traverse@npm:7.21.5" @@ -2261,18 +3772,27 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.12.7, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.4, @babel/types@npm:^7.21.5, @babel/types@npm:^7.22.0, @babel/types@npm:^7.22.3, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0, @babel/types@npm:^7.8.3": - version: 7.22.3 - resolution: "@babel/types@npm:7.22.3" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.12.7, @babel/types@npm:^7.14.9, @babel/types@npm:^7.15.4, @babel/types@npm:^7.15.6, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": + version: 7.15.6 + resolution: "@babel/types@npm:7.15.6" dependencies: - "@babel/helper-string-parser": ^7.21.5 - "@babel/helper-validator-identifier": ^7.19.1 + "@babel/helper-validator-identifier": ^7.14.9 + to-fast-properties: ^2.0.0 + checksum: 37f497dde10d238b5eb184efab83b415a86611e3d73dc0434de0cfb851b20ee606a3b7e1525e5b2d522fac1248d0345fea0468006f246262511b80cd3ed2419f + languageName: node + linkType: hard + +"@babel/types@npm:^7.18.6, @babel/types@npm:^7.18.7, @babel/types@npm:^7.18.8, @babel/types@npm:^7.8.3": + version: 7.18.8 + resolution: "@babel/types@npm:7.18.8" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 to-fast-properties: ^2.0.0 - checksum: 6111fa5990635dfba8812a84bb4889429feb41a2c03c89de2654724e88a85b5740d4795c64a480d188d2f7109e7b47f3f0ba3d56da1b697cd31c65922f4decf7 + checksum: a485531faa9ff3b83ea94ba6502321dd66e39202c46d7765e4336cb4aff2ff69ebc77d97b17e21331a8eedde1f5490ce00e8a430c1041fc26854d636e6701919 languageName: node linkType: hard -"@babel/types@npm:^7.22.4": +"@babel/types@npm:^7.18.9, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.5, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.4, @babel/types@npm:^7.21.5, @babel/types@npm:^7.22.0, @babel/types@npm:^7.22.3, @babel/types@npm:^7.22.4": version: 7.22.4 resolution: "@babel/types@npm:7.22.4" dependencies: @@ -2309,8 +3829,8 @@ __metadata: linkType: hard "@beyondessential/eslint-config-jest@npm:^1.0.0": - version: 1.0.1 - resolution: "@beyondessential/eslint-config-jest@npm:1.0.1" + version: 1.0.0 + resolution: "@beyondessential/eslint-config-jest@npm:1.0.0" dependencies: eslint-plugin-jest: ^24.0.1 eslint-plugin-jest-formatting: ^2.0.0 @@ -2318,7 +3838,7 @@ __metadata: eslint: ">= 7.8" jest: ">= 26.0" prettier: ">= 2.1" - checksum: 0bc79ef8b95f975d0a6fac4a7958ca3c45c2ee362cdd413af0103bf64b493b8908f4c8073a5a1240b67a1b5e8e3c4db6868d7e8a7c4a1cb414fd86c250abd3b8 + checksum: 721dfa37c6ae08ea5f4f42a9837539ab223d0d46f91bdf1dbadf66bf31784f170cca7a10bdea6ee6e54ebd5e12dd29d2ef473b0ffa89914c760f8b85f78fcb1a languageName: node linkType: hard @@ -2378,14 +3898,14 @@ __metadata: linkType: hard "@cnakazawa/watch@npm:^1.0.3": - version: 1.0.4 - resolution: "@cnakazawa/watch@npm:1.0.4" + version: 1.0.3 + resolution: "@cnakazawa/watch@npm:1.0.3" dependencies: exec-sh: ^0.3.2 minimist: ^1.2.0 bin: - watch: cli.js - checksum: 88f395ca0af2f3c0665b8ce7bb29e83647ec5d141e8735712aeeee4117081555436712966b6957aa1c461f6f826a4d23b0034e379c443a10e919f81c8748bf29 + watch: ./cli.js + checksum: c11ca927d9e625ffa67d3d49b5a9a97d32ef82611abffdc645a41dd3b985a07c1d82c4a3dcc707fa193ef58494ccd21f3eb02fb22db3ce366654ccc364080864 languageName: node linkType: hard @@ -2396,6 +3916,22 @@ __metadata: languageName: node linkType: hard +"@cspotcode/source-map-consumer@npm:0.8.0": + version: 0.8.0 + resolution: "@cspotcode/source-map-consumer@npm:0.8.0" + checksum: c0c16ca3d2f58898f1bd74c4f41a189dbcc202e642e60e489cbcc2e52419c4e89bdead02c886a12fb13ea37798ede9e562b2321df997ebc210ae9bd881561b4e + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:0.7.0": + version: 0.7.0 + resolution: "@cspotcode/source-map-support@npm:0.7.0" + dependencies: + "@cspotcode/source-map-consumer": 0.8.0 + checksum: 9faddda7757cd778b5fd6812137b2cc265810043680d6399acc20441668fafcdc874053be9dccd0d9110087287bfad27eb3bf342f72bceca9aa9059f5d0c4be8 + languageName: node + linkType: hard + "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -2432,8 +3968,8 @@ __metadata: linkType: hard "@cypress/request@npm:^2.88.5": - version: 2.88.11 - resolution: "@cypress/request@npm:2.88.11" + version: 2.88.5 + resolution: "@cypress/request@npm:2.88.5" dependencies: aws-sign2: ~0.7.0 aws4: ^1.8.0 @@ -2442,18 +3978,20 @@ __metadata: extend: ~3.0.2 forever-agent: ~0.6.1 form-data: ~2.3.2 - http-signature: ~1.3.6 + har-validator: ~5.1.3 + http-signature: ~1.2.0 is-typedarray: ~1.0.0 isstream: ~0.1.2 json-stringify-safe: ~5.0.1 mime-types: ~2.1.19 + oauth-sign: ~0.9.0 performance-now: ^2.1.0 - qs: ~6.10.3 + qs: ~6.5.2 safe-buffer: ^5.1.2 tough-cookie: ~2.5.0 tunnel-agent: ^0.6.0 - uuid: ^8.3.2 - checksum: e4b3f62e0c41c4ccca6c942828461d8ea717e752fd918d685e9f74e2ebcfa8b7942427f7ce971e502635c3bf3d40011476db84dc753d3dc360c6d08350da6f93 + uuid: ^3.3.2 + checksum: a605f8a623f4665402768f4d7730315a420967d41c44194eeb2a946ce0b74ce3eb8205a73b0cab879fcf65870dbb1189ac60ea67d163c7acd64228e39e65611a languageName: node linkType: hard @@ -2484,13 +4022,13 @@ __metadata: linkType: hard "@dabh/diagnostics@npm:^2.0.2": - version: 2.0.3 - resolution: "@dabh/diagnostics@npm:2.0.3" + version: 2.0.2 + resolution: "@dabh/diagnostics@npm:2.0.2" dependencies: colorspace: 1.1.x enabled: 2.0.x kuler: ^2.0.0 - checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 + checksum: 4d95cc31249a840b6cc3dba3dc4345a9295265413456068a0d07b69fa0ec6a5a5bc2c39e56ec04c6509ac1f4d9c17fc80baaaddd5caa1abcdd3aaeffe2b63cec languageName: node linkType: hard @@ -2513,9 +4051,9 @@ __metadata: linkType: hard "@discoveryjs/json-ext@npm:^0.5.3": - version: 0.5.7 - resolution: "@discoveryjs/json-ext@npm:0.5.7" - checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 + version: 0.5.5 + resolution: "@discoveryjs/json-ext@npm:0.5.5" + checksum: 40844548d87689d742a098c3bfe342cc7f0d0500a814fce4592886de68f7e027937938324578311998d49a1f1e5d0394c578bb814fab04375b521637cb7a0dea languageName: node linkType: hard @@ -2528,13 +4066,61 @@ __metadata: languageName: node linkType: hard -"@emotion/hash@npm:^0.8.0": +"@emotion/cache@npm:^10.0.27": + version: 10.0.29 + resolution: "@emotion/cache@npm:10.0.29" + dependencies: + "@emotion/sheet": 0.9.4 + "@emotion/stylis": 0.8.5 + "@emotion/utils": 0.11.3 + "@emotion/weak-memoize": 0.2.5 + checksum: 78b37fb0c2e513c90143a927abef229e995b6738ef8a92ce17abe2ed409b38859ddda7c14d7f4854d6f4e450b6db50231532f53a7fec4903d7ae775b2ae3fd64 + languageName: node + linkType: hard + +"@emotion/core@npm:^10.1.1": + version: 10.1.1 + resolution: "@emotion/core@npm:10.1.1" + dependencies: + "@babel/runtime": ^7.5.5 + "@emotion/cache": ^10.0.27 + "@emotion/css": ^10.0.27 + "@emotion/serialize": ^0.11.15 + "@emotion/sheet": 0.9.4 + "@emotion/utils": 0.11.3 + peerDependencies: + react: ">=16.3.0" + checksum: 277cec7b7c4e059d118b6ac374fbe014be0a50798a7fb5255a62914533b5ecb158c4deeb4611ed2ffe0528d2bb4aa5bd71a62e9793852ffee5ad658b1414c969 + languageName: node + linkType: hard + +"@emotion/css@npm:^10.0.27": + version: 10.0.27 + resolution: "@emotion/css@npm:10.0.27" + dependencies: + "@emotion/serialize": ^0.11.15 + "@emotion/utils": 0.11.3 + babel-plugin-emotion: ^10.0.27 + checksum: 1420f5b514fc3a8500bcf90384b309b0d9acc9f687ec3a655166b55dc81d1661d6b6132ea6fe6730d0071c10da93bf9427937c22a90a18088af4ba5e11d59141 + languageName: node + linkType: hard + +"@emotion/hash@npm:0.8.0, @emotion/hash@npm:^0.8.0": version: 0.8.0 resolution: "@emotion/hash@npm:0.8.0" checksum: 4b35d88a97e67275c1d990c96d3b0450451d089d1508619488fc0acb882cb1ac91e93246d471346ebd1b5402215941ef4162efe5b51534859b39d8b3a0e3ffaa languageName: node linkType: hard +"@emotion/is-prop-valid@npm:0.8.8, @emotion/is-prop-valid@npm:^0.8.6, @emotion/is-prop-valid@npm:^0.8.8": + version: 0.8.8 + resolution: "@emotion/is-prop-valid@npm:0.8.8" + dependencies: + "@emotion/memoize": 0.7.4 + checksum: bb7ec6d48c572c540e24e47cc94fc2f8dec2d6a342ae97bc9c8b6388d9b8d283862672172a1bb62d335c02662afe6291e10c71e9b8642664a8b43416cdceffac + languageName: node + linkType: hard + "@emotion/is-prop-valid@npm:^1.1.0": version: 1.2.1 resolution: "@emotion/is-prop-valid@npm:1.2.1" @@ -2544,6 +4130,13 @@ __metadata: languageName: node linkType: hard +"@emotion/memoize@npm:0.7.4": + version: 0.7.4 + resolution: "@emotion/memoize@npm:0.7.4" + checksum: 4e3920d4ec95995657a37beb43d3f4b7d89fed6caa2b173a4c04d10482d089d5c3ea50bbc96618d918b020f26ed6e9c4026bbd45433566576c1f7b056c3271dc + languageName: node + linkType: hard + "@emotion/memoize@npm:^0.8.1": version: 0.8.1 resolution: "@emotion/memoize@npm:0.8.1" @@ -2551,14 +4144,62 @@ __metadata: languageName: node linkType: hard -"@emotion/stylis@npm:^0.8.4": +"@emotion/serialize@npm:^0.11.15, @emotion/serialize@npm:^0.11.16": + version: 0.11.16 + resolution: "@emotion/serialize@npm:0.11.16" + dependencies: + "@emotion/hash": 0.8.0 + "@emotion/memoize": 0.7.4 + "@emotion/unitless": 0.7.5 + "@emotion/utils": 0.11.3 + csstype: ^2.5.7 + checksum: 2949832fab9d803e6236f2af6aad021c09c6b6722ae910b06b4ec3bfb84d77cbecfe3eab9a7dcc269ac73e672ef4b696c7836825931670cb110731712e331438 + languageName: node + linkType: hard + +"@emotion/sheet@npm:0.9.4": + version: 0.9.4 + resolution: "@emotion/sheet@npm:0.9.4" + checksum: 53bb833b4bb69ea2af04e1ecad164f78fb2614834d2820f584c909686a8e047c44e96a6e824798c5c558e6d95e10772454a9e5c473c5dbe0d198e50deb2815bc + languageName: node + linkType: hard + +"@emotion/styled-base@npm:^10.0.27": + version: 10.0.31 + resolution: "@emotion/styled-base@npm:10.0.31" + dependencies: + "@babel/runtime": ^7.5.5 + "@emotion/is-prop-valid": 0.8.8 + "@emotion/serialize": ^0.11.15 + "@emotion/utils": 0.11.3 + peerDependencies: + "@emotion/core": ^10.0.28 + react: ">=16.3.0" + checksum: a375c406656bb65347a0d39adc4ccb493478dea5c9564b379888700006727d7fabec5f883f620ba066bb7b9c71b7ab256c4dfd80c1c3274ab09745d07feab9e7 + languageName: node + linkType: hard + +"@emotion/styled@npm:^10.0.27": + version: 10.0.27 + resolution: "@emotion/styled@npm:10.0.27" + dependencies: + "@emotion/styled-base": ^10.0.27 + babel-plugin-emotion: ^10.0.27 + peerDependencies: + "@emotion/core": ^10.0.27 + react: ">=16.3.0" + checksum: 09e86fe47adbca1eabb34f36cee17289fbe1f2332c40051d4d5a6077eed1682612685663efb7fd68a8f290d20f9f5cb6ad1c9ca18dcdfc05ee51784d707d279c + languageName: node + linkType: hard + +"@emotion/stylis@npm:0.8.5, @emotion/stylis@npm:^0.8.4": version: 0.8.5 resolution: "@emotion/stylis@npm:0.8.5" checksum: 67ff5958449b2374b329fb96e83cb9025775ffe1e79153b499537c6c8b2eb64b77f32d7b5d004d646973662356ceb646afd9269001b97c54439fceea3203ce65 languageName: node linkType: hard -"@emotion/unitless@npm:^0.7.4": +"@emotion/unitless@npm:0.7.5, @emotion/unitless@npm:^0.7.4": version: 0.7.5 resolution: "@emotion/unitless@npm:0.7.5" checksum: f976e5345b53fae9414a7b2e7a949aa6b52f8bdbcc84458b1ddc0729e77ba1d1dfdff9960e0da60183877873d3a631fa24d9695dd714ed94bcd3ba5196586a6b @@ -2574,6 +4215,20 @@ __metadata: languageName: node linkType: hard +"@emotion/utils@npm:0.11.3": + version: 0.11.3 + resolution: "@emotion/utils@npm:0.11.3" + checksum: 9c4204bda84f9acd153a9be9478a83f9baa74d5d7a4c21882681c4d1b86cd113b84540cb1f92e1c30313b5075f024da2658dbc553f5b00776ef9b6ec7991c0c9 + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:0.2.5": + version: 0.2.5 + resolution: "@emotion/weak-memoize@npm:0.2.5" + checksum: 27d402b0c683b94658220b6d47840346ee582329ca2a15ec9c233492e0f1a27687ccb233b76eedc922f2e185e444cc89f7b97a81a1d3e5ae9f075bab08e965ea + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/android-arm64@npm:0.17.19" @@ -2728,6 +4383,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^0.4.0": + version: 0.4.0 + resolution: "@eslint/eslintrc@npm:0.4.0" + dependencies: + ajv: ^6.12.4 + debug: ^4.1.1 + espree: ^7.3.0 + globals: ^12.1.0 + ignore: ^4.0.6 + import-fresh: ^3.2.1 + js-yaml: ^3.13.1 + minimatch: ^3.0.4 + strip-json-comments: ^3.1.1 + checksum: c4e7a5021bfdd293aff47b1993a66aee3d7a71a6b13bc8036028c71aa08bdac232c8683f5bb55090d0f260ecf81f4159e1a28554c8ad242a372ee89583dc75af + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^0.4.3": version: 0.4.3 resolution: "@eslint/eslintrc@npm:0.4.3" @@ -2752,7 +4424,7 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": +"@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 @@ -2774,9 +4446,9 @@ __metadata: linkType: hard "@hapi/hoek@npm:8.x.x, @hapi/hoek@npm:^8.3.0": - version: 8.5.1 - resolution: "@hapi/hoek@npm:8.5.1" - checksum: 8f8ce36be4f5e5d7a712072d4a028a4a95beec7a7da3a7a6e9a0c07d697f04c19b37d93751db352c314ea831f7e2120569a035dc6a351ed8c0444f1d3b275621 + version: 8.5.0 + resolution: "@hapi/hoek@npm:8.5.0" + checksum: ea0beb5d774831871767025f02f6669f7267049f79f0cbe78fedbe2359f3eacd6f39045fbfe4878554c16e049fe0bb2360a1c915f8de40e7eaed6e96824b2ef3 languageName: node linkType: hard @@ -2820,22 +4492,9 @@ __metadata: linkType: hard "@humanwhocodes/object-schema@npm:^1.2.0": - version: 1.2.1 - resolution: "@humanwhocodes/object-schema@npm:1.2.1" - checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 - languageName: node - linkType: hard - -"@hypnosphi/create-react-context@npm:^0.3.1": - version: 0.3.1 - resolution: "@hypnosphi/create-react-context@npm:0.3.1" - dependencies: - gud: ^1.0.0 - warning: ^4.0.3 - peerDependencies: - prop-types: ^15.0.0 - react: ">=0.14.0" - checksum: d2f069a562e138057aa067e1483e28cea3193bbacd33ca9528131f31e656939cfeb552af760b3be437d3a8074315a8854fc6d5d89878e2746618ad930c817122 + version: 1.2.0 + resolution: "@humanwhocodes/object-schema@npm:1.2.0" + checksum: 40b75480376de8104d65f7c44a7dd76d30fb57823ca8ba3a3239b2b568323be894d93440578a72fd8e5e2cc3df3577ce0d2f0fe308b990dd51cf35392bf3c9a2 languageName: node linkType: hard @@ -2852,7 +4511,14 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.2 + resolution: "@istanbuljs/schema@npm:0.1.2" + checksum: 5ce9facf2f0e3f4a93e56853cdfd78456e22d2c210c677530046e9c634ddc323dd62423ac711cd3554b5be06052c87fb8e0c266aa9010726940654c357290e78 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.3": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 @@ -2884,17 +4550,17 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/console@npm:27.5.1" +"@jest/console@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/console@npm:27.2.4" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^27.2.4 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 + jest-message-util: ^27.2.4 + jest-util: ^27.2.4 slash: ^3.0.0 - checksum: 7cb20f06a34b09734c0342685ec53aa4c401fe3757c13a9c58fce76b971a322eb884f6de1068ef96f746e5398e067371b89515a07c268d4440a867c87748a706 + checksum: ed54aa81661724aa9ec8cf7cb2929168eb91032e63601df8480cdb7cde387ec6f45cd7f602c99852fd6a9db5599852e51fc120385300b1f818013667c5e7f517 languageName: node linkType: hard @@ -2934,34 +4600,34 @@ __metadata: languageName: node linkType: hard -"@jest/core@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/core@npm:27.5.1" +"@jest/core@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/core@npm:27.2.4" dependencies: - "@jest/console": ^27.5.1 - "@jest/reporters": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^27.2.4 + "@jest/reporters": ^27.2.4 + "@jest/test-result": ^27.2.4 + "@jest/transform": ^27.2.4 + "@jest/types": ^27.2.4 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.8.1 exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-changed-files: ^27.5.1 - jest-config: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-resolve-dependencies: ^27.5.1 - jest-runner: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 - jest-watcher: ^27.5.1 + graceful-fs: ^4.2.4 + jest-changed-files: ^27.2.4 + jest-config: ^27.2.4 + jest-haste-map: ^27.2.4 + jest-message-util: ^27.2.4 + jest-regex-util: ^27.0.6 + jest-resolve: ^27.2.4 + jest-resolve-dependencies: ^27.2.4 + jest-runner: ^27.2.4 + jest-runtime: ^27.2.4 + jest-snapshot: ^27.2.4 + jest-util: ^27.2.4 + jest-validate: ^27.2.4 + jest-watcher: ^27.2.4 micromatch: ^4.0.4 rimraf: ^3.0.0 slash: ^3.0.0 @@ -2971,7 +4637,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 904a94ad8f1b43cd6b48de3b0226659bff3696150ff8cf7680fc2faffdc8a115203bb9ab6e817c1f79f9d6a81f67953053cbc64d8a4604f2e0c42a04c28cf126 + checksum: 96aaa62af17288a64c3242217e358aa8f67c4a4f4796c8265226ad2ee056163cc4ed38e49c0fb63ac6bef276dc36fb800a3142e6d0b0cdf25b752c3898aa38b2 languageName: node linkType: hard @@ -2987,15 +4653,15 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/environment@npm:27.5.1" +"@jest/environment@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/environment@npm:27.2.4" dependencies: - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/fake-timers": ^27.2.4 + "@jest/types": ^27.2.4 "@types/node": "*" - jest-mock: ^27.5.1 - checksum: 2a9e18c35a015508dbec5b90b21c150230fa6c1c8cb8fabe029d46ee2ca4c40eb832fb636157da14c66590d0a4c8a2c053226b041f54a44507d6f6a89abefd66 + jest-mock: ^27.2.4 + checksum: 67d762d093f6eeb43fb1eefb2217136408a749eba1a8318ceea9b198d35552c10f76af543e0f062f3c5b1e939ef62eb1cfc9cee099e9e1913ba482044ccad806 languageName: node linkType: hard @@ -3033,17 +4699,17 @@ __metadata: languageName: node linkType: hard -"@jest/fake-timers@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/fake-timers@npm:27.5.1" +"@jest/fake-timers@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/fake-timers@npm:27.2.4" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^27.2.4 "@sinonjs/fake-timers": ^8.0.1 "@types/node": "*" - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 02a0561ed2f4586093facd4ae500b74694f187ac24d4a00e949a39a1c5325bca8932b4fcb0388a2c5ed0656506fc1cf51fd3e32cdd48cea7497ad9c6e028aba8 + jest-message-util: ^27.2.4 + jest-mock: ^27.2.4 + jest-util: ^27.2.4 + checksum: 5123f63cbe21d1d577b9d800ce3cd20e72811d7a4e3f05cace84334bd8bb28b778c2d4ae33004ee24469867e0f80efb1eb70517a840dfa12d42991c53ebf7640 languageName: node linkType: hard @@ -3058,14 +4724,14 @@ __metadata: languageName: node linkType: hard -"@jest/globals@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/globals@npm:27.5.1" +"@jest/globals@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/globals@npm:27.2.4" dependencies: - "@jest/environment": ^27.5.1 - "@jest/types": ^27.5.1 - expect: ^27.5.1 - checksum: 087f97047e9dcf555f76fe2ce54aee681e005eaa837a0c0c2d251df6b6412c892c9df54cb871b180342114389a5ff895a4e52e6e6d3d0015bf83c02a54f64c3c + "@jest/environment": ^27.2.4 + "@jest/types": ^27.2.4 + expect: ^27.2.4 + checksum: 8a5168e8266d2e49dc83374d58cbad7bbbcf87cee0c59a23223bab6fe5517d647fe6c90f037e02490281c6f5372d98706fddb442dc071007ac3a8585fbced6b8 languageName: node linkType: hard @@ -3105,30 +4771,29 @@ __metadata: languageName: node linkType: hard -"@jest/reporters@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/reporters@npm:27.5.1" +"@jest/reporters@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/reporters@npm:27.2.4" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" + "@jest/console": ^27.2.4 + "@jest/test-result": ^27.2.4 + "@jest/transform": ^27.2.4 + "@jest/types": ^27.2.4 chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 exit: ^0.1.2 glob: ^7.1.2 - graceful-fs: ^4.2.9 + graceful-fs: ^4.2.4 istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^5.1.0 + istanbul-lib-instrument: ^4.0.3 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-haste-map: ^27.5.1 - jest-resolve: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 + istanbul-reports: ^3.0.2 + jest-haste-map: ^27.2.4 + jest-resolve: ^27.2.4 + jest-util: ^27.2.4 + jest-worker: ^27.2.4 slash: ^3.0.0 source-map: ^0.6.0 string-length: ^4.0.1 @@ -3139,7 +4804,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: faba5eafb86e62b62e152cafc8812d56308f9d1e8b77f3a7dcae4a8803a20a60a0909cc43ed73363ef649bf558e4fb181c7a336d144c89f7998279d1882bb69e + checksum: f61a22165f368e1d30ade767208acd57766526c7fd93c1eb264a3843a4953846e44deebcf3afb185252a0513b66d7cabcf38a607597d05d283c7a8f3ed130600 languageName: node linkType: hard @@ -3174,14 +4839,14 @@ __metadata: languageName: node linkType: hard -"@jest/source-map@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/source-map@npm:27.5.1" +"@jest/source-map@npm:^27.0.6": + version: 27.0.6 + resolution: "@jest/source-map@npm:27.0.6" dependencies: callsites: ^3.0.0 - graceful-fs: ^4.2.9 + graceful-fs: ^4.2.4 source-map: ^0.6.0 - checksum: 4fb1e743b602841babf7e22bd84eca34676cb05d4eb3b604cae57fc59e406099f5ac759ac1a0d04d901237d143f0f4f234417306e823bde732a1d19982230862 + checksum: b4c09a0392e58a970b1bede96cd995279d95254efc997acff7fb44ad52fd4e4a372ce955c32777d1eac2006c3869b7d97227126d45a28612a40815823e3cbdb0 languageName: node linkType: hard @@ -3208,15 +4873,15 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-result@npm:27.5.1" +"@jest/test-result@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/test-result@npm:27.2.4" dependencies: - "@jest/console": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^27.2.4 + "@jest/types": ^27.2.4 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 338f7c509d6a3bc6d7dd7388c8f6f548b87638e171dc1fddfedcacb4e8950583288832223ba688058cbcf874b937d22bdc0fa88f79f5fc666f77957e465c06a5 + checksum: 724c2f93c2a702c770fdd954043a9933215fe97695a40a476c66f713ac05d86744f46b7dc04b4d1165c5591ac49d14d7a3b8e6831064a6194d709833ff3d3822 languageName: node linkType: hard @@ -3233,15 +4898,15 @@ __metadata: languageName: node linkType: hard -"@jest/test-sequencer@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-sequencer@npm:27.5.1" +"@jest/test-sequencer@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/test-sequencer@npm:27.2.4" dependencies: - "@jest/test-result": ^27.5.1 - graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-runtime: ^27.5.1 - checksum: f21f9c8bb746847f7f89accfd29d6046eec1446f0b54e4694444feaa4df379791f76ef0f5a4360aafcbc73b50bc979f68b8a7620de404019d3de166be6720cb0 + "@jest/test-result": ^27.2.4 + graceful-fs: ^4.2.4 + jest-haste-map: ^27.2.4 + jest-runtime: ^27.2.4 + checksum: d19ccc8db296f540e6b872187a0526bb648ab6f6f5c42c16d7f65e586a46eb336d04be43201fe58a650e64981ab750a67c11fdaf0d41960547a8b4b8a2afcb8c languageName: node linkType: hard @@ -3268,26 +4933,26 @@ __metadata: languageName: node linkType: hard -"@jest/transform@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/transform@npm:27.5.1" +"@jest/transform@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/transform@npm:27.2.4" dependencies: "@babel/core": ^7.1.0 - "@jest/types": ^27.5.1 - babel-plugin-istanbul: ^6.1.1 + "@jest/types": ^27.2.4 + babel-plugin-istanbul: ^6.0.0 chalk: ^4.0.0 convert-source-map: ^1.4.0 fast-json-stable-stringify: ^2.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-util: ^27.5.1 + graceful-fs: ^4.2.4 + jest-haste-map: ^27.2.4 + jest-regex-util: ^27.0.6 + jest-util: ^27.2.4 micromatch: ^4.0.4 - pirates: ^4.0.4 + pirates: ^4.0.1 slash: ^3.0.0 source-map: ^0.6.1 write-file-atomic: ^3.0.0 - checksum: a22079121aedea0f20a03a9c026be971f7b92adbfb4d5fd1fb67be315741deac4f056936d7c72a53b24aa5a1071bc942c003925fd453bf3f6a0ae5da6384e137 + checksum: 15ed959f213d8f19c4d626ce006c073a2b55c4fb1c902e44de170b0887cedb7d9ee8d1d4975acf746a9349154608a83452282ce4d65877900e8f5f64955d2368 languageName: node linkType: hard @@ -3337,6 +5002,19 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^26.3.0": + version: 26.3.0 + resolution: "@jest/types@npm:26.3.0" + dependencies: + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^15.0.0 + chalk: ^4.0.0 + checksum: 832fcb106870b095a33e93afc130ef4359a5a024317e00101f9ca934fe9c667b8ac6bc350260c8758f519feedc1370277f0169da11153739552dfd30775b474a + languageName: node + linkType: hard + "@jest/types@npm:^26.6.0, @jest/types@npm:^26.6.2": version: 26.6.2 resolution: "@jest/types@npm:26.6.2" @@ -3350,6 +5028,19 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^27.2.4": + version: 27.2.4 + resolution: "@jest/types@npm:27.2.4" + dependencies: + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^16.0.0 + chalk: ^4.0.0 + checksum: 0d34189874354a63bc80eeb99da75078ea8a65599c6cd0b937cf1909fc9d490f99adf5aa32ca5a67735496f131491f323b750983d471ecbbcd3e3fec618b01df + languageName: node + linkType: hard + "@jest/types@npm:^27.5.1": version: 27.5.1 resolution: "@jest/types@npm:27.5.1" @@ -3395,7 +5086,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": +"@jridgewell/gen-mapping@npm:^0.3.0": version: 0.3.3 resolution: "@jridgewell/gen-mapping@npm:0.3.3" dependencies: @@ -3406,17 +5097,21 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:3.1.0": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.0.3": - version: 3.1.1 - resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 +"@jridgewell/resolve-uri@npm:3.1.0, @jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 languageName: node linkType: hard @@ -3427,7 +5122,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/source-map@npm:^0.3.2": +"@jridgewell/source-map@npm:^0.3.3": version: 0.3.3 resolution: "@jridgewell/source-map@npm:0.3.3" dependencies: @@ -3437,14 +5132,14 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:1.4.14": +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": version: 1.4.14 resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13": +"@jridgewell/sourcemap-codec@npm:^1.4.13": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 @@ -3461,7 +5156,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17": version: 0.3.18 resolution: "@jridgewell/trace-mapping@npm:0.3.18" dependencies: @@ -3471,6 +5166,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.14 + resolution: "@jridgewell/trace-mapping@npm:0.3.14" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: b9537b9630ffb631aef9651a085fe361881cde1772cd482c257fe3c78c8fd5388d681f504a9c9fe1081b1c05e8f75edf55ee10fdb58d92bbaa8dbf6a7bd6b18c + languageName: node + linkType: hard + "@juggle/resize-observer@npm:^3.3.1": version: 3.4.0 resolution: "@juggle/resize-observer@npm:3.4.0" @@ -3488,73 +5193,94 @@ __metadata: linkType: hard "@material-ui/core@npm:^4.9.11, @material-ui/core@npm:^4.9.8": - version: 4.12.4 - resolution: "@material-ui/core@npm:4.12.4" + version: 4.11.0 + resolution: "@material-ui/core@npm:4.11.0" dependencies: "@babel/runtime": ^7.4.4 - "@material-ui/styles": ^4.11.5 - "@material-ui/system": ^4.12.2 - "@material-ui/types": 5.1.0 - "@material-ui/utils": ^4.11.3 + "@material-ui/styles": ^4.10.0 + "@material-ui/system": ^4.9.14 + "@material-ui/types": ^5.1.0 + "@material-ui/utils": ^4.10.2 "@types/react-transition-group": ^4.2.0 clsx: ^1.0.4 hoist-non-react-statics: ^3.3.2 popper.js: 1.16.1-lts prop-types: ^15.7.2 - react-is: ^16.8.0 || ^17.0.0 + react-is: ^16.8.0 react-transition-group: ^4.4.0 peerDependencies: - "@types/react": ^16.8.6 || ^17.0.0 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + "@types/react": ^16.8.6 + react: ^16.8.0 + react-dom: ^16.8.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 96b48deccda87ced841b1db45bed2be6d2b6d1b4eae72cd5c9b931201cb72026330688e0fead54e715bcead40b267ea88bde781c9f1563b1a71a5c51bf187289 + checksum: ebd0f0aa08ad762f9b272db21e56bd984282e66ef8d8cf31b544f531c1ec1b5977475923ff72310f3587f130e95dc61d9f00955e8b2b41d75d172fbf9565f536 languageName: node linkType: hard "@material-ui/icons@npm:^4.9.1": - version: 4.11.3 - resolution: "@material-ui/icons@npm:4.11.3" + version: 4.9.1 + resolution: "@material-ui/icons@npm:4.9.1" dependencies: "@babel/runtime": ^7.4.4 peerDependencies: "@material-ui/core": ^4.0.0 - "@types/react": ^16.8.6 || ^17.0.0 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + "@types/react": ^16.8.6 + react: ^16.8.0 + react-dom: ^16.8.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: df856c1102902b36d18526279dc25b97f2dbba229ffe8fa5cde17b330ea3fef793f4f53d0975eda972d78bab6c0a2ef0ce853cb88ee2c6edd7e9159a4bed2e0a + languageName: node + linkType: hard + +"@material-ui/lab@npm:^4.0.0-alpha.47": + version: 4.0.0-alpha.56 + resolution: "@material-ui/lab@npm:4.0.0-alpha.56" + dependencies: + "@babel/runtime": ^7.4.4 + "@material-ui/utils": ^4.10.2 + clsx: ^1.0.4 + prop-types: ^15.7.2 + react-is: ^16.8.0 + peerDependencies: + "@material-ui/core": ^4.9.10 + "@types/react": ^16.8.6 + react: ^16.8.0 + react-dom: ^16.8.0 peerDependenciesMeta: "@types/react": optional: true - checksum: f849a8c4fecddc112cfa94105a2c72e763ff76b9f8da74135b7bbadfd294ed6685897cbea6a2128099be0ce37843784893d8c64da6bde37d020956ab9067206c + checksum: 5234d210b58069156cd8cdc841b892f71136c827e05fa5579d523d676a669d6a0f07777ed7e742ca1451ee0bbe831d6692b59301a902cb8415914015aa63d4ea languageName: node linkType: hard -"@material-ui/lab@npm:^4.0.0-alpha.47, @material-ui/lab@npm:^4.0.0-alpha.57": - version: 4.0.0-alpha.61 - resolution: "@material-ui/lab@npm:4.0.0-alpha.61" +"@material-ui/lab@npm:^4.0.0-alpha.57": + version: 4.0.0-alpha.57 + resolution: "@material-ui/lab@npm:4.0.0-alpha.57" dependencies: "@babel/runtime": ^7.4.4 - "@material-ui/utils": ^4.11.3 + "@material-ui/utils": ^4.11.2 clsx: ^1.0.4 prop-types: ^15.7.2 react-is: ^16.8.0 || ^17.0.0 peerDependencies: - "@material-ui/core": ^4.12.1 + "@material-ui/core": ^4.9.10 "@types/react": ^16.8.6 || ^17.0.0 react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 8774a07d72615301e0099415580f87ea8f3d1d106f79e0b014738e302dd3e21959abf01d6c0a629e2e9afb8cb91abd8e9686c2886cddff06c27e6a8a8e063ea0 + checksum: 0bc8b35e4a96ea04fa3fd43a64ff9685bdea2ad6ed8baf4c8f5cbe1524101a87f33229f6d23638074a3626fc3c55ba15a38d2ab984777dda896e117d0cea5c0e languageName: node linkType: hard "@material-ui/pickers@npm:^3.2.10": - version: 3.3.10 - resolution: "@material-ui/pickers@npm:3.3.10" + version: 3.2.10 + resolution: "@material-ui/pickers@npm:3.2.10" dependencies: "@babel/runtime": ^7.6.0 "@date-io/core": 1.x @@ -3566,63 +5292,63 @@ __metadata: "@date-io/core": ^1.3.6 "@material-ui/core": ^4.0.0 prop-types: ^15.6.0 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: b8ec52f2e8a4dfae8f14e29c41428a708c843d2c64b5ece64747d8d9401edaeb4d7de6cce985d13e486f2addec1b7787eeed7a3dfcbba90803c23f1ba2ed2420 + react: ^16.8.4 + react-dom: ^16.8.4 + checksum: 2f196c69df63e07a027c2efedb92bb8171c080fbe971d1e52a9a9f44aa00f31ea56dc5b025be6408c6c05bd77b06d3f10de01416816c20c5a9084b3523131747 languageName: node linkType: hard -"@material-ui/styles@npm:^4.11.5, @material-ui/styles@npm:^4.9.10": - version: 4.11.5 - resolution: "@material-ui/styles@npm:4.11.5" +"@material-ui/styles@npm:^4.10.0, @material-ui/styles@npm:^4.9.10": + version: 4.10.0 + resolution: "@material-ui/styles@npm:4.10.0" dependencies: "@babel/runtime": ^7.4.4 "@emotion/hash": ^0.8.0 - "@material-ui/types": 5.1.0 - "@material-ui/utils": ^4.11.3 + "@material-ui/types": ^5.1.0 + "@material-ui/utils": ^4.9.6 clsx: ^1.0.4 csstype: ^2.5.2 hoist-non-react-statics: ^3.3.2 - jss: ^10.5.1 - jss-plugin-camel-case: ^10.5.1 - jss-plugin-default-unit: ^10.5.1 - jss-plugin-global: ^10.5.1 - jss-plugin-nested: ^10.5.1 - jss-plugin-props-sort: ^10.5.1 - jss-plugin-rule-value-function: ^10.5.1 - jss-plugin-vendor-prefixer: ^10.5.1 + jss: ^10.0.3 + jss-plugin-camel-case: ^10.0.3 + jss-plugin-default-unit: ^10.0.3 + jss-plugin-global: ^10.0.3 + jss-plugin-nested: ^10.0.3 + jss-plugin-props-sort: ^10.0.3 + jss-plugin-rule-value-function: ^10.0.3 + jss-plugin-vendor-prefixer: ^10.0.3 prop-types: ^15.7.2 peerDependencies: - "@types/react": ^16.8.6 || ^17.0.0 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + "@types/react": ^16.8.6 + react: ^16.8.0 + react-dom: ^16.8.0 peerDependenciesMeta: "@types/react": optional: true - checksum: dbf3985ef57c1b7dae3fd916d5bfd61f2097afb93c9e1f64832cfcb8fc9bbf38a504c9632ed7b76eb5d235670083d9e66d35942bc976b7cd148c71d75b808e82 + checksum: 3646a7b9e052255da6860a73c12f0032a1d589ef4a0ae40e7bfe6ba356fbda859b3f0c2b101005123c8ada97f080dead4e3ff19dde3992714a9cb5bb938a2aba languageName: node linkType: hard -"@material-ui/system@npm:^4.12.2": - version: 4.12.2 - resolution: "@material-ui/system@npm:4.12.2" +"@material-ui/system@npm:^4.9.14": + version: 4.9.14 + resolution: "@material-ui/system@npm:4.9.14" dependencies: "@babel/runtime": ^7.4.4 - "@material-ui/utils": ^4.11.3 + "@material-ui/utils": ^4.9.6 csstype: ^2.5.2 prop-types: ^15.7.2 peerDependencies: - "@types/react": ^16.8.6 || ^17.0.0 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + "@types/react": ^16.8.6 + react: ^16.8.0 + react-dom: ^16.8.0 peerDependenciesMeta: "@types/react": optional: true - checksum: ebe6b3cc5f111034eacd763014f3260f7647b5e0cd132870f2ee18855cf3d51a996b4633035fe6f5f8965489944db4ac0cb3b71b84a765faa35a6861532ac9f6 + checksum: f17d52d708a4a1bcce7a8c07054ed68d5a2027aa4d4cefe4cd2e20c41db69a93083bce34f4858963ea651efde52f0b81909d5cf157b168295947b0db59471e5a languageName: node linkType: hard -"@material-ui/types@npm:5.1.0": +"@material-ui/types@npm:^5.1.0": version: 5.1.0 resolution: "@material-ui/types@npm:5.1.0" peerDependencies: @@ -3634,9 +5360,23 @@ __metadata: languageName: node linkType: hard -"@material-ui/utils@npm:^4.11.3": - version: 4.11.3 - resolution: "@material-ui/utils@npm:4.11.3" +"@material-ui/utils@npm:^4.10.2, @material-ui/utils@npm:^4.9.6": + version: 4.10.2 + resolution: "@material-ui/utils@npm:4.10.2" + dependencies: + "@babel/runtime": ^7.4.4 + prop-types: ^15.7.2 + react-is: ^16.8.0 + peerDependencies: + react: ^16.8.0 + react-dom: ^16.8.0 + checksum: 4934b503b3a0f4d1f539b9597089a8bff1aeebee63adaf6885969402e3694962bea002ec0d8e5a31a24f80f3bc09edb2774e8d883fc79697d7552cca6a9acd89 + languageName: node + linkType: hard + +"@material-ui/utils@npm:^4.11.2": + version: 4.11.2 + resolution: "@material-ui/utils@npm:4.11.2" dependencies: "@babel/runtime": ^7.4.4 prop-types: ^15.7.2 @@ -3644,7 +5384,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 - checksum: 05ff67c982b33d3b4260cfaeaf566f3ccaecaebb231907ed626bcc30322d89d705bfe79b8805c0dda2f1dc2cfa98ca9d731ec8ae12868da7a98568a41c7dc231 + checksum: 30e15b197c52bb607ba2f00293acbda66388427560e30f5dd82714dee69f565cf0896baa98f869b191a881e14e0df08155fd9d598b356ac2262b8e60e43a5499 languageName: node linkType: hard @@ -3727,27 +5467,20 @@ __metadata: languageName: node linkType: hard -"@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3": - version: 2.1.8-no-fsevents.3 - resolution: "@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3" - checksum: ee55cc9241aeea7eb94b8a8551bfa4246c56c53bc71ecda0a2104018fcc328ba5723b33686bdf9cc65d4df4ae65e8016b89e0bbdeb94e0309fe91bb9ced42344 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" +"@nodelib/fs.scandir@npm:2.1.3": + version: 2.1.3 + resolution: "@nodelib/fs.scandir@npm:2.1.3" dependencies: - "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.stat": 2.0.3 run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + checksum: 0054efbba1385629886fe017d99f7045cb8300d6de1923f7a37e05e480c853abbedaff90f6a6b88fd0d406e1cd1e97fb60bd4e059b44468b174f46bef2e21dd1 languageName: node linkType: hard -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 +"@nodelib/fs.stat@npm:2.0.3, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.3 + resolution: "@nodelib/fs.stat@npm:2.0.3" + checksum: d3612efceea83fb0bec4e64967888ff0c3e5fbbae96121bc526bbbe5529f32fc6f8a785b550f397d20f09c84dc1e5a6c8e9fd7f9b8b62387a8f80f680be8430e languageName: node linkType: hard @@ -3759,52 +5492,41 @@ __metadata: linkType: hard "@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" + version: 1.2.4 + resolution: "@nodelib/fs.walk@npm:1.2.4" dependencies: - "@nodelib/fs.scandir": 2.1.5 + "@nodelib/fs.scandir": 2.1.3 fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^1.0.0": - version: 1.1.1 - resolution: "@npmcli/fs@npm:1.1.1" - dependencies: - "@gar/promisify": ^1.0.1 - semver: ^7.3.5 - checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 + checksum: a971d1dcc1cf593e25651738e915be201053b63775c39c1ee221d2adee6316503ad6043136ceda0e099724875f2d72ea04b3b57c0e3a20b7f280bd3e951ae2e4 languageName: node linkType: hard "@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" + version: 2.1.0 + resolution: "@npmcli/fs@npm:2.1.0" dependencies: "@gar/promisify": ^1.1.3 semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 + checksum: 6ec6d678af6da49f9dac50cd882d7f661934dd278972ffbaacde40d9eaa2871292d634000a0cca9510f6fc29855fbd4af433e1adbff90a524ec3eaf140f1219b languageName: node linkType: hard "@npmcli/move-file@npm:^1.0.1": - version: 1.1.2 - resolution: "@npmcli/move-file@npm:1.1.2" + version: 1.0.1 + resolution: "@npmcli/move-file@npm:1.0.1" dependencies: mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7 + checksum: 878b39fc1f0b4c0b434ef0a97b80149fb74c5ec06246280238a2bc5f562a3c5e758e31f583c6431eb916537c1505697e4ac7b9f9e68cb28951bf7eb8150de5f0 languageName: node linkType: hard "@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" + version: 2.0.0 + resolution: "@npmcli/move-file@npm:2.0.0" dependencies: mkdirp: ^1.0.4 rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 languageName: node linkType: hard @@ -3815,7 +5537,7 @@ __metadata: languageName: node linkType: hard -"@pmmmwh/react-refresh-webpack-plugin@npm:0.4.3": +"@pmmmwh/react-refresh-webpack-plugin@npm:0.4.3, @pmmmwh/react-refresh-webpack-plugin@npm:^0.4.3": version: 0.4.3 resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.4.3" dependencies: @@ -3851,64 +5573,48 @@ __metadata: languageName: node linkType: hard -"@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.3": - version: 0.5.10 - resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.10" +"@popperjs/core@npm:^2.5.4, @popperjs/core@npm:^2.6.0": + version: 2.10.2 + resolution: "@popperjs/core@npm:2.10.2" + checksum: 43c189e3eb6d032433512d94761b54fc7cae15957ca5528008813f887a67b5760b949f30a5141b476be2ba5a6c677c91def150f603d2d3e30b5e97a5ae51474e + languageName: node + linkType: hard + +"@reach/router@npm:^1.3.4": + version: 1.3.4 + resolution: "@reach/router@npm:1.3.4" dependencies: - ansi-html-community: ^0.0.8 - common-path-prefix: ^3.0.0 - core-js-pure: ^3.23.3 - error-stack-parser: ^2.0.6 - find-up: ^5.0.0 - html-entities: ^2.1.0 - loader-utils: ^2.0.4 - schema-utils: ^3.0.0 - source-map: ^0.7.3 + create-react-context: 0.3.0 + invariant: ^2.2.3 + prop-types: ^15.6.1 + react-lifecycles-compat: ^3.0.4 peerDependencies: - "@types/webpack": 4.x || 5.x - react-refresh: ">=0.10.0 <1.0.0" - sockjs-client: ^1.4.0 - type-fest: ">=0.17.0 <4.0.0" - webpack: ">=4.43.0 <6.0.0" - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - "@types/webpack": - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - checksum: c45beded9c56fbbdc7213a2c36131ace5db360ed704d462cc39d6678f980173a91c9a3f691e6bd3a026f25486644cd0027e8a12a0a4eced8e8b886a0472e7d34 + react: 15.x || 16.x || 16.4.0-alpha.0911da3 + react-dom: 15.x || 16.x || 16.4.0-alpha.0911da3 + checksum: f64372497e0464a9fdfd79283fec3f4fd01ee093f1599d8a8035e0a41fbce22113bfa46dcea63aa8b7b4e0796e916f134aa8e3fccd3974be397e7c19468de3c4 languageName: node linkType: hard -"@react-leaflet/core@npm:^1.1.1": - version: 1.1.1 - resolution: "@react-leaflet/core@npm:1.1.1" +"@react-leaflet/core@npm:^1.1.0": + version: 1.1.0 + resolution: "@react-leaflet/core@npm:1.1.0" peerDependencies: leaflet: ^1.7.1 react: ^17.0.1 react-dom: ^17.0.1 - checksum: 2fc4a80e5524f9437ac6cef0f95e63388f2df6ecc5107fef85fd097eb2455436e796d41a4c43cdcbb983a4132403646823ba1dc0d953e866eb80808cbfaf0232 + checksum: 314b689b047622e87a128cc5c0b345ac86d355fda92648b696a540d831f86eee63eb9639c6329e50d3b2602b9c937a412b5991661c470dc7b5f19e05e69adc94 languageName: node linkType: hard "@react-native-async-storage/async-storage@npm:^1.13.2": - version: 1.18.1 - resolution: "@react-native-async-storage/async-storage@npm:1.18.1" + version: 1.13.2 + resolution: "@react-native-async-storage/async-storage@npm:1.13.2" dependencies: - merge-options: ^3.0.4 + deep-assign: ^3.0.0 peerDependencies: - react-native: ^0.0.0-0 || 0.60 - 0.72 || 1000.0.0 - checksum: 58c8497fafdd4d112c4a70b0976783abdc6fa487f0cffca196901efd146fc838dee0cf498fdc4ef67a4634ba4ca97d60fec5a24720aea1d46f1999b0ba8b249b + react: ^16.8 + react-native: ">=0.59" + checksum: 82679bd775d3e1c5543d85b9ba67347a3871c43868cbe9a136580250c261d8f41650f9691897a2087b30b4a88e135cc9dad9105889959a6a8df1021224ec2019 languageName: node linkType: hard @@ -4006,8 +5712,8 @@ __metadata: linkType: hard "@react-native-community/cli@npm:^4.10.0": - version: 4.14.0 - resolution: "@react-native-community/cli@npm:4.14.0" + version: 4.13.1 + resolution: "@react-native-community/cli@npm:4.13.1" dependencies: "@hapi/joi": ^15.0.3 "@react-native-community/cli-debugger-ui": ^4.13.1 @@ -4029,11 +5735,11 @@ __metadata: inquirer: ^3.0.6 leven: ^3.1.0 lodash: ^4.17.15 - metro: ^0.59.0 - metro-config: ^0.59.0 - metro-core: ^0.59.0 - metro-react-native-babel-transformer: ^0.59.0 - metro-resolver: ^0.59.0 + metro: ^0.58.0 + metro-config: ^0.58.0 + metro-core: ^0.58.0 + metro-react-native-babel-transformer: ^0.58.0 + metro-resolver: ^0.58.0 minimist: ^1.2.0 mkdirp: ^0.5.1 node-stream-zip: ^1.9.1 @@ -4048,16 +5754,20 @@ __metadata: react-native: ">=0.62.0-rc.0 <0.64.0" bin: react-native: build/bin.js - checksum: fe0fdcfaa459495b4977f42d41d5279b5ba2b9680ab8ae3d4fda3780e00e769ffe4aefb5ba2526744932c96477dcde5c7394837ea7493f80d363114200beada9 + checksum: b1cd04662f489f58dd1256134b662b2c632a83735c337113ef63f7880ab32c5d3740ef8c0367daa2bfcbde1aeca194c45e601d4f12b8c905ab66d911b20ac72a languageName: node linkType: hard "@react-native-community/datetimepicker@npm:^3.0.6": - version: 3.5.2 - resolution: "@react-native-community/datetimepicker@npm:3.5.2" + version: 3.0.6 + resolution: "@react-native-community/datetimepicker@npm:3.0.6" dependencies: invariant: ^2.2.4 - checksum: 8f0d3bc7014b17c696a415565c6fc591591b29ba5a438f2c1692a96ffc185693266eb950229ed3e9bf6b035d61a720ee402cbe9750d5bef81fd19e7647a24229 + peerDependencies: + react: ">=16.8.3" + react-native: ">=0.60" + react-native-windows: ">=0.62" + checksum: d447fd4acbeebb8df1ca8db2eea63f770ed2dee4a26c6447012923e7ed4b8f360f639359ba962d29fd5656fdfec0a266cf7a088250aa01bdc473387be396c9b1 languageName: node linkType: hard @@ -4085,19 +5795,19 @@ __metadata: linkType: hard "@react-native-community/eslint-plugin@npm:^1.1.0": - version: 1.3.0 - resolution: "@react-native-community/eslint-plugin@npm:1.3.0" - checksum: 5e04fa161fca6453299aed691695ea071fed8166c5da36935047eb6c169bc38c9d599e1ce20402b63cbcaf086a9bb63d2e88836be142cecabf61ba36954ccaae + version: 1.1.0 + resolution: "@react-native-community/eslint-plugin@npm:1.1.0" + checksum: 4da7468f490139b7990d8d22347d616221590c0d85271b4ca9ff3c46df65138151bbd1c1ebeff6c0da8b344bb7deec27f96f5fbb72f162ebb492bd8056fe8845 languageName: node linkType: hard "@react-native-community/geolocation@npm:^2.0.2": - version: 2.1.0 - resolution: "@react-native-community/geolocation@npm:2.1.0" + version: 2.0.2 + resolution: "@react-native-community/geolocation@npm:2.0.2" peerDependencies: react: "*" react-native: "*" - checksum: 43dd95a8f643af613cd4c8d0a9a557690a70d072f5985c94aa5e09e5cab41e35682a5b022080bb2f276d00029dee1341b0451fcbd8ad8b55a67bc5d98c28f8cc + checksum: b072e740d0a3bd05f6166d66a5ab268d248092ab812b215539667ce0d4b01a078faed9a1bb45ac654e6aae976115f5b8c68dcab9de02e1a811b30cc5bb2e7d36 languageName: node linkType: hard @@ -4112,24 +5822,11 @@ __metadata: linkType: hard "@react-native-community/netinfo@npm:^5.9.9": - version: 5.9.10 - resolution: "@react-native-community/netinfo@npm:5.9.10" + version: 5.9.9 + resolution: "@react-native-community/netinfo@npm:5.9.9" peerDependencies: react-native: ">=0.59" - checksum: adedc8aa929bdeb5c837ac8c49a41349f1d4d94187114500f023faee0e8aa5fb8ca6eb301845c34c67d49c9b2416090f322be5009c1087b48422d4e8e70334d9 - languageName: node - linkType: hard - -"@react-native/virtualized-lists@npm:^0.72.4": - version: 0.72.5 - resolution: "@react-native/virtualized-lists@npm:0.72.5" - dependencies: - invariant: ^2.2.4 - nullthrows: ^1.1.1 - peerDependencies: - react-native: "*" - react-test-renderer: 18.2.0 - checksum: 9ad28ddf23f6775de6950acfa4dbdc2c4a39fafd1d0001ae8062b6b4a5c79a15c9a83830d1bebc48fcfe05d286ecb811bf9f0ce6b18db06af43f11390f08d368 + checksum: 57babd4884f5e82524af3cc3f345719a64294ba3d2486171872d7e42f2bfac9b86efb0901a7db1c4ef8bdf7a7c7783b476364204b2d7aa2dd9ab7055e558035c languageName: node linkType: hard @@ -4147,94 +5844,87 @@ __metadata: languageName: node linkType: hard -"@react-navigation/native@npm:^3.8.4": - version: 3.8.4 - resolution: "@react-navigation/native@npm:3.8.4" +"@react-navigation/native@npm:^3.8.3": + version: 3.8.3 + resolution: "@react-navigation/native@npm:3.8.3" dependencies: hoist-non-react-statics: ^3.3.2 react-native-safe-area-view: ^0.14.9 - checksum: 27e6e12de702b87780c26c85fbb7c2b8d17ecc249d31ce8595a13d59af83f30fd71333db30c414e5f27b735dcac1f68de677581ae7fc07584f914f80dc67409b + checksum: 384f2da87f8cd62236f1f8c86cee5fead6fbcfcbf02630d65a687178a942e8aab7818177a9f861bf2c962b16956f597ada6d47114478c5ddb4c927851f6c9038 languageName: node linkType: hard -"@redux-saga/core@npm:^1.2.3": - version: 1.2.3 - resolution: "@redux-saga/core@npm:1.2.3" +"@redux-saga/core@npm:^1.1.3": + version: 1.1.3 + resolution: "@redux-saga/core@npm:1.1.3" dependencies: "@babel/runtime": ^7.6.3 - "@redux-saga/deferred": ^1.2.1 - "@redux-saga/delay-p": ^1.2.1 - "@redux-saga/is": ^1.1.3 - "@redux-saga/symbols": ^1.1.3 - "@redux-saga/types": ^1.2.1 + "@redux-saga/deferred": ^1.1.2 + "@redux-saga/delay-p": ^1.1.2 + "@redux-saga/is": ^1.1.2 + "@redux-saga/symbols": ^1.1.2 + "@redux-saga/types": ^1.1.0 redux: ^4.0.4 typescript-tuple: ^2.2.1 - checksum: a18249aa4e771699f103c2e18952d5fc0f65124f88c1fe33f4551b658b5ef7fb2d827091fea3e339c91f324e5d9098f758282d92536e1701bd003812353dd004 + checksum: b90c90fcba498442631fe5913be665b6cf4efa58d9e37223fa1d4837b7bd85e1be64e156489f5824b28d91e3fa946192020216d762a5c16e4f75d802517c3cb6 languageName: node linkType: hard -"@redux-saga/deferred@npm:^1.2.1": - version: 1.2.1 - resolution: "@redux-saga/deferred@npm:1.2.1" - checksum: 2caca8d2fe559c74889562dbd7fabc6f139cc24871a41122e2ac8e4c98fb1c44a081d0fc762f13c12d6320fd759ee2b799d57141025fef93ae553c09338c3fff +"@redux-saga/deferred@npm:^1.1.2": + version: 1.1.2 + resolution: "@redux-saga/deferred@npm:1.1.2" + checksum: 98bc41ca1cbc716b8b4d5ad3ffb2f04c7fc7298e75736cb197f1d18a084bca8a6e86c0fa547341db200695a45b15110e01d418a9ef32dc5f5ed6274b0e4f234a languageName: node linkType: hard -"@redux-saga/delay-p@npm:^1.2.1": - version: 1.2.1 - resolution: "@redux-saga/delay-p@npm:1.2.1" +"@redux-saga/delay-p@npm:^1.1.2": + version: 1.1.2 + resolution: "@redux-saga/delay-p@npm:1.1.2" dependencies: - "@redux-saga/symbols": ^1.1.3 - checksum: 060533ce8ba6b919caa5d47961eb5d8c1d171519fccd5d44208c26a0b94f3f315c8ea440f1b23af70ed53ebd0445b64567d6a0ac9663a6f703dd8088746ce2b5 + "@redux-saga/symbols": ^1.1.2 + checksum: 0fda0b8ce947069deb9e35824dedb2393e956174e909e2c17942c6fa519d26f79847fd295832245e80a44c9c352a7154c45ff3389ed998a6ddaee945be68580f languageName: node linkType: hard -"@redux-saga/is@npm:^1.1.3": - version: 1.1.3 - resolution: "@redux-saga/is@npm:1.1.3" +"@redux-saga/is@npm:^1.1.2": + version: 1.1.2 + resolution: "@redux-saga/is@npm:1.1.2" dependencies: - "@redux-saga/symbols": ^1.1.3 - "@redux-saga/types": ^1.2.1 - checksum: 8e24194d365e9a8896fa232a92c09a02a8f881f7a3a0d8004311568762ae3865d40391e4719b789114124f71904160a8942bb285e3fd1611599267bf2ae7d5fc - languageName: node - linkType: hard - -"@redux-saga/symbols@npm:^1.1.3": - version: 1.1.3 - resolution: "@redux-saga/symbols@npm:1.1.3" - checksum: 65a8ea23c1ab7b122823f1a4d957f881d48fa50f90898c26db65cac6524f22e2f337b768dadfa87324925b41e3279ff1ebce1c4141e53dc19e74855167b49b74 + "@redux-saga/symbols": ^1.1.2 + "@redux-saga/types": ^1.1.0 + checksum: 18ff4ceb98cd57d00692841a2abb1a13d070561bb8290dd2785b65f792a55641553077231e4986c15b151c115ab5829f7346940c11dc99786dfabcaa293b021b languageName: node linkType: hard -"@redux-saga/types@npm:^1.2.1": - version: 1.2.1 - resolution: "@redux-saga/types@npm:1.2.1" - checksum: 754f183bd1bdd589a29d2b976f666e9ee9e6d28e88268538c11f679d019334999676d5425af14d2a99d5c91c0c87a01e7ac1c4d81a656d93dd529df315bbd0c7 +"@redux-saga/symbols@npm:^1.1.2": + version: 1.1.2 + resolution: "@redux-saga/symbols@npm:1.1.2" + checksum: b75b6979a94ebc9b4db76eef84e05427e2134ca5cc0711592fab2aca621725c561213a900a75068f83b97ef85038688c36e088a07fedd8c076bf8ecfa9899044 languageName: node linkType: hard -"@remix-run/router@npm:1.6.2": - version: 1.6.2 - resolution: "@remix-run/router@npm:1.6.2" - checksum: 5969d313bff6ba5c75917910090cebafda84b9d3b4b453fae6b3d60fea9f938078578ffca769c532ab7ce252cd4a207b78d1024d7c727ab80dd572e62fd3b3f2 +"@redux-saga/types@npm:^1.1.0": + version: 1.1.0 + resolution: "@redux-saga/types@npm:1.1.0" + checksum: e75a6ddc896007e76bd505dee1b3f8401464036ce9db2f4c4ac469215437d61013c17a54b9c342574bac27f2cb6ae628fe24419d17d9f85cb922181d81ec2321 languageName: node linkType: hard "@rmp135/sql-ts@npm:^1.15.1": - version: 1.17.0 - resolution: "@rmp135/sql-ts@npm:1.17.0" + version: 1.15.1 + resolution: "@rmp135/sql-ts@npm:1.15.1" dependencies: change-case: ^4.1.2 handlebars: ^4.7.7 - knex: ^2.4.2 - yargs: ^17.7.2 + knex: ^1.0.3 + yargs: ^17.3.1 peerDependencies: - better-sqlite3: ^8.4.0 - mssql: ^9.1.1 + better-sqlite3: ^7.5.0 + mssql: ^8.0.2 mysql: ^2.18.1 - mysql2: ^3.3.2 - pg: ^8.11.0 - sqlite3: ^5.1.6 + mysql2: ^2.3.3 + pg: ^8.7.3 + sqlite3: ^5.0.2 peerDependenciesMeta: better-sqlite3: optional: true @@ -4250,7 +5940,7 @@ __metadata: optional: true bin: sql-ts: bin/sql-ts - checksum: 88bdd92138a592d900755a73f132af5d1214f644a4f1051959faa59ac693e6c2111a27a89bc39ee45bebe1feadcf82022da59a3f8dbabfa2b9d5b3790ea0d5b2 + checksum: 074831229a0d1611991e3af2c2eda0e8b6e5cccfbe81231d32084ccec037dc989fe4f6ca919eba4d600d78a62d6f5ea0953cfc501706f93a71d6b9a33cc98770 languageName: node linkType: hard @@ -4305,16 +5995,11 @@ __metadata: linkType: hard "@samverschueren/stream-to-observable@npm:^0.3.0": - version: 0.3.1 - resolution: "@samverschueren/stream-to-observable@npm:0.3.1" + version: 0.3.0 + resolution: "@samverschueren/stream-to-observable@npm:0.3.0" dependencies: any-observable: ^0.3.0 - peerDependenciesMeta: - rxjs: - optional: true - zen-observable: - optional: true - checksum: 8ec6d43370f419975295f306699f87989dd64a099a29cf62ddacbbbe32df634f87451504d340e15321e74b0a3ca8a9b447736472f792102e234faa207395e6c9 + checksum: 429db3f41fc34054e7b47f3b330320175e99054eb9fac6796bb121da2635aa577a1c3f53a96d8d32ddf03d212a525492a8e38030868089be66d60fa30eaeeecf languageName: node linkType: hard @@ -4325,6 +6010,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/is@npm:^0.14.0": + version: 0.14.0 + resolution: "@sindresorhus/is@npm:0.14.0" + checksum: 971e0441dd44ba3909b467219a5e242da0fc584048db5324cfb8048148fa8dcc9d44d71e3948972c4f6121d24e5da402ef191420d1266a95f713bb6d6e59c98a + languageName: node + linkType: hard + "@sindresorhus/is@npm:^0.7.0": version: 0.7.0 resolution: "@sindresorhus/is@npm:0.7.0" @@ -4332,12 +6024,21 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.8.1": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" +"@sinonjs/commons@npm:^1, @sinonjs/commons@npm:^1.7.0": + version: 1.7.0 + resolution: "@sinonjs/commons@npm:1.7.0" dependencies: type-detect: 4.0.8 - checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d + checksum: 8eb0c8952439d94584cfb45e770d0eb9b3354301362cf0162b64dabe050d1d7a2f05217a6f7eeb7f1e8d7cbbd5b2ab0e2fd9486b3635195f614a22fe2db0434a + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.2": + version: 1.8.0 + resolution: "@sinonjs/commons@npm:1.8.0" + dependencies: + type-detect: 4.0.8 + checksum: 97639bd46b0b8c9a1160e91b856c743fa231f7b0dd7d308f39a46eec86739b47158a509638a905c14e633489d65175cee42eed4f598ff50e6692c57e39d6edf1 languageName: node linkType: hard @@ -4351,29 +6052,39 @@ __metadata: linkType: hard "@sinonjs/fake-timers@npm:^8.0.1": - version: 8.1.0 - resolution: "@sinonjs/fake-timers@npm:8.1.0" + version: 8.0.1 + resolution: "@sinonjs/fake-timers@npm:8.0.1" dependencies: "@sinonjs/commons": ^1.7.0 - checksum: 09b5a158ce013a6c37613258bad79ca4efeb99b1f59c41c73cca36cac00b258aefcf46eeea970fccf06b989414d86fe9f54c1102272c0c3bdd51a313cea80949 + checksum: 97a78e6f83dd420d73b155a0438cd0fd3392e706b8314530db3d99354689cc714eb3d18540be2aedcd3a3d6070e14f509dce7c6cc817701e9538b3b8ac423eaa languageName: node linkType: hard -"@sinonjs/samsam@npm:^5.3.1": - version: 5.3.1 - resolution: "@sinonjs/samsam@npm:5.3.1" +"@sinonjs/formatio@npm:^5.0.1": + version: 5.0.1 + resolution: "@sinonjs/formatio@npm:5.0.1" + dependencies: + "@sinonjs/commons": ^1 + "@sinonjs/samsam": ^5.0.2 + checksum: 6f751c79a272f491395de1ae3821000526ac487b96d92ca3b4ec9e965ad64df6beac1fb8e5a03017dc9f4b18e8624170899ea3a6af628b8d32e3eb25e8c7e9ed + languageName: node + linkType: hard + +"@sinonjs/samsam@npm:^5.0.2, @sinonjs/samsam@npm:^5.0.3": + version: 5.0.3 + resolution: "@sinonjs/samsam@npm:5.0.3" dependencies: "@sinonjs/commons": ^1.6.0 lodash.get: ^4.4.2 type-detect: ^4.0.8 - checksum: 1c2c49d51b1840775980e9496707d68b936f443896f92e48150c4f7713d14904e576740e52660b602f8a53b665bd5f149c5c733758030758427ddb1621090279 + checksum: c23d1ef0e94f93d690da147904b3b8f59575a5a96d392236083a8260bcee03aeb8528cdd799156252103532bd83d420d45cdb26525d2196caf23e32080d52aa8 languageName: node linkType: hard "@sinonjs/text-encoding@npm:^0.7.1": - version: 0.7.2 - resolution: "@sinonjs/text-encoding@npm:0.7.2" - checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab + version: 0.7.1 + resolution: "@sinonjs/text-encoding@npm:0.7.1" + checksum: 130de0bb568c5f8a611ec21d1a4e3f80ab0c5ec333010f49cfc1adc5cba6d8808699c8a587a46b0f0b016a1f4c1389bc96141e773e8460fcbb441875b2e91ba7 languageName: node linkType: hard @@ -4685,53 +6396,54 @@ __metadata: languageName: node linkType: hard -"@storybook/addons@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/addons@npm:6.5.16" +"@storybook/addons@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/addons@npm:6.3.9" dependencies: - "@storybook/api": 6.5.16 - "@storybook/channels": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/core-events": 6.5.16 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/router": 6.5.16 - "@storybook/theming": 6.5.16 - "@types/webpack-env": ^1.16.0 + "@storybook/api": 6.3.9 + "@storybook/channels": 6.3.9 + "@storybook/client-logger": 6.3.9 + "@storybook/core-events": 6.3.9 + "@storybook/router": 6.3.9 + "@storybook/theming": 6.3.9 core-js: ^3.8.2 global: ^4.4.0 regenerator-runtime: ^0.13.7 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 0463150e4cf7bd2b2aaafdbaadfb4420e4e0a31eb651cfc1a2d7f4b4974caf67878712602474585dfa18f583000608598045594909959d2e9e2ec32ba004392d + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + checksum: ad75562c9f87e0b8ca1e1ad6dd926aad633b22075bf13502baa1138098a029a461e512dcbca282506465234a14d9e6377782c238c8bf04498d543e70961fb24c languageName: node linkType: hard -"@storybook/api@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/api@npm:6.5.16" +"@storybook/api@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/api@npm:6.3.9" dependencies: - "@storybook/channels": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/core-events": 6.5.16 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/router": 6.5.16 + "@reach/router": ^1.3.4 + "@storybook/channels": 6.3.9 + "@storybook/client-logger": 6.3.9 + "@storybook/core-events": 6.3.9 + "@storybook/csf": 0.0.1 + "@storybook/router": 6.3.9 "@storybook/semver": ^7.3.2 - "@storybook/theming": 6.5.16 + "@storybook/theming": 6.3.9 + "@types/reach__router": ^1.3.7 core-js: ^3.8.2 fast-deep-equal: ^3.1.3 global: ^4.4.0 - lodash: ^4.17.21 + lodash: ^4.17.20 memoizerific: ^1.11.3 + qs: ^6.10.0 regenerator-runtime: ^0.13.7 store2: ^2.12.0 - telejson: ^6.0.8 + telejson: ^5.3.2 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: c873189ac1e501825d647903baa125899c492cee962cb86ebb7455110bd09194eeb6943f5c58a1f808ce4ee2e20e305f5604a4e60b07003c82a6fc6ceaee5ea9 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + checksum: f4b9e965faca90afed37ecc8cb74fdc480d9af84bf1f5c437754a675abe3b1807cfbe70a549823ba9b7b4032910e55ab8446ffc911c76002a6c5c29afe44fc82 languageName: node linkType: hard @@ -4832,37 +6544,59 @@ __metadata: languageName: node linkType: hard -"@storybook/builder-webpack4@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/builder-webpack4@npm:6.5.16" +"@storybook/builder-webpack4@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/builder-webpack4@npm:6.3.9" dependencies: "@babel/core": ^7.12.10 - "@storybook/addons": 6.5.16 - "@storybook/api": 6.5.16 - "@storybook/channel-postmessage": 6.5.16 - "@storybook/channels": 6.5.16 - "@storybook/client-api": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/components": 6.5.16 - "@storybook/core-common": 6.5.16 - "@storybook/core-events": 6.5.16 - "@storybook/node-logger": 6.5.16 - "@storybook/preview-web": 6.5.16 - "@storybook/router": 6.5.16 + "@babel/plugin-proposal-class-properties": ^7.12.1 + "@babel/plugin-proposal-decorators": ^7.12.12 + "@babel/plugin-proposal-export-default-from": ^7.12.1 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.12.1 + "@babel/plugin-proposal-object-rest-spread": ^7.12.1 + "@babel/plugin-proposal-optional-chaining": ^7.12.7 + "@babel/plugin-proposal-private-methods": ^7.12.1 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-transform-arrow-functions": ^7.12.1 + "@babel/plugin-transform-block-scoping": ^7.12.12 + "@babel/plugin-transform-classes": ^7.12.1 + "@babel/plugin-transform-destructuring": ^7.12.1 + "@babel/plugin-transform-for-of": ^7.12.1 + "@babel/plugin-transform-parameters": ^7.12.1 + "@babel/plugin-transform-shorthand-properties": ^7.12.1 + "@babel/plugin-transform-spread": ^7.12.1 + "@babel/plugin-transform-template-literals": ^7.12.1 + "@babel/preset-env": ^7.12.11 + "@babel/preset-react": ^7.12.10 + "@babel/preset-typescript": ^7.12.7 + "@storybook/addons": 6.3.9 + "@storybook/api": 6.3.9 + "@storybook/channel-postmessage": 6.3.9 + "@storybook/channels": 6.3.9 + "@storybook/client-api": 6.3.9 + "@storybook/client-logger": 6.3.9 + "@storybook/components": 6.3.9 + "@storybook/core-common": 6.3.9 + "@storybook/core-events": 6.3.9 + "@storybook/node-logger": 6.3.9 + "@storybook/router": 6.3.9 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.5.16 - "@storybook/theming": 6.5.16 - "@storybook/ui": 6.5.16 - "@types/node": ^14.0.10 || ^16.0.0 + "@storybook/theming": 6.3.9 + "@storybook/ui": 6.3.9 + "@types/node": ^14.0.10 "@types/webpack": ^4.41.26 autoprefixer: ^9.8.6 - babel-loader: ^8.0.0 + babel-loader: ^8.2.2 + babel-plugin-macros: ^2.8.0 + babel-plugin-polyfill-corejs3: ^0.1.0 case-sensitive-paths-webpack-plugin: ^2.3.0 core-js: ^3.8.2 css-loader: ^3.6.0 + dotenv-webpack: ^1.8.0 file-loader: ^6.2.0 find-up: ^5.0.0 fork-ts-checker-webpack-plugin: ^4.1.6 + fs-extra: ^9.0.1 glob: ^7.1.6 glob-promise: ^3.4.0 global: ^4.4.0 @@ -4872,6 +6606,7 @@ __metadata: postcss-flexbugs-fixes: ^4.2.1 postcss-loader: ^4.2.0 raw-loader: ^4.0.2 + react-dev-utils: ^11.0.3 stable: ^0.1.8 style-loader: ^1.3.0 terser-webpack-plugin: ^4.2.3 @@ -4881,30 +6616,30 @@ __metadata: webpack: 4 webpack-dev-middleware: ^3.7.3 webpack-filter-warnings-plugin: ^1.2.1 - webpack-hot-middleware: ^2.25.1 + webpack-hot-middleware: ^2.25.0 webpack-virtual-modules: ^0.2.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 5e9137c390db00b4e166df3ca730eb1748f6bac92c841f3f75c37ad5277d6f5565f899de3bb0357fc51ce6821c8a8a8adba724e3dd7a3d1cc80816e09e5b7128 + checksum: f60b54c54618b025de524b1bc3975504b095ed4110c5d7bbea2e7a23959acc6c9cebab55ea54403af6ff09cbf82a7089b746935e48348046ce763c00c449f6a1 languageName: node linkType: hard -"@storybook/channel-postmessage@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/channel-postmessage@npm:6.5.16" +"@storybook/channel-postmessage@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/channel-postmessage@npm:6.3.9" dependencies: - "@storybook/channels": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/core-events": 6.5.16 + "@storybook/channels": 6.3.9 + "@storybook/client-logger": 6.3.9 + "@storybook/core-events": 6.3.9 core-js: ^3.8.2 global: ^4.4.0 qs: ^6.10.0 - telejson: ^6.0.8 - checksum: d3560d81dbf4710cc23b227c12be328d87e627581afcb5fec959f1e795fb2b5824db2a7f03a4ddcd185ec9a37a7025415d8bb43b7a245f2466395908eb3e9bc3 + telejson: ^5.3.2 + checksum: 52e9aa4d949133f756f6cd34b4aab49b9d6717da52e0e688c7ddd40ac47ea291227e181704000052b428182a52ec9d900137bc90510544c5e7942a4c2a97387e languageName: node linkType: hard @@ -4922,19 +6657,6 @@ __metadata: languageName: node linkType: hard -"@storybook/channel-websocket@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/channel-websocket@npm:6.5.16" - dependencies: - "@storybook/channels": 6.5.16 - "@storybook/client-logger": 6.5.16 - core-js: ^3.8.2 - global: ^4.4.0 - telejson: ^6.0.8 - checksum: 355c85f22d7cc65764871852debe347c43c3fe92d6a0caa64aecbe2dce78d4bf73b98e997099f9e4e7c204ad5821b979939b0700e446fa26478c1e1ba48e7380 - languageName: node - linkType: hard - "@storybook/channel-websocket@npm:7.0.18": version: 7.0.18 resolution: "@storybook/channel-websocket@npm:7.0.18" @@ -4947,14 +6669,14 @@ __metadata: languageName: node linkType: hard -"@storybook/channels@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/channels@npm:6.5.16" +"@storybook/channels@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/channels@npm:6.3.9" dependencies: core-js: ^3.8.2 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 - checksum: 3d7f7bc19ed7b250976e00e02ab544408806b439106bed18a5db9815612f6c5df9bdf7c1a97b5a40ba3194184ebe7e4c75e2bca5496025d6b26afefa95cfccbd + checksum: 5482954043e5b547a52a8d985479a8b4c2f7cf6a6c1bf09273111a928b6f69a2375d7f528308fb353982acbc3d74541f15c30e9b0076644696f91b30904452a2 languageName: node linkType: hard @@ -5015,44 +6737,42 @@ __metadata: languageName: node linkType: hard -"@storybook/client-api@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/client-api@npm:6.5.16" +"@storybook/client-api@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/client-api@npm:6.3.9" dependencies: - "@storybook/addons": 6.5.16 - "@storybook/channel-postmessage": 6.5.16 - "@storybook/channels": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/core-events": 6.5.16 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/store": 6.5.16 + "@storybook/addons": 6.3.9 + "@storybook/channel-postmessage": 6.3.9 + "@storybook/channels": 6.3.9 + "@storybook/client-logger": 6.3.9 + "@storybook/core-events": 6.3.9 + "@storybook/csf": 0.0.1 "@types/qs": ^6.9.5 "@types/webpack-env": ^1.16.0 core-js: ^3.8.2 - fast-deep-equal: ^3.1.3 global: ^4.4.0 - lodash: ^4.17.21 + lodash: ^4.17.20 memoizerific: ^1.11.3 qs: ^6.10.0 regenerator-runtime: ^0.13.7 + stable: ^0.1.8 store2: ^2.12.0 - synchronous-promise: ^2.0.15 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: a62276fa67d2c3cc766ea9145d3798c0c8ef3f9de9fb18e7c43d67e39226f47a2546c4319ccc6075545df65dc4fc65bdb97e904062daf426be6534767eacada6 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + checksum: 5dc32a72a902131bfd7e0567009dfb1396a531ecdeb3305a299cabf457d71177f14910a8bacb995c9fc24a5b96e23b00d0e5632c7b1dbb5e5c01bff4f2bb6638 languageName: node linkType: hard -"@storybook/client-logger@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/client-logger@npm:6.5.16" +"@storybook/client-logger@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/client-logger@npm:6.3.9" dependencies: core-js: ^3.8.2 global: ^4.4.0 - checksum: 0a86959b1bacb1b893e282173b48afe9c857b8cdc67a47ad87a7f11ba7dbc15ebc4f0d05c07dffb988e0cd3e1de0f09f300ee06c66afe4c50e9be83aaed75971 + checksum: 9e48658d0340731b704d24731f5562ee84d9db2c2dd38d7838cbd09560de2126942df047dff2ce465580d26669b52d7b6b26c2db555570240af440878641c211 languageName: node linkType: hard @@ -5086,22 +6806,38 @@ __metadata: languageName: node linkType: hard -"@storybook/components@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/components@npm:6.5.16" +"@storybook/components@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/components@npm:6.3.9" dependencies: - "@storybook/client-logger": 6.5.16 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/theming": 6.5.16 + "@popperjs/core": ^2.6.0 + "@storybook/client-logger": 6.3.9 + "@storybook/csf": 0.0.1 + "@storybook/theming": 6.3.9 + "@types/color-convert": ^2.0.0 + "@types/overlayscrollbars": ^1.12.0 + "@types/react-syntax-highlighter": 11.0.5 + color-convert: ^2.0.1 core-js: ^3.8.2 + fast-deep-equal: ^3.1.3 + global: ^4.4.0 + lodash: ^4.17.20 + markdown-to-jsx: ^7.1.3 memoizerific: ^1.11.3 - qs: ^6.10.0 + overlayscrollbars: ^1.13.1 + polished: ^4.0.5 + prop-types: ^15.7.2 + react-colorful: ^5.1.2 + react-popper-tooltip: ^3.1.1 + react-syntax-highlighter: ^13.5.3 + react-textarea-autosize: ^8.3.0 regenerator-runtime: ^0.13.7 + ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 1caf822bf1293ca043822f1c77f05c0f01631e8a61adad6bc4651ba9be78c8f4822ba0905e39c8feaa3fb44ae10422e9ccd3004348b18531fb82c54cfcea4fa9 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + checksum: 0d7e213ae162059a28d34a09a335e389039f0a0e07f11aa5d31820729e085f7d566f048fd3adc261a9d80db46c6bcc4aec6b076a5c4452047415f34d7241ac97 languageName: node linkType: hard @@ -5124,38 +6860,35 @@ __metadata: languageName: node linkType: hard -"@storybook/core-client@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/core-client@npm:6.5.16" +"@storybook/core-client@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/core-client@npm:6.3.9" dependencies: - "@storybook/addons": 6.5.16 - "@storybook/channel-postmessage": 6.5.16 - "@storybook/channel-websocket": 6.5.16 - "@storybook/client-api": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/core-events": 6.5.16 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/preview-web": 6.5.16 - "@storybook/store": 6.5.16 - "@storybook/ui": 6.5.16 + "@storybook/addons": 6.3.9 + "@storybook/channel-postmessage": 6.3.9 + "@storybook/client-api": 6.3.9 + "@storybook/client-logger": 6.3.9 + "@storybook/core-events": 6.3.9 + "@storybook/csf": 0.0.1 + "@storybook/ui": 6.3.9 airbnb-js-shims: ^2.2.1 ansi-to-html: ^0.6.11 core-js: ^3.8.2 global: ^4.4.0 - lodash: ^4.17.21 + lodash: ^4.17.20 qs: ^6.10.0 regenerator-runtime: ^0.13.7 ts-dedent: ^2.0.0 unfetch: ^4.2.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 webpack: "*" peerDependenciesMeta: typescript: optional: true - checksum: 467710777ddd740c431cf65035ecc489daae2fc5f4844a40b7339b806535e239140f40442a0e1d89356e107169c39d9e84d726c01982ed4609c043b6861e0778 + checksum: 7417f0e5efa608122fa2ed741d9f7bb128261a345bf7c747ca9f50b73bdc88134a6a617d68bbe7428bcce3f28c31bfec196bc9f598ccb1f815d2bc3f1969ecf2 languageName: node linkType: hard @@ -5169,9 +6902,9 @@ __metadata: languageName: node linkType: hard -"@storybook/core-common@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/core-common@npm:6.5.16" +"@storybook/core-common@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/core-common@npm:6.3.9" dependencies: "@babel/core": ^7.12.10 "@babel/plugin-proposal-class-properties": ^7.12.1 @@ -5181,7 +6914,6 @@ __metadata: "@babel/plugin-proposal-object-rest-spread": ^7.12.1 "@babel/plugin-proposal-optional-chaining": ^7.12.7 "@babel/plugin-proposal-private-methods": ^7.12.1 - "@babel/plugin-proposal-private-property-in-object": ^7.12.1 "@babel/plugin-syntax-dynamic-import": ^7.8.3 "@babel/plugin-transform-arrow-functions": ^7.12.1 "@babel/plugin-transform-block-scoping": ^7.12.12 @@ -5195,11 +6927,13 @@ __metadata: "@babel/preset-react": ^7.12.10 "@babel/preset-typescript": ^7.12.7 "@babel/register": ^7.12.1 - "@storybook/node-logger": 6.5.16 + "@storybook/node-logger": 6.3.9 "@storybook/semver": ^7.3.2 - "@types/node": ^14.0.10 || ^16.0.0 + "@types/glob-base": ^0.3.0 + "@types/micromatch": ^4.0.1 + "@types/node": ^14.0.10 "@types/pretty-hrtime": ^1.0.0 - babel-loader: ^8.0.0 + babel-loader: ^8.2.2 babel-plugin-macros: ^3.0.1 babel-plugin-polyfill-corejs3: ^0.1.0 chalk: ^4.1.0 @@ -5208,28 +6942,25 @@ __metadata: file-system-cache: ^1.0.5 find-up: ^5.0.0 fork-ts-checker-webpack-plugin: ^6.0.4 - fs-extra: ^9.0.1 glob: ^7.1.6 - handlebars: ^4.7.7 + glob-base: ^0.3.0 interpret: ^2.2.0 - json5: ^2.2.3 + json5: ^2.1.3 lazy-universal-dotenv: ^3.0.1 - picomatch: ^2.3.0 + micromatch: ^4.0.2 pkg-dir: ^5.0.0 pretty-hrtime: ^1.0.3 resolve-from: ^5.0.0 - slash: ^3.0.0 - telejson: ^6.0.8 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 webpack: 4 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 886a701876599939950c3c98e306b373cd026c7b995ca08d88475b3f35624a53763459d6b202728ec703e99126813a254b956c2d0fe7e85f99dcb5765a999b19 + checksum: 4d636eaeff7ca829338f36e0678ce62374485b82bb2f8969d02ee32daa4901e7be6cc84506686db7378d4f6b38566d36ceaa9f25b757108fba11dc9b6d50e3d6 languageName: node linkType: hard @@ -5260,12 +6991,12 @@ __metadata: languageName: node linkType: hard -"@storybook/core-events@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/core-events@npm:6.5.16" +"@storybook/core-events@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/core-events@npm:6.3.9" dependencies: core-js: ^3.8.2 - checksum: 1844bdabfb7828af7ddd54129fbb321bf65d8b65459eaac99c8f3f94c7c2f0ee000468362758076444083f863a3bc835ecd1e4f2128524eb5c00c8a576473bc9 + checksum: 436c677ae2d9d5791eb0c427b0173541b5e4cbfdb87a76f896362cbfec7feaedfcf7a38eec0a15a92dfb90590106393010ec76177949759851f3bf4cf110b11c languageName: node linkType: hard @@ -5276,58 +7007,49 @@ __metadata: languageName: node linkType: hard -"@storybook/core-server@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/core-server@npm:6.5.16" +"@storybook/core-server@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/core-server@npm:6.3.9" dependencies: "@discoveryjs/json-ext": ^0.5.3 - "@storybook/builder-webpack4": 6.5.16 - "@storybook/core-client": 6.5.16 - "@storybook/core-common": 6.5.16 - "@storybook/core-events": 6.5.16 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/csf-tools": 6.5.16 - "@storybook/manager-webpack4": 6.5.16 - "@storybook/node-logger": 6.5.16 + "@storybook/builder-webpack4": 6.3.9 + "@storybook/core-client": 6.3.9 + "@storybook/core-common": 6.3.9 + "@storybook/csf-tools": 6.3.9 + "@storybook/manager-webpack4": 6.3.9 + "@storybook/node-logger": 6.3.9 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.5.16 - "@storybook/telemetry": 6.5.16 - "@types/node": ^14.0.10 || ^16.0.0 + "@types/node": ^14.0.10 "@types/node-fetch": ^2.5.7 "@types/pretty-hrtime": ^1.0.0 "@types/webpack": ^4.41.26 better-opn: ^2.1.1 - boxen: ^5.1.2 + boxen: ^4.2.0 chalk: ^4.1.0 - cli-table3: ^0.6.1 + cli-table3: 0.6.0 commander: ^6.2.1 compression: ^1.7.4 core-js: ^3.8.2 - cpy: ^8.1.2 + cpy: ^8.1.1 detect-port: ^1.3.0 express: ^4.17.1 + file-system-cache: ^1.0.5 fs-extra: ^9.0.1 - global: ^4.4.0 globby: ^11.0.2 - ip: ^2.0.0 - lodash: ^4.17.21 - node-fetch: ^2.6.7 - open: ^8.4.0 + ip: ^1.1.5 + node-fetch: ^2.6.1 pretty-hrtime: ^1.0.3 prompts: ^2.4.0 regenerator-runtime: ^0.13.7 serve-favicon: ^2.5.0 - slash: ^3.0.0 - telejson: ^6.0.8 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 - watchpack: ^2.2.0 webpack: 4 - ws: ^8.2.3 - x-default-browser: ^0.4.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + "@storybook/builder-webpack5": 6.3.9 + "@storybook/manager-webpack5": 6.3.9 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 peerDependenciesMeta: "@storybook/builder-webpack5": optional: true @@ -5335,7 +7057,7 @@ __metadata: optional: true typescript: optional: true - checksum: 2027adba39b2e0a5c3664241f48ec256a92866755aace96f3b8e2064b50237bbcd4e814bc58a1084006baae41c48d7d0eccefc9867d84e17d68d7f969e65f149 + checksum: c7a79fa0e62b5425246092ff59c62f404919c577bb2bf5ec9f6d249c762f258f220111b84d2847b1382b717ed4cff0772adde93ca5879f60f1a48877ae57971c languageName: node linkType: hard @@ -5389,24 +7111,22 @@ __metadata: languageName: node linkType: hard -"@storybook/core@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/core@npm:6.5.16" +"@storybook/core@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/core@npm:6.3.9" dependencies: - "@storybook/core-client": 6.5.16 - "@storybook/core-server": 6.5.16 + "@storybook/core-client": 6.3.9 + "@storybook/core-server": 6.3.9 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - webpack: "*" + "@storybook/builder-webpack5": 6.3.9 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 peerDependenciesMeta: "@storybook/builder-webpack5": optional: true - "@storybook/manager-webpack5": - optional: true typescript: optional: true - checksum: f1732338741692007230a351419ef3aa4e387810d7d0c0e6ffb1159e1de4d757199f2b543cf4f6413fc40acda514b908d2fd9b3e0d56e3f6cec1e3a82c2fcc10 + checksum: 586ac0dce5c3021d1f14833d96f47efaa2c3563f61562a7e59a2a0bd1704a7793210f436b0f014cf67a5e22676a1e6f70267ea0920cb9023faaafbca3d1407fd languageName: node linkType: hard @@ -5420,30 +7140,25 @@ __metadata: languageName: node linkType: hard -"@storybook/csf-tools@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/csf-tools@npm:6.5.16" +"@storybook/csf-tools@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/csf-tools@npm:6.3.9" dependencies: - "@babel/core": ^7.12.10 "@babel/generator": ^7.12.11 "@babel/parser": ^7.12.11 "@babel/plugin-transform-react-jsx": ^7.12.12 "@babel/preset-env": ^7.12.11 "@babel/traverse": ^7.12.11 "@babel/types": ^7.12.11 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/mdx1-csf": ^0.0.1 + "@mdx-js/mdx": ^1.6.22 + "@storybook/csf": ^0.0.1 core-js: ^3.8.2 fs-extra: ^9.0.1 - global: ^4.4.0 + js-string-escape: ^1.0.1 + lodash: ^4.17.20 + prettier: ~2.2.1 regenerator-runtime: ^0.13.7 - ts-dedent: ^2.0.0 - peerDependencies: - "@storybook/mdx2-csf": ^0.0.3 - peerDependenciesMeta: - "@storybook/mdx2-csf": - optional: true - checksum: ee71a47d90186c35fc1dbcb6ece2888ff4d730bde823bb1bd242d802b74045b482d2c469f3a91687b691b6f828ce449b182896d1912033846b9746457ee960ba + checksum: a37868772e85c6d5ee33b568d3ad46222b9e05d9a6b11b1e977190585a17c49db3eb1831c8cab197658e62bea5e428b4c43dd7d2c99c2b3bbaa39068db3ef766 languageName: node linkType: hard @@ -5464,12 +7179,12 @@ __metadata: languageName: node linkType: hard -"@storybook/csf@npm:0.0.2--canary.4566f4d.1": - version: 0.0.2--canary.4566f4d.1 - resolution: "@storybook/csf@npm:0.0.2--canary.4566f4d.1" +"@storybook/csf@npm:0.0.1, @storybook/csf@npm:^0.0.1": + version: 0.0.1 + resolution: "@storybook/csf@npm:0.0.1" dependencies: lodash: ^4.17.15 - checksum: afac948e1eae72f020b3708538dd2553524f291bc129ecb2941983668fd62b17448e52f9c9be5b8edeea7a64d96f620bbac78b8acc10ece11b8279930a1deb03 + checksum: fb57fa028b08a51edf44e1a2bf4be40a4607f5c6ccb58aae8924f476a42b9bbd61a0ad521cfc82196f23e6a912caae0a615e70a755e6800b284c91c509fd2de6 languageName: node linkType: hard @@ -5489,21 +7204,6 @@ __metadata: languageName: node linkType: hard -"@storybook/docs-tools@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/docs-tools@npm:6.5.16" - dependencies: - "@babel/core": ^7.12.10 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/store": 6.5.16 - core-js: ^3.8.2 - doctrine: ^3.0.0 - lodash: ^4.17.21 - regenerator-runtime: ^0.13.7 - checksum: 6351c5b1cbe5820f0f0dfcc3e4e7da8cca3c8d73a06c5803e65cb86e9e81ccbae53cec8e1b579af0ac9a5bbb6d4b6ac03ffe26af2220dc5dfe8f065067f0e2d7 - languageName: node - linkType: hard - "@storybook/docs-tools@npm:7.0.18": version: 7.0.18 resolution: "@storybook/docs-tools@npm:7.0.18" @@ -5565,38 +7265,40 @@ __metadata: languageName: node linkType: hard -"@storybook/manager-webpack4@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/manager-webpack4@npm:6.5.16" +"@storybook/manager-webpack4@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/manager-webpack4@npm:6.3.9" dependencies: "@babel/core": ^7.12.10 "@babel/plugin-transform-template-literals": ^7.12.1 "@babel/preset-react": ^7.12.10 - "@storybook/addons": 6.5.16 - "@storybook/core-client": 6.5.16 - "@storybook/core-common": 6.5.16 - "@storybook/node-logger": 6.5.16 - "@storybook/theming": 6.5.16 - "@storybook/ui": 6.5.16 - "@types/node": ^14.0.10 || ^16.0.0 + "@storybook/addons": 6.3.9 + "@storybook/core-client": 6.3.9 + "@storybook/core-common": 6.3.9 + "@storybook/node-logger": 6.3.9 + "@storybook/theming": 6.3.9 + "@storybook/ui": 6.3.9 + "@types/node": ^14.0.10 "@types/webpack": ^4.41.26 - babel-loader: ^8.0.0 + babel-loader: ^8.2.2 case-sensitive-paths-webpack-plugin: ^2.3.0 chalk: ^4.1.0 core-js: ^3.8.2 css-loader: ^3.6.0 + dotenv-webpack: ^1.8.0 express: ^4.17.1 file-loader: ^6.2.0 + file-system-cache: ^1.0.5 find-up: ^5.0.0 fs-extra: ^9.0.1 html-webpack-plugin: ^4.0.0 - node-fetch: ^2.6.7 + node-fetch: ^2.6.1 pnp-webpack-plugin: 1.6.4 read-pkg-up: ^7.0.1 regenerator-runtime: ^0.13.7 resolve-from: ^5.0.0 style-loader: ^1.3.0 - telejson: ^6.0.8 + telejson: ^5.3.2 terser-webpack-plugin: ^4.2.3 ts-dedent: ^2.0.0 url-loader: ^4.1.1 @@ -5605,12 +7307,12 @@ __metadata: webpack-dev-middleware: ^3.7.3 webpack-virtual-modules: ^0.2.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 873c871c822ecde30fbd95e9517549a18c5bb2de46d6160d6dcd7c1b5635fda2073b5bc4bd4d87e72de6e8df8bccf39b81f062e07cd7a23ffb4b43293e488fbb + checksum: be6d96aad4aeb6189d8c128074f9edcf110770c1f4073ec38f93a755532767f7ce2e84b7dcaaf4125d6d5e69ef71b11f41068d7998ae3dffc4f0e12e81595be1 languageName: node linkType: hard @@ -5621,25 +7323,6 @@ __metadata: languageName: node linkType: hard -"@storybook/mdx1-csf@npm:^0.0.1": - version: 0.0.1 - resolution: "@storybook/mdx1-csf@npm:0.0.1" - dependencies: - "@babel/generator": ^7.12.11 - "@babel/parser": ^7.12.11 - "@babel/preset-env": ^7.12.11 - "@babel/types": ^7.12.11 - "@mdx-js/mdx": ^1.6.22 - "@types/lodash": ^4.14.167 - js-string-escape: ^1.0.1 - loader-utils: ^2.0.0 - lodash: ^4.17.21 - prettier: ">=2.2.1 <=2.3.0" - ts-dedent: ^2.0.0 - checksum: 34f952f4d00d4fbf680aadea53ca0d9b02b10c94ea492a47a6df916474ea1e36d08eece70ffaba760a4cdf6f634a8684360dc49355cf8a1461050b8a470d2666 - languageName: node - linkType: hard - "@storybook/mdx2-csf@npm:^1.0.0": version: 1.1.0 resolution: "@storybook/mdx2-csf@npm:1.1.0" @@ -5647,16 +7330,16 @@ __metadata: languageName: node linkType: hard -"@storybook/node-logger@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/node-logger@npm:6.5.16" +"@storybook/node-logger@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/node-logger@npm:6.3.9" dependencies: "@types/npmlog": ^4.1.2 chalk: ^4.1.0 core-js: ^3.8.2 - npmlog: ^5.0.1 + npmlog: ^4.1.2 pretty-hrtime: ^1.0.3 - checksum: 4ae47c03b6cec6b820e0e482e6f6675bf745fca5c124eb919240c0339b9f4a1b110c8fde7c5ddbc1748d3992773c61d37ba1f5c489b42279cf03517d4e1d51c5 + checksum: b357247d6996123ebd07c91258bd8f9a5775cf130c36e860e9ba9bc1c6fe63316eb68ba728ea674e3597304af78cbeb787f482126475cc403deddf3a3dc40169 languageName: node linkType: hard @@ -5702,33 +7385,6 @@ __metadata: languageName: node linkType: hard -"@storybook/preview-web@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/preview-web@npm:6.5.16" - dependencies: - "@storybook/addons": 6.5.16 - "@storybook/channel-postmessage": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/core-events": 6.5.16 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/store": 6.5.16 - ansi-to-html: ^0.6.11 - core-js: ^3.8.2 - global: ^4.4.0 - lodash: ^4.17.21 - qs: ^6.10.0 - regenerator-runtime: ^0.13.7 - synchronous-promise: ^2.0.15 - ts-dedent: ^2.0.0 - unfetch: ^4.2.0 - util-deprecate: ^1.0.2 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 6161c96e9ee459ef93c3d972374ce339ae57d0c5fa25730007484e4824f79a34814110431db97031107558e5ce41259710f8a54564e8975db0215b78c5572a1b - languageName: node - linkType: hard - "@storybook/preview@npm:7.0.18": version: 7.0.18 resolution: "@storybook/preview@npm:7.0.18" @@ -5736,21 +7392,21 @@ __metadata: languageName: node linkType: hard -"@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0": - version: 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0 - resolution: "@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0" +"@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.253f8c1.0": + version: 1.0.2-canary.253f8c1.0 + resolution: "@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.253f8c1.0" dependencies: debug: ^4.1.1 endent: ^2.0.1 find-cache-dir: ^3.3.1 flat-cache: ^3.0.4 micromatch: ^4.0.2 - react-docgen-typescript: ^2.1.1 + react-docgen-typescript: ^2.0.0 tslib: ^2.0.0 peerDependencies: typescript: ">= 3.x" webpack: ">= 4" - checksum: 91a3015d384e93d9ffb4def904cad51218eb1a9eaf504c758083f2988a97d8bf8748bc280aa629864eb26fd9f7fc05bd087df95383d719e0c914c722016804b9 + checksum: 7d2d1309e9291fd9c9a776f17df8682036352548384bc213dcf7625ccae770c13db396ec3a07917810651eee91fe4577ee7c1fe913fac416df7d0ae3334ef673 languageName: node linkType: hard @@ -5820,83 +7476,67 @@ __metadata: linkType: hard "@storybook/react@npm:^6.3.9": - version: 6.5.16 - resolution: "@storybook/react@npm:6.5.16" + version: 6.3.9 + resolution: "@storybook/react@npm:6.3.9" dependencies: "@babel/preset-flow": ^7.12.1 "@babel/preset-react": ^7.12.10 - "@pmmmwh/react-refresh-webpack-plugin": ^0.5.3 - "@storybook/addons": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/core": 6.5.16 - "@storybook/core-common": 6.5.16 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/docs-tools": 6.5.16 - "@storybook/node-logger": 6.5.16 - "@storybook/react-docgen-typescript-plugin": 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0 + "@pmmmwh/react-refresh-webpack-plugin": ^0.4.3 + "@storybook/addons": 6.3.9 + "@storybook/core": 6.3.9 + "@storybook/core-common": 6.3.9 + "@storybook/node-logger": 6.3.9 + "@storybook/react-docgen-typescript-plugin": 1.0.2-canary.253f8c1.0 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.5.16 - "@types/estree": ^0.0.51 - "@types/node": ^14.14.20 || ^16.0.0 "@types/webpack-env": ^1.16.0 - acorn: ^7.4.1 - acorn-jsx: ^5.3.1 - acorn-walk: ^7.2.0 babel-plugin-add-react-displayname: ^0.0.5 + babel-plugin-named-asset-import: ^0.3.1 babel-plugin-react-docgen: ^4.2.1 core-js: ^3.8.2 - escodegen: ^2.0.0 - fs-extra: ^9.0.1 global: ^4.4.0 - html-tags: ^3.1.0 - lodash: ^4.17.21 + lodash: ^4.17.20 prop-types: ^15.7.2 - react-element-to-jsx-string: ^14.3.4 - react-refresh: ^0.11.0 + react-dev-utils: ^11.0.3 + react-refresh: ^0.8.3 read-pkg-up: ^7.0.1 regenerator-runtime: ^0.13.7 ts-dedent: ^2.0.0 - util-deprecate: ^1.0.2 - webpack: ">=4.43.0 <6.0.0" + webpack: 4 peerDependencies: "@babel/core": ^7.11.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - require-from-string: ^2.0.2 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 peerDependenciesMeta: "@babel/core": optional: true - "@storybook/builder-webpack4": - optional: true - "@storybook/builder-webpack5": - optional: true - "@storybook/manager-webpack4": - optional: true - "@storybook/manager-webpack5": - optional: true typescript: optional: true bin: build-storybook: bin/build.js start-storybook: bin/index.js storybook-server: bin/index.js - checksum: c5396e748ef13acdb2590dc15ff0b3d95d3599abd0c372786d707164d3f71e46836240195dcd6f4bce6f90d2792602f6d31373fc87e069ef3c73a63d1e9a1289 + checksum: be285fa79857c288634c9e20b16fac455a56aef77e968587c8ebf8298f01c4b8a8493357566bb6059611403c973d24bf2f7937c71d9f185173ac7311dce777aa languageName: node linkType: hard -"@storybook/router@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/router@npm:6.5.16" +"@storybook/router@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/router@npm:6.3.9" dependencies: - "@storybook/client-logger": 6.5.16 + "@reach/router": ^1.3.4 + "@storybook/client-logger": 6.3.9 + "@types/reach__router": ^1.3.7 core-js: ^3.8.2 + fast-deep-equal: ^3.1.3 + global: ^4.4.0 + lodash: ^4.17.20 memoizerific: ^1.11.3 qs: ^6.10.0 - regenerator-runtime: ^0.13.7 + ts-dedent: ^2.0.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 2812b93997026b1d85f02072d04f18e98e24de288efb73402f8d15ececd390e13dc620ef011268e09986c629f497ffa03230c2431e89b4e37c01b70761be2c6d + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + checksum: 73ce89bd0b9b9234ce32a0d6b5cd9a9ab4c3f268bd59d4a5513b62a0396f73e9d5a17d9be0c87e82056879af51d3fc0b38766836b90a3fd8a779ee24517231a1 languageName: node linkType: hard @@ -5926,52 +7566,6 @@ __metadata: languageName: node linkType: hard -"@storybook/store@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/store@npm:6.5.16" - dependencies: - "@storybook/addons": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/core-events": 6.5.16 - "@storybook/csf": 0.0.2--canary.4566f4d.1 - core-js: ^3.8.2 - fast-deep-equal: ^3.1.3 - global: ^4.4.0 - lodash: ^4.17.21 - memoizerific: ^1.11.3 - regenerator-runtime: ^0.13.7 - slash: ^3.0.0 - stable: ^0.1.8 - synchronous-promise: ^2.0.15 - ts-dedent: ^2.0.0 - util-deprecate: ^1.0.2 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: f438fb020af240e23348742b2936a326bef1f7ffd489fe9f39cfd516310ab592a11609205fdacd11090b0c0b6bc72c75dff986085a6a97acc5efa64829a49309 - languageName: node - linkType: hard - -"@storybook/telemetry@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/telemetry@npm:6.5.16" - dependencies: - "@storybook/client-logger": 6.5.16 - "@storybook/core-common": 6.5.16 - chalk: ^4.1.0 - core-js: ^3.8.2 - detect-package-manager: ^2.0.1 - fetch-retry: ^5.0.2 - fs-extra: ^9.0.1 - global: ^4.4.0 - isomorphic-unfetch: ^3.1.0 - nanoid: ^3.3.1 - read-pkg-up: ^7.0.1 - regenerator-runtime: ^0.13.7 - checksum: 21eef590b04db8ee85b0b1d875d8646e26492b3e90538a248314f92d6ab0642ec65db09c5d2bc0d7f547f0fa6b83ca4442bdc115b400861360e02d8cf179497e - languageName: node - linkType: hard - "@storybook/telemetry@npm:7.0.18": version: 7.0.18 resolution: "@storybook/telemetry@npm:7.0.18" @@ -6002,18 +7596,26 @@ __metadata: languageName: node linkType: hard -"@storybook/theming@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/theming@npm:6.5.16" +"@storybook/theming@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/theming@npm:6.3.9" dependencies: - "@storybook/client-logger": 6.5.16 + "@emotion/core": ^10.1.1 + "@emotion/is-prop-valid": ^0.8.6 + "@emotion/styled": ^10.0.27 + "@storybook/client-logger": 6.3.9 core-js: ^3.8.2 + deep-object-diff: ^1.1.0 + emotion-theming: ^10.0.27 + global: ^4.4.0 memoizerific: ^1.11.3 - regenerator-runtime: ^0.13.7 + polished: ^4.0.5 + resolve-from: ^5.0.0 + ts-dedent: ^2.0.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 349affa5c5208240291a5d24c73d852e220bfaf36b8fda70564aec1cac6070248ce7566ccb755c55a6ce0844ab2bbfd55881f6f788240b38cb407714e393c6f3 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + checksum: 0c1cf317dc996f8d9898169a7d9866a63e4f86608f23cdbea42fb7e47ca971131bdcc6f0eee843fb5d51c13f98f6c09dce2ea93dc027a8eec0a146f46de0c34b languageName: node linkType: hard @@ -6044,28 +7646,43 @@ __metadata: languageName: node linkType: hard -"@storybook/ui@npm:6.5.16": - version: 6.5.16 - resolution: "@storybook/ui@npm:6.5.16" +"@storybook/ui@npm:6.3.9": + version: 6.3.9 + resolution: "@storybook/ui@npm:6.3.9" dependencies: - "@storybook/addons": 6.5.16 - "@storybook/api": 6.5.16 - "@storybook/channels": 6.5.16 - "@storybook/client-logger": 6.5.16 - "@storybook/components": 6.5.16 - "@storybook/core-events": 6.5.16 - "@storybook/router": 6.5.16 + "@emotion/core": ^10.1.1 + "@storybook/addons": 6.3.9 + "@storybook/api": 6.3.9 + "@storybook/channels": 6.3.9 + "@storybook/client-logger": 6.3.9 + "@storybook/components": 6.3.9 + "@storybook/core-events": 6.3.9 + "@storybook/router": 6.3.9 "@storybook/semver": ^7.3.2 - "@storybook/theming": 6.5.16 + "@storybook/theming": 6.3.9 + "@types/markdown-to-jsx": ^6.11.3 + copy-to-clipboard: ^3.3.1 core-js: ^3.8.2 + core-js-pure: ^3.8.2 + downshift: ^6.0.15 + emotion-theming: ^10.0.27 + fuse.js: ^3.6.1 + global: ^4.4.0 + lodash: ^4.17.20 + markdown-to-jsx: ^6.11.4 memoizerific: ^1.11.3 + polished: ^4.0.5 qs: ^6.10.0 + react-draggable: ^4.4.3 + react-helmet-async: ^1.0.7 + react-sizeme: ^3.0.1 regenerator-runtime: ^0.13.7 resolve-from: ^5.0.0 + store2: ^2.12.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: bfebcf4d56dc5fd6024eaa08fe50aecc3c348670b7c0ec6b467680d64d525421580b9c98839bcaf1e2a9e69b78478a21c9943a9a392b49a0405b4784038b2eba + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + checksum: 087e2e597ff1c5461542e0ceb8b60a39e0208d29edfeb0890cc7dff34dd82d0f52d003040c9f850d280f2dcd33e4596a7ac219e4832c6091ca2e0b36c50fd845 languageName: node linkType: hard @@ -6210,31 +7827,39 @@ __metadata: languageName: node linkType: hard +"@szmarczak/http-timer@npm:^1.1.2": + version: 1.1.2 + resolution: "@szmarczak/http-timer@npm:1.1.2" + dependencies: + defer-to-connect: ^1.0.1 + checksum: 4d9158061c5f397c57b4988cde33a163244e4f02df16364f103971957a32886beb104d6180902cbe8b38cb940e234d9f98a4e486200deca621923f62f50a06fe + languageName: node + linkType: hard + "@testing-library/cypress@npm:^7.0.0": - version: 7.0.7 - resolution: "@testing-library/cypress@npm:7.0.7" + version: 7.0.1 + resolution: "@testing-library/cypress@npm:7.0.1" dependencies: - "@babel/runtime": ^7.12.5 - "@testing-library/dom": ^7.29.6 + "@babel/runtime": ^7.11.2 + "@testing-library/dom": ^7.22.2 peerDependencies: - cypress: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: e19c24c4d5017f08eb9dfd96bf3400e294a9b3f96395756120d9f016e70905ff047bbb2d45121f3dc79a65dae09a9d7bab540e1efda295c05e44d5e929f13863 + cypress: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + checksum: 7870ce6b19b0fcfc6b9de3401239285e39480dbb053b6b3c7b673b6321e14fc1bda1c7dab82b4f21317fe2b0e258460274235914385a233a51299af92b8a363c languageName: node linkType: hard -"@testing-library/dom@npm:^7.28.1, @testing-library/dom@npm:^7.29.6": - version: 7.31.2 - resolution: "@testing-library/dom@npm:7.31.2" +"@testing-library/dom@npm:^7.22.2, @testing-library/dom@npm:^7.24.2": + version: 7.24.3 + resolution: "@testing-library/dom@npm:7.24.3" dependencies: "@babel/code-frame": ^7.10.4 - "@babel/runtime": ^7.12.5 + "@babel/runtime": ^7.10.3 "@types/aria-query": ^4.2.0 aria-query: ^4.2.2 chalk: ^4.1.0 - dom-accessibility-api: ^0.5.6 - lz-string: ^1.4.4 - pretty-format: ^26.6.2 - checksum: 54fbedd1ecdfe1d47be2e592b98d18b2ab9d7e731f57231caf9b152593fe7329fe5ebe219e0e5d1e0df5b1ab803121cb8acd8b73bd1fb292bfdc2c55663eb01d + dom-accessibility-api: ^0.5.1 + pretty-format: ^26.4.2 + checksum: 0558de0bebc0cec2239a460ff3fdfe247d92f92d31ad32457ec7078554d3073312195be4c14ed359638919fc63ffa661379c156cd29a58f62df6adcea7062529 languageName: node linkType: hard @@ -6255,43 +7880,42 @@ __metadata: linkType: hard "@testing-library/jest-dom@npm:^5.11.0": - version: 5.16.5 - resolution: "@testing-library/jest-dom@npm:5.16.5" + version: 5.11.4 + resolution: "@testing-library/jest-dom@npm:5.11.4" 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 + aria-query: ^4.2.2 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 - checksum: 94911f901a8031f3e489d04ac057cb5373621230f5d92bed80e514e24b069fb58a3166d1dd86963e55f078a1bd999da595e2ab96ed95f452d477e272937d792a + checksum: 15ab63d61ed2faebe85116c46b445d63ee02486517c203d250a2302a0051d8d10cbf050d5780255419ef7101faf8534613ce785e970b7faab5ea259f184e0517 languageName: node linkType: hard "@testing-library/react@npm:^11.0.2": - version: 11.2.7 - resolution: "@testing-library/react@npm:11.2.7" + version: 11.0.4 + resolution: "@testing-library/react@npm:11.0.4" dependencies: - "@babel/runtime": ^7.12.5 - "@testing-library/dom": ^7.28.1 + "@babel/runtime": ^7.11.2 + "@testing-library/dom": ^7.24.2 peerDependencies: react: "*" react-dom: "*" - checksum: 64e07cb96e40dbdbd3c46a09c47bed14446b30efafaa65a5d4fed5a7553878990cda108578f2b114422a775f31c635d51fd50b752f6163ddd6b8474e0e5fc2ce + checksum: 10ac55ac040ab8642f1bf84a0186628ec5e913a39e910055fbfa94ad49e8456102ea91586ec240b65d078e2085f9ab7aa13a4059ce98ce89f9352f29463b8201 languageName: node linkType: hard "@testing-library/user-event@npm:^12.0.11": - version: 12.8.3 - resolution: "@testing-library/user-event@npm:12.8.3" + version: 12.1.6 + resolution: "@testing-library/user-event@npm:12.1.6" dependencies: - "@babel/runtime": ^7.12.5 + "@babel/runtime": ^7.10.2 peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: c9fb5ee07cbe79ddf32d81e1a353e556d02a1f1619456ccfad6abcdf1b7db400fdc9d7a8e0be3994f456e7135a0dfb7fa10b29fb98a0f5fc417b99fce0ce8166 + checksum: d82e1d3c86c20afc56eaca9ad1c51bc82ef2c39e2f1a15d9a68df3d36073d7cecf3330767a03311f471f413249d4e989d33779062d723358f15d73d793bfe012 languageName: node linkType: hard @@ -6321,30 +7945,30 @@ __metadata: linkType: hard "@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + version: 1.0.8 + resolution: "@tsconfig/node10@npm:1.0.8" + checksum: b8d5fffbc6b17ef64ef74f7fdbccee02a809a063ade785c3648dae59406bc207f70ea2c4296f92749b33019fa36a5ae716e42e49cc7f1bbf0fd147be0d6b970a languageName: node linkType: hard "@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + version: 1.0.9 + resolution: "@tsconfig/node12@npm:1.0.9" + checksum: a01b2400ab3582b86b589c6d31dcd0c0656f333adecde85d6d7d4086adb059808b82692380bb169546d189bf771ae21d02544a75b57bd6da4a5dd95f8567bec9 languageName: node linkType: hard "@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + version: 1.0.1 + resolution: "@tsconfig/node14@npm:1.0.1" + checksum: 976345e896c0f059867f94f8d0f6ddb8b1844fb62bf36b727de8a9a68f024857e5db97ed51d3325e23e0616a5e48c034ff51a8d595b3fe7e955f3587540489be languageName: node linkType: hard "@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + version: 1.0.2 + resolution: "@tsconfig/node16@npm:1.0.2" + checksum: ca94d3639714672bbfd55f03521d3f56bb6a25479bd425da81faf21f13e1e9d15f40f97377dedbbf477a5841c5b0c8f4cd1b391f33553d750b9202c54c2c07aa languageName: node linkType: hard @@ -7368,19 +8992,26 @@ __metadata: languageName: unknown linkType: soft +"@types/anymatch@npm:*": + version: 1.3.1 + resolution: "@types/anymatch@npm:1.3.1" + checksum: 1eeb16286102a98eda415e1ade6fb980ff0a001fc21e777af8932001ebbd324d0d2fbbd5ef51c828346ff71847ba00af3f73d1dfea434efb9b72467b8cf0343a + languageName: node + linkType: hard + "@types/api-error-handler@npm:^1.0.32": - version: 1.0.33 - resolution: "@types/api-error-handler@npm:1.0.33" + version: 1.0.32 + resolution: "@types/api-error-handler@npm:1.0.32" dependencies: "@types/express": "*" - checksum: 25a9c8b9ac1fc546f1e2b78ab17ae081987ad5539238419959245b52cedf3bb837553cad7fe763a373a3b7f3e4cd2fcca851c7954528c83d0b4c108221cf23ee + checksum: 39c4e849c23d16fa71b5ecf2af8383641153e9bb22ed2d6cd0e2ebc080b9c7aceec05511f92319099b8919470a90e4c763ec2fd1ec8d271f61236e03ef91336e languageName: node linkType: hard "@types/aria-query@npm:^4.2.0": - version: 4.2.2 - resolution: "@types/aria-query@npm:4.2.2" - checksum: 6f2ce11d91e2d665f3873258db19da752d91d85d3679eb5efcdf9c711d14492287e1e4eb52613b28e60375841a9e428594e745b68436c963d8bad4bf72188df3 + version: 4.2.0 + resolution: "@types/aria-query@npm:4.2.0" + checksum: e4a3748c5511deb88e93c6faf2acb0730233ff75018e9aaed95e3d2833880e9d0eda7e08e4315a827872471779471585671d08bae00ac8b9813fc140194b52e5 languageName: node linkType: hard @@ -7391,80 +9022,125 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7": - version: 7.20.1 - resolution: "@types/babel__core@npm:7.20.1" +"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.7": + version: 7.1.9 + resolution: "@types/babel__core@npm:7.1.9" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: d92c530efc3e50147f7956fc2aa49162508d2c5abffea7818051dfa9a9c9bc263b7d3da7d6fa826669ff8c68d733bbaced2dfdd486282b8bd013ccc3a0a3b7f6 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.1.16 + resolution: "@types/babel__core@npm:7.1.16" dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: 9fcd9691a33074802d9057ff70b0e3ff3778f52470475b68698a0f6714fbe2ccb36c16b43dc924eb978cd8a81c1f845e5ff4699e7a47606043b539eb8c6331a8 + checksum: d5aa154ce8c63e5fd47f5b9286a2689eea1e6dd3e1005b0c608bfe72363a44cb32be1e104f81d4b976e8a9f1f802d03184e64a055984fd43a359c5518a0f94cf languageName: node linkType: hard "@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" + version: 7.6.1 + resolution: "@types/babel__generator@npm:7.6.1" dependencies: "@babel/types": ^7.0.0 - checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 + checksum: d4b1f967fdf3fcc9648bce12ed3de5492abe645c643be36a3ce348051a7da405f2fea504821468a99bfb2089e622faa1fa85688ceb482bb6c8c4af85db31a752 languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" + version: 7.0.2 + resolution: "@types/babel__template@npm:7.0.2" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 - checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + checksum: ce04f0ab702d7d4c753c09e08db3e61e5fc69375ea70f5c991110511b7286124070ca70e260e8074614f8a339424de7e387c08033eaf0a9f5c81a93e350965a8 languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": - version: 7.20.0 - resolution: "@types/babel__traverse@npm:7.20.0" +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.0.8 + resolution: "@types/babel__traverse@npm:7.0.8" dependencies: - "@babel/types": ^7.20.7 - checksum: 030d647a61baa70aff5bc1193227694098191578e45e18720db3a14614f1827664d609630a668ad75cddffd7b80cd14a55455364239d1f14ea55f1f4d7d2c9ef + "@babel/types": ^7.3.0 + checksum: a8ad0a5ab2a70a97dd163ca3e37f4cabd4d9bd7b611a3236eab66f69e94456c18281671d4c7a52de814b3a1a850d4f08953731d3f64bc372fe05c51097855276 + languageName: node + linkType: hard + +"@types/babel__traverse@npm:^7.0.4": + version: 7.14.2 + resolution: "@types/babel__traverse@npm:7.14.2" + dependencies: + "@babel/types": ^7.3.0 + checksum: a797ea09c72307569e3ee08aa3900ca744ce3091114084f2dc59b67a45ee7d01df7865252790dbfa787a7915ce892cdc820c9b920f3683292765fc656b08dc63 languageName: node linkType: hard "@types/body-parser@npm:*": - version: 1.19.2 - resolution: "@types/body-parser@npm:1.19.2" + version: 1.19.0 + resolution: "@types/body-parser@npm:1.19.0" dependencies: "@types/connect": "*" "@types/node": "*" - checksum: e17840c7d747a549f00aebe72c89313d09fbc4b632b949b2470c5cb3b1cb73863901ae84d9335b567a79ec5efcfb8a28ff8e3f36bc8748a9686756b6d5681f40 + checksum: 15043566f1909e2a08dabb0a5d2642f8988545a1369bc5995fc40ee90c95200da2aa66f9240fcb19fc6af6ff4e27ff453f311b49363c14bb308c308c0751ca9b + languageName: node + linkType: hard + +"@types/braces@npm:*": + version: 3.0.0 + resolution: "@types/braces@npm:3.0.0" + checksum: 4f2a99b04cd5141d2c64051e002447c6ef243dc90855b5293c4f3b02ca65435c7ed1ae647497ff0f253fbf0105af31b7190ebbe88e121b1c435f3c58cacc96df languageName: node linkType: hard "@types/client-sessions@npm:^0.8.0": - version: 0.8.3 - resolution: "@types/client-sessions@npm:0.8.3" + version: 0.8.0 + resolution: "@types/client-sessions@npm:0.8.0" dependencies: "@types/cookies": "*" "@types/node": "*" - checksum: 9441e2e77c2f18c6a6c8fbc8cfe5e8b76891fba07841ae4c94c0a3306a7ef2f30774c77158cd2d38b83c1a20472a8ee6354b40b8372e0a9339a2e95815cc9f2c + checksum: f72abea266ac951239c97c20bf37a342e074e8ed15c401822a830efefb153d0438a52b993d92cd22f93e204dddb16147e6ba97a769da485ff1ac05d5bf2c48c0 + languageName: node + linkType: hard + +"@types/color-convert@npm:^2.0.0": + version: 2.0.0 + resolution: "@types/color-convert@npm:2.0.0" + dependencies: + "@types/color-name": "*" + checksum: 027b68665dc2278cc2d83e796ada0a05a08aa5a11297e227c48c7f9f6eac518dec98578ab0072bd211963d3e4b431da70b20ea28d6c3136d0badfd3f9913baee + languageName: node + linkType: hard + +"@types/color-name@npm:*, @types/color-name@npm:^1.1.1": + version: 1.1.1 + resolution: "@types/color-name@npm:1.1.1" + checksum: b71fcad728cc68abcba1d405742134410c8f8eb3c2ef18113b047afca158ad23a4f2c229bcf71a38f4a818dead375c45b20db121d0e69259c2d81e97a740daa6 languageName: node linkType: hard "@types/connect@npm:*": - version: 3.4.35 - resolution: "@types/connect@npm:3.4.35" + version: 3.4.33 + resolution: "@types/connect@npm:3.4.33" dependencies: "@types/node": "*" - checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 + checksum: 1220403e0cd05c6f51c03b83eed0f4e086f252d50c13279effd38d8bfea5cae82db012b134d31004cb8e4705f83d8ad62dddd71028baa190bf6f31c8d9ac916b languageName: node linkType: hard "@types/cookie@npm:^0.4.0": - version: 0.4.1 - resolution: "@types/cookie@npm:0.4.1" - checksum: 3275534ed69a76c68eb1a77d547d75f99fedc80befb75a3d1d03662fb08d697e6f8b1274e12af1a74c6896071b11510631ba891f64d30c78528d0ec45a9c1a18 + version: 0.4.0 + resolution: "@types/cookie@npm:0.4.0" + checksum: ffb58d8065d2b2672bc96a2c163ac4319b37a6b08a330530de4da4ceba8004ac5532dab735a4c5ff5964b083522eea94237b3e9313d7463ebb46f8368055d4cd languageName: node linkType: hard @@ -7476,23 +9152,23 @@ __metadata: linkType: hard "@types/cookies@npm:*": - version: 0.7.7 - resolution: "@types/cookies@npm:0.7.7" + version: 0.7.5 + resolution: "@types/cookies@npm:0.7.5" dependencies: "@types/connect": "*" "@types/express": "*" "@types/keygrip": "*" "@types/node": "*" - checksum: d3759efc1182cb0651808570ae13638677b67b0ea724eef7b174e58ffe6ea044b62c7c2715e532f76f88fce4dd8101ed32ac6fbb73226db654017924e8a2a1e6 + checksum: 84b02cf60e8240f9186eb6a8cf59f7f8fa5394c287d323e523f1c28b5e7604cdbab9b2b4100effbddefcf756abf517e502962e69b67389bcd1fc423d85da6e5f languageName: node linkType: hard "@types/cors@npm:^2.8.8": - version: 2.8.13 - resolution: "@types/cors@npm:2.8.13" + version: 2.8.8 + resolution: "@types/cors@npm:2.8.8" dependencies: - "@types/node": "*" - checksum: 7ef197ea19d2e5bf1313b8416baa6f3fd6dd887fd70191da1f804f557395357dafd8bc8bed0ac60686923406489262a7c8a525b55748f7b2b8afa686700de907 + "@types/express": "*" + checksum: a62f674f1827ce5df5da947d4d2cf862128693f6d8ac088d2e9a0494ab616d264845c0f1ef554b5d4a539e9fc30c4c7d74df68d36698bc13363129682e8af2a9 languageName: node linkType: hard @@ -7554,16 +9230,6 @@ __metadata: languageName: node linkType: hard -"@types/eslint-scope@npm:^3.7.3": - version: 3.7.4 - resolution: "@types/eslint-scope@npm:3.7.4" - dependencies: - "@types/eslint": "*" - "@types/estree": "*" - checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 - languageName: node - linkType: hard - "@types/eslint-visitor-keys@npm:^1.0.0": version: 1.0.0 resolution: "@types/eslint-visitor-keys@npm:1.0.0" @@ -7571,30 +9237,20 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:*": - version: 8.40.0 - resolution: "@types/eslint@npm:8.40.0" - dependencies: - "@types/estree": "*" - "@types/json-schema": "*" - checksum: bab41d7f590182e743853cdd5bf5359cbc4240df986223457c8a5f5674743a3fe2a8626704b65bf9121dfa0ce0a0efd760da8339cc329018f229d4d2d6ee1c43 - languageName: node - linkType: hard - -"@types/eslint@npm:^7.29.0": - version: 7.29.0 - resolution: "@types/eslint@npm:7.29.0" +"@types/eslint@npm:^7.2.6": + version: 7.28.0 + resolution: "@types/eslint@npm:7.28.0" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: df13991c554954353ce8f3bb03e19da6cc71916889443d68d178d4f858b561ba4cc4a4f291c6eb9eebb7f864b12b9b9313051b3a8dfea3e513dadf3188a77bdf + checksum: 75ac2577d2a2e35bae66f56d2d1c871d5e836b2721cf14bd3df450c9d584eba48fa3b1013fba710245bf4795f16e1df0ed315e543e3199c4815ee4782537d0ae languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.0": - version: 1.0.1 - resolution: "@types/estree@npm:1.0.1" - checksum: e9aa175eacb797216fafce4d41e8202c7a75555bc55232dee0f9903d7171f8f19f0ae7d5191bb1a88cb90e65468be508c0df850a9fb81b4433b293a5a749899d +"@types/estree@npm:*": + version: 0.0.47 + resolution: "@types/estree@npm:0.0.47" + checksum: aed5c940436250c25c5e140aa19e7199ba3452e72e1aecc515621507df9e5ed5076ddba84a1684c36d62be841ff3e2bafce8793f16fe6f69d10884449d4461e7 languageName: node linkType: hard @@ -7612,6 +9268,17 @@ __metadata: languageName: node linkType: hard +"@types/express-serve-static-core@npm:*": + version: 4.17.13 + resolution: "@types/express-serve-static-core@npm:4.17.13" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + checksum: 9e8f75956c214fccaac8e4370a19cc4494f9f6c0326360a8a198161f92e9845c6a845002978b1e57a4bd6c0c1a5820d6be58b6796214bd7fcc6216baa7366d7b + languageName: node + linkType: hard + "@types/express-serve-static-core@npm:^4.17.33": version: 4.17.35 resolution: "@types/express-serve-static-core@npm:4.17.35" @@ -7624,7 +9291,31 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.8, @types/express@npm:^4.7.0": +"@types/express@npm:*": + version: 4.17.9 + resolution: "@types/express@npm:4.17.9" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": "*" + "@types/qs": "*" + "@types/serve-static": "*" + checksum: e1d6388ec28ab67db5559011d16c63d6fcfb128f27daf217a02ecdb2ede968d2187e83ef3f7c54cbd050686aaed4c80585b64f055c76e79c055d7d4efb7bc3b1 + languageName: node + linkType: hard + +"@types/express@npm:^4.17.8": + version: 4.17.8 + resolution: "@types/express@npm:4.17.8" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": "*" + "@types/qs": "*" + "@types/serve-static": "*" + checksum: ca265de4f9deb7eea2babd66d7f4069ca49202b69db48fb2e805998a8574ac1d186989de7920e66d4a97740228205f62f8c5821283756cf55bb2115ca2f5b901 + languageName: node + linkType: hard + +"@types/express@npm:^4.7.0": version: 4.17.17 resolution: "@types/express@npm:4.17.17" dependencies: @@ -7643,17 +9334,34 @@ __metadata: languageName: node linkType: hard -"@types/glob@npm:*, @types/glob@npm:^8.0.0": - version: 8.1.0 - resolution: "@types/glob@npm:8.1.0" +"@types/glob-base@npm:^0.3.0": + version: 0.3.0 + resolution: "@types/glob-base@npm:0.3.0" + checksum: 67bd0ed2b6aa3d01fdf074dfbf2afa5696109ac5560f4d0464725cfefea79a378c650daf31bd11053cf17c269135d83051cf179f2bb287a54665476609cc122e + languageName: node + linkType: hard + +"@types/glob@npm:*": + version: 7.1.3 + resolution: "@types/glob@npm:7.1.3" dependencies: - "@types/minimatch": ^5.1.2 + "@types/minimatch": "*" "@types/node": "*" - checksum: 9101f3a9061e40137190f70626aa0e202369b5ec4012c3fabe6f5d229cce04772db9a94fa5a0eb39655e2e4ad105c38afbb4af56a56c0996a8c7d4fc72350e3d + checksum: e0eef12285f548f15d887145590594a04ccce7f7e645fb047cbac18cb093f25d507ffbcc725312294c224bb78cf980fce33e5807de8d6f8a868b4186253499d4 languageName: node linkType: hard -"@types/glob@npm:^7.1.1, @types/glob@npm:^7.1.3": +"@types/glob@npm:^7.1.1": + version: 7.1.2 + resolution: "@types/glob@npm:7.1.2" + dependencies: + "@types/minimatch": "*" + "@types/node": "*" + checksum: a79c6d71b03ccbb1bfdee985be54570e7ad80ff54b3d99d65c3b2c6eee28a0da4d1eada76db68e71d0855b2e3cb43e09e8b9da3c96342079845ae3375a5f4dc0 + languageName: node + linkType: hard + +"@types/glob@npm:^7.1.3": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" dependencies: @@ -7663,7 +9371,26 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.2, @types/graceful-fs@npm:^4.1.3": +"@types/glob@npm:^8.0.0": + version: 8.1.0 + resolution: "@types/glob@npm:8.1.0" + dependencies: + "@types/minimatch": ^5.1.2 + "@types/node": "*" + checksum: 9101f3a9061e40137190f70626aa0e202369b5ec4012c3fabe6f5d229cce04772db9a94fa5a0eb39655e2e4ad105c38afbb4af56a56c0996a8c7d4fc72350e3d + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.2": + version: 4.1.3 + resolution: "@types/graceful-fs@npm:4.1.3" + dependencies: + "@types/node": "*" + checksum: f13a1b177e44ceafd430f1d5f63b7e7fd2a430c47d5dd1a20d10b88c1c5cdb033d96d539a084de79663b8735f72d31e8aa574f10daa622b1df16285f6a057383 + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": version: 4.1.6 resolution: "@types/graceful-fs@npm:4.1.6" dependencies: @@ -7673,18 +9400,18 @@ __metadata: linkType: hard "@types/hammerjs@npm:^2.0.36": - version: 2.0.41 - resolution: "@types/hammerjs@npm:2.0.41" - checksum: d16fbd688fc9b18cc270abe8dea8d4c50ef7bd8375e593d92c233d299387933a6b003c8db69819344833052458bc5f9ef1b472001277a49f095928d184356006 + version: 2.0.36 + resolution: "@types/hammerjs@npm:2.0.36" + checksum: c6e90fab978062eab120a2e0b38859c3895f8933b640369e7f94f3c7c5c3daf5cb116549450af130836d2b6c5892fa25ad512e756238551630f13c6582308c28 languageName: node linkType: hard "@types/hast@npm:^2.0.0": - version: 2.3.4 - resolution: "@types/hast@npm:2.3.4" + version: 2.3.1 + resolution: "@types/hast@npm:2.3.1" dependencies: "@types/unist": "*" - checksum: fff47998f4c11e21a7454b58673f70478740ecdafd95aaf50b70a3daa7da9cdc57315545bf9c039613732c40b7b0e9e49d11d03fe9a4304721cdc3b29a88141e + checksum: 3e2ec0a56a06cd2fb5474b4ee312b40e70dc82e4e711514b393bb4e5ace2e9912576c9b44c2504bbb46c9b772794be49f1a4c418d01ceac1fafd66d15c158f62 languageName: node linkType: hard @@ -7706,94 +9433,115 @@ __metadata: linkType: hard "@types/html-minifier-terser@npm:^5.0.0": - version: 5.1.2 - resolution: "@types/html-minifier-terser@npm:5.1.2" - checksum: 4bca779c44d2aebe4cc4036c5db370abe7466249038e9c5996cb3c192debeff1c75b7a2ab78e5fd2a014ad24ebf0f357f9a174a4298540dc1e1317d43aa69cfa + version: 5.1.0 + resolution: "@types/html-minifier-terser@npm:5.1.0" + checksum: 2a63ef76802160451771b1c3579057fb32eacf3741cfd03bd908d53c7cd38cc25e872bccb8fa384828147eefb54168c444a0f4e32a19df10bfbc9c8ae95c5d4f languageName: node linkType: hard -"@types/http-proxy@npm:^1.17.8": - version: 1.17.11 - resolution: "@types/http-proxy@npm:1.17.11" +"@types/http-proxy@npm:^1.17.5": + version: 1.17.7 + resolution: "@types/http-proxy@npm:1.17.7" dependencies: "@types/node": "*" - checksum: 38ef4f8c91c7a5b664cf6dd4d90de7863f88549a9f8ef997f2f1184e4f8cf2e7b9b63c04f0b7b962f34a09983073a31a9856de5aae5159b2ddbb905a4c44dc9f + checksum: 88f9c75ca65378d0287d8d0b1dbeed372c8267f4841fe2f6f2d759522494382d3943bc6cc774bef7dd125464a266bafeda813d3658b17a2d1e74acc4efb6e21c languageName: node linkType: hard "@types/is-function@npm:^1.0.0": - version: 1.0.1 - resolution: "@types/is-function@npm:1.0.1" - checksum: dfbb591936dfebd4686b109603bc3e2d23a17087d6ec913fb35cd6b5a4ef908ed68ab93cb27d508f1546d312edf03e663cb6738d3b67d420c68da961ac2b3d1f + version: 1.0.0 + resolution: "@types/is-function@npm:1.0.0" + checksum: 7cfe4f65ec7db87cf1957e45a1814d1382edc76e588873a6fd66c9dd05ad38d53e3d740accb8aa49b83e0a11c37a76570558737fb86973e39de575a5cbb3aa6a languageName: node linkType: hard -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.4 - resolution: "@types/istanbul-lib-coverage@npm:2.0.4" - checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0": + version: 2.0.1 + resolution: "@types/istanbul-lib-coverage@npm:2.0.1" + checksum: eb8abb8b56fb8f645c46c482c5a438d78fc44ce2eb82a47491d552eba94fc3d81bc404996f220921c16df3eb6126ec01890f4acaebd0f71249b37e110eacdd3a + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.3 + resolution: "@types/istanbul-lib-coverage@npm:2.0.3" + checksum: 0650cba4be8f464bee89b9de0b71a5ea3b5cc676ce24e1196b5d6a51542ce9e613ae4549bf19756bb33dbbbb32b47931040266100062bfb197c597d73e341eb0 languageName: node linkType: hard "@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" + version: 1.1.1 + resolution: "@types/istanbul-lib-report@npm:1.1.1" dependencies: "@types/istanbul-lib-coverage": "*" - checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 + checksum: 56c995ede09cb2638e2d35d90d9455d6c046d4225fcfe2c547f42e5282474c3bfa1f083139f61d66740e29037d0428e54102784ef8417d6076aebc4be889af3c languageName: node linkType: hard "@types/istanbul-reports@npm:^1.1.1": - version: 1.1.2 - resolution: "@types/istanbul-reports@npm:1.1.2" + version: 1.1.1 + resolution: "@types/istanbul-reports@npm:1.1.1" dependencies: "@types/istanbul-lib-coverage": "*" "@types/istanbul-lib-report": "*" - checksum: 00866e815d1e68d0a590d691506937b79d8d65ad8eab5ed34dbfee66136c7c0f4ea65327d32046d5fe469f22abea2b294987591dc66365ebc3991f7e413b2d78 + checksum: 06f41b4a681cec2c78f892e5400d43a2f3074b6308031d88788105f418d2a50ce054c750c8282079dedf2dfc17cf703dad908a9ef620409a988d308eccf2261c languageName: node linkType: hard "@types/istanbul-reports@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/istanbul-reports@npm:3.0.1" + version: 3.0.0 + resolution: "@types/istanbul-reports@npm:3.0.0" dependencies: "@types/istanbul-lib-report": "*" - checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + checksum: 286a18cff19c4dac4321b9ea406a3560faf577fb2a4df5abf9d577fa81ba831c9baa7d40d03f1daf7fe613d468546b731c00b844b72fad9834c583311a35bb7b languageName: node linkType: hard "@types/jest@npm:*": - version: 27.5.2 - resolution: "@types/jest@npm:27.5.2" + version: 26.0.4 + resolution: "@types/jest@npm:26.0.4" dependencies: - jest-matcher-utils: ^27.0.0 - pretty-format: ^27.0.0 - checksum: 7e11c6826aa429ad990dc262e4e4b54aa36573287fddf15773e4137f07d11d3105f0dd9f1baff73252160a057df23f5529bb83b1bf83cd3f45f9460a5ca5c22e + jest-diff: ^25.2.1 + pretty-format: ^25.2.1 + checksum: 85d4d582ea5272b2aa0333f68749179c58b277934ea20c17d59a9f01ca41056ebbcd05bf6e371340529b6c67a38b3887e06440a1777187e551eba1ff624f0c82 languageName: node linkType: hard "@types/jest@npm:^29.5.1": - version: 29.5.1 - resolution: "@types/jest@npm:29.5.1" + version: 29.5.2 + resolution: "@types/jest@npm:29.5.2" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 0a22491dec86333c0e92b897be2c809c922a7b2b0aa5604ac369810d6b2360908b4a3f2c6892e8a237a54fa1f10ecefe0e823ec5fcb7915195af4dfe88d2197e + checksum: 7d205599ea3cccc262bad5cc173d3242d6bf8138c99458509230e4ecef07a52d6ddcde5a1dbd49ace655c0af51d2dbadef3748697292ea4d86da19d9e03e19c0 languageName: node linkType: hard -"@types/js-levenshtein@npm:^1.1.0": - version: 1.1.1 - resolution: "@types/js-levenshtein@npm:1.1.1" - checksum: 1d1ff1ee2ad551909e47f3ce19fcf85b64dc5146d3b531c8d26fc775492d36e380b32cf5ef68ff301e812c3b00282f37aac579ebb44498b94baff0ace7509769 +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8": + version: 7.0.9 + resolution: "@types/json-schema@npm:7.0.9" + checksum: 259d0e25f11a21ba5c708f7ea47196bd396e379fddb79c76f9f4f62c945879dc21657904914313ec2754e443c5018ea8372362f323f30e0792897fdb2098a705 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.4": + version: 7.0.4 + resolution: "@types/json-schema@npm:7.0.4" + checksum: e8f7f8cccfba50bc921f630a4eef7a740a26d6a7daf9a954f6690ddae162de932f563cbdb754b082bee8f9620407082fda606cab03d57f00f637e7c68666e04f + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.5": + version: 7.0.6 + resolution: "@types/json-schema@npm:7.0.6" + checksum: 3b1e5e049b065a41d2bc1f0c16e01dac5a4a1276bbe8b413657298f574d64a955d3b10bec9e7796fde0927f307e6fedbac1cf4da3604593c431899eea3ad0756 languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": - version: 7.0.12 - resolution: "@types/json-schema@npm:7.0.12" - checksum: 00239e97234eeb5ceefb0c1875d98ade6e922bfec39dd365ec6bd360b5c2f825e612ac4f6e5f1d13601b8b30f378f15e6faa805a3a732f4a1bbe61915163d293 +"@types/json-schema@npm:^7.0.9": + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d languageName: node linkType: hard @@ -7848,11 +9596,11 @@ __metadata: linkType: hard "@types/lodash.groupby@npm:^4.6.0": - version: 4.6.7 - resolution: "@types/lodash.groupby@npm:4.6.7" + version: 4.6.6 + resolution: "@types/lodash.groupby@npm:4.6.6" dependencies: "@types/lodash": "*" - checksum: 2dd7f5c43ca4e2202c73a1217ea550fd54746909c19ef38ababe1a3c851c40b1ba66c027397551f9a6f7acf7217507496e316e6de38f3208f4a1f4548b81933b + checksum: d1c3bf09b5da403d4c8923422d4aba1b1747d0233d1fdcdbb7f179e34a022c50e7dc0993ec7fea049a09f7913cbfd9494dea7d5ae2a5b404bbc83eb8b0a2ab30 languageName: node linkType: hard @@ -7866,15 +9614,15 @@ __metadata: linkType: hard "@types/lodash.isplainobject@npm:^4.0.6": - version: 4.0.7 - resolution: "@types/lodash.isplainobject@npm:4.0.7" + version: 4.0.6 + resolution: "@types/lodash.isplainobject@npm:4.0.6" dependencies: "@types/lodash": "*" - checksum: a3946dbcef66c5931073c0c8a0ecc2bd38a6bf808daa018d1af7db5e980fdb4bc03664ffe3c583c6a8e0a082bbcfba8328b32b96a5a955569ee5704e92bf0b3a + checksum: 988d1ced75fc75efbb0aa93fc6c56287e2bcf63b3efad375dc1cb5373c8a05600dcb4fb047b078d532d176ccf180f581aead425e349e80e1fb43ad98b88b6cef languageName: node linkType: hard -"@types/lodash.keyby@npm:^4.6.0, @types/lodash.keyby@npm:^4.6.6": +"@types/lodash.keyby@npm:^4.6.0": version: 4.6.7 resolution: "@types/lodash.keyby@npm:4.6.7" dependencies: @@ -7883,12 +9631,21 @@ __metadata: languageName: node linkType: hard +"@types/lodash.keyby@npm:^4.6.6": + version: 4.6.6 + resolution: "@types/lodash.keyby@npm:4.6.6" + dependencies: + "@types/lodash": "*" + checksum: c76d4aab6c3e2820bd1b59c179f8076f27b297711a9c5e5953ed77e2fc9d2b343b5954e4f1519cfcb70fe99c55c5e40d8550a58f28fce9dc2a9a051ac7d0c23b + languageName: node + linkType: hard + "@types/lodash.pick@npm:^4.4.0": - version: 4.4.7 - resolution: "@types/lodash.pick@npm:4.4.7" + version: 4.4.6 + resolution: "@types/lodash.pick@npm:4.4.6" dependencies: "@types/lodash": "*" - checksum: 78428a83b5d85e75bd13fb632030f9adb08dfc5bde3a9b6a302434fe7ac98e62919f87a7337e0ba674017d63bc57a8855ef863f5fcecd25e63b1d39eba2e4697 + checksum: c53b5efc8bf69583aecd823ecb23ee489d44cc741246f69b0add0756dde2a53f94c86139bf77a95222ccdc992eee63dfb1be41f4f03ab18266fbb085d7ba30de languageName: node linkType: hard @@ -7910,13 +9667,27 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:*, @types/lodash@npm:^4.14.167, @types/lodash@npm:^4.14.175": +"@types/lodash@npm:*": + version: 4.14.159 + resolution: "@types/lodash@npm:4.14.159" + checksum: ed467c79c192a057405725f8091322bd16a0a76278134165bb713140cfb9257730ed805427ad3bbb60f2846132c04577f685c411ebcf7140de2fb4bc97245a11 + languageName: node + linkType: hard + +"@types/lodash@npm:^4.14.167": version: 4.14.195 resolution: "@types/lodash@npm:4.14.195" checksum: 39b75ca635b3fa943d17d3d3aabc750babe4c8212485a4df166fe0516e39288e14b0c60afc6e21913cc0e5a84734633c71e617e2bd14eaa1cf51b8d7799c432e languageName: node linkType: hard +"@types/lodash@npm:^4.14.175": + version: 4.14.191 + resolution: "@types/lodash@npm:4.14.191" + checksum: ba0d5434e10690869f32d5ea49095250157cae502f10d57de0a723fd72229ce6c6a4979576f0f13e0aa9fbe3ce2457bfb9fa7d4ec3d6daba56730a51906d1491 + languageName: node + linkType: hard + "@types/markdown-it@npm:^0.0.4": version: 0.0.4 resolution: "@types/markdown-it@npm:0.0.4" @@ -7924,6 +9695,15 @@ __metadata: languageName: node linkType: hard +"@types/markdown-to-jsx@npm:^6.11.3": + version: 6.11.3 + resolution: "@types/markdown-to-jsx@npm:6.11.3" + dependencies: + "@types/react": "*" + checksum: 9775a5a86c254f7235b6992474687197b9d1c44e7d95f631579aea9da5b880d9819653b3c549e7960c66e0ba6240b6e769d2d5141e7b10aa920f554c5a47fdd8 + languageName: node + linkType: hard + "@types/material-ui@npm:^0.21.12": version: 0.21.12 resolution: "@types/material-ui@npm:0.21.12" @@ -7935,11 +9715,11 @@ __metadata: linkType: hard "@types/mdast@npm:^3.0.0": - version: 3.0.11 - resolution: "@types/mdast@npm:3.0.11" + version: 3.0.3 + resolution: "@types/mdast@npm:3.0.3" dependencies: "@types/unist": "*" - checksum: 3b04cf465535553b47a1811c247668bd6cfeb54d99a2c9dbb82ccd0f5145d271d10c3169f929701d8cd55fd569f0d2e459a50845813ba3261f1fb0395a288cea + checksum: 5318624af815ac531e49de06da1d9458f1570f87274dced00353a240b2d2c4260f1fdd40c5e65784e4a4f49b0c5eb43f77faee60def723b501880ab3747b9916 languageName: node linkType: hard @@ -7950,6 +9730,15 @@ __metadata: languageName: node linkType: hard +"@types/micromatch@npm:^4.0.1": + version: 4.0.1 + resolution: "@types/micromatch@npm:4.0.1" + dependencies: + "@types/braces": "*" + checksum: 4f9fea285778c579055c83fbb025f576c3adc9541ec89e12f1e192e53c0885a04d1a5863b44001606f01964f12b26f8b08b033c06de11ca9de78d58e7a672850 + languageName: node + linkType: hard + "@types/mime-types@npm:^2.1.0": version: 2.1.1 resolution: "@types/mime-types@npm:2.1.1" @@ -7958,9 +9747,9 @@ __metadata: linkType: hard "@types/mime@npm:*": - version: 3.0.1 - resolution: "@types/mime@npm:3.0.1" - checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 + version: 2.0.3 + resolution: "@types/mime@npm:2.0.3" + checksum: 1f4f144423e149f300438f7cdca9b308d7a18a944e63f5ddf262558208a22a64c8e79b6973d602d86928e19052b3256b492429951b34d037242bb1bdfddae388 languageName: node linkType: hard @@ -7971,7 +9760,14 @@ __metadata: languageName: node linkType: hard -"@types/minimatch@npm:*, @types/minimatch@npm:^5.1.2": +"@types/minimatch@npm:*": + version: 3.0.3 + resolution: "@types/minimatch@npm:3.0.3" + checksum: b80259d55b96ef24cb3bb961b6dc18b943f2bb8838b4d8e7bead204f3173e551a416ffa49f9aaf1dc431277fffe36214118628eacf4aea20119df8835229901b + languageName: node + linkType: hard + +"@types/minimatch@npm:^5.1.2": version: 5.1.2 resolution: "@types/minimatch@npm:5.1.2" checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 @@ -7979,9 +9775,9 @@ __metadata: linkType: hard "@types/minimist@npm:^1.2.0": - version: 1.2.2 - resolution: "@types/minimist@npm:1.2.2" - checksum: b8da83c66eb4aac0440e64674b19564d9d86c80ae273144db9681e5eeff66f238ade9515f5006ffbfa955ceff8b89ad2bd8ec577d7caee74ba101431fb07045d + version: 1.2.0 + resolution: "@types/minimist@npm:1.2.0" + checksum: 30cbd9acd7ddb60bc3729adcc43a9da4940c90180fa0f08228f1da95ec6c00db2e3fd3af5280fc5345e3fa2637253bb5cf6625f30d571ef9bc3820a531febb7e languageName: node linkType: hard @@ -8013,19 +9809,19 @@ __metadata: linkType: hard "@types/node-fetch@npm:^2.5.7": - version: 2.6.4 - resolution: "@types/node-fetch@npm:2.6.4" + version: 2.5.12 + resolution: "@types/node-fetch@npm:2.5.12" dependencies: "@types/node": "*" form-data: ^3.0.0 - checksum: f3e1d881bb42269e676ecaf49f0e096ab345e22823a2b2d071d60619414817fe02df48a31a8d05adb23054028a2a65521bdb3906ceb763ab6d3339c8d8775058 + checksum: ad63c85ba6a9477b8e057ec8682257738130d98e8ece4e31141789bd99df9d9147985cc8bc0cb5c8983ed5aa6bb95d46df23d1e055f4ad5cf8b82fc69cf626c7 languageName: node linkType: hard "@types/node@npm:*": - version: 20.2.5 - resolution: "@types/node@npm:20.2.5" - checksum: 38ce7c7e9d76880dc632f71d71e0d5914fcda9d5e9a7095d6c339abda55ca4affb0f2a882aeb29398f8e09d2c5151f0b6586c81c8ccdfe529c34b1ea3337425e + version: 14.0.12 + resolution: "@types/node@npm:14.0.12" + checksum: 7bfd1fd30b95c6a9a782c667555902a849f8766139f21a47cf9be7c335ee96c23d6ee47fea9653249acdda1d1ae65a0a8eda7036c6460690378a6dffc1d603ac languageName: node linkType: hard @@ -8036,24 +9832,45 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.0.10 || ^16.0.0, @types/node@npm:^14.14.20 || ^16.0.0, @types/node@npm:^16.0.0, @types/node@npm:^16.9.2": +"@types/node@npm:^14.0.10": + version: 14.17.20 + resolution: "@types/node@npm:14.17.20" + checksum: c704d95c4e4377b0b4c72206068e99bbc635e27b42100a51f56e46ec0917a73f64069bcb50c07b30d34e22694735f607a1da61314acdf717a55a3ca020e12bb9 + languageName: node + linkType: hard + +"@types/node@npm:^16.0.0": version: 16.18.34 resolution: "@types/node@npm:16.18.34" checksum: 35c0ffe09687578d002ceb7e706d0ba450546aeb3d2716f28691f2af0063bd274dbde0f741d087ea217f2a8db413eb700d22dfb4f08a67986ff801423bd7be8d languageName: node linkType: hard +"@types/node@npm:^16.9.2": + version: 16.18.11 + resolution: "@types/node@npm:16.18.11" + checksum: 2a3b1da13063debe6e26f732defb5f03ef4ef732c3e08daba838d8850433bd00e537ce1a97ce9bcfc4b15db5218d701d1265fae94e0d6926906bec157e6b46e0 + languageName: node + linkType: hard + "@types/normalize-package-data@npm:^2.4.0": - version: 2.4.1 - resolution: "@types/normalize-package-data@npm:2.4.1" - checksum: e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 + version: 2.4.0 + resolution: "@types/normalize-package-data@npm:2.4.0" + checksum: fd22ba86a186a033dbe173840fd2ad091032be6d48163198869d058821acca7373d9f39cfd0caf42f3b92bc737723814fe1b4e9e90eacaa913836610aa197d3b languageName: node linkType: hard "@types/npmlog@npm:^4.1.2": - version: 4.1.4 - resolution: "@types/npmlog@npm:4.1.4" - checksum: 740f7431ccfc0e127aa8d162fe05c6ce8aa71290be020d179b2824806d19bd2c706c7e0c9a3c9963cefcdf2ceacb1dec6988c394c3694451387759dafe0aa927 + version: 4.1.2 + resolution: "@types/npmlog@npm:4.1.2" + checksum: 8ea4c0578839a8a4436bb8fb303efec3b3a81e99c87bada5afdde5f3604696a09077c9b7ff0e48c9c30365f7c716ad4f65329f5259072dc86a03bc58faf5afa9 + languageName: node + linkType: hard + +"@types/overlayscrollbars@npm:^1.12.0": + version: 1.12.1 + resolution: "@types/overlayscrollbars@npm:1.12.1" + checksum: 4d539db07ad5a268d6eb8f3af84f64126dd2e99831895f0a7a82839dae6d7405dbb7dacecc0ecd6f6aef403f6c5ae946f9d65dd1fa8fa44f0cb9926f01032f3c languageName: node linkType: hard @@ -8071,10 +9888,17 @@ __metadata: languageName: node linkType: hard -"@types/prettier@npm:^2.0.0, @types/prettier@npm:^2.1.5": - version: 2.7.2 - resolution: "@types/prettier@npm:2.7.2" - checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 +"@types/prettier@npm:^2.0.0": + version: 2.0.2 + resolution: "@types/prettier@npm:2.0.2" + checksum: 95ab2b5da3279cc6eb19075d992a06c9c62535e00cecbba84a749862a100b42f51ff15058429f63ffc1d0e4715df571be12314a32151f8fa7109e6cb84968317 + languageName: node + linkType: hard + +"@types/prettier@npm:^2.1.5": + version: 2.4.1 + resolution: "@types/prettier@npm:2.4.1" + checksum: df330c2d6fe7c282839b0f17701e069a9c6c96d2ff54704e933a1b3c1b98844d963a7cb00c5629d173604892ceee802312bbaeb8a97f5da21e13db8f653b519e languageName: node linkType: hard @@ -8086,20 +9910,27 @@ __metadata: linkType: hard "@types/prop-types@npm:*": - version: 15.7.5 - resolution: "@types/prop-types@npm:15.7.5" - checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 + version: 15.7.3 + resolution: "@types/prop-types@npm:15.7.3" + checksum: 41831d53c44c9eeafdaf9762bcb4553c13a3bbf990745ed9065a1cc3581b80633113b53fd49b202bf51731b258da5d0a9aa09c9035d5af7f78b0f6bc273f1325 languageName: node linkType: hard "@types/q@npm:^1.5.1": - version: 1.5.5 - resolution: "@types/q@npm:1.5.5" - checksum: 3bd386fb97a0e5f1ce1ed7a14e39b60e469b5ca9d920a7f69e0cdb58d22c0f5bdd16637d8c3a5bfeda76663c023564dd47a65389ee9aaabd65aee54803d5ba45 + version: 1.5.2 + resolution: "@types/q@npm:1.5.2" + checksum: 3bb811e0bccfa2bf6a6d366d46bf508739de7338a22bdb8474cbd00a1aa9b5c65210f4ada6a8e9cca50f9340e529719f3b65d7f70dbc972854ebb66728743608 languageName: node linkType: hard -"@types/qs@npm:*, @types/qs@npm:^6.9.5": +"@types/qs@npm:*": + version: 6.9.5 + resolution: "@types/qs@npm:6.9.5" + checksum: eeb4597a9c5d3e7b3da3f6395fdfc53e435b79c863fd9d56ff14951e644d51d40870a7d8440c0f132299469941d27817b04ef3c7aa71242115eded0953f4f620 + languageName: node + linkType: hard + +"@types/qs@npm:^6.9.5": version: 6.9.7 resolution: "@types/qs@npm:6.9.7" checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba @@ -8107,9 +9938,18 @@ __metadata: linkType: hard "@types/range-parser@npm:*": - version: 1.2.4 - resolution: "@types/range-parser@npm:1.2.4" - checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 + version: 1.2.3 + resolution: "@types/range-parser@npm:1.2.3" + checksum: a0a4218214d2c599e2128a8965e9183d1f0b8fc614def43a2183cf80534d10fcf86357c823c7907e779df0ab048fd1fa3818b4c8f0f6f99ba150a3f99df7d03d + languageName: node + linkType: hard + +"@types/reach__router@npm:^1.3.7": + version: 1.3.9 + resolution: "@types/reach__router@npm:1.3.9" + dependencies: + "@types/react": "*" + checksum: 0cff95f0d972fd05cc5ae68c8f6951d11ef26431667845c58365e8ae71617766b7a05a6307c9f323379ad910045854aa327b403d9f671189dedd4c0396120ffa languageName: node linkType: hard @@ -8132,24 +9972,24 @@ __metadata: linkType: hard "@types/react-native@npm:>=0.50.0": - version: 0.72.2 - resolution: "@types/react-native@npm:0.72.2" + version: 0.60.26 + resolution: "@types/react-native@npm:0.60.26" dependencies: - "@react-native/virtualized-lists": ^0.72.4 + "@types/prop-types": "*" "@types/react": "*" - checksum: b2915594381365ea379cb46b9a65219c6b6c7446d97d15f4da9615b8f180972bacba7cae584f4a8f83cce3a180f8a9a08a9c6b57081b37e2543f23f5717693d4 + checksum: 37733af8932c052c4d43e6cca14c927e50079ae1e9e1e491a1b3b34eb1725f0a3537c9402ac715f5ec53db290b4c61dd9828b140e1ca08167ce1aebcb6198db4 languageName: node linkType: hard "@types/react-redux@npm:^7.1.20": - version: 7.1.25 - resolution: "@types/react-redux@npm:7.1.25" + version: 7.1.24 + resolution: "@types/react-redux@npm:7.1.24" dependencies: "@types/hoist-non-react-statics": ^3.3.0 "@types/react": "*" hoist-non-react-statics: ^3.3.0 redux: ^4.0.0 - checksum: a61ec25cbf8bb3720850402d3c49493fcff4afb73ad447d161460b5d4c600c984ad48708e8564d2fd32052eaa3c3b3f655c5b300ce813429637cce9e5958329f + checksum: 6582246581331ac7fbbd44aa1f1c136c8a9c8febbcf462432ac81302263308c21e1a2e7868beb7f73bbcb52a8e67935d133cb37f5bdcb6564eaff3a811805101 languageName: node linkType: hard @@ -8174,12 +10014,21 @@ __metadata: languageName: node linkType: hard +"@types/react-syntax-highlighter@npm:11.0.5": + version: 11.0.5 + resolution: "@types/react-syntax-highlighter@npm:11.0.5" + dependencies: + "@types/react": "*" + checksum: 8f4dce3eb5c70178c5ec2f7434983d632d02a0371a80c31ea012e37a2b8b2174bee482c3b85764333cbe3bcba9132b95307e23ac56d05d490e485e371bdcea46 + languageName: node + linkType: hard + "@types/react-table@npm:^6.8.5": - version: 6.8.10 - resolution: "@types/react-table@npm:6.8.10" + version: 6.8.6 + resolution: "@types/react-table@npm:6.8.6" dependencies: "@types/react": "*" - checksum: 2f8fcbe195c53b2685f403f5d66c09b60917d3af7ec9e29f8b3ecdc748eb6db5a93b4aecaaed4910ff33671a8745da2c34184b445cd184ad504b0240be994029 + checksum: f1ae43654935f5991008ac1f7ed7ceaee6d18bccf33901902833fc6b302c2aed5b19f2def86825e3cebde9be94354dfbdca525a16824523a8f0304225a3ef26f languageName: node linkType: hard @@ -8193,22 +10042,32 @@ __metadata: linkType: hard "@types/react-transition-group@npm:^4.2.0": - version: 4.4.6 - resolution: "@types/react-transition-group@npm:4.4.6" + version: 4.2.3 + resolution: "@types/react-transition-group@npm:4.2.3" dependencies: "@types/react": "*" - checksum: 0872143821d7ee20a1d81e965f8b1e837837f11cd2206973f1f98655751992d9390304d58bac192c9cd923eca95bff107d8c9e3364a180240d5c2a6fd70fd7c3 + checksum: 58f1ce88c9c0e604a93e57a68aa93981648f3769c87c4a9cbe2426334e9a7e7da8904b6d57fb54938e1881892a30ddc97b6c07f73b9492da026efb3584e23840 + languageName: node + linkType: hard + +"@types/react@npm:*": + version: 16.9.17 + resolution: "@types/react@npm:16.9.17" + dependencies: + "@types/prop-types": "*" + csstype: ^2.2.0 + checksum: 1d6598e6f070013498195a1bcce3090328f5ac6e64cd99a95ebbfa6494ac187ada03af317ba1230756b9c729d853a40fca58f39b150e2da9103a454291edf37d languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:>=16, @types/react@npm:^18.0.28": - version: 18.2.7 - resolution: "@types/react@npm:18.2.7" +"@types/react@npm:>=16, @types/react@npm:^18.0.28": + version: 18.2.8 + resolution: "@types/react@npm:18.2.8" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: caa5da4cf929766738ec789301dc6fb6624bd48dd317d851c4c9b84b1f47cd8ebe17fe01398cadaa0bc938cd4d502d67f4b9de9ff771dc132096bdc86228efba + checksum: 351fe2450d30bff2ceb6aa84788e948317555e5ea22cb44f6778e08c977aab1878a0119bd94bc3d1bec5f5af4a75ffaa2ce111df5cd9d4ce26bfd719e4d971c2 languageName: node linkType: hard @@ -8272,26 +10131,26 @@ __metadata: linkType: hard "@types/serve-static@npm:*": - version: 1.15.1 - resolution: "@types/serve-static@npm:1.15.1" + version: 1.13.5 + resolution: "@types/serve-static@npm:1.13.5" dependencies: + "@types/express-serve-static-core": "*" "@types/mime": "*" - "@types/node": "*" - checksum: 2e078bdc1e458c7dfe69e9faa83cc69194b8896cce57cb745016580543c7ab5af07fdaa8ac1765eb79524208c81017546f66056f44d1204f812d72810613de36 + checksum: 82d93129d097cf8c94348e7c1fef65e3d5838775f6fa6a2e3240a57a0dc8fd8dc57cf535223acee36f8c242e6bda97ce2a5dccf57fbad408498ab71492144b8a languageName: node linkType: hard "@types/sinonjs__fake-timers@npm:^6.0.1": - version: 6.0.4 - resolution: "@types/sinonjs__fake-timers@npm:6.0.4" - checksum: 200cb24235409964269465e8a94ad735ec8bab98f3b2405cd6351fa6f6399be268cbbd4e824c9d361d9431ae11070cff4c3b6400b18aff03cb7933985853c0c9 + version: 6.0.2 + resolution: "@types/sinonjs__fake-timers@npm:6.0.2" + checksum: fe62eec9cffa05aa159a036f671c8ba4117c6abe186d574c92e573117075825a756c56a4fe955bd874b77f6054fa25c1420eb22619312c43412f75f3d95f885f languageName: node linkType: hard "@types/sizzle@npm:^2.3.2": - version: 2.3.3 - resolution: "@types/sizzle@npm:2.3.3" - checksum: 586a9fb1f6ff3e325e0f2cc1596a460615f0bc8a28f6e276ac9b509401039dd242fa8b34496d3a30c52f5b495873922d09a9e76c50c2ab2bcc70ba3fb9c4e160 + version: 2.3.2 + resolution: "@types/sizzle@npm:2.3.2" + checksum: 783b6382934d8f12f2e21220a01c4557150f07abd18336f392664fb74ceaa9a9d59b7c859c0b82fd3f15b6484774cd0d493261fe64c78ee399bf198a8fe8d89d languageName: node linkType: hard @@ -8328,34 +10187,41 @@ __metadata: linkType: hard "@types/styled-jsx@npm:^2.2.8": - version: 2.2.9 - resolution: "@types/styled-jsx@npm:2.2.9" + version: 2.2.8 + resolution: "@types/styled-jsx@npm:2.2.8" dependencies: "@types/react": "*" - checksum: 0e7e9bce8435116168b2470c7599b3b6ad5775c678d5dc06b64b0bc4fe369c59603c794a7298e2ca4e209aa0135f98df89793a3a0778251c1907b34198c55e9e + checksum: 6f1e5d893da847595a625c0281a78350d03c0650a7abb7aedbf5a20ccb085d925185823df611f6aff45fa908904bc3736f8d8bafd7b990b1563d25d92339904f languageName: node linkType: hard "@types/superagent@npm:*": - version: 4.1.18 - resolution: "@types/superagent@npm:4.1.18" + version: 4.1.13 + resolution: "@types/superagent@npm:4.1.13" dependencies: "@types/cookiejar": "*" "@types/node": "*" - checksum: 4e50cb41e6f0ac55917dddae4665e5251ce0ec086f89172c8b53432c0c3ee026b9243ba4c994aa2702720d7c288fd7ae77f241f9fb9fb15d2d7c4b6bc2ee7079 + checksum: dffbfd1d3e5b9ed3f44d00e388ce9617407f5a3333241ffcfcf9056b446643794e62a09b817df83611e2f6e8a5bf6a50ba6cfe5abb1afb0f2c4771cdf5b68136 languageName: node linkType: hard "@types/supertest@npm:^2.0.11": - version: 2.0.12 - resolution: "@types/supertest@npm:2.0.12" + version: 2.0.11 + resolution: "@types/supertest@npm:2.0.11" dependencies: "@types/superagent": "*" - checksum: f0e2b44f86bec2f708d6a3d0cb209055b487922040773049b0f8c6b557af52d4b5fa904e17dfaa4ce6e610172206bbec7b62420d158fa57b6ffc2de37b1730d3 + checksum: 291abc0d37abe833d517fcfd0c22d51e7d5ffea85ce990603a0d058afa7fe2465b1251d50642ddfd640f66d047029af512793215b612c39adbee72fae5b2ef4f languageName: node linkType: hard -"@types/tapable@npm:^1, @types/tapable@npm:^1.0.5": +"@types/tapable@npm:*, @types/tapable@npm:^1.0.5": + version: 1.0.6 + resolution: "@types/tapable@npm:1.0.6" + checksum: 5be0d2b1c71f0fbd92a3df23140fc1907c8c4471f42385ce1cf700144405a1baa5c272964c8cb0488b589b354c2a952835a9d9e64b1e131ae88ab36cf46ab5da + languageName: node + linkType: hard + +"@types/tapable@npm:^1": version: 1.0.8 resolution: "@types/tapable@npm:1.0.8" checksum: b4b754dd0822c407b8f29ef6b766490721c276880f9e976d92ee2b3ef915f11a05a2442ae36c8978bcd872ad6bc833b0a2c4d267f2d611590668a366bad50652 @@ -8363,58 +10229,51 @@ __metadata: linkType: hard "@types/testing-library__jest-dom@npm:^5.9.1": - version: 5.14.6 - resolution: "@types/testing-library__jest-dom@npm:5.14.6" + version: 5.9.1 + resolution: "@types/testing-library__jest-dom@npm:5.9.1" dependencies: "@types/jest": "*" - checksum: 92f81cefeacba3b5c06d4b3fbea0341fe2bcaa6e425c026ae262de39f1148c2588cf3003112aa4ac0880c3972ffb77641a863f3be71518d1d8080402c944e326 - languageName: node - linkType: hard - -"@types/triple-beam@npm:^1.3.2": - version: 1.3.2 - resolution: "@types/triple-beam@npm:1.3.2" - checksum: dd7b4a563fb710abc992e5d59eac481bed9e303fada2e276e37b00be31c392e03300ee468e57761e616512872e77935f92472877d0704a19688d15a726cee17b + checksum: 223edc133a7e6c62f00f9f05ae915553d714baf58d0bbc107f9f75fa579ec232d44a44bb192cdf7f10887cb31eae00f1f93904fdc6ac76998e4b8c7d2f82e9f1 languageName: node linkType: hard "@types/uglify-js@npm:*": - version: 3.17.1 - resolution: "@types/uglify-js@npm:3.17.1" + version: 3.9.3 + resolution: "@types/uglify-js@npm:3.9.3" dependencies: source-map: ^0.6.1 - checksum: 76b9aa6b5c19690bee1fba29835ca580ec92db2b43cb8e2acd0278086138372a66e55bbd785c90d032bc890069f0cfde9c763f2d2860bb1a747b581a04d0999b + checksum: 5f16c591c7d558cd1548dfe48b7a07f1146725e1d95eebb48937d996469894c72f58d66ab7649751e1f9fc51a306852a35272ef8cf8309959c334688198af33a languageName: node linkType: hard "@types/unist@npm:*, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2, @types/unist@npm:^2.0.3": - version: 2.0.6 - resolution: "@types/unist@npm:2.0.6" - checksum: 25cb860ff10dde48b54622d58b23e66214211a61c84c0f15f88d38b61aa1b53d4d46e42b557924a93178c501c166aa37e28d7f6d994aba13d24685326272d5db + version: 2.0.3 + resolution: "@types/unist@npm:2.0.3" + checksum: 4427306b094561da28164e7e5250c4e6b382cb8eac40bf7e6bb0ff1e6e00c13e47aaf32e4a08fc8ba54602d07f79a39fb9ba304cc9dc886b1e3caf824649edbd languageName: node linkType: hard "@types/webpack-env@npm:^1.16.0": - version: 1.18.1 - resolution: "@types/webpack-env@npm:1.18.1" - checksum: 3173c069763e51a96565d602af7e6dac9d772ae4aa6f26cac187cbf599a7f0b88f790b4b050b9dbdb0485daed3061b4a337863f3b8ce66f8a4e51f75ad387c6a + version: 1.16.2 + resolution: "@types/webpack-env@npm:1.16.2" + checksum: 122273f20e2bed6895aae2f03891f51ddacd826018e395d18aa5d833ad0462bb159637b83f8d202907234a6a48c66a8e4e9fdd703afc66f6afddb83eeac82b13 languageName: node linkType: hard "@types/webpack-sources@npm:*": - version: 3.2.0 - resolution: "@types/webpack-sources@npm:3.2.0" + version: 1.4.0 + resolution: "@types/webpack-sources@npm:1.4.0" dependencies: "@types/node": "*" "@types/source-list-map": "*" source-map: ^0.7.3 - checksum: fa23dcfb99f79cc0ba8e6ca41cb8dedb406f8d7772e8e3d3d9b443bfb36557a1a78f4de2b97905554db98beee1a2ef6f930e188977adde6452392a64dd4b7c2a + checksum: 84b2c9ff4bd2a2ff9fc94eccef05c121db8e2e3511e3af68dbb9b4e2f1a4fbba4f52aa13cdd405ceea40821b4ef7a422b80a3098917523c988677bacc7a7d299 languageName: node linkType: hard -"@types/webpack@npm:^4.41.26, @types/webpack@npm:^4.41.8": - version: 4.41.33 - resolution: "@types/webpack@npm:4.41.33" +"@types/webpack@npm:^4.41.26": + version: 4.41.31 + resolution: "@types/webpack@npm:4.41.31" dependencies: "@types/node": "*" "@types/tapable": ^1 @@ -8422,41 +10281,55 @@ __metadata: "@types/webpack-sources": "*" anymatch: ^3.0.0 source-map: ^0.6.0 - checksum: 5f64818128c94026be0e43e77d687e2d90f0da526a3a7c308c6a0bb12e93a35c9243be427bbf6865f64fd71dc5b32715af9b9da0cd6ae8335081b6db995bad2b + checksum: 8aa4b4ad68bb7a6ee5bd027005014e6242434162ed4c14cd251713ad6041e42bf7629fc56a5edc5a2124b49cc0dce273d6ee3386fae9a9cfe02e1f7e82087ea2 + languageName: node + linkType: hard + +"@types/webpack@npm:^4.41.8": + version: 4.41.21 + resolution: "@types/webpack@npm:4.41.21" + dependencies: + "@types/anymatch": "*" + "@types/node": "*" + "@types/tapable": "*" + "@types/uglify-js": "*" + "@types/webpack-sources": "*" + source-map: ^0.6.0 + checksum: 5ff1ce5d5d0e791d127a63f0971e2ccc002e82fb22e424fcdf9c774321b6c6cdadcd1f49a85fd4304352d68fee4c9d5296b6529ded6f7be2ce63d99f7560f567 languageName: node linkType: hard "@types/yargs-parser@npm:*": - version: 21.0.0 - resolution: "@types/yargs-parser@npm:21.0.0" - checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 + version: 13.1.0 + resolution: "@types/yargs-parser@npm:13.1.0" + checksum: 03d18d03e1fcff805f24eaadcf8993f581118ff1b0f34bba587cb515da9544d2c018c8cfc9df5c8d9840ade8a2a7ae025db54bfac26261151ba560cec7557216 languageName: node linkType: hard "@types/yargs@npm:^13.0.0": - version: 13.0.12 - resolution: "@types/yargs@npm:13.0.12" + version: 13.0.4 + resolution: "@types/yargs@npm:13.0.4" dependencies: "@types/yargs-parser": "*" - checksum: 4eb34d8c071892299646e5a3fb02a643f5a5ea8da8f4d1817001882ebbcfa4fbda235b8978732f8eb55fa16433296e2087907fe69678a69125f0dca627a91426 + checksum: 2700064d70fd88cf11c1b85be0de2b2b08cfcb9cf98847ca01386bd81b2122c0b4066169b05315a5a554b7b7a7504ef5ae073bd015cd8debe351ca6aac96da4a languageName: node linkType: hard "@types/yargs@npm:^15.0.0": - version: 15.0.15 - resolution: "@types/yargs@npm:15.0.15" + version: 15.0.5 + resolution: "@types/yargs@npm:15.0.5" dependencies: "@types/yargs-parser": "*" - checksum: 3420f6bcc508a895ef91858f8e6de975c710e4498cf6ed293f1174d3f1ad56edb4ab8481219bf6190f64a3d4115fab1d13ab3edc90acd54fba7983144040e446 + checksum: fe56199c6ffc539948bb80b17fa8ffff8d7ed77e8cb21f11b5aea434582b72f03751fe5e681bff0b195724d8ea60faa5102c3051292df560b96bb2741327b2dc languageName: node linkType: hard "@types/yargs@npm:^16.0.0": - version: 16.0.5 - resolution: "@types/yargs@npm:16.0.5" + version: 16.0.4 + resolution: "@types/yargs@npm:16.0.4" dependencies: "@types/yargs-parser": "*" - checksum: 22697f7cc8aa32dcc10981a87f035e183303a58351c537c81fb450270d5c494b1d918186210e445b0eb2e4a8b34a8bda2a595f346bdb1c9ed2b63d193cb00430 + checksum: caa21d2c957592fe2184a8368c8cbe5a82a6c2e2f2893722e489f842dc5963293d2f3120bc06fe3933d60a3a0d1e2eb269649fd6b1947fe1820f8841ba611dd9 languageName: node linkType: hard @@ -8479,24 +10352,24 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^4.18.0": - version: 4.33.0 - resolution: "@typescript-eslint/eslint-plugin@npm:4.33.0" + version: 4.18.0 + resolution: "@typescript-eslint/eslint-plugin@npm:4.18.0" dependencies: - "@typescript-eslint/experimental-utils": 4.33.0 - "@typescript-eslint/scope-manager": 4.33.0 - debug: ^4.3.1 + "@typescript-eslint/experimental-utils": 4.18.0 + "@typescript-eslint/scope-manager": 4.18.0 + debug: ^4.1.1 functional-red-black-tree: ^1.0.1 - ignore: ^5.1.8 - regexpp: ^3.1.0 - semver: ^7.3.5 - tsutils: ^3.21.0 + lodash: ^4.17.15 + regexpp: ^3.0.0 + semver: ^7.3.2 + tsutils: ^3.17.1 peerDependencies: "@typescript-eslint/parser": ^4.0.0 eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: typescript: optional: true - checksum: d74855d0a5ffe0b2f362ec02fcd9301d39a53fb4155b9bd0cb15a0a31d065143129ebf98df9d86af4b6f74de1d423a4c0d8c0095520844068117453afda5bc4f + checksum: 0e781b0d88ad29badc593a5d3babc53c38a4a5ad8f76161b2d9d47b651c939233f83fb4ce14dd075d86625e834aa25fb07d6f19bb7d98ec55646664eec8c7e29 languageName: node linkType: hard @@ -8514,19 +10387,19 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:4.33.0, @typescript-eslint/experimental-utils@npm:^4.0.1": - version: 4.33.0 - resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" +"@typescript-eslint/experimental-utils@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/experimental-utils@npm:4.18.0" dependencies: - "@types/json-schema": ^7.0.7 - "@typescript-eslint/scope-manager": 4.33.0 - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/typescript-estree": 4.33.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 + "@types/json-schema": ^7.0.3 + "@typescript-eslint/scope-manager": 4.18.0 + "@typescript-eslint/types": 4.18.0 + "@typescript-eslint/typescript-estree": 4.18.0 + eslint-scope: ^5.0.0 + eslint-utils: ^2.0.0 peerDependencies: eslint: "*" - checksum: f859800ada0884f92db6856f24efcb1d073ac9883ddc2b1aa9339f392215487895bed8447ebce3741e8141bb32e545244abef62b73193ba9a8a0527c523aabae + checksum: e3a404cc0102b3a414798daf2f98782657112abc99ca6b83a74978c078a28c86314cb09ff1919ec00356001e10f2f21ea395c1c0b643849f0dec0f70904c1f15 languageName: node linkType: hard @@ -8545,6 +10418,22 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/experimental-utils@npm:^4.0.1": + version: 4.1.0 + resolution: "@typescript-eslint/experimental-utils@npm:4.1.0" + dependencies: + "@types/json-schema": ^7.0.3 + "@typescript-eslint/scope-manager": 4.1.0 + "@typescript-eslint/types": 4.1.0 + "@typescript-eslint/typescript-estree": 4.1.0 + eslint-scope: ^5.0.0 + eslint-utils: ^2.0.0 + peerDependencies: + eslint: "*" + checksum: 11a1c865e7d87c20d27f01d4bac37b1377ac497a1c27a3456d035a3085e57cfc0408a9296ff27b78facc7358c4e3a28b4dbbd2e99700b149bc767586195e3ceb + languageName: node + linkType: hard + "@typescript-eslint/parser@npm:^2.25.0": version: 2.34.0 resolution: "@typescript-eslint/parser@npm:2.34.0" @@ -8562,30 +10451,77 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^4.18.0, @typescript-eslint/parser@npm:^4.4.1, @typescript-eslint/parser@npm:^4.5.0": - version: 4.33.0 - resolution: "@typescript-eslint/parser@npm:4.33.0" +"@typescript-eslint/parser@npm:^4.18.0, @typescript-eslint/parser@npm:^4.4.1": + version: 4.19.0 + resolution: "@typescript-eslint/parser@npm:4.19.0" + dependencies: + "@typescript-eslint/scope-manager": 4.19.0 + "@typescript-eslint/types": 4.19.0 + "@typescript-eslint/typescript-estree": 4.19.0 + debug: ^4.1.1 + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: ea5dae1492477861ba71b201bc0917b7b9a4364fb0981d2c7184687bf292ce5e05b824d2797e1a64ec0a6eee42dd8e5fea17878983574b7355320117d5f27850 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^4.5.0": + version: 4.31.1 + resolution: "@typescript-eslint/parser@npm:4.31.1" dependencies: - "@typescript-eslint/scope-manager": 4.33.0 - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/typescript-estree": 4.33.0 + "@typescript-eslint/scope-manager": 4.31.1 + "@typescript-eslint/types": 4.31.1 + "@typescript-eslint/typescript-estree": 4.31.1 debug: ^4.3.1 peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 102457eae1acd516211098fea081c8a2ed728522bbda7f5a557b6ef23d88970514f9a0f6285d53fca134d3d4d7d17822b5d5e12438d5918df4d1f89cc9e67d57 + checksum: e4e312ec1ef1666fe3ed9cd565f85cc5e11d0a5ae4dff529fc8f212cc758f46ec8ebd388194a57f73ea3250e0ec9040fef8bee32d922d88153c04870683773fa + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:4.1.0": + version: 4.1.0 + resolution: "@typescript-eslint/scope-manager@npm:4.1.0" + dependencies: + "@typescript-eslint/types": 4.1.0 + "@typescript-eslint/visitor-keys": 4.1.0 + checksum: 3b154c988b137f2cb0b67abca59f329e2196e66b0188d942807258aaa2e1f98e496aeb5269bfbf50a984001d9f5f193717d41e03d5bc06cc6c44018204152e05 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/scope-manager@npm:4.18.0" + dependencies: + "@typescript-eslint/types": 4.18.0 + "@typescript-eslint/visitor-keys": 4.18.0 + checksum: 52b6dbac8cac1599d087882d9469fba00eff9d3e4c64dc1118eef3d10a7ba02e59675c0cfe1363af0cd87c8840d31f7375fe3b01a0866c5ff6a69721d52e586d + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:4.19.0": + version: 4.19.0 + resolution: "@typescript-eslint/scope-manager@npm:4.19.0" + dependencies: + "@typescript-eslint/types": 4.19.0 + "@typescript-eslint/visitor-keys": 4.19.0 + checksum: e55946ea064bad5228c96c2624825c292d5fdb19b7813f2dc9a22a6574a70e63fcc059360980eed85c97565bf52c615b0bbd3c40a177ece10456ea40ea5ddb9d languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/scope-manager@npm:4.33.0" +"@typescript-eslint/scope-manager@npm:4.31.1": + version: 4.31.1 + resolution: "@typescript-eslint/scope-manager@npm:4.31.1" dependencies: - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/visitor-keys": 4.33.0 - checksum: 9a25fb7ba7c725ea7227a24d315b0f6aacbad002e2549a049edf723c1d3615c22f5c301f0d7d615b377f2cdf2f3519d97e79af0c459de6ef8d2aaf0906dff13e + "@typescript-eslint/types": 4.31.1 + "@typescript-eslint/visitor-keys": 4.31.1 + checksum: 386442e7713df96cf32565e0f3caff173a9206630f385c1cfa09f11d8b4479a9f51572a4b795e4b68b2740bacebd1bb3a3de5a69bee564bc28dbce4b035ed3fb languageName: node linkType: hard @@ -8596,10 +10532,31 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/types@npm:4.33.0" - checksum: 3baae1ca35872421b4eb60f5d3f3f32dc1d513f2ae0a67dee28c7d159fd7a43ed0d11a8a5a0f0c2d38507ffa036fc7c511cb0f18a5e8ac524b3ebde77390ec53 +"@typescript-eslint/types@npm:4.1.0": + version: 4.1.0 + resolution: "@typescript-eslint/types@npm:4.1.0" + checksum: e6d76183e8b422b768595074dae3f8ebc797ec6c5108eb425674280df4f4762623f69e0dff53031bcbf701b711ebe059fcf28f78c94c3c1199000102add00d9f + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/types@npm:4.18.0" + checksum: 3397b58099c0a86a13b201b9b6b2313577d92f71dd5be5f87f050559902b36be0de63e54e1d1ceda39e8cf1d57937588cff7374b2481a5a92e8ede5e8c986872 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:4.19.0": + version: 4.19.0 + resolution: "@typescript-eslint/types@npm:4.19.0" + checksum: e745fb8f9fd335e2e822c97ec332fc8b70e95bb4dff7e650e1851c5550116ede9ac54fb6f5d4375ae0ce2d9155eeef532a870f09a04bd9491f6eafccd8c13e4c + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:4.31.1": + version: 4.31.1 + resolution: "@typescript-eslint/types@npm:4.31.1" + checksum: 08b5cf0d02fbf946a4b10e93279e3253287e4826ee744e7d3f38d7da241aaa6fce2743e448f9cdf36d93c20259e17248e50b9fffdff59e1c878289acca0c2d65 languageName: node linkType: hard @@ -8640,12 +10597,67 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" +"@typescript-eslint/typescript-estree@npm:4.1.0": + version: 4.1.0 + resolution: "@typescript-eslint/typescript-estree@npm:4.1.0" dependencies: - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/visitor-keys": 4.33.0 + "@typescript-eslint/types": 4.1.0 + "@typescript-eslint/visitor-keys": 4.1.0 + debug: ^4.1.1 + globby: ^11.0.1 + is-glob: ^4.0.1 + lodash: ^4.17.15 + semver: ^7.3.2 + tsutils: ^3.17.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: c10cbe5ecc0438b065739874710027afb3d6cc69870bc0b2da2c8a5f4bac0101967c8307ea3544278a372597f80e0771aac8ba516d487e53c46186d47cbdcedd + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:4.18.0" + dependencies: + "@typescript-eslint/types": 4.18.0 + "@typescript-eslint/visitor-keys": 4.18.0 + debug: ^4.1.1 + globby: ^11.0.1 + is-glob: ^4.0.1 + semver: ^7.3.2 + tsutils: ^3.17.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 451d329f0086cf1ecabfe1f3b73cc291472e02b3e167d83f2ffa6681a8de9054c1d8c63a6b56f34da22910802483382fc3a456221a94db5013f21e76e83a933b + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:4.19.0": + version: 4.19.0 + resolution: "@typescript-eslint/typescript-estree@npm:4.19.0" + dependencies: + "@typescript-eslint/types": 4.19.0 + "@typescript-eslint/visitor-keys": 4.19.0 + debug: ^4.1.1 + globby: ^11.0.1 + is-glob: ^4.0.1 + semver: ^7.3.2 + tsutils: ^3.17.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: e28563086ea38dd058403edf83b22723945b3f08feb00e92b2bcb646e2b2d3073f036150f99be2123ec94e9d74c28016c9862912bbc1cef9872446fb8360b03b + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:4.31.1": + version: 4.31.1 + resolution: "@typescript-eslint/typescript-estree@npm:4.31.1" + dependencies: + "@typescript-eslint/types": 4.31.1 + "@typescript-eslint/visitor-keys": 4.31.1 debug: ^4.3.1 globby: ^11.0.3 is-glob: ^4.0.1 @@ -8654,7 +10666,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 2566984390c76bd95f43240057215c068c69769e406e27aba41e9f21fd300074d6772e4983fa58fe61e80eb5550af1548d2e31e80550d92ba1d051bb00fe6f5c + checksum: 1780223f52fde98fcfef4e7d9a59fc811232f608800e6a69b73789aad34ddf43fc9d4041707baa88b25cf88c223a7f2a749cf084dc45d89de44a803b29e19eb3 languageName: node linkType: hard @@ -8667,20 +10679,43 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" +"@typescript-eslint/visitor-keys@npm:4.1.0": + version: 4.1.0 + resolution: "@typescript-eslint/visitor-keys@npm:4.1.0" dependencies: - "@typescript-eslint/types": 4.33.0 + "@typescript-eslint/types": 4.1.0 eslint-visitor-keys: ^2.0.0 - checksum: 59953e474ad4610c1aa23b2b1a964445e2c6201521da6367752f37939d854352bbfced5c04ea539274065e012b1337ba3ffa49c2647a240a4e87155378ba9873 + checksum: ca2b3d76faca9ae2d328ef64404c8e8f88a21bce38ac536e2e8605b7cded4f0a461f80703573701da608450df3aeb1d97f742b111d61fa7ce10fb849e90dd2f6 languageName: node linkType: hard -"@ungap/promise-all-settled@npm:1.1.2": - version: 1.1.2 - resolution: "@ungap/promise-all-settled@npm:1.1.2" - checksum: 08d37fdfa23a6fe8139f1305313562ebad973f3fac01bcce2773b2bda5bcb0146dfdcf3cb6a722cf0a5f2ca0bc56a827eac8f1e7b3beddc548f654addf1fc34c +"@typescript-eslint/visitor-keys@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:4.18.0" + dependencies: + "@typescript-eslint/types": 4.18.0 + eslint-visitor-keys: ^2.0.0 + checksum: 4e515d93edff7c2a7c7b558581c448865b845d2dcea912c2a19373b65f8f8949b858a2f2e283f670a3e49302892b9c139a50578de6d8ba8fe7e85cf3f880a5fe + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:4.19.0": + version: 4.19.0 + resolution: "@typescript-eslint/visitor-keys@npm:4.19.0" + dependencies: + "@typescript-eslint/types": 4.19.0 + eslint-visitor-keys: ^2.0.0 + checksum: 32f5b5315d54d05a16cd97f70577d79c93d3d4608cd9418a868eba769d4c4d81fce6d73b26ed616375716c7e51d180fb6d08a897166b29cbd1a420d55d621bb8 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:4.31.1": + version: 4.31.1 + resolution: "@typescript-eslint/visitor-keys@npm:4.31.1" + dependencies: + "@typescript-eslint/types": 4.31.1 + eslint-visitor-keys: ^2.0.0 + checksum: 14a86bf96a41a81feba32f5acbb72539345a33f250b2f17968dc7b9f4ae9eca00209a11dd208b9c6305f5a841a9f809713027c0ed969465e2d62a042d116bdc9 languageName: node linkType: hard @@ -8713,16 +10748,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": - version: 1.11.6 - resolution: "@webassemblyjs/ast@npm:1.11.6" - dependencies: - "@webassemblyjs/helper-numbers": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - checksum: 38ef1b526ca47c210f30975b06df2faf1a8170b1636ce239fc5738fc231ce28389dd61ecedd1bacfc03cbe95b16d1af848c805652080cb60982836eb4ed2c6cf - languageName: node - linkType: hard - "@webassemblyjs/ast@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/ast@npm:1.9.0" @@ -8734,13 +10759,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" - checksum: 29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 - languageName: node - linkType: hard - "@webassemblyjs/floating-point-hex-parser@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.9.0" @@ -8748,13 +10766,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/helper-api-error@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" - checksum: e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f - languageName: node - linkType: hard - "@webassemblyjs/helper-api-error@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/helper-api-error@npm:1.9.0" @@ -8762,13 +10773,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/helper-buffer@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-buffer@npm:1.11.6" - checksum: b14d0573bf680d22b2522e8a341ec451fddd645d1f9c6bd9012ccb7e587a2973b86ab7b89fe91e1c79939ba96095f503af04369a3b356c8023c13a5893221644 - languageName: node - linkType: hard - "@webassemblyjs/helper-buffer@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/helper-buffer@npm:1.9.0" @@ -8801,24 +10805,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/helper-numbers@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" - dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.11.6 - "@webassemblyjs/helper-api-error": 1.11.6 - "@xtuc/long": 4.2.2 - checksum: f4b562fa219f84368528339e0f8d273ad44e047a07641ffcaaec6f93e5b76fd86490a009aa91a294584e1436d74b0a01fa9fde45e333a4c657b58168b04da424 - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" - checksum: 3535ef4f1fba38de3475e383b3980f4bbf3de72bbb631c2b6584c7df45be4eccd62c6ff48b5edd3f1bcff275cfd605a37679ec199fc91fd0a7705d7f1e3972dc - languageName: node - linkType: hard - "@webassemblyjs/helper-wasm-bytecode@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.9.0" @@ -8826,18 +10812,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/helper-wasm-section@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-buffer": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/wasm-gen": 1.11.6 - checksum: b2cf751bf4552b5b9999d27bbb7692d0aca75260140195cb58ea6374d7b9c2dc69b61e10b211a0e773f66209c3ddd612137ed66097e3684d7816f854997682e9 - languageName: node - linkType: hard - "@webassemblyjs/helper-wasm-section@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/helper-wasm-section@npm:1.9.0" @@ -8850,15 +10824,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/ieee754@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/ieee754@npm:1.11.6" - dependencies: - "@xtuc/ieee754": ^1.2.0 - checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de - languageName: node - linkType: hard - "@webassemblyjs/ieee754@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/ieee754@npm:1.9.0" @@ -8868,15 +10833,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/leb128@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/leb128@npm:1.11.6" - dependencies: - "@xtuc/long": 4.2.2 - checksum: 7ea942dc9777d4b18a5ebfa3a937b30ae9e1d2ce1fee637583ed7f376334dd1d4274f813d2e250056cca803e0952def4b954913f1a3c9068bcd4ab4ee5143bf0 - languageName: node - linkType: hard - "@webassemblyjs/leb128@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/leb128@npm:1.9.0" @@ -8886,13 +10842,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/utf8@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/utf8@npm:1.11.6" - checksum: 807fe5b5ce10c390cfdd93e0fb92abda8aebabb5199980681e7c3743ee3306a75729bcd1e56a3903980e96c885ee53ef901fcbaac8efdfa480f9c0dae1d08713 - languageName: node - linkType: hard - "@webassemblyjs/utf8@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/utf8@npm:1.9.0" @@ -8916,35 +10865,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/wasm-edit@npm:^1.11.5": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-edit@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-buffer": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/helper-wasm-section": 1.11.6 - "@webassemblyjs/wasm-gen": 1.11.6 - "@webassemblyjs/wasm-opt": 1.11.6 - "@webassemblyjs/wasm-parser": 1.11.6 - "@webassemblyjs/wast-printer": 1.11.6 - checksum: 29ce75870496d6fad864d815ebb072395a8a3a04dc9c3f4e1ffdc63fc5fa58b1f34304a1117296d8240054cfdbc38aca88e71fb51483cf29ffab0a61ef27b481 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-gen@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-gen@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/ieee754": 1.11.6 - "@webassemblyjs/leb128": 1.11.6 - "@webassemblyjs/utf8": 1.11.6 - checksum: a645a2eecbea24833c3260a249704a7f554ef4a94c6000984728e94bb2bc9140a68dfd6fd21d5e0bbb09f6dfc98e083a45760a83ae0417b41a0196ff6d45a23a - languageName: node - linkType: hard - "@webassemblyjs/wasm-gen@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/wasm-gen@npm:1.9.0" @@ -8958,18 +10878,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/wasm-opt@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-opt@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-buffer": 1.11.6 - "@webassemblyjs/wasm-gen": 1.11.6 - "@webassemblyjs/wasm-parser": 1.11.6 - checksum: b4557f195487f8e97336ddf79f7bef40d788239169aac707f6eaa2fa5fe243557c2d74e550a8e57f2788e70c7ae4e7d32f7be16101afe183d597b747a3bdd528 - languageName: node - linkType: hard - "@webassemblyjs/wasm-opt@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/wasm-opt@npm:1.9.0" @@ -8982,20 +10890,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/wasm-parser@npm:1.11.6, @webassemblyjs/wasm-parser@npm:^1.11.5": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-parser@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": 1.11.6 - "@webassemblyjs/helper-api-error": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/ieee754": 1.11.6 - "@webassemblyjs/leb128": 1.11.6 - "@webassemblyjs/utf8": 1.11.6 - checksum: 8200a8d77c15621724a23fdabe58d5571415cda98a7058f542e670ea965dd75499f5e34a48675184947c66f3df23adf55df060312e6d72d57908e3f049620d8a - languageName: node - linkType: hard - "@webassemblyjs/wasm-parser@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/wasm-parser@npm:1.9.0" @@ -9024,16 +10918,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/wast-printer@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/wast-printer@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": 1.11.6 - "@xtuc/long": 4.2.2 - checksum: d2fa6a4c427325ec81463e9c809aa6572af6d47f619f3091bf4c4a6fc34f1da3df7caddaac50b8e7a457f8784c62cd58c6311b6cb69b0162ccd8d4c072f79cf8 - languageName: node - linkType: hard - "@webassemblyjs/wast-printer@npm:1.9.0": version: 1.9.0 resolution: "@webassemblyjs/wast-printer@npm:1.9.0" @@ -9077,14 +10961,21 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.3, abab@npm:^2.0.5": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e +"abab@npm:^2.0.3": + version: 2.0.3 + resolution: "abab@npm:2.0.3" + checksum: d3e4e4ff69d2ab4e2d11a2e9eb6d165485360fb15d866f70fc8f7480d1813bc3a2d4b405e05ed98f3d8b4557d5ad2447a08f7522e74884595c6aad313a4ac09b + languageName: node + linkType: hard + +"abab@npm:^2.0.5": + version: 2.0.5 + resolution: "abab@npm:2.0.5" + checksum: 0ec951b46d5418c2c2f923021ec193eaebdb4e802ffd5506286781b454be722a13a8430f98085cd3e204918401d9130ec6cc8f5ae19be315b3a0e857d83196e1 languageName: node linkType: hard -"abbrev@npm:1, abbrev@npm:^1.0.0": +"abbrev@npm:1": version: 1.1.1 resolution: "abbrev@npm:1.1.1" checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 @@ -9107,7 +10998,17 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.7, accepts@npm:~1.3.8": +"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.7": + version: 1.3.7 + resolution: "accepts@npm:1.3.7" + dependencies: + mime-types: ~2.1.24 + negotiator: 0.6.2 + checksum: 27fc8060ffc69481ff6719cd3ee06387d2b88381cb0ce626f087781bbd02201a645a9febc8e7e7333558354b33b1d2f922ad13560be4ec1b7ba9e76fc1c1241d + languageName: node + linkType: hard + +"accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -9117,10 +11018,24 @@ __metadata: languageName: node linkType: hard -"ace-builds@npm:^1.20.0, ace-builds@npm:^1.4.13, ace-builds@npm:^1.4.14": - version: 1.22.0 - resolution: "ace-builds@npm:1.22.0" - checksum: 2b349d6b3c8ad4780757c05f05a0815fa88a7b74afa0b6a97ea4367b7d2fe3516ea88f3073042d408c8eb1be100595a970449a5ff4144827a0dd75cd8cb96fe5 +"ace-builds@npm:^1.10.1": + version: 1.15.0 + resolution: "ace-builds@npm:1.15.0" + checksum: fc67d8c4358a3029c1d4caab7fbc5a4b021bd082dbd16684e4a8ab7e77da2cf194e2fac577ac4a6e22e06af8bd306ebb9382ad34c7f028dbea8895081f4ee9ce + languageName: node + linkType: hard + +"ace-builds@npm:^1.4.13": + version: 1.4.13 + resolution: "ace-builds@npm:1.4.13" + checksum: 512cc19c367a21d86f6b7c78ac59b44b01304d7cf345ce0ae767db9b14fc65653aec2f9dabde27e7d9c459000f4cef74656804f54fb7cb7867b8b810ea66878d + languageName: node + linkType: hard + +"ace-builds@npm:^1.4.14": + version: 1.14.0 + resolution: "ace-builds@npm:1.14.0" + checksum: 11d07e0875381ff8061beed336c52f2bc532fbf51fc4a410d97789b27e47d2094fbb779dffe00db00c6d781f3f72bdc83313b2ad6460e5b8e5fa8a343c5f3720 languageName: node linkType: hard @@ -9134,21 +11049,21 @@ __metadata: languageName: node linkType: hard -"acorn-import-assertions@npm:^1.9.0": - version: 1.9.0 - resolution: "acorn-import-assertions@npm:1.9.0" +"acorn-jsx@npm:^5.2.0": + version: 5.2.0 + resolution: "acorn-jsx@npm:5.2.0" peerDependencies: - acorn: ^8 - checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c + acorn: ^6.0.0 || ^7.0.0 + checksum: 9acbdb86f18fc109177c337c41f1d18f4f9966eceab605d5dd8f93dd8cc7e56d42695be79d8108fa92f7e60cf3d966ffbc03d56d3207c04ff6980cb3f5e50bf6 languageName: node linkType: hard "acorn-jsx@npm:^5.3.1": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" + version: 5.3.1 + resolution: "acorn-jsx@npm:5.3.1" peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + checksum: daf441a9d7b59c0ea1f7fe2934c48aca604a007455129ce35fa62ec3d4c8363e2efc2d4da636d18ce0049979260ba07d8b42bc002ae95182916d2c90901529c2 languageName: node linkType: hard @@ -9167,15 +11082,42 @@ __metadata: linkType: hard "acorn@npm:^6.4.1": - version: 6.4.2 - resolution: "acorn@npm:6.4.2" + version: 6.4.1 + resolution: "acorn@npm:6.4.1" bin: acorn: bin/acorn - checksum: 44b07053729db7f44d28343eed32247ed56dc4a6ec6dff2b743141ecd6b861406bbc1c20bf9d4f143ea7dd08add5dc8c290582756539bc03a8db605050ce2fb4 + checksum: 5ea4faa1fd30712b1d725da65e9612a93e566f40b0125df955c34669c33b81531e053a3c1501966e11217ca6026a0165f970e73c4eb8d3be7a957e4bef4ab67c languageName: node linkType: hard -"acorn@npm:^7.1.0, acorn@npm:^7.1.1, acorn@npm:^7.4.0, acorn@npm:^7.4.1": +"acorn@npm:^7.1.0": + version: 7.3.1 + resolution: "acorn@npm:7.3.1" + bin: + acorn: bin/acorn + checksum: 5b0295c8a34276c4bed7c606d38f83a3330e139514acc615aabdce3b0a0b3954e3a138530bdb1a67acde5666e6d652f569e054cadadec2434f017de4d8aa4e1f + languageName: node + linkType: hard + +"acorn@npm:^7.1.1": + version: 7.2.0 + resolution: "acorn@npm:7.2.0" + bin: + acorn: bin/acorn + checksum: a2b05485496fdb313338bd8a7a793de5fcb075e71f64cbb3f4ca6009249b692180ebf35c9662bf78ca52aafe590cf2cc3ff93be0038701115084b18e61d2e5ae + languageName: node + linkType: hard + +"acorn@npm:^7.4.0": + version: 7.4.0 + resolution: "acorn@npm:7.4.0" + bin: + acorn: bin/acorn + checksum: 1cbf7cae01f8fdc9ee2c65294b7f0a741a67760b22fee4ea3bbbffd0102fc76b07cd7437494221df7f7e51e75fdff3dae4bf11763d29e310e779fc61d3378ad5 + languageName: node + linkType: hard + +"acorn@npm:^7.4.1": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -9184,7 +11126,34 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": +"acorn@npm:^8.2.4": + version: 8.5.0 + resolution: "acorn@npm:8.5.0" + bin: + acorn: bin/acorn + checksum: 2e4c1dbed3da327684863debf31d341bf8882c6893c506653872c00977eee45675feb9129255d6c74c88424d2b20d889ca6de5b39776e5e3cccfc756b3ca1da8 + languageName: node + linkType: hard + +"acorn@npm:^8.4.1": + version: 8.7.0 + resolution: "acorn@npm:8.7.0" + bin: + acorn: bin/acorn + checksum: e0f79409d68923fbf1aa6d4166f3eedc47955320d25c89a20cc822e6ba7c48c5963d5bc657bc242d68f7a4ac9faf96eef033e8f73656da6c640d4219935fdfd0 + languageName: node + linkType: hard + +"acorn@npm:^8.5.0": + version: 8.7.1 + resolution: "acorn@npm:8.7.1" + bin: + acorn: bin/acorn + checksum: aca0aabf98826717920ac2583fdcad0a6fbe4e583fdb6e843af2594e907455aeafe30b1e14f1757cd83ce1776773cf8296ffc3a4acf13f0bd3dfebcf1db6ae80 + languageName: node + linkType: hard + +"acorn@npm:^8.8.0, acorn@npm:^8.8.2": version: 8.8.2 resolution: "acorn@npm:8.8.2" bin: @@ -9200,20 +11169,13 @@ __metadata: languageName: node linkType: hard -"address@npm:1.1.2": +"address@npm:1.1.2, address@npm:^1.0.1": version: 1.1.2 resolution: "address@npm:1.1.2" checksum: d966deee6ab9a0f96ed1d25dc73e91a248f64479c91f9daeb15237b8e3c39a02faac4e6afe8987ef9e5aea60a1593cef5882b7456ab2e6196fc0229a93ec39c2 languageName: node linkType: hard -"address@npm:^1.0.1": - version: 1.2.2 - resolution: "address@npm:1.2.2" - checksum: ace439960c1e3564d8f523aff23a841904bf33a2a7c2e064f7f60a064194075758b9690e65bd9785692a4ef698a998c57eb74d145881a1cecab8ba658ddb1607 - languageName: node - linkType: hard - "adjust-sourcemap-loader@npm:3.0.0": version: 3.0.0 resolution: "adjust-sourcemap-loader@npm:3.0.0" @@ -9248,17 +11210,10 @@ __metadata: languageName: node linkType: hard -"adler-32@npm:~1.3.0": - version: 1.3.1 - resolution: "adler-32@npm:1.3.1" - checksum: c7f6b02df64a4392fcf1591862344f56733716a558e97a8b06a553dadeeaec792054512389000f42f371b13d2be5370e056e18db3b573944b595c4cb7742c5c6 - languageName: node - linkType: hard - "adm-zip@npm:^0.5.5": - version: 0.5.10 - resolution: "adm-zip@npm:0.5.10" - checksum: 07ed91cf6423bf5dca4ee63977bc7635e91b8d21829c00829d48dce4c6932e1b19e6cfcbe44f1931c956e68795ae97183fc775913883fa48ce88a1ac11fb2034 + version: 0.5.5 + resolution: "adm-zip@npm:0.5.5" + checksum: b4edd91e109fe240690f5124456eff839d515d6837c6689dc17379f41f2f5223a982c6a53d5c64197a7669c8b93e75dd1fece78812a0b610d734936caa4e86b0 languageName: node linkType: hard @@ -9288,23 +11243,23 @@ __metadata: linkType: hard "agentkeepalive@npm:^4.2.1": - version: 4.3.0 - resolution: "agentkeepalive@npm:4.3.0" + version: 4.2.1 + resolution: "agentkeepalive@npm:4.2.1" dependencies: debug: ^4.1.0 - depd: ^2.0.0 + depd: ^1.1.2 humanize-ms: ^1.2.1 - checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 + checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 languageName: node linkType: hard "aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" + version: 3.0.1 + resolution: "aggregate-error@npm:3.0.1" dependencies: clean-stack: ^2.0.0 indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + checksum: 1f922d00cc51cf9f7f6f729c0b925689ed5a464aefc1fac8309924f622000ee3741d314d864b2d776f9627236ea79daf5a83d093f6b72edc52160571160eff82 languageName: node linkType: hard @@ -9356,7 +11311,16 @@ __metadata: languageName: node linkType: hard -"ajv-keywords@npm:^3.1.0, ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2": +"ajv-keywords@npm:^3.1.0, ajv-keywords@npm:^3.4.1": + version: 3.4.1 + resolution: "ajv-keywords@npm:3.4.1" + peerDependencies: + ajv: ^6.9.1 + checksum: 0ecb945d00934ccf6f1da9e82db4d5ef68988f4fff5bc07a30629eb15c2a6b7a85eff5cececfc9fdc3ca34a9d75dee1c8596991e59cc46f5105b765d17d9c7cd + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.5.2": version: 3.5.2 resolution: "ajv-keywords@npm:3.5.2" peerDependencies: @@ -9365,7 +11329,43 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.1.0, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.12.6": +"ajv@npm:^6.1.0, ajv@npm:^6.5.5": + version: 6.10.2 + resolution: "ajv@npm:6.10.2" + dependencies: + fast-deep-equal: ^2.0.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: c9510067077da598fd7c9c2e2b9fd9e1881d3817aca7357767b811b857d969d43899bd973608474f6cdad6984e2744f51419cf1c704903790fa7f93e0fd0b42f + languageName: node + linkType: hard + +"ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.2": + version: 6.12.2 + resolution: "ajv@npm:6.12.2" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 4a87256bbe209b71f5cc49ac98e21f36874747a728b39209635ea3be6f12536f401739ef210ce2877aa30e2abfe31bc9b741a7ee402216728ff4e66132e550e4 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.5 + resolution: "ajv@npm:6.12.5" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 12ff436e79492ddc1642e0fc1b45c671fa793c221adcd4390cee325eebcdf4e8c2391af96fd30fe7f46b533885726002f96c3580690c8d1d1d09b2e9b8008862 + languageName: node + linkType: hard + +"ajv@npm:^6.12.5, ajv@npm:^6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -9377,7 +11377,19 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.12.0": +"ajv@npm:^7.0.2": + version: 7.2.3 + resolution: "ajv@npm:7.2.3" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 259a965833f82b433dc5001e396a08262d816d495ac60e43ec7a2e32b0c02f0005565d39ecaaa8ec2d1fe142adcee7ad063d881f6dca3d38b3ed95bbb9208bba + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.12.0": version: 8.12.0 resolution: "ajv@npm:8.12.0" dependencies: @@ -9389,6 +11401,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.0.1": + version: 8.6.3 + resolution: "ajv@npm:8.6.3" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 690ffb9408415fdab43686b3f92037ba0c8362f5d0709a123ba3fb546e6ad81414455f80a2b5cc432ce924afe9864671198f022bc331a19c072d4ede152ec3ca + languageName: node + linkType: hard + "alphanum-sort@npm:^1.0.0": version: 1.0.2 resolution: "alphanum-sort@npm:1.0.2" @@ -9425,11 +11449,11 @@ __metadata: linkType: hard "ansi-align@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-align@npm:3.0.1" + version: 3.0.0 + resolution: "ansi-align@npm:3.0.0" dependencies: - string-width: ^4.1.0 - checksum: 6abfa08f2141d231c257162b15292467081fa49a208593e055c866aa0455b57f3a86b5a678c190c618faa79b4c59e254493099cb700dd9cf2293c6be2c8f5d8d + string-width: ^3.0.0 + checksum: 6bc5f3712d28a899063845a15c5da75b2f350dda8ffac6098581619b80a85d249cdd23c3dc7b596cd31e44477382bcdedff47e31201eaa10bb9708c9fce45330 languageName: node linkType: hard @@ -9449,20 +11473,13 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:^3.0.0": +"ansi-colors@npm:^3.0.0, ansi-colors@npm:^3.2.1": version: 3.2.4 resolution: "ansi-colors@npm:3.2.4" checksum: 026c51880e9f8eb59b112669a87dbea4469939ff94b131606303bbd697438a6691b16b9db3027aa9bf132a244214e83ab1508b998496a34d2aea5b437ac9e62d languageName: node linkType: hard -"ansi-colors@npm:^4.1.1": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e - languageName: node - linkType: hard - "ansi-cyan@npm:^0.1.1": version: 0.1.1 resolution: "ansi-cyan@npm:0.1.1" @@ -9486,7 +11503,16 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.1": +"ansi-escapes@npm:^4.2.1": + version: 4.3.1 + resolution: "ansi-escapes@npm:4.3.1" + dependencies: + type-fest: ^0.11.0 + checksum: c4962c1791cc4e29efb9976680bad7b23f322ca039e588406680fffc8b6bc6e223721193eb481dab076309d9a7371bbfc4e835efe5fe267e3395ffa047da239d + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.3.1": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -9515,15 +11541,6 @@ __metadata: languageName: node linkType: hard -"ansi-html-community@npm:0.0.8, ansi-html-community@npm:^0.0.8": - version: 0.0.8 - resolution: "ansi-html-community@npm:0.0.8" - bin: - ansi-html: bin/ansi-html - checksum: 04c568e8348a636963f915e48eaa3e01218322e1169acafdd79c384f22e5558c003f79bbc480c1563865497482817c7eed025f0653ebc17642fededa5cb42089 - languageName: node - linkType: hard - "ansi-html@npm:0.0.7, ansi-html@npm:^0.0.7": version: 0.0.7 resolution: "ansi-html@npm:0.0.7" @@ -9550,20 +11567,27 @@ __metadata: linkType: hard "ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc + version: 3.0.0 + resolution: "ansi-regex@npm:3.0.0" + checksum: 2ad11c416f81c39f5c65eafc88cf1d71aa91d76a2f766e75e457c2a3c43e8a003aadbf2966b61c497aa6a6940a36412486c975b3270cdfc3f413b69826189ec3 languageName: node linkType: hard "ansi-regex@npm:^4.0.0, ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 + version: 4.1.0 + resolution: "ansi-regex@npm:4.1.0" + checksum: 97aa4659538d53e5e441f5ef2949a3cffcb838e57aeaad42c4194e9d7ddb37246a6526c4ca85d3940a9d1e19b11cc2e114530b54c9d700c8baf163c31779baf8 languageName: node linkType: hard -"ansi-regex@npm:^5.0.0, ansi-regex@npm:^5.0.1": +"ansi-regex@npm:^5.0.0": + version: 5.0.0 + resolution: "ansi-regex@npm:5.0.0" + checksum: b1bb4e992a5d96327bb4f72eaba9f8047f1d808d273ad19d399e266bfcc7fb19a4d1a127a32f7bc61fe46f1a94a4d04ec4c424e3fbe184929aa866323d8ed4ce + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b @@ -9587,11 +11611,12 @@ __metadata: linkType: hard "ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" + version: 4.2.1 + resolution: "ansi-styles@npm:4.2.1" dependencies: + "@types/color-name": ^1.1.1 color-convert: ^2.0.1 - checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + checksum: 7c74dbc7ec912b9e45dacbfaa7e2513bea6aa24d5357a0cd3255e7f83ecfc62e1454c77ab150a8df60de700c83c17fbbf040e7c204b4b6fc7aa250c8afcb865f languageName: node linkType: hard @@ -9603,13 +11628,13 @@ __metadata: linkType: hard "ansi-to-html@npm:^0.6.11": - version: 0.6.15 - resolution: "ansi-to-html@npm:0.6.15" + version: 0.6.14 + resolution: "ansi-to-html@npm:0.6.14" dependencies: - entities: ^2.0.0 + entities: ^1.1.2 bin: ansi-to-html: bin/ansi-to-html - checksum: c899362a29b92c8ae075b72168b826f7c233875b475719304942f80695e0ce4a6812845021192da5fb0ac80b10209b4fae5aede42620a1b1b3d3b30f3ef77a86 + checksum: 18ca72230ff1987623340fa07a86f1da2f83061ea17ad792b76918fdb9af3f91bee096812a42085f93c5d81f71567449195a313935fea4386db236888b57ff60 languageName: node linkType: hard @@ -9637,7 +11662,27 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.0, anymatch@npm:^3.0.3, anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": +"anymatch@npm:^3.0.0": + version: 3.1.2 + resolution: "anymatch@npm:3.1.2" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 985163db2292fac9e5a1e072bf99f1b5baccf196e4de25a0b0b81865ebddeb3b3eb4480734ef0a2ac8c002845396b91aa89121f5b84f93981a4658164a9ec6e9 + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3, anymatch@npm:~3.1.1": + version: 3.1.1 + resolution: "anymatch@npm:3.1.1" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: c951385862bf114807d594bdffccb769bd7219ddc14f24fc135cde075ad2477a97991567b8bb5032d4f279f96897f0c2af6468a350a6c674ac0a5ee3b62a26d6 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -9664,43 +11709,44 @@ __metadata: linkType: hard "appcenter-analytics@npm:^4.4.3": - version: 4.4.5 - resolution: "appcenter-analytics@npm:4.4.5" + version: 4.4.3 + resolution: "appcenter-analytics@npm:4.4.3" dependencies: - appcenter: 4.4.5 - checksum: f144e8cfd30aefe332928f418928e1b3fce3e60a820b5a60017671a763add734175bbf422d71a85aba0f3fe2c84f54c3ca0dc0df496b7accc4518506b7897334 + appcenter: 4.4.3 + checksum: c0412580ccbf542c49d18ee6cbbf4fda5554f0ab92318d1c6ca82ea6392545498fceeac9df39a6fa61896f33a81abf15c0d86248c796d673561e89c4ccabcee0 languageName: node linkType: hard "appcenter-crashes@npm:^4.4.3": - version: 4.4.5 - resolution: "appcenter-crashes@npm:4.4.5" + version: 4.4.3 + resolution: "appcenter-crashes@npm:4.4.3" dependencies: - appcenter: 4.4.5 - checksum: a47e11adcd359d83aa2b9d385bd37f3ec88821d300d1f4a8620e39e2f164d995deae11af79eae6d19b023f22457109388595391f509096dac162704f3b82a948 + appcenter: 4.4.3 + checksum: ea54f88b45ded904a921c34b9766abce77f75f28e6d38b2ef6a0f7cc6d79069618cd3667eedb745cfa23c5dab0e43a18424d508eaad418f47f90e2e25014d45e languageName: node linkType: hard -"appcenter-link-scripts@npm:4.4.5": - version: 4.4.5 - resolution: "appcenter-link-scripts@npm:4.4.5" +"appcenter-link-scripts@npm:4.4.3": + version: 4.4.3 + resolution: "appcenter-link-scripts@npm:4.4.3" dependencies: debug: 4.1.1 glob: 5.0.15 + minimist: 1.2.5 mkdirp: 0.5.3 plist: ^3.0.2 which: 1.2.11 xcode: 2.0.0 - checksum: f28fba0f8061ff0ac8385ed953c627062c35278fc731634d5e986aa46502631e4dddb51ca2a62b6898b732c11761b4832a02bb46abf4f778d7c413f85da8843f + checksum: f1a63c6525924327e47c34f5ed47e651e35514c408b316e9edc11df199add733b3cb96505c7cab187460e7530578011df65ec40ab6a300e92c0b7cf76195a2a8 languageName: node linkType: hard -"appcenter@npm:4.4.5, appcenter@npm:^4.4.3": - version: 4.4.5 - resolution: "appcenter@npm:4.4.5" +"appcenter@npm:4.4.3, appcenter@npm:^4.4.3": + version: 4.4.3 + resolution: "appcenter@npm:4.4.3" dependencies: - appcenter-link-scripts: 4.4.5 - checksum: c34d258e72da3aab2045762e2c2ab6fea70117c79abb6a86414a58ffa775dd06b18ebd81fab29eb612e4a1b33c3fd74d834f3c4fa40bc0d961438de162e34106 + appcenter-link-scripts: 4.4.3 + checksum: 088770952a866f53d8e35a3d9d58c2148e2c977b93e4888386a3fef5f4c1ecde6694bc28990c272a08fe006e2fb43dca288f5d33892aa22bbe1657cc0925f245 languageName: node linkType: hard @@ -9735,9 +11781,9 @@ __metadata: linkType: hard "arch@npm:^2.1.2": - version: 2.2.0 - resolution: "arch@npm:2.2.0" - checksum: e21b7635029fe8e9cdd5a026f9a6c659103e63fff423834323cdf836a1bb240a72d0c39ca8c470f84643385cf581bd8eda2cad8bf493e27e54bd9783abe9101f + version: 2.1.2 + resolution: "arch@npm:2.1.2" + checksum: cf750b4720970a704c8328ff013164bbcb00d06bf18239caeaebccc9ad36a82dcde287d9274e958d21276441272c50ec12f232b58f1dd216669b60279d08a44b languageName: node linkType: hard @@ -9759,22 +11805,22 @@ __metadata: linkType: hard "are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" + version: 3.0.0 + resolution: "are-we-there-yet@npm:3.0.0" dependencies: delegates: ^1.0.0 readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + checksum: 348edfdd931b0b50868b55402c01c3f64df1d4c229ab6f063539a5025fd6c5f5bb8a0cab409bbed8d75d34762d22aa91b7c20b4204eb8177063158d9ba792981 languageName: node linkType: hard "are-we-there-yet@npm:~1.1.2": - version: 1.1.7 - resolution: "are-we-there-yet@npm:1.1.7" + version: 1.1.5 + resolution: "are-we-there-yet@npm:1.1.5" dependencies: delegates: ^1.0.0 readable-stream: ^2.0.6 - checksum: 70d251719c969b2745bfe5ddf3ebaefa846a636e90a6d5212573676af5d6670e15457761d4725731e19cbebdce42c4ab0cbedf23ab047f2a08274985aa10a3c7 + checksum: 9a746b1dbce4122f44002b0c39fbba5b2c6f52c00e88b6ccba6fc68652323f8a1355a20e8ab94846995626d8de3bf67669a3b4a037dff0885db14607168f2b15 languageName: node linkType: hard @@ -9794,13 +11840,6 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced - languageName: node - linkType: hard - "aria-query@npm:^4.2.2": version: 4.2.2 resolution: "aria-query@npm:4.2.2" @@ -9811,7 +11850,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0, aria-query@npm:^5.1.3": +"aria-query@npm:^5.0.0": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -9935,23 +11974,34 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.0.3, array-includes@npm:^3.1.1, array-includes@npm:^3.1.5, array-includes@npm:^3.1.6": - version: 3.1.6 - resolution: "array-includes@npm:3.1.6" +"array-includes@npm:^3.0.3, array-includes@npm:^3.1.1": + version: 3.1.1 + resolution: "array-includes@npm:3.1.1" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.0 + is-string: ^1.0.5 + checksum: e6d35d400c156a7242eb7fdeac5a64fe2d2c96613c55daea015d828691d8f26c2bd1b34f9786728fb3b00f2d0211374ecf2e1c5f8a56beb434bf8b2a9725235f + languageName: node + linkType: hard + +"array-includes@npm:^3.1.3": + version: 3.1.3 + resolution: "array-includes@npm:3.1.3" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 - is-string: ^1.0.7 - checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.2 + get-intrinsic: ^1.1.1 + is-string: ^1.0.5 + checksum: eaab8812412b5ec921c8fe678a9d61f501b12f6c72e271e0e8652fe7f4145276cc7ad79ff303ac4ed69cbf5135155bfb092b1b6d552e423e75106d1c887da150 languageName: node linkType: hard "array-map@npm:~0.0.0": - version: 0.0.1 - resolution: "array-map@npm:0.0.1" - checksum: 5b13ff364799d99a5a7f47365b10a930edc17447287a1d74478478d266b4129aa854ca52e59bf729de4a8ca41481093eb4588a3c0db94599d21131c7878f8671 + version: 0.0.0 + resolution: "array-map@npm:0.0.0" + checksum: 30d73fdc99956c8bd70daea40db5a7d78c5c2c75a03c64fc77904885e79adf7d5a0595076534f4e58962d89435f0687182ac929e65634e3d19931698cbac8149 languageName: node linkType: hard @@ -10006,66 +12056,47 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.1, array.prototype.flat@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flat@npm:1.3.1" +"array.prototype.flat@npm:^1.2.1, array.prototype.flat@npm:^1.2.3": + version: 1.2.3 + resolution: "array.prototype.flat@npm:1.2.3" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - checksum: 5a8415949df79bf6e01afd7e8839bbde5a3581300e8ad5d8449dea52639e9e59b26a467665622783697917b43bf39940a6e621877c7dd9b3d1c1f97484b9b88b + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + checksum: ba4cf6e53871902a09fa7f56ff097e836f18d59de0219fe271e3d1a895a7ea98a62fa946cbdae95e73b774991206a32a26822227d081bd2cc5c771b95f851753 languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.2.1, array.prototype.flatmap@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flatmap@npm:1.3.1" +"array.prototype.flat@npm:^1.2.4": + version: 1.2.4 + resolution: "array.prototype.flat@npm:1.2.4" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + call-bind: ^1.0.0 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.1 + checksum: 1ec5d9887ae45e70e4b993e801b440ae5ddcd0d2c6d1dbe214c311e91436152f510916bdac82b066693544b9801a3c510dfbec8a278ababf8de7eb0bde74636f languageName: node linkType: hard -"array.prototype.map@npm:^1.0.5": - version: 1.0.5 - resolution: "array.prototype.map@npm:1.0.5" +"array.prototype.flatmap@npm:^1.2.1, array.prototype.flatmap@npm:^1.2.3": + version: 1.2.3 + resolution: "array.prototype.flatmap@npm:1.2.3" 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 - checksum: 70c4ecdd39480a51cfe84d18e4839a5f05d0b5d2785fee6838cd2bd5f86a17340a734ce7bb90c16804a70cead214b6f42c3d285f92267e11ccc0abd1880fe3b5 + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + function-bind: ^1.1.1 + checksum: d0f96793d3763cb3aa48a0a9860255c2f10eeaa9584a6e6e2315db67a2088a4a6a27e62ae5fdd3f49a1a61b4f481ed4991d95c9e752d581bae2ff73fff446607 languageName: node linkType: hard -"array.prototype.reduce@npm:^1.0.5": - version: 1.0.5 - resolution: "array.prototype.reduce@npm:1.0.5" +"array.prototype.map@npm:^1.0.1": + version: 1.0.2 + resolution: "array.prototype.map@npm:1.0.2" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 es-array-method-boxes-properly: ^1.0.0 - is-string: ^1.0.7 - checksum: f44691395f9202aba5ec2446468d4c27209bfa81464f342ae024b7157dbf05b164e47cca01250b8c7c2a8219953fb57651cca16aab3d16f43b85c0d92c26eef3 - languageName: node - linkType: hard - -"array.prototype.tosorted@npm:^1.1.1": - version: 1.1.1 - resolution: "array.prototype.tosorted@npm:1.1.1" - 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 - checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3 + is-string: ^1.0.4 + checksum: 8eb5566ad76ee691cec6eed061d5c31e7a51b42b4498e74673225199e913c38c5b4c15279596cb2ee96cbe0f40e030c1b96593ea8e1a2a42c33fde011b056cf2 languageName: node linkType: hard @@ -10090,24 +12121,23 @@ __metadata: languageName: node linkType: hard -"asn1.js@npm:^5.2.0": - version: 5.4.1 - resolution: "asn1.js@npm:5.4.1" +"asn1.js@npm:^4.0.0": + version: 4.10.1 + resolution: "asn1.js@npm:4.10.1" dependencies: bn.js: ^4.0.0 inherits: ^2.0.1 minimalistic-assert: ^1.0.0 - safer-buffer: ^2.1.0 - checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a + checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5 languageName: node linkType: hard -"asn1@npm:^0.2.4, asn1@npm:~0.2.3": - version: 0.2.6 - resolution: "asn1@npm:0.2.6" +"asn1@npm:~0.2.0, asn1@npm:~0.2.3": + version: 0.2.4 + resolution: "asn1@npm:0.2.4" dependencies: safer-buffer: ~2.1.0 - checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d + checksum: aa5d6f77b1e0597df53824c68cfe82d1d89ce41cb3520148611f025fbb3101b2d25dd6a40ad34e4fac10f6b19ed5e8628cd4b7d212261e80e83f02b39ee5663c languageName: node linkType: hard @@ -10170,6 +12200,13 @@ __metadata: languageName: node linkType: hard +"ast-types@npm:^0.13.2": + version: 0.13.3 + resolution: "ast-types@npm:0.13.3" + checksum: 23d08bc589aacb787e22ac7efc086ebcc158e739c057dac74de409a97e26ec9c5bcb2d0709f5678bd5d90f67d93f62fba0e5fe98161a0a3a7534d55a155544d8 + languageName: node + linkType: hard + "ast-types@npm:^0.14.2": version: 0.14.2 resolution: "ast-types@npm:0.14.2" @@ -10203,9 +12240,9 @@ __metadata: linkType: hard "async-each@npm:^1.0.1": - version: 1.0.6 - resolution: "async-each@npm:1.0.6" - checksum: d237e8c39348d5f1441edbd3893692912afbacaf83a2ccce8978ebeea804529a8838654b12208fbbc08c8b0411a1248948ee9bf9291ebe1921aabd5b613bc5db + version: 1.0.3 + resolution: "async-each@npm:1.0.3" + checksum: 868651cfeb209970b367fbb96df1e1c8dc0b22c681cda7238417005ab2a5fbd944ee524b43f2692977259a57b7cc2547e03ff68f2b5113dbdf953d48cc078dc3 languageName: node linkType: hard @@ -10216,29 +12253,43 @@ __metadata: languageName: node linkType: hard -"async@npm:3.2.3": - version: 3.2.3 - resolution: "async@npm:3.2.3" - checksum: c4bee57ab2249af3dc83ca3ef9acfa8e822c0d5e5aa41bae3eaf7f673648343cd64ecd7d26091ffd357f3f044428b17b5f00098494b6cf8b6b3e9681f0636ca1 +"async@npm:^2.4.0, async@npm:^2.6.0, async@npm:^2.6.2": + version: 2.6.3 + resolution: "async@npm:2.6.3" + dependencies: + lodash: ^4.17.14 + checksum: 5e5561ff8fca807e88738533d620488ac03a5c43fce6c937451f7e35f943d33ad06c24af3f681a48cca3d2b0002b3118faff0a128dc89438a9bf0226f712c499 languageName: node linkType: hard -"async@npm:^2.4.0, async@npm:^2.6.0, async@npm:^2.6.2, async@npm:^2.6.4": - version: 2.6.4 - resolution: "async@npm:2.6.4" - dependencies: - lodash: ^4.17.14 - checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 +"async@npm:^3.1.0, async@npm:^3.2.0": + version: 3.2.0 + resolution: "async@npm:3.2.0" + checksum: 6739fae769e6c9f76b272558f118ef041d45c979c573a8fe93f8cfbc32eb9c92da032e9effe6bbcc9b1131292cde6c4a9e61a442894aa06a262addd8dd3adda1 languageName: node linkType: hard -"async@npm:^3.1.0, async@npm:^3.2.0, async@npm:^3.2.3": +"async@npm:^3.2.3": version: 3.2.4 resolution: "async@npm:3.2.4" checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 languageName: node linkType: hard +"async@npm:~0.9.0": + version: 0.9.2 + resolution: "async@npm:0.9.2" + checksum: 87dbf129292b8a6c32a4e07f43f462498162aa86f404a7e11f978dbfdf75cfb163c26833684bb07b9d436083cd604cbbf730a57bfcbe436c6ae1ed266cdc56bb + languageName: node + linkType: hard + +"async@npm:~1.0.0": + version: 1.0.0 + resolution: "async@npm:1.0.0" + checksum: 04d4e57806b1a46b1635a3d821a9bcc06f893d6828a0468ceb494d1857b565754cbbaed22529aef79749dbbe7cf5080bfdb346b54be0e9cd35c41d7ef8d7911f + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -10278,20 +12329,37 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:^9.6.1, autoprefixer@npm:^9.8.6": - version: 9.8.8 - resolution: "autoprefixer@npm:9.8.8" +"autoprefixer@npm:^9.6.1": + version: 9.8.0 + resolution: "autoprefixer@npm:9.8.0" + dependencies: + browserslist: ^4.12.0 + caniuse-lite: ^1.0.30001061 + chalk: ^2.4.2 + normalize-range: ^0.1.2 + num2fraction: ^1.2.2 + postcss: ^7.0.30 + postcss-value-parser: ^4.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: b22e74318564022380b8a8c860acf584bb462e4be2beb2be6aefe442becb1e64b239de34ce38f5f2a131645c6242e4eb98df58fab7e8948b92030f0d56abae39 + languageName: node + linkType: hard + +"autoprefixer@npm:^9.8.6": + version: 9.8.7 + resolution: "autoprefixer@npm:9.8.7" dependencies: browserslist: ^4.12.0 caniuse-lite: ^1.0.30001109 + nanocolors: ^0.2.8 normalize-range: ^0.1.2 num2fraction: ^1.2.2 - picocolors: ^0.2.1 postcss: ^7.0.32 postcss-value-parser: ^4.1.0 bin: autoprefixer: bin/autoprefixer - checksum: 8f017672fbac248db0cf4e86aa707d8b148d9abadb842b5cf4c6be306d80fa6a654fadefd17e46213234c1f0947612acce2864f93e903f3e736b183fc1aedc45 + checksum: d9c6cb1ee3497f6f9346e0ea8619a8bc85844cd7ec6a86dcd6e9f8d29eed2b1a7c80135852af53b2380fb8347cc5b080ea77c294faae707e799e7b9025a40e70 languageName: node linkType: hard @@ -10303,20 +12371,19 @@ __metadata: linkType: hard "aws-sdk@npm:^2.0.4, aws-sdk@npm:^2.451.0": - version: 2.1386.0 - resolution: "aws-sdk@npm:2.1386.0" + version: 2.596.0 + resolution: "aws-sdk@npm:2.596.0" dependencies: - buffer: 4.9.2 + buffer: 4.9.1 events: 1.1.1 ieee754: 1.1.13 - jmespath: 0.16.0 + jmespath: 0.15.0 querystring: 0.2.0 sax: 1.2.1 url: 0.10.3 - util: ^0.12.4 - uuid: 8.0.0 - xml2js: 0.5.0 - checksum: 426224ede6a39230dd8542ec8b25e4105db9e34424620cf11a9d61e1e52c18fd9ba248f6943633fdfb255a0bcd5d52844863b93306b16ae2c2a214c3bb17cca6 + uuid: 3.3.2 + xml2js: 0.4.19 + checksum: 6596eb059f778f0bbceb626318f375913440c2998facc61ae142a4c70a49fba40dd04231ccec00fa654c41f667bacc537991bc315cef2ae65310c6314925d741 languageName: node linkType: hard @@ -10328,25 +12395,34 @@ __metadata: linkType: hard "aws4@npm:^1.8.0": - version: 1.12.0 - resolution: "aws4@npm:1.12.0" - checksum: 68f79708ac7c335992730bf638286a3ee0a645cf12575d557860100767c500c08b30e24726b9f03265d74116417f628af78509e1333575e9f8d52a80edfe8cbc + version: 1.9.0 + resolution: "aws4@npm:1.9.0" + checksum: 7e6a6bdb2eac40fd99ac6a29734eee4760f6132aa28aba4bcd35283211ac344cc0bd44ac86febd203b174e6f6f5085dd26f0c29287707cb6bb102f50fa517e38 languageName: node linkType: hard -"axe-core@npm:^4.6.2": - version: 4.7.2 - resolution: "axe-core@npm:4.7.2" - checksum: 5d86fa0f45213b0e54cbb5d713ce885c4a8fe3a72b92dd915a47aa396d6fd149c4a87fec53aa978511f6d941402256cfeb26f2db35129e370f25a453c688655a +"axe-core@npm:^3.5.4": + version: 3.5.5 + resolution: "axe-core@npm:3.5.5" + checksum: e2bcd1d849b1d4a94e2106d9ec0be780e125c678c395a6aab3febfec08140703aa85a9d47dc9be9dc7b5b1ce301cf7a4832bc7cdb2650c0b8595c04ee8b6fb09 languageName: node linkType: hard -"axios@npm:^0.21.0, axios@npm:^0.21.1": - version: 0.21.4 - resolution: "axios@npm:0.21.4" +"axios@npm:^0.21.0": + version: 0.21.0 + resolution: "axios@npm:0.21.0" dependencies: - follow-redirects: ^1.14.0 - checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c + follow-redirects: ^1.10.0 + checksum: ed838dc537df4f5ff086893befaff80d16212744128cdafba7a08b675b4bd37cab3645442de3f05b7038be42936d91f0a0995e1d81addb009009897ddec29527 + languageName: node + linkType: hard + +"axios@npm:^0.21.1": + version: 0.21.1 + resolution: "axios@npm:0.21.1" + dependencies: + follow-redirects: ^1.10.0 + checksum: c87915fa0b18c15c63350112b6b3563a3e2ae524d7707de0a73d2e065e0d30c5d3da8563037bc29d4cc1b7424b5a350cb7274fa52525c6c04a615fe561c6ab11 languageName: node linkType: hard @@ -10361,12 +12437,10 @@ __metadata: languageName: node linkType: hard -"axobject-query@npm:^3.1.1": - version: 3.1.1 - resolution: "axobject-query@npm:3.1.1" - dependencies: - deep-equal: ^2.0.5 - checksum: c12a5da10dc7bab75e1cda9b6a3b5fcf10eba426ddf1a17b71ef65a434ed707ede7d1c4f013ba1609e970bc8c0cddac01365080d376204314e9b294719acd8a5 +"axobject-query@npm:^2.1.2": + version: 2.2.0 + resolution: "axobject-query@npm:2.2.0" + checksum: 96b8c7d807ca525f41ad9b286186e2089b561ba63a6d36c3e7d73dc08150714660995c7ad19cda05784458446a0793b45246db45894631e13853f48c1aa3117f languageName: node linkType: hard @@ -10497,21 +12571,21 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^27.0.6, babel-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-jest@npm:27.5.1" +"babel-jest@npm:^27.0.6, babel-jest@npm:^27.2.4": + version: 27.2.4 + resolution: "babel-jest@npm:27.2.4" dependencies: - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/transform": ^27.2.4 + "@jest/types": ^27.2.4 "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^27.5.1 + babel-plugin-istanbul: ^6.0.0 + babel-preset-jest: ^27.2.0 chalk: ^4.0.0 - graceful-fs: ^4.2.9 + graceful-fs: ^4.2.4 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 4e93e6e9fb996cc5f1505e924eb8e8cc7b25c294ba9629762a2715390f48af6a4c14dbb84cd9730013ac0e03267a5a9aa2fb6318c544489cda7f50f4e506def4 + checksum: 1aeee799c16253c566ad7b3447a32e98188a0457c59b69764996b2ca56c4087302f83233df3838d249314f24b2dc18a86184f34dc03496ecab006f1824c3a145 languageName: node linkType: hard @@ -10531,18 +12605,18 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:^8.0.0": - version: 8.3.0 - resolution: "babel-loader@npm:8.3.0" +"babel-loader@npm:^8.2.2": + version: 8.2.2 + resolution: "babel-loader@npm:8.2.2" dependencies: find-cache-dir: ^3.3.1 - loader-utils: ^2.0.0 + loader-utils: ^1.4.0 make-dir: ^3.1.0 schema-utils: ^2.6.5 peerDependencies: "@babel/core": ^7.0.0 webpack: ">=2" - checksum: d48bcf9e030e598656ad3ff5fb85967db2eaaf38af5b4a4b99d25618a2057f9f100e6b231af2a46c1913206db506115ca7a8cbdf52c9c73d767070dae4352ab5 + checksum: df5092ef9886bb49aacb7c58ac40ed0681ced031c8d91e49d680cedace2aa1703390a31fbe7c0e409f739836e911c5c991119133d90d9289f681c0a8ff2447a1 languageName: node linkType: hard @@ -10583,6 +12657,33 @@ __metadata: languageName: node linkType: hard +"babel-plugin-dynamic-import-node@npm:^2.3.3": + version: 2.3.3 + resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" + dependencies: + object.assign: ^4.1.0 + checksum: c9d24415bcc608d0db7d4c8540d8002ac2f94e2573d2eadced137a29d9eab7e25d2cbb4bc6b9db65cf6ee7430f7dd011d19c911a9a778f0533b4a05ce8292c9b + languageName: node + linkType: hard + +"babel-plugin-emotion@npm:^10.0.27": + version: 10.0.33 + resolution: "babel-plugin-emotion@npm:10.0.33" + dependencies: + "@babel/helper-module-imports": ^7.0.0 + "@emotion/hash": 0.8.0 + "@emotion/memoize": 0.7.4 + "@emotion/serialize": ^0.11.16 + babel-plugin-macros: ^2.0.0 + babel-plugin-syntax-jsx: ^6.18.0 + convert-source-map: ^1.5.0 + escape-string-regexp: ^1.0.5 + find-root: ^1.1.0 + source-map: ^0.5.7 + checksum: 8961c3ebabeec7c7208458da64038f61767e969b5105b83cb2d8bd07f9b283176cb532e8122fe15003ec69e0013d8c64edcd0998e843978a87cdef143415c520 + languageName: node + linkType: hard + "babel-plugin-extract-import-names@npm:1.6.22": version: 1.6.22 resolution: "babel-plugin-extract-import-names@npm:1.6.22" @@ -10592,7 +12693,20 @@ __metadata: languageName: node linkType: hard -"babel-plugin-istanbul@npm:^6.0.0, babel-plugin-istanbul@npm:^6.1.1": +"babel-plugin-istanbul@npm:^6.0.0": + version: 6.0.0 + resolution: "babel-plugin-istanbul@npm:6.0.0" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^4.0.0 + test-exclude: ^6.0.0 + checksum: bc586cf088ec471a98a474ef0e9361ace61947da2a3e54162f1e1ab712a1a81a88007639e8aff7db2fc8678ae7c671e696e6edd6ccf72db8e6af86f0628d5a08 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": version: 6.1.1 resolution: "babel-plugin-istanbul@npm:6.1.1" dependencies: @@ -10617,19 +12731,30 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-plugin-jest-hoist@npm:27.5.1" +"babel-plugin-jest-hoist@npm:^27.2.0": + version: 27.2.0 + resolution: "babel-plugin-jest-hoist@npm:27.2.0" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.0.0 "@types/babel__traverse": ^7.0.6 - checksum: 709c17727aa8fd3be755d256fb514bf945a5c2ea6017f037d80280fc44ae5fe7dfeebf63d8412df53796455c2c216119d628d8cc90b099434fd819005943d058 + checksum: de6c19b5469310f14b4e1408032b9bbe86fc1f77e7b804c2b808d738045d3890cd7c55b36c4815b49f732843c472d7a5fe0b733cffd5e2284c11d8f1e2ff677e languageName: node linkType: hard -"babel-plugin-macros@npm:^3.0.1, babel-plugin-macros@npm:^3.1.0": +"babel-plugin-macros@npm:2.8.0, babel-plugin-macros@npm:^2.0.0, babel-plugin-macros@npm:^2.8.0": + version: 2.8.0 + resolution: "babel-plugin-macros@npm:2.8.0" + dependencies: + "@babel/runtime": ^7.7.2 + cosmiconfig: ^6.0.0 + resolve: ^1.12.0 + checksum: 59b09a21cf3ae1e14186c1b021917d004b49b953824b24953a54c6502da79e8051d4ac31cfd4a0ae7f6ea5ddf1f7edd93df4895dd3c3982a5b2431859c2889ac + languageName: node + linkType: hard + +"babel-plugin-macros@npm:^3.0.1": version: 3.1.0 resolution: "babel-plugin-macros@npm:3.1.0" dependencies: @@ -10641,24 +12766,59 @@ __metadata: linkType: hard "babel-plugin-module-resolver@npm:^4.0.0": - version: 4.1.0 - resolution: "babel-plugin-module-resolver@npm:4.1.0" + version: 4.0.0 + resolution: "babel-plugin-module-resolver@npm:4.0.0" dependencies: find-babel-config: ^1.2.0 glob: ^7.1.6 pkg-up: ^3.1.0 reselect: ^4.0.0 resolve: ^1.13.1 - checksum: 3907fba21ca3c66a081e01fbd16bb09c84781749db16aa57805becc376bb5ee8dc373d4b209613e1453d30ea6c836d13073e9e7b6d239ff1806dd1763a9ab18f + checksum: 82100f0fe9ded4418e49df22d23b70a54679692ae97557754d77d93a53409d0af7a2ebf3ddbf86fd06ea008fd048d8e141bcfbd11a7323adc8410fbdef373b44 + languageName: node + linkType: hard + +"babel-plugin-named-asset-import@npm:^0.3.1": + version: 0.3.6 + resolution: "babel-plugin-named-asset-import@npm:0.3.6" + peerDependencies: + "@babel/core": ^7.1.0 + checksum: e79dcfa3fba8b59a33f30391a0b35bfba74f90739cadb1a4b226fe921815b1adba9568f26fdca5e4a2db4d82a5a8834b6f86da9fea8816a8ec58ba84c02ac729 languageName: node linkType: hard "babel-plugin-named-asset-import@npm:^0.3.7": - version: 0.3.8 - resolution: "babel-plugin-named-asset-import@npm:0.3.8" + version: 0.3.7 + resolution: "babel-plugin-named-asset-import@npm:0.3.7" peerDependencies: "@babel/core": ^7.1.0 - checksum: d1e58df8cb75d91d070feea31087bc989906d3465144bde7e9f3c3690b514a90a55d3aebf3e65e76c5d4c743ecedde5f640f09f43a21fa60f1a5d413cb3f7a67 + checksum: 4c9a42a2762f3d596a09105d05991525a0553d095030459d0f71449b023801ccc43e90fa20b618c52283dc61ca528a4a59df244e5b1dd583867786088eb473b7 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.2.2": + version: 0.2.2 + resolution: "babel-plugin-polyfill-corejs2@npm:0.2.2" + dependencies: + "@babel/compat-data": ^7.13.11 + "@babel/helper-define-polyfill-provider": ^0.2.2 + semver: ^6.1.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eee45ecce743e06840d29936a7f4a9f9eca19552ba010e9f3676c6a2697ab815230f39953296b72f09665de0e8fffe260e52b348011a9ddba36cfa7eec6f8c51 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.3.2": + version: 0.3.2 + resolution: "babel-plugin-polyfill-corejs2@npm:0.3.2" + dependencies: + "@babel/compat-data": ^7.17.7 + "@babel/helper-define-polyfill-provider": ^0.3.2 + semver: ^6.1.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a76e7bb1a5cc0a4507baa523c23f9efd75764069a25845beba92290386e5e48ed85b894005ece3b527e13c3d2d9c6589cc0a23befb72ea6fc7aa8711f231bb4d languageName: node linkType: hard @@ -10675,7 +12835,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.4.2, babel-plugin-polyfill-corejs2@npm:^0.4.3": +"babel-plugin-polyfill-corejs2@npm:^0.4.3": version: 0.4.3 resolution: "babel-plugin-polyfill-corejs2@npm:0.4.3" dependencies: @@ -10700,6 +12860,30 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs3@npm:^0.2.2": + version: 0.2.4 + resolution: "babel-plugin-polyfill-corejs3@npm:0.2.4" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.2.2 + core-js-compat: ^3.14.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 49e9b1709fd76bff8b577da38548d05ec0317acaa9cba893bf447af7b0f26494d635b70814452782d079b2b6f25c09dd8fa76e151c0e4ae1397e8295af14e685 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.5.3": + version: 0.5.3 + resolution: "babel-plugin-polyfill-corejs3@npm:0.5.3" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.3.2 + core-js-compat: ^3.21.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9c6644a1b0afbe59e402827fdafc6f44994ff92c5b2f258659cbbfd228f7075dea49e95114af10e66d70f36cbde12ff1d81263eb67be749b3ef0e2c18cf3c16d + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs3@npm:^0.6.0": version: 0.6.0 resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" @@ -10724,6 +12908,28 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-regenerator@npm:^0.2.2": + version: 0.2.2 + resolution: "babel-plugin-polyfill-regenerator@npm:0.2.2" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.2.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e32e318fd91d65c3af2bb363189f00d3839f07a73a08813b553553e07da205162091b428dd5b6ffb6ea4caf531ff43ebc54197b0a5a9dc2fc5c7e9a650e946d + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.4.0": + version: 0.4.0 + resolution: "babel-plugin-polyfill-regenerator@npm:0.4.0" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.3.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 699aa9c0dc5a2259d7fa52b26613fa1e782439eee54cd98506991f87fddf0c00eec6c5b1917edf586c170731d9e318903bc41210225a691e7bb8087652bbda94 + languageName: node + linkType: hard + "babel-plugin-polyfill-regenerator@npm:^0.4.1": version: 0.4.1 resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" @@ -10757,6 +12963,20 @@ __metadata: languageName: node linkType: hard +"babel-plugin-styled-components@npm:>= 1": + version: 1.10.6 + resolution: "babel-plugin-styled-components@npm:1.10.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.0.0 + "@babel/helper-module-imports": ^7.0.0 + babel-plugin-syntax-jsx: ^6.18.0 + lodash: ^4.17.11 + peerDependencies: + styled-components: ">= 2" + checksum: 80998176f91c8f681f612ee0f8d2d8c93afeb1cc0cb71abf69ffed0ba192c0069d15c69994c6a0ca9a00ad125487eb4ac28458fd4a71b707b8204d8569575b4a + languageName: node + linkType: hard + "babel-plugin-styled-components@npm:>= 1.12.0": version: 2.1.3 resolution: "babel-plugin-styled-components@npm:2.1.3" @@ -10803,7 +13023,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-transform-react-remove-prop-types@npm:^0.4.24": +"babel-plugin-transform-react-remove-prop-types@npm:0.4.24": version: 0.4.24 resolution: "babel-plugin-transform-react-remove-prop-types@npm:0.4.24" checksum: 54afe56d67f0d118c9da23996f39948e502a152b3f582eb6e8f163fcb76c2c1ea4e0cdd4f9fac5c0ef050eab4fe0a950b0b74aae6237bcc0d31d8fc4cc808d1a @@ -10833,8 +13053,8 @@ __metadata: linkType: hard "babel-preset-fbjs@npm:^3.2.0, babel-preset-fbjs@npm:^3.3.0": - version: 3.4.0 - resolution: "babel-preset-fbjs@npm:3.4.0" + version: 3.3.0 + resolution: "babel-preset-fbjs@npm:3.3.0" dependencies: "@babel/plugin-proposal-class-properties": ^7.0.0 "@babel/plugin-proposal-object-rest-spread": ^7.0.0 @@ -10865,7 +13085,7 @@ __metadata: babel-plugin-syntax-trailing-function-commas: ^7.0.0-beta.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: b3352cf690729125997f254bc31b9c4db347f8646f1571958ced1c45f0da89439e183e1c88e35397eb0361b9e1fbb1dd8142d3f4647814deb427e53c54f44d5f + checksum: a86524979691427861f6e93bdaa1bd735b342d2ee4466e6747016202827914316f80e2413c8a51bb27842020491132b462c4c2818eecca6bab2ef01310a45b9e languageName: node linkType: hard @@ -10881,39 +13101,38 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-preset-jest@npm:27.5.1" +"babel-preset-jest@npm:^27.2.0": + version: 27.2.0 + resolution: "babel-preset-jest@npm:27.2.0" dependencies: - babel-plugin-jest-hoist: ^27.5.1 + babel-plugin-jest-hoist: ^27.2.0 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 251bcea11c18fd9672fec104eadb45b43f117ceeb326fa7345ced778d4c1feab29343cd7a87a1dcfae4997d6c851a8b386d7f7213792da6e23b74f4443a8976d + checksum: c484e6e7c61616f4e2b2aeef54a2a48a1c64949cfb1c21884c7595d422997407049a3185f1536a419c344399df1e04f67d5e335f05c720c3b14859db079a674d languageName: node linkType: hard "babel-preset-react-app@npm:^10.0.0": - version: 10.0.1 - resolution: "babel-preset-react-app@npm:10.0.1" - dependencies: - "@babel/core": ^7.16.0 - "@babel/plugin-proposal-class-properties": ^7.16.0 - "@babel/plugin-proposal-decorators": ^7.16.4 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.16.0 - "@babel/plugin-proposal-numeric-separator": ^7.16.0 - "@babel/plugin-proposal-optional-chaining": ^7.16.0 - "@babel/plugin-proposal-private-methods": ^7.16.0 - "@babel/plugin-transform-flow-strip-types": ^7.16.0 - "@babel/plugin-transform-react-display-name": ^7.16.0 - "@babel/plugin-transform-runtime": ^7.16.4 - "@babel/preset-env": ^7.16.4 - "@babel/preset-react": ^7.16.0 - "@babel/preset-typescript": ^7.16.0 - "@babel/runtime": ^7.16.3 - babel-plugin-macros: ^3.1.0 - babel-plugin-transform-react-remove-prop-types: ^0.4.24 - checksum: ee66043484e67b8aef2541976388299691478ea00834f3bb14b6b3d5edcd316a5ac95351f6ec084b41ee555cad820d4194280ad38ce51884fedc7e8946a57b74 + version: 10.0.0 + resolution: "babel-preset-react-app@npm:10.0.0" + dependencies: + "@babel/core": 7.12.3 + "@babel/plugin-proposal-class-properties": 7.12.1 + "@babel/plugin-proposal-decorators": 7.12.1 + "@babel/plugin-proposal-nullish-coalescing-operator": 7.12.1 + "@babel/plugin-proposal-numeric-separator": 7.12.1 + "@babel/plugin-proposal-optional-chaining": 7.12.1 + "@babel/plugin-transform-flow-strip-types": 7.12.1 + "@babel/plugin-transform-react-display-name": 7.12.1 + "@babel/plugin-transform-runtime": 7.12.1 + "@babel/preset-env": 7.12.1 + "@babel/preset-react": 7.12.1 + "@babel/preset-typescript": 7.12.1 + "@babel/runtime": 7.12.1 + babel-plugin-macros: 2.8.0 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + checksum: d117a1384b8e070f73372f657f728b016467b503360ac5ffc050971faa4313ba334fd9830c8d8fb85adb277e6dc0ecd701c0cb0f035c53a1eb6f207e45f8634e languageName: node linkType: hard @@ -11018,9 +13237,9 @@ __metadata: linkType: hard "balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + version: 1.0.0 + resolution: "balanced-match@npm:1.0.0" + checksum: 9b67bfe558772f40cf743a3469b48b286aecec2ea9fe80c48d74845e53aab1cef524fafedf123a63019b49ac397760573ef5f173f539423061f7217cbb5fbd40 languageName: node linkType: hard @@ -11031,7 +13250,14 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.0.2, base64-js@npm:^1.1.2, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": +"base64-js@npm:^1.0.2, base64-js@npm:^1.1.2, base64-js@npm:^1.2.3": + version: 1.3.1 + resolution: "base64-js@npm:1.3.1" + checksum: 957b9ced0ea1b39588a117193f801b045a5fb2d6f1b9943dd304bcad46e5681bf837fe092105692b11653658e8443764139d6b11d3c4037093b96e8db4e1dbb2 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 @@ -11053,7 +13279,7 @@ __metadata: languageName: node linkType: hard -"basic-auth@npm:~2.0.1": +"basic-auth@npm:~2.0.0": version: 2.0.1 resolution: "basic-auth@npm:2.0.1" dependencies: @@ -11062,6 +13288,13 @@ __metadata: languageName: node linkType: hard +"batch-processor@npm:1.0.0": + version: 1.0.0 + resolution: "batch-processor@npm:1.0.0" + checksum: 5519b024f6cd0e95a543bb3edf0ae19e5badae0c32b30b41839b4469bbb1f91e14fc04bff3759cd9c2621aa9e16def48c938783e9027e7ec977fba62d537a468 + languageName: node + linkType: hard + "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -11069,7 +13302,7 @@ __metadata: languageName: node linkType: hard -"bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": +"bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" dependencies: @@ -11114,10 +13347,10 @@ __metadata: languageName: node linkType: hard -"big-integer@npm:1.6.x, big-integer@npm:^1.6.16, big-integer@npm:^1.6.44, big-integer@npm:^1.6.7": - version: 1.6.51 - resolution: "big-integer@npm:1.6.51" - checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 +"big-integer@npm:^1.6.16, big-integer@npm:^1.6.44": + version: 1.6.48 + resolution: "big-integer@npm:1.6.48" + checksum: fc43ae12ebf2b2a58d6da92ef7069666d131fa993be4020cb1a11e384f6d8e7a69dced7f69d27b65a6aff2e6abb548fb823303bde138eab60b556100c17761f3 languageName: node linkType: hard @@ -11143,9 +13376,9 @@ __metadata: linkType: hard "binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + version: 2.0.0 + resolution: "binary-extensions@npm:2.0.0" + checksum: 554f65d3378cf71c3185c17dec3ca58334b8ff6ae242db3107284765ce33b2af19efd20c11faec41907a40534929e34b3a98e7d391c61e4211b45732dccb1115 languageName: node linkType: hard @@ -11176,24 +13409,35 @@ __metadata: languageName: node linkType: hard -"bluebird@npm:^3.1.1, bluebird@npm:^3.5.0, bluebird@npm:^3.5.1, bluebird@npm:^3.5.5, bluebird@npm:^3.7.2": +"bluebird@npm:^3.1.1, bluebird@npm:^3.3.5, bluebird@npm:^3.5.0, bluebird@npm:^3.5.1, bluebird@npm:^3.5.5, bluebird@npm:^3.7.2": version: 3.7.2 resolution: "bluebird@npm:3.7.2" checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef languageName: node linkType: hard -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": - version: 4.12.0 - resolution: "bn.js@npm:4.12.0" - checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.1.1, bn.js@npm:^4.4.0": + version: 4.11.8 + resolution: "bn.js@npm:4.11.8" + checksum: 80d4709cd58a21f0be8201e9e5859fea5ef133318e9800c8454cd334625c6e1caea593ca21f9b9a085fb560fbc12fb2fb3514363f8604258db924237fd039139 languageName: node linkType: hard -"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1": - version: 5.2.1 - resolution: "bn.js@npm:5.2.1" - checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 +"body-parser@npm:1.19.0, body-parser@npm:^1.18.2, body-parser@npm:^1.18.3": + version: 1.19.0 + resolution: "body-parser@npm:1.19.0" + dependencies: + bytes: 3.1.0 + content-type: ~1.0.4 + debug: 2.6.9 + depd: ~1.1.2 + http-errors: 1.7.2 + iconv-lite: 0.4.24 + on-finished: ~2.3.0 + qs: 6.7.0 + raw-body: 2.4.0 + type-is: ~1.6.17 + checksum: 490231b4c89bbd43112762f7ba8e5342c174a6c9f64284a3b0fcabf63277e332f8316765596f1e5b15e4f3a6cf0422e005f4bb3149ed3a224bb025b7a36b9ac1 languageName: node linkType: hard @@ -11217,26 +13461,6 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:^1.18.2, body-parser@npm:^1.18.3": - version: 1.20.2 - resolution: "body-parser@npm:1.20.2" - dependencies: - bytes: 3.1.2 - content-type: ~1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.2 - type-is: ~1.6.18 - unpipe: 1.0.0 - checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 - languageName: node - linkType: hard - "bonjour@npm:^3.5.0": version: 3.5.0 resolution: "bonjour@npm:3.5.0" @@ -11265,6 +13489,22 @@ __metadata: languageName: node linkType: hard +"boxen@npm:^4.2.0": + version: 4.2.0 + resolution: "boxen@npm:4.2.0" + dependencies: + ansi-align: ^3.0.0 + camelcase: ^5.3.1 + chalk: ^3.0.0 + cli-boxes: ^2.2.0 + string-width: ^4.1.0 + term-size: ^2.1.0 + type-fest: ^0.8.1 + widest-line: ^3.1.0 + checksum: ce2b565a2e44b33d11336155675cf4f7f0e13dbf7412928845aefd6a2cf65e0da2dbb0a2cb198b7620a2ae714416a2eb710926b780f15d19f6250a19633b29af + languageName: node + linkType: hard + "boxen@npm:^5.1.2": version: 5.1.2 resolution: "boxen@npm:5.1.2" @@ -11281,34 +13521,16 @@ __metadata: languageName: node linkType: hard -"bplist-creator@npm:0.1.1": - version: 0.1.1 - resolution: "bplist-creator@npm:0.1.1" - dependencies: - stream-buffers: 2.2.x - checksum: b0d40d1d1623f1afdbb575cfc8075d742d2c4f0eb458574be809e3857752d1042a39553b3943d2d7f505dde92bcd43e1d7bdac61c9cd44475d696deb79f897ce - languageName: node - linkType: hard - -"bplist-parser@npm:0.3.2": - version: 0.3.2 - resolution: "bplist-parser@npm:0.3.2" - dependencies: - big-integer: 1.6.x - checksum: fad0f6eb155a9b636b4096a1725ce972a0386490d7d38df7be11a3a5645372446b7c44aacbc6626d24d2c17d8b837765361520ebf2960aeffcaf56765811620e - languageName: node - linkType: hard - -"bplist-parser@npm:^0.1.0": - version: 0.1.1 - resolution: "bplist-parser@npm:0.1.1" +"bplist-creator@npm:0.0.8": + version: 0.0.8 + resolution: "bplist-creator@npm:0.0.8" dependencies: - big-integer: ^1.6.7 - checksum: 1501d52f009c9f23ecee6855940e84ac55a6120c0f05570b1f51c8d494023416ec12f4d91b5ac97d6c0941d96dd41d7cb0bc1a9c0a02092df5b4b511acb8dda5 + stream-buffers: ~2.2.0 + checksum: 7a98c7fb3c1b505a0667abd0f8c976bc01c4437fbb52cb902076a3aea3523e8d44111e21a4228c4c3b307d1c4a727968ed02bd91daf0aea7efed5081db92fb95 languageName: node linkType: hard -"bplist-parser@npm:^0.2.0": +"bplist-parser@npm:0.2.0, bplist-parser@npm:^0.2.0": version: 0.2.0 resolution: "bplist-parser@npm:0.2.0" dependencies: @@ -11354,7 +13576,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.2, braces@npm:~3.0.2": +"braces@npm:^3.0.1, braces@npm:~3.0.2": version: 3.0.2 resolution: "braces@npm:3.0.2" dependencies: @@ -11379,7 +13601,7 @@ __metadata: languageName: node linkType: hard -"brorand@npm:^1.0.1, brorand@npm:^1.1.0": +"brorand@npm:^1.0.1": version: 1.1.0 resolution: "brorand@npm:1.1.0" checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be @@ -11444,30 +13666,28 @@ __metadata: languageName: node linkType: hard -"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" +"browserify-rsa@npm:^4.0.0": + version: 4.0.1 + resolution: "browserify-rsa@npm:4.0.1" dependencies: - bn.js: ^5.0.0 + bn.js: ^4.1.0 randombytes: ^2.0.1 - checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 + checksum: e5d8406e65f8e9a2e038f6fa0cb30108269a1ab33c1563ddc78fb0fff1a43ea21d44bd3dcd01a783683f60dcbc4b58c63120a11f6d09939e3f84af378e6caef8 languageName: node linkType: hard "browserify-sign@npm:^4.0.0": - version: 4.2.1 - resolution: "browserify-sign@npm:4.2.1" + version: 4.0.4 + resolution: "browserify-sign@npm:4.0.4" dependencies: - bn.js: ^5.1.1 - browserify-rsa: ^4.0.1 - create-hash: ^1.2.0 - create-hmac: ^1.1.7 - elliptic: ^6.5.3 - inherits: ^2.0.4 - parse-asn1: ^5.1.5 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 + bn.js: ^4.1.1 + browserify-rsa: ^4.0.0 + create-hash: ^1.1.0 + create-hmac: ^1.1.2 + elliptic: ^6.0.0 + inherits: ^2.0.1 + parse-asn1: ^5.0.0 + checksum: b1e6f6383f6abbbd5e0f4eb0161cd211cb79af636dd14b5f038db7f3a309b3e026e7e8d7428e3f072a9baace57051a2f45cff311f3b26a901e8be921c3dab847 languageName: node linkType: hard @@ -11503,9 +13723,80 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.14.5, browserslist@npm:^4.21.3, browserslist@npm:^4.21.5, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4": - version: 4.21.6 - resolution: "browserslist@npm:4.21.6" +"browserslist@npm:^4.0.0": + version: 4.8.2 + resolution: "browserslist@npm:4.8.2" + dependencies: + caniuse-lite: ^1.0.30001015 + electron-to-chromium: ^1.3.322 + node-releases: ^1.1.42 + bin: + browserslist: ./cli.js + checksum: 817f5ca7641b7368811422f669764300d491982c83947f034a0db33a1f490b40c0c678824f84667592da0b69b9e733d3279f3d984d8d9a8dc61f44bc63b632de + languageName: node + linkType: hard + +"browserslist@npm:^4.12.0, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4": + version: 4.12.0 + resolution: "browserslist@npm:4.12.0" + dependencies: + caniuse-lite: ^1.0.30001043 + electron-to-chromium: ^1.3.413 + node-releases: ^1.1.53 + pkg-up: ^2.0.0 + bin: + browserslist: cli.js + checksum: 6ad31476c8494b0c1773ef837e26ebd51baec9e554eb2e2e4d77fcd1fd87791e0b45023203c2bc552afcbd4fa459893abc124171720c2aea849066204d1939fa + languageName: node + linkType: hard + +"browserslist@npm:^4.16.6, browserslist@npm:^4.17.0": + version: 4.17.0 + resolution: "browserslist@npm:4.17.0" + dependencies: + caniuse-lite: ^1.0.30001254 + colorette: ^1.3.0 + electron-to-chromium: ^1.3.830 + escalade: ^3.1.1 + node-releases: ^1.1.75 + bin: + browserslist: cli.js + checksum: 9b45ec283d7ba1513bd8be6143dadb34a65e8be7f7210b3a2bce947e019184408df6126238e54f8061e9be74362b19d04eaba739b3ee0d5d41d57ac0ae5fe4cd + languageName: node + linkType: hard + +"browserslist@npm:^4.17.1": + version: 4.17.2 + resolution: "browserslist@npm:4.17.2" + dependencies: + caniuse-lite: ^1.0.30001261 + electron-to-chromium: ^1.3.854 + escalade: ^3.1.1 + nanocolors: ^0.2.12 + node-releases: ^1.1.76 + bin: + browserslist: cli.js + checksum: 9102023e8a8f541110c2905854d8398245811dfa6a02c3c94a0862c402f11fd42900cd595cb8494e5ee1104120b40e4721108219931bdbb4c59855f138e684da + languageName: node + linkType: hard + +"browserslist@npm:^4.20.2, browserslist@npm:^4.21.3": + version: 4.21.3 + resolution: "browserslist@npm:4.21.3" + dependencies: + caniuse-lite: ^1.0.30001370 + electron-to-chromium: ^1.4.202 + node-releases: ^2.0.6 + update-browserslist-db: ^1.0.5 + bin: + browserslist: cli.js + checksum: ff512a7bcca1c530e2854bbdfc7be2791d0fb524097a6340e56e1d5924164c7e4e0a9b070de04cdc4c149d15cb4d4275cb7c626ebbce954278a2823aaad2452a + languageName: node + linkType: hard + +"browserslist@npm:^4.21.5": + version: 4.21.7 + resolution: "browserslist@npm:4.21.7" dependencies: caniuse-lite: ^1.0.30001489 electron-to-chromium: ^1.4.411 @@ -11513,7 +13804,20 @@ __metadata: update-browserslist-db: ^1.0.11 bin: browserslist: cli.js - checksum: d9bfff6e5a34091cb73e229909674870ac5bafdd2f66aa05029102f8a93ed43167f12ad52007bc0e7e020fdd358509237ca2039db5667077187bf0cd8c3fa062 + checksum: 3d0d025e6d381c4db5e71b538258952660ba574c060832095f182a9877ca798836fa550736269e669a2080e486f0cfdf5d3bcf2769b9f7cf123f6c6b8c005f8f + languageName: node + linkType: hard + +"browserslist@npm:^4.8.3": + version: 4.8.5 + resolution: "browserslist@npm:4.8.5" + dependencies: + caniuse-lite: ^1.0.30001022 + electron-to-chromium: ^1.3.338 + node-releases: ^1.1.46 + bin: + browserslist: cli.js + checksum: 3162e7b36ed2ff198872298e99f11960238f5e9a9bfa1b17c43e4e6f2037c0d100c3ba5489ae6910c67ef5b579db06c5514b836a20237c2d020dc397db0258ef languageName: node linkType: hard @@ -11536,9 +13840,9 @@ __metadata: linkType: hard "bson-objectid@npm:^1.2.2": - version: 1.3.1 - resolution: "bson-objectid@npm:1.3.1" - checksum: fb31b7c715fafd7ba4370f667fbdc3cf9226d8b9d115ac86d584053fe9350f73d24e0b6ddac388b3c408d91481f52a8ab7a8c103c4b8dbc659139c710689a7c0 + version: 1.2.2 + resolution: "bson-objectid@npm:1.2.2" + checksum: 466fea6b042bd75532233f9950c3f09373a9559c883ffa0bc8c2d5097c8adb3d2853a52f0b5e36db7659dcb3d680e1fa78e737a177fcc37d063893ad9fc5b65b languageName: node linkType: hard @@ -11557,9 +13861,9 @@ __metadata: linkType: hard "buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + version: 1.1.1 + resolution: "buffer-from@npm:1.1.1" + checksum: ccc53b69736008bff764497367c4d24879ba7122bc619ee499ff47eef3a5b885ca496e87272e7ebffa0bec3804c83f84041c616f6e3318f40624e27c1d80f045 languageName: node linkType: hard @@ -11584,7 +13888,18 @@ __metadata: languageName: node linkType: hard -"buffer@npm:4.9.2, buffer@npm:^4.3.0": +"buffer@npm:4.9.1": + version: 4.9.1 + resolution: "buffer@npm:4.9.1" + dependencies: + base64-js: ^1.0.2 + ieee754: ^1.1.4 + isarray: ^1.0.0 + checksum: 7512740cad3b560698e564126dbd1fad0001989cadbdc566dd801629b87f03bff552dfa5a500916dc8c0260c97ae9370e94739cb28bfa42c771a677a20f26367 + languageName: node + linkType: hard + +"buffer@npm:^4.3.0": version: 4.9.2 resolution: "buffer@npm:4.9.2" dependencies: @@ -11595,7 +13910,17 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.2.1, buffer@npm:^5.5.0": +"buffer@npm:^5.2.1": + version: 5.4.3 + resolution: "buffer@npm:5.4.3" + dependencies: + base64-js: ^1.0.2 + ieee754: ^1.1.4 + checksum: 10679413907e3c813257777601c253dda1f3aa26f456692b4fc7c38d83d1d5531bf12b69d6d4e843aa487e06910b24eb9f951f2f594e9f24edcbbb1d0c73f16c + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -11639,9 +13964,9 @@ __metadata: linkType: hard "builtin-modules@npm:^3.1.0": - version: 3.3.0 - resolution: "builtin-modules@npm:3.3.0" - checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d + version: 3.2.0 + resolution: "builtin-modules@npm:3.2.0" + checksum: 0265aa1ba78e1a16f4e18668d815cb43fb364e6a6b8aa9189c6f44c7b894a551a43b323c40206959d2d4b2568c1f2805607ad6c88adc306a776ce6904cca6715 languageName: node linkType: hard @@ -11653,8 +13978,8 @@ __metadata: linkType: hard "bunyan@npm:^1.8.12": - version: 1.8.15 - resolution: "bunyan@npm:1.8.15" + version: 1.8.14 + resolution: "bunyan@npm:1.8.14" dependencies: dtrace-provider: ~0.8 moment: ^2.19.3 @@ -11671,7 +13996,7 @@ __metadata: optional: true bin: bunyan: bin/bunyan - checksum: a479e0787c3a0b6565b54bd15f0b6c729d624c5aba53523e140e49e279b7a78508df93000e758bf6d02361117d6b4e6e5fc1d5ece05366fb6c4ba41bf1ac7d52 + checksum: d042df82f5e05cf8ab83ef292a4f2a06d98b992be6be6df8da080d467facc6aeb95e5a9a39e5dd7313ec7a8b49e1d577d822686ad1e52af83893fcff68e0fefd languageName: node linkType: hard @@ -11692,6 +14017,13 @@ __metadata: languageName: node linkType: hard +"bytes@npm:3.1.0": + version: 3.1.0 + resolution: "bytes@npm:3.1.0" + checksum: 7c3b21c5d9d44ed455460d5d36a31abc6fa2ce3807964ba60a4b03fd44454c8cf07bb0585af83bfde1c5cc2ea4bbe5897bc3d18cd15e0acf25a3615a35aba2df + languageName: node + linkType: hard + "bytes@npm:3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" @@ -11722,8 +14054,8 @@ __metadata: linkType: hard "cacache@npm:^12.0.2": - version: 12.0.4 - resolution: "cacache@npm:12.0.4" + version: 12.0.3 + resolution: "cacache@npm:12.0.3" dependencies: bluebird: ^3.5.5 chownr: ^1.1.1 @@ -11740,15 +14072,14 @@ __metadata: ssri: ^6.0.1 unique-filename: ^1.1.1 y18n: ^4.0.0 - checksum: c88a72f36939b2523533946ffb27828443db5bf5995d761b35ae17af1eb6c8e20ac55b00b74c2ca900b2e1e917f0afba6847bf8cc16bee05ccca6aa150e0830c + checksum: 42be000a789b3a5d70fe367646d684a6250383566634951d177027a061285e187a559b3758305b667210b80e5070afd86e32ebe0bfa4552c15fd9a5b64af8706 languageName: node linkType: hard "cacache@npm:^15.0.5": - version: 15.3.0 - resolution: "cacache@npm:15.3.0" + version: 15.0.5 + resolution: "cacache@npm:15.0.5" dependencies: - "@npmcli/fs": ^1.0.0 "@npmcli/move-file": ^1.0.1 chownr: ^2.0.0 fs-minipass: ^2.0.0 @@ -11763,16 +14094,16 @@ __metadata: p-map: ^4.0.0 promise-inflight: ^1.0.1 rimraf: ^3.0.2 - ssri: ^8.0.1 + ssri: ^8.0.0 tar: ^6.0.2 unique-filename: ^1.1.1 - checksum: a07327c27a4152c04eb0a831c63c00390d90f94d51bb80624a66f4e14a6b6360bbf02a84421267bd4d00ca73ac9773287d8d7169e8d2eafe378d2ce140579db8 + checksum: 911436a9df4caf868c91b75d58c8ba7c958dd4a1882cf18daeac003f46e81d79c11196affe8d86dd9137194466cc2f45b61707b5fbe5fea3d9b8e9220f669e48 languageName: node linkType: hard "cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" + version: 16.1.1 + resolution: "cacache@npm:16.1.1" dependencies: "@npmcli/fs": ^2.1.0 "@npmcli/move-file": ^2.0.0 @@ -11791,8 +14122,8 @@ __metadata: rimraf: ^3.0.2 ssri: ^9.0.0 tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 + unique-filename: ^1.1.1 + checksum: 488524617008b793f0249b0c4ea2c330c710ca997921376e15650cc2415a8054491ae2dee9f01382c2015602c0641f3f977faf2fa7361aa33d2637dcfb03907a languageName: node linkType: hard @@ -11828,6 +14159,21 @@ __metadata: languageName: node linkType: hard +"cacheable-request@npm:^6.0.0": + version: 6.1.0 + resolution: "cacheable-request@npm:6.1.0" + 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 + checksum: b510b237b18d17e89942e9ee2d2a077cb38db03f12167fd100932dfa8fc963424bfae0bfa1598df4ae16c944a5484e43e03df8f32105b04395ee9495e9e4e9f1 + languageName: node + linkType: hard + "cachedir@npm:^2.3.0": version: 2.3.0 resolution: "cachedir@npm:2.3.0" @@ -11858,9 +14204,9 @@ __metadata: linkType: hard "call-me-maybe@npm:^1.0.1": - version: 1.0.2 - resolution: "call-me-maybe@npm:1.0.2" - checksum: 42ff2d0bed5b207e3f0122589162eaaa47ba618f79ad2382fe0ba14d9e49fbf901099a6227440acc5946f86a4953e8aa2d242b330b0a5de4d090bb18f8935cae + version: 1.0.1 + resolution: "call-me-maybe@npm:1.0.1" + checksum: d19e9d6ac2c6a83fb1215718b64c5e233f688ebebb603bdfe4af59cde952df1f2b648530fab555bf290ea910d69d7d9665ebc916e871e0e194f47c2e48e4886b languageName: node linkType: hard @@ -11896,7 +14242,17 @@ __metadata: languageName: node linkType: hard -"camel-case@npm:^4.1.1, camel-case@npm:^4.1.2": +"camel-case@npm:^4.1.1": + version: 4.1.1 + resolution: "camel-case@npm:4.1.1" + dependencies: + pascal-case: ^3.1.1 + tslib: ^1.10.0 + checksum: ba996819910deedd18d268b1bf0df38fe3745f8f5c9f377a95a2dfad5ebe420c255272271b95b57d37270bfcc19aac2b5984d5078509cf862e5279c063f3cbc9 + languageName: node + linkType: hard + +"camel-case@npm:^4.1.2": version: 4.1.2 resolution: "camel-case@npm:4.1.2" dependencies: @@ -11935,14 +14291,14 @@ __metadata: linkType: hard "camelcase-keys@npm:^7.0.0": - version: 7.0.2 - resolution: "camelcase-keys@npm:7.0.2" + version: 7.0.0 + resolution: "camelcase-keys@npm:7.0.0" dependencies: - camelcase: ^6.3.0 + camelcase: ^6.2.0 map-obj: ^4.1.0 quick-lru: ^5.1.1 type-fest: ^1.2.1 - checksum: b5821cc48dd00e8398a30c5d6547f06837ab44de123f1b3a603d0a03399722b2fc67a485a7e47106eb02ef543c3b50c5ebaabc1242cde4b63a267c3258d2365b + checksum: 191a5b8d351665c1757230d84d28e33773b768bc8a8a0b9f63be95d50298fea5151d486c822df507fdfd3dc5993f02de8ee8b6d18d093881ef3bc27e69d0b955 languageName: node linkType: hard @@ -11960,17 +14316,24 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.0.0, camelcase@npm:^6.1.0, camelcase@npm:^6.2.0, camelcase@npm:^6.3.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d +"camelcase@npm:^6.0.0": + version: 6.0.0 + resolution: "camelcase@npm:6.0.0" + checksum: 28f42db097786fb9edb4a80af6cfa67331a9120e00323aaac925f0520797e79eaef9fd771c62b0403468bfd596e528e426863176ae8bb992d086dc991deabebb + languageName: node + linkType: hard + +"camelcase@npm:^6.1.0, camelcase@npm:^6.2.0": + version: 6.2.0 + resolution: "camelcase@npm:6.2.0" + checksum: 8335cfd0ecc472eae685896a42afd8c9dacd193a91f569120b931c87deb053a1ba82102031b9b48a4dbc1d18066caeacf2e4ace8c3c7f0d02936d348dc0b5a87 languageName: node linkType: hard "camelize@npm:^1.0.0": - version: 1.0.1 - resolution: "camelize@npm:1.0.1" - checksum: 91d8611d09af725e422a23993890d22b2b72b4cabf7239651856950c76b4bf53fe0d0da7c5e4db05180e898e4e647220e78c9fbc976113bd96d603d1fcbfcb99 + version: 1.0.0 + resolution: "camelize@npm:1.0.0" + checksum: 769f8d10071f57b974d9a51dc02f589dd7fb07ea6a7ecde1a57b52ae68657ba61fe85c60d50661b76c7dbb76b6474fbfd3356aee33cf5f025cd7fd6fb2811b73 languageName: node linkType: hard @@ -11986,10 +14349,17 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001489": - version: 1.0.30001489 - resolution: "caniuse-lite@npm:1.0.30001489" - checksum: 94585a351fd7661b855c83eace474db0ee5a617159b46f2eff1f6fe4b85d7a205418471fdec8cf5cd647a7f79958706d5e664c0bbf3c7c09118b35db9bb95a1b +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001015, caniuse-lite@npm:^1.0.30001022, caniuse-lite@npm:^1.0.30001043, caniuse-lite@npm:^1.0.30001061, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001254, caniuse-lite@npm:^1.0.30001261, caniuse-lite@npm:^1.0.30001370": + version: 1.0.30001462 + resolution: "caniuse-lite@npm:1.0.30001462" + checksum: e4a57d7851eec65e7c9b6c11c4bbcecdc49d87b1b01bff3c15ea27efb05f959891b4c70ac169842067c134d6fa126d9ad5a91d0f85c7387c5bd912eaf41ea647 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001489": + version: 1.0.30001492 + resolution: "caniuse-lite@npm:1.0.30001492" + checksum: 261869f910ec905ab6aa5a754e4ae57da8c5c33f3b723db2fa21840da307667bff61057aef3abaca32091c1561c254dd3a807c0fdb054cdc9e7e3ba495a55e20 languageName: node linkType: hard @@ -12027,7 +14397,14 @@ __metadata: languageName: node linkType: hard -"case@npm:^1.5.3, case@npm:^1.5.5, case@npm:^1.6.1, case@npm:^1.6.3": +"case@npm:^1.5.3, case@npm:^1.5.5, case@npm:^1.6.1": + version: 1.6.2 + resolution: "case@npm:1.6.2" + checksum: 469c0df0abb4174548c73b9421225ad8df4ca1da37f154ada5c30d868f7ee0144e4eff6318b9d0a66f3a0bf62de8eea07e79a0be2454e0330711f0fdac881896 + languageName: node + linkType: hard + +"case@npm:^1.6.3": version: 1.6.3 resolution: "case@npm:1.6.3" checksum: febe73278f910b0d28aab7efd6f51c235f9aa9e296148edb56dfb83fd58faa88308c30ce9a0122b6e53e0362c44f4407105bd5ef89c46860fc2b184e540fd68d @@ -12049,19 +14426,20 @@ __metadata: linkType: hard "ccount@npm:^1.0.0": - version: 1.1.0 - resolution: "ccount@npm:1.1.0" - checksum: b335a79d0aa4308919cf7507babcfa04ac63d389ebed49dbf26990d4607c8a4713cde93cc83e707d84571ddfe1e7615dad248be9bc422ae4c188210f71b08b78 + version: 1.0.5 + resolution: "ccount@npm:1.0.5" + checksum: 231f463a6de16367587740ae8a8a9dd9bbbd4048fae0d93b8b181e6ce6c936b4d376d7629e2b7194434e1102c8ac7809de9c612c00cfb8f0f4575bf16ccd5ae8 languageName: node linkType: hard "cfb@npm:^1.1.4": - version: 1.2.2 - resolution: "cfb@npm:1.2.2" + version: 1.2.0 + resolution: "cfb@npm:1.2.0" dependencies: - adler-32: ~1.3.0 + adler-32: ~1.2.0 crc-32: ~1.2.0 - checksum: cfb63a7d630a7fa415c1b25655dca66666584f29c95fb0ee90866ada1a28090857827f2ba70a9a50df28bdce05728ae58d495bce417249f305ef7b3c85840024 + printj: ~1.1.2 + checksum: 3c1bb1a7459bdff5a76c4fd39b1845c515634be1ca23a32c5eecd42dfd4f9e96bd162920a9664a9d87bc7082a00fe65d1a755404041def37af5699e7ec776f72 languageName: node linkType: hard @@ -12096,17 +14474,16 @@ __metadata: linkType: hard "chai@npm:^4.1.2": - version: 4.3.7 - resolution: "chai@npm:4.3.7" + version: 4.2.0 + resolution: "chai@npm:4.2.0" dependencies: assertion-error: ^1.1.0 check-error: ^1.0.2 - deep-eql: ^4.1.2 + deep-eql: ^3.0.1 get-func-name: ^2.0.0 - loupe: ^2.3.1 - pathval: ^1.1.1 + pathval: ^1.1.0 type-detect: ^4.0.5 - checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c + checksum: 47881a30dabb6bad94db8a4ee5c914e9eff21113e721c25f8c210f52f211fa5539b3da9558884ecf16e0bab8548c9c590e9c952cb28b213f953cb152d61b4f34 languageName: node linkType: hard @@ -12162,7 +14539,17 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0": + version: 4.1.0 + resolution: "chalk@npm:4.1.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 5561c7b4c063badee3e16d04bce50bd033e1be1bf4c6948639275683ffa7a1993c44639b43c22b1c505f0f813a24b1889037eb182546b48946f9fe7cdd0e7d13 + languageName: node + linkType: hard + +"chalk@npm:^4.0.2, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -12249,57 +14636,42 @@ __metadata: linkType: hard "check-types@npm:^11.1.1": - version: 11.2.2 - resolution: "check-types@npm:11.2.2" - checksum: 61ed60d59e3397c8cf694f20edf73d0061cd6a905754efdec2ccdceafbd390cb09717bab855f9eba921d36278f84c86fe20f7e731a384e9803bc469c09153831 - languageName: node - linkType: hard - -"cheerio-select@npm:^2.1.0": - version: 2.1.0 - resolution: "cheerio-select@npm:2.1.0" - dependencies: - boolbase: ^1.0.0 - css-select: ^5.1.0 - css-what: ^6.1.0 - domelementtype: ^2.3.0 - domhandler: ^5.0.3 - domutils: ^3.0.1 - checksum: 843d6d479922f28a6c5342c935aff1347491156814de63c585a6eb73baf7bb4185c1b4383a1195dca0f12e3946d737c7763bcef0b9544c515d905c5c44c5308b + version: 11.1.2 + resolution: "check-types@npm:11.1.2" + checksum: 6c339a5dfe326e34a5275016c7f9464665405cd79007c057852acd677d265ddfe36236ad5567bd1e601ea88fa78bf1f882b6bc3dc7c5616c26f6b54b2c0ef4fc languageName: node linkType: hard "cheerio@npm:^1.0.0-rc.3": - version: 1.0.0-rc.12 - resolution: "cheerio@npm:1.0.0-rc.12" + version: 1.0.0-rc.3 + resolution: "cheerio@npm:1.0.0-rc.3" dependencies: - cheerio-select: ^2.1.0 - dom-serializer: ^2.0.0 - domhandler: ^5.0.3 - domutils: ^3.0.1 - htmlparser2: ^8.0.1 - parse5: ^7.0.0 - parse5-htmlparser2-tree-adapter: ^7.0.0 - checksum: 5d4c1b7a53cf22d3a2eddc0aff70cf23cbb30d01a4c79013e703a012475c02461aa1fcd99127e8d83a02216386ed6942b2c8103845fd0812300dd199e6e7e054 + css-select: ~1.2.0 + dom-serializer: ~0.1.1 + entities: ~1.1.1 + htmlparser2: ^3.9.1 + lodash: ^4.15.0 + parse5: ^3.0.1 + checksum: 90163e8f360d3a9ac27d7ee83edd891236cad63df75e4fde5efcc27269996716a3f8c8dfcefaa2e77ddd6a21c8e54ed6169138096c869913e571abe2264f36fe languageName: node linkType: hard -"chokidar@npm:3.5.1": - version: 3.5.1 - resolution: "chokidar@npm:3.5.1" +"chokidar@npm:3.4.2, chokidar@npm:^3.2.2": + version: 3.4.2 + resolution: "chokidar@npm:3.4.2" dependencies: anymatch: ~3.1.1 braces: ~3.0.2 - fsevents: ~2.3.1 + fsevents: ~2.1.2 glob-parent: ~5.1.0 is-binary-path: ~2.1.0 is-glob: ~4.0.1 normalize-path: ~3.0.0 - readdirp: ~3.5.0 + readdirp: ~3.4.0 dependenciesMeta: fsevents: optional: true - checksum: b7774e6e3aeca084d39e8542041555a11452414c744122436101243f89580fad97154ae11525e46bfa816313ae32533e2a88e8587e4d50b14ea716a9e6538978 + checksum: c857826a0e5cce6216c349b7ee6891c9a7ccc2174efa51609aa729110a6f7d5d94516303b2a1dd65729528861e74c708ec14633dbd60ae66f691e8d15f3734eb languageName: node linkType: hard @@ -12326,7 +14698,45 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.4.0, chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": +"chokidar@npm:^3.4.1": + version: 3.4.3 + resolution: "chokidar@npm:3.4.3" + dependencies: + anymatch: ~3.1.1 + braces: ~3.0.2 + fsevents: ~2.1.2 + glob-parent: ~5.1.0 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.5.0 + dependenciesMeta: + fsevents: + optional: true + checksum: 1c7ab8bcbcf7b128346e79a26acb1c329d7c0f689a7a421afcebb5ddf9098f8f91d9122e9a9ac50a060a290f576e0fadfab936ace01312af73afd1c3e18dde7d + languageName: node + linkType: hard + +"chokidar@npm:^3.4.2": + version: 3.5.1 + resolution: "chokidar@npm:3.5.1" + dependencies: + anymatch: ~3.1.1 + braces: ~3.0.2 + fsevents: ~2.3.1 + glob-parent: ~5.1.0 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.5.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b7774e6e3aeca084d39e8542041555a11452414c744122436101243f89580fad97154ae11525e46bfa816313ae32533e2a88e8587e4d50b14ea716a9e6538978 + languageName: node + linkType: hard + +"chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" dependencies: @@ -12345,7 +14755,14 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^1.1.1, chownr@npm:^1.1.4": +"chownr@npm:^1.1.1": + version: 1.1.3 + resolution: "chownr@npm:1.1.3" + checksum: 898800b6ab42b91a5849a9191e237ea51fa09466f61fc654fca00e5709454760f09889ea8036948a7084daf690810d28fbb4b4870d5e93c362eb25876faea07a + languageName: node + linkType: hard + +"chownr@npm:^1.1.4": version: 1.1.4 resolution: "chownr@npm:1.1.4" checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d @@ -12360,9 +14777,11 @@ __metadata: linkType: hard "chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + version: 1.0.2 + resolution: "chrome-trace-event@npm:1.0.2" + dependencies: + tslib: ^1.9.0 + checksum: a104606fd07e6191848fa15d4031ac41c1715d025074574bdbb27d998a20d75d860a2060a5aca840bfbf97ec2ef6b72df9b387ed4109a8fc6eb5c362477c9294 languageName: node linkType: hard @@ -12373,10 +14792,17 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^3.1.1": + version: 3.2.0 + resolution: "ci-info@npm:3.2.0" + checksum: c68995a94e95ce3f233ff845e62dfc56f2e8ff1e3f5c1361bcdd520cbbc9726d8a54cbc1a685cb9ee19c3c5e71a1dade6dda23eb364b59b8e6c32508a9b761bc + languageName: node + linkType: hard + "ci-info@npm:^3.2.0": - version: 3.8.0 - resolution: "ci-info@npm:3.8.0" - checksum: d0a4d3160497cae54294974a7246202244fff031b0a6ea20dd57b10ec510aa17399c41a1b0982142c105f3255aff2173e5c0dd7302ee1b2f28ba3debda375098 + version: 3.3.0 + resolution: "ci-info@npm:3.3.0" + checksum: c3d86fe374938ecda5093b1ba39acb535d8309185ba3f23587747c6a057e63f45419b406d880304dbc0e1d72392c9a33e42fe9a1e299209bc0ded5efaa232b66 languageName: node linkType: hard @@ -12417,18 +14843,18 @@ __metadata: linkType: hard "classnames@npm:^2.2.3, classnames@npm:^2.2.4, classnames@npm:^2.2.5": - version: 2.3.2 - resolution: "classnames@npm:2.3.2" - checksum: 2c62199789618d95545c872787137262e741f9db13328e216b093eea91c85ef2bfb152c1f9e63027204e2559a006a92eb74147d46c800a9f96297ae1d9f96f4e + version: 2.2.6 + resolution: "classnames@npm:2.2.6" + checksum: 09a4fda780158aa8399079898eabeeca0c48c28641d9e4de140db7412e5e346843039ded1af0152f755afc2cc246ff8c3d6f227bf0dcb004e070b7fa14ec54cc languageName: node linkType: hard "clean-css@npm:^4.2.3": - version: 4.2.4 - resolution: "clean-css@npm:4.2.4" + version: 4.2.3 + resolution: "clean-css@npm:4.2.3" dependencies: source-map: ~0.6.0 - checksum: 045ff6fcf4b5c76a084b24e1633e0c78a13b24080338fc8544565a9751559aa32ff4ee5886d9e52c18a644a6ff119bd8e37bc58e574377c05382a1fb7dbe39f8 + checksum: 613129973a038b8bb13e3975ad6b679feccb8c98f2a9d03e6bec9e60291ef1e6b5037ee8cb09a3470751adc52f43782b1dcb4cb049360230b48062d6e3314072 languageName: node linkType: hard @@ -12448,6 +14874,13 @@ __metadata: languageName: node linkType: hard +"cli-boxes@npm:^2.2.0": + version: 2.2.0 + resolution: "cli-boxes@npm:2.2.0" + checksum: 720560248bea35f4d4b67e8daf5635c27fea8d3e1177afa395ead0c7e50a8a23e2c5a95c65e0183f7812990d35e74192b3f7b9d56a84737bda6123e60c421896 + languageName: node + linkType: hard + "cli-boxes@npm:^2.2.1": version: 2.2.1 resolution: "cli-boxes@npm:2.2.1" @@ -12482,14 +14915,35 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.0.0, cli-spinners@npm:^2.5.0": +"cli-spinners@npm:^2.0.0": + version: 2.5.0 + resolution: "cli-spinners@npm:2.5.0" + checksum: 9cd7c3e22f9243c2b8436bd405d4c7aa5c7b432112fed0c9b7e1d773f8d12fb30e15083ed45474b28d5e8de490d4299dc8a213c327931a25cc998a44b4a2d747 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": version: 2.9.0 resolution: "cli-spinners@npm:2.9.0" checksum: a9c56e1f44457d4a9f4f535364e729cb8726198efa9e98990cfd9eda9e220dfa4ba12f92808d1be5e29029cdfead781db82dc8549b97b31c907d55f96aa9b0e2 languageName: node linkType: hard -"cli-table3@npm:^0.6.1, cli-table3@npm:~0.6.0": +"cli-table3@npm:0.6.0, cli-table3@npm:~0.6.0": + version: 0.6.0 + resolution: "cli-table3@npm:0.6.0" + dependencies: + colors: ^1.1.2 + object-assign: ^4.1.0 + string-width: ^4.2.0 + dependenciesMeta: + colors: + optional: true + checksum: 98682a2d3eef5ad07d34a08f90398d0640004e28ecf8eb59006436f11ed7b4d453db09f46c2ea880618fbd61fee66321b3b3ee1b20276bc708b6baf6f9663d75 + languageName: node + linkType: hard + +"cli-table3@npm:^0.6.1": version: 0.6.3 resolution: "cli-table3@npm:0.6.3" dependencies: @@ -12583,7 +15037,7 @@ __metadata: languageName: node linkType: hard -"clone-response@npm:1.0.2": +"clone-response@npm:1.0.2, clone-response@npm:^1.0.2": version: 1.0.2 resolution: "clone-response@npm:1.0.2" dependencies: @@ -12599,10 +15053,17 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.0.2, clsx@npm:^1.0.4": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 +"clsx@npm:^1.0.2": + version: 1.0.4 + resolution: "clsx@npm:1.0.4" + checksum: bd2a74dbc2fa10d44c5cb083d2ed65da098fd9bc502af767c723becd2f2acb9f09824aac13ed871e93d4afa7c8af5c68b9f3ec99581de157aae7aeee2aca7d2e + languageName: node + linkType: hard + +"clsx@npm:^1.0.4, clsx@npm:^1.1.1": + version: 1.1.1 + resolution: "clsx@npm:1.1.1" + checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 languageName: node linkType: hard @@ -12644,10 +15105,15 @@ __metadata: languageName: node linkType: hard -"codepage@npm:~1.15.0": - version: 1.15.0 - resolution: "codepage@npm:1.15.0" - checksum: 86bdfd8f8fd4d78ace6ddab02a1621cbb4a833686fe886984b4155d99cd0287581d69495774b816ab2f571c4dc851c1595e1dbb8d69bd6dbb5a631ebf317fab0 +"codepage@npm:~1.14.0": + version: 1.14.0 + resolution: "codepage@npm:1.14.0" + dependencies: + commander: ~2.14.1 + exit-on-epipe: ~1.0.1 + bin: + codepage: ./bin/codepage.njs + checksum: ea06cbb7b646029d4e252b143b09048f1dee466d80be9e68cc4da05981f982a02f1199db0ea27d5e05a026bfa77b91e3ae8e0d3ed9665bd77ba54911bf2b82b7 languageName: node linkType: hard @@ -12675,7 +15141,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.1": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -12707,13 +15173,23 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.6.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" +"color-string@npm:^1.5.2": + version: 1.5.3 + resolution: "color-string@npm:1.5.3" + dependencies: + color-name: ^1.0.0 + simple-swizzle: ^0.2.2 + checksum: 66f071ab5f7b4e6c651abb07141e008439932da33f95a6c8a4d9186f256d34319c684f640a31e77f53ff2ae751a79e833ceb93658c5e54eb7d05e93a8dc79979 + languageName: node + linkType: hard + +"color-string@npm:^1.5.4": + version: 1.5.4 + resolution: "color-string@npm:1.5.4" dependencies: color-name: ^1.0.0 simple-swizzle: ^0.2.2 - checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 + checksum: ae53f205d7a757ce7e1256dc4c8873675a8d3a5f136963183b94bbe725184239e0c19002177ee71488884abb7db958b1744cf83095c5b2b95d0b8937839162b7 languageName: node linkType: hard @@ -12726,13 +15202,40 @@ __metadata: languageName: node linkType: hard -"color@npm:^3.0.0, color@npm:^3.1.3": - version: 3.2.1 - resolution: "color@npm:3.2.1" +"color@npm:3.0.x": + version: 3.0.0 + resolution: "color@npm:3.0.0" + dependencies: + color-convert: ^1.9.1 + color-string: ^1.5.2 + checksum: 273fe5d4c2a322dbc0e184ef6c891cbefefa11af7c6a8ed6001ff6986af747038cf3258bd4f4b715415f287c556efc8d1f0368bc02240877610ae1d427887537 + languageName: node + linkType: hard + +"color@npm:^3.0.0": + version: 3.1.2 + resolution: "color@npm:3.1.2" dependencies: - color-convert: ^1.9.3 - color-string: ^1.6.0 - checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 + color-convert: ^1.9.1 + color-string: ^1.5.2 + checksum: 58ab3bf57d5acf95917045cac30db57fa8f8c0e92b8d54f2adaf5e843bb17abe0914809bd44b34b9747e6e08a2f0126adc7964e1ca45fe8948f44aad04e853c9 + languageName: node + linkType: hard + +"color@npm:^3.1.3": + version: 3.1.3 + resolution: "color@npm:3.1.3" + dependencies: + color-convert: ^1.9.1 + color-string: ^1.5.4 + checksum: d52a77ae239e1cdb55d9920e73d730df69a05cec9cb5d9b83a3e311b23009fd4053f4a88e7f6152207db498838f10e3ba4b1661a64a3acb41a50b14944214f26 + languageName: node + linkType: hard + +"colorette@npm:2.0.16": + version: 2.0.16 + resolution: "colorette@npm:2.0.16" + checksum: cd55596a3a2d1071c1a28eee7fd8a5387593ff1bd10a3e8d0a6221499311fe34a9f2b9272d77c391e0e003dcdc8934fb2f8d106e7ef1f7516f8060c901d41a27 languageName: node linkType: hard @@ -12744,6 +15247,13 @@ __metadata: linkType: hard "colorette@npm:^1.0.7": + version: 1.2.1 + resolution: "colorette@npm:1.2.1" + checksum: 06e2fcdb9e2a2c527ac84509a56eadf481cde1768933eb612808f3bb3a9d9872c06b4a9f95e4d0f7befeef8b38307f79b88242d9ea52470d1125520b8116de08 + languageName: node + linkType: hard + +"colorette@npm:^1.2.2, colorette@npm:^1.3.0": version: 1.4.0 resolution: "colorette@npm:1.4.0" checksum: 01c3c16058b182a4ab4c126a65a75faa4d38a20fa7c845090b25453acec6c371bb2c5dceb0a2338511f17902b9d1a9af0cadd8509c9403894b79311032c256c3 @@ -12764,13 +15274,20 @@ __metadata: languageName: node linkType: hard +"colors@npm:^1.1.2, colors@npm:^1.2.1": + version: 1.4.0 + resolution: "colors@npm:1.4.0" + checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec + languageName: node + linkType: hard + "colorspace@npm:1.1.x": - version: 1.1.4 - resolution: "colorspace@npm:1.1.4" + version: 1.1.2 + resolution: "colorspace@npm:1.1.2" dependencies: - color: ^3.1.3 + color: 3.0.x text-hex: 1.0.x - checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 + checksum: a959ec1669176aa72185067b7d04dae1cef2698456e1a452a035ce8adcac95673fbb1547e3240903355bcbaa67e031cca0b8b4f7d42c256b3dd94dcead8e1405 languageName: node linkType: hard @@ -12817,7 +15334,14 @@ __metadata: languageName: node linkType: hard -"commander@npm:^4.0.1, commander@npm:^4.1.1": +"commander@npm:^4.0.1": + version: 4.0.1 + resolution: "commander@npm:4.0.1" + checksum: a8df9873c699abe5a6396164cf8ca9e2908246469cfff7178066c0d05575622ac43cebfb387c5531f800e336a812833728474fc248d4c4fb00b1df58434d5215 + languageName: node + linkType: hard + +"commander@npm:^4.1.1": version: 4.1.1 resolution: "commander@npm:4.1.1" checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 @@ -12846,9 +15370,9 @@ __metadata: linkType: hard "commander@npm:^9.1.0": - version: 9.5.0 - resolution: "commander@npm:9.5.0" - checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade + version: 9.4.1 + resolution: "commander@npm:9.4.1" + checksum: bfb18e325a5bdf772763c2213d5c7d9e77144d944124e988bcd8e5e65fb6d45d5d4e86b09155d0f2556c9a59c31e428720e57968bcd050b2306e910a0bf3cf13 languageName: node linkType: hard @@ -12859,6 +15383,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:~2.13.0": + version: 2.13.0 + resolution: "commander@npm:2.13.0" + checksum: b23e2de09428e3852e881c3e265c70438ca038c834744479b72dde0bbc570f45c7f1ea2feea27fbe26382d2cbf6fb7b1963d7dee2c08b3f4adc95dbc45d977f5 + languageName: node + linkType: hard + "commander@npm:~2.14.1": version: 2.14.1 resolution: "commander@npm:2.14.1" @@ -12866,17 +15397,17 @@ __metadata: languageName: node linkType: hard -"common-path-prefix@npm:^3.0.0": - version: 3.0.0 - resolution: "common-path-prefix@npm:3.0.0" - checksum: fdb3c4f54e51e70d417ccd950c07f757582de800c0678ca388aedefefc84982039f346f9fd9a1252d08d2da9e9ef4019f580a1d1d3a10da031e4bb3c924c5818 +"commander@npm:~2.17.1": + version: 2.17.1 + resolution: "commander@npm:2.17.1" + checksum: 22e7ed5b422079a13a496e5eb8f73f36c15b5809d46f738e168e20f9ad485c12951bdc2cb366a36eb5f4927dae4f17b355b8adb96a5b9093f5fa4c439e8b9419 languageName: node linkType: hard "common-tags@npm:^1.8.0": - version: 1.8.2 - resolution: "common-tags@npm:1.8.2" - checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff + version: 1.8.0 + resolution: "common-tags@npm:1.8.0" + checksum: fb0cc9420d149176f2bd2b1fc9e6df622cd34eccaca60b276aa3253a7c9241e8a8ed1ec0702b2679eba7e47aeef721869c686bbd7257b75b5c44993c8462cd7f languageName: node linkType: hard @@ -12888,9 +15419,9 @@ __metadata: linkType: hard "complex.js@npm:^2.0.15": - version: 2.1.1 - resolution: "complex.js@npm:2.1.1" - checksum: a0802cc3f0eb7703088edfc3fe209ae7be5ce93c0e710a0f288be2e29ee31b3530a8c0d3330d7c2a668410dfe4293a4038554d66c7f1f1165997941bdc1092aa + version: 2.0.15 + resolution: "complex.js@npm:2.0.15" + checksum: f39b4ee8f8c507f896e0a0ff440fa52074c15fc4476644c5db730f5da8e6e81a010ef90ea9eda907758737062c944ac6abd4783ff14978a8976aa41e56572e12 languageName: node linkType: hard @@ -12911,11 +15442,11 @@ __metadata: linkType: hard "compressible@npm:~2.0.16": - version: 2.0.18 - resolution: "compressible@npm:2.0.18" + version: 2.0.17 + resolution: "compressible@npm:2.0.17" dependencies: - mime-db: ">= 1.43.0 < 2" - checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 + mime-db: ">= 1.40.0 < 2" + checksum: f9010080bd2a07794470a6f57e122fede2bf1338f848c30b4020e8c7cfa7907a753db19e1c3f0dc81a33ddd1fe98783d4ca4dfb8c6d7a99d8d697606edc68f3e languageName: node linkType: hard @@ -12934,6 +15465,13 @@ __metadata: languageName: node linkType: hard +"compute-scroll-into-view@npm:^1.0.17": + version: 1.0.17 + resolution: "compute-scroll-into-view@npm:1.0.17" + checksum: b20c05a10c37813c5a6e4bf053c00f65c88d23afed7a6bd7a2a69e05e2ffc2df3483ecfe407d36bf16b8cec8be21ae1966c9c523093a03117e567156cd79a51e + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -12966,8 +15504,8 @@ __metadata: linkType: hard "concurrently@npm:^5.2.0": - version: 5.3.0 - resolution: "concurrently@npm:5.3.0" + version: 5.2.0 + resolution: "concurrently@npm:5.2.0" dependencies: chalk: ^2.4.2 date-fns: ^2.0.1 @@ -12980,24 +15518,45 @@ __metadata: yargs: ^13.3.0 bin: concurrently: bin/concurrently.js - checksum: e12f32eab48e50fc5b7752dc43db7c78f5b553efc625d3b8741c3dd3088ba0050cb8e506f008c8a5fe30d7980849639d12b359a5aea88fd16707a0161b05babb + checksum: e01809b9f410b9f1557072e41effbabea0ccae2aedefe5b7107025916701feed987f178ef41be10b2474ec1ba0e856345a64b08010bab67b3b3599073dad58a5 languageName: node linkType: hard -"config-chain@npm:^1.1.12, config-chain@npm:^1.1.13": - version: 1.1.13 - resolution: "config-chain@npm:1.1.13" +"config-chain@npm:^1.1.12": + version: 1.1.12 + resolution: "config-chain@npm:1.1.12" dependencies: ini: ^1.3.4 proto-list: ~1.2.1 - checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab + checksum: a16332f87212b4015afcdfc95fe42b40b162e7f10b4f4370ab3239979b6e69a41b4e6fb34d7891aa028a557f2340da236f810df433b18dfa5c408b2eb8489bf7 + languageName: node + linkType: hard + +"configstore@npm:^5.0.1": + version: 5.0.1 + resolution: "configstore@npm:5.0.1" + 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 + checksum: 60ef65d493b63f96e14b11ba7ec072fdbf3d40110a94fb7199d1c287761bdea5c5244e76b2596325f30c1b652213aa75de96ea20afd4a5f82065e61ea090988e languageName: node linkType: hard "confusing-browser-globals@npm:^1.0.10": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef + version: 1.0.10 + resolution: "confusing-browser-globals@npm:1.0.10" + checksum: 7ccdc44c2ca419cf6576c3e4336106e18d1c5337f547e461342f51aec4a10f96fdfe45414b522be3c7d24ea0b62bf4372cd37768022e4d6161707ffb2c0987e6 + languageName: node + linkType: hard + +"confusing-browser-globals@npm:^1.0.9": + version: 1.0.9 + resolution: "confusing-browser-globals@npm:1.0.9" + checksum: 585f244fc05bdcede9bd8831c41ff22b3fb0629e3ac6a495330a59c1aa9c30f3c1544498b6ff4f5a0bb302f7bedfbbb3f59d591556856e80622fd51b1dff351c languageName: node linkType: hard @@ -13059,6 +15618,13 @@ __metadata: languageName: node linkType: hard +"contains-path@npm:^0.1.0": + version: 0.1.0 + resolution: "contains-path@npm:0.1.0" + checksum: 94ecfd944e0bc51be8d3fc596dcd17d705bd4c8a1a627952a3a8c5924bac01c7ea19034cf40b4b4f89e576cdead130a7e5fd38f5f7f07ef67b4b261d875871e3 + languageName: node + linkType: hard + "content-disposition-header@npm:^0.6.0": version: 0.6.0 resolution: "content-disposition-header@npm:0.6.0" @@ -13066,6 +15632,15 @@ __metadata: languageName: node linkType: hard +"content-disposition@npm:0.5.3": + version: 0.5.3 + resolution: "content-disposition@npm:0.5.3" + dependencies: + safe-buffer: 5.1.2 + checksum: 95bf164c0b0b8199d3f44b7631e51b37f683c6a90b9baa4315bd3d405a6d1bc81b7346f0981046aa004331fb3d7a28b629514d01fc209a5251573fc7e4d33380 + languageName: node + linkType: hard + "content-disposition@npm:0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" @@ -13075,10 +15650,10 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.4, content-type@npm:~1.0.5": - version: 1.0.5 - resolution: "content-type@npm:1.0.5" - checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 +"content-type@npm:~1.0.4": + version: 1.0.4 + resolution: "content-type@npm:1.0.4" + checksum: 3d93585fda985d1554eca5ebd251994327608d2e200978fdbfba21c0c679914d5faf266d17027de44b34a72c7b0745b18584ecccaa7e1fdfb6a68ac7114f12e0 languageName: node linkType: hard @@ -13089,7 +15664,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:1.7.0": +"convert-source-map@npm:1.7.0, convert-source-map@npm:^1.1.0, convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.5.1, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.7.0 resolution: "convert-source-map@npm:1.7.0" dependencies: @@ -13105,13 +15680,6 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.1.0, convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.1, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 - languageName: node - linkType: hard - "convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" @@ -13127,12 +15695,12 @@ __metadata: linkType: hard "cookie-parser@npm:^1.4.3": - version: 1.4.6 - resolution: "cookie-parser@npm:1.4.6" + version: 1.4.4 + resolution: "cookie-parser@npm:1.4.4" dependencies: - cookie: 0.4.1 + cookie: 0.3.1 cookie-signature: 1.0.6 - checksum: 1e5a63aa82e8eb4e02d2977c6902983dee87b02e87ec5ec43ac3cb1e72da354003716570cd5190c0ad9e8a454c9d3237f4ad6e2f16d0902205a96a1c72b77ba5 + checksum: 52eabd66f471c8745c7266324d70cec2be830cbbf2354b51c9484c8962ff983e4d315e77a001cdcff37619db2a86efe1f1f5c8ce7e095bfa016ae79df954db4f languageName: node linkType: hard @@ -13143,10 +15711,17 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.4.1": - version: 0.4.1 - resolution: "cookie@npm:0.4.1" - checksum: bd7c47f5d94ab70ccdfe8210cde7d725880d2fcda06d8e375afbdd82de0c8d3b73541996e9ce57d35f67f672c4ee6d60208adec06b3c5fc94cebb85196084cf8 +"cookie@npm:0.3.1": + version: 0.3.1 + resolution: "cookie@npm:0.3.1" + checksum: 5309937344947a049283573861c24bed054fac3334ce5a0fa74b9bc6bf39bd387d3a0fca7f3ed6f4a09f112de82c00b541a0e7d6ce7a8de0f5d1301eec799730 + languageName: node + linkType: hard + +"cookie@npm:0.4.0": + version: 0.4.0 + resolution: "cookie@npm:0.4.0" + checksum: 760384ba0aef329c52523747e36a452b5e51bc49b34160363a6934e7b7df3f93fcc88b35e33450361535d40a92a96412da870e1816aba9aa6cc556a9fedd8492 languageName: node linkType: hard @@ -13158,16 +15733,16 @@ __metadata: linkType: hard "cookie@npm:^0.4.1": - version: 0.4.2 - resolution: "cookie@npm:0.4.2" - checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b + version: 0.4.1 + resolution: "cookie@npm:0.4.1" + checksum: bd7c47f5d94ab70ccdfe8210cde7d725880d2fcda06d8e375afbdd82de0c8d3b73541996e9ce57d35f67f672c4ee6d60208adec06b3c5fc94cebb85196084cf8 languageName: node linkType: hard "cookiejar@npm:^2.1.0": - version: 2.1.4 - resolution: "cookiejar@npm:2.1.4" - checksum: c4442111963077dc0e5672359956d6556a195d31cbb35b528356ce5f184922b99ac48245ac05ed86cf993f7df157c56da10ab3efdadfed79778a0d9b1b092d5b + version: 2.1.2 + resolution: "cookiejar@npm:2.1.2" + checksum: 706cad1a56db51dfb13c1fef73dab8e7fabcfdfbe5d58d463139b4af1482603291832053cc85564bc998a05784956a6cf0ac667414a0a8d7765c65ed3ed42f3e languageName: node linkType: hard @@ -13202,7 +15777,36 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.25.1, core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.30.2, core-js-compat@npm:^3.8.1": +"copy-to-clipboard@npm:^3.3.1": + version: 3.3.1 + resolution: "copy-to-clipboard@npm:3.3.1" + dependencies: + toggle-selection: ^1.0.6 + checksum: 3c7b1c333dc6a4b2e9905f52e4df6bbd34ff9f9c97ecd3ca55378a6bc1c191bb12a3252e6289c7b436e9188cff0360d393c0161626851d2301607860bbbdcfd5 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.14.0, core-js-compat@npm:^3.16.0": + version: 3.17.3 + resolution: "core-js-compat@npm:3.17.3" + dependencies: + browserslist: ^4.17.0 + semver: 7.0.0 + checksum: c7f04ddd96a8a624eb990ba846c031dc112ba7c207a5bd7fd998bedb4b9c273b8b7482864d0cadfd19fa761db57b51ea9eaa265c08cfc59a064ba9d41aaaba4f + languageName: node + linkType: hard + +"core-js-compat@npm:^3.21.0": + version: 3.24.1 + resolution: "core-js-compat@npm:3.24.1" + dependencies: + browserslist: ^4.21.3 + semver: 7.0.0 + checksum: b14516add9d59a9fae3b96d0de6e1d8864df80b714232814fce56ce946af3696cb50a4f83c717f8f36e43e1a37adf99a4cde6fc921e6ee56021eee2ea3bdc4dc + languageName: node + linkType: hard + +"core-js-compat@npm:^3.25.1, core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.30.2": version: 3.30.2 resolution: "core-js-compat@npm:3.30.2" dependencies: @@ -13211,10 +15815,30 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.30.2": - version: 3.30.2 - resolution: "core-js-pure@npm:3.30.2" - checksum: e0e012fe94e38663d837410baac62efe05d0c7431e3fbaa70c65f51eb980da9c3add225eca04208d576bc0d92cefeca9a4f7671a65fd84fd7dfc92d8618dddfd +"core-js-compat@npm:^3.6.2": + version: 3.6.4 + resolution: "core-js-compat@npm:3.6.4" + dependencies: + browserslist: ^4.8.3 + semver: 7.0.0 + checksum: 5b5cf65ad8bfb759382fff93aa3ffab58d28485ad5044319041a89dd36c31253b0b5682eb0d5b2d81e441b4d0d4ce08f01429047faaedb0203c28e39cbaee4b4 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.8.1": + version: 3.18.1 + resolution: "core-js-compat@npm:3.18.1" + dependencies: + browserslist: ^4.17.1 + semver: 7.0.0 + checksum: d7afbd879fa1fd6bd20778308bfafc8b4993b13a4c24cb0793baad4b027d13f59fef78b867137b0a570df708ea2d0766a067d8c5b3dc4e5e4747d70dc91e1c98 + languageName: node + linkType: hard + +"core-js-pure@npm:^3.16.0, core-js-pure@npm:^3.8.2": + version: 3.18.1 + resolution: "core-js-pure@npm:3.18.1" + checksum: a299bee71e15227823e116ca5bf4c5d0cca8577ce35cc8758dfc17058bcbfee343493c0701b67478bb1362e072246ab1b20675e7c09a273f1310fa08d85cad8c languageName: node linkType: hard @@ -13225,31 +15849,45 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^2.4.0, core-js@npm:^2.4.1, core-js@npm:^2.5.0, core-js@npm:^2.6.5": +"core-js@npm:^2.2.2, core-js@npm:^2.4.0, core-js@npm:^2.4.1, core-js@npm:^2.5.0, core-js@npm:^2.6.5": + version: 2.6.11 + resolution: "core-js@npm:2.6.11" + checksum: 6944011e7aa2d86dae6c42fbb15c94bf20b7499c4f5ebd5e5d11bdde7101d3724788afacc8ab93fbacb2c881d634ef9ee783e1cf724cfbaaf501e882abda957f + languageName: node + linkType: hard + +"core-js@npm:^2.6.10": version: 2.6.12 resolution: "core-js@npm:2.6.12" checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 languageName: node linkType: hard -"core-js@npm:^3.0.4, core-js@npm:^3.16.1, core-js@npm:^3.30.2, core-js@npm:^3.4.2, core-js@npm:^3.6.5, core-js@npm:^3.8.2": - version: 3.30.2 - resolution: "core-js@npm:3.30.2" - checksum: 73d47e2b9d9f502800973982d08e995bbf04832e20b04e04be31dd7607247158271315e9328788a2408190e291c7ffbefad141167b1e57dea9f983e1e723541e +"core-js@npm:^3.0.4, core-js@npm:^3.6.4, core-js@npm:^3.6.5": + version: 3.6.5 + resolution: "core-js@npm:3.6.5" + checksum: b7fcf92f888bfe40f3f005e3f729e66aa49a3a9a797e8fb4d09d429c6abcd505781b2c03836858f0dc0159249d4b7a035fc763052c9c34adbc93b6f8a6a86305 languageName: node linkType: hard -"core-util-is@npm:1.0.2": - version: 1.0.2 - resolution: "core-util-is@npm:1.0.2" - checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab +"core-js@npm:^3.16.0, core-js@npm:^3.8.2": + version: 3.18.1 + resolution: "core-js@npm:3.18.1" + checksum: 89cac0fe657df722d10b0e658ee76af12a614c0a75fe3fb11e87c2e3f27f6d7e609e3bf40748da5d8feb055b0535766a583ff1d1ac89dba57105f6f1ad64dc21 languageName: node linkType: hard -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 +"core-js@npm:^3.16.1": + version: 3.16.1 + resolution: "core-js@npm:3.16.1" + checksum: 7924fa2a7f00e3a33bbe92fe42ba59fbbe7e01557a59824d000976300be3ba224cca20161f61654b3861ea80d244d6adfee6ed3ae6d6d9931210a37510fb7c9b + languageName: node + linkType: hard + +"core-util-is@npm:1.0.2, core-util-is@npm:~1.0.0": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab languageName: node linkType: hard @@ -13289,15 +15927,15 @@ __metadata: linkType: hard "cosmiconfig@npm:^7.0.0": - version: 7.1.0 - resolution: "cosmiconfig@npm:7.1.0" + version: 7.0.1 + resolution: "cosmiconfig@npm:7.0.1" dependencies: "@types/parse-json": ^4.0.0 import-fresh: ^3.2.1 parse-json: ^5.0.0 path-type: ^4.0.0 yaml: ^1.10.0 - checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f + checksum: 4be63e7117955fd88333d7460e4c466a90f556df6ef34efd59034d2463484e339666c41f02b523d574a797ec61f4a91918c5b89a316db2ea2f834e0d2d09465b languageName: node linkType: hard @@ -13320,17 +15958,7 @@ __metadata: languageName: node linkType: hard -"cpu-features@npm:0.0.2": - version: 0.0.2 - resolution: "cpu-features@npm:0.0.2" - dependencies: - nan: ^2.14.1 - node-gyp: latest - checksum: 15177f9a2d465e4d84390f902c977b34f237dadb29fd8553853b13d906ffe5f15be9f091c72db4f34c71412d5ff4e0e4edf04caebc875b02d1d7ecfce2963299 - languageName: node - linkType: hard - -"cpy@npm:^8.1.2": +"cpy@npm:^8.1.1": version: 8.1.2 resolution: "cpy@npm:8.1.2" dependencies: @@ -13360,25 +15988,28 @@ __metadata: linkType: hard "crc-32@npm:~1.2.0": - version: 1.2.2 - resolution: "crc-32@npm:1.2.2" + version: 1.2.0 + resolution: "crc-32@npm:1.2.0" + dependencies: + exit-on-epipe: ~1.0.1 + printj: ~1.1.0 bin: - crc32: bin/crc32.njs - checksum: ad2d0ad0cbd465b75dcaeeff0600f8195b686816ab5f3ba4c6e052a07f728c3e70df2e3ca9fd3d4484dc4ba70586e161ca5a2334ec8bf5a41bf022a6103ff243 + crc32: ./bin/crc32.njs + checksum: 7bcde8bea262f6629ac3c70e20bdfa3d058dc77091705ce8620513f76f19b41fc273ddd65a716eef9b4e33fbb61ff7f9b266653d214319aef27e4223789c6b9e languageName: node linkType: hard "create-ecdh@npm:^4.0.0": - version: 4.0.4 - resolution: "create-ecdh@npm:4.0.4" + version: 4.0.3 + resolution: "create-ecdh@npm:4.0.3" dependencies: bn.js: ^4.1.0 - elliptic: ^6.5.3 - checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b + elliptic: ^6.0.0 + checksum: 0678955daf937c188c69b2a601ebcbe4ab02ca3c1aa04f62d5fb5511430d0141802207eabf9aa100351920ea89bfcbe53ba8bd4c013a1a3453fd807549a5ede2 languageName: node linkType: hard -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2": version: 1.2.0 resolution: "create-hash@npm:1.2.0" dependencies: @@ -13391,7 +16022,7 @@ __metadata: languageName: node linkType: hard -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.2, create-hmac@npm:^1.1.4": version: 1.1.7 resolution: "create-hmac@npm:1.1.7" dependencies: @@ -13406,12 +16037,26 @@ __metadata: linkType: hard "create-react-class@npm:*, create-react-class@npm:^15.6.0": - version: 15.7.0 - resolution: "create-react-class@npm:15.7.0" + version: 15.6.3 + resolution: "create-react-class@npm:15.6.3" dependencies: + fbjs: ^0.8.9 loose-envify: ^1.3.1 object-assign: ^4.1.1 - checksum: 0c5f43da705fa9f67ec289051dd5780792652d440dfa17cd2c7d8423c1f604609596f895dabf46fda1960ddd93ee96fe1b61ef4d55a94fc4271b07d515486714 + checksum: 8ad00603815efafe44d511dc39beb0e2d03177c99c60c85978c2d791db880e83be64042e0ee718ccdeb596cd850f3649333adbbd08783980ba3882488bb2bf7d + languageName: node + linkType: hard + +"create-react-context@npm:0.3.0, create-react-context@npm:^0.3.0": + version: 0.3.0 + resolution: "create-react-context@npm:0.3.0" + dependencies: + gud: ^1.0.0 + warning: ^4.0.3 + peerDependencies: + prop-types: ^15.0.0 + react: ^0.14.0 || ^15.0.0 || ^16.0.0 + checksum: e59b7a65671e59f5b11e06f67faadf0733ab6c33247d5631331aeb05450d180b8ae44d73817b9c02f1527654ba490ea3d3dd7320f8d6debb36776f10b0ae6a47 languageName: node linkType: hard @@ -13423,14 +16068,14 @@ __metadata: linkType: hard "cross-env@npm:^7.0.2": - version: 7.0.3 - resolution: "cross-env@npm:7.0.3" + version: 7.0.2 + resolution: "cross-env@npm:7.0.2" dependencies: cross-spawn: ^7.0.1 bin: cross-env: src/bin/cross-env.js cross-env-shell: src/bin/cross-env-shell.js - checksum: 26f2f3ea2ab32617f57effb70d329c2070d2f5630adc800985d8b30b56e8bf7f5f439dd3a0358b79cee6f930afc23cf8e23515f17ccfb30092c6b62c6b630a79 + checksum: dcfb07e279ca83abfe2205199a38d719bd9e1ba1dd4eed0878b12bb9b45132df0e7aea4a2fcf310b6845d232d2991488fafb30059261bb4c822fd12f71fe5e28 languageName: node linkType: hard @@ -13443,12 +16088,12 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^3.1.5": - version: 3.1.6 - resolution: "cross-fetch@npm:3.1.6" +"cross-fetch@npm:^3.0.4": + version: 3.0.6 + resolution: "cross-fetch@npm:3.0.6" dependencies: - node-fetch: ^2.6.11 - checksum: 704b3519ab7de488328cc49a52cf1aa14132ec748382be5b9557b22398c33ffa7f8c2530e8a97ed8cb55da52b0a9740a9791d361271c4591910501682d981d9c + node-fetch: 2.6.1 + checksum: fc855278c3bae191a00003eed618a40b48dfadf25ccf707ffdb173add97921f89ef459815bc5cbd20554de713da4f0a2c1258f83e60895efdeab5a7834c6e3b6 languageName: node linkType: hard @@ -13463,7 +16108,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -13487,6 +16132,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.1": + version: 7.0.1 + resolution: "cross-spawn@npm:7.0.1" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 5c1c52be2d24f0ada793920bf0beca61ea9cc03bb5c400617ddfd2c03f10ed86a0c39fb67bcf2cee91ec4dd7e9f1595ed9c40f84352d2881937bf861281f651a + languageName: node + linkType: hard + "crypto-browserify@npm:^3.11.0": version: 3.12.0 resolution: "crypto-browserify@npm:3.12.0" @@ -13649,7 +16305,19 @@ __metadata: languageName: node linkType: hard -"css-select@npm:^2.0.0": +"css-select@npm:^1.1.0, css-select@npm:~1.2.0": + version: 1.2.0 + resolution: "css-select@npm:1.2.0" + dependencies: + boolbase: ~1.0.0 + css-what: 2.1 + domutils: 1.5.1 + nth-check: ~1.0.1 + checksum: 607cca60d2f5c56701fe5f800bbe668b114395c503d4e4808edbbbe70b8be3c96a6407428dc0227fcbdf335b20468e6a9e7fd689185edfb57d402e1e4837c9b7 + languageName: node + linkType: hard + +"css-select@npm:^2.0.0, css-select@npm:^2.1.0": version: 2.1.0 resolution: "css-select@npm:2.1.0" dependencies: @@ -13661,7 +16329,7 @@ __metadata: languageName: node linkType: hard -"css-select@npm:^4.1.3, css-select@npm:^4.2.1": +"css-select@npm:^4.2.1": version: 4.3.0 resolution: "css-select@npm:4.3.0" dependencies: @@ -13674,27 +16342,14 @@ __metadata: languageName: node linkType: hard -"css-select@npm:^5.1.0": - version: 5.1.0 - resolution: "css-select@npm:5.1.0" - dependencies: - boolbase: ^1.0.0 - css-what: ^6.1.0 - domhandler: ^5.0.2 - domutils: ^3.0.1 - nth-check: ^2.0.1 - checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda - languageName: node - linkType: hard - "css-to-react-native@npm:^3.0.0": - version: 3.2.0 - resolution: "css-to-react-native@npm:3.2.0" + version: 3.0.0 + resolution: "css-to-react-native@npm:3.0.0" dependencies: camelize: ^1.0.0 css-color-keywords: ^1.0.0 postcss-value-parser: ^4.0.2 - checksum: 263be65e805aef02c3f20c064665c998a8c35293e1505dbe6e3054fb186b01a9897ac6cf121f9840e5a9dfe3fb3994f6fcd0af84a865f1df78ba5bf89e77adce + checksum: 98a2e9d4fbe9cabc8b744dfdd5ec108396ce497a7b860912a95b299bd52517461281810fcb707965a021a8be39adca9587184a26fb4e926211391a1557aca3c1 languageName: node linkType: hard @@ -13708,13 +16363,20 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3": - version: 1.1.3 - resolution: "css-tree@npm:1.1.3" +"css-tree@npm:^1.0.0-alpha.39": + version: 1.1.2 + resolution: "css-tree@npm:1.1.2" dependencies: mdn-data: 2.0.14 source-map: ^0.6.1 - checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f + checksum: b92e6439124f2a96bb111d4b4c2a50a8bdf392acd6be2179c67a0cff0582917e29561272543d37f3f48b7bfcad7a2aba1c9347d8c9519c97d54457b0d9090618 + languageName: node + linkType: hard + +"css-unit-converter@npm:^1.1.1": + version: 1.1.1 + resolution: "css-unit-converter@npm:1.1.1" + checksum: 9ea7d102d5ee46e0e81de660f28dce7f4dc01af6ef77e51567191737a3811ade035bb97d56b604767ffb7454642974b82e8108bb809e031fe01587944078ca4b languageName: node linkType: hard @@ -13728,14 +16390,21 @@ __metadata: languageName: node linkType: hard +"css-what@npm:2.1": + version: 2.1.3 + resolution: "css-what@npm:2.1.3" + checksum: a52d56c591a7e1c37506d0d8c4fdef72537fb8eb4cb68711485997a88d76b5a3342b73a7c79176268f95b428596c447ad7fa3488224a6b8b532e2f1f2ee8545c + languageName: node + linkType: hard + "css-what@npm:^3.2.1": - version: 3.4.2 - resolution: "css-what@npm:3.4.2" - checksum: 26bb5ec3ae718393d418016365c849fa14bd0de408c735dea3ddf58146b6cc54f3b336fb4afd31d95c06ca79583acbcdfec7ee93d31ff5c1a697df135b38dfeb + version: 3.2.1 + resolution: "css-what@npm:3.2.1" + checksum: 69667f622e2d55cc023a4df9eefef17d56319cd2b29c249a1741d85246fbb41af189f090412b562e2dd82e70a6a37892d0b87528511ad4dd220dec7f0651abe2 languageName: node linkType: hard -"css-what@npm:^6.0.1, css-what@npm:^6.1.0": +"css-what@npm:^6.0.1": version: 6.1.0 resolution: "css-what@npm:6.1.0" checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe @@ -13761,6 +16430,17 @@ __metadata: languageName: node linkType: hard +"css@npm:^3.0.0": + version: 3.0.0 + resolution: "css@npm:3.0.0" + dependencies: + inherits: ^2.0.4 + source-map: ^0.6.1 + source-map-resolve: ^0.6.0 + checksum: 4273ac816ddf99b99acb9c1d1a27d86d266a533cc01118369d941d8e8a78277a83cad3315e267a398c509d930fbb86504e193ea1ebc620a4a4212e06fe76e8be + languageName: node + linkType: hard + "cssdb@npm:^4.4.0": version: 4.4.0 resolution: "cssdb@npm:4.4.0" @@ -13786,9 +16466,9 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^4.0.8": - version: 4.0.8 - resolution: "cssnano-preset-default@npm:4.0.8" +"cssnano-preset-default@npm:^4.0.7": + version: 4.0.7 + resolution: "cssnano-preset-default@npm:4.0.7" dependencies: css-declaration-sorter: ^4.0.1 cssnano-util-raw-cache: ^4.0.1 @@ -13818,9 +16498,9 @@ __metadata: postcss-ordered-values: ^4.1.2 postcss-reduce-initial: ^4.0.3 postcss-reduce-transforms: ^4.0.2 - postcss-svgo: ^4.0.3 + postcss-svgo: ^4.0.2 postcss-unique-selectors: ^4.0.1 - checksum: eb32c9fdd8bd4683e33d62284b6a9c4eb705b745235f4bb51a5571e1eb6738f636958fc9a6218fb51de43e0e2f74386a705b4c7ff2d1dcc611647953ba6ce159 + checksum: ebc382757b9819fc730f77ffb6bc9c37f7e758cedfb33010b3f4f5d4789a6ab1407185c5f69f161223dc9b5c96e07c024b32f942e30ad164b2c2a6e4411c227f languageName: node linkType: hard @@ -13855,23 +16535,23 @@ __metadata: linkType: hard "cssnano@npm:^4.1.10": - version: 4.1.11 - resolution: "cssnano@npm:4.1.11" + version: 4.1.10 + resolution: "cssnano@npm:4.1.10" dependencies: cosmiconfig: ^5.0.0 - cssnano-preset-default: ^4.0.8 + cssnano-preset-default: ^4.0.7 is-resolvable: ^1.0.0 postcss: ^7.0.0 - checksum: 2453fbe9f9f9e2ffe87dc5c718578f1b801fc7b82eaad12f5564c84bb0faf1774ea52e01874ecd29d1782aa7d0d84f0dbc95001eed9866ebd9bc523638999c9b + checksum: 698179cb73cfbd04c16f9b54e54e403d3c4c557fae4fe53ff70f08011e0c6c2540333dbbd539670167f75dd27eed344ea8ec0a453513fd283d26551823d75d8b languageName: node linkType: hard "csso@npm:^4.0.2": - version: 4.2.0 - resolution: "csso@npm:4.2.0" + version: 4.0.2 + resolution: "csso@npm:4.0.2" dependencies: - css-tree: ^1.1.2 - checksum: 380ba9663da3bcea58dee358a0d8c4468bb6539be3c439dc266ac41c047217f52fd698fb7e4b6b6ccdfb8cf53ef4ceed8cc8ceccb8dfca2aa628319826b5b998 + css-tree: 1.0.0-alpha.37 + checksum: 69e6a2ce5abd2295b3eae5377092aae71eab146aec8dac1e5e4d23c4d3d2b0f4083e94341cefc4a69aef7db78f7ea6030f1356c065191854b86bd3ba170d552e languageName: node linkType: hard @@ -13898,17 +16578,24 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^2.5.2": - version: 2.6.21 - resolution: "csstype@npm:2.6.21" - checksum: 2ce8bc832375146eccdf6115a1f8565a27015b74cce197c35103b4494955e9516b246140425ad24103864076aa3e1257ac9bab25a06c8d931dd87a6428c9dccf +"csstype@npm:^2.2.0, csstype@npm:^2.5.2, csstype@npm:^2.6.7": + version: 2.6.8 + resolution: "csstype@npm:2.6.8" + checksum: 13758c99bf860d824ee787f718be479bfa98adf600d260349954620f9567bbb9c4bbd889ff620535187ff6ed0eaf37b55135734d547f971fc0ba9a399b37c3a1 + languageName: node + linkType: hard + +"csstype@npm:^2.5.7": + version: 2.6.11 + resolution: "csstype@npm:2.6.11" + checksum: c361d952275a82404db2d3eb5beeaa477b0ea74b30631398bea08bbc608c453487156b7bcd71b1e2ff769172e734c4afc95bfa9d4bac6c1620456d7c0d2d70a2 languageName: node linkType: hard "csstype@npm:^3.0.2": - version: 3.1.2 - resolution: "csstype@npm:3.1.2" - checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 + version: 3.0.8 + resolution: "csstype@npm:3.0.8" + checksum: 5939a003858a31a32cbc52a8f45496aa0c2bcb4629b21c5bc14a7ddcac1a3d4adfd655f56843dc14940f60563378e9444af2c9c373b3f212601b9eeb6740b8db languageName: node linkType: hard @@ -13941,15 +16628,15 @@ __metadata: linkType: hard "cyclist@npm:^1.0.1": - version: 1.0.2 - resolution: "cyclist@npm:1.0.2" - checksum: d7c0336565b9b72ee72347831cbd05fadcc59cc9ab89dcf38293b1a64c2c5fb777c9ce44967390dabe8235f9898f5cb222cd6672f4920b757da8861310082716 + version: 1.0.1 + resolution: "cyclist@npm:1.0.1" + checksum: 3cc2fdeb358599ca0ea96f5ecf2fc530ccab7ed1f8aa1a894aebfacd2009281bd7380cb9b30db02a18cdd00b3ed1d7ce81a3b11fe56e33a6a0fe4424dc592fbe languageName: node linkType: hard "cypress-dotenv@npm:^1.2.2": - version: 1.2.3 - resolution: "cypress-dotenv@npm:1.2.3" + version: 1.2.2 + resolution: "cypress-dotenv@npm:1.2.2" dependencies: camelcase: ^5.3.1 dotenv-parse-variables: ^0.2.3 @@ -13957,7 +16644,7 @@ __metadata: peerDependencies: cypress: ">= 3.x" dotenv: 8.x - checksum: d66451118d5cb6ef747ef29ec3dbbed9c8d023b14230c5462aa36e04805033d42189fed2e6fb1e2a3fa5ea3aaf7d6edf3bdaf3e97789b741ad8deb05e5bc1ca6 + checksum: 5f651aeab05d7cf81407ee1cdb3936fe9960fe98ede05d1bb0c1bc223760e0201572beba755dcf7463013fb7f956da6990586666de37aec1b82b4941116461d5 languageName: node linkType: hard @@ -13971,8 +16658,8 @@ __metadata: linkType: hard "cypress@npm:^6.6.0": - version: 6.9.1 - resolution: "cypress@npm:6.9.1" + version: 6.6.0 + resolution: "cypress@npm:6.6.0" dependencies: "@cypress/listr-verbose-renderer": ^0.4.1 "@cypress/request": ^2.88.5 @@ -14016,7 +16703,7 @@ __metadata: yauzl: ^2.10.0 bin: cypress: bin/cypress - checksum: 6006cd67f037bb9f53fd7cd45de5961324d5b378e5cc92db02fc6eef8fa153d0681be0e353faf7c8a856c85eeb52f2bf2d0664fde0b7efe18f05b816ce64090b + checksum: 85e8c3429ce23816c2b615c1370c4c534143e03bd9e2ad12421f1934768caba5ac2b57e35087eefb178f6e40d84eff0246df7b52d35cb98a3b7c67c46faede73 languageName: node linkType: hard @@ -14113,10 +16800,10 @@ __metadata: languageName: node linkType: hard -"damerau-levenshtein@npm:^1.0.8": - version: 1.0.8 - resolution: "damerau-levenshtein@npm:1.0.8" - checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de +"damerau-levenshtein@npm:^1.0.6": + version: 1.0.6 + resolution: "damerau-levenshtein@npm:1.0.6" + checksum: 4746e69c33e83038cac1f26100be6eb6a1cc1e52bdbf6d1c14a91aa0323cac35aea7e4f2bedf53e39db80c08853c88ec64b0e8b1622f05c80281636d4da7d139 languageName: node linkType: hard @@ -14147,40 +16834,66 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^2.0.1, date-fns@npm:^2.12.0, date-fns@npm:^2.16.1, date-fns@npm:^2.29.2, date-fns@npm:^2.29.3": - version: 2.30.0 - resolution: "date-fns@npm:2.30.0" - dependencies: - "@babel/runtime": ^7.21.0 - checksum: f7be01523282e9bb06c0cd2693d34f245247a29098527d4420628966a2d9aad154bd0e90a6b1cf66d37adcb769cd108cf8a7bd49d76db0fb119af5cdd13644f4 +"date-fns@npm:^2.0.1, date-fns@npm:^2.12.0": + version: 2.14.0 + resolution: "date-fns@npm:2.14.0" + checksum: a4cf0866525f9a6825206b6e8805794f66c6eb49bc77d28e64edc29a2bde725024f10822b90f3fd5302b1621fa84686afe46e499df0315127af8aa85bca4356f languageName: node linkType: hard -"dayjs@npm:^1.8.15, dayjs@npm:^1.9.3": - version: 1.11.7 - resolution: "dayjs@npm:1.11.7" - checksum: 5003a7c1dd9ed51385beb658231c3548700b82d3548c0cfbe549d85f2d08e90e972510282b7506941452c58d32136d6362f009c77ca55381a09c704e9f177ebb +"date-fns@npm:^2.16.1": + version: 2.16.1 + resolution: "date-fns@npm:2.16.1" + checksum: f19c2b3b9bd62fdbc55b160c87b4656b3a260d79ee7a32a9cbc19107c3d61d71b569c0957351f9a07fc84c35283f74b0af5276620d4a37e36eef1898fa6c25b2 + languageName: node + linkType: hard + +"date-fns@npm:^2.29.2": + version: 2.29.2 + resolution: "date-fns@npm:2.29.2" + checksum: 08bebcceb0a5dbadae4c55e6592b9d5c07dbd7833433c7e9a1d4a424300db32589b8b48e5979b32863c9b00a48d9bab6663e580c2a4f9f203d46cbf9113b5664 + languageName: node + linkType: hard + +"date-fns@npm:^2.29.3": + version: 2.29.3 + resolution: "date-fns@npm:2.29.3" + checksum: e01cf5b62af04e05dfff921bb9c9933310ed0e1ae9a81eb8653452e64dc841acf7f6e01e1a5ae5644d0337e9a7f936175fd2cb6819dc122fdd9c5e86c56be484 + languageName: node + linkType: hard + +"dayjs@npm:^1.8.15": + version: 1.9.6 + resolution: "dayjs@npm:1.9.6" + checksum: 240d188db33f642ff971e7f77d290fcb53cbea0de2e8180189e731bb73946165465daa33f1b33f053e350bba88afb5622afe55cdf55e3c72e2e5358f119579c9 + languageName: node + linkType: hard + +"dayjs@npm:^1.9.3": + version: 1.10.4 + resolution: "dayjs@npm:1.10.4" + checksum: d248d6aa1e04f8577a94978e5194c1023347bc08b7c2766d4a4d50b0b69382d3f4fd912b9fcb64ffad4ee2947d53cd8e5d707f49b14817eb7810959d8d95c938 languageName: node linkType: hard "db-migrate-base@npm:^2.3.0": - version: 2.3.1 - resolution: "db-migrate-base@npm:2.3.1" + version: 2.3.0 + resolution: "db-migrate-base@npm:2.3.0" dependencies: bluebird: ^3.1.1 - checksum: 50d22e31211f5079adadc62c78a09299efa7318df8ff7985afb7cb82325332927fa690f0a9d40cb7f1959305d047cc39741dc0d711a5f3d60a161bc095313e2a + checksum: 0076955ed60e1c0f09b3f59986ff4b6f79ac20afd41edad00af42cf57e5f8e0cdebc0995b4ef96f4324bdc606f3b8b361b5c87f11aba99f2edf7ebf6dce239fc languageName: node linkType: hard "db-migrate-pg@npm:^1.2.2": - version: 1.3.0 - resolution: "db-migrate-pg@npm:1.3.0" + version: 1.2.2 + resolution: "db-migrate-pg@npm:1.2.2" dependencies: bluebird: ^3.1.1 db-migrate-base: ^2.3.0 pg: ^8.0.3 semver: ^5.0.3 - checksum: 0757d438d40379961027f5de404d36b03e615371665478d47c6310a93ded9b96a382c076af0ed0f3efc3fd8dee916b9f60061c9f9a04bbc3700375a941ad4b91 + checksum: d44e1f7568fd3da1df6e7520f9511018490ad345be689b726cb3982ffb552ee31e71631ef0d69527e643844f49578a8acf2644409751fe669ac4cc20aaa56b12 languageName: node linkType: hard @@ -14192,8 +16905,8 @@ __metadata: linkType: hard "db-migrate@npm:^0.11.5": - version: 0.11.13 - resolution: "db-migrate@npm:0.11.13" + version: 0.11.6 + resolution: "db-migrate@npm:0.11.6" dependencies: balanced-match: ^1.0.0 bluebird: ^3.1.1 @@ -14203,16 +16916,17 @@ __metadata: final-fs: ^1.6.0 inflection: ^1.10.0 mkdirp: ~0.5.0 + optimist: ~0.6.1 parse-database-url: ~0.3.0 + pkginfo: ^0.4.0 prompt: ^1.0.0 rc: ^1.2.8 resolve: ^1.1.6 semver: ^5.3.0 tunnel-ssh: ^4.0.0 - yargs: ^15.3.1 bin: - db-migrate: bin/db-migrate - checksum: 49b3e2ebe5ba96c2a8b5fc088b557e8b4c35bc5fea5f3a289700b5914aa051a63d77c3796a4b2c24c06d95fa419a60f5d627a5223ea2c1bab4c844eef2dbb622 + db-migrate: ./bin/db-migrate + checksum: 4435b388feeeb51cfe4207a038418ed09a6772d08bd0ebf03083545435f5130089bdbdff3fc201e0befa24ac045f61e01c42079aab2e4af08830da2860af15b0 languageName: node linkType: hard @@ -14234,19 +16948,19 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.0, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" +"debug@npm:4, debug@npm:4.3.2, debug@npm:^4.3.1": + version: 4.3.2 + resolution: "debug@npm:4.3.2" dependencies: ms: 2.1.2 peerDependenciesMeta: supports-color: optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + checksum: 820ea160e267e23c953c9ed87e7ad93494d8cda2f7349af5e7e3bb236d23707ee3022f477d5a7d2ee86ef2bf7d60aa9ab22d1f58080d7deb9dccd073585e1e43 languageName: node linkType: hard -"debug@npm:4.1.1": +"debug@npm:4.1.1, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1": version: 4.1.1 resolution: "debug@npm:4.1.1" dependencies: @@ -14255,31 +16969,28 @@ __metadata: languageName: node linkType: hard -"debug@npm:4.3.1": - version: 4.3.1 - resolution: "debug@npm:4.3.1" +"debug@npm:4.3.4, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" dependencies: ms: 2.1.2 peerDependenciesMeta: supports-color: optional: true - checksum: 2c3352e37d5c46b0d203317cd45ea0e26b2c99f2d9dfec8b128e6ceba90dfb65425f5331bf3020fe9929d7da8c16758e737f4f3bfc0fce6b8b3d503bae03298b + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 languageName: node linkType: hard -"debug@npm:4.3.2": - version: 4.3.2 - resolution: "debug@npm:4.3.2" +"debug@npm:^3.0.0, debug@npm:^3.1.0, debug@npm:^3.1.1, debug@npm:^3.2.6": + version: 3.2.6 + resolution: "debug@npm:3.2.6" dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 820ea160e267e23c953c9ed87e7ad93494d8cda2f7349af5e7e3bb236d23707ee3022f477d5a7d2ee86ef2bf7d60aa9ab22d1f58080d7deb9dccd073585e1e43 + ms: ^2.1.1 + checksum: 07bc8b3a13ef3cfa6c06baf7871dfb174c291e5f85dbf566f086620c16b9c1a0e93bb8f1935ebbd07a683249e7e30286f2966e2ef461e8fd17b1b60732062d6b languageName: node linkType: hard -"debug@npm:^3.0.0, debug@npm:^3.1.0, debug@npm:^3.2.6, debug@npm:^3.2.7": +"debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -14288,13 +16999,25 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.0": + version: 4.3.1 + resolution: "debug@npm:4.3.1" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 2c3352e37d5c46b0d203317cd45ea0e26b2c99f2d9dfec8b128e6ceba90dfb65425f5331bf3020fe9929d7da8c16758e737f4f3bfc0fce6b8b3d503bae03298b + languageName: node + linkType: hard + "decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" + version: 1.1.0 + resolution: "decamelize-keys@npm:1.1.0" dependencies: decamelize: ^1.1.0 map-obj: ^1.0.0 - checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + checksum: 8bc5d32e035a072f5dffc1f1f3d26ca7ab1fb44a9cade34c97ab6cd1e62c81a87e718101e96de07d78cecda20a3fdb955df958e46671ccad01bb8dcf0de2e298 languageName: node linkType: hard @@ -14305,31 +17028,24 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^4.0.0": - version: 4.0.0 - resolution: "decamelize@npm:4.0.0" - checksum: b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 - languageName: node - linkType: hard - "decimal.js-light@npm:^2.4.1": - version: 2.5.1 - resolution: "decimal.js-light@npm:2.5.1" - checksum: f5a2c7eac1c4541c8ab8a5c8abea64fc1761cefc7794bd5f8afd57a8a78d1b51785e0c4e4f85f4895a043eaa90ddca1edc3981d1263eb6ddce60f32bf5fe66c9 + version: 2.5.0 + resolution: "decimal.js-light@npm:2.5.0" + checksum: 89d4d301f72728b10ac5def610b9ccb072cd5fa1bf80c607236bbdd28a9ec9f806faad3159c5a0a82a80a81d84e39ae470f90b6bacecae2617525c8e58f7e201 languageName: node linkType: hard "decimal.js@npm:^10.2.1, decimal.js@npm:^10.3.1": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae + version: 10.3.1 + resolution: "decimal.js@npm:10.3.1" + checksum: 0351ac9f05fe050f23227aa6a4573bee2d58fa7378fcf28d969a8c789525032effb488a90320fd3fe86a66e17b4bc507d811b15eada5b7f0e7ec5d2af4c24a59 languageName: node linkType: hard "decode-uri-component@npm:^0.2.0": - version: 0.2.2 - resolution: "decode-uri-component@npm:0.2.2" - checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 + version: 0.2.0 + resolution: "decode-uri-component@npm:0.2.0" + checksum: f3749344ab9305ffcfe4bfe300e2dbb61fc6359e2b736812100a3b1b6db0a5668cba31a05e4b45d4d63dbf1a18dfa354cd3ca5bb3ededddabb8cd293f4404f94 languageName: node linkType: hard @@ -14349,22 +17065,41 @@ __metadata: languageName: node linkType: hard -"deep-eql@npm:^4.1.2": - version: 4.1.3 - resolution: "deep-eql@npm:4.1.3" +"deep-assign@npm:^3.0.0": + version: 3.0.0 + resolution: "deep-assign@npm:3.0.0" + dependencies: + is-obj: ^1.0.0 + checksum: 9041ccc72ae1980f014d4b745d6135d8f0e71d60ac433397550789c27e6b4d14bc0de2af69777e09f97e1d0da3007a8d78de36f7bf9df931c9968b68fc9546ab + languageName: node + linkType: hard + +"deep-eql@npm:^3.0.1": + version: 3.0.1 + resolution: "deep-eql@npm:3.0.1" dependencies: type-detect: ^4.0.0 - checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f + checksum: 4f4c9fb79eb994fb6e81d4aa8b063adc40c00f831588aa65e20857d5d52f15fb23034a6576ecf886f7ff6222d5ae42e71e9b7d57113e0715b1df7ea1e812b125 + languageName: node + linkType: hard + +"deep-equal-in-any-order@npm:^1.0.21": + version: 1.0.21 + resolution: "deep-equal-in-any-order@npm:1.0.21" + dependencies: + lodash: ^4.17.15 + sort-any: ^1.1.19 + checksum: a65143bf228749b709ab3312da641aad994f77cc43253421fce6695e6ffd062abef0b8fab198084603e29506652a8238954bc12c4c42cf756c26aeb8ad1037cc languageName: node linkType: hard -"deep-equal-in-any-order@npm:^1.0.21, deep-equal-in-any-order@npm:^1.0.27": - version: 1.1.20 - resolution: "deep-equal-in-any-order@npm:1.1.20" +"deep-equal-in-any-order@npm:^1.0.27": + version: 1.0.27 + resolution: "deep-equal-in-any-order@npm:1.0.27" dependencies: lodash.mapvalues: ^4.6.0 - sort-any: ^2.0.0 - checksum: 3fd4a571269e86f8958e797e4994df9f8aaa7c8cc438204a15b9c170e55b53f4b674e4609d8eaccb0b444a55c1932fd74026ef072f4a5412fd879599000e499f + sort-any: ^1.1.21 + checksum: 1228801904e9feffa8f8cda4134e24ccdb6c5959a738c3967b0649482b03abd8cb7fddd0eebbdab39813f901a8c16967e5472c1a913a75bec623b033d6fd7a74 languageName: node linkType: hard @@ -14408,6 +17143,13 @@ __metadata: languageName: node linkType: hard +"deep-equal@npm:~0.2.1": + version: 0.2.2 + resolution: "deep-equal@npm:0.2.2" + checksum: 655ac749836c2f42b69b495587840bbe1242b5adb1ddc471c60932ed4fc5d180b793bc2f1ee812229c63ec4cf8b9702881565fe8d24f6e9384e193c1057bf938 + languageName: node + linkType: hard + "deep-extend@npm:^0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" @@ -14416,9 +17158,16 @@ __metadata: linkType: hard "deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + version: 0.1.3 + resolution: "deep-is@npm:0.1.3" + checksum: c15b04c3848a89880c94e25b077c19b47d9a30dd99048e70e5f95d943e7b246bee1da0c1376b56b01bc045be2cae7d9b1c856e68e47e9805634327de7c6cb6d5 + languageName: node + linkType: hard + +"deep-object-diff@npm:^1.1.0": + version: 1.1.0 + resolution: "deep-object-diff@npm:1.1.0" + checksum: 4e7c1b7cd214312f4b94de62be765899f887c9e95cf6320b1d4df6bb7b861db0dff6b180fa1947a0db2eb56c902d64c20e285d49b316da2bfafed1a44ed3c232 languageName: node linkType: hard @@ -14437,9 +17186,9 @@ __metadata: linkType: hard "deepmerge@npm:^4.2.2": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + version: 4.2.2 + resolution: "deepmerge@npm:4.2.2" + checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b languageName: node linkType: hard @@ -14453,19 +17202,6 @@ __metadata: languageName: node linkType: hard -"default-browser-id@npm:^1.0.4": - version: 1.0.4 - resolution: "default-browser-id@npm:1.0.4" - dependencies: - bplist-parser: ^0.1.0 - meow: ^3.1.0 - untildify: ^2.0.0 - bin: - default-browser-id: cli.js - checksum: c6576428ebdd304d209e09c40803c974de3236232fdfa564d82bd1e985246a0d0f0b344f2b207fcbf663b925c20d30ab4d77fbe2755d2be3a6073f12620b9056 - languageName: node - linkType: hard - "default-gateway@npm:^4.2.0": version: 4.2.0 resolution: "default-gateway@npm:4.2.0" @@ -14477,20 +17213,27 @@ __metadata: linkType: hard "default-require-extensions@npm:^3.0.0": - version: 3.0.1 - resolution: "default-require-extensions@npm:3.0.1" + version: 3.0.0 + resolution: "default-require-extensions@npm:3.0.0" dependencies: strip-bom: ^4.0.0 - checksum: 45882fc971dd157faf6716ced04c15cf252c0a2d6f5c5844b66ca49f46ed03396a26cd940771aa569927aee22923a961bab789e74b25aabc94d90742c9dd1217 + checksum: 0b5bdb6786ebb0ff6ef55386f37c8d221963fbbd3009588fe71032c85ca16da05eff2ad01bfe9bfc8bac5ce95a18f66b38c50d454482e3e9d2de1142424a3e7c languageName: node linkType: hard "defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" + version: 1.0.3 + resolution: "defaults@npm:1.0.3" dependencies: clone: ^1.0.2 - checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + checksum: 96e2112da6553d376afd5265ea7cbdb2a3b45535965d71ab8bb1da10c8126d168fdd5268799625324b368356d21ba2a7b3d4ec50961f11a47b7feb9de3d4413e + languageName: node + linkType: hard + +"defer-to-connect@npm:^1.0.1": + version: 1.1.3 + resolution: "defer-to-connect@npm:1.1.3" + checksum: 9491b301dcfa04956f989481ba7a43c2231044206269eb4ab64a52d6639ee15b1252262a789eb4239fb46ab63e44d4e408641bae8e0793d640aee55398cb3930 languageName: node linkType: hard @@ -14501,7 +17244,16 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": +"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3": + version: 1.1.3 + resolution: "define-properties@npm:1.1.3" + dependencies: + object-keys: ^1.0.12 + checksum: da80dba55d0cd76a5a7ab71ef6ea0ebcb7b941f803793e4e0257b384cb772038faa0c31659d244e82c4342edef841c1a1212580006a05a5068ee48223d787317 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": version: 1.2.0 resolution: "define-properties@npm:1.2.0" dependencies: @@ -14613,14 +17365,14 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": +"depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a languageName: node linkType: hard -"depd@npm:~1.1.2": +"depd@npm:^1.1.2, depd@npm:~1.1.2": version: 1.1.2 resolution: "depd@npm:1.1.2" checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 @@ -14666,6 +17418,13 @@ __metadata: languageName: node linkType: hard +"destroy@npm:~1.0.4": + version: 1.0.4 + resolution: "destroy@npm:1.0.4" + checksum: da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03 + languageName: node + linkType: hard + "detab@npm:2.0.4": version: 2.0.4 resolution: "detab@npm:2.0.4" @@ -14698,7 +17457,7 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^1.0.2": +"detect-libc@npm:^1.0.2, detect-libc@npm:^1.0.3": version: 1.0.3 resolution: "detect-libc@npm:1.0.3" bin: @@ -14714,7 +17473,14 @@ __metadata: languageName: node linkType: hard -"detect-node@npm:^2.0.4, detect-node@npm:^2.1.0": +"detect-node@npm:^2.0.4": + version: 2.0.4 + resolution: "detect-node@npm:2.0.4" + checksum: c06ae40fefbad8cb8cbb6ca819c93568b2a809e747bfc9c71f3524b027f5e988163b0ac0517fd65288b375360b30bc4822172eb05d211f99003d73cf8ec22911 + languageName: node + linkType: hard + +"detect-node@npm:^2.1.0": version: 2.1.0 resolution: "detect-node@npm:2.1.0" checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e @@ -14757,22 +17523,22 @@ __metadata: linkType: hard "detect-port@npm:^1.3.0": - version: 1.5.1 - resolution: "detect-port@npm:1.5.1" + version: 1.3.0 + resolution: "detect-port@npm:1.3.0" dependencies: address: ^1.0.1 - debug: 4 + debug: ^2.6.0 bin: - detect: bin/detect-port.js - detect-port: bin/detect-port.js - checksum: b48da9340481742547263d5d985e65d078592557863402ecf538511735e83575867e94f91fe74405ea19b61351feb99efccae7e55de9a151d5654e3417cea05b + detect: ./bin/detect-port + detect-port: ./bin/detect-port + checksum: 93c40febe714f56711d1fedc2b7a9cc4cbaa0fcddec0509876c46b9dd6099ed6bfd6662a4f35e5fa0301660f48ed516829253ab0fc90b9e79b823dd77786b379 languageName: node linkType: hard -"devtools-protocol@npm:0.0.1019158": - version: 0.0.1019158 - resolution: "devtools-protocol@npm:0.0.1019158" - checksum: 3b40771d231597dea5d502e708ac1ea1225214d4e007e12f7f82fb1966b76d9980665481f8495df444e3632d86b0361e2625502b5ef918884a4ed7fe57518723 +"devtools-protocol@npm:0.0.1011705": + version: 0.0.1011705 + resolution: "devtools-protocol@npm:0.0.1011705" + checksum: 2e97d2eda45bbdfd549b3e2fdb441b8803387cacebdb7eb186bd06a24beb65cda116ea0163b6895da2edb7ac85ce8602bb4e961c99849ff3a43eab24fb70b300 languageName: node linkType: hard @@ -14800,6 +17566,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^25.2.6": + version: 25.2.6 + resolution: "diff-sequences@npm:25.2.6" + checksum: 082c1eb691cc8bffdeca10e1df561fe85c3786420c135d05d5642fdada7dafbc3f77372a67cc3aff6313c272d76d646df768554873d897cf1d15a63dd232e7aa + languageName: node + linkType: hard + "diff-sequences@npm:^26.6.2": version: 26.6.2 resolution: "diff-sequences@npm:26.6.2" @@ -14807,10 +17580,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^27.5.1": - version: 27.5.1 - resolution: "diff-sequences@npm:27.5.1" - checksum: a00db5554c9da7da225db2d2638d85f8e41124eccbd56cbaefb3b276dcbb1c1c2ad851c32defe2055a54a4806f030656cbf6638105fd6ce97bb87b90b32a33ca +"diff-sequences@npm:^27.0.6": + version: 27.0.6 + resolution: "diff-sequences@npm:27.0.6" + checksum: f35ad024d426cd1026d6c98a1f604c41966a0e89712b05a38812fc11e645ff0e915ec17bc8f4b6910fed6df0b309b255aa6c7c77728be452c6dbbfa30aa2067b languageName: node linkType: hard @@ -14821,10 +17594,10 @@ __metadata: languageName: node linkType: hard -"diff@npm:5.0.0": - version: 5.0.0 - resolution: "diff@npm:5.0.0" - checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 +"diff@npm:4.0.2, diff@npm:^4.0.1, diff@npm:^4.0.2": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d languageName: node linkType: hard @@ -14835,13 +17608,6 @@ __metadata: languageName: node linkType: hard -"diff@npm:^4.0.1, diff@npm:^4.0.2": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - "diffie-hellman@npm:^5.0.0": version: 5.0.3 resolution: "diffie-hellman@npm:5.0.3" @@ -14891,12 +17657,12 @@ __metadata: linkType: hard "dns-packet@npm:^1.1.0, dns-packet@npm:^1.3.1": - version: 1.3.4 - resolution: "dns-packet@npm:1.3.4" + version: 1.3.1 + resolution: "dns-packet@npm:1.3.1" dependencies: ip: ^1.1.0 safe-buffer: ^5.0.1 - checksum: 7dd87f85cb4f9d1a99c03470730e3d9385e67dc94f6c13868c4034424a5378631e492f9f1fbc43d3c42f319fbbfe18b6488bb9527c32d34692c52bf1f5eedf69 + checksum: 6575edeea6e6e719823a1574cd1adcfebdc96f870cb1b367d6168490dc36c9826a97bf57ad009e6fdcd3dc5000cc43de7cb72a2102ba05b83178c8d0300c5a6e languageName: node linkType: hard @@ -14918,6 +17684,16 @@ __metadata: languageName: node linkType: hard +"doctrine@npm:1.5.0": + version: 1.5.0 + resolution: "doctrine@npm:1.5.0" + dependencies: + esutils: ^2.0.2 + isarray: ^1.0.0 + checksum: 7ce8102a05cbb9d942d49db5461d2f3dd1208ebfed929bf1c04770a1ef6ef540b792e63c45eae4c51f8b16075e0af4a73581a06bad31c37ceb0988f2e398509b + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -14936,14 +17712,21 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.1": + version: 0.5.2 + resolution: "dom-accessibility-api@npm:0.5.2" + checksum: d8329cc57f186ade04cb3b93e414d2846b1160055c99ec2978f85aabc15c28a171fc7a26f907465e887f77ae55f5ce216d3e84466f33bc50c07323dff0d88648 + languageName: node + linkType: hard + +"dom-accessibility-api@npm:^0.5.9": version: 0.5.16 resolution: "dom-accessibility-api@npm:0.5.16" checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 languageName: node linkType: hard -"dom-converter@npm:^0.2.0": +"dom-converter@npm:^0.2": version: 0.2.0 resolution: "dom-converter@npm:0.2.0" dependencies: @@ -14962,12 +17745,12 @@ __metadata: linkType: hard "dom-helpers@npm:^5.0.1": - version: 5.2.1 - resolution: "dom-helpers@npm:5.2.1" + version: 5.1.3 + resolution: "dom-helpers@npm:5.1.3" dependencies: - "@babel/runtime": ^7.8.7 - csstype: ^3.0.2 - checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c + "@babel/runtime": ^7.6.3 + csstype: ^2.6.7 + checksum: 7c4406d1e8d02e2ae83901fc8f9c27639b9f21304c3c88de6018532527f3d1c13665c558bf083ce379715334a77d8e2f3f0e626f7ca2a71990033ec901dbfaad languageName: node linkType: hard @@ -14992,14 +17775,13 @@ __metadata: languageName: node linkType: hard -"dom-serializer@npm:^2.0.0": - version: 2.0.0 - resolution: "dom-serializer@npm:2.0.0" +"dom-serializer@npm:~0.1.1": + version: 0.1.1 + resolution: "dom-serializer@npm:0.1.1" dependencies: - domelementtype: ^2.3.0 - domhandler: ^5.0.2 - entities: ^4.2.0 - checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + domelementtype: ^1.3.0 + entities: ^1.1.1 + checksum: 4f6a3eff802273741931cfd3c800fab4e683236eed10628d6605f52538a6bc0ce4770f3ca2ad68a27412c103ae9b6cdaed3c0a8e20d2704192bde497bc875215 languageName: node linkType: hard @@ -15011,9 +17793,9 @@ __metadata: linkType: hard "dom-walk@npm:^0.1.0": - version: 0.1.2 - resolution: "dom-walk@npm:0.1.2" - checksum: 19eb0ce9c6de39d5e231530685248545d9cd2bd97b2cb3486e0bfc0f2a393a9addddfd5557463a932b52fdfcf68ad2a619020cd2c74a5fe46fbecaa8e80872f3 + version: 0.1.1 + resolution: "dom-walk@npm:0.1.1" + checksum: f55db10d0344b87cca1046a2356915a8e9ddee90fc97d3ebb26c4021e593cce47d24cbef18aac721421787c6a60fa14dd079a0b81f8610c9aeeec52177fd2acf languageName: node linkType: hard @@ -15024,14 +17806,21 @@ __metadata: languageName: node linkType: hard -"domelementtype@npm:1": +"domelementtype@npm:1, domelementtype@npm:^1.3.0, domelementtype@npm:^1.3.1": version: 1.3.1 resolution: "domelementtype@npm:1.3.1" checksum: 7893da40218ae2106ec6ffc146b17f203487a52f5228b032ea7aa470e41dfe03e1bd762d0ee0139e792195efda765434b04b43cddcf63207b098f6ae44b36ad6 languageName: node linkType: hard -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": +"domelementtype@npm:^2.0.1": + version: 2.0.1 + resolution: "domelementtype@npm:2.0.1" + checksum: 940c62d1c4bead483a089a9a8802e6ea26ae9f134e2594719d0ecd642efd554b560bf92084012a8538fbe47a2f4b4c4bf34d5f87f8468ec924cb4d626793020c + languageName: node + linkType: hard + +"domelementtype@npm:^2.2.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 @@ -15047,7 +17836,16 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": +"domhandler@npm:^2.3.0": + version: 2.4.2 + resolution: "domhandler@npm:2.4.2" + dependencies: + domelementtype: 1 + checksum: 49bd70c9c784f845cd047e1dfb3611bd10891c05719acfc93f01fc726a419ed09fbe0b69f9064392d556a63fffc5a02010856cedae9368f4817146d95a97011f + languageName: node + linkType: hard + +"domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": version: 4.3.1 resolution: "domhandler@npm:4.3.1" dependencies: @@ -15056,16 +17854,17 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": - version: 5.0.3 - resolution: "domhandler@npm:5.0.3" +"domutils@npm:1.5.1": + version: 1.5.1 + resolution: "domutils@npm:1.5.1" dependencies: - domelementtype: ^2.3.0 - checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + dom-serializer: 0 + domelementtype: 1 + checksum: 800d1f9d1c2e637267dae078ff6e24461e6be1baeb52fa70f2e7e7520816c032a925997cd15d822de53ef9896abb1f35e5c439d301500a9cd6b46a395f6f6ca0 languageName: node linkType: hard -"domutils@npm:^1.7.0": +"domutils@npm:^1.5.1, domutils@npm:^1.7.0": version: 1.7.0 resolution: "domutils@npm:1.7.0" dependencies: @@ -15075,7 +17874,7 @@ __metadata: languageName: node linkType: hard -"domutils@npm:^2.5.2, domutils@npm:^2.8.0": +"domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" dependencies: @@ -15086,14 +17885,13 @@ __metadata: languageName: node linkType: hard -"domutils@npm:^3.0.1": - version: 3.1.0 - resolution: "domutils@npm:3.1.0" +"dot-case@npm:^3.0.3": + version: 3.0.3 + resolution: "dot-case@npm:3.0.3" dependencies: - dom-serializer: ^2.0.0 - domelementtype: ^2.3.0 - domhandler: ^5.0.3 - checksum: e5757456ddd173caa411cfc02c2bb64133c65546d2c4081381a3bafc8a57411a41eed70494551aa58030be9e58574fcc489828bebd673863d39924fb4878f416 + no-case: ^3.0.3 + tslib: ^1.10.0 + checksum: d47f6b6aab0074e80323370802162a1ba52cf98d281330673fb6f8ac2d3933222251e503e4a9342e3bcce8974ac53eb2c61f4c07e3e64fb825e3ca848c278cf3 languageName: node linkType: hard @@ -15107,6 +17905,15 @@ __metadata: languageName: node linkType: hard +"dot-prop@npm:^4.1.1": + version: 4.2.0 + resolution: "dot-prop@npm:4.2.0" + dependencies: + is-obj: ^1.0.0 + checksum: 3806dbed9f38aec6246e7a5ceb17007b416262fd9219803b4a4d178b5dac6eedba3269f640d5b2af5cdc8c0504a95cf64b33199204f02aaeaf26945f3c341a40 + languageName: node + linkType: hard + "dot-prop@npm:^5.2.0": version: 5.3.0 resolution: "dot-prop@npm:5.3.0" @@ -15116,6 +17923,15 @@ __metadata: languageName: node linkType: hard +"dotenv-defaults@npm:^1.0.2": + version: 1.1.1 + resolution: "dotenv-defaults@npm:1.1.1" + dependencies: + dotenv: ^6.2.0 + checksum: 623749be33fc30b686ff910522e4c222a08aa4d0011ff40b4354baee5db796f00eb42e818425667db2ffe9d8d2ae5f597a5e5b066b797f7aab9e06e515088fd6 + languageName: node + linkType: hard + "dotenv-expand@npm:5.1.0, dotenv-expand@npm:^5.1.0": version: 5.1.0 resolution: "dotenv-expand@npm:5.1.0" @@ -15146,14 +17962,32 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:8.2.0": +"dotenv-webpack@npm:^1.8.0": + version: 1.8.0 + resolution: "dotenv-webpack@npm:1.8.0" + dependencies: + dotenv-defaults: ^1.0.2 + peerDependencies: + webpack: ^1 || ^2 || ^3 || ^4 + checksum: 21bfe5dd6a669ad9a64669ed7ada53e0036f7c97f55c43c07dd846bf6ddb963224139a25c667346f1a168b0e59e560ae87eac642edb30947bb2fa4ec0017ecb7 + languageName: node + linkType: hard + +"dotenv@npm:8.2.0, dotenv@npm:^8.0.0, dotenv@npm:^8.2.0": version: 8.2.0 resolution: "dotenv@npm:8.2.0" checksum: ad4c8e0df3e24b4811c8e93377d048a10a9b213dcd9f062483b4a2d3168f08f10ec9c618c23f5639060d230ccdb174c08761479e9baa29610aa978e1ee66df76 languageName: node linkType: hard -"dotenv@npm:^16.0.0, dotenv@npm:^16.0.3": +"dotenv@npm:^16.0.0": + version: 16.1.3 + resolution: "dotenv@npm:16.1.3" + checksum: 8f73bae720161cf365b679de162fe79a05f5b7a21d0d2b8bf9fb0601a2ed30f7e9dc49fa8b752d93206e4b7d427eccea2f383a1622cd5da4a1824f43bf8f780b + languageName: node + linkType: hard + +"dotenv@npm:^16.0.3": version: 16.0.3 resolution: "dotenv@npm:16.0.3" checksum: afcf03f373d7a6d62c7e9afea6328e62851d627a4e73f2e12d0a8deae1cd375892004f3021883f8aec85932cd2834b091f568ced92b4774625b321db83b827f8 @@ -15174,10 +18008,10 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:^8.0.0, dotenv@npm:^8.2.0": - version: 8.6.0 - resolution: "dotenv@npm:8.6.0" - checksum: 38e902c80b0666ab59e9310a3d24ed237029a7ce34d976796349765ac96b8d769f6df19090f1f471b77a25ca391971efde8a1ea63bb83111bd8bec8e5cc9b2cd +"dotenv@npm:^6.2.0": + version: 6.2.0 + resolution: "dotenv@npm:6.2.0" + checksum: d4aa189741ff45553038b0436dfdb79143c29760d3481b4b19d9f1c59fb8cc69190ab83674e07b32b3dd2ae477579619cde9f7586ea82086151dbbac5626c54c languageName: node linkType: hard @@ -15188,6 +18022,21 @@ __metadata: languageName: node linkType: hard +"downshift@npm:^6.0.15": + version: 6.1.7 + resolution: "downshift@npm:6.1.7" + dependencies: + "@babel/runtime": ^7.14.8 + compute-scroll-into-view: ^1.0.17 + prop-types: ^15.7.2 + react-is: ^17.0.2 + tslib: ^2.3.0 + peerDependencies: + react: ">=16.12.0" + checksum: 0904ed8f285d31ee00e471dcddd57e72468bee354b191167bcaebe690ec292647fe4c31f483665094d750e72dd71e5d7db695acef33ab5dba6a39fed0112bab6 + languageName: node + linkType: hard + "dtrace-provider@npm:~0.8": version: 0.8.8 resolution: "dtrace-provider@npm:0.8.8" @@ -15199,16 +18048,16 @@ __metadata: linkType: hard "duplexer3@npm:^0.1.4": - version: 0.1.5 - resolution: "duplexer3@npm:0.1.5" - checksum: e677cb4c48f031ca728601d6a20bf6aed4c629d69ef9643cb89c67583d673c4ec9317cc6427501f38bd8c368d3a18f173987cc02bd99d8cf8fe3d94259a22a20 + version: 0.1.4 + resolution: "duplexer3@npm:0.1.4" + checksum: c2fd6969314607d23439c583699aaa43c4100d66b3e161df55dccd731acc57d5c81a64bb4f250805fbe434ddb1d2623fee2386fb890f5886ca1298690ec53415 languageName: node linkType: hard "duplexer@npm:^0.1.1": - version: 0.1.2 - resolution: "duplexer@npm:0.1.2" - checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + version: 0.1.1 + resolution: "duplexer@npm:0.1.1" + checksum: fc7937c4a43808493cd63dfa59f4deb6cf02beea783cb17f39677b53ccacb9fba48f87731b8944048dd6dfa8f456d0725f86f3fd587ab780532d9a8e2914e8b7 languageName: node linkType: hard @@ -15282,10 +18131,52 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.4.411": - version: 1.4.411 - resolution: "electron-to-chromium@npm:1.4.411" - checksum: f71613a0d07c43e16acbe4b38a1800e017e384e9f159ee2c94d16dd6385e812eb00d5dd3f9c237244c7b55c97a8ef5d90d40b099d07c96c83b2b958bc98fdc58 +"electron-to-chromium@npm:^1.3.322": + version: 1.3.322 + resolution: "electron-to-chromium@npm:1.3.322" + checksum: cb3722af77761d57d70c79c55105a2cbffe0e7784ccc98c151c74c4925cae2a359c06e6b3d43b48c865cad09aed3a4ec7b3f9dd47fe2a350e7d2c781ad5148a4 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.3.338": + version: 1.3.341 + resolution: "electron-to-chromium@npm:1.3.341" + checksum: 6f72883eb70d8bb4d92deda2b9651c8728228510e4ebde3c30912793735cd001264ff1b34acd016f322c3c67c201519520f06a759fe81f1c354b6de936307932 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.3.413": + version: 1.3.428 + resolution: "electron-to-chromium@npm:1.3.428" + checksum: 906541e96a545272a432d367ec6fe3912d4667787e0a1b0d378704a48f16f716d02dca8a7af090fd0e875c12a95d30dfa7ffca237620164ac3d7924894fc4344 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.3.830": + version: 1.3.838 + resolution: "electron-to-chromium@npm:1.3.838" + checksum: b977d8cdbefd694288a96338c55f695c09bc4dbf806d7de6076634f944ba95ac4046a578a474ac1f5fcf3548a7e53167160b5969e606e886e0202f5888791f9f + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.3.854": + version: 1.3.857 + resolution: "electron-to-chromium@npm:1.3.857" + checksum: 59d3dcf7ec7d3c8209647cadb6cc9d2a14b9ef9cb2ae7c9837c9dbe38301838e6629bfa002121d3dc4c00e982327d6337d6d5460902f02f8a80d0d81c63f1728 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.202": + version: 1.4.211 + resolution: "electron-to-chromium@npm:1.4.211" + checksum: 43d983b94f5aa542926c4063bae597591458b59e96ec0ab85a62cc296b9760c447d7d0af369d3c40b44b75cfc9d3a66277495736517c370cf03e181cf3ed39f1 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.411": + version: 1.4.417 + resolution: "electron-to-chromium@npm:1.4.417" + checksum: a57b8ceee5d832e306c414c8f7ced4f0e5540f6c5a9aa70ff03f870d685b2aba9cff2254eeed7b950347428b7eedfe36f3e5dea5fe8f278e1f981f61bb3b8eb5 languageName: node linkType: hard @@ -15296,18 +18187,27 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:^6.5.3": - version: 6.5.4 - resolution: "elliptic@npm:6.5.4" +"element-resize-detector@npm:^1.2.2": + version: 1.2.3 + resolution: "element-resize-detector@npm:1.2.3" dependencies: - bn.js: ^4.11.9 - brorand: ^1.1.0 + batch-processor: 1.0.0 + checksum: b472b4f3971e27b832f65c761c5eb95ffe615f42248063987c39f32bd7e224c2562209c3c456c60ef45b07c8db6ed3c4f96a03cb5a426b931947821fd1434f44 + languageName: node + linkType: hard + +"elliptic@npm:^6.0.0": + version: 6.5.2 + resolution: "elliptic@npm:6.5.2" + dependencies: + bn.js: ^4.4.0 + brorand: ^1.0.1 hash.js: ^1.0.0 - hmac-drbg: ^1.0.1 - inherits: ^2.0.4 - minimalistic-assert: ^1.0.1 - minimalistic-crypto-utils: ^1.0.1 - checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 + hmac-drbg: ^1.0.0 + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.0 + checksum: c4e6247db6f86a7cd0b58cb998122ed1054ab36890d64524abcdafc508025a326392d1de2cf1f2d97fd6c4bbf48a941d69790e7c5f3e976f398f619429ab5fe7 languageName: node linkType: hard @@ -15346,10 +18246,10 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 +"emoji-regex@npm:^9.0.0": + version: 9.0.0 + resolution: "emoji-regex@npm:9.0.0" + checksum: 632f1b824a6d0b9ba70a471e01ff3fe787d809cfea721542b220096ce1e02eac50a4d4147d7fff434ff46d0fb5e62a97875404dbaea471a48f1f9232b75f9434 languageName: node linkType: hard @@ -15367,6 +18267,20 @@ __metadata: languageName: node linkType: hard +"emotion-theming@npm:^10.0.27": + version: 10.0.27 + resolution: "emotion-theming@npm:10.0.27" + dependencies: + "@babel/runtime": ^7.5.5 + "@emotion/weak-memoize": 0.2.5 + hoist-non-react-statics: ^3.3.0 + peerDependencies: + "@emotion/core": ^10.0.27 + react: ">=16.3.0" + checksum: 1fcabf32de92ceb04fa938d962b8498bd045c0b4e1f40e21213e81d0ec4f3830c1a0367f05527bf4502bbc7b73773a2b1767373d70ac79f4366143e537468277 + languageName: node + linkType: hard + "enabled@npm:2.0.x": version: 2.0.0 resolution: "enabled@npm:2.0.0" @@ -15381,7 +18295,16 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.11, encoding@npm:^0.1.13": +"encoding@npm:^0.1.11": + version: 0.1.12 + resolution: "encoding@npm:0.1.12" + dependencies: + iconv-lite: ~0.4.13 + checksum: 96df688a93821e866bea19dd689863b1f9e07ef1c15321dde1fbcb8008ed7c785c48b248c4def01367780d2637c459b8ffa988de9647afe4200b003b1ac369ef + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -15400,67 +18323,61 @@ __metadata: linkType: hard "endent@npm:^2.0.1": - version: 2.1.0 - resolution: "endent@npm:2.1.0" + version: 2.0.1 + resolution: "endent@npm:2.0.1" dependencies: dedent: ^0.7.0 fast-json-parse: ^1.0.3 - objectorarray: ^1.0.5 - checksum: c352831088fce745a39ddbd5f87a17e073ea6556e7e96e9010d945a3f3020f836b9a84657123fa01e897db9216f4b080d950b5ded9bf3a8227f14a34efaaaf7c + objectorarray: ^1.0.4 + checksum: 21a290c8e23d2760d0cda200888964623d3ecba6f7c2fd1fa068477cf2e6168d67c0313d91190e23e3163ab329c8491f5f102802088926abf8afa74e8c652b1a languageName: node linkType: hard -"enhanced-resolve@npm:^4.3.0, enhanced-resolve@npm:^4.5.0": - version: 4.5.0 - resolution: "enhanced-resolve@npm:4.5.0" +"enhanced-resolve@npm:^4.3.0": + version: 4.3.0 + resolution: "enhanced-resolve@npm:4.3.0" dependencies: graceful-fs: ^4.1.2 memory-fs: ^0.5.0 tapable: ^1.0.0 - checksum: 4d87488584c4d67d356ef4ba04978af4b2d4d18190cb859efac8e8475a34d5d6c069df33faa5a0a22920b0586dbf330f6a08d52bb15a8771a9ce4d70a2da74ba + checksum: aaef4c07e7288d67cfd4ed2dad16a5e8a175bb45eaf91f7c9f0d7c1186577f78047452a9d8d5d136473c30c769b7a322c1bf837ccf7f5c6fbde3266d043a633c languageName: node linkType: hard -"enhanced-resolve@npm:^5.14.1": - version: 5.14.1 - resolution: "enhanced-resolve@npm:5.14.1" +"enhanced-resolve@npm:^4.5.0": + version: 4.5.0 + resolution: "enhanced-resolve@npm:4.5.0" dependencies: - graceful-fs: ^4.2.4 - tapable: ^2.2.0 - checksum: ad2a31928b6649eed40d364838449587f731baa63863e83d2629bebaa8be1eabac18b90f89c1784bc805b0818363e99b22547159edd485d7e5ccf18cdc640642 + graceful-fs: ^4.1.2 + memory-fs: ^0.5.0 + tapable: ^1.0.0 + checksum: 4d87488584c4d67d356ef4ba04978af4b2d4d18190cb859efac8e8475a34d5d6c069df33faa5a0a22920b0586dbf330f6a08d52bb15a8771a9ce4d70a2da74ba languageName: node linkType: hard "enquirer@npm:^2.3.5": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" + version: 2.3.5 + resolution: "enquirer@npm:2.3.5" dependencies: - ansi-colors: ^4.1.1 - checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 - languageName: node - linkType: hard - -"entities@npm:^4.2.0, entities@npm:^4.4.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 + ansi-colors: ^3.2.1 + checksum: b7dc212a375fa7fbdc0c86ad6a819f6767d868e8de48b4db96e762b9eab62c59119b6cd1616f2c02e6eb334d0fc0e5b3d179ffafc5d45bdc779d2364687258c3 languageName: node linkType: hard -"entities@npm:~1.1.1": +"entities@npm:^1.1.1, entities@npm:^1.1.2, entities@npm:~1.1.1": version: 1.1.2 resolution: "entities@npm:1.1.2" checksum: d537b02799bdd4784ffd714d000597ed168727bddf4885da887c5a491d735739029a00794f1998abbf35f3f6aeda32ef5c15010dca1817d401903a501b6d3e05 languageName: node linkType: hard +"entities@npm:^2.0.0": + version: 2.0.0 + resolution: "entities@npm:2.0.0" + checksum: 0d7e5323bbd53f93358ab7b75a63c36f5c0ec5929c1a3c30499f9d7e19a334a8ceef683fba6fb5811cfa0b5b1419aa7ad95ebeb597be8f7614e522d15810b715 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -15468,7 +18385,16 @@ __metadata: languageName: node linkType: hard -"envinfo@npm:^7.7.2, envinfo@npm:^7.7.3": +"envinfo@npm:^7.7.2": + version: 7.7.3 + resolution: "envinfo@npm:7.7.3" + bin: + envinfo: dist/cli.js + checksum: d8fb5c308fafaa18bff0e415d1a538df58de09ce168259b4b3fa6d10b3391df300ae6c64679e382c9949e26102fc703e7f675abc8a56958546baa8f509dc3df4 + languageName: node + linkType: hard + +"envinfo@npm:^7.7.3": version: 7.8.1 resolution: "envinfo@npm:7.8.1" bin: @@ -15485,13 +18411,13 @@ __metadata: linkType: hard "errno@npm:^0.1.3, errno@npm:~0.1.7": - version: 0.1.8 - resolution: "errno@npm:0.1.8" + version: 0.1.7 + resolution: "errno@npm:0.1.7" dependencies: prr: ~1.0.1 bin: - errno: cli.js - checksum: 1271f7b9fbb3bcbec76ffde932485d1e3561856d21d847ec613a9722ee924cdd4e523a62dc71a44174d91e898fe21fdc8d5b50823f4b5e0ce8c35c8271e6ef4a + errno: ./cli.js + checksum: a9e414c24aa9d16c74cee74e46e1b4ff5e5b005552b5b50ca242b14fea448720a21fe515b4e4587172744b1dab9ecf919ba5a950f528d7c8ddb4b660f290db79 languageName: node linkType: hard @@ -15505,11 +18431,11 @@ __metadata: linkType: hard "error-stack-parser@npm:^2.0.6": - version: 2.1.4 - resolution: "error-stack-parser@npm:2.1.4" + version: 2.0.6 + resolution: "error-stack-parser@npm:2.0.6" dependencies: - stackframe: ^1.3.4 - checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 + stackframe: ^1.1.1 + checksum: bd8e048fcb1c0c74ab201271fec3b39c097a7c24bdef1718828d053c0584da5d7ad845253b5e4773803ee8e7450b23b0920e60a3b60dd403c1568c843058cb12 languageName: node linkType: hard @@ -15523,45 +18449,106 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2": - version: 1.21.2 - resolution: "es-abstract@npm:1.21.2" +"es-abstract@npm:^1.17.0, es-abstract@npm:^1.17.0-next.1": + version: 1.17.0 + resolution: "es-abstract@npm:1.17.0" + dependencies: + es-to-primitive: ^1.2.1 + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.1 + is-callable: ^1.1.5 + is-regex: ^1.0.5 + object-inspect: ^1.7.0 + object-keys: ^1.1.1 + object.assign: ^4.1.0 + string.prototype.trimleft: ^2.1.1 + string.prototype.trimright: ^2.1.1 + checksum: af0f0a43723801fcea71375b7f1b084ad5c6a66ef1ffc95ad2a05dd4c8f7fc751e2e684a71da933a00d181cb3e7eefa8725e977dd9e18b130b2fe70bea883d82 + languageName: node + linkType: hard + +"es-abstract@npm:^1.17.0-next.0, es-abstract@npm:^1.17.4": + version: 1.17.6 + resolution: "es-abstract@npm:1.17.6" + dependencies: + es-to-primitive: ^1.2.1 + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.1 + is-callable: ^1.2.0 + is-regex: ^1.1.0 + object-inspect: ^1.7.0 + object-keys: ^1.1.1 + object.assign: ^4.1.0 + string.prototype.trimend: ^1.0.1 + string.prototype.trimstart: ^1.0.1 + checksum: 3a361ab6b7ce072d451abea18f2ce53375d88c7302bc0054c4316bdd3f95ce4317a2388eec2a21617485ffef1e127943ec0d496452d7e4707e786a45b682f91a + languageName: node + linkType: hard + +"es-abstract@npm:^1.17.5": + version: 1.17.5 + resolution: "es-abstract@npm:1.17.5" + dependencies: + es-to-primitive: ^1.2.1 + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.1 + is-callable: ^1.1.5 + is-regex: ^1.0.5 + object-inspect: ^1.7.0 + object-keys: ^1.1.1 + object.assign: ^4.1.0 + string.prototype.trimleft: ^2.1.1 + string.prototype.trimright: ^2.1.1 + checksum: afb9a4a24197aedca1cc7b3ab41125ca4dc8593dfccc3cb6a0bd8f1a7809f0e16c7ced331b7d73e4ebd4141c2f419d7570961e8dfab2e15966dd8a2300e6ae00 + languageName: node + linkType: hard + +"es-abstract@npm:^1.18.0-next.0": + version: 1.18.0-next.1 + resolution: "es-abstract@npm:1.18.0-next.1" + dependencies: + es-to-primitive: ^1.2.1 + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.1 + is-callable: ^1.2.2 + is-negative-zero: ^2.0.0 + is-regex: ^1.1.1 + object-inspect: ^1.8.0 + object-keys: ^1.1.1 + object.assign: ^4.1.1 + string.prototype.trimend: ^1.0.1 + string.prototype.trimstart: ^1.0.1 + checksum: 4797f1f6c8db002ad38a2cbb9d1709f9c39946fe3d26f85ae42431bb4c2aac20dcc1f8685a055aa2b7e61e320bb841b83becc340b940de31761944613d76c1a3 + languageName: node + linkType: hard + +"es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.18.0-next.2, es-abstract@npm:^1.18.2": + version: 1.18.6 + resolution: "es-abstract@npm:1.18.6" dependencies: - array-buffer-byte-length: ^1.0.0 - available-typed-arrays: ^1.0.5 call-bind: ^1.0.2 - es-set-tostringtag: ^2.0.1 es-to-primitive: ^1.2.1 - function.prototype.name: ^1.1.5 - get-intrinsic: ^1.2.0 + function-bind: ^1.1.1 + get-intrinsic: ^1.1.1 get-symbol-description: ^1.0.0 - globalthis: ^1.0.3 - gopd: ^1.0.1 has: ^1.0.3 - has-property-descriptors: ^1.0.0 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.5 - is-array-buffer: ^3.0.2 - is-callable: ^1.2.7 - is-negative-zero: ^2.0.2 + has-symbols: ^1.0.2 + internal-slot: ^1.0.3 + is-callable: ^1.2.4 + is-negative-zero: ^2.0.1 is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 - is-typed-array: ^1.1.10 - is-weakref: ^1.0.2 - object-inspect: ^1.12.3 + object-inspect: ^1.11.0 object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.4.3 - safe-regex-test: ^1.0.0 - string.prototype.trim: ^1.2.7 - string.prototype.trimend: ^1.0.6 - string.prototype.trimstart: ^1.0.6 - typed-array-length: ^1.0.4 - unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.9 - checksum: 037f55ee5e1cdf2e5edbab5524095a4f97144d95b94ea29e3611b77d852fd8c8a40e7ae7101fa6a759a9b9b1405f188c3c70928f2d3cd88d543a07fc0d5ad41a + object.assign: ^4.1.2 + string.prototype.trimend: ^1.0.4 + string.prototype.trimstart: ^1.0.4 + unbox-primitive: ^1.0.1 + checksum: 8903ed187a9f66a8b21385401770124b37ded75a9cd99c7ea22e709ca667e7b549f37dc8bf9bf458a6cdb908c95a16fed389e2871bb3a28bfaab46db555cb1f3 languageName: node linkType: hard @@ -15572,7 +18559,22 @@ __metadata: languageName: node linkType: hard -"es-get-iterator@npm:^1.0.2, es-get-iterator@npm:^1.1.3": +"es-get-iterator@npm:^1.0.2": + version: 1.1.0 + resolution: "es-get-iterator@npm:1.1.0" + dependencies: + es-abstract: ^1.17.4 + has-symbols: ^1.0.1 + is-arguments: ^1.0.4 + is-map: ^2.0.1 + is-set: ^2.0.1 + is-string: ^1.0.5 + isarray: ^2.0.5 + checksum: 5c556a4b8c93bfa0c19ed82d40e6798071bc1c32ddfe907b50fcb6809b669dc74a3719b72020f7657c0f4be06731a683753c30c3a0d2c77a7bed2f197d35288b + languageName: node + linkType: hard + +"es-get-iterator@npm:^1.1.3": version: 1.1.3 resolution: "es-get-iterator@npm:1.1.3" dependencies: @@ -15596,33 +18598,6 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^1.2.1": - version: 1.2.1 - resolution: "es-module-lexer@npm:1.2.1" - checksum: c4145b853e1491eaa5d591e4580926d242978c38071ad3d09165c3b6d50314cc0ae3bf6e1dec81a9e53768b9299df2063d2e4a67d7742a5029ddeae6c4fc26f0 - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" - dependencies: - get-intrinsic: ^1.1.3 - has: ^1.0.3 - has-tostringtag: ^1.0.0 - checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.0.0": - version: 1.0.0 - resolution: "es-shim-unscopables@npm:1.0.0" - dependencies: - has: ^1.0.3 - checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 - languageName: node - linkType: hard - "es-to-primitive@npm:^1.2.1": version: 1.2.1 resolution: "es-to-primitive@npm:1.2.1" @@ -15635,20 +18610,20 @@ __metadata: linkType: hard "es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50": - version: 0.10.62 - resolution: "es5-ext@npm:0.10.62" + version: 0.10.53 + resolution: "es5-ext@npm:0.10.53" dependencies: - es6-iterator: ^2.0.3 - es6-symbol: ^3.1.3 - next-tick: ^1.1.0 - checksum: 25f42f6068cfc6e393cf670bc5bba249132c5f5ec2dd0ed6e200e6274aca2fed8e9aec8a31c76031744c78ca283c57f0b41c7e737804c6328c7b8d3fbcba7983 + es6-iterator: ~2.0.3 + es6-symbol: ~3.1.3 + next-tick: ~1.0.0 + checksum: 24ec22369260cf98605cb2f51eae9d7df5dc621bc5d3b311f6f5c3d0fcdb7bafae888270f3083ee6e9af27350a5ea49f1fe2dd6406a9017247ca40f091f529b2 languageName: node linkType: hard "es5-shim@npm:^4.5.13": - version: 4.6.7 - resolution: "es5-shim@npm:4.6.7" - checksum: f2f60cf3d9c682106c51a70d27d41273d2edb3b90fa8795a2765be4a214574b71ddf9147a7972eb82998d94f96ca015d29f5915efd3af0a6c09673abd4299ee8 + version: 4.5.14 + resolution: "es5-shim@npm:4.5.14" + checksum: a8801771a133c78059b945468d928d3c8a63f562ef2da9890e204b7d482522f93c2d412b62cf77846d638a8618828cfb754c7b0e86d71be4143f15b5dfdeba64 languageName: node linkType: hard @@ -15659,7 +18634,7 @@ __metadata: languageName: node linkType: hard -"es6-iterator@npm:2.0.3, es6-iterator@npm:^2.0.3": +"es6-iterator@npm:2.0.3, es6-iterator@npm:~2.0.3": version: 2.0.3 resolution: "es6-iterator@npm:2.0.3" dependencies: @@ -15694,13 +18669,13 @@ __metadata: linkType: hard "es6-shim@npm:^0.35.5": - version: 0.35.8 - resolution: "es6-shim@npm:0.35.8" - checksum: 479826f195995f1bc38f31824ea0da74235235f64df45b0f4dd5f956f5133d1baa9063312dfba1cb03aae79197978da8af1deec9f9d5c9bf598c069492d23cea + version: 0.35.5 + resolution: "es6-shim@npm:0.35.5" + checksum: ebd9dbed0881fa9358c983a5a403386fa2d1beaeb9156bfae9bc82ba02cf441aa7e95f51f562df04f6a493bd82d52796f21bcd708f59ac221d2c0c181087e0b1 languageName: node linkType: hard -"es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": +"es6-symbol@npm:^3.1.1, es6-symbol@npm:~3.1.3": version: 3.1.3 resolution: "es6-symbol@npm:3.1.3" dependencies: @@ -15805,13 +18780,27 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.0.2, escalade@npm:^3.1.1": +"escalade@npm:^3.0.2": + version: 3.1.0 + resolution: "escalade@npm:3.1.0" + checksum: 00a9e4b82ab486d96c1e601f38c2a1bac2a6afd22f7de8278fc4927235c544f6a9652ee6ad0696d64732e5074d97dd2fb77a4ac379e5547d2bdf2e21a27d6d45 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 languageName: node linkType: hard +"escape-goat@npm:^2.0.0": + version: 2.1.1 + resolution: "escape-goat@npm:2.1.1" + checksum: ce05c70c20dd7007b60d2d644b625da5412325fdb57acf671ba06cb2ab3cd6789e2087026921a05b665b0a03fadee2955e7fc0b9a67da15a6551a980b260eba7 + languageName: node + linkType: hard + "escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" @@ -15866,17 +18855,17 @@ __metadata: languageName: node linkType: hard -"eslint-config-airbnb-base@npm:^14.2.0, eslint-config-airbnb-base@npm:^14.2.1": - version: 14.2.1 - resolution: "eslint-config-airbnb-base@npm:14.2.1" +"eslint-config-airbnb-base@npm:^14.2.0": + version: 14.2.0 + resolution: "eslint-config-airbnb-base@npm:14.2.0" dependencies: - confusing-browser-globals: ^1.0.10 - object.assign: ^4.1.2 + confusing-browser-globals: ^1.0.9 + object.assign: ^4.1.0 object.entries: ^1.1.2 peerDependencies: eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 - eslint-plugin-import: ^2.22.1 - checksum: 858bea748a3c8685b52fcf2488e6a0b964022f8387f4ee1e69cb707d4fda2a409f09eb8eea658bcd83fae3519967d10208ba7576dd3d3202b8cf0b9d1a6e21eb + eslint-plugin-import: ^2.21.2 + checksum: c59856fc840e321bcd8c300a65742f9c71dc9e2a10a0d0e810ee3f27575da970ba75c01311c246dca513770ea128ce22984c0271b1bf45f9cea53fe9f13b4a39 languageName: node linkType: hard @@ -15892,19 +18881,19 @@ __metadata: linkType: hard "eslint-config-airbnb@npm:^18.2.0": - version: 18.2.1 - resolution: "eslint-config-airbnb@npm:18.2.1" + version: 18.2.0 + resolution: "eslint-config-airbnb@npm:18.2.0" dependencies: - eslint-config-airbnb-base: ^14.2.1 - object.assign: ^4.1.2 + eslint-config-airbnb-base: ^14.2.0 + object.assign: ^4.1.0 object.entries: ^1.1.2 peerDependencies: eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 - eslint-plugin-import: ^2.22.1 - eslint-plugin-jsx-a11y: ^6.4.1 - eslint-plugin-react: ^7.21.5 + eslint-plugin-import: ^2.21.2 + eslint-plugin-jsx-a11y: ^6.3.0 + eslint-plugin-react: ^7.20.0 eslint-plugin-react-hooks: ^4 || ^3 || ^2.3.0 || ^1.7.0 - checksum: ea11cd0006912f7086fb278e03180da4bc2378cf4e93b1dd970775d8e9b50fd11a64209bdc0ed17654d29abe4ccfa19baa4d1e1e5bd3eb660fcf4798ba2810d2 + checksum: 2979d93609cea6d4b8f9965416125e82d081e2aab0dfcd867a371a0ee482d42d5d6f520243c128b8ab1ce995835d05f4c4bc3a020d26922ce8abab41c65b9129 languageName: node linkType: hard @@ -15922,13 +18911,13 @@ __metadata: linkType: hard "eslint-config-prettier@npm:^8.1.0": - version: 8.8.0 - resolution: "eslint-config-prettier@npm:8.8.0" + version: 8.1.0 + resolution: "eslint-config-prettier@npm:8.1.0" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: 1e94c3882c4d5e41e1dcfa2c368dbccbfe3134f6ac7d40101644d3bfbe3eb2f2ffac757f3145910b5eacf20c0e85e02b91293d3126d770cbf3dc390b3564681c + checksum: 277b42e4d5b4a65dc8224a26b082373b846f7b2148dc342fd69f9f00ea36f58affacf7bbade3f2512295f371620b3d57380e27de32e492632b516c310ce51c04 languageName: node linkType: hard @@ -15959,65 +18948,82 @@ __metadata: linkType: hard "eslint-import-resolver-babel-module@npm:^5.3.1": - version: 5.3.2 - resolution: "eslint-import-resolver-babel-module@npm:5.3.2" + version: 5.3.1 + resolution: "eslint-import-resolver-babel-module@npm:5.3.1" dependencies: pkg-up: ^3.1.0 resolve: ^1.20.0 peerDependencies: "@babel/core": ^7.0.0-0 - babel-plugin-module-resolver: ^3.0.0 || ^4.0.0 || ^5.0.0 - checksum: 6c9b941860cae665d514f0b42743e869394f19031247ca1a5433f1723952196002ac3dc949e83cacc64a0d49f56bcef01fa36fa12f8adce28b242f7022744d04 + babel-plugin-module-resolver: ^3.0.0 || ^4.0.0 + checksum: cd26740e9b9b7bb12667aabcc5c3e0e39a401b32b2890dfc4fd2444a00910f7e23fdb65cbb6084b026ade43899f824a2c762ce6078f5eb977762b8dda31aca1a languageName: node linkType: hard -"eslint-import-resolver-node@npm:^0.3.7": - version: 0.3.7 - resolution: "eslint-import-resolver-node@npm:0.3.7" +"eslint-import-resolver-node@npm:^0.3.3": + version: 0.3.4 + resolution: "eslint-import-resolver-node@npm:0.3.4" + dependencies: + debug: ^2.6.9 + resolve: ^1.13.1 + checksum: a0db55ec26c5bb385c8681af6b8d6dee16768d5f27dff72c3113407d0f028f28e56dcb1cc3a4689c79396a5f6a9c24bd0cac9a2c9c588c7d7357d24a42bec876 + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.6": + version: 0.3.6 + resolution: "eslint-import-resolver-node@npm:0.3.6" dependencies: debug: ^3.2.7 - is-core-module: ^2.11.0 - resolve: ^1.22.1 - checksum: 3379aacf1d2c6952c1b9666c6fa5982c3023df695430b0d391c0029f6403a7775414873d90f397e98ba6245372b6c8960e16e74d9e4a3b0c0a4582f3bdbe3d6e + resolve: ^1.20.0 + checksum: 6266733af1e112970e855a5bcc2d2058fb5ae16ad2a6d400705a86b29552b36131ffc5581b744c23d550de844206fb55e9193691619ee4dbf225c4bde526b1c8 languageName: node linkType: hard "eslint-import-resolver-typescript@npm:^2.4.0": - version: 2.7.1 - resolution: "eslint-import-resolver-typescript@npm:2.7.1" + version: 2.4.0 + resolution: "eslint-import-resolver-typescript@npm:2.4.0" dependencies: - debug: ^4.3.4 - glob: ^7.2.0 - is-glob: ^4.0.3 - resolve: ^1.22.0 - tsconfig-paths: ^3.14.1 + debug: ^4.1.1 + glob: ^7.1.6 + is-glob: ^4.0.1 + resolve: ^1.17.0 + tsconfig-paths: ^3.9.0 peerDependencies: eslint: "*" eslint-plugin-import: "*" - checksum: 1d81b657b1f73bf95b8f0b745c0305574b91630c1db340318f3ca8918e206fce20a933b95e7c419338cc4452cb80bb2b2d92acaf01b6aa315c78a332d832545c + checksum: 2db0de33531f563bbbeecbdb080e3ff7ac0dbdd01f82ed690ccc9b29f746e431bf639322b1f1384f5c67055104c722cf70d9bf837d3ef70d6f3cf4ec2ba6562d languageName: node linkType: hard -"eslint-module-utils@npm:^2.7.4": - version: 2.8.0 - resolution: "eslint-module-utils@npm:2.8.0" +"eslint-module-utils@npm:^2.6.0": + version: 2.6.0 + resolution: "eslint-module-utils@npm:2.6.0" + dependencies: + debug: ^2.6.9 + pkg-dir: ^2.0.0 + checksum: 489bb82248e1090515701cc9614a6e183dac34805bc1cb205cf411a875b8db756b0c05141f9ddb64395ec1d518a99c7f113ac181929a0e995968b8584d7f5a63 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.6.2": + version: 2.6.2 + resolution: "eslint-module-utils@npm:2.6.2" dependencies: debug: ^3.2.7 - peerDependenciesMeta: - eslint: - optional: true - checksum: 74c6dfea7641ebcfe174be61168541a11a14aa8d72e515f5f09af55cd0d0862686104b0524aa4b8e0ce66418a44aa38a94d2588743db5fd07a6b49ffd16921d2 + pkg-dir: ^2.0.0 + checksum: 814591f494e4f4b04c1af0fde2a679e7a7664a5feb51175e02ba96d671e34ec60cb1835d174508eb81c07a6c92c243f84c6349f4169b3bec1a8dbdd36a0934f3 languageName: node linkType: hard "eslint-plugin-cypress@npm:^2.11.1": - version: 2.13.3 - resolution: "eslint-plugin-cypress@npm:2.13.3" + version: 2.11.1 + resolution: "eslint-plugin-cypress@npm:2.11.1" dependencies: globals: ^11.12.0 peerDependencies: eslint: ">= 3.2.1" - checksum: 9affbcee29e030a4251c4794f7533e8e8c0e3b98ab3470a2c730ed059f733c5857a04c7ac214cc0ca7aeef1b11242e72595de7fc1f6b8b4d4578d9eca10af203 + checksum: ea5d0ae4f5072e4f7b23f3c652f5f0bd061d514b04af532c8b7e0a3f813475823430908c02e0ca74dd7b23e77283b6a0f6d07364e2bf829a0f5cbf24d52ab39f languageName: node linkType: hard @@ -16045,48 +19051,71 @@ __metadata: linkType: hard "eslint-plugin-flowtype@npm:^5.2.0": - version: 5.10.0 - resolution: "eslint-plugin-flowtype@npm:5.10.0" + version: 5.9.2 + resolution: "eslint-plugin-flowtype@npm:5.9.2" dependencies: lodash: ^4.17.15 string-natural-compare: ^3.0.1 peerDependencies: eslint: ^7.1.0 - checksum: 791cd53c886bf819d52d6353cdfb4d49276dcd8a14f564a85d275d5017d81c7b1cc1921013ac9749f69c3f1bc4d23f36182137aab42bc059c2ae3f9773dd7740 + checksum: cee01ed54a1c0fec2e03e02e6993147c8d0cf794b39a6698fdfe55399470ab17743bce39e43d93779483ef2be25878a00af70dd7faeaecf2e218b465f2575032 languageName: node linkType: hard -"eslint-plugin-import@npm:^2.22.0, eslint-plugin-import@npm:^2.22.1": - version: 2.27.5 - resolution: "eslint-plugin-import@npm:2.27.5" +"eslint-plugin-import@npm:^2.22.0": + version: 2.22.0 + resolution: "eslint-plugin-import@npm:2.22.0" dependencies: - array-includes: ^3.1.6 - array.prototype.flat: ^1.3.1 - array.prototype.flatmap: ^1.3.1 - debug: ^3.2.7 + array-includes: ^3.1.1 + array.prototype.flat: ^1.2.3 + contains-path: ^0.1.0 + debug: ^2.6.9 + doctrine: 1.5.0 + eslint-import-resolver-node: ^0.3.3 + eslint-module-utils: ^2.6.0 + has: ^1.0.3 + minimatch: ^3.0.4 + object.values: ^1.1.1 + read-pkg-up: ^2.0.0 + resolve: ^1.17.0 + tsconfig-paths: ^3.9.0 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 + checksum: ee6bd6cc405ac6c9f88544912533c66b0baa83306605e8e427f8d3747a6da080a41a266965499254c43c97232e3d465160bbf82263957b18a60c6c72d27399be + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.22.1": + version: 2.24.2 + resolution: "eslint-plugin-import@npm:2.24.2" + dependencies: + array-includes: ^3.1.3 + array.prototype.flat: ^1.2.4 + debug: ^2.6.9 doctrine: ^2.1.0 - eslint-import-resolver-node: ^0.3.7 - eslint-module-utils: ^2.7.4 + eslint-import-resolver-node: ^0.3.6 + eslint-module-utils: ^2.6.2 + find-up: ^2.0.0 has: ^1.0.3 - is-core-module: ^2.11.0 - is-glob: ^4.0.3 - minimatch: ^3.1.2 - object.values: ^1.1.6 - resolve: ^1.22.1 - semver: ^6.3.0 - tsconfig-paths: ^3.14.1 + is-core-module: ^2.6.0 + minimatch: ^3.0.4 + object.values: ^1.1.4 + pkg-up: ^2.0.0 + read-pkg-up: ^3.0.0 + resolve: ^1.20.0 + tsconfig-paths: ^3.11.0 peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: f500571a380167e25d72a4d925ef9a7aae8899eada57653e5f3051ec3d3c16d08271fcefe41a30a9a2f4fefc232f066253673ee4ea77b30dba65ae173dade85d + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 + checksum: df570aec83ffa126fd80596d9fb1b6799d3cde025ceeb159eb28383541ebbb855468c9a2dbc670ab9e91dd0a8f8a82e52fd909a7c61e9ffa585bcce84ae1aec4 languageName: node linkType: hard "eslint-plugin-jest-formatting@npm:^2.0.0": - version: 2.0.1 - resolution: "eslint-plugin-jest-formatting@npm:2.0.1" + version: 2.0.0 + resolution: "eslint-plugin-jest-formatting@npm:2.0.0" peerDependencies: eslint: ">=0.8.0" - checksum: 63030998b425ed7ea5dbae5fcf925a1cc0b527d46ea1ff33f239ee206cb76db12066739b158e75ba061ecf0b33ec57482053c81c6c3c6e765a2b58bd4618ba1d + checksum: a781137cb2446a4341e7864304f6a7d27631c978664abd712bbab2ab1cbb261cc7321c99193cd33831532f236f5bad48bdf3c785253975efdefe147606ec6793 languageName: node linkType: hard @@ -16099,9 +19128,20 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^24.0.1, eslint-plugin-jest@npm:^24.1.0": - version: 24.7.0 - resolution: "eslint-plugin-jest@npm:24.7.0" +"eslint-plugin-jest@npm:^24.0.1": + version: 24.0.2 + resolution: "eslint-plugin-jest@npm:24.0.2" + dependencies: + "@typescript-eslint/experimental-utils": ^4.0.1 + peerDependencies: + eslint: ">=5" + checksum: 136b9414ba1691c9a6300f63a78cf54a3f99f14196f78436cf177e7ed0d7caf64a4500d603cba27ac171e9c0a7490b9f8f298c6cdc817242affc3a866f4c09cf + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^24.1.0": + version: 24.4.0 + resolution: "eslint-plugin-jest@npm:24.4.0" dependencies: "@typescript-eslint/experimental-utils": ^4.0.1 peerDependencies: @@ -16110,33 +19150,28 @@ __metadata: peerDependenciesMeta: "@typescript-eslint/eslint-plugin": optional: true - checksum: a4056582825ab3359d2e0e3aae50518f6f867d1cfb3240496605247d3ff9c84b4164f1a7e1f7087d5a2eae1343d738ada1ba74c422b13ad20b737601dc47ae08 + checksum: ffa3f019420e6263db6d1236fda6fd2650cea89e84bd975bd56813aa72e46f997d5350c3d08e1608f3049854e9ff651028b692356b1615cb7bd1862f71ed0f88 languageName: node linkType: hard "eslint-plugin-jsx-a11y@npm:^6.3.1": - version: 6.7.1 - resolution: "eslint-plugin-jsx-a11y@npm:6.7.1" + version: 6.3.1 + resolution: "eslint-plugin-jsx-a11y@npm:6.3.1" dependencies: - "@babel/runtime": ^7.20.7 - aria-query: ^5.1.3 - array-includes: ^3.1.6 - array.prototype.flatmap: ^1.3.1 + "@babel/runtime": ^7.10.2 + aria-query: ^4.2.2 + array-includes: ^3.1.1 ast-types-flow: ^0.0.7 - axe-core: ^4.6.2 - axobject-query: ^3.1.1 - damerau-levenshtein: ^1.0.8 - emoji-regex: ^9.2.2 + axe-core: ^3.5.4 + axobject-query: ^2.1.2 + damerau-levenshtein: ^1.0.6 + emoji-regex: ^9.0.0 has: ^1.0.3 - jsx-ast-utils: ^3.3.3 - language-tags: =1.0.5 - minimatch: ^3.1.2 - object.entries: ^1.1.6 - object.fromentries: ^2.0.6 - semver: ^6.3.0 + jsx-ast-utils: ^2.4.1 + language-tags: ^1.0.5 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: f166dd5fe7257c7b891c6692e6a3ede6f237a14043ae3d97581daf318fc5833ddc6b4871aa34ab7656187430170500f6d806895747ea17ecdf8231a666c3c2fd + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + checksum: 4f2814eb3e9811cbacd6694e64c504f2cebefaf7d1751bb858e7aceb09efecbce3e41389b64b4c6760ca072027050d397dd005eabaf6f4fa7391b8e086fc8d66 languageName: node linkType: hard @@ -16160,8 +19195,8 @@ __metadata: linkType: hard "eslint-plugin-prettier@npm:^3.3.1": - version: 3.4.1 - resolution: "eslint-plugin-prettier@npm:3.4.1" + version: 3.3.1 + resolution: "eslint-plugin-prettier@npm:3.3.1" dependencies: prettier-linter-helpers: ^1.0.0 peerDependencies: @@ -16170,7 +19205,7 @@ __metadata: peerDependenciesMeta: eslint-config-prettier: optional: true - checksum: fa6a89f0d7cba1cc87064352f5a4a68dc3739448dd279bec2bced1bfa3b704467e603d13b69dcec853f8fa30b286b8b715912898e9da776e1b016cf0ee48bd99 + checksum: 217253dd2dea0c1aee6a7bf82e729236874807bc160c9481be38453c1f5b6f38050c8f1d4db8495c87c1edcbcbed70ce289b80c65fe3ad992df748e56fc5f44d languageName: node linkType: hard @@ -16183,12 +19218,21 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.1.1, eslint-plugin-react-hooks@npm:^4.2.0": - version: 4.6.0 - resolution: "eslint-plugin-react-hooks@npm:4.6.0" +"eslint-plugin-react-hooks@npm:^4.1.1": + version: 4.1.2 + resolution: "eslint-plugin-react-hooks@npm:4.1.2" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + checksum: b6826c5b695d1b4458aeaff1e5a98895a777419bd05c0df852a5d86f2ac4039bdf0a86676577d216ce6ae9ca031e2f2a61e80e886f3f2e640ee63cd4fc1b7d17 + languageName: node + linkType: hard + +"eslint-plugin-react-hooks@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-plugin-react-hooks@npm:4.2.0" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + checksum: ead5c5be3ded82a0cf295b064376adb1998a43e2262b605eecc0efc88283dec4e159ca39307fafb3d8e661dd08e5a4c8cdfed97eea78f923954f72bad6e20397 languageName: node linkType: hard @@ -16199,7 +19243,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-native@npm:3.8.1": +"eslint-plugin-react-native@npm:3.8.1, eslint-plugin-react-native@npm:^3.6.0": version: 3.8.1 resolution: "eslint-plugin-react-native@npm:3.8.1" dependencies: @@ -16210,18 +19254,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-native@npm:^3.6.0": - version: 3.11.0 - resolution: "eslint-plugin-react-native@npm:3.11.0" - dependencies: - "@babel/traverse": ^7.7.4 - eslint-plugin-react-native-globals: ^0.1.1 - peerDependencies: - eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 - checksum: 100006a29c7a47df66764db11560ae51076bcd37dd8aaaf5738675a402404e257caa0a6c1d724fb6979fbc8198545da42e45966a4460a0a52e8b2b29d3c7a901 - languageName: node - linkType: hard - "eslint-plugin-react@npm:7.19.0": version: 7.19.0 resolution: "eslint-plugin-react@npm:7.19.0" @@ -16245,27 +19277,23 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.21.5": - version: 7.32.2 - resolution: "eslint-plugin-react@npm:7.32.2" + version: 7.21.5 + resolution: "eslint-plugin-react@npm:7.21.5" dependencies: - array-includes: ^3.1.6 - array.prototype.flatmap: ^1.3.1 - array.prototype.tosorted: ^1.1.1 + array-includes: ^3.1.1 + array.prototype.flatmap: ^1.2.3 doctrine: ^2.1.0 - estraverse: ^5.3.0 + has: ^1.0.3 jsx-ast-utils: ^2.4.1 || ^3.0.0 - minimatch: ^3.1.2 - 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.4 - semver: ^6.3.0 - string.prototype.matchall: ^4.0.8 + object.entries: ^1.1.2 + object.fromentries: ^2.0.2 + object.values: ^1.1.1 + prop-types: ^15.7.2 + resolve: ^1.18.1 + string.prototype.matchall: ^4.0.2 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 2232b3b8945aa50b7773919c15cd96892acf35d2f82503667a79e2f55def90f728ed4f0e496f0f157acbe1bd4397c5615b676ae7428fe84488a544ca53feb944 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + checksum: 93a006413ce057b08bfedae4581c32c28f6f42f86823e7c991321c8a1e178787424368472c657594a9c4c9291c9e870c72288931948b2af23840031433074a22 languageName: node linkType: hard @@ -16280,7 +19308,27 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.0.0, eslint-scope@npm:^5.1.1": +"eslint-scope@npm:^4.0.3": + version: 4.0.3 + resolution: "eslint-scope@npm:4.0.3" + dependencies: + esrecurse: ^4.1.0 + estraverse: ^4.1.1 + checksum: c5f835f681884469991fe58d76a554688d9c9e50811299ccd4a8f79993a039f5bcb0ee6e8de2b0017d97c794b5832ef3b21c9aac66228e3aa0f7a0485bcfb65b + languageName: node + linkType: hard + +"eslint-scope@npm:^5.0.0": + version: 5.1.0 + resolution: "eslint-scope@npm:5.1.0" + dependencies: + esrecurse: ^4.1.0 + estraverse: ^4.1.1 + checksum: 701c850429cc26105c8d2324c65b269aed45f33a6ad2f43c3d0d47c8d51ec242800e448a7a591cc6162b75cfcb456f0a63f20dd76887bac332617d4847194057 + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -16290,17 +19338,16 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^4.0.3": - version: 4.0.3 - resolution: "eslint-scope@npm:4.0.3" +"eslint-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "eslint-utils@npm:2.0.0" dependencies: - esrecurse: ^4.1.0 - estraverse: ^4.1.1 - checksum: c5f835f681884469991fe58d76a554688d9c9e50811299ccd4a8f79993a039f5bcb0ee6e8de2b0017d97c794b5832ef3b21c9aac66228e3aa0f7a0485bcfb65b + eslint-visitor-keys: ^1.1.0 + checksum: dc5776695099cd5a60dae5c0fd8a16f1de4cce6c0bad36d143db2bb9db1efb5394d794fdcfcf71ecd8640d7ebbac6f37b59f672a71002d5b760c5d7a8ea7f16e languageName: node linkType: hard -"eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": +"eslint-utils@npm:^2.1.0": version: 2.1.0 resolution: "eslint-utils@npm:2.1.0" dependencies: @@ -16309,17 +19356,6 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-utils@npm:3.0.0" - dependencies: - eslint-visitor-keys: ^2.0.0 - peerDependencies: - eslint: ">=5" - checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^1.0.0, eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": version: 1.3.0 resolution: "eslint-visitor-keys@npm:1.3.0" @@ -16328,30 +19364,30 @@ __metadata: linkType: hard "eslint-visitor-keys@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d + version: 2.0.0 + resolution: "eslint-visitor-keys@npm:2.0.0" + checksum: e07e9863fb8c9b1453f5ad1a26f3cc8dd6b349b26605cc06bc0c61215ac5b6f13a4d08c875218e6c0f8ac8fc06ca6e090df769e32c569f0fd2e6a848b8a76c75 languageName: node linkType: hard "eslint-webpack-plugin@npm:^2.5.2": - version: 2.7.0 - resolution: "eslint-webpack-plugin@npm:2.7.0" + version: 2.5.4 + resolution: "eslint-webpack-plugin@npm:2.5.4" dependencies: - "@types/eslint": ^7.29.0 + "@types/eslint": ^7.2.6 arrify: ^2.0.1 - jest-worker: ^27.5.1 - micromatch: ^4.0.5 + jest-worker: ^26.6.2 + micromatch: ^4.0.2 normalize-path: ^3.0.0 - schema-utils: ^3.1.1 + schema-utils: ^3.0.0 peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 webpack: ^4.0.0 || ^5.0.0 - checksum: b6fd7cf4c49078b345a908b82b0bee06bc82ab0cec214ddd5fe5bb18b065765d52a07ad4077f6bba5830ba2f55f37d8f2208a52d11f34ee29df81153e3124d9c + checksum: df663e5f656c84e135db144d77b82874d158955451969890d454a76ec355c309a84a186e3aaf4fa53d7529ac01a43c2943a49768fd0493fd32df3e5ba8c5210a languageName: node linkType: hard -"eslint@npm:^7.11.0, eslint@npm:^7.9.0": +"eslint@npm:^7.11.0": version: 7.32.0 resolution: "eslint@npm:7.32.0" dependencies: @@ -16401,6 +19437,53 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^7.9.0": + version: 7.22.0 + resolution: "eslint@npm:7.22.0" + dependencies: + "@babel/code-frame": 7.12.11 + "@eslint/eslintrc": ^0.4.0 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.0.1 + doctrine: ^3.0.0 + enquirer: ^2.3.5 + eslint-scope: ^5.1.1 + eslint-utils: ^2.1.0 + eslint-visitor-keys: ^2.0.0 + espree: ^7.3.1 + esquery: ^1.4.0 + esutils: ^2.0.2 + file-entry-cache: ^6.0.1 + functional-red-black-tree: ^1.0.1 + glob-parent: ^5.0.0 + globals: ^13.6.0 + ignore: ^4.0.6 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + js-yaml: ^3.13.1 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash: ^4.17.21 + minimatch: ^3.0.4 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + progress: ^2.0.0 + regexpp: ^3.1.0 + semver: ^7.2.1 + strip-ansi: ^6.0.0 + strip-json-comments: ^3.1.0 + table: ^6.0.4 + text-table: ^0.2.0 + v8-compile-cache: ^2.0.3 + bin: + eslint: bin/eslint.js + checksum: 9d725504dc8c6eed8f5c0b2fddc781a7e84921c7f67f2da81ab171077f4c1813f4e47d4544c9b5c16cb68dddad5aa9f851a8640d9e10793f29cbd55567cc1201 + languageName: node + linkType: hard + "esm@npm:^3.2.25": version: 3.2.25 resolution: "esm@npm:3.2.25" @@ -16408,7 +19491,18 @@ __metadata: languageName: node linkType: hard -"espree@npm:^7.3.0, espree@npm:^7.3.1": +"espree@npm:^7.3.0": + version: 7.3.0 + resolution: "espree@npm:7.3.0" + dependencies: + acorn: ^7.4.0 + acorn-jsx: ^5.2.0 + eslint-visitor-keys: ^1.3.0 + checksum: 9e1838ec16cb4c8152f006be219ec3e4eb0d82f13bcaf93f10aea3513abaa32df4617fa0ca013b29f899b4de6aa392e82b6dab64f8c00446a7712b696a2928db + languageName: node + linkType: hard + +"espree@npm:^7.3.1": version: 7.3.1 resolution: "espree@npm:7.3.1" dependencies: @@ -16430,15 +19524,24 @@ __metadata: linkType: hard "esquery@npm:^1.4.0": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" + version: 1.4.0 + resolution: "esquery@npm:1.4.0" dependencies: estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 + languageName: node + linkType: hard + +"esrecurse@npm:^4.1.0": + version: 4.2.1 + resolution: "esrecurse@npm:4.2.1" + dependencies: + estraverse: ^4.1.0 + checksum: 3f05f9b650e91267fd14b012261f15e2a91c0aa8f344a42f75f807ff7f7c974c3386dc531f33a2144ad8a1f38e5b0f8336620fd3cb0b261d5b5b79c92b240781 languageName: node linkType: hard -"esrecurse@npm:^4.1.0, esrecurse@npm:^4.3.0": +"esrecurse@npm:^4.3.0": version: 4.3.0 resolution: "esrecurse@npm:4.3.0" dependencies: @@ -16447,17 +19550,24 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^4.1.1": +"estraverse@npm:^4.1.0, estraverse@npm:^4.1.1": version: 4.3.0 resolution: "estraverse@npm:4.3.0" checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 languageName: node linkType: hard -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b +"estraverse@npm:^5.1.0": + version: 5.1.0 + resolution: "estraverse@npm:5.1.0" + checksum: e572477b02991b9a02cd335428856da0d984974c46cfcf7730f9a8113d3e2141cd90f6b1d25b9931fd60800456352b288630f5064fe597fa8cf6c7f725ba802b + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.2.0 + resolution: "estraverse@npm:5.2.0" + checksum: ec11b70d946bf5d7f76f91db38ef6f08109ac1b36cda293a26e678e58df4719f57f67b9ec87042afdd1f0267cee91865be3aa48d2161765a93defab5431be7b8 languageName: node linkType: hard @@ -16515,9 +19625,9 @@ __metadata: linkType: hard "eventemitter2@npm:^6.4.2": - version: 6.4.9 - resolution: "eventemitter2@npm:6.4.9" - checksum: be59577c1e1c35509c7ba0e2624335c35bbcfd9485b8a977384c6cc6759341ea1a98d3cb9dbaa5cea4fff9b687e504504e3f9c2cc1674cf3bd8a43a7c74ea3eb + version: 6.4.3 + resolution: "eventemitter2@npm:6.4.3" + checksum: e6926b3e2929cff7c877aba1f651cdc68b0fcc9c93a21d884132d9c0d3138a0bfaea379a897b4a3627e9100bf60e42d242144fa3f43f304ef6a14edf2f6ff00e languageName: node linkType: hard @@ -16529,9 +19639,9 @@ __metadata: linkType: hard "eventemitter3@npm:^4.0.0": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + version: 4.0.0 + resolution: "eventemitter3@npm:4.0.0" + checksum: 53532ce3012f48339fed187125364593a6a221ae6a1dda0ef23570ee31f471ec2e10105634900f22169895acc0ad2a2e8e8db263784b736effc412dc9ffd86c6 languageName: node linkType: hard @@ -16542,10 +19652,10 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.0.0, events@npm:^3.2.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 +"events@npm:^3.0.0": + version: 3.0.0 + resolution: "events@npm:3.0.0" + checksum: 25a5117ac67fd2ca6b931a077a309009cc20b79c60da73fd112a479558cd5a5b197c965c13b1e8d0140f65a22860c40d28e3c60e51dbad8faed8b33a042ca753 languageName: node linkType: hard @@ -16558,10 +19668,12 @@ __metadata: languageName: node linkType: hard -"eventsource@npm:^2.0.2": - version: 2.0.2 - resolution: "eventsource@npm:2.0.2" - checksum: c0072d972753e10c705d9b2285b559184bf29d011bc208973dde9c8b6b8b7b6fdad4ef0846cecb249f7b1585e860fdf324cbd2ac854a76bc53649e797496e99a +"eventsource@npm:^1.0.7": + version: 1.0.7 + resolution: "eventsource@npm:1.0.7" + dependencies: + original: ^1.0.0 + checksum: 26d6d9103ed11c4ed9cd2b69fb204176649c9686ee2440dcd08d82f741b9d38cc6e0e13e0974591ee1b7c0fc3b78f5d99f399630e46c776e797c8696469f53ac languageName: node linkType: hard @@ -16577,9 +19689,9 @@ __metadata: linkType: hard "exec-sh@npm:^0.3.2": - version: 0.3.6 - resolution: "exec-sh@npm:0.3.6" - checksum: 0be4f06929c8e4834ea4812f29fe59e2dfcc1bc3fc4b4bb71acb38a500c3b394628a05ef7ba432520bc6c5ec4fadab00cc9c513c4ff6a32104965af302e998e0 + version: 0.3.4 + resolution: "exec-sh@npm:0.3.4" + checksum: a1a4a37c57ce405bfb6e82e814b5d1d8a3da4e076cc38fcac5ac2ccd5d1f91ec10d70f19d56c878dde4899dbbf9233369e83f3b64ebdfe3daee096f9e939b37b languageName: node linkType: hard @@ -16598,7 +19710,24 @@ __metadata: languageName: node linkType: hard -"execa@npm:^4.0.0, execa@npm:^4.0.2": +"execa@npm:^4.0.0": + version: 4.0.3 + resolution: "execa@npm:4.0.3" + dependencies: + cross-spawn: ^7.0.0 + get-stream: ^5.0.0 + human-signals: ^1.1.1 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.0 + onetime: ^5.1.0 + signal-exit: ^3.0.2 + strip-final-newline: ^2.0.0 + checksum: e76102eeab4727bdad930c33df5fd8621fbd77930061e3a815307e132dc8eb1d103631917ea3ed7d2e5257b9c74c7dcf6980b5f7fbcd0d1cf6cbcb83a3bc226f + languageName: node + linkType: hard + +"execa@npm:^4.0.2": version: 4.1.0 resolution: "execa@npm:4.1.0" dependencies: @@ -16721,15 +19850,17 @@ __metadata: languageName: node linkType: hard -"expect@npm:^27.5.1": - version: 27.5.1 - resolution: "expect@npm:27.5.1" +"expect@npm:^27.2.4": + version: 27.2.4 + resolution: "expect@npm:27.2.4" dependencies: - "@jest/types": ^27.5.1 - jest-get-type: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - checksum: b2c66beb52de53ef1872165aace40224e722bca3c2274c54cfa74b6d617d55cf0ccdbf36783ccd64dbea501b280098ed33fd0b207d4f15bc03cd3c7a24364a6a + "@jest/types": ^27.2.4 + ansi-styles: ^5.0.0 + jest-get-type: ^27.0.6 + jest-matcher-utils: ^27.2.4 + jest-message-util: ^27.2.4 + jest-regex-util: ^27.0.6 + checksum: e51c3b1d44a694b23b0c9866be8503f4fdd461001195eb15ebb58383c11d7609b00ad050832419d6c0f2c7ad83183d1389429bc3fd8b7bbca666869719a3ee70 languageName: node linkType: hard @@ -16756,7 +19887,45 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.16.2, express@npm:^4.16.4, express@npm:^4.17.1, express@npm:^4.17.3": +"express@npm:^4.16.2, express@npm:^4.16.4, express@npm:^4.17.1": + version: 4.17.1 + resolution: "express@npm:4.17.1" + dependencies: + accepts: ~1.3.7 + array-flatten: 1.1.1 + body-parser: 1.19.0 + content-disposition: 0.5.3 + content-type: ~1.0.4 + cookie: 0.4.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: ~1.1.2 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + finalhandler: ~1.1.2 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: ~1.1.2 + on-finished: ~2.3.0 + parseurl: ~1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: ~2.0.5 + qs: 6.7.0 + range-parser: ~1.2.1 + safe-buffer: 5.1.2 + send: 0.17.1 + serve-static: 1.14.1 + setprototypeof: 1.1.1 + statuses: ~1.5.0 + type-is: ~1.6.18 + utils-merge: 1.0.1 + vary: ~1.1.2 + checksum: d964e9e17af331ea6fa2f84999b063bc47189dd71b4a735df83f9126d3bb2b92e830f1cb1d7c2742530eb625e2689d7a9a9c71f0c3cc4dd6015c3cd32a01abd5 + languageName: node + linkType: hard + +"express@npm:^4.17.3": version: 4.18.2 resolution: "express@npm:4.18.2" dependencies: @@ -16796,11 +19965,11 @@ __metadata: linkType: hard "ext@npm:^1.1.2": - version: 1.7.0 - resolution: "ext@npm:1.7.0" + version: 1.4.0 + resolution: "ext@npm:1.4.0" dependencies: - type: ^2.7.2 - checksum: ef481f9ef45434d8c867cfd09d0393b60945b7c8a1798bedc4514cb35aac342ccb8d8ecb66a513e6a2b4ec1e294a338e3124c49b29736f8e7c735721af352c31 + type: ^2.0.0 + checksum: 70acfb68763ad888b34a1c8f2fd9ae5e7265c2470a58a7204645fea07fdbb802512944ea3820db5e643369a9364a98f01732c72e3f2ee577bc2582c3e7e370e3 languageName: node linkType: hard @@ -16905,9 +20074,9 @@ __metadata: linkType: hard "extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 + version: 1.4.0 + resolution: "extsprintf@npm:1.4.0" + checksum: 184dc8a413eb4b1ff16bdce797340e7ded4d28511d56a1c9afa5a95bcff6ace154063823eaf0206dbbb0d14059d74f382a15c34b7c0636fa74a7e681295eb67e languageName: node linkType: hard @@ -16937,6 +20106,13 @@ __metadata: languageName: node linkType: hard +"fast-deep-equal@npm:^2.0.1": + version: 2.0.1 + resolution: "fast-deep-equal@npm:2.0.1" + checksum: b701835a87985e0ec4925bdf1f0c1e7eb56309b5d12d534d5b4b69d95a54d65bb16861c081781ead55f73f12d6c60ba668713391ee7fbf6b0567026f579b7b0b + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -16945,9 +20121,9 @@ __metadata: linkType: hard "fast-diff@npm:^1.1.2": - version: 1.3.0 - resolution: "fast-diff@npm:1.3.0" - checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 + version: 1.2.0 + resolution: "fast-diff@npm:1.2.0" + checksum: 1b5306eaa9e826564d9e5ffcd6ebd881eb5f770b3f977fcbf38f05c824e42172b53c79920e8429c54eb742ce15a0caf268b0fdd5b38f6de52234c4a8368131ae languageName: node linkType: hard @@ -16965,7 +20141,21 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.1.1, fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.5, fast-glob@npm:^3.2.9": +"fast-glob@npm:^3.1.1": + version: 3.2.4 + resolution: "fast-glob@npm:3.2.4" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.0 + merge2: ^1.3.0 + micromatch: ^4.0.2 + picomatch: ^2.2.1 + checksum: a70ce897b23e85521688b03897115315e8c781f2e5ee5f3b83e8c10df6a464e8be415c800f55c9c40278b41aeccc60883f018f76dde8250b8cf28e7566c13f75 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.11": version: 3.2.12 resolution: "fast-glob@npm:3.2.12" dependencies: @@ -16978,6 +20168,20 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.2.5": + version: 3.2.5 + resolution: "fast-glob@npm:3.2.5" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.0 + merge2: ^1.3.0 + micromatch: ^4.0.2 + picomatch: ^2.2.1 + checksum: 5d6772c9b63dbb739d60b5630851e1f2cbf9744119e0968eac44c9f8cbc2d3d5cb4f2f0c74715ccb23daa336c87bea42186ed367e6c991afee61cd3d967320eb + languageName: node + linkType: hard + "fast-json-parse@npm:^1.0.3": version: 1.0.3 resolution: "fast-json-parse@npm:1.0.3" @@ -17006,16 +20210,32 @@ __metadata: languageName: node linkType: hard +"fast-safe-stringify@npm:^2.0.4": + version: 2.0.7 + resolution: "fast-safe-stringify@npm:2.0.7" + checksum: e0055e231d1fe0f97863dcfb45f5f285d59e3d23210e1e8a31348829e4a584e04ffe49f5944a0ba2f21d753b67b0ecb6f0ffc49ecd8c7f6f531cbcd45a5f606b + languageName: node + linkType: hard + "fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" + version: 1.8.0 + resolution: "fastq@npm:1.8.0" dependencies: reusify: ^1.0.4 - checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + checksum: f9ece30617a42670048bb5f73ec67570944205973443292854392b0b2b90b02cc4452beb866999d95fdf5f08f06215418c4118aadef86173968200407d44f933 + languageName: node + linkType: hard + +"fault@npm:^1.0.0": + version: 1.0.4 + resolution: "fault@npm:1.0.4" + dependencies: + format: ^0.2.0 + checksum: 5ac610d8b09424e0f2fa8cf913064372f2ee7140a203a79957f73ed557c0e79b1a3d096064d7f40bde8132a69204c1fe25ec23634c05c6da2da2039cff26c4e7 languageName: node linkType: hard -"faye-websocket@npm:^0.11.3, faye-websocket@npm:^0.11.4, faye-websocket@npm:~0.11.0": +"faye-websocket@npm:^0.11.3": version: 0.11.4 resolution: "faye-websocket@npm:0.11.4" dependencies: @@ -17024,12 +20244,21 @@ __metadata: languageName: node linkType: hard +"faye-websocket@npm:~0.11.0": + version: 0.11.3 + resolution: "faye-websocket@npm:0.11.3" + dependencies: + websocket-driver: ">=0.5.1" + checksum: d7b2d68546812ea24e3079bd1e08bf1d79cd6d6137bfcea565d1cb1f6a5fc8fc29b689df2c1aff8b8b291d60fc808e1b27aa2896b86ba77ded10f1d9734c8e9f + languageName: node + linkType: hard + "fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" + version: 2.0.1 + resolution: "fb-watchman@npm:2.0.1" dependencies: bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + checksum: 8510230778ab3a51c27dffb1b76ef2c24fab672a42742d3c0a45c2e9d1e5f20210b1fbca33486088da4a9a3958bde96b5aec0a63aac9894b4e9df65c88b2cbd6 languageName: node linkType: hard @@ -17059,23 +20288,24 @@ __metadata: linkType: hard "fbjs@npm:*": - version: 3.0.4 - resolution: "fbjs@npm:3.0.4" + version: 2.0.0 + resolution: "fbjs@npm:2.0.0" dependencies: - cross-fetch: ^3.1.5 + core-js: ^3.6.4 + cross-fetch: ^3.0.4 fbjs-css-vars: ^1.0.0 loose-envify: ^1.0.0 object-assign: ^4.1.0 promise: ^7.1.1 setimmediate: ^1.0.5 - ua-parser-js: ^0.7.30 - checksum: 8b23a3550fcda8a9109fca9475a3416590c18bb6825ea884192864ed686f67fcd618e308a140c9e5444fbd0168732e1ff3c092ba3d0c0ae1768969f32ba280c7 + ua-parser-js: ^0.7.18 + checksum: 449799568370c0350775e67a6b6d3f399a1b07df466f4ceb10a5d8ef238c26709fe7c1dac57578028c58496ffb797c119b0bea691e36a4e620f2130e7e90e3a3 languageName: node linkType: hard -"fbjs@npm:^0.8.1, fbjs@npm:^0.8.4, fbjs@npm:^0.8.6": - version: 0.8.18 - resolution: "fbjs@npm:0.8.18" +"fbjs@npm:^0.8.1, fbjs@npm:^0.8.4, fbjs@npm:^0.8.6, fbjs@npm:^0.8.9": + version: 0.8.17 + resolution: "fbjs@npm:0.8.17" dependencies: core-js: ^1.0.0 isomorphic-fetch: ^2.1.1 @@ -17083,8 +20313,8 @@ __metadata: object-assign: ^4.1.0 promise: ^7.1.1 setimmediate: ^1.0.5 - ua-parser-js: ^0.7.30 - checksum: 668731b946a765908c9cbe51d5160f973abb78004b3d122587c3e930e3e1ddcc0ce2b17f2a8637dc9d733e149aa580f8d3035a35cc2d3bc78b78f1b19aab90e2 + ua-parser-js: ^0.7.18 + checksum: e969aeb175ccf97d8818aab9907a78f253568e0cc1b8762621c5d235bf031419d7e700f16f7711e89dfd1e0fce2b87a05f8a2800f18df0a96258f0780615fd8b languageName: node linkType: hard @@ -17114,9 +20344,9 @@ __metadata: linkType: hard "fecha@npm:^4.2.0": - version: 4.2.3 - resolution: "fecha@npm:4.2.3" - checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 + version: 4.2.0 + resolution: "fecha@npm:4.2.0" + checksum: 4eb4235959161446f6ec1a24e34eba7362187d2c96d9dd86ea4290e345d1efd2175ccb01bbef9ee852c6790aa7af2539d08361b0499ebc9bf23b4791f5666cd0 languageName: node linkType: hard @@ -17127,10 +20357,17 @@ __metadata: languageName: node linkType: hard +"fflate@npm:^0.3.8": + version: 0.3.11 + resolution: "fflate@npm:0.3.11" + checksum: 1eca8d3e86fda9f82c8acd16a970dd20bfeb4bd31c7808351ef413bc2673911d2aedc2fed6e8a4b68f5f2598b07f0579fdf6f085f5a8105b49cde8a8f3528def + languageName: node + linkType: hard + "figgy-pudding@npm:^3.5.1": - version: 3.5.2 - resolution: "figgy-pudding@npm:3.5.2" - checksum: 4090bd66193693dcda605e44d6b8715d8fb5c92a67acd57826e55cf816a342f550d57e5638f822b39366e1b2fdb244e99b3068a37213aa1d6c1bf602b8fde5ae + version: 3.5.1 + resolution: "figgy-pudding@npm:3.5.1" + checksum: 9f70794631b3a97298e4d64fd5c86207069816537d6e66309dc6e9c6aef00fc694f1d3bc4b8ea078f93a6d7d474108b4cbf92c5b2f32daad733833734e8735c1 languageName: node linkType: hard @@ -17194,12 +20431,13 @@ __metadata: linkType: hard "file-system-cache@npm:^1.0.5": - version: 1.1.0 - resolution: "file-system-cache@npm:1.1.0" + version: 1.0.5 + resolution: "file-system-cache@npm:1.0.5" dependencies: - fs-extra: ^10.1.0 - ramda: ^0.28.0 - checksum: d60d7aadf2e9d1629c20dd423f9e1fc3a9719f80dc4e08017a1aa06a8f8d8f66cf140a63ab68a72f07edd9684786ce7409ef4177b43ed0209cd6bcdbb39dab00 + bluebird: ^3.3.5 + fs-extra: ^0.30.0 + ramda: ^0.21.0 + checksum: 25dd942d522b95a4165029f78d4a74d82dcb9582b2745dc012d03e1311d98b1012f9b361ef1c79708c66be6cb7201f4f4e96f2dea319ace962d6c9c0f93526ec languageName: node linkType: hard @@ -17264,13 +20502,6 @@ __metadata: languageName: node linkType: hard -"filter-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "filter-obj@npm:1.1.0" - checksum: cf2104a7c45ff48e7f505b78a3991c8f7f30f28bd8106ef582721f321f1c6277f7751aacd5d83026cb079d9d5091082f588d14a72e7c5d720ece79118fa61e10 - languageName: node - linkType: hard - "final-fs@npm:^1.6.0": version: 1.6.1 resolution: "final-fs@npm:1.6.1" @@ -17281,7 +20512,7 @@ __metadata: languageName: node linkType: hard -"finalhandler@npm:1.1.2": +"finalhandler@npm:1.1.2, finalhandler@npm:~1.1.2": version: 1.1.2 resolution: "finalhandler@npm:1.1.2" dependencies: @@ -17332,7 +20563,7 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^3.0.0, find-cache-dir@npm:^3.2.0, find-cache-dir@npm:^3.3.1": +"find-cache-dir@npm:^3.0.0": version: 3.3.2 resolution: "find-cache-dir@npm:3.3.2" dependencies: @@ -17343,6 +20574,17 @@ __metadata: languageName: node linkType: hard +"find-cache-dir@npm:^3.2.0, find-cache-dir@npm:^3.3.1": + version: 3.3.1 + resolution: "find-cache-dir@npm:3.3.1" + dependencies: + commondir: ^1.0.1 + make-dir: ^3.0.2 + pkg-dir: ^4.1.0 + checksum: 0f7c22b65e07f9b486b4560227d014fab1e79ffbbfbafb87d113a2e878510bd620ef6fdff090e5248bb2846d28851d19e42bfdc7c50687966acc106328e7abf1 + languageName: node + linkType: hard + "find-replace@npm:^1.0.3": version: 1.0.3 resolution: "find-replace@npm:1.0.3" @@ -17353,6 +20595,13 @@ __metadata: languageName: node linkType: hard +"find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf + languageName: node + linkType: hard + "find-up@npm:4.1.0, find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -17383,7 +20632,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^2.0.0": +"find-up@npm:^2.0.0, find-up@npm:^2.1.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" dependencies: @@ -17443,19 +20692,21 @@ __metadata: languageName: node linkType: hard -"flat@npm:^5.0.2": - version: 5.0.2 - resolution: "flat@npm:5.0.2" +"flat@npm:^4.1.0": + version: 4.1.0 + resolution: "flat@npm:4.1.0" + dependencies: + is-buffer: ~2.0.3 bin: flat: cli.js - checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + checksum: 41a91335be78c5c16813672a6371871034763db85ed84b31926b132ebeb145d63cd05460e33e4197358ed6a862e2c25c01721c8b2b20d292ff1e166795655f09 languageName: node linkType: hard "flatted@npm:^3.1.0": - version: 3.2.7 - resolution: "flatted@npm:3.2.7" - checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 + version: 3.1.1 + resolution: "flatted@npm:3.1.1" + checksum: 508935e3366d95444131f0aaa801a4301f24ea5bcb900d12764e7335b46b910730cc1b5bcfcfb8eccb7c8db261ba0671c6a7ca30d10870ff7a7756dc7e731a7a languageName: node linkType: hard @@ -17513,7 +20764,23 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.15.0": +"follow-redirects@npm:^1.0.0": + version: 1.9.0 + resolution: "follow-redirects@npm:1.9.0" + dependencies: + debug: ^3.0.0 + checksum: 485f5a7ea54fbf3d3ed6775f2eb29bf7e7763f0bd01c56a8494fe44050a25c5c3fc9c047dc31d8aa3690a49c805e751a5f50cec40caf2e2cf190baeb27a62eb2 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.10.0": + version: 1.13.0 + resolution: "follow-redirects@npm:1.13.0" + checksum: 684165a78370ae21ccb9495d1e99eb3bd9a63a51f8686f3b5117d92e28435a283b39e07014bc959287314979ecd496027e4baca8854f757439b7ac0b185e5f2d + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.0": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: @@ -17581,8 +20848,8 @@ __metadata: linkType: hard "fork-ts-checker-webpack-plugin@npm:^6.0.4": - version: 6.5.3 - resolution: "fork-ts-checker-webpack-plugin@npm:6.5.3" + version: 6.3.3 + resolution: "fork-ts-checker-webpack-plugin@npm:6.3.3" dependencies: "@babel/code-frame": ^7.8.3 "@types/json-schema": ^7.0.5 @@ -17597,17 +20864,7 @@ __metadata: schema-utils: 2.7.0 semver: ^7.3.2 tapable: ^1.0.0 - peerDependencies: - eslint: ">= 6" - typescript: ">= 2.7" - vue-template-compiler: "*" - webpack: ">= 4" - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - checksum: 9732a49bfeed8fc23e6e8a59795fa7c238edeba91040a9b520db54b4d316dda27f9f1893d360e296fd0ad8930627d364417d28a8c7007fba60cc730ebfce4956 + checksum: 22bcbf08fc6c1d31daa521e4b59495ee0e4ec51a7e5728dfd4212835f461002a92910b0bc1a1c62cfe569f7b907fdb81875f108ee922113050deca042f06df8d languageName: node linkType: hard @@ -17623,13 +20880,13 @@ __metadata: linkType: hard "form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" + version: 3.0.0 + resolution: "form-data@npm:3.0.0" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + checksum: 60ec3fe7e23154949ab6fef31baedf5afbfb8d6441ea8d19b211b43a5d0448be2918c9bba6218cade56a7cbd43f670d6e75f41f626f8d397d56bf8c60f4a829d languageName: node linkType: hard @@ -17662,10 +20919,17 @@ __metadata: languageName: node linkType: hard +"format@npm:^0.2.0": + version: 0.2.2 + resolution: "format@npm:0.2.2" + checksum: 646a60e1336250d802509cf24fb801e43bd4a70a07510c816fa133aa42cdbc9c21e66e9cc0801bb183c5b031c9d68be62e7fbb6877756e52357850f92aa28799 + languageName: node + linkType: hard + "formidable@npm:^1.2.0": - version: 1.2.6 - resolution: "formidable@npm:1.2.6" - checksum: 2b68ed07ba88302b9c63f8eda94f19a460cef6017bfda48348f09f41d2a36660c9353137991618e0e4c3db115b41e4b8f6fa63bc973b7a7c91dec66acdd02a56 + version: 1.2.1 + resolution: "formidable@npm:1.2.1" + checksum: f0027cc1dfc6d93e92e9da187866af9ac3ee53f09a3e620bbb24e52d56eb8a2336d4dcb0c9074835c13116eba335932614b5f5298d6d8b273820b2edf35af383 languageName: node linkType: hard @@ -17676,6 +20940,13 @@ __metadata: languageName: node linkType: hard +"forwarded@npm:~0.1.2": + version: 0.1.2 + resolution: "forwarded@npm:0.1.2" + checksum: 54695c574292f9bc6bfa52111844337bc2e61cfcc5ec82f16b816d721a67a0c76b4849a34b57e38e51d64ddbb81aef974f393579f610ed1b990470e75abad2e0 + languageName: node + linkType: hard + "frac@npm:~1.1.2": version: 1.1.2 resolution: "frac@npm:1.1.2" @@ -17684,9 +20955,9 @@ __metadata: linkType: hard "fraction.js@npm:^4.1.1": - version: 4.2.0 - resolution: "fraction.js@npm:4.2.0" - checksum: 8c76a6e21dedea87109d6171a0ac77afa14205794a565d71cb10d2925f629a3922da61bf45ea52dbc30bce4d8636dc0a27213a88cbd600eab047d82f9a3a94c5 + version: 4.1.1 + resolution: "fraction.js@npm:4.1.1" + checksum: e5a1f81d73e32aabf4fbd6581a7b3dfabd9a449ceb97c7e71ed2931dd0607095622341100d7819741eb9b435eb4e0d4a040a69e411dc943fa9b3a3872f3a2e0f languageName: node linkType: hard @@ -17717,9 +20988,9 @@ __metadata: linkType: hard "fromentries@npm:^1.2.0": - version: 1.3.2 - resolution: "fromentries@npm:1.3.2" - checksum: 33729c529ce19f5494f846f0dd4945078f4e37f4e8955f4ae8cc7385c218f600e9d93a7d225d17636c20d1889106fd87061f911550861b7072f53bf891e6b341 + version: 1.2.1 + resolution: "fromentries@npm:1.2.1" + checksum: 2764c43f26b829eee84201f0899dc47dc951993ed91bd1d5cad08b7407b04c9e01614b171a0f0e6701db2a6ec06819a455c3ba57cc29fd8fa6ef4bcab784e469 languageName: node linkType: hard @@ -17752,6 +21023,19 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^0.30.0": + version: 0.30.0 + resolution: "fs-extra@npm:0.30.0" + dependencies: + graceful-fs: ^4.1.2 + jsonfile: ^2.1.0 + klaw: ^1.0.0 + path-is-absolute: ^1.0.0 + rimraf: ^2.2.8 + checksum: 6edfd65fc813baa27f1603778c0f5ec11f8c5006a20b920437813ee2023eba18aeec8bef1c89b2e6c84f9fc90fdc7c916f4a700466c8c69d22a35d018f2570f0 + languageName: node + linkType: hard + "fs-extra@npm:^1.0.0": version: 1.0.0 resolution: "fs-extra@npm:1.0.0" @@ -17763,7 +21047,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^10.0.1, fs-extra@npm:^10.1.0": +"fs-extra@npm:^10.0.1": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" dependencies: @@ -17807,7 +21091,19 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^9.0.0, fs-extra@npm:^9.0.1": +"fs-extra@npm:^9.0.0": + version: 9.0.1 + resolution: "fs-extra@npm:9.0.1" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^1.0.0 + checksum: 0110da06b4def68f2ed0343c0df518d6a3699373b826dc1848bdd18cea5e30ac282a412ff58b459c2a38f280301a31ce42a585c5f0506b412fe5259680876ccf + languageName: node + linkType: hard + +"fs-extra@npm:^9.0.1": version: 9.1.0 resolution: "fs-extra@npm:9.1.0" dependencies: @@ -17819,7 +21115,7 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^1.2.7": +"fs-minipass@npm:^1.2.5, fs-minipass@npm:^1.2.7": version: 1.2.7 resolution: "fs-minipass@npm:1.2.7" dependencies: @@ -17837,7 +21133,7 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:^1.0.3": +"fs-monkey@npm:1.0.3": version: 1.0.3 resolution: "fs-monkey@npm:1.0.3" checksum: cf50804833f9b88a476911ae911fe50f61a98d986df52f890bd97e7262796d023698cb2309fa9b74fdd8974f04315b648748a0a8ee059e7d5257b293bfc409c0 @@ -17871,17 +21167,29 @@ __metadata: linkType: hard "fsevents@npm:^1.2.7": - version: 1.2.13 - resolution: "fsevents@npm:1.2.13" + version: 1.2.11 + resolution: "fsevents@npm:1.2.11" dependencies: bindings: ^1.5.0 nan: ^2.12.1 - checksum: ae855aa737aaa2f9167e9f70417cf6e45a5cd11918e1fee9923709a0149be52416d765433b4aeff56c789b1152e718cd1b13ddec6043b78cdda68260d86383c1 + node-gyp: latest + node-pre-gyp: "*" + checksum: 3daedd1272f49c281b25eab372965673ba3cad5038ddf678ba0463e53181a1e9a8d471fcb5894cfee6b7e05406803b723fe708c1e3f6d5a93929115697439350 conditions: os=darwin languageName: node linkType: hard -"fsevents@npm:^2.1.2, fsevents@npm:^2.1.3, fsevents@npm:^2.3.2, fsevents@npm:~2.3.1, fsevents@npm:~2.3.2": +"fsevents@npm:^2.1.2, fsevents@npm:~2.1.2": + version: 2.1.3 + resolution: "fsevents@npm:2.1.3" + dependencies: + node-gyp: latest + checksum: b5ec0516b44d75b60af5c01ff80a80cd995d175e4640d2a92fbabd02991dd664d76b241b65feef0775c23d531c3c74742c0fbacd6205af812a9c3cef59f04292 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@npm:^2.1.3, fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -17891,17 +21199,38 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:~2.3.1": + version: 2.3.1 + resolution: "fsevents@npm:2.3.1" + dependencies: + node-gyp: latest + checksum: 7992dac7961be985b3c3c64d79f4489278ab179da2cdc190a88085e3526ab6fa0fb1b78d94ab8669649208a0728fdd2dab1f4b522566ace132b687b5e6a341a1 + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@patch:fsevents@^1.2.7#~builtin": - version: 1.2.13 - resolution: "fsevents@patch:fsevents@npm%3A1.2.13#~builtin::version=1.2.13&hash=18f3a7" + version: 1.2.11 + resolution: "fsevents@patch:fsevents@npm%3A1.2.11#~builtin::version=1.2.11&hash=18f3a7" dependencies: bindings: ^1.5.0 nan: ^2.12.1 + node-gyp: latest + node-pre-gyp: "*" conditions: os=darwin languageName: node linkType: hard -"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.1#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": +"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@~2.1.2#~builtin": + version: 2.1.3 + resolution: "fsevents@patch:fsevents@npm%3A2.1.3#~builtin::version=2.1.3&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" dependencies: @@ -17910,6 +21239,15 @@ __metadata: languageName: node linkType: hard +"fsevents@patch:fsevents@~2.3.1#~builtin": + version: 2.3.1 + resolution: "fsevents@patch:fsevents@npm%3A2.3.1#~builtin::version=2.3.1&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + "function-bind@npm:^1.1.1": version: 1.1.1 resolution: "function-bind@npm:1.1.1" @@ -17917,15 +21255,14 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.0, function.prototype.name@npm:^1.1.5": - version: 1.1.5 - resolution: "function.prototype.name@npm:1.1.5" +"function.prototype.name@npm:^1.1.0": + version: 1.1.2 + resolution: "function.prototype.name@npm:1.1.2" dependencies: - call-bind: ^1.0.2 define-properties: ^1.1.3 - es-abstract: ^1.19.0 - functions-have-names: ^1.2.2 - checksum: acd21d733a9b649c2c442f067567743214af5fa248dbeee69d8278ce7df3329ea5abac572be9f7470b4ec1cd4d8f1040e3c5caccf98ebf2bf861a0deab735c27 + es-abstract: ^1.17.0-next.1 + functions-have-names: ^1.2.0 + checksum: 68b4e1fc4bf3a6a88ac5a69d84f46c33c24dc83db33123b6f11c16330c9aa65ac0e7c6e31654f8429cf5229d2a83eb2673641fc059ad5a98d6c44184589b871d languageName: node linkType: hard @@ -17936,13 +21273,27 @@ __metadata: languageName: node linkType: hard -"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": +"functions-have-names@npm:^1.2.0": + version: 1.2.1 + resolution: "functions-have-names@npm:1.2.1" + checksum: 34a3f18ce1d6ce54b9e7df3209d25718106206aee3951ae82a639dbda71c7c57112836628734b4ba18aeddf5f6e8d8c92c7b825df8cbe1ef8b6f683afecaf38a + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 languageName: node linkType: hard +"fuse.js@npm:^3.6.1": + version: 3.6.1 + resolution: "fuse.js@npm:3.6.1" + checksum: 958aa877ace65dc900df776becd39a03df68d7eebc7890b5fd2fc8c5d88e2fff238f60c37f80013ce70e9d9e7ac8efa9f503695fdd23d1eca3cc983797b50191 + languageName: node + linkType: hard + "gauge@npm:^3.0.0": version: 3.0.2 resolution: "gauge@npm:3.0.2" @@ -17992,7 +21343,14 @@ __metadata: languageName: node linkType: hard -"gensync@npm:^1.0.0-beta.1, gensync@npm:^1.0.0-beta.2": +"gensync@npm:^1.0.0-beta.1": + version: 1.0.0-beta.1 + resolution: "gensync@npm:1.0.0-beta.1" + checksum: 92686a5445740fb505f68d66318df5ff04fd803d31385c1ea7b432d860d3e098eb2bc03c8c820356e6f71d86abc0a213ba48bec98b9befafb380b302bfa9e0c1 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec @@ -18013,7 +21371,18 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": + version: 1.1.1 + resolution: "get-intrinsic@npm:1.1.1" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.1 + checksum: a9fe2ca8fa3f07f9b0d30fb202bcd01f3d9b9b6b732452e79c48e79f7d6d8d003af3f9e38514250e3553fdc83c61650851cb6870832ac89deaaceb08e3721a17 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": version: 1.2.1 resolution: "get-intrinsic@npm:1.2.1" dependencies: @@ -18074,7 +21443,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^4.0.0": +"get-stream@npm:^4.0.0, get-stream@npm:^4.1.0": version: 4.1.0 resolution: "get-stream@npm:4.1.0" dependencies: @@ -18083,7 +21452,16 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": +"get-stream@npm:^5.0.0": + version: 5.1.0 + resolution: "get-stream@npm:5.1.0" + dependencies: + pump: ^3.0.0 + checksum: 371e1fb3f3b009edffd379810ed52a1f0a0a621dbb3778bd844e3b002065af0790bfddde845b4a0f05f71da5d99441465f5586281497321b151a8bdd102c885a + languageName: node + linkType: hard + +"get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" dependencies: @@ -18165,6 +21543,25 @@ __metadata: languageName: node linkType: hard +"glob-base@npm:^0.3.0": + version: 0.3.0 + resolution: "glob-base@npm:0.3.0" + dependencies: + glob-parent: ^2.0.0 + is-glob: ^2.0.0 + checksum: d0e3054a7df6033936980a3454ee6c91bb6661300b86b7a616d822a521e089afff1f5fbbd2582f9cee9f5823aed31d90244ee2e2e55f425103d42558615df294 + languageName: node + linkType: hard + +"glob-parent@npm:^2.0.0": + version: 2.0.0 + resolution: "glob-parent@npm:2.0.0" + dependencies: + is-glob: ^2.0.0 + checksum: 734fc461d9d2753dd490dd072df6ce41fe4ebb60e9319b108bc538707b21780af3a61c3961ec2264131fad5d3d9a493e013a775aef11a69ac2f49fd7d8f46457 + languageName: node + linkType: hard + "glob-parent@npm:^3.1.0": version: 3.1.0 resolution: "glob-parent@npm:3.1.0" @@ -18175,7 +21572,16 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, glob-parent@npm:~5.1.2": +"glob-parent@npm:^5.0.0, glob-parent@npm:^5.1.0, glob-parent@npm:~5.1.0": + version: 5.1.1 + resolution: "glob-parent@npm:5.1.1" + dependencies: + is-glob: ^4.0.1 + checksum: 9f9a19c8d441d9df51df5985b2280b084f5ebc07e0fe5de761f346cb707cc30e7d51fb51c0e82490730b6c0ca9c9a3d0c73e4a22861a3cf363cc745e01721dd4 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -18244,7 +21650,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.1.6": +"glob@npm:7.1.6, glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.1.6 resolution: "glob@npm:7.1.6" dependencies: @@ -18271,7 +21677,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7, glob@npm:^7.2.0": +"glob@npm:^7.1.7, glob@npm:^7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -18285,7 +21691,20 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.1, glob@npm:^8.0.3, glob@npm:^8.1.0": +"glob@npm:^8.0.1": + version: 8.0.3 + resolution: "glob@npm:8.0.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^5.0.1 + once: ^1.3.0 + checksum: 50bcdea19d8e79d8de5f460b1939ffc2b3299eac28deb502093fdca22a78efebc03e66bf54f0abc3d3d07d8134d19a32850288b7440d77e072aa55f9d33b18c5 + languageName: node + linkType: hard + +"glob@npm:^8.1.0": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: @@ -18299,11 +21718,11 @@ __metadata: linkType: hard "global-dirs@npm:^2.0.1": - version: 2.1.0 - resolution: "global-dirs@npm:2.1.0" + version: 2.0.1 + resolution: "global-dirs@npm:2.0.1" dependencies: - ini: 1.3.7 - checksum: f80b74032c0359a6af7f37d153b8ced67710135ed7ab45b03efe688f5792ef859b660561beeb79ecce3106071c2547196c0971dfecdb2332139892129487233d + ini: ^1.3.5 + checksum: 1a5d17fee3f95482bd2aae444ac7ce2fb58cafc3c8e5b2ab7f07c0e67f7acef4b1a974da3e26b54f238ce6b64e68a2e0a1ce8c09693fd48a4f70e4057089a374 languageName: node linkType: hard @@ -18368,12 +21787,30 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.6.0, globals@npm:^13.9.0": - version: 13.20.0 - resolution: "globals@npm:13.20.0" +"globals@npm:^12.1.0": + version: 12.4.0 + resolution: "globals@npm:12.4.0" + dependencies: + type-fest: ^0.8.1 + checksum: 7ae5ee16a96f1e8d71065405f57da0e33267f6b070cd36a5444c7780dd28639b48b92413698ac64f04bf31594f9108878bd8cb158ecdf759c39e05634fefcca6 + languageName: node + linkType: hard + +"globals@npm:^13.6.0": + version: 13.7.0 + resolution: "globals@npm:13.7.0" + dependencies: + type-fest: ^0.20.2 + checksum: 27433ceaf57571ccadcd01e0497c2f3485ad2aea93985c9e3850ce54835d7ffce1eddcc210f412a327d855b77f6c25307efee7f448c01e11e3929d12544b820a + languageName: node + linkType: hard + +"globals@npm:^13.9.0": + version: 13.11.0 + resolution: "globals@npm:13.11.0" dependencies: type-fest: ^0.20.2 - checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a + checksum: e9e5624154261a3e5344d2105a94886c5f2ca48028fa8258cd7b9119c5f00cf2909392817bb2d162c9a1a31b55d9b2c14e8f2271c45a22f77806f5b9322541cf languageName: node linkType: hard @@ -18384,16 +21821,16 @@ __metadata: languageName: node linkType: hard -"globalthis@npm:^1.0.0, globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" +"globalthis@npm:^1.0.0": + version: 1.0.1 + resolution: "globalthis@npm:1.0.1" dependencies: define-properties: ^1.1.3 - checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + checksum: d80d625355ebd1174144290766ce96a1465966370d35a05897e3fb96e031493b2c117fb92b55a94dba2f33031e498b5776d03437965ed4514815e6122c78d18c languageName: node linkType: hard -"globby@npm:11.0.1": +"globby@npm:11.0.1, globby@npm:^11.0.0, globby@npm:^11.0.1": version: 11.0.1 resolution: "globby@npm:11.0.1" dependencies: @@ -18407,17 +21844,17 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.0, globby@npm:^11.0.1, globby@npm:^11.0.2, globby@npm:^11.0.3": - version: 11.1.0 - resolution: "globby@npm:11.1.0" +"globby@npm:^11.0.2, globby@npm:^11.0.3": + version: 11.0.4 + resolution: "globby@npm:11.0.4" dependencies: array-union: ^2.1.0 dir-glob: ^3.0.1 - fast-glob: ^3.2.9 - ignore: ^5.2.0 - merge2: ^1.4.1 + fast-glob: ^3.1.1 + ignore: ^5.1.4 + merge2: ^1.3.0 slash: ^3.0.0 - checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + checksum: d3e02d5e459e02ffa578b45f040381c33e3c0538ed99b958f0809230c423337999867d7b0dbf752ce93c46157d3bbf154d3fff988a93ccaeb627df8e1841775b languageName: node linkType: hard @@ -18498,17 +21935,57 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 +"got@npm:^9.6.0": + version: 9.6.0 + resolution: "got@npm:9.6.0" + 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 + checksum: 941807bd9704bacf5eb401f0cc1212ffa1f67c6642f2d028fd75900471c221b1da2b8527f4553d2558f3faeda62ea1cf31665f8b002c6137f5de8732f07370b0 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9": + version: 4.2.3 + resolution: "graceful-fs@npm:4.2.3" + checksum: ec1f6a7027dfd4f6b69a15b2c78493d7211e88a8c0fdb6d93aa504f8f6b5353abac6ba0a202aedb9d970be22c2c257a1481426913ae0166bdc8bb8f3bed378dc + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4": + version: 4.2.4 + resolution: "graceful-fs@npm:4.2.4" + checksum: 9d58c444eb4f391ce30b451aae8a8af2bd675d9f6f624719e97306f571ab89b2bd2b5f9025199bc63a2edfe2e53e7701554012f32a708148d53aa689163728cc + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.9": + version: 4.2.9 + resolution: "graceful-fs@npm:4.2.9" + checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 languageName: node linkType: hard "graphql@npm:^15.4.0": - version: 15.8.0 - resolution: "graphql@npm:15.8.0" - checksum: 423325271db8858428641b9aca01699283d1fe5b40ef6d4ac622569ecca927019fce8196208b91dd1d8eb8114f00263fe661d241d0eb40c10e5bfd650f86ec5e + version: 15.5.0 + resolution: "graphql@npm:15.5.0" + checksum: 58a69f7274ae94c690bfa2517f96bbaf1327e1ca1fc46606e772ba2f7ca517adeb375346301373351e693022f448b7866163034209623d7c5315819ef8c5e7c0 languageName: node linkType: hard @@ -18569,9 +22046,9 @@ __metadata: linkType: hard "handle-thing@npm:^2.0.0": - version: 2.0.1 - resolution: "handle-thing@npm:2.0.1" - checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c + version: 2.0.0 + resolution: "handle-thing@npm:2.0.0" + checksum: bb6a33ec17a36a9fca92c8f98b0208dca4b5659253d77a2db7d31a0bad467d01f94e59444e226b6d35877226516176f069501c01d847047e1abcbe303363070f languageName: node linkType: hard @@ -18600,13 +22077,13 @@ __metadata: languageName: node linkType: hard -"har-validator@npm:~5.1.3": - version: 5.1.5 - resolution: "har-validator@npm:5.1.5" +"har-validator@npm:~5.1.0, har-validator@npm:~5.1.3": + version: 5.1.3 + resolution: "har-validator@npm:5.1.3" dependencies: - ajv: ^6.12.3 + ajv: ^6.5.5 har-schema: ^2.0.0 - checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 + checksum: 5903ddf55f4403bb102a86dc2da073593716c7aa422863c244cb406b69e006551553c904e30ed5d123788675ae827f977b3b366211dc730b33a2b619f926199f languageName: node linkType: hard @@ -18618,9 +22095,9 @@ __metadata: linkType: hard "harmony-reflect@npm:^1.4.6": - version: 1.6.2 - resolution: "harmony-reflect@npm:1.6.2" - checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c + version: 1.6.1 + resolution: "harmony-reflect@npm:1.6.1" + checksum: 4cb91f86d262650d62c3ac713a2284ef0784a5c8be347188f97747db68d0e6d9801f09a3f12bacec59d5ec9d010cba64b8acb4c2c4827e172ef2ab215cdfef9d languageName: node linkType: hard @@ -18633,10 +22110,10 @@ __metadata: languageName: node linkType: hard -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b +"has-bigints@npm:^1.0.1": + version: 1.0.1 + resolution: "has-bigints@npm:1.0.1" + checksum: 44ab55868174470065d2e0f8f6def1c990d12b82162a8803c679699fa8a39f966e336f2a33c185092fe8aea7e8bf2e85f1c26add5f29d98f2318bd270096b183 languageName: node linkType: hard @@ -18686,7 +22163,21 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.0, has-symbols@npm:^1.0.1": + version: 1.0.1 + resolution: "has-symbols@npm:1.0.1" + checksum: 4f09be6682f9fc29855ded1101ad2a0f5d559d7d9ed68f7b68be1ea213c23991216d08d6585bf3ff6fded6f526cc506bda528d276f083602b55d232f132cfa27 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2": + version: 1.0.2 + resolution: "has-symbols@npm:1.0.2" + checksum: 2309c426071731be792b5be43b3da6fb4ed7cbe8a9a6bcfca1862587709f01b33d575ce8f5c264c1eaad09fca2f9a8208c0a2be156232629daa2dd0c0740976b + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 @@ -18757,6 +22248,13 @@ __metadata: languageName: node linkType: hard +"has-yarn@npm:^2.1.0": + version: 2.1.0 + resolution: "has-yarn@npm:2.1.0" + checksum: 5eb1d0bb8518103d7da24532bdbc7124ffc6d367b5d3c10840b508116f2f1bcbcf10fd3ba843ff6e2e991bdf9969fd862d42b2ed58aade88343326c950b7e7f7 + languageName: node + linkType: hard + "has@npm:^1.0.0, has@npm:^1.0.3": version: 1.0.3 resolution: "has@npm:1.0.3" @@ -18767,13 +22265,12 @@ __metadata: linkType: hard "hash-base@npm:^3.0.0": - version: 3.1.0 - resolution: "hash-base@npm:3.1.0" + version: 3.0.4 + resolution: "hash-base@npm:3.0.4" dependencies: - inherits: ^2.0.4 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 languageName: node linkType: hard @@ -18788,18 +22285,18 @@ __metadata: linkType: hard "hasha@npm:^5.0.0": - version: 5.2.2 - resolution: "hasha@npm:5.2.2" + version: 5.2.0 + resolution: "hasha@npm:5.2.0" dependencies: is-stream: ^2.0.0 type-fest: ^0.8.0 - checksum: 06cc474bed246761ff61c19d629977eb5f53fa817be4313a255a64ae0f433e831a29e83acb6555e3f4592b348497596f1d1653751008dda4f21c9c21ca60ac5a + checksum: 8b3adbdac6df8132a4337454cb2050dde932d2313fbb50ebbe2cd4ac4cb1e9480d80906c2134ecd7ccd343c33add37da9f3ac5828c025513b4c764cd4d22dd79 languageName: node linkType: hard "hast-to-hyperscript@npm:^9.0.0": - version: 9.0.1 - resolution: "hast-to-hyperscript@npm:9.0.1" + version: 9.0.0 + resolution: "hast-to-hyperscript@npm:9.0.0" dependencies: "@types/unist": ^2.0.3 comma-separated-tokens: ^1.0.0 @@ -18808,28 +22305,28 @@ __metadata: style-to-object: ^0.3.0 unist-util-is: ^4.0.0 web-namespaces: ^1.0.0 - checksum: de570d789853018fff2fd38fc096549b9814e366b298f60c90c159a57018230eefc44d46a246027b0e2426ed9e99f2e270050bc183d5bdfe4c9487c320b392cd + checksum: 4b361f25b25ef2c8a20c55eff5df7e0026f3b4c868dcefab4e28aa30baee37f4b56f00588d05164df1c320dd708dec6de24186a99a8beaca1c5f12a7065849ba languageName: node linkType: hard "hast-util-from-parse5@npm:^6.0.0": - version: 6.0.1 - resolution: "hast-util-from-parse5@npm:6.0.1" + version: 6.0.0 + resolution: "hast-util-from-parse5@npm:6.0.0" dependencies: "@types/parse5": ^5.0.0 - hastscript: ^6.0.0 + ccount: ^1.0.0 + hastscript: ^5.0.0 property-information: ^5.0.0 vfile: ^4.0.0 - vfile-location: ^3.2.0 web-namespaces: ^1.0.0 - checksum: 4daa78201468af7779161e7caa2513c329830778e0528481ab16b3e1bcef4b831f6285b526aacdddbee802f3bd9d64df55f80f010591ea1916da535e3a923b83 + checksum: 175de11c196eb290ca18463194b7985367418f9e0befad2111d109cf52a9e77030a077a7681e94181c08ec00e1cf5a770ec592288b05378bff5617c906c78418 languageName: node linkType: hard "hast-util-parse-selector@npm:^2.0.0": - version: 2.2.5 - resolution: "hast-util-parse-selector@npm:2.2.5" - checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 + version: 2.2.4 + resolution: "hast-util-parse-selector@npm:2.2.4" + checksum: 06e8b534626517929856877df116d95b46d384cc159595270c1e5b3af7404f20843065a1c675d60944445f7356c5c876ed10d5e2d66654b62fe06ecc8b423d45 languageName: node linkType: hard @@ -18864,6 +22361,18 @@ __metadata: languageName: node linkType: hard +"hastscript@npm:^5.0.0": + version: 5.1.2 + resolution: "hastscript@npm:5.1.2" + dependencies: + comma-separated-tokens: ^1.0.0 + hast-util-parse-selector: ^2.0.0 + property-information: ^5.0.0 + space-separated-tokens: ^1.0.0 + checksum: 662321af446f09c76d67af31d05823f382ce1e6c007828dc77f899f310cea682c00216b67c317a4ebe7f0c05e50552c4810d214e6ed4e95388f7b7d7fc93158f + languageName: node + linkType: hard + "hastscript@npm:^6.0.0": version: 6.0.0 resolution: "hastscript@npm:6.0.0" @@ -18897,9 +22406,9 @@ __metadata: linkType: hard "headers-utils@npm:^1.2.0": - version: 1.2.5 - resolution: "headers-utils@npm:1.2.5" - checksum: 569523a4eeefc59ecbe458ef57f1f59067de67470b1bd76e430f80b7ece5d5bb87e453a54c14a2db72a92c69a44435bfc68b0d2a406c26502a736a89b1236e45 + version: 1.2.0 + resolution: "headers-utils@npm:1.2.0" + checksum: a6b2bdbe6bef97268653f9233e68e1f9b600e3c8fcf9e8b99b1541f5cd145d867e33cbea16589be762d503e5bd79e33e0cce6eb0376db3238be983df4f8b062f languageName: node linkType: hard @@ -18926,6 +22435,13 @@ __metadata: languageName: node linkType: hard +"highlight.js@npm:^10.1.1, highlight.js@npm:~10.7.0": + version: 10.7.3 + resolution: "highlight.js@npm:10.7.3" + checksum: defeafcd546b535d710d8efb8e650af9e3b369ef53e28c3dc7893eacfe263200bba4c5fcf43524ae66d5c0c296b1af0870523ceae3e3104d24b7abf6374a4fea + languageName: node + linkType: hard + "history@npm:^4.7.2, history@npm:^4.9.0": version: 4.10.1 resolution: "history@npm:4.10.1" @@ -18941,6 +22457,15 @@ __metadata: linkType: hard "history@npm:^5.0.0": + version: 5.0.0 + resolution: "history@npm:5.0.0" + dependencies: + "@babel/runtime": ^7.7.6 + checksum: 14eab13619b4d297eeda0ae7adcf2dd8e6cec48fc9fac903b8dfb626337f8f6fc12743c286be819885c71f522daf0e9e7f814aa126ae5e1b01ab4a3d6801b5f5 + languageName: node + linkType: hard + +"history@npm:^5.2.0": version: 5.3.0 resolution: "history@npm:5.3.0" dependencies: @@ -18949,7 +22474,7 @@ __metadata: languageName: node linkType: hard -"hmac-drbg@npm:^1.0.1": +"hmac-drbg@npm:^1.0.0": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" dependencies: @@ -18988,7 +22513,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -18997,6 +22522,15 @@ __metadata: languageName: node linkType: hard +"hoist-non-react-statics@npm:^3.3.0": + version: 3.3.1 + resolution: "hoist-non-react-statics@npm:3.3.1" + dependencies: + react-is: ^16.7.0 + checksum: 0333b04ef07539c29215ff251c047894d7d544c98263396c21bca6b7ccbf76250e09167d5958758eab60aeff2cd493349b962e20feeb70cc869bf0a239187cf3 + languageName: node + linkType: hard + "home-or-tmp@npm:^2.0.0": version: 2.0.0 resolution: "home-or-tmp@npm:2.0.0" @@ -19024,9 +22558,9 @@ __metadata: linkType: hard "hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + version: 2.8.5 + resolution: "hosted-git-info@npm:2.8.5" + checksum: ce9d7884fb563602e4567794bfe1669f3cad055f87efefd585499b2daf2db4d19909689ff7883a9ee66ef32f00ab56a904dbb6a23de609b1772ab8290e380fb1 languageName: node linkType: hard @@ -19056,6 +22590,13 @@ __metadata: languageName: node linkType: hard +"html-comment-regex@npm:^1.1.0": + version: 1.1.2 + resolution: "html-comment-regex@npm:1.1.2" + checksum: 64c1e13c93f91554a06327176663037e630f5a47de8aae6a6a60cbca25e6d7b63ee16dd35707e33ba09288b900c6947050c6945c34a0a84d27f5415cef525599 + languageName: node + linkType: hard + "html-encoding-sniffer@npm:^2.0.1": version: 2.0.1 resolution: "html-encoding-sniffer@npm:2.0.1" @@ -19065,24 +22606,24 @@ __metadata: languageName: node linkType: hard -"html-entities@npm:1.2.1": +"html-entities@npm:1.2.1, html-entities@npm:^1.2.0": version: 1.2.1 resolution: "html-entities@npm:1.2.1" checksum: 97df9c27065e0d0171189d9d301b048ef1de5b5aedb4c733c612c7630b653d26d74a08f9c700ba72fa680677e7cb98b8b7f1d969f3967d549acd6d7efabef4ed languageName: node linkType: hard -"html-entities@npm:^1.2.1, html-entities@npm:^1.3.1": - version: 1.4.0 - resolution: "html-entities@npm:1.4.0" - checksum: 4b73ffb9eead200f99146e4fbe70acb0af2fea136901a131fc3a782e9ef876a7cbb07dec303ca1f8804232b812249dbf3643a270c9c524852065d9224a8dcdd0 +"html-entities@npm:^1.2.1": + version: 1.3.1 + resolution: "html-entities@npm:1.3.1" + checksum: 423e3138822a298df37aa40503c6010a4d0cfa452f01b5730cf144c41c31fb0026ee76dd5ff0d78b987a16d145f0c50f4c112a5095740718af169786b8cbdd0a languageName: node linkType: hard -"html-entities@npm:^2.1.0": - version: 2.3.3 - resolution: "html-entities@npm:2.3.3" - checksum: 92521501da8aa5f66fee27f0f022d6e9ceae62667dae93aa6a2f636afa71ad530b7fb24a18d4d6c124c9885970cac5f8a52dbf1731741161002816ae43f98196 +"html-entities@npm:^1.3.1": + version: 1.4.0 + resolution: "html-entities@npm:1.4.0" + checksum: 4b73ffb9eead200f99146e4fbe70acb0af2fea136901a131fc3a782e9ef876a7cbb07dec303ca1f8804232b812249dbf3643a270c9c524852065d9224a8dcdd0 languageName: node linkType: hard @@ -19179,27 +22720,17 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:^6.1.0": - version: 6.1.0 - resolution: "htmlparser2@npm:6.1.0" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.0.0 - domutils: ^2.5.2 - entities: ^2.0.0 - checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e - languageName: node - linkType: hard - -"htmlparser2@npm:^8.0.1": - version: 8.0.2 - resolution: "htmlparser2@npm:8.0.2" +"htmlparser2@npm:^3.3.0, htmlparser2@npm:^3.9.1": + version: 3.10.1 + resolution: "htmlparser2@npm:3.10.1" dependencies: - domelementtype: ^2.3.0 - domhandler: ^5.0.3 - domutils: ^3.0.1 - entities: ^4.4.0 - checksum: 29167a0f9282f181da8a6d0311b76820c8a59bc9e3c87009e21968264c2987d2723d6fde5a964d4b7b6cba663fca96ffb373c06d8223a85f52a6089ced942700 + domelementtype: ^1.3.1 + domhandler: ^2.3.0 + domutils: ^1.5.1 + entities: ^1.1.1 + inherits: ^2.0.1 + readable-stream: ^3.1.1 + checksum: 6875f7dd875aa10be17d9b130e3738cd8ed4010b1f2edaf4442c82dfafe9d9336b155870dcc39f38843cbf7fef5e4fcfdf0c4c1fd4db3a1b91a1e0ee8f6c3475 languageName: node linkType: hard @@ -19221,10 +22752,10 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.0": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": + version: 4.1.0 + resolution: "http-cache-semantics@npm:4.1.0" + checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42 languageName: node linkType: hard @@ -19235,6 +22766,19 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:1.7.2": + version: 1.7.2 + resolution: "http-errors@npm:1.7.2" + dependencies: + depd: ~1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.1 + statuses: ">= 1.5.0 < 2" + toidentifier: 1.0.0 + checksum: 5534b0ae08e77f5a45a2380f500e781f6580c4ff75b816cb1f09f99a290b57e78a518be6d866db1b48cca6b052c09da2c75fc91fb16a2fe3da3c44d9acbb9972 + languageName: node + linkType: hard + "http-errors@npm:2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" @@ -19260,10 +22804,30 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:~1.7.2": + version: 1.7.3 + resolution: "http-errors@npm:1.7.3" + dependencies: + depd: ~1.1.2 + inherits: 2.0.4 + setprototypeof: 1.1.1 + statuses: ">= 1.5.0 < 2" + toidentifier: 1.0.0 + checksum: a59f359473f4b3ea78305beee90d186268d6075432622a46fb7483059068a2dd4c854a20ac8cd438883127e06afb78c1309168bde6cdfeed1e3700eb42487d99 + languageName: node + linkType: hard + +"http-parser-js@npm:>=0.4.0 <0.4.11": + version: 0.4.10 + resolution: "http-parser-js@npm:0.4.10" + checksum: 340b379d92f23803eacc83461341460faf8d87ac7e6f640f577f5f351654bed5329e5be5b6ba2ed9024187fb590bc907efef98b5592e2b221cb01c7a63cc3d15 + languageName: node + linkType: hard + "http-parser-js@npm:>=0.5.1": - version: 0.5.8 - resolution: "http-parser-js@npm:0.5.8" - checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d + version: 0.5.3 + resolution: "http-parser-js@npm:0.5.3" + checksum: 6f3142c5f60ad995a6895a1dc4f70f8cef0910745366e97cbcb99caa604590dbcc11006b00989ad306837d6b820e9bfc6e801c4060ed19a0e4df83caa8577cb5 languageName: node linkType: hard @@ -19302,24 +22866,30 @@ __metadata: linkType: hard "http-proxy-middleware@npm:^2.0.1": - version: 2.0.6 - resolution: "http-proxy-middleware@npm:2.0.6" + version: 2.0.1 + resolution: "http-proxy-middleware@npm:2.0.1" dependencies: - "@types/http-proxy": ^1.17.8 + "@types/http-proxy": ^1.17.5 http-proxy: ^1.18.1 is-glob: ^4.0.1 is-plain-obj: ^3.0.0 micromatch: ^4.0.2 - peerDependencies: - "@types/express": ^4.17.13 - peerDependenciesMeta: - "@types/express": - optional: true - checksum: 2ee85bc878afa6cbf34491e972ece0f5be0a3e5c98a60850cf40d2a9a5356e1fc57aab6cff33c1fc37691b0121c3a42602d2b1956c52577e87a5b77b62ae1c3a + checksum: 0de65bc6644b6efae5d26cd3bec071ceaeb92f26856ffee5ecdde9c702ea1435936e7dfb09da2ac0883eada80fdc993e9925902fc10bf6625565d6365f8cb30f languageName: node linkType: hard -"http-proxy@npm:^1.17.0, http-proxy@npm:^1.18.1": +"http-proxy@npm:^1.17.0": + version: 1.18.0 + resolution: "http-proxy@npm:1.18.0" + dependencies: + eventemitter3: ^4.0.0 + follow-redirects: ^1.0.0 + requires-port: ^1.0.0 + checksum: fdf5391ed6789b0d85b513aac1277d8d781330afc56c209d56fcfaba1152255f695421260684f930fd52d5d3a6edc9a6861b3417199b3c3cf87d6ec7336fcf91 + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.1": version: 1.18.1 resolution: "http-proxy@npm:1.18.1" dependencies: @@ -19348,17 +22918,6 @@ __metadata: languageName: node linkType: hard -"http-signature@npm:~1.3.6": - version: 1.3.6 - resolution: "http-signature@npm:1.3.6" - dependencies: - assert-plus: ^1.0.0 - jsprim: ^2.0.2 - sshpk: ^1.14.1 - checksum: 10be2af4764e71fee0281392937050201ee576ac755c543f570d6d87134ce5e858663fe999a7adb3e4e368e1e356d0d7fec6b9542295b875726ff615188e7a0c - languageName: node - linkType: hard - "http@npm:^0.0.0": version: 0.0.0 resolution: "http@npm:0.0.0" @@ -19373,7 +22932,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:5.0.1, https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": +"https-proxy-agent@npm:5.0.1, https-proxy-agent@npm:^5.0.1": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" dependencies: @@ -19403,6 +22962,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "https-proxy-agent@npm:5.0.0" + dependencies: + agent-base: 6 + debug: 4 + checksum: 165bfb090bd26d47693597661298006841ab733d0c7383a8cb2f17373387a94c903a3ac687090aa739de05e379ab6f868bae84ab4eac288ad85c328cd1ec9e53 + languageName: node + linkType: hard + "human-signals@npm:^1.1.1": version: 1.1.1 resolution: "human-signals@npm:1.1.1" @@ -19427,27 +22996,34 @@ __metadata: linkType: hard "hyphenate-style-name@npm:^1.0.1, hyphenate-style-name@npm:^1.0.2, hyphenate-style-name@npm:^1.0.3": - version: 1.0.4 - resolution: "hyphenate-style-name@npm:1.0.4" - checksum: 4f5bf4b055089754924babebaa23c17845937bcca6aee95d5d015f8fa1e6814279002bd6a9e541e3fac2cd02519fc76305396727066c57c8e21a7e73e7a12137 + version: 1.0.3 + resolution: "hyphenate-style-name@npm:1.0.3" + checksum: e333f610e7cb32210861ff8c55f99582cdc39e4737903936a7eb61702c98f8db45f33d54f9d230221fabc4d321b2ab8382b8af50d24a1eba21916f2edddd7b85 languageName: node linkType: hard "i18n@npm:^0.13.3": - version: 0.13.4 - resolution: "i18n@npm:0.13.4" + version: 0.13.3 + resolution: "i18n@npm:0.13.3" dependencies: - debug: ^4.3.3 - make-plural: ^7.0.0 + debug: ^4.1.1 + make-plural: ^6.2.2 math-interval-parser: ^2.0.1 messageformat: ^2.3.0 - mustache: ^4.2.0 + mustache: ^4.0.1 sprintf-js: ^1.1.2 - checksum: ea4edf04f2b41a787fc029fb610ee93a6b4efffd67b065a20eaf692a1ff7f291b708385163dade3518baa4f2f27e2c782e8b7cdba190460a6370f33d5e589320 + checksum: cde2c9cfd53970d24340db061a7f16a27faa8f93f0ef30ac26af1139261ed0b04f4ad30e6549138a31ba90b2d3d42b46c135a339e9641c94da4d47456c3e2ca5 + languageName: node + linkType: hard + +"i@npm:0.3.x": + version: 0.3.6 + resolution: "i@npm:0.3.6" + checksum: cc1b4b8f9742fc943e045d8a364c99193cbc372b2dda793543480f67a9c20e83015ecdd1a399221e8cc14c2447ce0795f0688bd43198ce753bdbf244b4c98ee6 languageName: node linkType: hard -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.17, iconv-lite@npm:^0.4.4, iconv-lite@npm:~0.4.11": +"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.17, iconv-lite@npm:^0.4.4, iconv-lite@npm:~0.4.11, iconv-lite@npm:~0.4.13": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" dependencies: @@ -19483,14 +23059,14 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:1.1.13": +"ieee754@npm:1.1.13, ieee754@npm:^1.1.4": version: 1.1.13 resolution: "ieee754@npm:1.1.13" checksum: 102df1ba662e316e6160f7ce29c7c7fa3e04f2014c288336c5a9ff40bbcc2a27d209fa2a81ebfb33f28b1941021343d30e9ad8ee85a2d61f79f5936c35edc33d languageName: node linkType: hard -"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4": +"ieee754@npm:^1.1.13": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e @@ -19512,11 +23088,11 @@ __metadata: linkType: hard "ignore-walk@npm:^3.0.1": - version: 3.0.4 - resolution: "ignore-walk@npm:3.0.4" + version: 3.0.3 + resolution: "ignore-walk@npm:3.0.3" dependencies: minimatch: ^3.0.4 - checksum: 9e9c5ef6c3e0ed7ef5d797991abb554dbb7e60d5fedf6cf05c7129819689eba2b462f625c6e3561e0fc79841904eb829565513eeeab1b44f4fbec4d3146b1a8d + checksum: 34bc6f0497276a9bfad7ba1ae301c7d16bc6424890755a21d90536eaa1f4b7acd598686a01033e64345483b2fef41dad8f93794af73c8b13a7cf21a3cae34a4e languageName: node linkType: hard @@ -19527,10 +23103,17 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.0.5, ignore@npm:^5.1.4, ignore@npm:^5.1.8, ignore@npm:^5.2.0": - version: 5.2.4 - resolution: "ignore@npm:5.2.4" - checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef +"ignore@npm:^5.0.5": + version: 5.1.4 + resolution: "ignore@npm:5.1.4" + checksum: d7f763f4ace754f6103f07b76e774e6749128a13b7b31d96082b5cc6aeb809812c7385d8917340f621f7b8bd2f1f71e9501461045ba0b47c3e15d853c795f959 + languageName: node + linkType: hard + +"ignore@npm:^5.1.4": + version: 5.1.8 + resolution: "ignore@npm:5.1.8" + checksum: 967abadb61e2cb0e5c5e8c4e1686ab926f91bc1a4680d994b91947d3c65d04c3ae126dcdf67f08e0feeb8ff8407d453e641aeeddcc47a3a3cca359f283cf6121 languageName: node linkType: hard @@ -19577,12 +23160,12 @@ __metadata: linkType: hard "import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" + version: 3.2.1 + resolution: "import-fresh@npm:3.2.1" dependencies: parent-module: ^1.0.0 resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + checksum: caef42418a087c3951fb676943a7f21ba8971aa07f9b622dff4af7edcef4160e1b172dccd85a88d7eb109cf41406a4592f70259e6b3b33aeafd042bb61f81d96 languageName: node linkType: hard @@ -19595,6 +23178,13 @@ __metadata: languageName: node linkType: hard +"import-lazy@npm:^2.1.0": + version: 2.1.0 + resolution: "import-lazy@npm:2.1.0" + checksum: 05294f3b9dd4971d3a996f0d2f176410fb6745d491d6e73376429189f5c1c3d290548116b2960a7cf3e89c20cdf11431739d1d2d8c54b84061980795010e803a + languageName: node + linkType: hard + "import-local@npm:^2.0.0": version: 2.0.0 resolution: "import-local@npm:2.0.0" @@ -19608,14 +23198,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" + version: 3.0.2 + resolution: "import-local@npm:3.0.2" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + checksum: c74d9f9484c878cda1de3434613c7ff72d5dadcf20e5482542232d7c2575b713ff88701d6675fcf09a3684cb23fb407c8b333b9cbc59438712723d058d8e976c languageName: node linkType: hard @@ -19674,9 +23264,9 @@ __metadata: linkType: hard "inflection@npm:^1.10.0": - version: 1.13.4 - resolution: "inflection@npm:1.13.4" - checksum: 6744feede9998ad8abd2b1db4af79f494a166e656a0aa949d90c8f4a945c1d07038a3756bf7af78c8f6fce368ba213a7ebf35da3edeffd39f1da0ff465eed6eb + version: 1.12.0 + resolution: "inflection@npm:1.12.0" + checksum: c640917b7c1ef2151df8eed5e7bc1ea6f6dd7b924e86f1add0bf801db55be8b581eb2d3d767a29e439153e4c06b00679a45853ac58c498ea519c4b4bdcd2a775 languageName: node linkType: hard @@ -19711,17 +23301,10 @@ __metadata: languageName: node linkType: hard -"ini@npm:1.3.7": - version: 1.3.7 - resolution: "ini@npm:1.3.7" - checksum: f8f3801e8eb039f9e03cdc27ceb494a7ac6e6ca7b2dd8394a9ef97ed5ae66930fadefd5ec908e41e4b103d3c9063b5788d47de5e8e892083c7a67b489f3b962d - languageName: node - linkType: hard - "ini@npm:^1.3.4, ini@npm:^1.3.5, ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + version: 1.3.5 + resolution: "ini@npm:1.3.5" + checksum: a4c1652f481a7770f6c4d223dbc0ea3cbbe253f7af8ddc8276e22e1185ab8252404dd0ca2ba625e4829a507b3e8e1ec3df38243d0cc4b20dbe915a22118d3f98 languageName: node linkType: hard @@ -19806,7 +23389,29 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": +"internal-slot@npm:^1.0.2": + version: 1.0.2 + resolution: "internal-slot@npm:1.0.2" + dependencies: + es-abstract: ^1.17.0-next.1 + has: ^1.0.3 + side-channel: ^1.0.2 + checksum: 4689d3254997371ae4af3ae7ced3ac393b04bea23d01ea08c7abfdabe938e5bc676544d4dfe1c6b20aa549ee8d681bd23e02a3223659933670aa6f39a5bf6fb7 + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.3": + version: 1.0.3 + resolution: "internal-slot@npm:1.0.3" + dependencies: + get-intrinsic: ^1.1.0 + has: ^1.0.3 + side-channel: ^1.0.4 + checksum: 1944f92e981e47aebc98a88ff0db579fd90543d937806104d0b96557b10c1f170c51fb777b97740a8b6ddeec585fca8c39ae99fd08a8e058dfc8ab70937238bf + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.4": version: 1.0.5 resolution: "internal-slot@npm:1.0.5" dependencies: @@ -19841,7 +23446,7 @@ __metadata: languageName: node linkType: hard -"invariant@npm:*, invariant@npm:2.2.4, invariant@npm:^2.2.2, invariant@npm:^2.2.4": +"invariant@npm:*, invariant@npm:2.2.4, invariant@npm:^2.2.2, invariant@npm:^2.2.3, invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" dependencies: @@ -19858,9 +23463,9 @@ __metadata: linkType: hard "ip@npm:^1.1.0, ip@npm:^1.1.5": - version: 1.1.8 - resolution: "ip@npm:1.1.8" - checksum: a2ade53eb339fb0cbe9e69a44caab10d6e3784662285eb5d2677117ee4facc33a64679051c35e0dfdb1a3983a51ce2f5d2cb36446d52e10d01881789b76e28fb + version: 1.1.5 + resolution: "ip@npm:1.1.5" + checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a languageName: node linkType: hard @@ -19871,6 +23476,13 @@ __metadata: languageName: node linkType: hard +"ipaddr.js@npm:1.9.0": + version: 1.9.0 + resolution: "ipaddr.js@npm:1.9.0" + checksum: 56254f753959132884d74355fc45fda74f120283695c831a07bfac3368965bc9452cbdb80d5e38a6211de4e98a32ddbcd2e640137eb3f79a251c5c725a9efbd6 + languageName: node + linkType: hard + "ipaddr.js@npm:1.9.1, ipaddr.js@npm:^1.9.0": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" @@ -19879,9 +23491,9 @@ __metadata: linkType: hard "irregular-plurals@npm:^3.2.0": - version: 3.5.0 - resolution: "irregular-plurals@npm:3.5.0" - checksum: 5b663091dc89155df7b2e9d053e8fb11941a0c4be95c4b6549ed3ea020489fdf4f75ea586c915b5b543704252679a5a6e8c6c3587da5ac3fc57b12da90a9aee7 + version: 3.2.0 + resolution: "irregular-plurals@npm:3.2.0" + checksum: 08945209b3898e84bdc2fb518eac6d2f684eb9addf4d676eaadb721687fd2954666586a6b89827bad8c1ad2951884e1d4f91127d5efbf5d0894bf7463467d9b4 languageName: node linkType: hard @@ -19944,7 +23556,14 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": +"is-arguments@npm:^1.0.4": + version: 1.0.4 + resolution: "is-arguments@npm:1.0.4" + checksum: a40ce1580cbb28b67790afe91d9c39a9016f165e724021f2c61da016d7382a1b04a202d9d4ea1c8b5d7fda7c15144aa5c4e92ea4ed0896e2b95f4f665a966cd5 + languageName: node + linkType: hard + +"is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" dependencies: @@ -20023,20 +23642,48 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^2.0.0": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 +"is-buffer@npm:^2.0.0, is-buffer@npm:~2.0.3": + version: 2.0.4 + resolution: "is-buffer@npm:2.0.4" + checksum: b1616ff40c1644e219d6038819044608e31edcc60eb287e5f214391222dea889a68c659f0654865ce34b6c4dcfa2c8cae0174343a0f6ae3f2150f7856326cb80 languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": +"is-callable@npm:^1.1.3": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard +"is-callable@npm:^1.1.4, is-callable@npm:^1.1.5": + version: 1.1.5 + resolution: "is-callable@npm:1.1.5" + checksum: 734cf282abf29c3bcfc00a7125a492a3e7e58109199f531d4f6951b433a7a37c57c4d956db1af0e6cd726718210c67e8c7f918c4f582b0d61dcde74525aac3e4 + languageName: node + linkType: hard + +"is-callable@npm:^1.2.0": + version: 1.2.0 + resolution: "is-callable@npm:1.2.0" + checksum: 628d786ebb816a28529cd9ee15533e50288715215d374b2c983e6e23b3ae564e55a1cbfed3e3e8935340601584279984d9363b7045458b24f6d7c44249f24cf5 + languageName: node + linkType: hard + +"is-callable@npm:^1.2.2": + version: 1.2.2 + resolution: "is-callable@npm:1.2.2" + checksum: 2bbf65bd5d39ccad3cae3954c482019466565a9b8027769a21cf2deebb25c195fb10f4974295b6118a815f6be3440bd7b7555ac742cf145f65a6a7d2484ebc3a + languageName: node + linkType: hard + +"is-callable@npm:^1.2.4": + version: 1.2.4 + resolution: "is-callable@npm:1.2.4" + checksum: 1a28d57dc435797dae04b173b65d6d1e77d4f16276e9eff973f994eadcfdc30a017e6a597f092752a083c1103cceb56c91e3dadc6692fedb9898dfaba701575f + languageName: node + linkType: hard + "is-ci@npm:^2.0.0": version: 2.0.0 resolution: "is-ci@npm:2.0.0" @@ -20048,6 +23695,17 @@ __metadata: languageName: node linkType: hard +"is-ci@npm:^3.0.0": + version: 3.0.0 + resolution: "is-ci@npm:3.0.0" + dependencies: + ci-info: ^3.1.1 + bin: + is-ci: bin.js + checksum: 4b45aef32dd42dcb1f6fb3cd4b3a7ee7e18ea47516d2129005f46c3f36983506bb471382bac890973cf48a2f60d926a24461674ca2d9dc10744d82d4a876c26b + languageName: node + linkType: hard + "is-color-stop@npm:^1.0.0": version: 1.1.0 resolution: "is-color-stop@npm:1.1.0" @@ -20062,12 +23720,30 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.0.0, is-core-module@npm:^2.11.0, is-core-module@npm:^2.12.0, is-core-module@npm:^2.9.0": - version: 2.12.1 - resolution: "is-core-module@npm:2.12.1" +"is-core-module@npm:^2.0.0": + version: 2.0.0 + resolution: "is-core-module@npm:2.0.0" dependencies: has: ^1.0.3 - checksum: f04ea30533b5e62764e7b2e049d3157dc0abd95ef44275b32489ea2081176ac9746ffb1cdb107445cf1ff0e0dfcad522726ca27c27ece64dadf3795428b8e468 + checksum: 7f7799eb008283b02ded17dc419f2e144f633b209bf76eed3409ca6da55925e16e882b5100ba92544dbf1673c82e62f8659b82a718424af0e8105e1a2aae7596 + languageName: node + linkType: hard + +"is-core-module@npm:^2.2.0, is-core-module@npm:^2.6.0": + version: 2.6.0 + resolution: "is-core-module@npm:2.6.0" + dependencies: + has: ^1.0.3 + checksum: 183b3b96fed19822b13959876b0317e61fc2cb5ebcbc21639904c81f7ae328af57f8e18cc4750a9c4abebd686130c70d34a89521e57dbe002edfa4614507ce18 + languageName: node + linkType: hard + +"is-core-module@npm:^2.9.0": + version: 2.11.0 + resolution: "is-core-module@npm:2.11.0" + dependencies: + has: ^1.0.3 + checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab languageName: node linkType: hard @@ -20089,7 +23765,14 @@ __metadata: languageName: node linkType: hard -"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": +"is-date-object@npm:^1.0.1": + version: 1.0.2 + resolution: "is-date-object@npm:1.0.2" + checksum: ac859426e5df031abd9d1eeed32a41cc0de06e47227bd972b8bc716460a9404654b3dba78f41e8171ccf535c4bfa6d72a8d1d15a0873f9646698af415e92c2fb + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" dependencies: @@ -20141,7 +23824,14 @@ __metadata: languageName: node linkType: hard -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": +"is-docker@npm:^2.0.0": + version: 2.0.0 + resolution: "is-docker@npm:2.0.0" + checksum: 9b0733c2b3933b0ff77204759d40d2b8226bf8aa2ceaf61be27dc1412bb48dc45b33e2ec613f2072d4c3f766fd521f64b3f1a5c1da1d688fde71e16610712f91 + languageName: node + linkType: hard + +"is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" bin: @@ -20166,6 +23856,13 @@ __metadata: languageName: node linkType: hard +"is-extglob@npm:^1.0.0": + version: 1.0.0 + resolution: "is-extglob@npm:1.0.0" + checksum: 5eea8517feeae5206547c0fc838c1416ec763b30093c286e1965a05f46b74a59ad391f912565f3b67c9c31cab4769ab9c35420e016b608acb47309be8d0d6e94 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.0, is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -20174,9 +23871,11 @@ __metadata: linkType: hard "is-finite@npm:^1.0.0": - version: 1.1.0 - resolution: "is-finite@npm:1.1.0" - checksum: 532b97ed3d03e04c6bd203984d9e4ba3c0c390efee492bad5d1d1cd1802a68ab27adbd3ef6382f6312bed6c8bb1bd3e325ea79a8dc8fe080ed7a06f5f97b93e7 + version: 1.0.2 + resolution: "is-finite@npm:1.0.2" + dependencies: + number-is-nan: ^1.0.0 + checksum: 4619b69013b276561ce2979b0d4fd121514eefdc8a654ceb80ab5bc01e7a57e95fe188f0902eed1737ac3dbf10448e72f7308ecac14a270bace8364f856faf26 languageName: node linkType: hard @@ -20226,6 +23925,15 @@ __metadata: languageName: node linkType: hard +"is-glob@npm:^2.0.0": + version: 2.0.1 + resolution: "is-glob@npm:2.0.1" + dependencies: + is-extglob: ^1.0.0 + checksum: 089f5f93640072491396a5f075ce73e949a90f35832b782bc49a6b7637d58e392d53cb0b395e059ccab70fcb82ff35d183f6f9ebbcb43227a1e02e3fed5430c9 + languageName: node + linkType: hard + "is-glob@npm:^3.0.0, is-glob@npm:^3.1.0": version: 3.1.0 resolution: "is-glob@npm:3.1.0" @@ -20235,12 +23943,12 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": + version: 4.0.1 + resolution: "is-glob@npm:4.0.1" dependencies: is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + checksum: 84627cad11b4e745f5db5a163f32c47b711585a5ff6e14f8f8d026db87f4cdd3e2c95f6fa1f94ad22e469f36d819ae2814f03f9c668b164422ac3354a94672d3 languageName: node linkType: hard @@ -20265,7 +23973,7 @@ __metadata: languageName: node linkType: hard -"is-installed-globally@npm:^0.3.2": +"is-installed-globally@npm:^0.3.1, is-installed-globally@npm:^0.3.2": version: 0.3.2 resolution: "is-installed-globally@npm:0.3.2" dependencies: @@ -20298,7 +24006,14 @@ __metadata: languageName: node linkType: hard -"is-map@npm:^2.0.1, is-map@npm:^2.0.2": +"is-map@npm:^2.0.1": + version: 2.0.1 + resolution: "is-map@npm:2.0.1" + checksum: f45f68cd764e8a4dae4a68a8cb892a14c642378959032297e3d598118b3322d680bc3d61ee4bfcfa0442cb1848758fd64c239419e740f65f9cd316477cdd21b1 + languageName: node + linkType: hard + +"is-map@npm:^2.0.2": version: 2.0.2 resolution: "is-map@npm:2.0.2" checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 @@ -20329,19 +24044,33 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a +"is-negative-zero@npm:^2.0.0": + version: 2.0.0 + resolution: "is-negative-zero@npm:2.0.0" + checksum: d9b402f8c248799f5dd6d6e87dccae6a23d3a5be96f8a66b8cbe5c31c810379e225760b2ecd75a6b6c4109f10f758d64c2bc0bd22456329f2f9d56e3935de415 + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.1": + version: 2.0.1 + resolution: "is-negative-zero@npm:2.0.1" + checksum: a46f2e0cb5e16fdb8f2011ed488979386d7e68d381966682e3f4c98fc126efe47f26827912baca2d06a02a644aee458b9cba307fb389f6b161e759125db7a3b8 + languageName: node + linkType: hard + +"is-npm@npm:^4.0.0": + version: 4.0.0 + resolution: "is-npm@npm:4.0.0" + checksum: c0d1550266c5e6fa35c1c1063ccd60fde9a5235686551ca0b1fc54ac10dd021911e2466fbee3c328f0aee1ea2ddb33b8034c062538b064dc32f93ad885ba54f8 languageName: node linkType: hard "is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" + version: 1.0.6 + resolution: "is-number-object@npm:1.0.6" dependencies: has-tostringtag: ^1.0.0 - checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + checksum: c697704e8fc2027fc41cb81d29805de4e8b6dc9c3efee93741dbf126a8ecc8443fef85adbc581415ae7e55d325e51d0a942324ae35c829131748cce39cba55f3 languageName: node linkType: hard @@ -20368,7 +24097,7 @@ __metadata: languageName: node linkType: hard -"is-obj@npm:^1.0.1": +"is-obj@npm:^1.0.0, is-obj@npm:^1.0.1": version: 1.0.1 resolution: "is-obj@npm:1.0.1" checksum: 3ccf0efdea12951e0b9c784e2b00e77e87b2f8bd30b42a498548a8afcc11b3287342a2030c308e473e93a7a19c9ea7854c99a8832a476591c727df2a9c79796c @@ -20383,9 +24112,9 @@ __metadata: linkType: hard "is-object@npm:^1.0.1": - version: 1.0.2 - resolution: "is-object@npm:1.0.2" - checksum: 971219c4b1985b9751f65e4c8296d3104f0457b0e8a70849e848a4a2208bc47317d73b3b85d4a369619cb2df8284dc22584cb2695a7d99aca5e8d0aa64fc075a + version: 1.0.1 + resolution: "is-object@npm:1.0.1" + checksum: 845eea5ecea9723c04809c9c502a19f318b486f796b128a7b8e5a228c7256c3db8c8201043577542075632e292cd4dfeb04627f12f53817d7bd9f30485cf4c34 languageName: node linkType: hard @@ -20448,7 +24177,14 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.1, is-path-inside@npm:^3.0.2": +"is-path-inside@npm:^3.0.1": + version: 3.0.2 + resolution: "is-path-inside@npm:3.0.2" + checksum: 108fc2a60c35f5b2b1cf0dba4e2622a900b3a54b424b3d9688b522e75abc962ef0a1dd7c4d909bc49a5ac2951836e6750fd1967ce43b0a03420e6649d7cda08b + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 @@ -20506,7 +24242,34 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.0.4, is-regex@npm:^1.1.2, is-regex@npm:^1.1.4": +"is-regex@npm:^1.0.4, is-regex@npm:^1.0.5": + version: 1.0.5 + resolution: "is-regex@npm:1.0.5" + dependencies: + has: ^1.0.3 + checksum: 33e70e084a949ee4c57ee12f2c26e9f5e9c09bb988638b116a0381909804b8556e244060ba4b051d2b6228d54447e9eaf6219f3c5a7b6d0afe70a951feec174b + languageName: node + linkType: hard + +"is-regex@npm:^1.1.0": + version: 1.1.0 + resolution: "is-regex@npm:1.1.0" + dependencies: + has-symbols: ^1.0.1 + checksum: 42b16159f0159e29bee6318895e5203f28d6ac6992d64888467ee6a6b381f8a42087de7b9df3e2defb2c0d74c3b5aca2cdfec4d18150a21153d538448aaf37ac + languageName: node + linkType: hard + +"is-regex@npm:^1.1.1": + version: 1.1.1 + resolution: "is-regex@npm:1.1.1" + dependencies: + has-symbols: ^1.0.1 + checksum: af1b307612f4405883ef42dec287884a9d6dc1e504ccc6232bbaf72faf25ee556f60aa62d68abb90487b390b9b83513d429365cd59f5c4362232bfe3b95b81a2 + languageName: node + linkType: hard + +"is-regex@npm:^1.1.2, is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" dependencies: @@ -20560,7 +24323,14 @@ __metadata: languageName: node linkType: hard -"is-set@npm:^2.0.1, is-set@npm:^2.0.2": +"is-set@npm:^2.0.1": + version: 2.0.1 + resolution: "is-set@npm:2.0.1" + checksum: 17a80d96298b5ad3b87d4525c55732c8ee64924df7089a08db681dc9d8e2401175411bda88b2327f21dd4820f28400de4252e359d145e6e7128a30fffa3da410 + languageName: node + linkType: hard + +"is-set@npm:^2.0.2": version: 2.0.2 resolution: "is-set@npm:2.0.2" checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 @@ -20584,13 +24354,20 @@ __metadata: linkType: hard "is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + version: 2.0.0 + resolution: "is-stream@npm:2.0.0" + checksum: 4dc47738e26bc4f1b3be9070b6b9e39631144f204fc6f87db56961220add87c10a999ba26cf81699f9ef9610426f69cb08a4713feff8deb7d8cadac907826935 + languageName: node + linkType: hard + +"is-string@npm:^1.0.4, is-string@npm:^1.0.5": + version: 1.0.5 + resolution: "is-string@npm:1.0.5" + checksum: 68d77a991f55592721cc7d5800ff95cdb2c4f242e3a98fdc939c409879f7b8f297b8352184032b6b2183994b4c457f42df8de004c58b5b43655c8b2f3e3ecc17 languageName: node linkType: hard -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": +"is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" dependencies: @@ -20599,16 +24376,25 @@ __metadata: languageName: node linkType: hard +"is-svg@npm:^3.0.0": + version: 3.0.0 + resolution: "is-svg@npm:3.0.0" + dependencies: + html-comment-regex: ^1.1.0 + checksum: 5acaa204075324618713ab22447a2828dd639dbd388b44a5969b813c6f77fb89900de958761f3a64165a2fff84127e687a6660ae874b7de9d673c73c92009e44 + languageName: node + linkType: hard + "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" + version: 1.0.3 + resolution: "is-symbol@npm:1.0.3" dependencies: - has-symbols: ^1.0.2 - checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + has-symbols: ^1.0.1 + checksum: c6d54bd01218fa202da8ce91525ca41a907819be5f000df9ab9621467e087eb36f34b2dbfa51a2a699a282e860681ffa6a787d69e944ba99a46d3df553ff2798 languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3": version: 1.1.10 resolution: "is-typed-array@npm:1.1.10" dependencies: @@ -20658,15 +24444,6 @@ __metadata: languageName: node linkType: hard -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" - dependencies: - call-bind: ^1.0.2 - checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de - languageName: node - linkType: hard - "is-weakset@npm:^2.0.1": version: 2.0.2 resolution: "is-weakset@npm:2.0.2" @@ -20714,6 +24491,13 @@ __metadata: languageName: node linkType: hard +"is-yarn-global@npm:^0.3.0": + version: 0.3.0 + resolution: "is-yarn-global@npm:0.3.0" + checksum: bca013d65fee2862024c9fbb3ba13720ffca2fe750095174c1c80922fdda16402b5c233f5ac9e265bc12ecb5446e7b7f519a32d9541788f01d4d44e24d2bf481 + languageName: node + linkType: hard + "isarray@npm:0.0.1": version: 0.0.1 resolution: "isarray@npm:0.0.1" @@ -20822,7 +24606,14 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.0.0-alpha.1": + version: 3.0.0 + resolution: "istanbul-lib-coverage@npm:3.0.0" + checksum: ea57c2428858cc5d1e04c0e28b362950bbf6415e8ba1235cdd6f4c8dc3c57cb950db8b4e8a4f7e33abc240aa1eb816dba0d7285bdb8b70bda22bb2082492dbfc + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 @@ -20850,7 +24641,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": +"istanbul-lib-instrument@npm:^5.0.4": version: 5.2.1 resolution: "istanbul-lib-instrument@npm:5.2.1" dependencies: @@ -20864,16 +24655,17 @@ __metadata: linkType: hard "istanbul-lib-processinfo@npm:^2.0.2": - version: 2.0.3 - resolution: "istanbul-lib-processinfo@npm:2.0.3" + version: 2.0.2 + resolution: "istanbul-lib-processinfo@npm:2.0.2" dependencies: archy: ^1.0.0 - cross-spawn: ^7.0.3 - istanbul-lib-coverage: ^3.2.0 + cross-spawn: ^7.0.0 + istanbul-lib-coverage: ^3.0.0-alpha.1 + make-dir: ^3.0.0 p-map: ^3.0.0 rimraf: ^3.0.0 - uuid: ^8.3.2 - checksum: 501729e809a4e98bbb9f62f89cae924be81655a7ff8118661f8834a10bb89ed5d3a5099ea0b6555e1a8ee15a0099cb64f7170b89aae155ab2afacfe8dd94421a + uuid: ^3.3.3 + checksum: 400bd0b25b623c172e48d37e5bdda7a58b2fe5beeedfeb03099aed3385223d31e4cfa6f9932be07bbf06cfd039023301bce81d3b70b9a20a79a38b0f12cb261a languageName: node linkType: hard @@ -20889,17 +24681,27 @@ __metadata: linkType: hard "istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" + version: 4.0.0 + resolution: "istanbul-lib-source-maps@npm:4.0.0" dependencies: debug: ^4.1.1 istanbul-lib-coverage: ^3.0.0 source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + checksum: 292bfb4083e5f8783cdf829a7686b1a377d0c6c2119d4343c8478e948b38146c4827cddc7eee9f57605acd63c291376d67e4a84163d37c5fc78ad0f27f7e2621 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.0.2": + version: 3.0.2 + resolution: "istanbul-reports@npm:3.0.2" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: c5da63f1f4610f47f3015c525a3bc2fb4c87a8791ae452ee3983546d7a2873f0cf5d5fff7c3735ac52943c5b3506f49c294c92f1837df6ec03312625ccd176d7 languageName: node linkType: hard -"istanbul-reports@npm:^3.0.2, istanbul-reports@npm:^3.1.3, istanbul-reports@npm:^3.1.4": +"istanbul-reports@npm:^3.1.4": version: 3.1.5 resolution: "istanbul-reports@npm:3.1.5" dependencies: @@ -20920,13 +24722,13 @@ __metadata: linkType: hard "iterate-iterator@npm:^1.0.1": - version: 1.0.2 - resolution: "iterate-iterator@npm:1.0.2" - checksum: 97b3ed4f2bebe038be57d03277879e406b2c537ceeeab7f82d4167f9a3cff872cc2cc5da3dc9920ff544ca247329d2a4d44121bb8ef8d0807a72176bdbc17c84 + version: 1.0.1 + resolution: "iterate-iterator@npm:1.0.1" + checksum: 3520979f131d12881a3d640905569cfaca51bcab635022e4663dd3cd78e252e88fe53be6f034ece99e888eb792c7772bc7af34d3158b64c00ec0c06a290561ce languageName: node linkType: hard -"iterate-value@npm:^1.0.2": +"iterate-value@npm:^1.0.0": version: 1.0.2 resolution: "iterate-value@npm:1.0.2" dependencies: @@ -20975,14 +24777,14 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-changed-files@npm:27.5.1" +"jest-changed-files@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-changed-files@npm:27.2.4" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^27.2.4 execa: ^5.0.0 throat: ^6.0.1 - checksum: 95e9dc74c3ca688ef85cfeab270f43f8902721a6c8ade6ac2459459a77890c85977f537d6fb809056deaa6d9c3f075fa7d2699ff5f3bf7d3fda17c3760b79b15 + checksum: 8dd7c0533d00a0e9d0f22201c447b111c30f8e4f62a7342054f2933ecf59ca212c11e477e8b463c8969507c328b7308a0c983aca7b7b93fec00a8bcb5df6ad11 languageName: node linkType: hard @@ -21015,30 +24817,30 @@ __metadata: languageName: node linkType: hard -"jest-circus@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-circus@npm:27.5.1" +"jest-circus@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-circus@npm:27.2.4" dependencies: - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/environment": ^27.2.4 + "@jest/test-result": ^27.2.4 + "@jest/types": ^27.2.4 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 - expect: ^27.5.1 + expect: ^27.2.4 is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 + jest-each: ^27.2.4 + jest-matcher-utils: ^27.2.4 + jest-message-util: ^27.2.4 + jest-runtime: ^27.2.4 + jest-snapshot: ^27.2.4 + jest-util: ^27.2.4 + pretty-format: ^27.2.4 slash: ^3.0.0 stack-utils: ^2.0.3 throat: ^6.0.1 - checksum: 6192dccbccb3a6acfa361cbb97bdbabe94864ccf3d885932cfd41f19534329d40698078cf9be1489415e8234255d6ea9f9aff5396b79ad842a6fca6e6fc08fd0 + checksum: e936b0812c03f147b3af63b3519a0c2d3e7b934a8823a21f46b8dc6330443dc8405f4023349bfd7c794713de1aff3b5fc2a52f584dad40df72ef97ffe7114304 languageName: node linkType: hard @@ -21065,20 +24867,20 @@ __metadata: languageName: node linkType: hard -"jest-cli@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-cli@npm:27.5.1" +"jest-cli@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-cli@npm:27.2.4" dependencies: - "@jest/core": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/core": ^27.2.4 + "@jest/test-result": ^27.2.4 + "@jest/types": ^27.2.4 chalk: ^4.0.0 exit: ^0.1.2 - graceful-fs: ^4.2.9 + graceful-fs: ^4.2.4 import-local: ^3.0.2 - jest-config: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-config: ^27.2.4 + jest-util: ^27.2.4 + jest-validate: ^27.2.4 prompts: ^2.0.1 yargs: ^16.2.0 peerDependencies: @@ -21088,7 +24890,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 6c0a69fb48e500241409e09ff743ed72bc6578d7769e2c994724e7ef1e5587f6c1f85dc429e93b98ae38a365222993ee70f0acc2199358992120900984f349e5 + checksum: 83f289820eb7f993bb1f571474fd87a8a6f13e79d07b99779c43bbea79ff2adc7a6738555d222b0216a97a413ca3994d8bec685d99ebda5ad1b42dde41b3d0cd languageName: node linkType: hard @@ -21123,40 +24925,37 @@ __metadata: languageName: node linkType: hard -"jest-config@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-config@npm:27.5.1" +"jest-config@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-config@npm:27.2.4" dependencies: - "@babel/core": ^7.8.0 - "@jest/test-sequencer": ^27.5.1 - "@jest/types": ^27.5.1 - babel-jest: ^27.5.1 + "@babel/core": ^7.1.0 + "@jest/test-sequencer": ^27.2.4 + "@jest/types": ^27.2.4 + babel-jest: ^27.2.4 chalk: ^4.0.0 - ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.1 - graceful-fs: ^4.2.9 - jest-circus: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-get-type: ^27.5.1 - jest-jasmine2: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runner: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + graceful-fs: ^4.2.4 + is-ci: ^3.0.0 + jest-circus: ^27.2.4 + jest-environment-jsdom: ^27.2.4 + jest-environment-node: ^27.2.4 + jest-get-type: ^27.0.6 + jest-jasmine2: ^27.2.4 + jest-regex-util: ^27.0.6 + jest-resolve: ^27.2.4 + jest-runner: ^27.2.4 + jest-util: ^27.2.4 + jest-validate: ^27.2.4 micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^27.5.1 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 + pretty-format: ^27.2.4 peerDependencies: ts-node: ">=9.0.0" peerDependenciesMeta: ts-node: optional: true - checksum: 1188fd46c0ed78cbe3175eb9ad6712ccf74a74be33d9f0d748e147c107f0889f8b701fbff1567f31836ae18597dacdc43d6a8fc30dd34ade6c9229cc6c7cb82d + checksum: ccadd705ee0f396909cc78fcf223a8e7b392e33e28904c3b7083d663cc3f8370179d24ff9537e977216130ea851551bdaadc7bbe1163cc605920e129b103819e languageName: node linkType: hard @@ -21172,6 +24971,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^25.2.1": + version: 25.5.0 + resolution: "jest-diff@npm:25.5.0" + dependencies: + chalk: ^3.0.0 + diff-sequences: ^25.2.6 + jest-get-type: ^25.2.6 + pretty-format: ^25.5.0 + checksum: b7e9739b0fc2ba89a044e6cf4dd5a53f4bb00800a153cbc6eb9b4e91da3241bf0cb2ced007fd220182f41be4bbb7dd645b7c8b9fdb299b2720056209d7d56960 + languageName: node + linkType: hard + "jest-diff@npm:^26.6.2": version: 26.6.2 resolution: "jest-diff@npm:26.6.2" @@ -21184,15 +24995,15 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-diff@npm:27.5.1" +"jest-diff@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-diff@npm:27.2.4" dependencies: chalk: ^4.0.0 - diff-sequences: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 8be27c1e1ee57b2bb2bef9c0b233c19621b4c43d53a3c26e2c00a4e805eb4ea11fe1694a06a9fb0e80ffdcfdc0d2b1cb0b85920b3f5c892327ecd1e7bd96b865 + diff-sequences: ^27.0.6 + jest-get-type: ^27.0.6 + pretty-format: ^27.2.4 + checksum: 34c3af73ef1bfd3bf8e16b1531cf91cf6d7fa8cf48499e65dfc50620464315579879b72a80f19b20867a82de6e5325ad933fdea6aaac956272f018a01b6e1d90 languageName: node linkType: hard @@ -21217,12 +25028,12 @@ __metadata: languageName: node linkType: hard -"jest-docblock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-docblock@npm:27.5.1" +"jest-docblock@npm:^27.0.6": + version: 27.0.6 + resolution: "jest-docblock@npm:27.0.6" dependencies: detect-newline: ^3.0.0 - checksum: c0fed6d55b229d8bffdd8d03f121dd1a3be77c88f50552d374f9e1ea3bde57bf6bea017a0add04628d98abcb1bfb48b456438eeca8a74ef0053f4dae3b95d29c + checksum: 6d68b9f2bef76e0bde06a8e6d13a7e1d2fc67f61a8fa8a089727198e565510aef852a0a089c3c4157b00a82597f792fa83c8480499203978ef38d8cd6578bea0 languageName: node linkType: hard @@ -21239,16 +25050,16 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-each@npm:27.5.1" +"jest-each@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-each@npm:27.2.4" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^27.2.4 chalk: ^4.0.0 - jest-get-type: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - checksum: b5a6d8730fd938982569c9e0b42bdf3c242f97b957ed8155a6473b5f7b540970f8685524e7f53963dc1805319f4b6602abfc56605590ca19d55bd7a87e467e63 + jest-get-type: ^27.0.6 + jest-util: ^27.2.4 + pretty-format: ^27.2.4 + checksum: c5acb5c3d7e0c5a86ee800c7990dde812de9c0c21e3d15fee11f5275ca828c5442af956d79fd95820a9c5445a281a3ae3525181f2ee1a3b3abc34d797e72d34c languageName: node linkType: hard @@ -21267,18 +25078,18 @@ __metadata: languageName: node linkType: hard -"jest-environment-jsdom@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-jsdom@npm:27.5.1" +"jest-environment-jsdom@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-environment-jsdom@npm:27.2.4" dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/environment": ^27.2.4 + "@jest/fake-timers": ^27.2.4 + "@jest/types": ^27.2.4 "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 + jest-mock: ^27.2.4 + jest-util: ^27.2.4 jsdom: ^16.6.0 - checksum: bc104aef7d7530d0740402aa84ac812138b6d1e51fe58adecce679f82b99340ddab73e5ec68fa079f33f50c9ddec9728fc9f0ddcca2ad6f0b351eed2762cc555 + checksum: 1a0fdfb48d74340e6f9af4e4415a9f412967e41d7a57378adeb19fc5d86327080c106c658272510a2facc24f2fad0d3ba124628add4f43d042ed020bd3df7b99 languageName: node linkType: hard @@ -21296,17 +25107,17 @@ __metadata: languageName: node linkType: hard -"jest-environment-node@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-node@npm:27.5.1" +"jest-environment-node@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-environment-node@npm:27.2.4" dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/environment": ^27.2.4 + "@jest/fake-timers": ^27.2.4 + "@jest/types": ^27.2.4 "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 0f988330c4f3eec092e3fb37ea753b0c6f702e83cd8f4d770af9c2bf964a70bc45fbd34ec6fdb6d71ce98a778d9f54afd673e63f222e4667fff289e8069dba39 + jest-mock: ^27.2.4 + jest-util: ^27.2.4 + checksum: b131068b9cb58c982f70409284810cb9f5e7c0d4381fa08b041ea852f925c09030e2ec05e45b5950253ea49844427887e2292a388f3e19a58dee877f85afb7e8 languageName: node linkType: hard @@ -21335,6 +25146,13 @@ __metadata: languageName: node linkType: hard +"jest-get-type@npm:^25.2.6": + version: 25.2.6 + resolution: "jest-get-type@npm:25.2.6" + checksum: d1f59027b0baa6b8a6f4b3f900de1a77714647351907981ea57c16340e6a58a9c702b580055331af25ee3872768f1241c0616de9777a63e4eb32fc409dcbf9ac + languageName: node + linkType: hard + "jest-get-type@npm:^26.3.0": version: 26.3.0 resolution: "jest-get-type@npm:26.3.0" @@ -21342,10 +25160,10 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-get-type@npm:27.5.1" - checksum: 63064ab70195c21007d897c1157bf88ff94a790824a10f8c890392e7d17eda9c3900513cb291ca1c8d5722cad79169764e9a1279f7c8a9c4cd6e9109ff04bbc0 +"jest-get-type@npm:^27.0.6": + version: 27.0.6 + resolution: "jest-get-type@npm:27.0.6" + checksum: 2d4c1381bb5ddb212d80ad00497c7cbb3312358e10b62ac19f1fe5a28ae4af709202bfc235b77ec508970b83fd89945937652d636bcaf88614fa00028a6f3138 languageName: node linkType: hard @@ -21356,7 +25174,7 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^24.9.0": +"jest-haste-map@npm:^24.7.1, jest-haste-map@npm:^24.9.0": version: 24.9.0 resolution: "jest-haste-map@npm:24.9.0" dependencies: @@ -21404,27 +25222,27 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-haste-map@npm:27.5.1" +"jest-haste-map@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-haste-map@npm:27.2.4" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^27.2.4 "@types/graceful-fs": ^4.1.2 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^27.5.1 - jest-serializer: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 + graceful-fs: ^4.2.4 + jest-regex-util: ^27.0.6 + jest-serializer: ^27.0.6 + jest-util: ^27.2.4 + jest-worker: ^27.2.4 micromatch: ^4.0.4 walker: ^1.0.7 dependenciesMeta: fsevents: optional: true - checksum: e092a1412829a9254b4725531ee72926de530f77fda7b0d9ea18008fb7623c16f72e772d8e93be71cac9e591b2c6843a669610887dd2c89bd9eb528856e3ab47 + checksum: f6dc54e0b5aed8c20294b133d8f80315f64c5cc87e1df2407d764b8b7f3e2b72ac066eeae2bfe54a74e485ebed07d02be3972a1864c6e7e7a113bf2fde679e4a languageName: node linkType: hard @@ -21477,28 +25295,29 @@ __metadata: languageName: node linkType: hard -"jest-jasmine2@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-jasmine2@npm:27.5.1" +"jest-jasmine2@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-jasmine2@npm:27.2.4" dependencies: - "@jest/environment": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@babel/traverse": ^7.1.0 + "@jest/environment": ^27.2.4 + "@jest/source-map": ^27.0.6 + "@jest/test-result": ^27.2.4 + "@jest/types": ^27.2.4 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 - expect: ^27.5.1 + expect: ^27.2.4 is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 + jest-each: ^27.2.4 + jest-matcher-utils: ^27.2.4 + jest-message-util: ^27.2.4 + jest-runtime: ^27.2.4 + jest-snapshot: ^27.2.4 + jest-util: ^27.2.4 + pretty-format: ^27.2.4 throat: ^6.0.1 - checksum: b716adf253ceb73db661936153394ab90d7f3a8ba56d6189b7cd4df8e4e2a4153b4e63ebb5d36e29ceb0f4c211d5a6f36ab7048c6abbd881c8646567e2ab8e6d + checksum: 73530d23be423bdfd22ca322104569a15bdbd3f2994f4b4d752a9f9d93d87477adce33ad23ff38455057aefcfa7984dc6be66b1d04bfaefef124bcc112e997fa languageName: node linkType: hard @@ -21512,13 +25331,13 @@ __metadata: languageName: node linkType: hard -"jest-leak-detector@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-leak-detector@npm:27.5.1" +"jest-leak-detector@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-leak-detector@npm:27.2.4" dependencies: - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 5c9689060960567ddaf16c570d87afa760a461885765d2c71ef4f4857bbc3af1482c34e3cce88e50beefde1bf35e33530b020480752057a7e3dbb1ca0bae359f + jest-get-type: ^27.0.6 + pretty-format: ^27.2.4 + checksum: 4ae9473a7bc9c82c74b2aa2b442d266e1127a466ecd0fabaef6f531c346025700776f1036fa1b1d78b261cecfeb17ff7dee592a41d4b4c960508c4ea53868070 languageName: node linkType: hard @@ -21557,15 +25376,15 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^27.0.0, jest-matcher-utils@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-matcher-utils@npm:27.5.1" +"jest-matcher-utils@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-matcher-utils@npm:27.2.4" dependencies: chalk: ^4.0.0 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: bb2135fc48889ff3fe73888f6cc7168ddab9de28b51b3148f820c89fdfd2effdcad005f18be67d0b9be80eda208ad47290f62f03d0a33f848db2dd0273c8217a + jest-diff: ^27.2.4 + jest-get-type: ^27.0.6 + pretty-format: ^27.2.4 + checksum: 843038daa25bad7fb5e915f57c1f054f4fd488546bba83d6c9a6d64e3f59cb02083ca123cccfbd6462a2273097898195e82a50a2b79e058ce5e0228accdf46ec languageName: node linkType: hard @@ -21614,20 +25433,20 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-message-util@npm:27.5.1" +"jest-message-util@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-message-util@npm:27.2.4" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^27.5.1 + "@jest/types": ^27.2.4 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 - graceful-fs: ^4.2.9 + graceful-fs: ^4.2.4 micromatch: ^4.0.4 - pretty-format: ^27.5.1 + pretty-format: ^27.2.4 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: eb6d637d1411c71646de578c49826b6da8e33dd293e501967011de9d1916d53d845afbfb52a5b661ff1c495be7c13f751c48c7f30781fd94fbd64842e8195796 + checksum: 61c43fdc8f7b1ecdffa311d9f7f9ad34e9e74abd4484ac7188ff0717c1f2bf05816bb302e4c454562ce1065ebe8583891d1f6e58a0b9cbc8fe04eb625fad5aea languageName: node linkType: hard @@ -21667,7 +25486,7 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^27.0.6, jest-mock@npm:^27.5.1": +"jest-mock@npm:^27.0.6": version: 27.5.1 resolution: "jest-mock@npm:27.5.1" dependencies: @@ -21677,15 +25496,25 @@ __metadata: languageName: node linkType: hard +"jest-mock@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-mock@npm:27.2.4" + dependencies: + "@jest/types": ^27.2.4 + "@types/node": "*" + checksum: 779507837588a725b716379a78902ed39f41c39bcdcc828c2f2666388f5411ec8dce362b1b25d85e7ea376c8b12c74550bf9f048b226274a7bcd245af6b3473c + languageName: node + linkType: hard + "jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" + version: 1.2.2 + resolution: "jest-pnp-resolver@npm:1.2.2" peerDependencies: jest-resolve: "*" peerDependenciesMeta: jest-resolve: optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + checksum: bd85dcc0e76e0eb0c3d56382ec140f08d25ff4068cda9d0e360bb78fb176cb726d0beab82dc0e8694cafd09f55fee7622b8bcb240afa5fad301f4ed3eebb4f47 languageName: node linkType: hard @@ -21703,10 +25532,10 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-regex-util@npm:27.5.1" - checksum: d45ca7a9543616a34f7f3079337439cf07566e677a096472baa2810e274b9808b76767c97b0a4029b8a5b82b9d256dee28ef9ad4138b2b9e5933f6fac106c418 +"jest-regex-util@npm:^27.0.6": + version: 27.0.6 + resolution: "jest-regex-util@npm:27.0.6" + checksum: 4d613b00f2076560e9d5e5674ec63a4130d7b1584dbbf25d84d3a455b0ff7a12d8f94eaa00facd7934d285330d370c270ca093667d537a5842e95457e8e1ecf4 languageName: node linkType: hard @@ -21728,14 +25557,14 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve-dependencies@npm:27.5.1" +"jest-resolve-dependencies@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-resolve-dependencies@npm:27.2.4" dependencies: - "@jest/types": ^27.5.1 - jest-regex-util: ^27.5.1 - jest-snapshot: ^27.5.1 - checksum: c67af97afad1da88f5530317c732bbd1262d1225f6cd7f4e4740a5db48f90ab0bd8564738ac70d1a43934894f9aef62205c1b8f8ee89e5c7a737e6a121ee4c25 + "@jest/types": ^27.2.4 + jest-regex-util: ^27.0.6 + jest-snapshot: ^27.2.4 + checksum: 63bbbd983996e42539f12da7ab6b62bf07ce2002cce5d60844c04599556f2d511c0a8f6cdf0b023fd9b0a33426405f7f6ed68be113666dcc5b9454da1c30e586 languageName: node linkType: hard @@ -21771,21 +25600,21 @@ __metadata: languageName: node linkType: hard -"jest-resolve@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve@npm:27.5.1" +"jest-resolve@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-resolve@npm:27.2.4" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^27.2.4 chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 + escalade: ^3.1.1 + graceful-fs: ^4.2.4 + jest-haste-map: ^27.2.4 jest-pnp-resolver: ^1.2.2 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-util: ^27.2.4 + jest-validate: ^27.2.4 resolve: ^1.20.0 - resolve.exports: ^1.1.0 slash: ^3.0.0 - checksum: 735830e7265b20a348029738680bb2f6e37f80ecea86cda869a4c318ba3a45d39c7a3a873a22f7f746d86258c50ead6e7f501de043e201c095d7ba628a1c440f + checksum: 07327a8db2abcfde9462001f3e76a1baac2bffbea4a5b023da1a9baaf501086f86fa07986be8b374c55b128c093d64f050082788d16d8be9cbdfb296cebf6998 languageName: node linkType: hard @@ -21817,32 +25646,33 @@ __metadata: languageName: node linkType: hard -"jest-runner@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runner@npm:27.5.1" +"jest-runner@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-runner@npm:27.2.4" dependencies: - "@jest/console": ^27.5.1 - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^27.2.4 + "@jest/environment": ^27.2.4 + "@jest/test-result": ^27.2.4 + "@jest/transform": ^27.2.4 + "@jest/types": ^27.2.4 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.8.1 - graceful-fs: ^4.2.9 - jest-docblock: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-leak-detector: ^27.5.1 - jest-message-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runtime: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 + exit: ^0.1.2 + graceful-fs: ^4.2.4 + jest-docblock: ^27.0.6 + jest-environment-jsdom: ^27.2.4 + jest-environment-node: ^27.2.4 + jest-haste-map: ^27.2.4 + jest-leak-detector: ^27.2.4 + jest-message-util: ^27.2.4 + jest-resolve: ^27.2.4 + jest-runtime: ^27.2.4 + jest-util: ^27.2.4 + jest-worker: ^27.2.4 source-map-support: ^0.5.6 throat: ^6.0.1 - checksum: 5bbe6cf847dd322b3332ec9d6977b54f91bd5f72ff620bc1a0192f0f129deda8aa7ca74c98922187a7aa87d8e0ce4f6c50e99a7ccb2a310bf4d94be2e0c3ce8e + checksum: b64f0f23d61e267e63bbc2c5e61414fd78d76c75bf208c0e07efefe7092e458a814df7ded1cead0ee6d6ba5c24f229131a99e69832fd27bb3121200ec4b64472 languageName: node linkType: hard @@ -21883,37 +25713,42 @@ __metadata: languageName: node linkType: hard -"jest-runtime@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runtime@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/globals": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 +"jest-runtime@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-runtime@npm:27.2.4" + dependencies: + "@jest/console": ^27.2.4 + "@jest/environment": ^27.2.4 + "@jest/fake-timers": ^27.2.4 + "@jest/globals": ^27.2.4 + "@jest/source-map": ^27.0.6 + "@jest/test-result": ^27.2.4 + "@jest/transform": ^27.2.4 + "@jest/types": ^27.2.4 + "@types/yargs": ^16.0.0 chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 execa: ^5.0.0 + exit: ^0.1.2 glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 + graceful-fs: ^4.2.4 + jest-haste-map: ^27.2.4 + jest-message-util: ^27.2.4 + jest-mock: ^27.2.4 + jest-regex-util: ^27.0.6 + jest-resolve: ^27.2.4 + jest-snapshot: ^27.2.4 + jest-util: ^27.2.4 + jest-validate: ^27.2.4 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 929e3df0c53dab43f831f2af4e2996b22aa8cb2d6d483919d6b0426cbc100098fd5b777b998c6568b77f8c4d860b2e83127514292ff61416064f5ef926492386 + yargs: ^16.2.0 + checksum: 166f8d55c640ba6f1fb86e1d8fc26e1a735ec4fbfd2d79408ec15fee301b07f09e11ce3fea35bc31ccfdc45fe7bcf687f1f9487fe632c7db3821dbd037d3181e languageName: node linkType: hard -"jest-serializer@npm:^24.9.0": +"jest-serializer@npm:^24.4.0, jest-serializer@npm:^24.9.0": version: 24.9.0 resolution: "jest-serializer@npm:24.9.0" checksum: 56d70bd50ebd71de7a38e1f94ef2fdf1293c3810ef6d372b69238263625d3df1e6749417872bc6be0515e39832f4c40df03c74d20d8f0f43efd14ea21e22178d @@ -21930,13 +25765,13 @@ __metadata: languageName: node linkType: hard -"jest-serializer@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-serializer@npm:27.5.1" +"jest-serializer@npm:^27.0.6": + version: 27.0.6 + resolution: "jest-serializer@npm:27.0.6" dependencies: "@types/node": "*" - graceful-fs: ^4.2.9 - checksum: 803e03a552278610edc6753c0dd9fa5bb5cd3ca47414a7b2918106efb62b79fd5e9ae785d0a21f12a299fa599fea8acc1fa6dd41283328cee43962cf7df9bb44 + graceful-fs: ^4.2.4 + checksum: b0b8d97cb17ad4d1414769e4c81441c608cdfb7e3519afdcddc0f660dae4950cb30aad75a414dde97499c4830d961e8dff09d8683911295e299f0d86a104abdc languageName: node linkType: hard @@ -21964,33 +25799,35 @@ __metadata: languageName: node linkType: hard -"jest-snapshot@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-snapshot@npm:27.5.1" +"jest-snapshot@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-snapshot@npm:27.2.4" dependencies: "@babel/core": ^7.7.2 "@babel/generator": ^7.7.2 + "@babel/parser": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.0.0 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/transform": ^27.2.4 + "@jest/types": ^27.2.4 "@types/babel__traverse": ^7.0.4 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^27.5.1 - graceful-fs: ^4.2.9 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 + expect: ^27.2.4 + graceful-fs: ^4.2.4 + jest-diff: ^27.2.4 + jest-get-type: ^27.0.6 + jest-haste-map: ^27.2.4 + jest-matcher-utils: ^27.2.4 + jest-message-util: ^27.2.4 + jest-resolve: ^27.2.4 + jest-util: ^27.2.4 natural-compare: ^1.4.0 - pretty-format: ^27.5.1 + pretty-format: ^27.2.4 semver: ^7.3.2 - checksum: a5cfadf0d21cd76063925d1434bc076443ed6d87847d0e248f0b245f11db3d98ff13e45cc03b15404027dabecd712d925f47b6eae4f64986f688640a7d362514 + checksum: f697643871c9bf523389f7b178b81902697269ae956c3f550eda055fe58151c706bab593158023ec36db6009a4dce9a213e65f424346631639c9495e66c6da3f languageName: node linkType: hard @@ -22028,7 +25865,7 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^27.0.0, jest-util@npm:^27.5.1": +"jest-util@npm:^27.0.0": version: 27.5.1 resolution: "jest-util@npm:27.5.1" dependencies: @@ -22042,6 +25879,20 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-util@npm:27.2.4" + dependencies: + "@jest/types": ^27.2.4 + "@types/node": "*" + chalk: ^4.0.0 + graceful-fs: ^4.2.4 + is-ci: ^3.0.0 + picomatch: ^2.2.3 + checksum: 319f583a3279768b017e5462d647271191034fccdf84bacdc6a54f1750bf21f1fa16bd960515883959b0a1a0cb7346fdc627448c5a3bd8f00100dcb6f3aa8305 + languageName: node + linkType: hard + "jest-util@npm:^29.5.0": version: 29.5.0 resolution: "jest-util@npm:29.5.0" @@ -22056,7 +25907,7 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^24.9.0": +"jest-validate@npm:^24.7.0, jest-validate@npm:^24.9.0": version: 24.9.0 resolution: "jest-validate@npm:24.9.0" dependencies: @@ -22084,17 +25935,17 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-validate@npm:27.5.1" +"jest-validate@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-validate@npm:27.2.4" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^27.2.4 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^27.5.1 + jest-get-type: ^27.0.6 leven: ^3.1.0 - pretty-format: ^27.5.1 - checksum: 82e870f8ee7e4fb949652711b1567f05ae31c54be346b0899e8353e5c20fad7692b511905b37966945e90af8dc0383eb41a74f3ffefb16140ea4f9164d841412 + pretty-format: ^27.2.4 + checksum: a1ba014a387b03e1740a671b70a7ee68923ddb9479d3459e152a3f21dfa3734e0f77c0edc95aff2695ecbb21d2be951aceaa5071011b2ef196b9ea4ac3dde57b languageName: node linkType: hard @@ -22130,32 +25981,32 @@ __metadata: languageName: node linkType: hard -"jest-watcher@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-watcher@npm:27.5.1" +"jest-watcher@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-watcher@npm:27.2.4" dependencies: - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/test-result": ^27.2.4 + "@jest/types": ^27.2.4 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - jest-util: ^27.5.1 + jest-util: ^27.2.4 string-length: ^4.0.1 - checksum: 191c4e9c278c0902ade1a8a80883ac244963ba3e6e78607a3d5f729ccca9c6e71fb3b316f87883658132641c5d818aa84202585c76752e03c539e6cbecb820bd + checksum: 52ef58cb84019216456e740cd785b84e7744f6ea6b53565e2412db78ac1d72962cccbfd16478e57ec9678e85e047cc27a602cf564b96f7eb9924b10471567a87 languageName: node linkType: hard "jest-when@npm:^2.7.2": - version: 2.8.1 - resolution: "jest-when@npm:2.8.1" + version: 2.7.2 + resolution: "jest-when@npm:2.7.2" dependencies: bunyan: ^1.8.12 expect: ^24.8.0 - checksum: 71160a38bf82b56f49b08d842782e0dddc93112bcdcaa22c2d4b07f5647c7ef3bd2a880df34961c6c80192f922807c8edaa093a06806cc468295928e9d9cf50c + checksum: 5389f474f8edd415d6f94b2b6407e5c7329d15b299dcc602eef04f111387667a63003dce0d6b754ebe37db4a04f424c16cc9e9b40f684061f324ee1e58e3ce4b languageName: node linkType: hard -"jest-worker@npm:^24.9.0": +"jest-worker@npm:^24.6.0, jest-worker@npm:^24.9.0": version: 24.9.0 resolution: "jest-worker@npm:24.9.0" dependencies: @@ -22176,14 +26027,14 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^27.4.5, jest-worker@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" +"jest-worker@npm:^27.2.4": + version: 27.2.4 + resolution: "jest-worker@npm:27.2.4" dependencies: "@types/node": "*" merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + checksum: 0caae100e97e247a1c0140928fff075aade1a41317f18316e63db32b626858dff3552bf4e09c9c3bd9af5e8dbe92123fdaed3c9cc8f5439ec64cd970c612bd5d languageName: node linkType: hard @@ -22213,12 +26064,12 @@ __metadata: linkType: hard "jest@npm:^27.0.6": - version: 27.5.1 - resolution: "jest@npm:27.5.1" + version: 27.2.4 + resolution: "jest@npm:27.2.4" dependencies: - "@jest/core": ^27.5.1 + "@jest/core": ^27.2.4 import-local: ^3.0.2 - jest-cli: ^27.5.1 + jest-cli: ^27.2.4 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -22226,22 +26077,29 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 96f1d69042b3c6dfc695f2a4e4b0db38af6fb78582ad1a02beaa57cfcd77cbd31567d7d865c1c85709b7c3e176eefa3b2035ffecd646005f15d8ef528eccf205 + checksum: 49538c7b16ee98ec0d2143e1970c9c4792511bc9e0cafc8f3de7e64f690f13ade3841340700186081484e48324a98931ce858bb3d7ae2efec7beeb8914339fbe languageName: node linkType: hard "jetifier@npm:^1.6.2": - version: 1.6.8 - resolution: "jetifier@npm:1.6.8" + version: 1.6.6 + resolution: "jetifier@npm:1.6.6" bin: jetifier: bin/jetify jetifier-standalone: bin/jetifier-standalone jetify: bin/jetify - checksum: 6cdecf7683bb2f6e89e48442365d8bac6244c74ffa286b1b45d97ffa2a833901d0f4b86d0b83d4babec2b71385104214248f1b8539d82e8909989adbf16d09b4 + checksum: 9872a40444ba7cd89f46ec30e9850ce8c2cdde2b85e91868ec55215aee85cd4f205760db7d24bd2daf77e808861ab2981f768b933b1178f51da159c42f2e6a67 + languageName: node + linkType: hard + +"jmespath@npm:0.15.0": + version: 0.15.0 + resolution: "jmespath@npm:0.15.0" + checksum: 353bb9e69cc4c1560be0a4df43cb4020abc246e1c60cb5b55dcc76d8c858383f1633faf22ccaf6a5e09568a2077d0f4f1e989e6fcfd496b5cef87964cc8cb9e7 languageName: node linkType: hard -"jmespath@npm:0.16.0, jmespath@npm:^0.16.0": +"jmespath@npm:^0.16.0": version: 0.16.0 resolution: "jmespath@npm:0.16.0" checksum: 2d602493a1e4addfd1350ac8c9d54b1b03ed09e305fd863bab84a4ee1f52868cf939dd1a08c5cdea29ce9ba8f86875ebb458b6ed45dab3e1c3f2694503fb2fd9 @@ -22289,25 +26147,19 @@ __metadata: linkType: hard "js-beautify@npm:^1.13.0": - version: 1.14.7 - resolution: "js-beautify@npm:1.14.7" + version: 1.13.0 + resolution: "js-beautify@npm:1.13.0" dependencies: - config-chain: ^1.1.13 + config-chain: ^1.1.12 editorconfig: ^0.15.3 - glob: ^8.0.3 - nopt: ^6.0.0 + glob: ^7.1.3 + mkdirp: ^1.0.4 + nopt: ^5.0.0 bin: css-beautify: js/bin/css-beautify.js html-beautify: js/bin/html-beautify.js js-beautify: js/bin/js-beautify.js - checksum: 1950d0d3f05f8ad06b73eb77b9aac602d00b24eab7d8a6d8ea0b1841ab9c730acecd5a6f3926e360dce7a2583481bc77caf6d024490a58fa9897cbbbdfc35984 - languageName: node - linkType: hard - -"js-levenshtein@npm:^1.1.6": - version: 1.1.6 - resolution: "js-levenshtein@npm:1.1.6" - checksum: 409f052a7f1141be4058d97da7860e08efd97fc588b7a4c5cfa0548bc04f6d576644dae65ab630266dff685d56fb90d494e03d4d79cb484c287746b4f1bf0694 + checksum: edda6f1f32d6a3870503f1ae7b7fb1279ba99ef533872ec3d2d7f9b685671425cc8e5c20bbaaba9440495dfc120797b13e68f867566d59bb23dc435de76dfe7a languageName: node linkType: hard @@ -22346,26 +26198,27 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:4.0.0": - version: 4.0.0 - resolution: "js-yaml@npm:4.0.0" +"js-yaml@npm:3.14.0": + version: 3.14.0 + resolution: "js-yaml@npm:3.14.0" dependencies: - argparse: ^2.0.1 + argparse: ^1.0.7 + esprima: ^4.0.0 bin: js-yaml: bin/js-yaml.js - checksum: 931d6dddb3589fa272c8273366c6dffa99fd6bd26ac7b70f9bac925c28cb7ae352b964192df84f90ecd7a2ff50ab87e6d58e2148eb19c89aa155c73ed847ab92 + checksum: a1a47c912ba20956f96cb0998dea2e74c7f7129d831fe33d3c5a16f3f83712ce405172a8dd1c26bf2b3ad74b54016d432ff727928670ae5a50a57a677c387949 languageName: node linkType: hard "js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" + version: 3.13.1 + resolution: "js-yaml@npm:3.13.1" dependencies: argparse: ^1.0.7 esprima: ^4.0.0 bin: js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + checksum: 7511b764abb66d8aa963379f7d2a404f078457d106552d05a7b556d204f7932384e8477513c124749fa2de52eb328961834562bd09924902c6432e40daa408bc languageName: node linkType: hard @@ -22495,13 +26348,6 @@ __metadata: languageName: node linkType: hard -"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f - languageName: node - linkType: hard - "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -22516,10 +26362,10 @@ __metadata: languageName: node linkType: hard -"json-schema@npm:0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 +"json-schema@npm:0.2.3": + version: 0.2.3 + resolution: "json-schema@npm:0.2.3" + checksum: bbc2070988fb5f2a2266a31b956f1b5660e03ea7eaa95b33402901274f625feb586ae0c485e1df854fde40a7f0dc679f3b3ca8e5b8d31f8ea07a0d834de785c7 languageName: node linkType: hard @@ -22538,11 +26384,11 @@ __metadata: linkType: hard "json-stable-stringify@npm:^1.0.1": - version: 1.0.2 - resolution: "json-stable-stringify@npm:1.0.2" + version: 1.0.1 + resolution: "json-stable-stringify@npm:1.0.1" dependencies: - jsonify: ^0.0.1 - checksum: ec10863493fb728481ed7576551382768a173d5b884758db530def00523b862083a3fd70fee24b39e2f47f5f502e22f9a1489dd66da3535b63bf6241dbfca800 + jsonify: ~0.0.0 + checksum: 65d6cbf0fca72a4136999f65f4401cf39a129f7aeff0fdd987ac3d3423a2113659294045fb8377e6e20d865cac32b1b8d70f3d87346c9786adcee60661d96ca5 languageName: node linkType: hard @@ -22553,19 +26399,21 @@ __metadata: languageName: node linkType: hard -"json3@npm:^3.3.2": +"json3@npm:^3.3.2, json3@npm:^3.3.3": version: 3.3.3 resolution: "json3@npm:3.3.3" checksum: 55eda204a4c70d11b7d5caa5cb64c76a3aa54d5df72d07bdf446b922fd7cb8657b0732f68e0c36790f55e195e0a429c299144ff05430bbe93bc2a7c81ad3472b languageName: node linkType: hard -"json5@npm:2.x, json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" +"json5@npm:2.x, json5@npm:^2.1.3": + version: 2.2.0 + resolution: "json5@npm:2.2.0" + dependencies: + minimist: ^1.2.5 bin: json5: lib/cli.js - checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + checksum: e88fc5274bb58fc99547baa777886b069d2dd96d9cfc4490b305fd16d711dabd5979e35a4f90873cefbeb552e216b041a304fe56702bedba76e19bc7845f208d languageName: node linkType: hard @@ -22578,14 +26426,34 @@ __metadata: languageName: node linkType: hard -"json5@npm:^1.0.1, json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" +"json5@npm:^1.0.1": + version: 1.0.1 + resolution: "json5@npm:1.0.1" dependencies: minimist: ^1.2.0 bin: json5: lib/cli.js - checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 + checksum: e76ea23dbb8fc1348c143da628134a98adf4c5a4e8ea2adaa74a80c455fc2cdf0e2e13e6398ef819bfe92306b610ebb2002668ed9fc1af386d593691ef346fc3 + languageName: node + linkType: hard + +"json5@npm:^2.1.2": + version: 2.1.3 + resolution: "json5@npm:2.1.3" + dependencies: + minimist: ^1.2.5 + bin: + json5: lib/cli.js + checksum: b2de57a66520eca0fbb6c5ef59249b8308efb93fe89a8c75f5a6846e4f5f7d99a5a6f2e4db4d7a1c7047802dd816ed602a052d147a415d0e6b7f834885b62bc3 + languageName: node + linkType: hard + +"json5@npm:^2.2.2": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 languageName: node linkType: hard @@ -22597,19 +26465,19 @@ __metadata: linkType: hard "jsoneditor@npm:^9.9.0": - version: 9.10.2 - resolution: "jsoneditor@npm:9.10.2" + version: 9.9.2 + resolution: "jsoneditor@npm:9.9.2" dependencies: - ace-builds: ^1.20.0 + ace-builds: ^1.10.1 ajv: ^6.12.6 javascript-natural-sort: ^0.7.1 jmespath: ^0.16.0 json-source-map: ^0.6.1 - jsonrepair: ^3.1.0 + jsonrepair: ^2.2.1 mobius1-selectr: ^2.4.13 picomodal: ^3.0.0 vanilla-picker: ^2.12.1 - checksum: bc4579ad93f575c8a24b122baec7fdecd2ca829662210550d41da8a29e46b51573193dafb49805b81974360dd0b1c551b43121dce133685407b4038da676bd7a + checksum: 8f1d9403cddaf3bef94ec521da32a0892e12ae1630ef12e8bc38c7f6995bfe4563682505a9ce9e8e6c8511774289fc9f70a8ced158594fd330f892e5c8b5fd66 languageName: node linkType: hard @@ -22650,22 +26518,22 @@ __metadata: linkType: hard "jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" + version: 6.0.1 + resolution: "jsonfile@npm:6.0.1" dependencies: graceful-fs: ^4.1.6 - universalify: ^2.0.0 + universalify: ^1.0.0 dependenciesMeta: graceful-fs: optional: true - checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + checksum: d37b3732c6a44d2839338d4580f6092d569a1dc6b1895b8f0b02ece5c39420b4b8b89cf3540caa4a7da9986c5844d2f6d39753651ddd785959e628b9d87ba216 languageName: node linkType: hard -"jsonify@npm:^0.0.1, jsonify@npm:~0.0.0": - version: 0.0.1 - resolution: "jsonify@npm:0.0.1" - checksum: 027287e1c0294fce15f18c0ff990cfc2318e7f01fb76515f784d5cd0784abfec6fc5c2355c3a2f2cb0ad7f4aa2f5b74ebbfe4e80476c35b2d13cabdb572e1134 +"jsonify@npm:~0.0.0": + version: 0.0.0 + resolution: "jsonify@npm:0.0.0" + checksum: d8d4ed476c116e6987a460dcb82f22284686caae9f498ac87b0502c1765ac1522f4f450a4cad4cc368d202fd3b27a3860735140a82867fc6d558f5f199c38bce languageName: node linkType: hard @@ -22676,12 +26544,12 @@ __metadata: languageName: node linkType: hard -"jsonrepair@npm:^3.1.0": - version: 3.1.0 - resolution: "jsonrepair@npm:3.1.0" +"jsonrepair@npm:^2.2.1": + version: 2.2.1 + resolution: "jsonrepair@npm:2.2.1" bin: jsonrepair: bin/cli.js - checksum: 54923aa28a46cf8258a77fbd367bfcbd81f248f4bb23728b9211f35d8d410a0035de62b41a019c7295cbbcd030accc4a4464d610b0d6ef2ca006a8345af7b4a1 + checksum: c9ad3c948d78c356602e5f43023167acee8e2a32fde1e22481b0f311e54f9b1d0ab47a73feeb87b65585df4ecf42d34aac1d457ff5aa2010fe032b3634113cf8 languageName: node linkType: hard @@ -22717,116 +26585,114 @@ __metadata: linkType: hard "jsprim@npm:^1.2.2": - version: 1.4.2 - resolution: "jsprim@npm:1.4.2" - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - checksum: 2ad1b9fdcccae8b3d580fa6ced25de930eaa1ad154db21bbf8478a4d30bbbec7925b5f5ff29b933fba9412b16a17bd484a8da4fdb3663b5e27af95dd693bab2a - languageName: node - linkType: hard - -"jsprim@npm:^2.0.2": - version: 2.0.2 - resolution: "jsprim@npm:2.0.2" + version: 1.4.1 + resolution: "jsprim@npm:1.4.1" dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 - json-schema: 0.4.0 + json-schema: 0.2.3 verror: 1.10.0 - checksum: d175f6b1991e160cb0aa39bc857da780e035611986b5492f32395411879fdaf4e513d98677f08f7352dac93a16b66b8361c674b86a3fa406e2e7af6b26321838 + checksum: 6bcb20ec265ae18bb48e540a6da2c65f9c844f7522712d6dfcb01039527a49414816f4869000493363f1e1ea96cbad00e46188d5ecc78257a19f152467587373 languageName: node linkType: hard -"jss-plugin-camel-case@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-camel-case@npm:10.10.0" +"jss-plugin-camel-case@npm:^10.0.3": + version: 10.3.0 + resolution: "jss-plugin-camel-case@npm:10.3.0" dependencies: "@babel/runtime": ^7.3.1 hyphenate-style-name: ^1.0.3 - jss: 10.10.0 - checksum: 693485b86f7a0e0bd0c16b8ddd057ca02a993fc088558c96501f9131e7e6261cc9f4b08047879a68441c688c40dceeb5219b1f15ade9043935aade4f37f5ca85 + jss: ^10.3.0 + checksum: 7b8eac8ff450c055313cd83ad54b56e5fd0a3bceed56adb1cfe683efd1d7c71cb21bbcbaa63265a59fafe0b141dcb19714be0215460f88cd05a35521bd85cb84 languageName: node linkType: hard -"jss-plugin-default-unit@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-default-unit@npm:10.10.0" +"jss-plugin-default-unit@npm:^10.0.3": + version: 10.3.0 + resolution: "jss-plugin-default-unit@npm:10.3.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 - checksum: 6e56213830753ad80bca3824973a667106defaef698d5996d45d03a0e2a3e035b33cd257aa8015040c41bd6669e7598dce72c36099d7ae69db758a7b2ca453fa + jss: ^10.3.0 + checksum: 29892bf502c0f0366c250596639e2482a2271007a906eeb8f9e8318db5894bf759a5597f15e9eee250e9bda4895c2b5983e17ac661cf286245e648ccae1748a5 languageName: node linkType: hard -"jss-plugin-global@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-global@npm:10.10.0" +"jss-plugin-global@npm:^10.0.3": + version: 10.3.0 + resolution: "jss-plugin-global@npm:10.3.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 - checksum: f3af4f40358e96cf89e0c7c84b6e441dc9b4d543cd6109fdf9314a9818fd780d252035f46cc526c3d3fb4393bc29effc6993cc22e04f4e67ec3c889ab760d580 + jss: ^10.3.0 + checksum: e7677f6906787f5960d32189c740f73da5c23ebb6875ee9097d57f20bb5216d31408871047df61726432c0ecc528a5fcc293b111aec03a8c9cf4da8cb09bb5d5 languageName: node linkType: hard -"jss-plugin-nested@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-nested@npm:10.10.0" +"jss-plugin-nested@npm:^10.0.3": + version: 10.3.0 + resolution: "jss-plugin-nested@npm:10.3.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 + jss: ^10.3.0 tiny-warning: ^1.0.2 - checksum: 190094375972b68eb8f683387c74e97dc8347e7cc4f2fbfd40b3baf077dfde83d70e57be56744690d22537c0390e0a398714d86736df820c64e498df95f937de + checksum: 0e40ef8f266c2336e2d049b2f9fadd76bac5a3b9faa11250ccae1e4cf6a9f3feffeec6bcb781a5a1911adf9b405a871278b3ccde2a6d83dbee8dc8967a1ebfd8 languageName: node linkType: hard -"jss-plugin-props-sort@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-props-sort@npm:10.10.0" +"jss-plugin-props-sort@npm:^10.0.3": + version: 10.3.0 + resolution: "jss-plugin-props-sort@npm:10.3.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 - checksum: 274483444b6733bd58d229ebdcdb32b3c24172bc83cb2f6f8364926de19acd872758bcf06c7b3af11cf75504a67a7d67abba62b25081d144585a56b4df9512ba + jss: ^10.3.0 + checksum: 07c898e033bc91b071cd31015ac1d313576c4e72881fc0d2b33f60d1fd7d7b8379871524b4eb6dcc409bbdcabb0c04f46de42235ee5d180f4138e3ad4121b170 languageName: node linkType: hard -"jss-plugin-rule-value-function@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-rule-value-function@npm:10.10.0" +"jss-plugin-rule-value-function@npm:^10.0.3": + version: 10.3.0 + resolution: "jss-plugin-rule-value-function@npm:10.3.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 + jss: ^10.3.0 tiny-warning: ^1.0.2 - checksum: 009c9593b9be8b9f1030b797e58e3c233d90e034e5c68b0cabd25bffc7da965c69dc1ccb1bb6a542d72bb824df89036b2264fe564e8538320ef99febaf2882ee + checksum: 24161dcecfa0a08b6067e4640649cf649668cffd9dcc2f3512d4ea60962ae87b0808a5d7dbeb7147fdc99b099f56dc2e3da217119820369298eef372a4cac8ef languageName: node linkType: hard -"jss-plugin-vendor-prefixer@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-vendor-prefixer@npm:10.10.0" +"jss-plugin-vendor-prefixer@npm:^10.0.3": + version: 10.3.0 + resolution: "jss-plugin-vendor-prefixer@npm:10.3.0" dependencies: "@babel/runtime": ^7.3.1 css-vendor: ^2.0.8 - jss: 10.10.0 - checksum: 879b7233f9b0b571074dc2b88d97a05dbb949012ba2405f1481bbedd521167dc835133632adb3f2d8ffceddd337c8c13e3e8b1931590516c0664039598752dff + jss: ^10.3.0 + checksum: a22a87906e4d2fe023fef160e67e43443f30f822a3b8547a2464925e7d25d70cdf8d22fdd4f4b17cc0800564582c9929e22dbdc2ac5c68aff3607394589c09aa languageName: node linkType: hard -"jss@npm:10.10.0, jss@npm:^10.5.1": - version: 10.10.0 - resolution: "jss@npm:10.10.0" +"jss@npm:^10.0.3, jss@npm:^10.3.0": + version: 10.7.1 + resolution: "jss@npm:10.7.1" dependencies: "@babel/runtime": ^7.3.1 csstype: ^3.0.2 is-in-browser: ^1.1.3 tiny-warning: ^1.0.2 - checksum: ecf71971df42729668c283e432e841349b7fdbe52e520f7704991cf4a738fd2451ec0feeb25c12cdc5addf7facecf838e74e62936fd461fb4c99f23d54a4792d + checksum: f4603192b88165a9a9c031c96162803422284fcd443b6dabcb1b46f74d3bfe9c3d653054070122518c84d41572cb7624207eebec6f879dfe8b42d108ac683a4e languageName: node linkType: hard "jsx-ast-utils@npm:^2.2.3": + version: 2.2.3 + resolution: "jsx-ast-utils@npm:2.2.3" + dependencies: + array-includes: ^3.0.3 + object.assign: ^4.1.0 + checksum: 89130f37c95cb8444b28f710ed28802e0c0f15f4ff1c327cf3cafb6f87fda1b48c07fe7725bc208678650fe030cd5eed2641522f9ea08c4163c8056e39a9dcfe + languageName: node + linkType: hard + +"jsx-ast-utils@npm:^2.4.1": version: 2.4.1 resolution: "jsx-ast-utils@npm:2.4.1" dependencies: @@ -22836,13 +26702,13 @@ __metadata: languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": - version: 3.3.3 - resolution: "jsx-ast-utils@npm:3.3.3" +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0": + version: 3.1.0 + resolution: "jsx-ast-utils@npm:3.1.0" dependencies: - array-includes: ^3.1.5 - object.assign: ^4.1.3 - checksum: a2ed78cac49a0f0c4be8b1eafe3c5257a1411341d8e7f1ac740debae003de04e5f6372bfcfbd9d082e954ffd99aac85bcda85b7c6bc11609992483f4cdc0f745 + array-includes: ^3.1.1 + object.assign: ^4.1.1 + checksum: 180f173949ce7f8ffb6d97efed7d809a90f80261ab9c7a4c9cc458cffcb80659be9cc57000bf39356f9cac5e3971109c76f2a325383f29637ac9f4c1e116751e languageName: node linkType: hard @@ -22854,9 +26720,9 @@ __metadata: linkType: hard "just-extend@npm:^4.0.2": - version: 4.2.1 - resolution: "just-extend@npm:4.2.1" - checksum: ff9fdede240fad313efeeeb68a660b942e5586d99c0058064c78884894a2690dc09bba44c994ad4e077e45d913fef01a9240c14a72c657b53687ac58de53b39c + version: 4.0.2 + resolution: "just-extend@npm:4.0.2" + checksum: 03916980fc6855a0a9bcba164246c46984fcfb85b56f13405a4f244dd9369fddebcd700f33e2636d99780a704a6cec2b5333229eb03c5cbfa897340ecda4c616 languageName: node linkType: hard @@ -22882,9 +26748,9 @@ __metadata: linkType: hard "keycode@npm:^2.1.8": - version: 2.2.1 - resolution: "keycode@npm:2.2.1" - checksum: 7a5c775b2410a3b6d9c07a415ecb70639187a965be239d2c11c71079cb1ca2f9dede94b86426f3ece475dc8ae3debf2367531bbcafc0af8c82f157d9a4f7e6cb + version: 2.2.0 + resolution: "keycode@npm:2.2.0" + checksum: cb91c2940a892f1444a41fc08339b8831445a6b095af9103e3061ea7d4bdbfc420135dcb5d9257020e35c374468bb7d4495ea9fcea54e5760196daff3c874fa4 languageName: node linkType: hard @@ -22904,6 +26770,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^3.0.0": + version: 3.1.0 + resolution: "keyv@npm:3.1.0" + dependencies: + json-buffer: 3.0.0 + checksum: bb7e8f3acffdbafbc2dd5b63f377fe6ec4c0e2c44fc82720449ef8ab54f4a7ce3802671ed94c0f475ae0a8549703353a2124561fcf3317010c141b32ca1ce903 + languageName: node + linkType: hard + "killable@npm:^1.0.1": version: 1.0.1 resolution: "killable@npm:1.0.1" @@ -22943,7 +26818,14 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": +"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": + version: 6.0.2 + resolution: "kind-of@npm:6.0.2" + checksum: a2978b5694d4162d41f2d0f56bb5f587971fd0908331142e1a666fa5abd92cad535d99bf2058bd0b6dc1d07706e4f86818a09afcee98a74b36045ac62d462baf + languageName: node + linkType: hard + +"kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b @@ -22970,9 +26852,9 @@ __metadata: linkType: hard "klona@npm:^2.0.4": - version: 2.0.6 - resolution: "klona@npm:2.0.6" - checksum: ac9ee3732e42b96feb67faae4d27cf49494e8a3bf3fa7115ce242fe04786788e0aff4741a07a45a2462e2079aa983d73d38519c85d65b70ef11447bbc3c58ce7 + version: 2.0.4 + resolution: "klona@npm:2.0.4" + checksum: abc6690882e0e6f5cf70451b79a6de95a27be56ced283d1d6d7e610db7d824e5da1f142f8073466dfbcfa887ee001b98f6dcfbcf02759828ba356b90202a74c5 languageName: node linkType: hard @@ -23004,9 +26886,48 @@ __metadata: languageName: node linkType: hard -"knex@npm:^2.3.0, knex@npm:^2.4.2": - version: 2.4.2 - resolution: "knex@npm:2.4.2" +"knex@npm:^1.0.3": + version: 1.0.7 + resolution: "knex@npm:1.0.7" + dependencies: + colorette: 2.0.16 + commander: ^9.1.0 + debug: 4.3.4 + escalade: ^3.1.1 + esm: ^3.2.25 + get-package-type: ^0.1.0 + getopts: 2.3.0 + interpret: ^2.2.0 + lodash: ^4.17.21 + pg-connection-string: 2.5.0 + rechoir: ^0.8.0 + resolve-from: ^5.0.0 + tarn: ^3.0.2 + tildify: 2.0.0 + peerDependenciesMeta: + "@vscode/sqlite3": + optional: true + better-sqlite3: + optional: true + mysql: + optional: true + mysql2: + optional: true + pg: + optional: true + pg-native: + optional: true + tedious: + optional: true + bin: + knex: bin/cli.js + checksum: 57608a3a6813cb66da6f5a078016338166c53ab2cbaab66e81492352023db88fc158e4ad6bbd2156cd9d7c9cac14a4b1e581dd8232b4f9bab2285ea6f1efc5cf + languageName: node + linkType: hard + +"knex@npm:^2.3.0": + version: 2.3.0 + resolution: "knex@npm:2.3.0" dependencies: colorette: 2.0.19 commander: ^9.1.0 @@ -23039,7 +26960,7 @@ __metadata: optional: true bin: knex: bin/cli.js - checksum: cfb6436c0e3df3cd1f55d3637e4f222d1acbc7b6ec3757e52c92cbf0a7da4055d40156d707ffede57dc155af75d7f5739a49d1b31d8755bc77bc0e4e2a570748 + checksum: ec00da6dd622a386507881e9d8ad44b9c5a4d9f272889b181cafb856fd26d7fdb19ef009cecdbbdedaf7c76f985a8fd14348ae47a0bb77b3dbec15f2c03c0dfe languageName: node linkType: hard @@ -23051,13 +26972,13 @@ __metadata: linkType: hard "language-subtag-registry@npm:~0.3.2": - version: 0.3.22 - resolution: "language-subtag-registry@npm:0.3.22" - checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a + version: 0.3.20 + resolution: "language-subtag-registry@npm:0.3.20" + checksum: f3da1c7ffc110e5e83d6575fd39688435d314fd4a8a4bd3e95064b4919d9879574284bc5f4ef97c0ab90bb4160159e2b1cedb530515f80b0abd574a22f038470 languageName: node linkType: hard -"language-tags@npm:=1.0.5": +"language-tags@npm:^1.0.5": version: 1.0.5 resolution: "language-tags@npm:1.0.5" dependencies: @@ -23076,6 +26997,15 @@ __metadata: languageName: node linkType: hard +"latest-version@npm:^5.0.0": + version: 5.1.0 + resolution: "latest-version@npm:5.1.0" + dependencies: + package-json: ^6.3.0 + checksum: fbc72b071eb66c40f652441fd783a9cca62f08bf42433651937f078cd9ef94bf728ec7743992777826e4e89305aef24f234b515e6030503a2cbee7fc9bdc2c0f + languageName: node + linkType: hard + "lazy-ass@npm:1.6.0, lazy-ass@npm:^1.6.0": version: 1.6.0 resolution: "lazy-ass@npm:1.6.0" @@ -23108,9 +27038,9 @@ __metadata: linkType: hard "leaflet@npm:^1.7.1": - version: 1.9.4 - resolution: "leaflet@npm:1.9.4" - checksum: bfc79f17a247b37b92d84b3c78702501603392d6589fde606de4a825d11f1609d90225388834f2e0709dac327e52dcd4b4b9cc9fd3d590060c5b1e53b84fa6c6 + version: 1.7.1 + resolution: "leaflet@npm:1.7.1" + checksum: f69149ab482eeb6cdabd837939c4782c97a7a18bc0b2a9330d4a828ca0dc6e035981f2ecdb71c6646aa173bc369cd3b4fd6bbe5d81df4c59c45254f9e9361d03 languageName: node linkType: hard @@ -23167,9 +27097,9 @@ __metadata: linkType: hard "lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + version: 1.1.6 + resolution: "lines-and-columns@npm:1.1.6" + checksum: 198a5436b1fa5cf703bae719c01c686b076f0ad7e1aafd95a58d626cabff302dc0414822126f2f80b58a8c3d66cda8a7b6da064f27130f87e1d3506d6dfd0d68 languageName: node linkType: hard @@ -23280,13 +27210,6 @@ __metadata: languageName: node linkType: hard -"loader-runner@npm:^4.2.0": - version: 4.3.0 - resolution: "loader-runner@npm:4.3.0" - checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 - languageName: node - linkType: hard - "loader-utils@npm:0.2.x": version: 0.2.17 resolution: "loader-utils@npm:0.2.17" @@ -23299,45 +27222,45 @@ __metadata: languageName: node linkType: hard -"loader-utils@npm:2.0.0": - version: 2.0.0 - resolution: "loader-utils@npm:2.0.0" +"loader-utils@npm:1.2.3, loader-utils@npm:^1.0.2, loader-utils@npm:^1.1.0, loader-utils@npm:^1.2.3": + version: 1.2.3 + resolution: "loader-utils@npm:1.2.3" dependencies: big.js: ^5.2.2 - emojis-list: ^3.0.0 - json5: ^2.1.2 - checksum: 6856423131b50b6f5f259da36f498cfd7fc3c3f8bb17777cf87fdd9159e797d4ba4288d9a96415fd8da62c2906960e88f74711dee72d03a9003bddcd0d364a51 + emojis-list: ^2.0.0 + json5: ^1.0.1 + checksum: 385407fc2683b6d664276fd41df962296de4a15030bb24389de77b175570c3b56bd896869376ba14cf8b33a9e257e17a91d395739ba7e23b5b68a8749a41df7e languageName: node linkType: hard -"loader-utils@npm:^1.0.2, loader-utils@npm:^1.1.0, loader-utils@npm:^1.2.3, loader-utils@npm:^1.4.0": - version: 1.4.2 - resolution: "loader-utils@npm:1.4.2" +"loader-utils@npm:2.0.0, loader-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "loader-utils@npm:2.0.0" dependencies: big.js: ^5.2.2 emojis-list: ^3.0.0 - json5: ^1.0.1 - checksum: eb6fb622efc0ffd1abdf68a2022f9eac62bef8ec599cf8adb75e94d1d338381780be6278534170e99edc03380a6d29bc7eb1563c89ce17c5fed3a0b17f1ad804 + json5: ^2.1.2 + checksum: 6856423131b50b6f5f259da36f498cfd7fc3c3f8bb17777cf87fdd9159e797d4ba4288d9a96415fd8da62c2906960e88f74711dee72d03a9003bddcd0d364a51 languageName: node linkType: hard -"loader-utils@npm:^2.0.0, loader-utils@npm:^2.0.4": - version: 2.0.4 - resolution: "loader-utils@npm:2.0.4" +"loader-utils@npm:^1.4.0": + version: 1.4.0 + resolution: "loader-utils@npm:1.4.0" dependencies: big.js: ^5.2.2 emojis-list: ^3.0.0 - json5: ^2.1.2 - checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 + json5: ^1.0.1 + checksum: d150b15e7a42ac47d935c8b484b79e44ff6ab4c75df7cc4cb9093350cf014ec0b17bdb60c5d6f91a37b8b218bd63b973e263c65944f58ca2573e402b9a27e717 languageName: node linkType: hard "localforage@npm:^1.5.0": - version: 1.10.0 - resolution: "localforage@npm:1.10.0" + version: 1.7.3 + resolution: "localforage@npm:1.7.3" dependencies: lie: 3.1.1 - checksum: f2978b434dafff9bcb0d9498de57d97eba165402419939c944412e179cab1854782830b5ec196212560b22712d1dd03918939f59cf1d4fc1d756fca7950086cf + checksum: 9b13a47b68b50de2f87361b950a4eb7cffaac9ad3d90fb3fcc7ae6bea32c0bd4e2a85d539cc500f07a21c5ac190ae318437a53489d8b753140016b822db07ec0 languageName: node linkType: hard @@ -23909,6 +27832,13 @@ __metadata: languageName: node linkType: hard +"lodash.sortby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.sortby@npm:4.7.0" + checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c + languageName: node + linkType: hard + "lodash.startcase@npm:^4.4.0": version: 4.4.0 resolution: "lodash.startcase@npm:4.4.0" @@ -24000,14 +27930,14 @@ __metadata: languageName: node linkType: hard -"lodash@npm:>=3.5 <5, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.3, lodash@npm:^4.17.4, lodash@npm:^4.17.5, lodash@npm:^4.2.1, lodash@npm:^4.3.0, lodash@npm:^4.7.0, lodash@npm:~4.17.4": +"lodash@npm:>=3.5 <5, lodash@npm:^4.15.0, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.3, lodash@npm:^4.17.4, lodash@npm:^4.17.5, lodash@npm:^4.2.1, lodash@npm:^4.3.0, lodash@npm:^4.7.0, lodash@npm:~4.17.4": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard -"log-symbols@npm:4.0.0": +"log-symbols@npm:4.0.0, log-symbols@npm:^4.0.0": version: 4.0.0 resolution: "log-symbols@npm:4.0.0" dependencies: @@ -24034,7 +27964,7 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": +"log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -24055,17 +27985,16 @@ __metadata: languageName: node linkType: hard -"logform@npm:^2.2.0, logform@npm:^2.3.2, logform@npm:^2.4.0": - version: 2.5.1 - resolution: "logform@npm:2.5.1" +"logform@npm:^2.2.0": + version: 2.2.0 + resolution: "logform@npm:2.2.0" dependencies: - "@colors/colors": 1.5.0 - "@types/triple-beam": ^1.3.2 + colors: ^1.2.1 + fast-safe-stringify: ^2.0.4 fecha: ^4.2.0 ms: ^2.1.1 - safe-stable-stringify: ^2.3.1 triple-beam: ^1.3.0 - checksum: 08fdf03be5bb69af33bac214eb4f6a0c83ad3821a30de498925fccb61e993e5a4a87470aab356ca2110c11e4643685bed5597ca5f46dd1cd11437c44a0e0e3c2 + checksum: 07319bfd50dacf69a4a3bc81cd6f5fab2f52d247ba5d2d2df99141f6b62f787f7fbb0353046650da90329d4030f265632d5f995706612ed9cb2c70281866007e languageName: node linkType: hard @@ -24083,9 +28012,9 @@ __metadata: linkType: hard "loglevel@npm:^1.6.8": - version: 1.8.1 - resolution: "loglevel@npm:1.8.1" - checksum: a1a62db40291aaeaef2f612334c49e531bff71cc1d01a2acab689ab80d59e092f852ab164a5aedc1a752fdc46b7b162cb097d8a9eb2cf0b299511106c29af61d + version: 1.7.1 + resolution: "loglevel@npm:1.7.1" + checksum: 715a4ae69ad75d4d3bd04e4f6e9edbc4cae4db34d1e7f54f426d8cebe2dd9fef891ca3789e839d927cdbc5fad73d789e998db0af2f11f4c40219c272bc923823 languageName: node linkType: hard @@ -24110,12 +28039,12 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^2.3.1": - version: 2.3.6 - resolution: "loupe@npm:2.3.6" +"lower-case@npm:^2.0.1": + version: 2.0.1 + resolution: "lower-case@npm:2.0.1" dependencies: - get-func-name: ^2.0.0 - checksum: cc83f1b124a1df7384601d72d8d1f5fe95fd7a8185469fec48bb2e4027e45243949e7a013e8d91051a138451ff0552310c32aa9786e60b6a30d1e801bdc2163f + tslib: ^1.10.0 + checksum: 3ec80a067c1e053eee323bdc040317cc629e59ee5a6248fa5c62d7fb0f8fe4eda1b2cfb4725f7428f542b45dcc7d35a3f4a98fef8b4b47de668109a79dd478d8 languageName: node linkType: hard @@ -24135,13 +28064,30 @@ __metadata: languageName: node linkType: hard -"lowercase-keys@npm:^1.0.0": +"lowercase-keys@npm:^1.0.0, lowercase-keys@npm:^1.0.1": version: 1.0.1 resolution: "lowercase-keys@npm:1.0.1" checksum: 4d045026595936e09953e3867722e309415ff2c80d7701d067546d75ef698dac218a4f53c6d1d0e7368b47e45fd7529df47e6cb56fbb90523ba599f898b3d147 languageName: node linkType: hard +"lowercase-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "lowercase-keys@npm:2.0.0" + checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23 + languageName: node + linkType: hard + +"lowlight@npm:^1.14.0": + version: 1.20.0 + resolution: "lowlight@npm:1.20.0" + dependencies: + fault: ^1.0.0 + highlight.js: ~10.7.0 + checksum: 14a1815d6bae202ddee313fc60f06d46e5235c02fa483a77950b401d85b4c1e12290145ccd17a716b07f9328bd5864aa2d402b6a819ff3be7c833d9748ff8ba7 + languageName: node + linkType: hard + "lru-cache@npm:^4.0.1, lru-cache@npm:^4.1.5": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" @@ -24171,9 +28117,9 @@ __metadata: linkType: hard "lru-cache@npm:^7.7.1": - version: 7.18.3 - resolution: "lru-cache@npm:7.18.3" - checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + version: 7.13.1 + resolution: "lru-cache@npm:7.13.1" + checksum: f53c7dd098a7afd6342b23f7182629edff206c7665de79445a7f5455440e768a4d1c6ec52e1a16175580c71535c9437dfb6f6bc22ca1a0e4a7454a97cde87329 languageName: node linkType: hard @@ -24187,11 +28133,11 @@ __metadata: linkType: hard "magic-string@npm:^0.25.0, magic-string@npm:^0.25.7": - version: 0.25.9 - resolution: "magic-string@npm:0.25.9" + version: 0.25.7 + resolution: "magic-string@npm:0.25.7" dependencies: - sourcemap-codec: ^1.4.8 - checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a + sourcemap-codec: ^1.4.4 + checksum: 727a1fb70f9610304fe384f1df0251eb7d1d9dd779c07ef1225690361b71b216f26f5d934bfb11c919b5b0e7ba50f6240c823a6f2e44cfd33d4a07d7747ca829 languageName: node linkType: hard @@ -24231,8 +28177,8 @@ __metadata: linkType: hard "make-fetch-happen@npm:^10.0.3": - version: 10.2.1 - resolution: "make-fetch-happen@npm:10.2.1" + version: 10.1.8 + resolution: "make-fetch-happen@npm:10.1.8" dependencies: agentkeepalive: ^4.2.1 cacache: ^16.1.0 @@ -24250,7 +28196,7 @@ __metadata: promise-retry: ^2.0.1 socks-proxy-agent: ^7.0.0 ssri: ^9.0.0 - checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c + checksum: 5fe9fd9da5368a8a4fe9a3ea5b9aa15f1e91c9ab703cd9027a6b33840ecc8a57c182fbe1c767c139330a88c46a448b1f00da5e32065cec373aff2450b3da54ee languageName: node linkType: hard @@ -24277,10 +28223,10 @@ __metadata: languageName: node linkType: hard -"make-plural@npm:^7.0.0": - version: 7.3.0 - resolution: "make-plural@npm:7.3.0" - checksum: bb39b4b77533f0d5fb94eec128340b54dda8c1707d6b0a98c148e5d7bc23094e123f88275a61573fa31dc2f5d7352215cee0df523cd69b5d8fcb3969a2bcf8f8 +"make-plural@npm:^6.2.2": + version: 6.2.2 + resolution: "make-plural@npm:6.2.2" + checksum: 3358330c113e4586f8874a37f3ad613cd7c898ff9a0ae61d029dfbdce042ad0f76e88909464c5514be81166b842005913e58341e77f7b6378a2020630dcfc613 languageName: node linkType: hard @@ -24293,6 +28239,15 @@ __metadata: languageName: node linkType: hard +"makeerror@npm:1.0.x": + version: 1.0.11 + resolution: "makeerror@npm:1.0.11" + dependencies: + tmpl: 1.0.x + checksum: 9a62ec2d9648c5329fdc4bc7d779a7305f32b1e55422a4f14244bc890bb43287fe013eb8d965e92a0cf4c443f3e59265b1fc3125eaedb0c2361e28b1a8de565d + languageName: node + linkType: hard + "map-cache@npm:^0.2.0, map-cache@npm:^0.2.2": version: 0.2.2 resolution: "map-cache@npm:0.2.2" @@ -24307,10 +28262,17 @@ __metadata: languageName: node linkType: hard -"map-obj@npm:^4.0.0, map-obj@npm:^4.1.0": - version: 4.3.0 - resolution: "map-obj@npm:4.3.0" - checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e +"map-obj@npm:^4.0.0": + version: 4.1.0 + resolution: "map-obj@npm:4.1.0" + checksum: c62b22f23e58d742a093a0935fa904c92cc788d56132b75666160ac0c5704d3c677d28794594c7adf7ed0c177a96579e781dbf06e0a1b5d574c992a5c13877a3 + languageName: node + linkType: hard + +"map-obj@npm:^4.1.0": + version: 4.2.1 + resolution: "map-obj@npm:4.2.1" + checksum: 2745227b11ba6e6ddc5927b555a8f317aa33886fcd12806193f3e3c6f201eb24c9cff44bf932b1113a1ba461755a479b22439d0d670380330325164ed0e99547 languageName: node linkType: hard @@ -24352,7 +28314,7 @@ __metadata: languageName: node linkType: hard -"markdown-to-jsx@npm:^6.4.1": +"markdown-to-jsx@npm:^6.11.4": version: 6.11.4 resolution: "markdown-to-jsx@npm:6.11.4" dependencies: @@ -24364,6 +28326,27 @@ __metadata: languageName: node linkType: hard +"markdown-to-jsx@npm:^6.4.1": + version: 6.10.3 + resolution: "markdown-to-jsx@npm:6.10.3" + dependencies: + prop-types: ^15.6.2 + unquote: ^1.1.0 + peerDependencies: + react: ">= 0.14.0" + checksum: 7fb73a85bed20f52559d169e1426ab06e1d3b40d5fc6bc599dc9635a644ac6c053e5665ef4aa4c1d9f4ce0952833006c3fbbce0b31261bcbb8ccc161c44e5710 + languageName: node + linkType: hard + +"markdown-to-jsx@npm:^7.1.3": + version: 7.1.3 + resolution: "markdown-to-jsx@npm:7.1.3" + peerDependencies: + react: ">= 0.14.0" + checksum: 9809d898ef71a0897f55e40481b8128a6041600d90387cf1d4126736bf8be0ba1f5594e57c655973b9aa60a877ad9e28e93124131e1e4902ca759a087a427027 + languageName: node + linkType: hard + "markdown-to-jsx@npm:^7.1.8": version: 7.2.0 resolution: "markdown-to-jsx@npm:7.2.0" @@ -24374,12 +28357,12 @@ __metadata: linkType: hard "match-sorter@npm:^6.0.2": - version: 6.3.1 - resolution: "match-sorter@npm:6.3.1" + version: 6.1.0 + resolution: "match-sorter@npm:6.1.0" dependencies: "@babel/runtime": ^7.12.5 remove-accents: 0.4.2 - checksum: a4b02b676ac4ce64a89a091539ee4a70a802684713bcf06f2b70787927f510fe8a2adc849f9288857a90906083ad303467e530e8723b4a9756df9994fc164550 + checksum: dd8a49a5ce866cf90773b5dc7d2dce29e0fcc87097cf6d51e81ac2c84028058a5724398bb6c3c1e889a8c40790fac0ea6382c2f077ce0bb7c54f90f529a2e8be languageName: node linkType: hard @@ -24439,10 +28422,10 @@ __metadata: linkType: hard "mathjs@npm:^9.4.0": - version: 9.5.2 - resolution: "mathjs@npm:9.5.2" + version: 9.4.4 + resolution: "mathjs@npm:9.4.4" dependencies: - "@babel/runtime": ^7.15.4 + "@babel/runtime": ^7.14.6 complex.js: ^2.0.15 decimal.js: ^10.3.1 escape-latex: ^1.2.0 @@ -24453,7 +28436,7 @@ __metadata: typed-function: ^2.0.0 bin: mathjs: bin/cli.js - checksum: 239e6920d425552478f5aee7e5d36e52c35f11faafea975419def1ab89c971e76e4a3f075f43d3410f20b53af7c0bfd63888ea404150b571ae14fb0b328bfc7d + checksum: 3fdaca4d0e8b73c1e75c87023101d8d047ccec395743c80f24031b7523fc8f2209f8bc572c603d8a8ba4e8b977f240e987f72902e48cce6ff261b3f904fefd5b languageName: node linkType: hard @@ -24538,11 +28521,11 @@ __metadata: linkType: hard "memfs@npm:^3.1.2": - version: 3.5.1 - resolution: "memfs@npm:3.5.1" + version: 3.3.0 + resolution: "memfs@npm:3.3.0" dependencies: - fs-monkey: ^1.0.3 - checksum: fcd037566a4bbb00d61dc991858395ccc06267ab5fe9471aeff28433f2a210bf5dd999e64e8b5473f8244f00dfb7ff3221b5c2fe41ff98af1439e5e2168fc410 + fs-monkey: 1.0.3 + checksum: 9e9eb71cfc077fd5e14ad2f497f5a8791689b64f307cf379ed6737c5781652a7af0509395c0dfba43c4e413dbc7cd7010e9ca002168ec329e6df178414b96268 languageName: node linkType: hard @@ -24589,7 +28572,7 @@ __metadata: languageName: node linkType: hard -"meow@npm:^3.1.0, meow@npm:^3.7.0": +"meow@npm:^3.7.0": version: 3.7.0 resolution: "meow@npm:3.7.0" dependencies: @@ -24633,15 +28616,6 @@ __metadata: languageName: node linkType: hard -"merge-options@npm:^3.0.4": - version: 3.0.4 - resolution: "merge-options@npm:3.0.4" - dependencies: - is-plain-obj: ^2.1.0 - checksum: d86ddb3dd6e85d558dbf25dc944f3527b6bacb944db3fdda6e84a3f59c4e4b85231095f58b835758b9a57708342dee0f8de0dffa352974a48221487fe9f4584f - languageName: node - linkType: hard - "merge-stream@npm:^1.0.1": version: 1.0.1 resolution: "merge-stream@npm:1.0.1" @@ -24658,7 +28632,14 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.2.3, merge2@npm:^1.3.0, merge2@npm:^1.4.1": +"merge2@npm:^1.2.3": + version: 1.3.0 + resolution: "merge2@npm:1.3.0" + checksum: bff71d47cd8c01edf2222f205f1c312cae0082e2c05b06123b0990605447dc395208367bb1d1635caec6083d3e6bb0756df05ac24cdc15cb630d5af6daa8eb7c + languageName: node + linkType: hard + +"merge2@npm:^1.3.0": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 @@ -24697,6 +28678,26 @@ __metadata: languageName: node linkType: hard +"metro-babel-register@npm:0.58.0": + version: 0.58.0 + resolution: "metro-babel-register@npm:0.58.0" + dependencies: + "@babel/core": ^7.0.0 + "@babel/plugin-proposal-class-properties": ^7.0.0 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.0.0 + "@babel/plugin-proposal-object-rest-spread": ^7.0.0 + "@babel/plugin-proposal-optional-catch-binding": ^7.0.0 + "@babel/plugin-proposal-optional-chaining": ^7.0.0 + "@babel/plugin-transform-async-to-generator": ^7.0.0 + "@babel/plugin-transform-flow-strip-types": ^7.0.0 + "@babel/plugin-transform-modules-commonjs": ^7.0.0 + "@babel/register": ^7.0.0 + core-js: ^2.2.2 + escape-string-regexp: ^1.0.5 + checksum: c6ba8b4765ca0e4648ac33bdd6c83fea09614c63eec73c8dd249e89443a99b2b6a098327c9234bce5423bec61f0a3671e86eee02d04fa7aed0908e9a80426382 + languageName: node + linkType: hard + "metro-babel-register@npm:0.59.0": version: 0.59.0 resolution: "metro-babel-register@npm:0.59.0" @@ -24713,6 +28714,16 @@ __metadata: languageName: node linkType: hard +"metro-babel-transformer@npm:0.58.0": + version: 0.58.0 + resolution: "metro-babel-transformer@npm:0.58.0" + dependencies: + "@babel/core": ^7.0.0 + metro-source-map: 0.58.0 + checksum: 5b259c71cdd153ec28d7319403729e52757b23eb88f52ee4abc887749baf2896fd1b70290ac78b45a00b5891bfa02a49dba8f6654938a8ca9cb4cf81701ad744 + languageName: node + linkType: hard + "metro-babel-transformer@npm:0.59.0": version: 0.59.0 resolution: "metro-babel-transformer@npm:0.59.0" @@ -24723,6 +28734,18 @@ __metadata: languageName: node linkType: hard +"metro-cache@npm:0.58.0": + version: 0.58.0 + resolution: "metro-cache@npm:0.58.0" + dependencies: + jest-serializer: ^24.4.0 + metro-core: 0.58.0 + mkdirp: ^0.5.1 + rimraf: ^2.5.4 + checksum: ba7caae6747066920f3842a472361f4b37e48b59605310be748232b4a34f5d73f24f7d54caa45ae538e77c690565c20ace49b9755f78c420a480966f6ecc6d0c + languageName: node + linkType: hard + "metro-cache@npm:0.59.0": version: 0.59.0 resolution: "metro-cache@npm:0.59.0" @@ -24735,6 +28758,20 @@ __metadata: languageName: node linkType: hard +"metro-config@npm:0.58.0, metro-config@npm:^0.58.0": + version: 0.58.0 + resolution: "metro-config@npm:0.58.0" + dependencies: + cosmiconfig: ^5.0.5 + jest-validate: ^24.7.0 + metro: 0.58.0 + metro-cache: 0.58.0 + metro-core: 0.58.0 + pretty-format: ^24.7.0 + checksum: bf3cd20223b220358bf9de79ddaa58009661af9c69dab308cd36e77e7cfa6445aa35d230d7a743f2e07408a230357193af85d346967eee3b54f88cb21fd102cd + languageName: node + linkType: hard + "metro-config@npm:0.59.0, metro-config@npm:^0.59.0": version: 0.59.0 resolution: "metro-config@npm:0.59.0" @@ -24748,7 +28785,19 @@ __metadata: languageName: node linkType: hard -"metro-core@npm:0.59.0, metro-core@npm:^0.59.0": +"metro-core@npm:0.58.0, metro-core@npm:^0.58.0": + version: 0.58.0 + resolution: "metro-core@npm:0.58.0" + dependencies: + jest-haste-map: ^24.7.1 + lodash.throttle: ^4.1.1 + metro-resolver: 0.58.0 + wordwrap: ^1.0.0 + checksum: 883c2b21ad37d1cc50e5036382dfc370ae9ae85c3b348ab96484cfb8c612e6606df7370cadab649a4c8c4fd644131ebaa9b5a9341ce2d5d18fbf542a10377dc3 + languageName: node + linkType: hard + +"metro-core@npm:0.59.0": version: 0.59.0 resolution: "metro-core@npm:0.59.0" dependencies: @@ -24760,6 +28809,21 @@ __metadata: languageName: node linkType: hard +"metro-inspector-proxy@npm:0.58.0": + version: 0.58.0 + resolution: "metro-inspector-proxy@npm:0.58.0" + dependencies: + connect: ^3.6.5 + debug: ^2.2.0 + rxjs: ^5.4.3 + ws: ^1.1.5 + yargs: ^14.2.0 + bin: + metro-inspector-proxy: src/cli.js + checksum: 88eb95e546326507cc6c3f9f08fe101e8819846ee1f70a32a32844d7f5d3bc52e0498a04da8a5605fad7de71602decc82ae7609aa86c8605a2ae4afd9836af6b + languageName: node + linkType: hard + "metro-inspector-proxy@npm:0.59.0": version: 0.59.0 resolution: "metro-inspector-proxy@npm:0.59.0" @@ -24774,6 +28838,15 @@ __metadata: languageName: node linkType: hard +"metro-minify-uglify@npm:0.58.0": + version: 0.58.0 + resolution: "metro-minify-uglify@npm:0.58.0" + dependencies: + uglify-es: ^3.1.9 + checksum: abe4ecdd4b0342690e87590cb7210dba71ffb56ce44a429d64936edc1254f74731a3182e4cfabd35dd09e27bfda8c9e00772095292d170ae25e5ea06fe6a478c + languageName: node + linkType: hard + "metro-minify-uglify@npm:0.59.0": version: 0.59.0 resolution: "metro-minify-uglify@npm:0.59.0" @@ -24783,6 +28856,51 @@ __metadata: languageName: node linkType: hard +"metro-react-native-babel-preset@npm:0.58.0": + version: 0.58.0 + resolution: "metro-react-native-babel-preset@npm:0.58.0" + dependencies: + "@babel/plugin-proposal-class-properties": ^7.0.0 + "@babel/plugin-proposal-export-default-from": ^7.0.0 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.0.0 + "@babel/plugin-proposal-object-rest-spread": ^7.0.0 + "@babel/plugin-proposal-optional-catch-binding": ^7.0.0 + "@babel/plugin-proposal-optional-chaining": ^7.0.0 + "@babel/plugin-syntax-dynamic-import": ^7.0.0 + "@babel/plugin-syntax-export-default-from": ^7.0.0 + "@babel/plugin-syntax-flow": ^7.2.0 + "@babel/plugin-transform-arrow-functions": ^7.0.0 + "@babel/plugin-transform-block-scoping": ^7.0.0 + "@babel/plugin-transform-classes": ^7.0.0 + "@babel/plugin-transform-computed-properties": ^7.0.0 + "@babel/plugin-transform-destructuring": ^7.0.0 + "@babel/plugin-transform-exponentiation-operator": ^7.0.0 + "@babel/plugin-transform-flow-strip-types": ^7.0.0 + "@babel/plugin-transform-for-of": ^7.0.0 + "@babel/plugin-transform-function-name": ^7.0.0 + "@babel/plugin-transform-literals": ^7.0.0 + "@babel/plugin-transform-modules-commonjs": ^7.0.0 + "@babel/plugin-transform-object-assign": ^7.0.0 + "@babel/plugin-transform-parameters": ^7.0.0 + "@babel/plugin-transform-react-display-name": ^7.0.0 + "@babel/plugin-transform-react-jsx": ^7.0.0 + "@babel/plugin-transform-react-jsx-source": ^7.0.0 + "@babel/plugin-transform-regenerator": ^7.0.0 + "@babel/plugin-transform-runtime": ^7.0.0 + "@babel/plugin-transform-shorthand-properties": ^7.0.0 + "@babel/plugin-transform-spread": ^7.0.0 + "@babel/plugin-transform-sticky-regex": ^7.0.0 + "@babel/plugin-transform-template-literals": ^7.0.0 + "@babel/plugin-transform-typescript": ^7.5.0 + "@babel/plugin-transform-unicode-regex": ^7.0.0 + "@babel/template": ^7.0.0 + react-refresh: ^0.4.0 + peerDependencies: + "@babel/core": "*" + checksum: 053a0f8531b3ba109e8fe27defbfeeffeac074e24d18f797f63beacaea778400cce863b552f29ca9466110f2c1945af13ede2184b4c040fdba6f9424377ef347 + languageName: node + linkType: hard + "metro-react-native-babel-preset@npm:0.59.0, metro-react-native-babel-preset@npm:^0.59.0": version: 0.59.0 resolution: "metro-react-native-babel-preset@npm:0.59.0" @@ -24831,7 +28949,7 @@ __metadata: languageName: node linkType: hard -"metro-react-native-babel-transformer@npm:0.59.0, metro-react-native-babel-transformer@npm:^0.59.0": +"metro-react-native-babel-transformer@npm:0.59.0": version: 0.59.0 resolution: "metro-react-native-babel-transformer@npm:0.59.0" dependencies: @@ -24846,7 +28964,31 @@ __metadata: languageName: node linkType: hard -"metro-resolver@npm:0.59.0, metro-resolver@npm:^0.59.0": +"metro-react-native-babel-transformer@npm:^0.58.0": + version: 0.58.0 + resolution: "metro-react-native-babel-transformer@npm:0.58.0" + dependencies: + "@babel/core": ^7.0.0 + babel-preset-fbjs: ^3.3.0 + metro-babel-transformer: 0.58.0 + metro-react-native-babel-preset: 0.58.0 + metro-source-map: 0.58.0 + peerDependencies: + "@babel/core": "*" + checksum: c6f9b3ce5b77934bf2cf6faeec4487538d267a0a2804a3bc65064a2f52e75537f3eb1da8daf9f6a688fe16e3c9f2fafafd25452bef8b91c39fbaf2bb78c4c860 + languageName: node + linkType: hard + +"metro-resolver@npm:0.58.0, metro-resolver@npm:^0.58.0": + version: 0.58.0 + resolution: "metro-resolver@npm:0.58.0" + dependencies: + absolute-path: ^0.0.0 + checksum: c9a5067f93c4af9b44f933c25dc2aecc5cadc710ef1c0c01b527e3cebb3c90f875bea12562ab3a2f8d4d8e54aa0d2c390c62dc04b5c6b5d0e50639756eb25df7 + languageName: node + linkType: hard + +"metro-resolver@npm:0.59.0": version: 0.59.0 resolution: "metro-resolver@npm:0.59.0" dependencies: @@ -24855,6 +28997,21 @@ __metadata: languageName: node linkType: hard +"metro-source-map@npm:0.58.0": + version: 0.58.0 + resolution: "metro-source-map@npm:0.58.0" + dependencies: + "@babel/traverse": ^7.0.0 + "@babel/types": ^7.0.0 + invariant: ^2.2.4 + metro-symbolicate: 0.58.0 + ob1: 0.58.0 + source-map: ^0.5.6 + vlq: ^1.0.0 + checksum: f591b992585f6ff7bb2f68958289a641c1ea8a28f7caad6503fdef36ff39169902a4d9f91fb601b2e49d1ca33b2baa9ee6b87d9d08a17bd856165231a473a750 + languageName: node + linkType: hard + "metro-source-map@npm:0.59.0": version: 0.59.0 resolution: "metro-source-map@npm:0.59.0" @@ -24870,6 +29027,21 @@ __metadata: languageName: node linkType: hard +"metro-symbolicate@npm:0.58.0": + version: 0.58.0 + resolution: "metro-symbolicate@npm:0.58.0" + dependencies: + invariant: ^2.2.4 + metro-source-map: 0.58.0 + source-map: ^0.5.6 + through2: ^2.0.1 + vlq: ^1.0.0 + bin: + metro-symbolicate: src/symbolicate.js + checksum: ce898d3c1ec1f64526d5125e5251d25cdcfbf2a1e0712c96ae0675fde82bb56bd0ad504e01823f1b89229e775e04008f17f0bb290c06ac7cb8780d631416e718 + languageName: node + linkType: hard + "metro-symbolicate@npm:0.59.0": version: 0.59.0 resolution: "metro-symbolicate@npm:0.59.0" @@ -24885,7 +29057,73 @@ __metadata: languageName: node linkType: hard -"metro@npm:0.59.0, metro@npm:^0.59.0": +"metro@npm:0.58.0, metro@npm:^0.58.0": + version: 0.58.0 + resolution: "metro@npm:0.58.0" + dependencies: + "@babel/code-frame": ^7.0.0 + "@babel/core": ^7.0.0 + "@babel/generator": ^7.5.0 + "@babel/parser": ^7.0.0 + "@babel/plugin-external-helpers": ^7.0.0 + "@babel/template": ^7.0.0 + "@babel/traverse": ^7.0.0 + "@babel/types": ^7.0.0 + absolute-path: ^0.0.0 + async: ^2.4.0 + babel-preset-fbjs: ^3.3.0 + buffer-crc32: ^0.2.13 + chalk: ^2.4.1 + ci-info: ^2.0.0 + concat-stream: ^1.6.0 + connect: ^3.6.5 + debug: ^2.2.0 + denodeify: ^1.2.1 + eventemitter3: ^3.0.0 + fbjs: ^1.0.0 + fs-extra: ^1.0.0 + graceful-fs: ^4.1.3 + image-size: ^0.6.0 + invariant: ^2.2.4 + jest-haste-map: ^24.7.1 + jest-worker: ^24.6.0 + json-stable-stringify: ^1.0.1 + lodash.throttle: ^4.1.1 + merge-stream: ^1.0.1 + metro-babel-register: 0.58.0 + metro-babel-transformer: 0.58.0 + metro-cache: 0.58.0 + metro-config: 0.58.0 + metro-core: 0.58.0 + metro-inspector-proxy: 0.58.0 + metro-minify-uglify: 0.58.0 + metro-react-native-babel-preset: 0.58.0 + metro-resolver: 0.58.0 + metro-source-map: 0.58.0 + metro-symbolicate: 0.58.0 + mime-types: 2.1.11 + mkdirp: ^0.5.1 + node-fetch: ^2.2.0 + nullthrows: ^1.1.1 + resolve: ^1.5.0 + rimraf: ^2.5.4 + serialize-error: ^2.1.0 + source-map: ^0.5.6 + strip-ansi: ^4.0.0 + temp: 0.8.3 + throat: ^4.1.0 + wordwrap: ^1.0.0 + write-file-atomic: ^1.2.0 + ws: ^1.1.5 + xpipe: ^1.0.5 + yargs: ^14.2.0 + bin: + metro: src/cli.js + checksum: c45f58093678b5a137832c0e6744d0fd19acfe16377ea6a6918c8991d5b96479638b13ddf012de5593bd91b5dc5945c1d92648470d364cb2709214f8ded7f4a3 + languageName: node + linkType: hard + +"metro@npm:0.59.0": version: 0.59.0 resolution: "metro@npm:0.59.0" dependencies: @@ -24979,13 +29217,23 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" +"micromatch@npm:^4.0.2": + version: 4.0.2 + resolution: "micromatch@npm:4.0.2" dependencies: - braces: ^3.0.2 - picomatch: ^2.3.1 - checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + braces: ^3.0.1 + picomatch: ^2.0.5 + checksum: 39590a96d9ffad21f0afac044d0a5af4f33715a16fdd82c53a01c8f5ff6f70832a31b53e52972dac3deff8bf9f0bed0207d1c34e54ab3306a5e4c4efd5f7d249 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.4 + resolution: "micromatch@npm:4.0.4" + dependencies: + braces: ^3.0.1 + picomatch: ^2.2.3 + checksum: ef3d1c88e79e0a68b0e94a03137676f3324ac18a908c245a9e5936f838079fcc108ac7170a5fadc265a9c2596963462e402841406bda1a4bb7b68805601d631c languageName: node linkType: hard @@ -25008,7 +29256,21 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": +"mime-db@npm:1.42.0, mime-db@npm:>= 1.40.0 < 2": + version: 1.42.0 + resolution: "mime-db@npm:1.42.0" + checksum: b563c0f4af608ef26f6579648914f69fa6a94c68cccaeeafdc6f64dbddde09254e0e24c727ac68ffe38ad84d2d254014b2f0029d0ad99332d821062fa35e70c0 + languageName: node + linkType: hard + +"mime-db@npm:1.49.0": + version: 1.49.0 + resolution: "mime-db@npm:1.49.0" + checksum: 3744efc45b17896ff8a5934a761c434d5ffe3c7816662002d799ca9934347e00f99ae4d9b4ddf1c48d391cc9e522cc4523a6e77e7701f8e27c426e3e1d6e215a + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f @@ -25031,7 +29293,16 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.25, mime-types@npm:^2.1.27, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24": + version: 2.1.25 + resolution: "mime-types@npm:2.1.25" + dependencies: + mime-db: 1.42.0 + checksum: 5bcb035ef08da86c1569ce01394a6be30e876a99d336479b453f23a38e602ee09817583b8c6d29d5763cce3eccc3885a51344aeef93209edf35a13b8e1eceb28 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.25, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -25040,6 +29311,15 @@ __metadata: languageName: node linkType: hard +"mime-types@npm:^2.1.27": + version: 2.1.32 + resolution: "mime-types@npm:2.1.32" + dependencies: + mime-db: 1.49.0 + checksum: 4487dfd2f872126d2c219ec731ad47a6169a438d5a4cce6ecef7594ce08eaefaf0d85429485a76ec005f095016c7ec488a24cf8bfcc0ea06de0355e23395746f + languageName: node + linkType: hard + "mime@npm:1.6.0, mime@npm:^1.4.1": version: 1.6.0 resolution: "mime@npm:1.6.0" @@ -25049,7 +29329,7 @@ __metadata: languageName: node linkType: hard -"mime@npm:^2.0.3, mime@npm:^2.4.1, mime@npm:^2.4.4": +"mime@npm:^2.0.3": version: 2.6.0 resolution: "mime@npm:2.6.0" bin: @@ -25058,6 +29338,24 @@ __metadata: languageName: node linkType: hard +"mime@npm:^2.4.1": + version: 2.4.6 + resolution: "mime@npm:2.4.6" + bin: + mime: cli.js + checksum: c9032340558782002b881decf3a3e786831a7efa7647d6448da33f029efe86edcfe30f2564a9c8851c51c8f12e5b92928c89418a4b6ba88826dc47b12216c505 + languageName: node + linkType: hard + +"mime@npm:^2.4.4": + version: 2.4.4 + resolution: "mime@npm:2.4.4" + bin: + mime: cli.js + checksum: a8dad06df1a55f56241789ed0bd0b8b42042bf9575b35ba4bbe3051352569511d191a882168f990b2d845ce41a77b0f48347f085344494874e86ed7969f3973b + languageName: node + linkType: hard + "mimic-fn@npm:^1.0.0": version: 1.2.0 resolution: "mimic-fn@npm:1.2.0" @@ -25072,7 +29370,7 @@ __metadata: languageName: node linkType: hard -"mimic-response@npm:^1.0.0": +"mimic-response@npm:^1.0.0, mimic-response@npm:^1.0.1": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 @@ -25095,6 +29393,19 @@ __metadata: languageName: node linkType: hard +"mini-create-react-context@npm:^0.4.0": + version: 0.4.0 + resolution: "mini-create-react-context@npm:0.4.0" + dependencies: + "@babel/runtime": ^7.5.5 + tiny-warning: ^1.0.3 + peerDependencies: + prop-types: ^15.0.0 + react: ^0.14.0 || ^15.0.0 || ^16.0.0 + checksum: 553157d66c7ff019a317acf68e90212aed5bdd5ea2051d57cbaba8f55c01c5922238f2879be8820bbacf85bcf1dec5c2d76bf5195ada9cca967eb32e579c1ae5 + languageName: node + linkType: hard + "mini-css-extract-plugin@npm:0.11.3": version: 0.11.3 resolution: "mini-css-extract-plugin@npm:0.11.3" @@ -25116,19 +29427,19 @@ __metadata: languageName: node linkType: hard -"minimalistic-crypto-utils@npm:^1.0.1": +"minimalistic-crypto-utils@npm:^1.0.0, minimalistic-crypto-utils@npm:^1.0.1": version: 1.0.1 resolution: "minimalistic-crypto-utils@npm:1.0.1" checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed languageName: node linkType: hard -"minimatch@npm:2 || 3, minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" +"minimatch@npm:2 || 3, minimatch@npm:3.0.4, minimatch@npm:^3.0.2, minimatch@npm:^3.0.4": + version: 3.0.4 + resolution: "minimatch@npm:3.0.4" dependencies: brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 languageName: node linkType: hard @@ -25141,21 +29452,21 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:3.0.4": - version: 3.0.4 - resolution: "minimatch@npm:3.0.4" +"minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" dependencies: brace-expansion: ^1.1.7 - checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a languageName: node linkType: hard "minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" + version: 5.1.0 + resolution: "minimatch@npm:5.1.0" dependencies: brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 + checksum: 15ce53d31a06361e8b7a629501b5c75491bc2b59712d53e802b1987121d91b433d73fcc5be92974fde66b2b51d8fb28d75a9ae900d249feb792bb1ba2a4f0a90 languageName: node linkType: hard @@ -25170,17 +29481,31 @@ __metadata: languageName: node linkType: hard -"minimist@npm:1.2.0": +"minimist@npm:0.0.8": + version: 0.0.8 + resolution: "minimist@npm:0.0.8" + checksum: 042f8b626b1fa44dffc23bac55771425ac4ee9d267b56f9064c07713e516e1799f3ba933bb628d2475a210caf7dcdb98161611baa1f0daf49309a944cb4bc48f + languageName: node + linkType: hard + +"minimist@npm:1.2.0, minimist@npm:^1.1.0, minimist@npm:^1.1.1, minimist@npm:^1.1.3, minimist@npm:^1.2.0": version: 1.2.0 resolution: "minimist@npm:1.2.0" checksum: 72473f0fce6692cf1e134dfdccfcfddd64d354d465dac3e43053e0c6d398eb9684c9d964f666e3c1be93829de47cb1ddf3cd26d4071322ed25fbaa625441dd85 languageName: node linkType: hard -"minimist@npm:^1.1.0, minimist@npm:^1.1.1, minimist@npm:^1.1.3, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 +"minimist@npm:1.2.5, minimist@npm:^1.2.5": + version: 1.2.5 + resolution: "minimist@npm:1.2.5" + checksum: 86706ce5b36c16bfc35c5fe3dbb01d5acdc9a22f2b6cc810b6680656a1d2c0e44a0159c9a3ba51fb072bb5c203e49e10b51dcd0eec39c481f4c42086719bae52 + languageName: node + linkType: hard + +"minimist@npm:~0.0.1": + version: 0.0.10 + resolution: "minimist@npm:0.0.10" + checksum: f7b2cb17af165d042bb3d2803f5e6c38d137f0c36a62230fdb643058c25b56749d2c335b17d4de0b0f08f19cb868cac40df207ff7a4c59fd0771e8762e9b783c languageName: node linkType: hard @@ -25194,8 +29519,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" + version: 2.1.0 + resolution: "minipass-fetch@npm:2.1.0" dependencies: encoding: ^0.1.13 minipass: ^3.1.6 @@ -25204,7 +29529,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 + checksum: 1334732859a3f7959ed22589bafd9c40384b885aebb5932328071c33f86b3eb181d54c86919675d1825ab5f1c8e4f328878c863873258d113c29d79a4b0c9c9f languageName: node linkType: hard @@ -25217,7 +29542,16 @@ __metadata: languageName: node linkType: hard -"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": +"minipass-pipeline@npm:^1.2.2": + version: 1.2.3 + resolution: "minipass-pipeline@npm:1.2.3" + dependencies: + minipass: ^3.0.0 + checksum: d4284ee4ea89ea18a789fc64d5742ba9fd9b35e93e2f755f10ea61218a5fd3f6705d7160104807be2aa1994f7ac1d05f468e2c4b96f6a2ef7bb3ff3615ca6e56 + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" dependencies: @@ -25235,7 +29569,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^2.6.0, minipass@npm:^2.9.0": +"minipass@npm:^2.6.0, minipass@npm:^2.8.6, minipass@npm:^2.9.0": version: 2.9.0 resolution: "minipass@npm:2.9.0" dependencies: @@ -25245,12 +29579,21 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" +"minipass@npm:^3.0.0, minipass@npm:^3.1.1": + version: 3.1.3 + resolution: "minipass@npm:3.1.3" + dependencies: + yallist: ^4.0.0 + checksum: 74b623c1f996caafa66772301b66a1b634b20270f0d1a731ef86195d5a1a5f9984a773a1e88a6cecfd264d6c471c4c0fc8574cd96488f01c8f74c0b600021e55 + languageName: node + linkType: hard + +"minipass@npm:^3.1.6": + version: 3.3.4 + resolution: "minipass@npm:3.3.4" dependencies: yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + checksum: 5d95a7738c54852ba78d484141e850c792e062666a2d0c681a5ac1021275beb7e1acb077e59f9523ff1defb80901aea4e30fac10ded9a20a25d819a42916ef1b languageName: node linkType: hard @@ -25261,7 +29604,7 @@ __metadata: languageName: node linkType: hard -"minizlib@npm:^1.3.3": +"minizlib@npm:^1.2.1, minizlib@npm:^1.3.3": version: 1.3.3 resolution: "minizlib@npm:1.3.3" dependencies: @@ -25326,14 +29669,25 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.4, mkdirp@npm:^0.5.5, mkdirp@npm:^0.5.6, mkdirp@npm:~0.5.0, mkdirp@npm:~0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" +"mkdirp@npm:0.x.x, mkdirp@npm:^0.5.0, mkdirp@npm:~0.5.0, mkdirp@npm:~0.5.1": + version: 0.5.1 + resolution: "mkdirp@npm:0.5.1" + dependencies: + minimist: 0.0.8 + bin: + mkdirp: bin/cmd.js + checksum: ed1ab49bb1d06c88dba7cfe930a3186f2605b5465aab7c8f24119baaba6e38f9ab4ac1695c68f476c65a48df2a69a8495049cd6e26c360ea082151a0771343d2 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.4, mkdirp@npm:^0.5.5": + version: 0.5.5 + resolution: "mkdirp@npm:0.5.5" dependencies: - minimist: ^1.2.6 + minimist: ^1.2.5 bin: mkdirp: bin/cmd.js - checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + checksum: 3bce20ea525f9477befe458ab85284b0b66c8dc3812f94155af07c827175948cdd8114852ac6c6d82009b13c1048c37f6d98743eb019651ee25c39acc8aabe7d languageName: node linkType: hard @@ -25354,38 +29708,38 @@ __metadata: linkType: hard "mocha@npm:^8.1.3": - version: 8.4.0 - resolution: "mocha@npm:8.4.0" + version: 8.1.3 + resolution: "mocha@npm:8.1.3" dependencies: - "@ungap/promise-all-settled": 1.1.2 ansi-colors: 4.1.1 browser-stdout: 1.3.1 - chokidar: 3.5.1 - debug: 4.3.1 - diff: 5.0.0 + chokidar: 3.4.2 + debug: 4.1.1 + diff: 4.0.2 escape-string-regexp: 4.0.0 find-up: 5.0.0 glob: 7.1.6 growl: 1.10.5 he: 1.2.0 - js-yaml: 4.0.0 + js-yaml: 3.14.0 log-symbols: 4.0.0 minimatch: 3.0.4 - ms: 2.1.3 - nanoid: 3.1.20 - serialize-javascript: 5.0.1 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 + ms: 2.1.2 + object.assign: 4.1.0 + promise.allsettled: 1.0.2 + serialize-javascript: 4.0.0 + strip-json-comments: 3.0.1 + supports-color: 7.1.0 which: 2.0.2 wide-align: 1.1.3 - workerpool: 6.1.0 - yargs: 16.2.0 - yargs-parser: 20.2.4 - yargs-unparser: 2.0.0 + workerpool: 6.0.0 + yargs: 13.3.2 + yargs-parser: 13.1.2 + yargs-unparser: 1.6.1 bin: _mocha: bin/_mocha mocha: bin/mocha - checksum: 4bcf00670580f009f9e20cc596cce5e2434d3562c468da783a8f935e38c4476435f12ecade43341cb8730b9d4987358038e76a075201d4bc51010927d3f8cd7c + checksum: cf9f159f181aa640d94be9f00a7c0c646606d8a1aea5451fff2b8100cc68e8cfcd412f9056ac27fafc6dffa6a5970862bad2422f710a8ca35b6e2c83ada30481 languageName: node linkType: hard @@ -25396,22 +29750,54 @@ __metadata: languageName: node linkType: hard -"moment-timezone@npm:^0.5.14, moment-timezone@npm:^0.5.25, moment-timezone@npm:^0.5.27": - version: 0.5.43 - resolution: "moment-timezone@npm:0.5.43" +"moment-timezone@npm:^0.5.14": + version: 0.5.27 + resolution: "moment-timezone@npm:0.5.27" dependencies: - moment: ^2.29.4 - checksum: 8075c897ed8a044f992ef26fe8cdbcad80caf974251db424cae157473cca03be2830de8c74d99341b76edae59f148c9d9d19c1c1d9363259085688ec1cf508d0 + moment: ">= 2.9.0" + checksum: 814bc11cf1f62cd93852499b469baa362c969ba354ba44f14eafbba1662f7ab22c026219786d9454c8f2781f12046c07aa4723f3a30083ebef9151b8dcd84f32 languageName: node linkType: hard -"moment@npm:2.x.x, moment@npm:>=2.14.0, moment@npm:^2.18.1, moment@npm:^2.19.3, moment@npm:^2.21.0, moment@npm:^2.22.2, moment@npm:^2.24.0, moment@npm:^2.29.1, moment@npm:^2.29.4": +"moment-timezone@npm:^0.5.25": + version: 0.5.39 + resolution: "moment-timezone@npm:0.5.39" + dependencies: + moment: ">= 2.9.0" + checksum: 9f972d3a29b2726d4fd1464df27738b756441fe57575f087cda91b7716a5a31d2cfd274255e3edfb15eb60af3ccf33fd339527b456092cac1a2a4124e4369c8b + languageName: node + linkType: hard + +"moment-timezone@npm:^0.5.27": + version: 0.5.37 + resolution: "moment-timezone@npm:0.5.37" + dependencies: + moment: ">= 2.9.0" + checksum: b3fc24848a396ee3801331a4b5511591df0e22241e59f55200a475603f23a8429f01887294c7a0c005dae25b8e4bef20472fbc875ff20080f26fded066559f1a + languageName: node + linkType: hard + +"moment@npm:2.x.x, moment@npm:>= 2.9.0, moment@npm:^2.18.1, moment@npm:^2.21.0, moment@npm:^2.22.2, moment@npm:^2.24.0": + version: 2.24.0 + resolution: "moment@npm:2.24.0" + checksum: 9cd93a251a2b33cb1b532eade0e496a2a7547faa6cfe37a283ee7bf69e202cd7c8ab0673d66883b5b29aed051353176dc0e6684f04073a75b0a155c500be1580 + languageName: node + linkType: hard + +"moment@npm:>=2.14.0": version: 2.29.4 resolution: "moment@npm:2.29.4" checksum: 0ec3f9c2bcba38dc2451b1daed5daded747f17610b92427bebe1d08d48d8b7bdd8d9197500b072d14e326dd0ccf3e326b9e3d07c5895d3d49e39b6803b76e80e languageName: node linkType: hard +"moment@npm:^2.19.3, moment@npm:^2.29.1": + version: 2.29.1 + resolution: "moment@npm:2.29.1" + checksum: 1e14d5f422a2687996be11dd2d50c8de3bd577c4a4ca79ba5d02c397242a933e5b941655de6c8cb90ac18f01cc4127e55b4a12ae3c527a6c0a274e455979345e + languageName: node + linkType: hard + "mongodb-uri@npm:>= 0.9.7": version: 0.9.7 resolution: "mongodb-uri@npm:0.9.7" @@ -25420,15 +29806,15 @@ __metadata: linkType: hard "morgan@npm:^1.9.0": - version: 1.10.0 - resolution: "morgan@npm:1.10.0" + version: 1.9.1 + resolution: "morgan@npm:1.9.1" dependencies: - basic-auth: ~2.0.1 + basic-auth: ~2.0.0 debug: 2.6.9 - depd: ~2.0.0 + depd: ~1.1.2 on-finished: ~2.3.0 - on-headers: ~1.0.2 - checksum: fb41e226ab5a1abf7e8909e486b387076534716d60207e361acfb5df78b84d703a7b7ea58f3046a9fd0b83d3c94bfabde32323341a1f1b26ce50680abd2ea5dd + on-headers: ~1.0.1 + checksum: 69584328686c2cb2b7b8e69000cdf8f4d02218b6539870dae9266239506a9f1cd212635441899d6c446716462976bdd594251b598ba5cb494ef65420aff1399a languageName: node linkType: hard @@ -25467,14 +29853,14 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": +"ms@npm:2.1.2, ms@npm:^2.0.0, ms@npm:^2.1.1": version: 2.1.2 resolution: "ms@npm:2.1.2" checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -25482,18 +29868,16 @@ __metadata: linkType: hard "msw@npm:^0.26.0": - version: 0.26.2 - resolution: "msw@npm:0.26.2" + version: 0.26.0 + resolution: "msw@npm:0.26.0" dependencies: "@open-draft/until": ^1.0.3 "@types/cookie": ^0.4.0 - "@types/js-levenshtein": ^1.1.0 chalk: ^4.1.0 chokidar: ^3.4.2 cookie: ^0.4.1 graphql: ^15.4.0 headers-utils: ^1.2.0 - js-levenshtein: ^1.1.6 node-fetch: ^2.6.1 node-match-path: ^0.6.1 node-request-interceptor: ^0.6.3 @@ -25502,13 +29886,13 @@ __metadata: yargs: ^16.2.0 bin: msw: cli/index.js - checksum: 65d73d16ad9d982c340cb01a8f79497cbfe96875fd9a2664bf341cd2833e77ca7b9b323725917e32bdd8ec2be83bf74ed2538f0d32c3bb16176a14c84e3f0033 + checksum: ff8276b115b1427ce653873f8841421a9992d674dc024c471650d4b7521d6962e5475b450a03aed29075cc47d427a49aa6abb3d020d55dcd35f7d00abe39d25c languageName: node linkType: hard "multer@npm:^1.4.3": - version: 1.4.4 - resolution: "multer@npm:1.4.4" + version: 1.4.3 + resolution: "multer@npm:1.4.3" dependencies: append-field: ^1.0.0 busboy: ^0.2.11 @@ -25518,7 +29902,7 @@ __metadata: on-finished: ^2.3.0 type-is: ^1.6.4 xtend: ^4.0.0 - checksum: b5550d250aeee9c4d630eaecd133af0899239f6b10cec4b448ddd0a808025b383520b8227198a8612f60c2cd2094bcb60de93d973084f889d4e40efe6dbd641e + checksum: bf1752a3ba402604601331a358633d11331c6889b3c7e9aaf195a55b0764639091b6efe7c1a12bbec0fef66751262e89b616a09305e2f9702db36070fc9670d0 languageName: node linkType: hard @@ -25541,7 +29925,7 @@ __metadata: languageName: node linkType: hard -"mustache@npm:^4.2.0": +"mustache@npm:^4.0.1": version: 4.2.0 resolution: "mustache@npm:4.2.0" bin: @@ -25575,12 +29959,21 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.12.1, nan@npm:^2.14.0, nan@npm:^2.14.1, nan@npm:^2.15.0": - version: 2.17.0 - resolution: "nan@npm:2.17.0" +"nan@npm:^2.12.1": + version: 2.14.0 + resolution: "nan@npm:2.14.0" dependencies: node-gyp: latest - checksum: ec609aeaf7e68b76592a3ba96b372aa7f5df5b056c1e37410b0f1deefbab5a57a922061e2c5b369bae9c7c6b5e6eecf4ad2dac8833a1a7d3a751e0a7c7f849ed + checksum: 6dfd00d9bf71769898dfab21ef9d2ef278b392c586147616a718b995d6a582f5caa7f2ca0f83ce956fb0def698aca813b2b6fd4598125cd16bdc85924c34a37d + languageName: node + linkType: hard + +"nan@npm:^2.14.0": + version: 2.14.1 + resolution: "nan@npm:2.14.1" + dependencies: + node-gyp: latest + checksum: b6692edb0a37a7e85f14a2cdb71ef467c00df17e56d8738746984c0219f36494d0d826094aaa1c58ef971ea63e58e2019b6af72cb03b986d38b9821779878824 languageName: node linkType: hard @@ -25600,19 +29993,26 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:3.1.20": - version: 3.1.20 - resolution: "nanoid@npm:3.1.20" - bin: - nanoid: bin/nanoid.cjs - checksum: f6246023d5d8313c2c16be05c18cdb189a6de50ab6418b513b34086eda4aabd12866b2cbe435548c760dc43cf11830b26b14b113afde47305398e3345795e433 +"nanocolors@npm:^0.2.12, nanocolors@npm:^0.2.2, nanocolors@npm:^0.2.8": + version: 0.2.12 + resolution: "nanocolors@npm:0.2.12" + checksum: a34a63dcca29eede3db41afd1421f130423fc99e73f6c89166f57815bbf0441f02a6112651b068acfd309707215f48eec15dd38e790a8225d6762503a7c175c6 languageName: node linkType: hard "nanoid@npm:^2.0.3": - version: 2.1.11 - resolution: "nanoid@npm:2.1.11" - checksum: 18cd14386816873849787eb4e65667021bfdeb019a8f14c74287c23594c67b7c0e8f42c7d69f6aedf05cd3d100f1ddc41184f9f9b6b17fbaea1c3ee3f0704eec + version: 2.0.3 + resolution: "nanoid@npm:2.0.3" + checksum: ae6e800d13e1b5c5dae338da6e32c6242bf5c803da2ad16f5e73e6624931d0ca0c5949ea12c82d3dc08d4adcb5f26b4d12769cd7322526cce3cc5c5940bef942 + languageName: node + linkType: hard + +"nanoid@npm:^3.1.23": + version: 3.1.25 + resolution: "nanoid@npm:3.1.25" + bin: + nanoid: bin/nanoid.cjs + checksum: e2353828c7d8fde65265e9c981380102e2021f292038a93fd27288bad390339833286e8cbc7531abe1cb2c6b317e55f38b895dcb775151637bb487388558e0ff languageName: node linkType: hard @@ -25660,6 +30060,15 @@ __metadata: languageName: node linkType: hard +"ncp@npm:1.0.x": + version: 1.0.1 + resolution: "ncp@npm:1.0.1" + bin: + ncp: ./bin/ncp + checksum: 18d7cd61486068e7ac51c42e3d898516356166061d1db337b57d8bc9b6d6ec9c63e6b722b9640832d65aa894743d4716a13d41136ab20116cebca765868cd64a + languageName: node + linkType: hard + "ncp@npm:~2.0.0": version: 2.0.0 resolution: "ncp@npm:2.0.0" @@ -25670,6 +30079,19 @@ __metadata: linkType: hard "needle@npm:^2.5.0": + version: 2.5.2 + resolution: "needle@npm:2.5.2" + dependencies: + debug: ^3.2.6 + iconv-lite: ^0.4.4 + sax: ^1.2.4 + bin: + needle: bin/needle + checksum: b74b7548b1db0d155ab5245ea4360e91130c5dd07264dcda39c3d01be8a2842d15cb63f44153815ffbcc807f9524723dc049017a5e35b9e618f7766279190bc4 + languageName: node + linkType: hard + +"needle@npm:^2.5.2": version: 2.9.1 resolution: "needle@npm:2.9.1" dependencies: @@ -25682,6 +30104,13 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:0.6.2": + version: 0.6.2 + resolution: "negotiator@npm:0.6.2" + checksum: dfddaff6c06792f1c4c3809e29a427b8daef8cd437c83b08dd51d7ee11bbd1c29d9512d66b801144d6c98e910ffd8723f2432e0cbf8b18d41d2a09599c975ab3 + languageName: node + linkType: hard + "negotiator@npm:0.6.3, negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" @@ -25689,7 +30118,14 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.5.0, neo-async@npm:^2.6.0, neo-async@npm:^2.6.1, neo-async@npm:^2.6.2": +"neo-async@npm:^2.5.0, neo-async@npm:^2.6.1": + version: 2.6.1 + resolution: "neo-async@npm:2.6.1" + checksum: 8a675256aec19ec2341c445f9b43183af3fd5a461b396ec75b43f3ad4f078a0e146c99433830a25e30d726fd9e4e1688a14babe5021fea5a2aaab4163bd8a653 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.0, neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 @@ -25697,16 +30133,16 @@ __metadata: linkType: hard "nested-error-stacks@npm:^2.0.0, nested-error-stacks@npm:^2.1.0": - version: 2.1.1 - resolution: "nested-error-stacks@npm:2.1.1" - checksum: 5f452fad75db8480b4db584e1602894ff5977f8bf3d2822f7ba5cb7be80e89adf1fffa34dada3347ef313a4288850b4486eb0635b315c32bdfb505577e8880e3 + version: 2.1.0 + resolution: "nested-error-stacks@npm:2.1.0" + checksum: 206ee736f9eb83489cc093d43e7d3024255ec93c66a31eaee58ca14d5ad9d925d813494725dcf5dec264e70cd8430167b7f82a2d00b0dd099f83c78d9ca650fd languageName: node linkType: hard -"next-tick@npm:^1.1.0": - version: 1.1.0 - resolution: "next-tick@npm:1.1.0" - checksum: 83b5cf36027a53ee6d8b7f9c0782f2ba87f4858d977342bfc3c20c21629290a2111f8374d13a81221179603ffc4364f38374b5655d17b6a8f8a8c77bdea4fe8b +"next-tick@npm:~1.0.0": + version: 1.0.0 + resolution: "next-tick@npm:1.0.0" + checksum: 83fcb3d4f8d9380210b1c2b8a610463602d80283f0c0c8571c1688e1ad6cbf3a16b345f5bb7212617d4898bedcfa10dff327dc09ec20a112a5bf43a0271375fb languageName: node linkType: hard @@ -25717,16 +30153,26 @@ __metadata: languageName: node linkType: hard -"nise@npm:^4.0.4": - version: 4.1.0 - resolution: "nise@npm:4.1.0" +"nise@npm:^4.0.1": + version: 4.0.3 + resolution: "nise@npm:4.0.3" dependencies: "@sinonjs/commons": ^1.7.0 "@sinonjs/fake-timers": ^6.0.0 "@sinonjs/text-encoding": ^0.7.1 just-extend: ^4.0.2 path-to-regexp: ^1.7.0 - checksum: b2ea1c96a41c392adf746509904af565ebd667ad4e40267f6d73be3648f04267945624ba0ce6a991b779f3ae246181f71975152b93b4dafee1f62886fa897c32 + checksum: 0783236f2df4da750ac35132052c086960070a3ae9935df539c3f560e8dd096998a8b420c3a74d219b7a6d661f22bc40eab75b9f01b20264565ba3f011bcf0d0 + languageName: node + linkType: hard + +"no-case@npm:^3.0.3": + version: 3.0.3 + resolution: "no-case@npm:3.0.3" + dependencies: + lower-case: ^2.0.1 + tslib: ^1.10.0 + checksum: 1dc335f63b854833e9425f73720bedb4fcd85b06cb33768aedce826e2c3ed2718dc7cb222e0e24d296adfd16c66af3a7c1764c9618bec5f5b223520cfae8d5c8 languageName: node linkType: hard @@ -25748,11 +30194,11 @@ __metadata: linkType: hard "node-addon-api@npm:^3.0.0": - version: 3.2.1 - resolution: "node-addon-api@npm:3.2.1" + version: 3.0.0 + resolution: "node-addon-api@npm:3.0.0" dependencies: node-gyp: latest - checksum: 2369986bb0881ccd9ef6bacdf39550e07e089a9c8ede1cbc5fc7712d8e2faa4d50da0e487e333d4125f8c7a616c730131d1091676c9d499af1d74560756b4a18 + checksum: efe330a3dd7e12b157dded2ff82fbb73fee42faaa3587be8511883a9ba1417440b39e422788cb9d13d56910b77ac1e12856e50ec1a817717fef7a8079a943338 languageName: node linkType: hard @@ -25782,6 +30228,13 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:2.6.1, node-fetch@npm:^2.6.1": + version: 2.6.1 + resolution: "node-fetch@npm:2.6.1" + checksum: 91075bedd57879117e310fbcc36983ad5d699e522edb1ebcdc4ee5294c982843982652925c3532729fdc86b2d64a8a827797a745f332040d91823c8752ee4d7c + languageName: node + linkType: hard + "node-fetch@npm:2.6.7": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" @@ -25806,7 +30259,14 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.2.0, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7": +"node-fetch@npm:^2.2.0, node-fetch@npm:^2.6.0": + version: 2.6.0 + resolution: "node-fetch@npm:2.6.0" + checksum: 2b741e9315c1c07df4a291d0b304892fa7e8d623fe789fedd53f9bcb8d09102b07591b4b93e552a65dfc457eee9d5d879d0440aefdb64f2d78e7cb78cbad28e9 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.7": version: 2.6.11 resolution: "node-fetch@npm:2.6.11" dependencies: @@ -25836,14 +30296,14 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 9.3.1 - resolution: "node-gyp@npm:9.3.1" + version: 9.1.0 + resolution: "node-gyp@npm:9.1.0" dependencies: env-paths: ^2.2.0 glob: ^7.1.4 graceful-fs: ^4.2.6 make-fetch-happen: ^10.0.3 - nopt: ^6.0.0 + nopt: ^5.0.0 npmlog: ^6.0.0 rimraf: ^3.0.2 semver: ^7.3.5 @@ -25851,7 +30311,7 @@ __metadata: which: ^2.0.2 bin: node-gyp: bin/node-gyp.js - checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 + checksum: 1437fa4a879b5b9010604128e8da8609b57c66034262087539ee04a8b764b8436af2be01bab66f8fc729a3adba2dcc21b10a32b9f552696c3fa8cd657d134fc4 languageName: node linkType: hard @@ -25911,9 +30371,16 @@ __metadata: linkType: hard "node-match-path@npm:^0.6.1": - version: 0.6.3 - resolution: "node-match-path@npm:0.6.3" - checksum: d515bc069f293688109c058ee02567528fdaa856290d362b80a2254734975014e4eefcdcc5164a8adfd5560aa870e277c97fe8be648074d5088056cf61553c7c + version: 0.6.1 + resolution: "node-match-path@npm:0.6.1" + checksum: 8b48691e1d44f1b00c01bc37b429ed2643b0de4977ed4955fa0a64215d0ef690f1c4fa91bead161cd0b0b62d91977fd5636e5d81960e7121ccc6aaf052255642 + languageName: node + linkType: hard + +"node-modules-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "node-modules-regexp@npm:1.0.0" + checksum: 99541903536c5ce552786f0fca7f06b88df595e62e423c21fa86a1674ee2363dad1f7482d1bec20b4bd9fa5f262f88e6e5cb788fc56411113f2fe2e97783a3a7 languageName: node linkType: hard @@ -25931,6 +30398,26 @@ __metadata: languageName: node linkType: hard +"node-pre-gyp@npm:*": + version: 0.17.0 + resolution: "node-pre-gyp@npm:0.17.0" + dependencies: + detect-libc: ^1.0.3 + mkdirp: ^0.5.5 + needle: ^2.5.2 + nopt: ^4.0.3 + npm-packlist: ^1.4.8 + npmlog: ^4.1.2 + rc: ^1.2.8 + rimraf: ^2.7.1 + semver: ^5.7.1 + tar: ^4.4.13 + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: 148d6d4207e031da735169d0c3b3e011ad65ba84de0a92919659d5e034a5540644a9cc58abf2cdbe66d810fd25648d316aa073887bf69c471094874f1fefa4b6 + languageName: node + linkType: hard + "node-pre-gyp@npm:^0.15.0": version: 0.15.0 resolution: "node-pre-gyp@npm:0.15.0" @@ -25960,7 +30447,39 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^1.1.61": +"node-releases@npm:^1.1.42": + version: 1.1.44 + resolution: "node-releases@npm:1.1.44" + dependencies: + semver: ^6.3.0 + checksum: 5e95e5dff00dadaae85b5692180c43250ab3b0f1a1658c08d1de1128a0864f6ab62cd93206c83d4133ae8e29dd0fac1e6edf75f709554ed88bd8ce0dc8fa0a25 + languageName: node + linkType: hard + +"node-releases@npm:^1.1.46": + version: 1.1.47 + resolution: "node-releases@npm:1.1.47" + dependencies: + semver: ^6.3.0 + checksum: d4f431f1a71f5776239c6ce64499de45a120159d4c9201bd456e2b2042eafb925a60107f1f1de772f9077b985f62a158df0d26a8ea85009a7dd9d6221a6c01ea + languageName: node + linkType: hard + +"node-releases@npm:^1.1.53": + version: 1.1.55 + resolution: "node-releases@npm:1.1.55" + checksum: 40eb5ac3a52baef0144d0e5347aedcd779c82bd0609ee4b701911818380fb8728f4af7a18d00adc976d220fcd916045dc1634d53888012ad2b899e6b3b15e1e4 + languageName: node + linkType: hard + +"node-releases@npm:^1.1.61, node-releases@npm:^1.1.75": + version: 1.1.75 + resolution: "node-releases@npm:1.1.75" + checksum: 74028e7d193c9c5986b2f6bb51f4f6405a3f144599bbb19751c81faece52af8eb3f5abac40cbcd11ead44be3f856be125aa71fbb8dd8bf0c7f90caa94179ee51 + languageName: node + linkType: hard + +"node-releases@npm:^1.1.76": version: 1.1.77 resolution: "node-releases@npm:1.1.77" checksum: eb2fcb45310e7d77f82bfdadeca546a698d258e011f15d88ad9a452a5e838a672ec532906581096ca19c66284a788330c3b09227ffc540e67228730f41b9c2e2 @@ -25974,6 +30493,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.6": + version: 2.0.6 + resolution: "node-releases@npm:2.0.6" + checksum: e86a926dc9fbb3b41b4c4a89d998afdf140e20a4e8dbe6c0a807f7b2948b42ea97d7fd3ad4868041487b6e9ee98409829c6e4d84a734a4215dff060a7fbeb4bf + languageName: node + linkType: hard + "node-request-interceptor@npm:^0.6.3": version: 0.6.3 resolution: "node-request-interceptor@npm:0.6.3" @@ -25987,9 +30513,9 @@ __metadata: linkType: hard "node-stream-zip@npm:^1.9.1": - version: 1.15.0 - resolution: "node-stream-zip@npm:1.15.0" - checksum: 0b73ffbb09490e479c8f47038d7cba803e6242618fbc1b71c26782009d388742ed6fb5ce6e9d31f528b410249e7eb1c6e7534e9d3792a0cafd99813ac5a35107 + version: 1.12.0 + resolution: "node-stream-zip@npm:1.12.0" + checksum: fe1240a98e5eca9225bc7d62d073a9c11dad4afde2b59d4e15df4a74d7ccf736a1329f352e384d6b88a4710f9fc6cf0c3e463625a558ce452fa2e24c6268a585 languageName: node linkType: hard @@ -26001,26 +30527,38 @@ __metadata: linkType: hard "nodemon@npm:^2.0.4": - version: 2.0.22 - resolution: "nodemon@npm:2.0.22" + version: 2.0.4 + resolution: "nodemon@npm:2.0.4" dependencies: - chokidar: ^3.5.2 - debug: ^3.2.7 + chokidar: ^3.2.2 + debug: ^3.2.6 ignore-by-default: ^1.0.1 - minimatch: ^3.1.2 - pstree.remy: ^1.1.8 + minimatch: ^3.0.4 + pstree.remy: ^1.1.7 semver: ^5.7.1 - simple-update-notifier: ^1.0.7 supports-color: ^5.5.0 touch: ^3.1.0 - undefsafe: ^2.0.5 + undefsafe: ^2.0.2 + update-notifier: ^4.0.0 bin: nodemon: bin/nodemon.js - checksum: 9c987e139748f5b5c480c6c9080bdc97304ee7d29172b7b3da1a7db590b1323ad57b96346304e9b522b0e445c336dc393ccd3f9f45c73b20d476d2347890dcd0 + checksum: eb9e96994ed7ce3ceb8600b6e76a246b050e27071b659f7725a03f31e31863cb1dd045b52bca17b42dd049fb1772d2e36b2bf46b503aaf71e70255e46208f75b + languageName: node + linkType: hard + +"nopt@npm:^4.0.1": + version: 4.0.1 + resolution: "nopt@npm:4.0.1" + dependencies: + abbrev: 1 + osenv: ^0.1.4 + bin: + nopt: ./bin/nopt.js + checksum: 9698ffcb752bab2229e03f4a264215dbe34ce6d3465b58c5f2d7b4c2e21072f9003c0fe6b6c0ff8992cc6e2737b6bfd85b1fe92e81c78c6051b64df159c33b77 languageName: node linkType: hard -"nopt@npm:^4.0.1, nopt@npm:~4.0.1": +"nopt@npm:^4.0.3, nopt@npm:~4.0.1": version: 4.0.3 resolution: "nopt@npm:4.0.3" dependencies: @@ -26032,14 +30570,14 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" +"nopt@npm:^5.0.0": + version: 5.0.0 + resolution: "nopt@npm:5.0.0" dependencies: - abbrev: ^1.0.0 + abbrev: 1 bin: nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f languageName: node linkType: hard @@ -26119,6 +30657,13 @@ __metadata: languageName: node linkType: hard +"normalize-url@npm:^4.1.0": + version: 4.5.0 + resolution: "normalize-url@npm:4.5.0" + checksum: 34e9d01095df5c9348bf75f6cf0552c01438a29119aecdb747eead6ccd36a386209acdc093fc993edd32731b3056ff2977ffab44e4b8eed4d8aafdf0feae90c7 + languageName: node + linkType: hard + "npm-bump@npm:^0.0.23": version: 0.0.23 resolution: "npm-bump@npm:0.0.23" @@ -26133,11 +30678,11 @@ __metadata: linkType: hard "npm-bundled@npm:^1.0.1": - version: 1.1.2 - resolution: "npm-bundled@npm:1.1.2" + version: 1.1.1 + resolution: "npm-bundled@npm:1.1.1" dependencies: npm-normalize-package-bin: ^1.0.1 - checksum: 6e599155ef28d0b498622f47f1ba189dfbae05095a1ed17cb3a5babf961e965dd5eab621f0ec6f0a98de774e5836b8f5a5ee639010d64f42850a74acec3d4d09 + checksum: da5c227ff6aa32de84f728225fd2671ae4611d8d6e5dfb15d146353e48f644ec8dfb0b030760c359c00a8b9d5417b6b93843529e639d4583ce5adb8cece639da languageName: node linkType: hard @@ -26174,6 +30719,16 @@ __metadata: linkType: hard "npm-packlist@npm:^1.1.6": + version: 1.4.7 + resolution: "npm-packlist@npm:1.4.7" + dependencies: + ignore-walk: ^3.0.1 + npm-bundled: ^1.0.1 + checksum: d19254f1d6ada0e50de02b96f69d344d8141303bb675c6c7a133719f963b63e3e41f743880f3152ab10dd0c179da00ef92f2e9a002c36931b178327dcb0991f4 + languageName: node + linkType: hard + +"npm-packlist@npm:^1.4.8": version: 1.4.8 resolution: "npm-packlist@npm:1.4.8" dependencies: @@ -26223,7 +30778,7 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^4.0.2": +"npmlog@npm:^4.0.2, npmlog@npm:^4.1.2": version: 4.1.2 resolution: "npmlog@npm:4.1.2" dependencies: @@ -26259,7 +30814,7 @@ __metadata: languageName: node linkType: hard -"nth-check@npm:^1.0.2": +"nth-check@npm:^1.0.2, nth-check@npm:~1.0.1": version: 1.0.2 resolution: "nth-check@npm:1.0.2" dependencies: @@ -26306,9 +30861,9 @@ __metadata: linkType: hard "nwsapi@npm:^2.2.0": - version: 2.2.5 - resolution: "nwsapi@npm:2.2.5" - checksum: 3acfe387214e2a9a03960662ad600ecb41fc24385c9de91262a881608407f02d14686e5df3e6e87af0cf7b173ed2a6a202a569ab7bef376ec1841cd9b6cbf0a6 + version: 2.2.0 + resolution: "nwsapi@npm:2.2.0" + checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 languageName: node linkType: hard @@ -26356,6 +30911,13 @@ __metadata: languageName: node linkType: hard +"ob1@npm:0.58.0": + version: 0.58.0 + resolution: "ob1@npm:0.58.0" + checksum: 62c26fa829af2c4ce495819c4eb5b394cb7f6347a66099a50dc482de476de79a96ebeaa97a5b79d7daf73d8c6bceae216ad660850471a0ceae18018817143ce2 + languageName: node + linkType: hard + "ob1@npm:0.59.0": version: 0.59.0 resolution: "ob1@npm:0.59.0" @@ -26381,14 +30943,35 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": - version: 1.12.3 - resolution: "object-inspect@npm:1.12.3" - checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db +"object-inspect@npm:^1.11.0, object-inspect@npm:^1.9.0": + version: 1.11.0 + resolution: "object-inspect@npm:1.11.0" + checksum: 8c64f89ce3a7b96b6925879ad5f6af71d498abc217e136660efecd97452991216f375a7eb47cb1cb50643df939bf0c7cc391567b7abc6a924d04679705e58e27 languageName: node linkType: hard -"object-is@npm:^1.0.1, object-is@npm:^1.1.5": +"object-inspect@npm:^1.7.0": + version: 1.7.0 + resolution: "object-inspect@npm:1.7.0" + checksum: 53cc00d1a95025228d09549a6562905171932ae83a50b95f3bda7daaaf8ac7c518577180f1dfe72d262c0824737a81f025d93e4992c0506a268fb3f3bfaef3e9 + languageName: node + linkType: hard + +"object-inspect@npm:^1.8.0": + version: 1.8.0 + resolution: "object-inspect@npm:1.8.0" + checksum: 1bb4ed43972ad29537bee9b2b3f543d7e6463ee3b929048ecddcb50f7796c418c679ba2104f2e37cd7fa486782b6278b9d1c9cccb4bbc7ca17cd529f3ae4dc1f + languageName: node + linkType: hard + +"object-is@npm:^1.0.1": + version: 1.0.2 + resolution: "object-is@npm:1.0.2" + checksum: 736cbe568e7f80f9c4ee7295af47be3a49423b549f5afc8b5c33dfa063b7a0959077109709f473a3c053268593ded108fd5dd7e2011faee3fd3aeaeb0a189ef9 + languageName: node + linkType: hard + +"object-is@npm:^1.1.5": version: 1.1.5 resolution: "object-is@npm:1.1.5" dependencies: @@ -26398,7 +30981,7 @@ __metadata: languageName: node linkType: hard -"object-keys@npm:^1.1.1": +"object-keys@npm:^1.0.11, object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a @@ -26414,7 +30997,43 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": +"object.assign@npm:4.1.0, object.assign@npm:^4.1.0": + version: 4.1.0 + resolution: "object.assign@npm:4.1.0" + dependencies: + define-properties: ^1.1.2 + function-bind: ^1.1.1 + has-symbols: ^1.0.0 + object-keys: ^1.0.11 + checksum: 648a9a463580bf48332d9a49a76fede2660ab1ee7104d9459b8a240562246da790b4151c3c073f28fda31c1fdc555d25a1d871e72be403e997e4468c91f4801f + languageName: node + linkType: hard + +"object.assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object.assign@npm:4.1.1" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.0 + has-symbols: ^1.0.1 + object-keys: ^1.1.1 + checksum: e2aaf60315e6d9c38beb1c22aeac7d1b1f2f32e43e55efc7ffd580bb10923fff1407a1f1e3be67b990aba524b71ca1c969d0bb9490815746767ab32d943b4afa + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2": + version: 4.1.2 + resolution: "object.assign@npm:4.1.2" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + has-symbols: ^1.0.1 + object-keys: ^1.1.1 + checksum: d621d832ed7b16ac74027adb87196804a500d80d9aca536fccb7ba48d33a7e9306a75f94c1d29cbfa324bc091bfc530bc24789568efdaee6a47fcfa298993814 + languageName: node + linkType: hard + +"object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -26438,48 +31057,48 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.0, object.entries@npm:^1.1.1, object.entries@npm:^1.1.2, object.entries@npm:^1.1.6": - version: 1.1.6 - resolution: "object.entries@npm:1.1.6" +"object.entries@npm:^1.1.0": + version: 1.1.1 + resolution: "object.entries@npm:1.1.1" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + function-bind: ^1.1.1 + has: ^1.0.3 + checksum: e3183f0a51beab33fecc0a3eab00ffac95e9f04c328bfc7d52020806a464d906156a04b2a7ceb3bde46957e6d979b75dcd83b957b97aa2b98662f05d40bda76a languageName: node linkType: hard -"object.fromentries@npm:^2.0.0 || ^1.0.0, object.fromentries@npm:^2.0.2, object.fromentries@npm:^2.0.6": - version: 2.0.6 - resolution: "object.fromentries@npm:2.0.6" +"object.entries@npm:^1.1.1, object.entries@npm:^1.1.2": + version: 1.1.2 + resolution: "object.entries@npm:1.1.2" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85 + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + has: ^1.0.3 + checksum: fa97173d30312086b6adbff2b87b60799656c7aca5016f2bc69b20f313125e7763ca5bc1c1cbfd0949942291cc1b5d4cdfd362817dc6ab79f136c0e5df072e64 languageName: node linkType: hard -"object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.0, object.getownpropertydescriptors@npm:^2.1.2": - version: 2.1.6 - resolution: "object.getownpropertydescriptors@npm:2.1.6" +"object.fromentries@npm:^2.0.0 || ^1.0.0, object.fromentries@npm:^2.0.2": + version: 2.0.2 + resolution: "object.fromentries@npm:2.0.2" dependencies: - array.prototype.reduce: ^1.0.5 - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.21.2 - safe-array-concat: ^1.0.0 - checksum: 7757ce0ef61c8bee7f8043f8980fd3d46fc1ab3faf0795bd1f9f836781143b4afc91f7219a3eed4675fbd0b562f3708f7e736d679ebfd43ea37ab6077d9f5004 + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + function-bind: ^1.1.1 + has: ^1.0.3 + checksum: 950ab9e9064814a1531d84cc2d0237120035514d9038d3e24bfca849ec612c5036398bd7969145431b16c4752fd216c6420dd86dc2cd6d4a48ff8ca8d1111414 languageName: node linkType: hard -"object.hasown@npm:^1.1.2": - version: 1.1.2 - resolution: "object.hasown@npm:1.1.2" +"object.getownpropertydescriptors@npm:^2.0.3": + version: 2.1.0 + resolution: "object.getownpropertydescriptors@npm:2.1.0" dependencies: - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566 + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + checksum: a3763085ce840b8f8de4df1e354303d21461454b91b6f6408871cb7be31af975fce45163e4c380c0704c3cfc9e06197d80a4b4a99fa83cc111d075311ae02cc7 languageName: node linkType: hard @@ -26502,21 +31121,33 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.0, object.values@npm:^1.1.1, object.values@npm:^1.1.6": - version: 1.1.6 - resolution: "object.values@npm:1.1.6" +"object.values@npm:^1.1.0, object.values@npm:^1.1.1": + version: 1.1.1 + resolution: "object.values@npm:1.1.1" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + function-bind: ^1.1.1 + has: ^1.0.3 + checksum: f1217c09fa3338698bf748514f9d5cd279744fd34e6593920faf2ad0c8eb339b3b783b6ac0b02d9285d6ead53bcf7b1ac0a5aee4717b7e38c451336796ecb8af + languageName: node + linkType: hard + +"object.values@npm:^1.1.4": + version: 1.1.4 + resolution: "object.values@npm:1.1.4" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + define-properties: ^1.1.3 + es-abstract: ^1.18.2 + checksum: 1a2f1e9d0bcfc299b8491170a50e6e7ca23392641d7781a8528e96c72f0013ba7ee731792ff8586c8eaec0328acda16c59622924c82c58bd0eb5c4ee67794856 languageName: node linkType: hard -"objectorarray@npm:^1.0.5": - version: 1.0.5 - resolution: "objectorarray@npm:1.0.5" - checksum: 8fd776aa495d113e217837f4adc1d53e63f656498237094d25f84c3e2c038b34b71d6fd85c4b60c7ae5f558790e5042426a400fae3eac35f297e11be12643a78 +"objectorarray@npm:^1.0.4": + version: 1.0.4 + resolution: "objectorarray@npm:1.0.4" + checksum: f6b1dca119c1eb84ae7870de13066b2171512c826869d3655a13369b91ab7e035a44cc218a0bb09c893455031665f9c13bc0efadec5060c0356cf52311751465 languageName: node linkType: hard @@ -26534,7 +31165,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1, on-finished@npm:^2.3.0": +"on-finished@npm:2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -26543,7 +31174,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:~2.3.0": +"on-finished@npm:^2.3.0, on-finished@npm:~2.3.0": version: 2.3.0 resolution: "on-finished@npm:2.3.0" dependencies: @@ -26552,7 +31183,7 @@ __metadata: languageName: node linkType: hard -"on-headers@npm:~1.0.2": +"on-headers@npm:~1.0.1, on-headers@npm:~1.0.2": version: 1.0.2 resolution: "on-headers@npm:1.0.2" checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 @@ -26593,7 +31224,16 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": +"onetime@npm:^5.1.0": + version: 5.1.0 + resolution: "onetime@npm:5.1.0" + dependencies: + mimic-fn: ^2.1.0 + checksum: 426c13de5015249d2e38855e9900276ad34d9d2738f780ed4bf8d1334deab4ca7a45628e36ce8a6c5f679b0508c65bb0907dbbd6f67a6e23bd1187e501834f71 + languageName: node + linkType: hard + +"onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -26611,13 +31251,23 @@ __metadata: languageName: node linkType: hard -"open@npm:^7.0.2, open@npm:^7.0.3": - version: 7.4.2 - resolution: "open@npm:7.4.2" +"open@npm:^7.0.2": + version: 7.0.4 + resolution: "open@npm:7.0.4" + dependencies: + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + checksum: efd3b3ecd0fa4c192da2ae1a21b606f928af2e4d9accf8ea5a23cd010f3f4bdd6aaf1e54d55572b0ff829aff5e055e25066d5391265eecba8a74f298bdff55d3 + languageName: node + linkType: hard + +"open@npm:^7.0.3": + version: 7.1.0 + resolution: "open@npm:7.1.0" dependencies: is-docker: ^2.0.0 is-wsl: ^2.1.1 - checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 + checksum: 08bb7c4a8fb4d22cabe2d588c31ff403af4f626842acc5252e8330a68af3f0a2a42a590fe478dc334ff47cb327b2a97cc637224c1d4d45f61b3c9e93a6d3da4d languageName: node linkType: hard @@ -26650,6 +31300,16 @@ __metadata: languageName: node linkType: hard +"optimist@npm:~0.6.1": + version: 0.6.1 + resolution: "optimist@npm:0.6.1" + dependencies: + minimist: ~0.0.1 + wordwrap: ~0.0.2 + checksum: 191ab2b119b2908a229065119349d9cbd295217a8777febd2812fc7b95c5f31f5f6ecb4fd0222351466cb33af8410299373229e78dd96713ed5348fcebfb96f4 + languageName: node + linkType: hard + "optimize-css-assets-webpack-plugin@npm:5.0.4": version: 5.0.4 resolution: "optimize-css-assets-webpack-plugin@npm:5.0.4" @@ -26728,7 +31388,7 @@ __metadata: languageName: node linkType: hard -"original@npm:>=0.0.5": +"original@npm:>=0.0.5, original@npm:^1.0.0": version: 1.0.2 resolution: "original@npm:1.0.2" dependencies: @@ -26782,6 +31442,13 @@ __metadata: languageName: node linkType: hard +"overlayscrollbars@npm:^1.13.1": + version: 1.13.1 + resolution: "overlayscrollbars@npm:1.13.1" + checksum: 6f3be25b60dd9c2adcb6bd42d51f1ac72a1538247dfa991f5238602fc941ede0ec1fb0f04d4e1367d85ac2e95bdb27d81e05c7e3bfdff585c48a5cd611af9271 + languageName: node + linkType: hard + "p-all@npm:^2.1.0": version: 2.1.0 resolution: "p-all@npm:2.1.0" @@ -26798,10 +31465,17 @@ __metadata: languageName: node linkType: hard +"p-cancelable@npm:^1.0.0": + version: 1.1.0 + resolution: "p-cancelable@npm:1.1.0" + checksum: 2db3814fef6d9025787f30afaee4496a8857a28be3c5706432cbad76c688a6db1874308f48e364a42f5317f5e41e8e7b4f2ff5c8ff2256dbb6264bc361704ece + languageName: node + linkType: hard + "p-each-series@npm:^2.1.0": - version: 2.2.0 - resolution: "p-each-series@npm:2.2.0" - checksum: 5fbe2f1f1966f55833bd401fe36f7afe410707d5e9fb6032c6dde8aa716d50521c3bb201fdb584130569b5941d5e84993e09e0b3f76a474288e0ede8f632983c + version: 2.1.0 + resolution: "p-each-series@npm:2.1.0" + checksum: 072f3ac2639ed3df341d1ce4421949be70a27547a45fbd2ee13328a3977e3190120f35a685a350cf491e5632afdc2f0a2cd7af7f81c3318095481434e8464b01 languageName: node linkType: hard @@ -26846,7 +31520,16 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": +"p-limit@npm:^2.0.0": + version: 2.2.1 + resolution: "p-limit@npm:2.2.1" + dependencies: + p-try: ^2.0.0 + checksum: e0660ac7ecdc9a898e2b9802b5b1fc3306c9dfb24d9c8a81ea204dd07e30096af194bdca2a2b5d248a1cb06a94ab6ce003c31ccd99a1e2b151438fab7abb8b4a + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -26856,11 +31539,11 @@ __metadata: linkType: hard "p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" + version: 3.0.2 + resolution: "p-limit@npm:3.0.2" dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + p-try: ^2.0.0 + checksum: a3ed7ee45457a167dcd8e59fc4a42aeffcd4954bbadc769101fa2e45ded1e62184cf61102d8528f1ab2ebead662b9ada81d8d5c4651b5e577c1a22e5cb0372d9 languageName: node linkType: hard @@ -26978,6 +31661,18 @@ __metadata: languageName: node linkType: hard +"package-json@npm:^6.3.0": + version: 6.5.0 + resolution: "package-json@npm:6.5.0" + dependencies: + got: ^9.6.0 + registry-auth-token: ^4.0.0 + registry-url: ^5.0.0 + semver: ^6.2.0 + checksum: cc9f890d3667d7610e6184decf543278b87f657d1ace0deb4a9c9155feca738ef88f660c82200763d3348010f4e42e9c7adc91e96ab0f86a770955995b5351e2 + languageName: node + linkType: hard + "packet-reader@npm:1.0.0": version: 1.0.0 resolution: "packet-reader@npm:1.0.0" @@ -26993,9 +31688,9 @@ __metadata: linkType: hard "pako@npm:~1.0.5": - version: 1.0.11 - resolution: "pako@npm:1.0.11" - checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 + version: 1.0.10 + resolution: "pako@npm:1.0.10" + checksum: 02e35639495ba8a36a489a925c37f6faffb4be75238da1d52371cb38f674b18c5c95babed24f4616d9877776bd00e4969e7e9f6413ae9b3fd43189a7cea237c3 languageName: node linkType: hard @@ -27010,7 +31705,17 @@ __metadata: languageName: node linkType: hard -"param-case@npm:^3.0.3, param-case@npm:^3.0.4": +"param-case@npm:^3.0.3": + version: 3.0.3 + resolution: "param-case@npm:3.0.3" + dependencies: + dot-case: ^3.0.3 + tslib: ^1.10.0 + checksum: aff6a8fb1e0a271fc9ee366a39eb33d8cb9302f62c000a06f37fe8c8ed47970fb272d8f899749ee51d46b2b73e8f5daa471fc9c45ce4669d763d1baf1c2668e8 + languageName: node + linkType: hard + +"param-case@npm:^3.0.4": version: 3.0.4 resolution: "param-case@npm:3.0.4" dependencies: @@ -27029,16 +31734,17 @@ __metadata: languageName: node linkType: hard -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": - version: 5.1.6 - resolution: "parse-asn1@npm:5.1.6" +"parse-asn1@npm:^5.0.0": + version: 5.1.5 + resolution: "parse-asn1@npm:5.1.5" dependencies: - asn1.js: ^5.2.0 + asn1.js: ^4.0.0 browserify-aes: ^1.0.0 + create-hash: ^1.1.0 evp_bytestokey: ^1.0.0 pbkdf2: ^3.0.3 safe-buffer: ^5.1.1 - checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7 + checksum: e3bf40ce4953ec66754fd692bafdd99d9f00a6bb05822361f47222f959ddf5d1f9928088cda3892433f81eee6394ac1d1d9dd4dbd5d5cdc567b644a2cf860a0a languageName: node linkType: hard @@ -27095,15 +31801,15 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" +"parse-json@npm:^5.0.0": + version: 5.0.0 + resolution: "parse-json@npm:5.0.0" dependencies: "@babel/code-frame": ^7.0.0 error-ex: ^1.3.1 - json-parse-even-better-errors: ^2.3.0 + json-parse-better-errors: ^1.0.1 lines-and-columns: ^1.1.6 - checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + checksum: bfe9108b5305a58f7e6575faaba2968e48e61ba3e784d6bf06d297f6127e00deb3d8161dd567e6988ddb5da50c8ff00f44197f917d63de070025bc2ce185c180 languageName: node linkType: hard @@ -27130,29 +31836,26 @@ __metadata: languageName: node linkType: hard -"parse5-htmlparser2-tree-adapter@npm:^7.0.0": - version: 7.0.0 - resolution: "parse5-htmlparser2-tree-adapter@npm:7.0.0" - dependencies: - domhandler: ^5.0.2 - parse5: ^7.0.0 - checksum: fc5d01e07733142a1baf81de5c2a9c41426c04b7ab29dd218acb80cd34a63177c90aff4a4aee66cf9f1d0aeecff1389adb7452ad6f8af0a5888e3e9ad6ef733d - languageName: node - linkType: hard - -"parse5@npm:6.0.1, parse5@npm:^6.0.0": +"parse5@npm:6.0.1": version: 6.0.1 resolution: "parse5@npm:6.0.1" checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd languageName: node linkType: hard -"parse5@npm:^7.0.0": - version: 7.1.2 - resolution: "parse5@npm:7.1.2" +"parse5@npm:^3.0.1": + version: 3.0.3 + resolution: "parse5@npm:3.0.3" dependencies: - entities: ^4.4.0 - checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + "@types/node": "*" + checksum: 6a82d59d60496f4a8bba99daee37eda728adb403197b9c9a163dcc02e369758992bcc67f1618d4f1445f4b12e7651e001c2847e446b8376d4d706e1d571f570d + languageName: node + linkType: hard + +"parse5@npm:^6.0.0": + version: 6.0.0 + resolution: "parse5@npm:6.0.0" + checksum: 6cd6af9f96bb88664c2e9148795e9a5d6d4e5359e84d0650cb12c68c020d069ef8dbd17e73805ae87dc71a98b417f1212aad68668506f630dc6886ad94af290f languageName: node linkType: hard @@ -27163,6 +31866,16 @@ __metadata: languageName: node linkType: hard +"pascal-case@npm:^3.1.1": + version: 3.1.1 + resolution: "pascal-case@npm:3.1.1" + dependencies: + no-case: ^3.0.3 + tslib: ^1.10.0 + checksum: 7e37861305c19d1021f0d2f9f03802372579a44315a5c3ae4157d91dbc05340ee6a54b06ef4f6d85ce124d810e1bd25b039c2b5f7100eee91561d348307d7b8c + languageName: node + linkType: hard + "pascal-case@npm:^3.1.2": version: 3.1.2 resolution: "pascal-case@npm:3.1.2" @@ -27262,7 +31975,14 @@ __metadata: languageName: node linkType: hard -"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": +"path-parse@npm:^1.0.6": + version: 1.0.6 + resolution: "path-parse@npm:1.0.6" + checksum: 962a85dd384d68d469ec5ba4010df8f8f9b7e936ce603bbe3211476c5615feb3c2b1ca61211a78445fadc833f0b1a86ea6484c861035ec4ac93011ba9aff9a11 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a @@ -27345,29 +32065,29 @@ __metadata: linkType: hard "pathe@npm:^1.1.0": - version: 1.1.0 - resolution: "pathe@npm:1.1.0" - checksum: 6b9be9968ea08a90c0824934799707a1c6a1ad22ac1f22080f377e3f75856d5e53a331b01d327329bfce538a14590587cfb250e8e7947f64408797c84c252056 + version: 1.1.1 + resolution: "pathe@npm:1.1.1" + checksum: 34ab3da2e5aa832ebc6a330ffe3f73d7ba8aec6e899b53b8ec4f4018de08e40742802deb12cf5add9c73b7bf719b62c0778246bd376ca62b0fb23e0dde44b759 languageName: node linkType: hard -"pathval@npm:^1.1.1": - version: 1.1.1 - resolution: "pathval@npm:1.1.1" - checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 +"pathval@npm:^1.1.0": + version: 1.1.0 + resolution: "pathval@npm:1.1.0" + checksum: a6919cf5b14ba9458e51005daeb476095fbc1392c66388151058aba664c27987438152eba258852eee1812e3c20435ddf096b99a7c871543635657837595c50e languageName: node linkType: hard "pbkdf2@npm:^3.0.3": - version: 3.1.2 - resolution: "pbkdf2@npm:3.1.2" + version: 3.0.17 + resolution: "pbkdf2@npm:3.0.17" dependencies: create-hash: ^1.1.2 create-hmac: ^1.1.4 ripemd160: ^2.0.1 safe-buffer: ^5.0.1 sha.js: ^2.4.8 - checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 + checksum: 9c9062b4bf300bfc03214a8665ab1c8ede227fca1d5bd8b8d0a9d317a941ff64c80b19810288a8cc0f774d603dce249d4b734e62b68dfc784be4ad1e6c0a81f5 languageName: node linkType: hard @@ -27396,13 +32116,6 @@ __metadata: languageName: node linkType: hard -"pg-cloudflare@npm:^1.1.0": - version: 1.1.0 - resolution: "pg-cloudflare@npm:1.1.0" - checksum: fca32af487feadf337baccceca4d2a6a43c6bbe324efcdf620ea581e958e70873cbf64424bd0861d37ecaf2cd3f33319fefb49018bcae5e909dea5f2c859698d - languageName: node - linkType: hard - "pg-connection-string@npm:2.0.0": version: 2.0.0 resolution: "pg-connection-string@npm:2.0.0" @@ -27417,10 +32130,17 @@ __metadata: languageName: node linkType: hard -"pg-connection-string@npm:^2.4.0, pg-connection-string@npm:^2.6.0": - version: 2.6.0 - resolution: "pg-connection-string@npm:2.6.0" - checksum: 0262452638163c0b875495cfb82e363061cc8d560d3162143b1dfb63f70a666c7c52ba37e78054a3476de9a627faeec75f65445ba6fe065db068317ec84d3df8 +"pg-connection-string@npm:^2.3.0": + version: 2.3.0 + resolution: "pg-connection-string@npm:2.3.0" + checksum: 159254e4af196e16b4db36627f0ff58517b6822776c1c0e0db6c80f3bcb6871ef0d4f19746774f2644b0d539cb907897c1bf151e67b4d0e36b026218d77656d5 + languageName: node + linkType: hard + +"pg-connection-string@npm:^2.4.0": + version: 2.4.0 + resolution: "pg-connection-string@npm:2.4.0" + checksum: 2743cb7f45beb9bc47438cd584c0194937fb2f7278a434e26e3d57305731a4b1b689f64d9bbe85b83cb5f8d093818e72bada6c9d5b954dbfcf2f9b795d5b0054 languageName: node linkType: hard @@ -27438,19 +32158,35 @@ __metadata: languageName: node linkType: hard -"pg-pool@npm:^3.2.2, pg-pool@npm:^3.6.0": - version: 3.6.0 - resolution: "pg-pool@npm:3.6.0" +"pg-pool@npm:^3.2.1": + version: 3.2.1 + resolution: "pg-pool@npm:3.2.1" peerDependencies: pg: ">=8.0" - checksum: f3fe050fbfe27406369340c4c26efcbe21a388ace085a876453de0ea496a315c38b2dc739ac97d4767a359e911da2ec4810467f72601eeec8ad540e58b27987c + checksum: 58cfc291fd17a6a27450e964dd409d653f600390158bd5e04041ac8d4a3acec14f25f4a59637d82ce685f84c1e17c984b403c702c10482e6853a1d727bb00fa3 languageName: node linkType: hard -"pg-protocol@npm:^1.4.0, pg-protocol@npm:^1.6.0": - version: 1.6.0 - resolution: "pg-protocol@npm:1.6.0" - checksum: e12662d2de2011e0c3a03f6a09f435beb1025acdc860f181f18a600a5495dc38a69d753bbde1ace279c8c442536af9c1a7c11e1d0fe3fad3aa1348b28d9d2683 +"pg-pool@npm:^3.2.2": + version: 3.2.2 + resolution: "pg-pool@npm:3.2.2" + peerDependencies: + pg: ">=8.0" + checksum: 06b0faa68f247ebbb8c6810b15916a8c53abf06d3e2a28282d3ed10f684d41318241c2daecdcb4c5761e70d792f4309cff85a8a134dec40a39fabed0e489688e + languageName: node + linkType: hard + +"pg-protocol@npm:^1.2.5": + version: 1.2.5 + resolution: "pg-protocol@npm:1.2.5" + checksum: 3900f133cccc28984e80b94284564a9a71ec76c996694560d2bc95e467ddddc2a8be3d3b5d22dc64a1ac88d9a3a5a1b2cefca87209c696c205a3df986fc96147 + languageName: node + linkType: hard + +"pg-protocol@npm:^1.4.0": + version: 1.4.0 + resolution: "pg-protocol@npm:1.4.0" + checksum: 96d39f7a7358e9dfbbc3641da4d04f96744b307f182bc6d495153c70ea9f635ba4684ba9e94233746608bf02706060aed8f6688540659cde790c58e31c45ac65 languageName: node linkType: hard @@ -27479,7 +32215,7 @@ __metadata: languageName: node linkType: hard -"pg@npm:8.5.1": +"pg@npm:8.5.1, pg@npm:^8.5.1": version: 8.5.1 resolution: "pg@npm:8.5.1" dependencies: @@ -27499,43 +32235,28 @@ __metadata: languageName: node linkType: hard -"pg@npm:^8.0.3, pg@npm:^8.5.1": - version: 8.11.0 - resolution: "pg@npm:8.11.0" +"pg@npm:^8.0.3": + version: 8.3.3 + resolution: "pg@npm:8.3.3" dependencies: buffer-writer: 2.0.0 packet-reader: 1.0.0 - pg-cloudflare: ^1.1.0 - pg-connection-string: ^2.6.0 - pg-pool: ^3.6.0 - pg-protocol: ^1.6.0 + pg-connection-string: ^2.3.0 + pg-pool: ^3.2.1 + pg-protocol: ^1.2.5 pg-types: ^2.1.0 pgpass: 1.x - peerDependencies: - pg-native: ">=3.0.1" - dependenciesMeta: - pg-cloudflare: - optional: true - peerDependenciesMeta: - pg-native: - optional: true - checksum: 30448ab90fca85c3cf6dfb79f351b759a8d5b384b89bc3b7e5ba6be7afaa0cd7422a3c770acb052d512dd6b1e03768e6d6a6674547ec4a21cb5870c7b72cc101 + semver: 4.3.2 + checksum: 6c54bb3b976cc5d96f3672d42f842bef35ff83f36d549e1b3d750881fe79233f099a3a5af02dddf00bed27cc2682beaffaa22fa8cc15e9c852b8be55841bd104 languageName: node linkType: hard "pgpass@npm:1.x": - version: 1.0.5 - resolution: "pgpass@npm:1.0.5" + version: 1.0.2 + resolution: "pgpass@npm:1.0.2" dependencies: - split2: ^4.1.0 - checksum: 947ac096c031eebdf08d989de2e9f6f156b8133d6858c7c2c06c041e1e71dda6f5f3bad3c0ec1e96a09497bbc6ef89e762eefe703b5ef9cb2804392ec52ec400 - languageName: node - linkType: hard - -"picocolors@npm:^0.2.1": - version: 0.2.1 - resolution: "picocolors@npm:0.2.1" - checksum: 3b0f441f0062def0c0f39e87b898ae7461c3a16ffc9f974f320b44c799418cabff17780ee647fda42b856a1dc45897e2c62047e1b546d94d6d5c6962f45427b2 + split: ^1.0.0 + checksum: 377bf4c3e489ff28a93ae3b1cf3f99a8f9b85153ae9c587345a07e40c1b036e81bd414e5d0bdb204a43f45390e728bbb314c71e067d7b0dda39c3b7097df09a0 languageName: node linkType: hard @@ -27546,7 +32267,21 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.0.5, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2": + version: 2.2.2 + resolution: "picomatch@npm:2.2.2" + checksum: 897a589f94665b4fd93e075fa94893936afe3f7bbef44250f0e878a8d9d001972a79589cac2856c24f6f5aa3b0abc9c8ba00c98fae4dc22bc0117188864d4181 + languageName: node + linkType: hard + +"picomatch@npm:^2.2.3": + version: 2.3.0 + resolution: "picomatch@npm:2.3.0" + checksum: 16818720ea7c5872b6af110760dee856c8e4cd79aed1c7a006d076b1cc09eff3ae41ca5019966694c33fbd2e1cc6ea617ab10e4adac6df06556168f13be3fca2 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf @@ -27606,7 +32341,16 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.5": +"pirates@npm:^4.0.0, pirates@npm:^4.0.1": + version: 4.0.1 + resolution: "pirates@npm:4.0.1" + dependencies: + node-modules-regexp: ^1.0.0 + checksum: 091e232aac19f0049a681838fa9fcb4af824b5b1eb0e9325aa07b9d13245bfe3e4fa57a7766b9fdcd19cb89f2c15c688b46023be3047cb288023a0c079d3b2a3 + languageName: node + linkType: hard + +"pirates@npm:^4.0.4, pirates@npm:^4.0.5": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 @@ -27622,6 +32366,15 @@ __metadata: languageName: node linkType: hard +"pkg-dir@npm:^2.0.0": + version: 2.0.0 + resolution: "pkg-dir@npm:2.0.0" + dependencies: + find-up: ^2.1.0 + checksum: 8c72b712305b51e1108f0ffda5ec1525a8307e54a5855db8fb1dcf77561a5ae98e2ba3b4814c9806a679f76b2f7e5dd98bde18d07e594ddd9fdd25e9cf242ea1 + languageName: node + linkType: hard + "pkg-dir@npm:^3.0.0": version: 3.0.0 resolution: "pkg-dir@npm:3.0.0" @@ -27649,13 +32402,47 @@ __metadata: languageName: node linkType: hard -"plist@npm:^3.0.1, plist@npm:^3.0.2, plist@npm:^3.0.5": - version: 3.0.6 - resolution: "plist@npm:3.0.6" +"pkg-up@npm:^2.0.0": + version: 2.0.0 + resolution: "pkg-up@npm:2.0.0" + dependencies: + find-up: ^2.1.0 + checksum: de4b418175281a082e366ce1a919f032520ee53cf421578b35173f03816f6ec4c19e1552066840bb0988c3e1215859653948efd6ca3507a23f4f44229269500d + languageName: node + linkType: hard + +"pkginfo@npm:0.3.x": + version: 0.3.1 + resolution: "pkginfo@npm:0.3.1" + checksum: b59f7878ed169301930f5eab767d6b82a1c1e0831c3d1381c8dd04ef8a883fc895c067d06ce6d6111eff06130ad94bd8a518c7a227cc5e9914eedab2ee8512a7 + languageName: node + linkType: hard + +"pkginfo@npm:0.x.x, pkginfo@npm:^0.4.0": + version: 0.4.1 + resolution: "pkginfo@npm:0.4.1" + checksum: 0f13694f3682345647b7cb887fb6fe258df51b635f252324cd75eeb8181b4381cb8b9d91dc2d869849e857192b403bea65038d2f7c05b524eeae69ece5048209 + languageName: node + linkType: hard + +"plist@npm:^3.0.1": + version: 3.0.1 + resolution: "plist@npm:3.0.1" + dependencies: + base64-js: ^1.2.3 + xmlbuilder: ^9.0.7 + xmldom: 0.1.x + checksum: 4027bffff6f97020ba4ec82e9a0bd7d43ef6001d42746334c6d0695c8a2fd47a22239a94ecaf57b264321bc7b710642a08a1757d5bae0fe70912fb7a73b54fc5 + languageName: node + linkType: hard + +"plist@npm:^3.0.2": + version: 3.0.5 + resolution: "plist@npm:3.0.5" dependencies: base64-js: ^1.5.1 - xmlbuilder: ^15.1.1 - checksum: e21390fab8a3c388f8f51b76c0aa187242a40537119ce865d8637630e7d7df79b21f841ec6a4668e7c68d409a6f584d696619099a6125d28011561639c0823b8 + xmlbuilder: ^9.0.7 + checksum: f8b82816f66559965a4dabf139bd8dd95cdec7e51f32742bb353af276ea8228b9807113743b860eda3e867f6ed70d2bcbc1e135b3204d92b5c37ac765f68444e languageName: node linkType: hard @@ -27698,11 +32485,20 @@ __metadata: linkType: hard "polished@npm:^3.0.0": - version: 3.7.2 - resolution: "polished@npm:3.7.2" + version: 3.4.2 + resolution: "polished@npm:3.4.2" dependencies: - "@babel/runtime": ^7.12.5 - checksum: 2f6172fef712e716e20563ca9505162c57e2713579a90806738068b3de0b2622ed2e2d62c578ebd752fcab4c527ddde2036ece5d6f4cdefee09c92eb410a288f + "@babel/runtime": ^7.6.3 + checksum: ab67cde82f161f9d94b17797482907eb48ff3a4f4585ff724543689b7a338ca7da57020c2cdbdf970c22317492771679bd0e49fb31ba882d432eadd1b8438249 + languageName: node + linkType: hard + +"polished@npm:^4.0.5": + version: 4.1.3 + resolution: "polished@npm:4.1.3" + dependencies: + "@babel/runtime": ^7.14.0 + checksum: 3865f569f1ee0beb2959eb4ab8e2baa58c5c662fe9a333de71811e52a2f187ade769d1a87d275370721be64907f9e6bfd8a6158380dd87cd34d0dbf498f302e0 languageName: node linkType: hard @@ -27723,20 +32519,20 @@ __metadata: linkType: hard "popper.js@npm:^1.12.9, popper.js@npm:^1.14.4": - version: 1.16.1 - resolution: "popper.js@npm:1.16.1" - checksum: c56ae5001ec50a77ee297a8061a0221d99d25c7348d2e6bcd3e45a0d0f32a1fd81bca29d46cb0d4bdf13efb77685bd6a0ce93f9eb3c608311a461f945fffedbe + version: 1.16.0 + resolution: "popper.js@npm:1.16.0" + checksum: 61f935323c531584112e06099fbcf89d3408f72a0aece693e9fd9879a33bc0c51a4f6dc3d95dee9d3babf8dc65d9d4a62e028f077f1bc03c1e3368debc115985 languageName: node linkType: hard "portfinder@npm:^1.0.26": - version: 1.0.32 - resolution: "portfinder@npm:1.0.32" + version: 1.0.28 + resolution: "portfinder@npm:1.0.28" dependencies: - async: ^2.6.4 - debug: ^3.2.7 - mkdirp: ^0.5.6 - checksum: 116b4aed1b9e16f6d5503823d966d9ffd41b1c2339e27f54c06cd2f3015a9d8ef53e2a53b57bc0a25af0885977b692007353aa28f9a0a98a44335cb50487240d + async: ^2.6.2 + debug: ^3.1.1 + mkdirp: ^0.5.5 + checksum: 91fef602f13f8f4c64385d0ad2a36cc9dc6be0b8d10a2628ee2c3c7b9917ab4fefb458815b82cea2abf4b785cd11c9b4e2d917ac6fa06f14b6fa880ca8f8928c languageName: node linkType: hard @@ -27748,12 +32544,12 @@ __metadata: linkType: hard "postcss-attribute-case-insensitive@npm:^4.0.1": - version: 4.0.2 - resolution: "postcss-attribute-case-insensitive@npm:4.0.2" + version: 4.0.1 + resolution: "postcss-attribute-case-insensitive@npm:4.0.1" dependencies: postcss: ^7.0.2 - postcss-selector-parser: ^6.0.2 - checksum: e9cf4b61f443bf302dcd1110ef38d6a808fa38ae5d85bfd0aaaa6d35bef3825e0434f1aed8eb9596a5d88f21580ce8b9cd0098414d8490293ef71149695cae9a + postcss-selector-parser: ^5.0.0 + checksum: 0af2fce38aa21f1ed387d8a35e0556ad8ea93f26550318f0102ab9922c4ef65250c067c2045fd8fb118d5478e04e30067641f66364a46f1b799098666aa609e1 languageName: node linkType: hard @@ -27769,13 +32565,14 @@ __metadata: linkType: hard "postcss-calc@npm:^7.0.1": - version: 7.0.5 - resolution: "postcss-calc@npm:7.0.5" + version: 7.0.1 + resolution: "postcss-calc@npm:7.0.1" dependencies: - postcss: ^7.0.27 - postcss-selector-parser: ^6.0.2 - postcss-value-parser: ^4.0.2 - checksum: 03640d493fb0e557634ab23e5d1eb527b014fb491ac3e62b45e28f5a6ef57e25a209f82040ce54c40d5a1a7307597a55d3fa6e8cece0888261a66bc75e39a68b + css-unit-converter: ^1.1.1 + postcss: ^7.0.5 + postcss-selector-parser: ^5.0.0-rc.4 + postcss-value-parser: ^3.3.1 + checksum: a5ba95e9b63fbf85dba1769cf9462c605513da58aef6f231467a1f6617063067030f611efabcafa61c80690d76d1b2543832b6656bbd6608b363000ab29b76b7 languageName: node linkType: hard @@ -27977,11 +32774,11 @@ __metadata: linkType: hard "postcss-font-variant@npm:^4.0.0": - version: 4.0.1 - resolution: "postcss-font-variant@npm:4.0.1" + version: 4.0.0 + resolution: "postcss-font-variant@npm:4.0.0" dependencies: postcss: ^7.0.2 - checksum: d09836cd848e8c24d144484b6b9b175df26dca59e1a1579e790c7f3dcaea00944a8d0b6ac543f4c128de7b30fab9a0aef544d54789b3b55fd850770b172d980d + checksum: 47589557b873c23b1cc81630bc627c52cc9653fbc5e15adfd55559f3f556343eecaae726626d92064c8e754f1f45ef6d5fd954bd32ade01427ed7ac8bf10de92 languageName: node linkType: hard @@ -28005,11 +32802,12 @@ __metadata: linkType: hard "postcss-initial@npm:^3.0.0": - version: 3.0.4 - resolution: "postcss-initial@npm:3.0.4" + version: 3.0.2 + resolution: "postcss-initial@npm:3.0.2" dependencies: + lodash.template: ^4.5.0 postcss: ^7.0.2 - checksum: 710ab6cabc5970912c04314099f5334e7d901235014bb1462657e29f8dc97b6e51caa35f0beba7e5dbe440589ef9c1df13a89bc53d6e6aa664573b945f1630bb + checksum: fe47de21f746c3498b63d2cceaea4e0e3d0dfe8253cfcfd02404e6f5d4d80302d043ae10f215b0206c0ea9ac24125ab7d3500bce24654cb0c42dbb05787209a2 languageName: node linkType: hard @@ -28025,12 +32823,12 @@ __metadata: linkType: hard "postcss-load-config@npm:^2.0.0": - version: 2.1.2 - resolution: "postcss-load-config@npm:2.1.2" + version: 2.1.0 + resolution: "postcss-load-config@npm:2.1.0" dependencies: cosmiconfig: ^5.0.0 import-cwd: ^2.0.0 - checksum: 2e6d3a499512a03c19b0090f4143861612d613511d57122879d9fd545558d2a9fcbe85a2b0faf2ec32bbce0e62d22d2b544d91cbc4d4dfb3f22f841f8271fbc6 + checksum: 322d4d82c10bb7125c47ba9c2b0d3838bd864adf9509a869645663909d8a781d90e15038df9cd822e50d26feed8dc2234e56a3f647e12b57eaf0eeb6a845bf36 languageName: node linkType: hard @@ -28163,7 +32961,19 @@ __metadata: languageName: node linkType: hard -"postcss-modules-local-by-default@npm:^3.0.2, postcss-modules-local-by-default@npm:^3.0.3": +"postcss-modules-local-by-default@npm:^3.0.2": + version: 3.0.2 + resolution: "postcss-modules-local-by-default@npm:3.0.2" + dependencies: + icss-utils: ^4.1.1 + postcss: ^7.0.16 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.0.0 + checksum: 475160a7d8f2b5234f79bc3fb302bef6766125f8dd27d42ffbd5d3e32be1545826093c9b97dfe4c39debd9b8ad572112e469022cd55d56fef5601ef85e8da4a6 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^3.0.3": version: 3.0.3 resolution: "postcss-modules-local-by-default@npm:3.0.3" dependencies: @@ -28463,27 +33273,27 @@ __metadata: linkType: hard "postcss-selector-not@npm:^4.0.0": - version: 4.0.1 - resolution: "postcss-selector-not@npm:4.0.1" + version: 4.0.0 + resolution: "postcss-selector-not@npm:4.0.0" dependencies: balanced-match: ^1.0.0 postcss: ^7.0.2 - checksum: 08fbd3e5ca273f3b767bd35d6bd033647a68f59b596d8aec19a9089b750539bdf85121ed7fd00a7763174a55c75c22a309d75d306127e23dc396069781efbaa4 + checksum: f7d1abc3f240fcae4b81e0cbfaf4c2b363a473a66742497a430c786498abd6be0e1ce9e42b43c64877988356f0b8c5e2446e5bcec722bcef807d275a8f596837 languageName: node linkType: hard "postcss-selector-parser@npm:^3.0.0": - version: 3.1.2 - resolution: "postcss-selector-parser@npm:3.1.2" + version: 3.1.1 + resolution: "postcss-selector-parser@npm:3.1.1" dependencies: - dot-prop: ^5.2.0 + dot-prop: ^4.1.1 indexes-of: ^1.0.1 uniq: ^1.0.1 - checksum: 85b754bf3b5f671cddd75a199589e5b03da114ec119aa4628ab7f35f76134b25296d18a68f745e39780c379d66d3919ae7a1b6129aeec5049cedb9ba4c660803 + checksum: 27bd8ea643f44490f71d040bb03c8eeead54742fc88ff4638b69b839342880ca81822f811de80968752a4ad1bfe07dbef581ca130e929f29519a3d7710e5c2aa languageName: node linkType: hard -"postcss-selector-parser@npm:^5.0.0-rc.3, postcss-selector-parser@npm:^5.0.0-rc.4": +"postcss-selector-parser@npm:^5.0.0, postcss-selector-parser@npm:^5.0.0-rc.3, postcss-selector-parser@npm:^5.0.0-rc.4": version: 5.0.0 resolution: "postcss-selector-parser@npm:5.0.0" dependencies: @@ -28495,23 +33305,25 @@ __metadata: linkType: hard "postcss-selector-parser@npm:^6.0.0, postcss-selector-parser@npm:^6.0.2": - version: 6.0.13 - resolution: "postcss-selector-parser@npm:6.0.13" + version: 6.0.2 + resolution: "postcss-selector-parser@npm:6.0.2" dependencies: cssesc: ^3.0.0 - util-deprecate: ^1.0.2 - checksum: f89163338a1ce3b8ece8e9055cd5a3165e79a15e1c408e18de5ad8f87796b61ec2d48a2902d179ae0c4b5de10fccd3a325a4e660596549b040bc5ad1b465f096 + indexes-of: ^1.0.1 + uniq: ^1.0.1 + checksum: 5fa344e63bfeda65720d49669696d243b31dd533095fc7a7f39ef8556f511e1ed91ebbe049ff967b2dfa1ac3d5d452091a09614158c94687e24895411ab3c23e languageName: node linkType: hard -"postcss-svgo@npm:^4.0.3": - version: 4.0.3 - resolution: "postcss-svgo@npm:4.0.3" +"postcss-svgo@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-svgo@npm:4.0.2" dependencies: + is-svg: ^3.0.0 postcss: ^7.0.0 postcss-value-parser: ^3.0.0 svgo: ^1.0.0 - checksum: 6f5264241193ca3ba748fdf43c88ef692948d2ae38787398dc90089061fed884064ec14ee244fce07f19c419d1b058c77e135407d0932b09e93e528581ce3e10 + checksum: 618d3d29f2ddf1dbf142e6bd1ba54b0582686a366a05c2ffe50fb3f687f250cb1c13be000648790bb7e7af866b03cfcf2eb4dd702ac397bd07639ae31bc81d9e languageName: node linkType: hard @@ -28526,17 +33338,24 @@ __metadata: languageName: node linkType: hard -"postcss-value-parser@npm:^3.0.0": +"postcss-value-parser@npm:^3.0.0, postcss-value-parser@npm:^3.3.1": version: 3.3.1 resolution: "postcss-value-parser@npm:3.3.1" checksum: 62cd26e1cdbcf2dcc6bcedf3d9b409c9027bc57a367ae20d31dd99da4e206f730689471fd70a2abe866332af83f54dc1fa444c589e2381bf7f8054c46209ce16 languageName: node linkType: hard -"postcss-value-parser@npm:^4.0.2, postcss-value-parser@npm:^4.1.0": - version: 4.2.0 - resolution: "postcss-value-parser@npm:4.2.0" - checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f +"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.1.0": + version: 4.1.0 + resolution: "postcss-value-parser@npm:4.1.0" + checksum: 68a9ea27c780fa3cc350be37b47cc46385c61dd9627990909230e0e9c3debf6d5beb49006bd743a2e506cdd6fa7d07637f2d9504a394f67cc3011d1ff0134886 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-value-parser@npm:4.0.2" + checksum: a33b8e826d884b5e44aec6182ffe29524472352ace0112e529be2aef16d30278c5baf8227a5fdc2c14afbbb72f2baba1443d3b62b4b00b7d9afc3de6a2b3a6d4 languageName: node linkType: hard @@ -28562,17 +33381,50 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^7, postcss@npm:^7.0.0, postcss@npm:^7.0.1, postcss@npm:^7.0.14, postcss@npm:^7.0.17, postcss@npm:^7.0.2, postcss@npm:^7.0.26, postcss@npm:^7.0.27, postcss@npm:^7.0.32, postcss@npm:^7.0.36, postcss@npm:^7.0.5, postcss@npm:^7.0.6": - version: 7.0.39 - resolution: "postcss@npm:7.0.39" +"postcss@npm:^7, postcss@npm:^7.0.16, postcss@npm:^7.0.26, postcss@npm:^7.0.30, postcss@npm:^7.0.32": + version: 7.0.32 + resolution: "postcss@npm:7.0.32" dependencies: - picocolors: ^0.2.1 + chalk: ^2.4.2 source-map: ^0.6.1 - checksum: 4ac793f506c23259189064bdc921260d869a115a82b5e713973c5af8e94fbb5721a5cc3e1e26840500d7e1f1fa42a209747c5b1a151918a9bc11f0d7ed9048e3 + supports-color: ^6.1.0 + checksum: 3bc2ac6508c97559077bd24f341908d5b86a50b76164c87d4224af94248ca329e28fc5292fff9cc3fec503325cac40094a6fbf7ef1bd1a3e94aefa93031834f0 languageName: node linkType: hard -"postcss@npm:^8.1.0, postcss@npm:^8.4.23": +"postcss@npm:^7.0.0, postcss@npm:^7.0.1, postcss@npm:^7.0.14, postcss@npm:^7.0.17, postcss@npm:^7.0.2, postcss@npm:^7.0.5, postcss@npm:^7.0.6": + version: 7.0.25 + resolution: "postcss@npm:7.0.25" + dependencies: + chalk: ^2.4.2 + source-map: ^0.6.1 + supports-color: ^6.1.0 + checksum: 2d0babe754ba8200e628db44df5e4919c5e7d826281ccb1c689c6ef53210d4faf8aba662d5e15e655a723144dce0c8c1bb8981d8837efb70927dc9848bc21708 + languageName: node + linkType: hard + +"postcss@npm:^7.0.36": + version: 7.0.38 + resolution: "postcss@npm:7.0.38" + dependencies: + nanocolors: ^0.2.2 + source-map: ^0.6.1 + checksum: 737ba0355721880532167d3fbdc580a5ba95a5398b86f3ace610eff99aa11f3c32eb8eac0cfd8ea201a5372f43af3ed7bb6e7643263956fe1d36e927aaf3c4d4 + languageName: node + linkType: hard + +"postcss@npm:^8.1.0": + version: 8.3.6 + resolution: "postcss@npm:8.3.6" + dependencies: + colorette: ^1.2.2 + nanoid: ^3.1.23 + source-map-js: ^0.6.2 + checksum: ff55b91bea21f42c2a94d77fd05c3f66dd15889c68506cf1dbb9cdee8c3b9e9d0e219bcbc6e61a107bd63e3cac0670176486e2a5794c106a4e1b9babceb79317 + languageName: node + linkType: hard + +"postcss@npm:^8.4.23": version: 8.4.24 resolution: "postcss@npm:8.4.24" dependencies: @@ -28598,9 +33450,9 @@ __metadata: linkType: hard "postgres-date@npm:~1.0.4": - version: 1.0.7 - resolution: "postgres-date@npm:1.0.7" - checksum: 5745001d47e51cd767e46bcb1710649cd705d91a24d42fa661c454b6dcbb7353c066a5047983c90a626cd3bbfea9e626cc6fa84a35ec57e5bbb28b49f78e13ed + version: 1.0.4 + resolution: "postgres-date@npm:1.0.4" + checksum: f5b7a7c747e8a185c6e3954f5ab95437aec45f7051f63d90672cc07ad09dfcad5486919c859af10c62b6bb8a015fdbcf403f55728630c46af73abee302084639 languageName: node linkType: hard @@ -28650,16 +33502,16 @@ __metadata: languageName: node linkType: hard -"prettier@npm:>=2.2.1 <=2.3.0": - version: 2.3.0 - resolution: "prettier@npm:2.3.0" +"prettier@npm:^2.0.2, prettier@npm:~2.2.1": + version: 2.2.1 + resolution: "prettier@npm:2.2.1" bin: prettier: bin-prettier.js - checksum: e8851a45f60f2994775f96e07964646c299b8a8f9c64da4fbd8efafc20db3458bdcedac79aed34e1d5477540b3aa04f6499adc4979cb7937f8ebd058a767d8ff + checksum: 800de2df3d37067ab24478c7f32c60ca0c57b01742133287829feeb4a70d239a7bf6bccb56196784777af591ad80fb9ba70c1a49b0fcecf9f5622a764d513edb languageName: node linkType: hard -"prettier@npm:^2.0.2, prettier@npm:^2.8.0": +"prettier@npm:^2.8.0": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -28676,12 +33528,12 @@ __metadata: linkType: hard "pretty-error@npm:^2.1.1": - version: 2.1.2 - resolution: "pretty-error@npm:2.1.2" + version: 2.1.1 + resolution: "pretty-error@npm:2.1.1" dependencies: - lodash: ^4.17.20 - renderkid: ^2.0.4 - checksum: 16775d06f9a695d17103414d610b1281f9535ee1f2da1ce1e1b9be79584a114aa7eac6dcdcc5ef151756d3c014dfd4ac1c7303ed8016d0cec12437cfdf4021c6 + renderkid: ^2.0.1 + utila: ~0.4 + checksum: 7dff5143bedda1f1695410d86d6b84413a3602d010645ce88b77952c1939f1d490883d1c1a3894e3abdf689a4057374bd7d6abe7b394896dc9941dce4af25f94 languageName: node linkType: hard @@ -28695,7 +33547,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^24.9.0": +"pretty-format@npm:^24.7.0, pretty-format@npm:^24.9.0": version: 24.9.0 resolution: "pretty-format@npm:24.9.0" dependencies: @@ -28707,7 +33559,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^25.1.0, pretty-format@npm:^25.2.0": +"pretty-format@npm:^25.1.0, pretty-format@npm:^25.2.0, pretty-format@npm:^25.2.1, pretty-format@npm:^25.5.0": version: 25.5.0 resolution: "pretty-format@npm:25.5.0" dependencies: @@ -28719,6 +33571,18 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^26.4.2": + version: 26.4.2 + resolution: "pretty-format@npm:26.4.2" + dependencies: + "@jest/types": ^26.3.0 + ansi-regex: ^5.0.0 + ansi-styles: ^4.0.0 + react-is: ^16.12.0 + checksum: 37908b0cc9e04133f3c76bdf75e15cd5e2541d49f682edfd64b838d3f24d5966bea15f5a47fbf8104472041cb5a98941653890780c596cdfac19531d904710c1 + languageName: node + linkType: hard + "pretty-format@npm:^26.6.0, pretty-format@npm:^26.6.2": version: 26.6.2 resolution: "pretty-format@npm:26.6.2" @@ -28731,7 +33595,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.2, pretty-format@npm:^27.5.1": +"pretty-format@npm:^27.0.2": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" dependencies: @@ -28742,6 +33606,18 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^27.2.4": + version: 27.2.4 + resolution: "pretty-format@npm:27.2.4" + dependencies: + "@jest/types": ^27.2.4 + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^17.0.1 + checksum: e6d803c877bf626dbe6ecc2e91422be832aa0f93e68efa5d6db3c32e832f8a7a709c959040b1c5b714e03155f867fa9dee32bb104a1d2e9a2f6adde73116afec + languageName: node + linkType: hard + "pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0": version: 29.5.0 resolution: "pretty-format@npm:29.5.0" @@ -28760,7 +33636,7 @@ __metadata: languageName: node linkType: hard -"printj@npm:~1.1.0": +"printj@npm:~1.1.0, printj@npm:~1.1.2": version: 1.1.2 resolution: "printj@npm:1.1.2" bin: @@ -28769,6 +33645,20 @@ __metadata: languageName: node linkType: hard +"prismjs@npm:^1.21.0": + version: 1.25.0 + resolution: "prismjs@npm:1.25.0" + checksum: 04d8eae9d1b26b76c350bc65621584c8f8cab80ace7da3953f8aef2f9a8dd4b4f71c1d15bc5c67f126ddc90cd5af613919dc1340589a6c57355bed86fa3ac010 + languageName: node + linkType: hard + +"prismjs@npm:~1.24.0": + version: 1.24.1 + resolution: "prismjs@npm:1.24.1" + checksum: e5d14a4ba56773122039295bd760c72106acc964e04cb9831b9ae7e7a58f67ccac6c053e77e21f1018a3684f31d35bb065c0c81fd4ff00b73b1570c3ace4aef0 + languageName: node + linkType: hard + "private@npm:^0.1.8": version: 0.1.8 resolution: "private@npm:0.1.8" @@ -28823,28 +33713,27 @@ __metadata: languageName: node linkType: hard -"promise.allsettled@npm:^1.0.0": - version: 1.0.6 - resolution: "promise.allsettled@npm:1.0.6" +"promise.allsettled@npm:1.0.2, promise.allsettled@npm:^1.0.0": + version: 1.0.2 + resolution: "promise.allsettled@npm:1.0.2" dependencies: - array.prototype.map: ^1.0.5 - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 - iterate-value: ^1.0.2 - checksum: 5de80c33f41b23387be49229e47ade2fbeb86ad9b2066e5e093c21dbd5a3e7a8e4eb8e420cbf58386e2af976cc4677950092f855b677b16771191599f493d035 + array.prototype.map: ^1.0.1 + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + function-bind: ^1.1.1 + iterate-value: ^1.0.0 + checksum: 95db746ab43d1c85bc1af277b163b5c7b4ee0f6ba4b20fa5f5d61bd0bc028f89cd46db0c1a9aef022a1253ff50092fba286a31d8637345571feccd95cf850e22 languageName: node linkType: hard "promise.prototype.finally@npm:^3.1.0": - version: 3.1.4 - resolution: "promise.prototype.finally@npm:3.1.4" + version: 3.1.2 + resolution: "promise.prototype.finally@npm:3.1.2" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 116556f16e5af74a1be0faf0b76e05fc6592bf74e66c6babbba7094f89887b771691f13236d2ffcf0f8d28ee1048808ccee8f70754c4cb5b3736314fbfadc32b + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.0 + function-bind: ^1.1.1 + checksum: e3742950d0367c0dbf05d850fcd987ccdab15ef269c71148e612137dc6bd37d61e81d23de2d9839a191f626b08abb7864481fd6760b03dc73d41868c1e942800 languageName: node linkType: hard @@ -28866,12 +33755,21 @@ __metadata: languageName: node linkType: hard -"promise@npm:^8.0.3, promise@npm:^8.1.0": - version: 8.3.0 - resolution: "promise@npm:8.3.0" +"promise@npm:^8.0.3": + version: 8.0.3 + resolution: "promise@npm:8.0.3" + dependencies: + asap: ~2.0.6 + checksum: 7d026b0f8a83fd1b5a5552f0e5f0ad87114711d9ed5427db5721bbc991f5609ec6d880fb09e6448559acc738a9125ddeced95bdfdc16c081826d611afca4cb3f + languageName: node + linkType: hard + +"promise@npm:^8.1.0": + version: 8.1.0 + resolution: "promise@npm:8.1.0" dependencies: asap: ~2.0.6 - checksum: a69f0ddbddf78ffc529cffee7ad950d307347615970564b17988ce43fbe767af5c738a9439660b24a9a8cbea106c0dcbb6c2b20e23b7e96a8e89e5c2679e94d5 + checksum: 89b71a56154ed7d66a73236d8e8351a9c59adddba3929ecc845f75421ff37fc08ea0c67ad76cd5c0b0d81812c7d07a32bed27e7df5fcc960c6d68b0c1cd771f7 languageName: node linkType: hard @@ -28883,15 +33781,16 @@ __metadata: linkType: hard "prompt@npm:^1.0.0": - version: 1.3.0 - resolution: "prompt@npm:1.3.0" + version: 1.0.0 + resolution: "prompt@npm:1.0.0" dependencies: - "@colors/colors": 1.5.0 - async: 3.2.3 + colors: ^1.1.2 + pkginfo: 0.x.x read: 1.0.x revalidator: 0.1.x - winston: 2.x - checksum: d2bebb05bfc39a86215011ee9f32660f23d54d373bd450d1193883b66bac817eca6d2267d42374735e3a57209fc52ab152bbe7c6d6d312f0edc6959cbcd0205a + utile: 0.3.x + winston: 2.1.x + checksum: 62cbbfc52ae534b79031db099d112f3500e97396a4f51eae872a79cb7c388e34ce4e30a6a7d7c3ad2b51dc18f7e8deee542e659a5550239e9a8942dfab1c6837 languageName: node linkType: hard @@ -28905,40 +33804,50 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1, prompts@npm:^2.4.0": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" +"prompts@npm:^2.0.1": + version: 2.3.0 + resolution: "prompts@npm:2.3.0" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.3 + checksum: 4bd25548229a62f7b6a91e895829bfde79cccd2d6d9d261d48d62b970ac3c30b5dc99ac29f0e9e322076ea2d51dc87e7f3be1ba912d1d4abd062d6eb1c0a7e70 + languageName: node + linkType: hard + +"prompts@npm:^2.4.0": + version: 2.4.1 + resolution: "prompts@npm:2.4.1" dependencies: kleur: ^3.0.3 sisteransi: ^1.0.5 - checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + checksum: 05bf4865870665067b14fc54ced6c96e353f58f57658351e16bb8c12c017402582696fb42d97306b7c98efc0e2cc1ebf27ab573448d5a5da2ac18991cc9e4cad languageName: node linkType: hard -"prop-types@npm:^15.0, prop-types@npm:^15.5.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.4, prop-types@npm:^15.5.6, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" +"prop-types@npm:^15.0, prop-types@npm:^15.5.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.4, prop-types@npm:^15.5.6, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": + version: 15.7.2 + resolution: "prop-types@npm:15.7.2" dependencies: loose-envify: ^1.4.0 object-assign: ^4.1.1 - react-is: ^16.13.1 - checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + react-is: ^16.8.1 + checksum: 5eef82fdda64252c7e75aa5c8cc28a24bbdece0f540adb60ce67c205cf978a5bd56b83e4f269f91c6e4dcfd80b36f2a2dec24d362e278913db2086ca9c6f9430 languageName: node linkType: hard "property-expr@npm:^2.0.4": - version: 2.0.5 - resolution: "property-expr@npm:2.0.5" - checksum: 4ebe82ce45aaf1527e96e2ab84d75d25217167ec3ff6378cf83a84fb4abc746e7c65768a79d275881602ae82f168f9a6dfaa7f5e331d0fcc83d692770bcce5f1 + version: 2.0.4 + resolution: "property-expr@npm:2.0.4" + checksum: 7ac142e189f0feef685f327f582efe13bfbc24a0b6e2328afdb38520bc140caa5f91dfa9529f2539b4468d85dc83a593e1ef0e0f7401b525368bb634b323bf54 languageName: node linkType: hard "property-information@npm:^5.0.0, property-information@npm:^5.3.0": - version: 5.6.0 - resolution: "property-information@npm:5.6.0" + version: 5.5.0 + resolution: "property-information@npm:5.5.0" dependencies: xtend: ^4.0.0 - checksum: fcf87c6542e59a8bbe31ca0b3255a4a63ac1059b01b04469680288998bcfa97f341ca989566adbb63975f4d85339030b82320c324a511532d390910d1c583893 + checksum: a8fd9ef4fe10efacbac83d362e35eedc0e828c7edd1a39a9de24a80face949706fefd737d0135a366026505fbb6a8b56dc582dc96f59d9455d3b8ccf808b8db8 languageName: node linkType: hard @@ -28949,6 +33858,16 @@ __metadata: languageName: node linkType: hard +"proxy-addr@npm:~2.0.5": + version: 2.0.5 + resolution: "proxy-addr@npm:2.0.5" + dependencies: + forwarded: ~0.1.2 + ipaddr.js: 1.9.0 + checksum: 463ec49bbe9833480c4e50cad7ebad9982db94982a27582412224e405854202f1559b748f6cd0b77576e0b7c8bd27e3bbfad99a615b71f3e218c587827a0adef + languageName: node + linkType: hard + "proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -28980,17 +33899,24 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.28, psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d +"psl@npm:^1.1.24, psl@npm:^1.1.28": + version: 1.7.0 + resolution: "psl@npm:1.7.0" + checksum: b2fcfe8500fd31845250a6714ec5e1d8ad66a95207700b5f4ba40b5c0ece15091ce7882cbcd5ac5c0022e178c5fd12a891423ebdd54c5e97cc783821945ae4a4 + languageName: node + linkType: hard + +"psl@npm:^1.1.33": + version: 1.8.0 + resolution: "psl@npm:1.8.0" + checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 languageName: node linkType: hard -"pstree.remy@npm:^1.1.8": - version: 1.1.8 - resolution: "pstree.remy@npm:1.1.8" - checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d +"pstree.remy@npm:^1.1.7": + version: 1.1.7 + resolution: "pstree.remy@npm:1.1.7" + checksum: 6dc55d562d106d3168891701344c90a91feeb1307b57a7c61cb4408dd36fbc63fb402f65ab2207637385c7a6ef0c82613460df537c546001b2c3677c9354cfb2 languageName: node linkType: hard @@ -29059,19 +33985,28 @@ __metadata: linkType: hard "punycode@npm:2.x.x, punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + version: 2.1.1 + resolution: "punycode@npm:2.1.1" + checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 languageName: node linkType: hard -"punycode@npm:^1.2.4": +"punycode@npm:^1.2.4, punycode@npm:^1.4.1": version: 1.4.1 resolution: "punycode@npm:1.4.1" checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 languageName: node linkType: hard +"pupa@npm:^2.0.1": + version: 2.0.1 + resolution: "pupa@npm:2.0.1" + dependencies: + escape-goat: ^2.0.0 + checksum: d9f6a6187f9d03d26d31956c1769958f44cf4d687f4971cbf04c4c674cd3afa40407e71d6361095fe31bb0161e3f503eae8d6e71fcfdd7a1b758238ede62d780 + languageName: node + linkType: hard + "puppeteer-core@npm:^2.1.1": version: 2.1.1 resolution: "puppeteer-core@npm:2.1.1" @@ -29091,12 +34026,12 @@ __metadata: linkType: hard "puppeteer@npm:^15.4.0": - version: 15.5.0 - resolution: "puppeteer@npm:15.5.0" + version: 15.4.0 + resolution: "puppeteer@npm:15.4.0" dependencies: cross-fetch: 3.1.5 debug: 4.3.4 - devtools-protocol: 0.0.1019158 + devtools-protocol: 0.0.1011705 extract-zip: 2.0.1 https-proxy-agent: 5.0.1 pkg-dir: 4.2.0 @@ -29106,7 +34041,7 @@ __metadata: tar-fs: 2.1.1 unbzip2-stream: 1.4.3 ws: 8.8.0 - checksum: 2bc9e230b397f6b0c42eb5ba4e9179879b3d52f64d767a0bffbb266ecd5f8268ee982fd643c09362e29248e8f9566607c128bf7f60ec625b7605c9e609871788 + checksum: 57f05042a58e5b5b6b9457da8b88680a0db170f9a6cd44153a8da03d5888ff0d9fcfc0bb1c4e72e1e3f19cb7707091e883ec5a7d0a2172ee36e29741ab8d7288 languageName: node linkType: hard @@ -29126,28 +34061,33 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.1.0, qs@npm:^6.10.0, qs@npm:^6.10.1, qs@npm:^6.5.1": - version: 6.11.2 - resolution: "qs@npm:6.11.2" - dependencies: - side-channel: ^1.0.4 - checksum: e812f3c590b2262548647d62f1637b6989cc56656dc960b893fe2098d96e1bd633f36576f4cd7564dfbff9db42e17775884db96d846bebe4f37420d073ecdc0b +"qs@npm:6.7.0": + version: 6.7.0 + resolution: "qs@npm:6.7.0" + checksum: dfd5f6adef50e36e908cfa70a6233871b5afe66fbaca37ecc1da352ba29eb2151a3797991948f158bb37fccde51bd57845cb619a8035287bfc24e4591172c347 + languageName: node + linkType: hard + +"qs@npm:^6.1.0, qs@npm:^6.5.1": + version: 6.9.1 + resolution: "qs@npm:6.9.1" + checksum: b8ad80e09bb52232963aadd9276b8d3802723c9ecd31388ff129a7ab5542e7dc67c43a05b2250f973be460d2c734f16d8d908216e5340024349763ee5e19666c languageName: node linkType: hard -"qs@npm:~6.10.3": - version: 6.10.4 - resolution: "qs@npm:6.10.4" +"qs@npm:^6.10.0, qs@npm:^6.10.1": + version: 6.10.1 + resolution: "qs@npm:6.10.1" dependencies: side-channel: ^1.0.4 - checksum: 31e4fedd759d01eae52dde6692abab175f9af3e639993c5caaa513a2a3607b34d8058d3ae52ceeccf37c3025f22ed5e90e9ddd6c2537e19c0562ddd10dc5b1eb + checksum: 00e390dbf98eff4d8ff121b61ab2fe32106852290de99ecd0e40fc76651c4101f43fc6cc8313cb69423563876fc532951b11dda55d2917def05f292258263480 languageName: node linkType: hard "qs@npm:~6.5.2": - version: 6.5.3 - resolution: "qs@npm:6.5.3" - checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 + version: 6.5.2 + resolution: "qs@npm:6.5.2" + checksum: 24af7b9928ba2141233fba2912876ff100403dba1b08b20c3b490da9ea6c636760445ea2211a079e7dfa882a5cf8f738337b3748c8bdd0f93358fa8881d2db8f languageName: node linkType: hard @@ -29173,14 +34113,13 @@ __metadata: linkType: hard "query-string@npm:^6.13.6": - version: 6.14.1 - resolution: "query-string@npm:6.14.1" + version: 6.13.7 + resolution: "query-string@npm:6.13.7" dependencies: decode-uri-component: ^0.2.0 - filter-obj: ^1.1.0 split-on-first: ^1.0.0 strict-uri-encode: ^2.0.0 - checksum: f2c7347578fa0f3fd4eaace506470cb4e9dc52d409a7ddbd613f614b9a594d750877e193b5d5e843c7477b3b295b857ec328903c943957adc41a3efb6c929449 + checksum: 9c1443e008a7ac18beb1f0d60038f7830710ef81179cd6d965b47e1b36538bb5b75be20f3b2c8b8aca5e8aec85d6920e2cac60b46063e8501f30894d41a0cf4a languageName: node linkType: hard @@ -29191,31 +34130,17 @@ __metadata: languageName: node linkType: hard -"querystring@npm:0.2.0": +"querystring@npm:0.2.0, querystring@npm:^0.2.0": version: 0.2.0 resolution: "querystring@npm:0.2.0" checksum: 8258d6734f19be27e93f601758858c299bdebe71147909e367101ba459b95446fbe5b975bf9beb76390156a592b6f4ac3a68b6087cea165c259705b8b4e56a69 languageName: node linkType: hard -"querystring@npm:^0.2.0": - version: 0.2.1 - resolution: "querystring@npm:0.2.1" - checksum: 7b83b45d641e75fd39cd6625ddfd44e7618e741c61e95281b57bbae8fde0afcc12cf851924559e5cc1ef9baa3b1e06e22b164ea1397d65dd94b801f678d9c8ce - languageName: node - linkType: hard - "querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + version: 2.1.1 + resolution: "querystringify@npm:2.1.1" + checksum: 4ce52606489365af22908e848c473599db77f681f4c1cc817f2dcec6a36e2cc5d4d8e2b17df5d207cb142150aff0f0368c3268f890ea77cd0b0ba94c5f2288d2 languageName: node linkType: hard @@ -29277,17 +34202,17 @@ __metadata: languageName: node linkType: hard -"ramda@npm:^0.28.0": - version: 0.28.0 - resolution: "ramda@npm:0.28.0" - checksum: 44ea6e5010bba70151b6a92d8114a91915e8b5a16105cce65fae58c9d7386b812c429645e35f21141d7087568550ce383bc10ee1a65cdec951f4b69ea457e6a4 +"ramda@npm:^0.21.0": + version: 0.21.0 + resolution: "ramda@npm:0.21.0" + checksum: e08d63c12ed4bab70bfd700a843901d9fa340d1a88c50085a6ef0ecf25f528e5ac7c71848481270923491e7315a34301bb35905d45861cb13cc75b8ca05add32 languageName: node linkType: hard "ramda@npm:~0.27.1": - version: 0.27.2 - resolution: "ramda@npm:0.27.2" - checksum: 28d6735dd1eea1a796c56cf6111f3673c6105bbd736e521cdd7826c46a18eeff337c2dba4668f6eed990d539b9961fd6db19aa46ccc1530ba67a396c0a9f580d + version: 0.27.1 + resolution: "ramda@npm:0.27.1" + checksum: 31a0c0ef739b2525d7615f84cbb5d3cb89ee0c795469b711f729ea1d8df0dccc3cd75d3717a1e9742d42315ce86435680b7c87743eb7618111c60c144a5b8059 languageName: node linkType: hard @@ -29335,27 +34260,27 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.5.1": - version: 2.5.1 - resolution: "raw-body@npm:2.5.1" +"raw-body@npm:2.4.0": + version: 2.4.0 + resolution: "raw-body@npm:2.4.0" dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 + bytes: 3.1.0 + http-errors: 1.7.2 iconv-lite: 0.4.24 unpipe: 1.0.0 - checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e + checksum: 6343906939e018c6e633a34a938a5d6d1e93ffcfa48646e00207d53b418e941953b521473950c079347220944dc75ba10e7b3c08bf97e3ac72c7624882db09bb languageName: node linkType: hard -"raw-body@npm:2.5.2": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" +"raw-body@npm:2.5.1": + version: 2.5.1 + resolution: "raw-body@npm:2.5.1" dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 + checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e languageName: node linkType: hard @@ -29439,8 +34364,8 @@ __metadata: linkType: hard "react-beautiful-dnd@npm:^13.1.0": - version: 13.1.1 - resolution: "react-beautiful-dnd@npm:13.1.1" + version: 13.1.0 + resolution: "react-beautiful-dnd@npm:13.1.0" dependencies: "@babel/runtime": ^7.9.2 css-box-model: ^1.2.0 @@ -29450,38 +34375,38 @@ __metadata: redux: ^4.0.4 use-memo-one: ^1.1.1 peerDependencies: - react: ^16.8.5 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 - checksum: 5f90f7c0ab77a14dfcd496cbd94bbde457612f380c6fc815f3bba7b52effd75132948fcaa661a902a184bb1e6ae5896dcf5b0c77c4ddf809a2c65288f3eed5a7 + react: ^16.8.5 || ^17.0.0 + react-dom: ^16.8.5 || ^17.0.0 + checksum: 12b7e9fbe872783e0f899e03f2e80deee085aa1e2cec3d556c1d06bdbafbda7a3c9cf7a3a6b26544617eb2e50d0e3518001bd8300370704bf5a8c9c21f54ec90 languageName: node linkType: hard "react-beforeunload@npm:^2.5.1": - version: 2.5.3 - resolution: "react-beforeunload@npm:2.5.3" + version: 2.5.1 + resolution: "react-beforeunload@npm:2.5.1" dependencies: - prop-types: ^15.8.1 - tiny-invariant: ^1.2.0 + prop-types: ^15.7.2 + tiny-invariant: ^1.1.0 peerDependencies: - react: ^16.8.0 || 17 || 18 - checksum: 3abc4d4022e1b75169054d063de3e8e75801a332d8365339dbe93e54a133694ece961a6a16fbce56908370c141b8893d451a7a9b07323b1f7d21cde4ba073a04 + react: ^16.8.0 || ^17.0.0 + checksum: 9cc026a2670498ee13180d81f742ebc4383a27f7e98a349237f79e6868fabb963e4347ea1191090c7b5d3b95e9d710369bab4fb57b8f5ba16d0b16b578206bc1 languageName: node linkType: hard "react-clone-referenced-element@npm:*": - version: 1.1.1 - resolution: "react-clone-referenced-element@npm:1.1.1" - checksum: aa2432be46f99f50b4b611b93a333a6300699f8b53fd41b66f76a354fce8c512fd3432cdf919f06fba49987d64bc243d219204f879bd25c58b9f57a1b0e6b260 + version: 1.1.0 + resolution: "react-clone-referenced-element@npm:1.1.0" + checksum: 276dac46fd88d6fdb4e688e8eb570968d9822d0342bf0682f1e3ef3efb541746e7a6c89192fef7c02c846efe0cc34dae58ab6314f375fb9e5befd6ac60b27571 languageName: node linkType: hard "react-colorful@npm:^5.1.2": - version: 5.6.1 - resolution: "react-colorful@npm:5.6.1" + version: 5.5.0 + resolution: "react-colorful@npm:5.5.0" peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: e432b7cb0df57e8f0bcdc3b012d2e93fcbcb6092c9e0f85654788d5ebfc4442536d8cc35b2418061ba3c4afb8b7788cc101c606d86a1732407921de7a9244c8d + checksum: aaffa002d9372f692238a29229ff1e991d6d0077f4f83dcdf88ad3106a0737aa56e415a71b91fb585f8532e04f09d3f0fabbc5cd8291137206dc3c1a0d70674f languageName: node linkType: hard @@ -29561,12 +34486,12 @@ __metadata: linkType: hard "react-devtools-core@npm:^4.6.0": - version: 4.27.8 - resolution: "react-devtools-core@npm:4.27.8" + version: 4.10.0 + resolution: "react-devtools-core@npm:4.10.0" dependencies: shell-quote: ^1.6.1 ws: ^7 - checksum: 83213d5f620e95cf9e60d21a186949f1a523253ea5cca3371d61cf74102efd5074e2e9431cebe4cd9be45a77db647af9c2cdb44c69907ed07441a3334ca19c8b + checksum: 764cbd38b882a9a5c6eee842d4ed9b4889797e5ebee9da435963152722b9d034923cbf0d4c31b46aa6f739d1fad8f8761dbd73527473ff59c36b6ebce31d6cb9 languageName: node linkType: hard @@ -29588,7 +34513,16 @@ __metadata: languageName: node linkType: hard -"react-docgen-typescript@npm:^2.1.1, react-docgen-typescript@npm:^2.2.2": +"react-docgen-typescript@npm:^2.0.0": + version: 2.1.0 + resolution: "react-docgen-typescript@npm:2.1.0" + peerDependencies: + typescript: ">= 4.3.x" + checksum: b1ab06ba635631c8f4575e33a85c6c591dd22cefb18f7a4d0b30a4c7c2e4f51e74d0bd597f59272189345e56949e13f4b387496a87bb75705c5d80e070585a04 + languageName: node + linkType: hard + +"react-docgen-typescript@npm:^2.2.2": version: 2.2.2 resolution: "react-docgen-typescript@npm:2.2.2" peerDependencies: @@ -29618,36 +34552,34 @@ __metadata: linkType: hard "react-docgen@npm:^5.0.0": - version: 5.4.3 - resolution: "react-docgen@npm:5.4.3" + version: 5.3.0 + resolution: "react-docgen@npm:5.3.0" dependencies: "@babel/core": ^7.7.5 - "@babel/generator": ^7.12.11 "@babel/runtime": ^7.7.6 - ast-types: ^0.14.2 + ast-types: ^0.13.2 commander: ^2.19.0 doctrine: ^3.0.0 - estree-to-babel: ^3.1.0 neo-async: ^2.6.1 node-dir: ^0.1.10 strip-indent: ^3.0.0 bin: react-docgen: bin/react-docgen.js - checksum: cef935ba948195eaeec9126c62f53bc015b9a5ad3a7eeb4a4604668d5b12bd5d0c9058c279eaf33ee6b47f2a24ccf01818b67af64d7f61265c4d3a5aa4ff0a3a + checksum: 34f0b1cc6dd5754100bde7f1c06b166428058719e68945a879b9671de801b32baf07c0485535fdb0587ef7af064214b1da007dab4e15c22705c9ea680c6696fa languageName: node linkType: hard "react-dom@npm:^16.13.1": - version: 16.14.0 - resolution: "react-dom@npm:16.14.0" + version: 16.13.1 + resolution: "react-dom@npm:16.13.1" dependencies: loose-envify: ^1.1.0 object-assign: ^4.1.1 prop-types: ^15.6.2 scheduler: ^0.19.1 peerDependencies: - react: ^16.14.0 - checksum: 5a5c49da0f106b2655a69f96c622c347febcd10532db391c262b26aec225b235357d9da1834103457683482ab1b229af7a50f6927a6b70e53150275e31785544 + react: ^16.13.1 + checksum: 5009f3ee9bca06d6d4b9cf92c832eca102c284e6d019e832179c8de3e353534571474c95b7ab975935b22823726710dcd73783596c11dd71304beb11c19281c5 languageName: node linkType: hard @@ -29663,17 +34595,16 @@ __metadata: languageName: node linkType: hard -"react-element-to-jsx-string@npm:^14.3.4": - version: 14.3.4 - resolution: "react-element-to-jsx-string@npm:14.3.4" +"react-draggable@npm:^4.4.3": + version: 4.4.4 + resolution: "react-draggable@npm:4.4.4" dependencies: - "@base2/pretty-print-object": 1.0.1 - is-plain-object: 5.0.0 - react-is: 17.0.2 + clsx: ^1.1.1 + prop-types: ^15.6.0 peerDependencies: - react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 - react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 - checksum: 42bcd4423f12e9ee21b2d3f0c2a28805ff4953bd82b6be4c1f5b5f9a371115aafa36a6f3d82726d43b4912179b79e99550c2b9a772c7fe6a5cd8f7e93ff34ceb + react: ">= 16.3.0" + react-dom: ">= 16.3.0" + checksum: b8258a58938c261a79f1b9ffd67774283c1ac732423c1c9c9f5fe4d17a06886edd659891e445ba089828ca59f1885e5b909262e24cf60640b8ed05c8499c88bb languageName: node linkType: hard @@ -29706,9 +34637,9 @@ __metadata: linkType: hard "react-error-overlay@npm:^6.0.9": - version: 6.0.11 - resolution: "react-error-overlay@npm:6.0.11" - checksum: ce7b44c38fadba9cedd7c095cf39192e632daeccf1d0747292ed524f17dcb056d16bc197ddee5723f9dd888f0b9b19c3b486c430319e30504289b9296f2d2c42 + version: 6.0.9 + resolution: "react-error-overlay@npm:6.0.9" + checksum: 695853bc885e798008a00c10d8d94e5ac91626e8130802fea37345f9c037f41b80104345db2ee87f225feb4a4ef71b0df572b17c378a6d397b6815f6d4a84293 languageName: node linkType: hard @@ -29726,12 +34657,53 @@ __metadata: languageName: node linkType: hard -"react-hook-form@npm:^6.0.0, react-hook-form@npm:^6.0.6, react-hook-form@npm:^6.15.1, react-hook-form@npm:^6.8.3": - version: 6.15.8 - resolution: "react-hook-form@npm:6.15.8" +"react-fast-compare@npm:^3.0.1, react-fast-compare@npm:^3.2.0": + version: 3.2.0 + resolution: "react-fast-compare@npm:3.2.0" + checksum: 8ef272c825ae329f61633ce4ce7f15aa5b84e5214d88bc0823880236e03e985a13195befa2c7a4eda7db3b017dc7985729152d88445823f652403cf36c2b86aa + languageName: node + linkType: hard + +"react-helmet-async@npm:^1.0.7": + version: 1.1.2 + resolution: "react-helmet-async@npm:1.1.2" + dependencies: + "@babel/runtime": ^7.12.5 + invariant: ^2.2.4 + prop-types: ^15.7.2 + react-fast-compare: ^3.2.0 + shallowequal: ^1.1.0 + peerDependencies: + react: ^16.6.0 || ^17.0.0 + react-dom: ^16.6.0 || ^17.0.0 + checksum: 8db5d875bb681dabc5f277ee3b0debe96d58f4b6d33cb2e9c72a026f4fd22e44722d2a7164a21b51a4002a6cd40d716195731ba37cc1d73167adf85e56441c1c + languageName: node + linkType: hard + +"react-hook-form@npm:^6.0.0, react-hook-form@npm:^6.0.6": + version: 6.0.6 + resolution: "react-hook-form@npm:6.0.6" + peerDependencies: + react: ^16.8.0 + checksum: eccb52d69d735862e0e17edba3f56e1683ad0a4ad269a8eb418a6f6369b0e91e34430f473f29e3f1c594873580352c6cd5b321c06140b533cfc74e03d432216e + languageName: node + linkType: hard + +"react-hook-form@npm:^6.15.1": + version: 6.15.1 + resolution: "react-hook-form@npm:6.15.1" peerDependencies: react: ^16.8.0 || ^17 - checksum: 867d0f8ab1c1a449ebe7027ce56c8b382e7ea516b60c9dcb1484cea1f7e6968b2ad5746e2113fdf5a8454d3759abf34fe65fbbea03babe2baa9eae4a96662b06 + checksum: 765ad486eb55c2f525596e7fdb7591981b53112bc65d3b062a693eaa9b464e81001f95107db157a3dccbb38c42fa6569e3ff89cdce4c63bea868165e0666f35a + languageName: node + linkType: hard + +"react-hook-form@npm:^6.8.3": + version: 6.8.3 + resolution: "react-hook-form@npm:6.8.3" + peerDependencies: + react: ^16.8.0 + checksum: 5c8837ddc65e1481d8364dc7d595313c8ff96467f0ea10b4a95a2ec0ffda9de5d476f78b1f523f129a6b5f41de51ec6152be5eeae05086ad33b83e6d7a8bf030 languageName: node linkType: hard @@ -29778,13 +34750,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:17.0.2, react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1, react-is@npm:^17.0.2": - version: 17.0.2 - resolution: "react-is@npm:17.0.2" - checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 - languageName: node - linkType: hard - "react-is@npm:18.1.0": version: 18.1.0 resolution: "react-is@npm:18.1.0" @@ -29792,13 +34757,34 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0, react-is@npm:^16.13.0, react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0, react-is@npm:^16.8.1, react-is@npm:^16.8.4, react-is@npm:^16.8.6": +"react-is@npm:^16.12.0, react-is@npm:^16.13.0, react-is@npm:^16.9.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f languageName: node linkType: hard +"react-is@npm:^16.6.0, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.1, react-is@npm:^16.8.4, react-is@npm:^16.8.6": + version: 16.12.0 + resolution: "react-is@npm:16.12.0" + checksum: 344dea88c669e94043426bffa8375414efcece8a84f0afba115b9d4d528d74f79e181e9ec57f60f0efb7204e631fb1ac885da2b2c5c67f1348a4f1e8e1654653 + languageName: node + linkType: hard + +"react-is@npm:^16.8.0 || ^17.0.0": + version: 17.0.1 + resolution: "react-is@npm:17.0.1" + checksum: 5e6945a286367894d11b24f41a0065607ba62bdac0df0b567294b2e299c037e3641434e66f9be30536b8c47f7ad94d44e633feb2ba25959c2c42423844e6c2f1 + languageName: node + linkType: hard + +"react-is@npm:^17.0.1, react-is@npm:^17.0.2": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 + languageName: node + linkType: hard + "react-is@npm:^18.0.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" @@ -29807,15 +34793,15 @@ __metadata: linkType: hard "react-leaflet@npm:^3.2.1": - version: 3.2.5 - resolution: "react-leaflet@npm:3.2.5" + version: 3.2.1 + resolution: "react-leaflet@npm:3.2.1" dependencies: - "@react-leaflet/core": ^1.1.1 + "@react-leaflet/core": ^1.1.0 peerDependencies: leaflet: ^1.7.1 react: ^17.0.1 react-dom: ^17.0.1 - checksum: 503b7cee8acc12e0e2c5e7675432e7ef5742463e3e5420282ce60a9efd306430caefae3cb282c976e3df7665f19aef5b49cdce44a034979b4ea3ee968c2621d2 + checksum: 40cdb1e63b82fcbe6d9fc18c1cfa22c681c34f0c35b25540f1cf9049032e9b98152753d7370e90ac7f190b34f37a236d1792cbf84988091312b965e07ef7afe5 languageName: node linkType: hard @@ -29840,11 +34826,11 @@ __metadata: linkType: hard "react-native-device-info@npm:^7.2.1": - version: 7.4.0 - resolution: "react-native-device-info@npm:7.4.0" + version: 7.2.1 + resolution: "react-native-device-info@npm:7.2.1" peerDependencies: react-native: "*" - checksum: 24afc7d39f0271b39892891fce4ad588c9a3221f1b55b66411acf197b3512450147013b66b58db812e0c52e182d66726b291171858ec036031fee43e4ac0e30b + checksum: 84461424d1049ce13ac88dc64655c1e8e50b7d70b81a34978ce0c6ed3a4f11af51a150cfe1f9225f698d2c966d61c82b77a0a6726bf52e9823a7d8c17aca1160 languageName: node linkType: hard @@ -29867,18 +34853,15 @@ __metadata: linkType: hard "react-native-fs@npm:^2.16.6": - version: 2.20.0 - resolution: "react-native-fs@npm:2.20.0" + version: 2.16.6 + resolution: "react-native-fs@npm:2.16.6" dependencies: base-64: ^0.1.0 utf8: ^3.0.0 peerDependencies: - react-native: "*" - react-native-windows: "*" - peerDependenciesMeta: - react-native-windows: - optional: true - checksum: 0be9bb9a5c13b501d0a3006efc3aa5c0b5b211456ee04718297f4e522532f3527f1daa220bd67d3b82d819ed8fdab8f64b7d6e0d7b768c1fd1d8ec9122d94316 + react-native: ^0.59.5 + react-native-windows: ^0.57.2 + checksum: 3ec8438e8a947db2506605a439cba613c3ecb0a39ae6278c46c757752e4ab695a9ed5fa276adbdc5e2f27e3e8a826ec39d98d1b10ccfd5b51521b2c80ce0f17a languageName: node linkType: hard @@ -29911,29 +34894,20 @@ __metadata: linkType: hard "react-native-linear-gradient@npm:^2.5.6": - version: 2.6.2 - resolution: "react-native-linear-gradient@npm:2.6.2" + version: 2.5.6 + resolution: "react-native-linear-gradient@npm:2.5.6" peerDependencies: - react: "*" - react-native: "*" - checksum: dd0e27d3ddffa239d46919fd397f1ad68cdb6bcaa48c11ec9b01a0f54f0ad383f203a2245f2f06206e63aa4443fe7b2b1cc105ee262bf9a84ee62dabad6028ad + react-native: ">=0.55" + checksum: 7848eff1dfdb219123303de1b62daa6ba7e669700506985b770cff542052fb70815627fb42e5c189f5a6c9f17c740d0067c0d917cd2fab883f1b860419a2496d languageName: node linkType: hard "react-native-localize@npm:^2.0.1": - version: 2.2.6 - resolution: "react-native-localize@npm:2.2.6" + version: 2.0.1 + resolution: "react-native-localize@npm:2.0.1" peerDependencies: - react: ">=16.8.6" react-native: ">=0.60.0" - react-native-macos: ">=0.64.0" - react-native-windows: ">=0.62.0" - peerDependenciesMeta: - react-native-macos: - optional: true - react-native-windows: - optional: true - checksum: aa03c37a254e4bec71dcd8b9844ece091e9b14ff38b6e1db6307674d33f62477c8d42b5a022da8ec892586004985846e08b79822f05989382ef07ba696438917 + checksum: 9d78c3f1cd3246b2fd705f65cb9e7b111a390394611a885da450884d0dbc855b43f4ae2ce251924c08a56a7061f88c28c9a9fb0a8eb7e741167b7ac182b62364 languageName: node linkType: hard @@ -29965,13 +34939,13 @@ __metadata: linkType: hard "react-native-modal-datetime-picker@npm:^9.1.0": - version: 9.2.3 - resolution: "react-native-modal-datetime-picker@npm:9.2.3" + version: 9.1.0 + resolution: "react-native-modal-datetime-picker@npm:9.1.0" dependencies: prop-types: ^15.7.2 peerDependencies: "@react-native-community/datetimepicker": ">=3.0.0" - checksum: 5dd4c1b685845c1dc09355cec6fd95b40f76e2e1be73015426adc4bc15f501c48543db5e3e2405441ee1f199e7aa1c768e149549a32b40e58b50e4b06a49e72a + checksum: 45ec123fad7d8c3f4dd546b3c479b8c67c273b68903e22c538a75b272a4c2c8cedc9fc21d22662eeb7b152fb9084655af976fdfe174eba849426cada0c6f916f languageName: node linkType: hard @@ -29985,14 +34959,14 @@ __metadata: linkType: hard "react-native-reanimated@npm:~1.13.0": - version: 1.13.4 - resolution: "react-native-reanimated@npm:1.13.4" + version: 1.13.2 + resolution: "react-native-reanimated@npm:1.13.2" dependencies: fbjs: ^1.0.0 peerDependencies: react: "*" react-native: "*" - checksum: b2c3e599729f80a6339889daf872f64206ca7960c10b5f4a3ac12a047690b27ec4e19abf73c9069411b6987fdad8fea15c79acbb61332342b9e959f69f84c217 + checksum: 8a7971f25075ca97cb47aedc6479bd78e497bf93677eb23137af7f2ae96830dcf13d13dc237361e6ff4492b145f494daa102171742c1cb6cc065a57f5ceb74d2 languageName: node linkType: hard @@ -30038,15 +35012,15 @@ __metadata: linkType: hard "react-native-svg@npm:^12.1.0": - version: 12.5.1 - resolution: "react-native-svg@npm:12.5.1" + version: 12.1.0 + resolution: "react-native-svg@npm:12.1.0" dependencies: - css-select: ^5.1.0 - css-tree: ^1.1.3 + css-select: ^2.1.0 + css-tree: ^1.0.0-alpha.39 peerDependencies: react: "*" react-native: ">=0.50.0" - checksum: e51a4eccb205c433c088087500b9da6a2956b2f5937ca18211243d033c2f57c9e720167222c394aa660fa070c417ea120ba9542cc3a6b178d0017895b7d35d2e + checksum: 79fc368b7263a5ff64410c20aca61b99c4a03226d57757e86b7fc6d22c9db09051daacd9032203d439e803d2123fc28e2ac2428173247174b14dd612c311b1e4 languageName: node linkType: hard @@ -30081,15 +35055,14 @@ __metadata: linkType: hard "react-native-webview@npm:^11.0.0": - version: 11.26.1 - resolution: "react-native-webview@npm:11.26.1" + version: 11.0.0 + resolution: "react-native-webview@npm:11.0.0" dependencies: escape-string-regexp: 2.0.0 invariant: 2.2.4 peerDependencies: - react: "*" - react-native: "*" - checksum: d2f95a89e944a2f1e8cf402e4e274f3568edae42e7ef190915e9fba8004a01d699c962459bdc9688c159060538e90aea3017cab24e6f4112021cbbc10ef57104 + react-native: ">=0.60 <0.64" + checksum: 527b225ba66fda92b7e8db583dd421b87f7f80f1ea41702e03fdda3bd55383b5b7473d71909a39279c72aafdbbe2ba92d356ddc3454ee583cc0aa06d4762b435 languageName: node linkType: hard @@ -30146,8 +35119,8 @@ __metadata: linkType: hard "react-navigation-stack@npm:^2.8.2": - version: 2.10.4 - resolution: "react-navigation-stack@npm:2.10.4" + version: 2.10.2 + resolution: "react-navigation-stack@npm:2.10.2" dependencies: color: ^3.1.3 react-native-iphone-x-helper: ^1.3.0 @@ -30159,42 +35132,68 @@ __metadata: react-native-safe-area-context: ">= 0.6.0" react-native-screens: ">=1.0.0 || >= 2.0.0-alpha.0 || >= 2.0.0-beta.0 || >= 2.0.0" react-navigation: ^4.1.1 - checksum: 70721e91b1ea32a3cdeefd7a2e514848d1a67b9ff25c7802e4154f48c7612a689a148cc43ecbf060250ba9fb12b0ae2ab7eb63ca31c33009fe48b0fec39d2a47 + checksum: adf2983fcc94a48f6bcd7d5bce16803e803c202c27fdd999166984ac35d0b10a314ce846b95ea282e9dc9cde6c3917ffa55f37e0135f93372ab0305e4319a4b6 languageName: node linkType: hard "react-navigation@npm:^4.4.0": - version: 4.4.4 - resolution: "react-navigation@npm:4.4.4" + version: 4.4.3 + resolution: "react-navigation@npm:4.4.3" dependencies: "@react-navigation/core": ^3.7.9 - "@react-navigation/native": ^3.8.4 + "@react-navigation/native": ^3.8.3 peerDependencies: react: "*" react-native: "*" - checksum: 381a3f846d3e0b71b91e15df854640524190cacdac39560524c5bf1ce2f9248652a4accbaf9695fa11f304dc7bbd13b2f5fdc022d1e7c1968c1a21c278613134 + checksum: da484f4fad2cd3aa1b843f591b5024863587dece398724686d6f3423288cf890c7720c07fc642e1d9d4c56cd13326b62cfebbe6f39a817f2f837d7a92593b75c languageName: node linkType: hard "react-onclickoutside@npm:^6.7.1": - version: 6.13.0 - resolution: "react-onclickoutside@npm:6.13.0" + version: 6.9.0 + resolution: "react-onclickoutside@npm:6.9.0" peerDependencies: - react: ^15.5.x || ^16.x || ^17.x || ^18.x - react-dom: ^15.5.x || ^16.x || ^17.x || ^18.x - checksum: a7cfe62e91f7f92891cda7b885d6eec7b2854850f8703ccafcea5c04bb93a210a566a70b51b9fae0cc30c3485e04eb6a3f3ae58f495cac3ec2747b4fc44d1ad2 + react: ^15.5.x || ^16.x + react-dom: ^15.5.x || ^16.x + checksum: 111d46f1550019b2d2d240f6334b5488e27f741400703dc594f73e32ed0b27a6e3d0a6b82f7e053380ea484eb87f7ff52604147b0e3daf60e6c34e7157343fb8 languageName: node linkType: hard -"react-password-strength-bar@npm:^0.3.2, react-password-strength-bar@npm:^0.3.3": - version: 0.3.5 - resolution: "react-password-strength-bar@npm:0.3.5" +"react-password-strength-bar@npm:^0.3.2": + version: 0.3.2 + resolution: "react-password-strength-bar@npm:0.3.2" + dependencies: + zxcvbn: 4.4.2 + peerDependencies: + react: 16.8.6 + react-dom: 16.8.6 + checksum: f5f350ceff6a24d1e98171258ec3c40fdad90f3f428b7f2e0f71eda7fc4a587a7fa50d46c7fec21409aae95ca460e9e2b9388e8b70fdfb93ea8ad9c9f4c69471 + languageName: node + linkType: hard + +"react-password-strength-bar@npm:^0.3.3": + version: 0.3.3 + resolution: "react-password-strength-bar@npm:0.3.3" dependencies: zxcvbn: 4.4.2 peerDependencies: - react: ^16.8.6 || ^17 - react-dom: ^16.8.6 || ^17 - checksum: 1edd5a2a4240bb34e362ab32a2b3db5747605004d8b612407832cb9d72e933ce1017678cf6f55bb89e2125daa9b8d61429fb930c18a7faab8a6d27b5d871f87d + react: ^16.8.6 + react-dom: ^16.8.6 + checksum: d967a0bf371ef1a9b7af8c8a074ec16be990dac729cf930a74a0c10a6dc75dc80f5daff6d0cd16e190768178bbdad6fe174bb18d6207be32399cbb22d2b786d7 + languageName: node + linkType: hard + +"react-popper-tooltip@npm:^3.1.1": + version: 3.1.1 + resolution: "react-popper-tooltip@npm:3.1.1" + dependencies: + "@babel/runtime": ^7.12.5 + "@popperjs/core": ^2.5.4 + react-popper: ^2.2.4 + peerDependencies: + react: ^16.6.0 || ^17.0.0 + react-dom: ^16.6.0 || ^17.0.0 + checksum: c820122a4fdce46ff446b2c7bfe45727de42eacf1c2981fe8f8562da246a289dc7349f0732e36390a08ce50717dc52c4e8ab8e418af19cdd2ded7795ea6b8017 languageName: node linkType: hard @@ -30212,37 +35211,50 @@ __metadata: linkType: hard "react-popper@npm:^1.0.2": - version: 1.3.11 - resolution: "react-popper@npm:1.3.11" + version: 1.3.7 + resolution: "react-popper@npm:1.3.7" dependencies: "@babel/runtime": ^7.1.2 - "@hypnosphi/create-react-context": ^0.3.1 + create-react-context: ^0.3.0 deep-equal: ^1.1.1 popper.js: ^1.14.4 prop-types: ^15.6.1 typed-styles: ^0.0.7 warning: ^4.0.2 peerDependencies: - react: 0.14.x || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a0f5994f5799f1c7364498f74df123dd2561fff4ae834b10fdcca74d9a8e159b523ed1f0708db33bad606933ab4f0d5ce9c90e48cbb671bf30016c890f3c7ea4 + react: 0.14.x || ^15.0.0 || ^16.0.0 + checksum: 9ba10e852d6a6d8d8b0a8e5482307b656254addec66c37969ff14516067f564281e6a54ca4a18a7c790cbafbf405d0d152f288729e61cb28274371838923da59 + languageName: node + linkType: hard + +"react-popper@npm:^2.2.4": + version: 2.2.5 + resolution: "react-popper@npm:2.2.5" + dependencies: + react-fast-compare: ^3.0.1 + warning: ^4.0.2 + peerDependencies: + "@popperjs/core": ^2.0.0 + react: ^16.8.0 || ^17 + checksum: 915fcf08e1da4fd48a200074fcdd936f601ee2173f1e730cfed8a54fd47716aa8bf9cce2392463e3bcbe64a096d0baf463809ed2874b94d3a9d430ae6d817b5d languageName: node linkType: hard "react-query@npm:^3.19.0": - version: 3.39.3 - resolution: "react-query@npm:3.39.3" + version: 3.19.0 + resolution: "react-query@npm:3.19.0" dependencies: "@babel/runtime": ^7.5.5 broadcast-channel: ^3.4.1 match-sorter: ^6.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 peerDependenciesMeta: react-dom: optional: true react-native: optional: true - checksum: d2de6a0992dbf039ff2de564de1ae6361f8ac7310159dae42ec16f833b79c05caedced187235c42373ac331cc5f2fe9e2b31b14ae75a815e86d86e30ca9887ad + checksum: 4723a24b0b00e23d065328d495b714c8fdf90d399752958b06f623a5865619636a43ab52f3b89bd2c7ab36c98c916716692d7fc3d4ed9fcf758502ee0d27a9b4 languageName: node linkType: hard @@ -30264,9 +35276,9 @@ __metadata: languageName: node linkType: hard -"react-redux@npm:^7.0.0, react-redux@npm:^7.1.0, react-redux@npm:^7.2.0": - version: 7.2.9 - resolution: "react-redux@npm:7.2.9" +"react-redux@npm:^7.0.0": + version: 7.2.8 + resolution: "react-redux@npm:7.2.8" dependencies: "@babel/runtime": ^7.15.4 "@types/react-redux": ^7.1.20 @@ -30281,14 +35293,28 @@ __metadata: optional: true react-native: optional: true - checksum: 369a2bdcf87915659af9e5c55abfd9f52a84e43e0d12dcc108ed17dbe6933558b7b7fc12caa9c10c1a10a8be7df89454b6c96989d8573fedec1a772c94a1f145 + checksum: ecf1933e91013f2d41bfc781515b536bf81eb1f70ff228607841094c8330fe77d522372b359687e51c0b52b9888dba73db9ac0486aace1896ab9eb9daec102d5 languageName: node linkType: hard -"react-refresh@npm:^0.11.0": - version: 0.11.0 - resolution: "react-refresh@npm:0.11.0" - checksum: 112178a05b1e0ffeaf5d9fb4e56b4410a34a73adeb04dbf13abdc50d9ac9df2ada83e81485156cca0b3fa296aa3612751b3d6cd13be4464642a43679b819cbc7 +"react-redux@npm:^7.1.0, react-redux@npm:^7.2.0": + version: 7.2.0 + resolution: "react-redux@npm:7.2.0" + dependencies: + "@babel/runtime": ^7.5.5 + hoist-non-react-statics: ^3.3.0 + loose-envify: ^1.4.0 + prop-types: ^15.7.2 + react-is: ^16.9.0 + peerDependencies: + react: ^16.8.3 + redux: ^2.0.0 || ^3.0.0 || ^4.0.0-0 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: fb6e4597619a01aabc916bd0ebcf449fbbdcf63137ff5238469c1f8bc241828dd19efff3ab306556c38be39a3a84d34e48f5b68773de891b283ee64018ebf3bc languageName: node linkType: hard @@ -30300,9 +35326,9 @@ __metadata: linkType: hard "react-refresh@npm:^0.4.0": - version: 0.4.3 - resolution: "react-refresh@npm:0.4.3" - checksum: 58d3b899ede4c890b1d06a2d02254a77d1c0dea400be139940e47b1c451ff1c4cbb3ca5d0a9d6ee9574e570075ab6c1bef15e77b7270d4a6f571847d2b26f4fc + version: 0.4.2 + resolution: "react-refresh@npm:0.4.2" + checksum: 980161761002756e6d1d0b201e31906fdfe24a33ee64b3e63e6ec648bd99ff3d717c64381d630ff5d410948c1ca270d4f2422abaf12a5ec936f1e1d623b57441 languageName: node linkType: hard @@ -30328,43 +35354,44 @@ __metadata: linkType: hard "react-router-dom@npm:^5.1.2, react-router-dom@npm:^5.2.0": - version: 5.3.4 - resolution: "react-router-dom@npm:5.3.4" + version: 5.2.0 + resolution: "react-router-dom@npm:5.2.0" dependencies: - "@babel/runtime": ^7.12.13 + "@babel/runtime": ^7.1.2 history: ^4.9.0 loose-envify: ^1.3.1 prop-types: ^15.6.2 - react-router: 5.3.4 + react-router: 5.2.0 tiny-invariant: ^1.0.2 tiny-warning: ^1.0.0 peerDependencies: react: ">=15" - checksum: b86a6f2f5222f041e38adf4e4b32c7643d6735a1a915ef25855b2db285fd059d72ba8d62e5bcd5d822b8ef9520a80453209e55077f5a90d0f72e908979b8f535 + checksum: 98d2d35f9540ac4a3c14dc023623fc8411a6a6338e95d726370e07b27c3bc6e854516537c8e3f9ad2483c4bbd579ba28cce9aff843a19fe8ebff663318886335 languageName: node linkType: hard "react-router-dom@npm:^6.3.0": - version: 6.11.2 - resolution: "react-router-dom@npm:6.11.2" + version: 6.3.0 + resolution: "react-router-dom@npm:6.3.0" dependencies: - "@remix-run/router": 1.6.2 - react-router: 6.11.2 + history: ^5.2.0 + react-router: 6.3.0 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: ba44ff37f2956bc18991f2eedb32a3fa46d35832f61ded6c5d167e853ca289868fca6635467866280c73bc3da00dce8437dbbec57da100c0a3e3e3850af00b83 + checksum: 77603a654f8a8dc7f65535a2e5917a65f8d9ffcb06546d28dd297e52adcc4b8a84377e0115f48dca330b080af2da3e78f29d590c89307094d36927d2b1751ec3 languageName: node linkType: hard -"react-router@npm:5.3.4": - version: 5.3.4 - resolution: "react-router@npm:5.3.4" +"react-router@npm:5.2.0": + version: 5.2.0 + resolution: "react-router@npm:5.2.0" dependencies: - "@babel/runtime": ^7.12.13 + "@babel/runtime": ^7.1.2 history: ^4.9.0 hoist-non-react-statics: ^3.1.0 loose-envify: ^1.3.1 + mini-create-react-context: ^0.4.0 path-to-regexp: ^1.7.0 prop-types: ^15.6.2 react-is: ^16.6.0 @@ -30372,18 +35399,18 @@ __metadata: tiny-warning: ^1.0.0 peerDependencies: react: ">=15" - checksum: 892d4e274a23bf4f39abc2efca54472fb646d3aed4b584020cf49654d2f50d09a2bacebe7c92b4ec7cb8925077376dfcd0664bad6442a73604397cefec9f01f9 + checksum: 6fc908729110a65a5676a9e41333e0f511a3c0ff84c93c0dc704330cf3e02124c93aaeab8031b0e2c71712390d9278fff848eeebfbdda36dca3201142f309973 languageName: node linkType: hard -"react-router@npm:6.11.2": - version: 6.11.2 - resolution: "react-router@npm:6.11.2" +"react-router@npm:6.3.0": + version: 6.3.0 + resolution: "react-router@npm:6.3.0" dependencies: - "@remix-run/router": 1.6.2 + history: ^5.2.0 peerDependencies: react: ">=16.8" - checksum: e47f875dca70033a3b42704cb5ec076b60f9629a5cdc3be613707f3d5a5706123fb80301037455c285c6d5a1011b443e1784e0103969ebfac7071648d360c413 + checksum: 7be673f5e72104be01e6ab274516bdb932efd93305243170690f6560e3bd1035dd1df3d3c9ce1e0f452638a2529f43a1e77dcf0934fc8031c4783da657be13ca languageName: node linkType: hard @@ -30479,6 +35506,18 @@ __metadata: languageName: node linkType: hard +"react-sizeme@npm:^3.0.1": + version: 3.0.2 + resolution: "react-sizeme@npm:3.0.2" + dependencies: + element-resize-detector: ^1.2.2 + invariant: ^2.2.4 + shallowequal: ^1.1.0 + throttle-debounce: ^3.0.1 + checksum: 97cb852c24bbd50acb310da89df564e0d069415f6635676dae3d3bdc583ece88090c0f2ee88a6b0dc36d2793af4a11e83bf6bbb41b86225dd0cf338e8f7e8552 + languageName: node + linkType: hard + "react-smooth@npm:^1.0.5": version: 1.0.6 resolution: "react-smooth@npm:1.0.6" @@ -30494,6 +35533,21 @@ __metadata: languageName: node linkType: hard +"react-syntax-highlighter@npm:^13.5.3": + version: 13.5.3 + resolution: "react-syntax-highlighter@npm:13.5.3" + dependencies: + "@babel/runtime": ^7.3.1 + highlight.js: ^10.1.1 + lowlight: ^1.14.0 + prismjs: ^1.21.0 + refractor: ^3.1.0 + peerDependencies: + react: ">= 0.14.0" + checksum: fa03880a887bc0c79c0be25fc35924980d75f684f8d05620272bdfcbb9f119f45bb7f8ddd92b9e944103964a4e094b99750d0b19c992fd86f2ce0b70266e89c3 + languageName: node + linkType: hard + "react-table@npm:^6.7.6": version: 6.11.5 resolution: "react-table@npm:6.11.5" @@ -30510,11 +35564,11 @@ __metadata: linkType: hard "react-table@npm:^7.7.0": - version: 7.8.0 - resolution: "react-table@npm:7.8.0" + version: 7.7.0 + resolution: "react-table@npm:7.7.0" peerDependencies: - react: ^16.8.3 || ^17.0.0-0 || ^18.0.0 - checksum: 44ca0fb848c6869cd793cede8dc33072b38ebb8f8d2833565afe7cf3eac5d1fa455ac5fb9d06838b16fab0523d5d03e3e82f7645032f71245096e67b892313b9 + react: ^16.8.3 || ^17.0.0-0 + checksum: a679edecc76d3e51311b095528395b38ac85a1ffa371716bea01559a5fdc75af9a6abb9bb907c63190c8e77da22b11f7b05065b3a45d190d8f43cb83e4366206 languageName: node linkType: hard @@ -30544,6 +35598,19 @@ __metadata: languageName: node linkType: hard +"react-textarea-autosize@npm:^8.3.0": + version: 8.3.3 + resolution: "react-textarea-autosize@npm:8.3.3" + dependencies: + "@babel/runtime": ^7.10.2 + use-composed-ref: ^1.0.0 + use-latest: ^1.0.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 + checksum: da3d0192825df3d9f27eef33e7eddf928359a7e3e2b01ae7f7f672ecf4e5c1f7a34f27bdde9ccc24e2e9fbe1d1b9dd2a39c7d47323c9bdf63e7b9bd05c325a71 + languageName: node + linkType: hard + "react-timer-mixin@npm:^0.13.3": version: 0.13.4 resolution: "react-timer-mixin@npm:0.13.4" @@ -30583,8 +35650,8 @@ __metadata: linkType: hard "react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0": - version: 4.4.5 - resolution: "react-transition-group@npm:4.4.5" + version: 4.4.1 + resolution: "react-transition-group@npm:4.4.1" dependencies: "@babel/runtime": ^7.5.5 dom-helpers: ^5.0.1 @@ -30593,11 +35660,11 @@ __metadata: peerDependencies: react: ">=16.6.0" react-dom: ">=16.6.0" - checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 + checksum: 0bcd8af483709832e318dcef84c26ebddeb866bf4f58010286367ef0c1e7c5106e00cfc65688b9102414cb3d572c63909c2eb7ea972b4420fc70a78c10b6e8ad languageName: node linkType: hard -"react@npm:16.13.1": +"react@npm:16.13.1, react@npm:^16.13.1": version: 16.13.1 resolution: "react@npm:16.13.1" dependencies: @@ -30608,17 +35675,6 @@ __metadata: languageName: node linkType: hard -"react@npm:^16.13.1": - version: 16.14.0 - resolution: "react@npm:16.14.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - checksum: 8484f3ecb13414526f2a7412190575fc134da785c02695eb92bb6028c930bfe1c238d7be2a125088fec663cc7cda0a3623373c46807cf2c281f49c34b79881ac - languageName: node - linkType: hard - "react@npm:^18.2.0": version: 18.2.0 resolution: "react@npm:18.2.0" @@ -30666,6 +35722,16 @@ __metadata: languageName: node linkType: hard +"read-pkg-up@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg-up@npm:3.0.0" + dependencies: + find-up: ^2.0.0 + read-pkg: ^3.0.0 + checksum: 16175573f2914ab9788897bcbe2a62b5728d0075e62285b3680cebe97059e2911e0134a062cf6e51ebe3e3775312bc788ac2039ed6af38ec68d2c10c6f2b30fb + languageName: node + linkType: hard + "read-pkg-up@npm:^7.0.1": version: 7.0.1 resolution: "read-pkg-up@npm:7.0.1" @@ -30742,9 +35808,9 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:1 || 2, readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.6, readable-stream@npm:^2.1.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" +"readable-stream@npm:1 || 2, readable-stream@npm:2.3.6, readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.6, readable-stream@npm:^2.1.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": + version: 2.3.6 + resolution: "readable-stream@npm:2.3.6" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 @@ -30753,7 +35819,7 @@ __metadata: safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 - checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + checksum: 686bbf9e2300cd24bbd71ba8999202613ef19441da9223bfe2c7da4f0dfab233302e2604846e9b8e814664ccdf365881e593da963ac9e2120abfa21f14f257fb languageName: node linkType: hard @@ -30769,9 +35835,9 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:2.3.6": - version: 2.3.6 - resolution: "readable-stream@npm:2.3.6" +"readable-stream@npm:^2.3.7": + version: 2.3.7 + resolution: "readable-stream@npm:2.3.7" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 @@ -30780,18 +35846,29 @@ __metadata: safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 - checksum: 686bbf9e2300cd24bbd71ba8999202613ef19441da9223bfe2c7da4f0dfab233302e2604846e9b8e814664ccdf365881e593da963ac9e2120abfa21f14f257fb + checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 languageName: node linkType: hard -"readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" +"readable-stream@npm:^3.0.2, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.0 + resolution: "readable-stream@npm:3.6.0" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1": + version: 3.4.0 + resolution: "readable-stream@npm:3.4.0" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 - checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + checksum: cb4a55018facb15312e2f91a0389d0cc41b88afef6fd9f533db75533ec60102bafd6fd0185699aa3328a3b2301e2f867ef1903f1b7389f916614edbc53359b94 languageName: node linkType: hard @@ -30806,6 +35883,15 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:~3.4.0": + version: 3.4.0 + resolution: "readdirp@npm:3.4.0" + dependencies: + picomatch: ^2.2.1 + checksum: ade04169c1cbf3ec74f27d79fac3012b1c73ec18b51a438ce92fd068565625d3c889e52ca317744847c5adcbb3f1a3ba7f8209019509ead547f1a33b40440626 + languageName: node + linkType: hard + "readdirp@npm:~3.5.0": version: 3.5.0 resolution: "readdirp@npm:3.5.0" @@ -30825,8 +35911,8 @@ __metadata: linkType: hard "realm@npm:^6.1.5": - version: 6.1.8 - resolution: "realm@npm:6.1.8" + version: 6.1.5 + resolution: "realm@npm:6.1.5" dependencies: command-line-args: ^4.0.6 deepmerge: 2.1.0 @@ -30845,7 +35931,7 @@ __metadata: sync-request: ^3.0.1 tar: ^6.0.1 url-parse: ^1.4.4 - checksum: 1638826e777a1d6041762e591a4f0995fc03f5415d15ff6f33c581cb1e780b72910a18942f7baefde3accc9363af88261b3b834bf24d07d4349f6da7d50f49a6 + checksum: 549698345b90fe7f7a0c17ec283a4ce91c6f09205641c622e03c770f835828386a3d46c2d6b265e6f1d9dfa5f709c2804a87a048ff5987077fdb4216f5bbde8f languageName: node linkType: hard @@ -30884,11 +35970,11 @@ __metadata: linkType: hard "recharts@npm:^1.8.5": - version: 1.8.6 - resolution: "recharts@npm:1.8.6" + version: 1.8.5 + resolution: "recharts@npm:1.8.5" dependencies: classnames: ^2.2.5 - core-js: ^3.4.2 + core-js: ^2.6.10 d3-interpolate: ^1.3.0 d3-scale: ^2.1.0 d3-shape: ^1.2.0 @@ -30901,7 +35987,7 @@ __metadata: peerDependencies: react: ^15.0.0 || ^16.0.0 react-dom: ^15.0.0 || ^16.0.0 - checksum: c937ae8c21d6063fa412bf5d458fe0ea1ef78278d4a27b05aabf0250724732d488251436126574c4e06614661912e4908b20aa3f934fcc0d9a957e86949c30a4 + checksum: bdc1b712b90a3e5f5fcc1bbb7755dde8666c056f67cad90f4e4a2dd726ed45f9fcc82fce4a679ae168c2ed2e243a4c1acffb3e1f45ad4d96c47bcf9e764b5c8f languageName: node linkType: hard @@ -31009,11 +36095,11 @@ __metadata: linkType: hard "redux-devtools-extension@npm:^2.13.2": - version: 2.13.9 - resolution: "redux-devtools-extension@npm:2.13.9" + version: 2.13.8 + resolution: "redux-devtools-extension@npm:2.13.8" peerDependencies: redux: ^3.1.0 || ^4.0.0 - checksum: 603d48fd6acf3922ef373b251ab3fdbb990035e90284191047b29d25b06ea18122bc4ef01e0704ccae495acb27ab5e47b560937e98213605dd88299470025db9 + checksum: f586dd4a9301826071177b68858490525b7f710ca9b19af60f57650ed3311b4032d2e5fe3a3b8e1fdaa6babda33fd5a494bb72a4c2291a311de3079902f0d819 languageName: node linkType: hard @@ -31038,29 +36124,27 @@ __metadata: linkType: hard "redux-persist@npm:^5.9.1": - version: 5.10.0 - resolution: "redux-persist@npm:5.10.0" + version: 5.9.1 + resolution: "redux-persist@npm:5.9.1" peerDependencies: redux: ">3.0.0" - checksum: ddf98450091ca9e70d7328a23f3f0f3da86170708aecb4f9cd7efa42f3d6bdf431618d7a082cbbd26ac87e04738692ff6b2d28a08114b6f4e44a967d5fc1145b + checksum: ed96e302d810f4a0ec89015a4e5c6dccf43de26465c344e86e2daf5bf6f1b55ff82de969a2984a892cae8a6c3cc6667cf7df175418b4b2f114e0f4d2c9543fb2 languageName: node linkType: hard "redux-saga@npm:^1.0.0-beta.2": - version: 1.2.3 - resolution: "redux-saga@npm:1.2.3" + version: 1.1.3 + resolution: "redux-saga@npm:1.1.3" dependencies: - "@redux-saga/core": ^1.2.3 - checksum: 5c70799272cfbc94e046992d04bbe967e9f86ca3a35aa0c1562e6727e85b96b1a5aae68e180fdbbbc58de453dc22b39d99c81d7c604fbda7c45a8b60a729ef9d + "@redux-saga/core": ^1.1.3 + checksum: 4ea0bf0d4fac4a9101f2fd0798f7c93ed6646781e40dc9082ff1d4d3a9ae24ef2cadf1e3f62d27e5dcf100e2c8febf833bafd1d7033167afcb198013d0136b4a languageName: node linkType: hard "redux-thunk@npm:^2.2.0, redux-thunk@npm:^2.3.0": - version: 2.4.2 - resolution: "redux-thunk@npm:2.4.2" - peerDependencies: - redux: ^4 - checksum: c7f757f6c383b8ec26152c113e20087818d18ed3edf438aaad43539e9a6b77b427ade755c9595c4a163b6ad3063adf3497e5fe6a36c68884eb1f1cfb6f049a5c + version: 2.3.0 + resolution: "redux-thunk@npm:2.3.0" + checksum: d13f442ffc91249b534bf14884c33feff582894be2562169637dc9d4d70aec6423bfe6d66f88c46ac027ac1c0cd07d6c2dd4a61cf7695b8e43491de679df9bcf languageName: node linkType: hard @@ -31076,12 +36160,33 @@ __metadata: languageName: node linkType: hard -"redux@npm:^4.0.0, redux@npm:^4.0.2, redux@npm:^4.0.4": - version: 4.2.1 - resolution: "redux@npm:4.2.1" +"redux@npm:^4.0.0": + version: 4.2.0 + resolution: "redux@npm:4.2.0" dependencies: "@babel/runtime": ^7.9.2 - checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd + checksum: 75f3955c89b3f18edf5411e5fb482aa2e4f41a416183e8802a6bf6472c4fc3d47675b8b321d147f8af8e0f616436ac507bf5a25f1c4d6180e797b549c7db2c1d + languageName: node + linkType: hard + +"redux@npm:^4.0.2, redux@npm:^4.0.4": + version: 4.0.5 + resolution: "redux@npm:4.0.5" + dependencies: + loose-envify: ^1.4.0 + symbol-observable: ^1.2.0 + checksum: 23689ba4318bfffd4517c8c8d49c5e9a7df1b864b3cf4a4784e10060652e28054586a4a64053d1252ae5f105da61cda03fe01a422b05a053c8604b1be1689d16 + languageName: node + linkType: hard + +"refractor@npm:^3.1.0": + version: 3.4.0 + resolution: "refractor@npm:3.4.0" + dependencies: + hastscript: ^6.0.0 + parse-entities: ^2.0.0 + prismjs: ~1.24.0 + checksum: 7f156bade4bc46703756c73d35b01ed571131d244c1767f8aae4fa7249bdee83b514754ea1522b4120e77f597ecc033c6324f391cfc504c81acf7d49a9ef2d13 languageName: node linkType: hard @@ -31094,6 +36199,22 @@ __metadata: languageName: node linkType: hard +"regenerate-unicode-properties@npm:^8.2.0": + version: 8.2.0 + resolution: "regenerate-unicode-properties@npm:8.2.0" + dependencies: + regenerate: ^1.4.0 + checksum: ee7db70ab25b95f2e3f39537089fc3eddba0b39fc9b982d6602f127996ce873d8c55584d5428486ca00dc0a85d174d943354943cd4a745cda475c8fe314b4f8a + languageName: node + linkType: hard + +"regenerate@npm:^1.4.0": + version: 1.4.0 + resolution: "regenerate@npm:1.4.0" + checksum: 8b74ff9d6becc577eecf59ce6eb969c1ce4e6fdabf262d024decd59757741a4598d867cde10dc4ef7ca2a1a415bbf05ddda839cd046050c909117966e118bd5b + languageName: node + linkType: hard + "regenerate@npm:^1.4.2": version: 1.4.2 resolution: "regenerate@npm:1.4.2" @@ -31115,13 +36236,44 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.11, regenerator-runtime@npm:^0.13.2, regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.7, regenerator-runtime@npm:^0.13.9": +"regenerator-runtime@npm:^0.13.11": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 languageName: node linkType: hard +"regenerator-runtime@npm:^0.13.2": + version: 0.13.3 + resolution: "regenerator-runtime@npm:0.13.3" + checksum: 3d3dd091db39e9d7d1eedec811d8272f1a9b0d52ca047a800ffe9b90e289b002ca3d84bcb09fa849f41c4e8e8178ec246b0fb5f9f999a64cd7247986ea02d3bd + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.4": + version: 0.13.5 + resolution: "regenerator-runtime@npm:0.13.5" + checksum: afc42d8b86f5ef2003821a2fc214c60640a07992563888529f45533071545c2631805d7214e32f55b517a665f1c59f2629a641a5cc1efbd56f48b6149dd319f2 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.7, regenerator-runtime@npm:^0.13.9": + version: 0.13.9 + resolution: "regenerator-runtime@npm:0.13.9" + checksum: 65ed455fe5afd799e2897baf691ca21c2772e1a969d19bb0c4695757c2d96249eb74ee3553ea34a91062b2a676beedf630b4c1551cc6299afb937be1426ec55e + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.14.2": + version: 0.14.4 + resolution: "regenerator-transform@npm:0.14.4" + dependencies: + "@babel/runtime": ^7.8.4 + private: ^0.1.8 + checksum: afa99ba380cfe70f0e41eedbbcbe773cc82f5edb5465c67aea17fa62e369cf359755904ffd868f860147a0e79f81cd066b16b0cb3b2aafae66c01427e2ce41ab + languageName: node + linkType: hard + "regenerator-transform@npm:^0.15.1": version: 0.15.1 resolution: "regenerator-transform@npm:0.15.1" @@ -31148,7 +36300,17 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0": +"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.3.0": + version: 1.3.0 + resolution: "regexp.prototype.flags@npm:1.3.0" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + checksum: b6b985a6d5e78b79f9da6b40a775979a9f972569243799ec8dcaa2c5c14eb1e41b2a14acb1b7216378dddafa8156ed820ab68d4b2ac600fb0a7670dda04b45b4 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.0": version: 1.5.0 resolution: "regexp.prototype.flags@npm:1.5.0" dependencies: @@ -31159,10 +36321,24 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.1.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 +"regexpp@npm:^3.0.0, regexpp@npm:^3.1.0": + version: 3.1.0 + resolution: "regexpp@npm:3.1.0" + checksum: 63bcb2c98d63274774c79bef256e03f716d25f1fa8427267d0302d1436a83fa0d905f4e8a172fdfa99fb4d84833df2fb3bf7da2a1a868f156e913174c32b1139 + languageName: node + linkType: hard + +"regexpu-core@npm:^4.7.1": + version: 4.7.1 + resolution: "regexpu-core@npm:4.7.1" + dependencies: + regenerate: ^1.4.0 + regenerate-unicode-properties: ^8.2.0 + regjsgen: ^0.5.1 + regjsparser: ^0.6.4 + unicode-match-property-ecmascript: ^1.0.4 + unicode-match-property-value-ecmascript: ^1.2.0 + checksum: 368b4aab72132ba3c8bd114822572c920d390ae99d3d219e0c7f872c6a0a3b1fbe30c88188ff90ec6f8e681667fa8e51d84a78bb05c460996a0df6a060b7ae80 languageName: node linkType: hard @@ -31180,6 +36356,42 @@ __metadata: languageName: node linkType: hard +"registry-auth-token@npm:^4.0.0": + version: 4.2.0 + resolution: "registry-auth-token@npm:4.2.0" + dependencies: + rc: ^1.2.8 + checksum: e91fb7eff2be81ebcbe480e1cf6faf3d0cad27dc4fbc2abc813472b7778a1f322d7ede92d84adf0bc70d2d0483e3b797a6840d762f8f79ed495a4f96644d7bb8 + languageName: node + linkType: hard + +"registry-url@npm:^5.0.0": + version: 5.1.0 + resolution: "registry-url@npm:5.1.0" + dependencies: + rc: ^1.2.8 + checksum: bcea86c84a0dbb66467b53187fadebfea79017cddfb4a45cf27530d7275e49082fe9f44301976eb0164c438e395684bcf3dae4819b36ff9d1640d8cc60c73df9 + languageName: node + linkType: hard + +"regjsgen@npm:^0.5.1": + version: 0.5.1 + resolution: "regjsgen@npm:0.5.1" + checksum: 946e4bb6c456bb4612fcd823faffe58b0d742e7ec8b4d0d6d43546827de43479e8f9a3172582b36b90c84d7dd240cb2fec892fc699e4304a51bc377f73e13247 + languageName: node + linkType: hard + +"regjsparser@npm:^0.6.4": + version: 0.6.4 + resolution: "regjsparser@npm:0.6.4" + dependencies: + jsesc: ~0.5.0 + bin: + regjsparser: bin/parser + checksum: 6058749f802a519d37ebbd6ee6c584a65045c3ae4822a54d53666fd56dfdc3363c6905cf9840956becf34111793fe284db75d57342f4263291b29da0a404e9fe + languageName: node + linkType: hard + "regjsparser@npm:^0.9.1": version: 0.9.1 resolution: "regjsparser@npm:0.9.1" @@ -31301,23 +36513,23 @@ __metadata: languageName: node linkType: hard -"renderkid@npm:^2.0.4": - version: 2.0.7 - resolution: "renderkid@npm:2.0.7" +"renderkid@npm:^2.0.1": + version: 2.0.3 + resolution: "renderkid@npm:2.0.3" dependencies: - css-select: ^4.1.3 - dom-converter: ^0.2.0 - htmlparser2: ^6.1.0 - lodash: ^4.17.21 - strip-ansi: ^3.0.1 - checksum: d3d7562531fb8104154d4aa6aa977707783616318014088378a6c5bbc36318ada9289543d380ede707e531b7f5b96229e87d1b8944f675e5ec3686e62692c7c7 + css-select: ^1.1.0 + dom-converter: ^0.2 + htmlparser2: ^3.3.0 + strip-ansi: ^3.0.0 + utila: ^0.4.0 + checksum: f8a7df6d0637e7c226b5945351251a8f7ed105afd65521b111bbb858d5faa36b3a045a7d93afde930ebcf2ea2a8b582a942d2f81891a51be776f09c0057bcb09 languageName: node linkType: hard "repeat-element@npm:^1.1.2": - version: 1.1.4 - resolution: "repeat-element@npm:1.1.4" - checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 + version: 1.1.3 + resolution: "repeat-element@npm:1.1.3" + checksum: 0743a136b484117016ad587577ede60a3ffe604b74e57bd5d7d0aa041fe2f1c956e6b2f3ff83c86f4db9fac022c3fa2da8e58b9d3618b8b4cb1c3d041bcc422f languageName: node linkType: hard @@ -31337,6 +36549,13 @@ __metadata: languageName: node linkType: hard +"replace-ext@npm:1.0.0": + version: 1.0.0 + resolution: "replace-ext@npm:1.0.0" + checksum: 123e5c28046e4f0b82e1cdedb0340058d362ddbd8e17d98e5068bbacc3b3b397b4d8e3c69d603f9c4c0f6a6494852064396570c44f9426a4673dba63850fab34 + languageName: node + linkType: hard + "request-progress@npm:^3.0.0": version: 3.0.0 resolution: "request-progress@npm:3.0.0" @@ -31347,8 +36566,8 @@ __metadata: linkType: hard "request@npm:^2.81.0, request@npm:^2.88.0": - version: 2.88.2 - resolution: "request@npm:2.88.2" + version: 2.88.0 + resolution: "request@npm:2.88.0" dependencies: aws-sign2: ~0.7.0 aws4: ^1.8.0 @@ -31357,7 +36576,7 @@ __metadata: extend: ~3.0.2 forever-agent: ~0.6.1 form-data: ~2.3.2 - har-validator: ~5.1.3 + har-validator: ~5.1.0 http-signature: ~1.2.0 is-typedarray: ~1.0.0 isstream: ~0.1.2 @@ -31367,10 +36586,10 @@ __metadata: performance-now: ^2.1.0 qs: ~6.5.2 safe-buffer: ^5.1.2 - tough-cookie: ~2.5.0 + tough-cookie: ~2.4.3 tunnel-agent: ^0.6.0 uuid: ^3.3.2 - checksum: 4e112c087f6eabe7327869da2417e9d28fcd0910419edd2eb17b6acfc4bfa1dad61954525949c228705805882d8a98a86a0ea12d7f739c01ee92af7062996983 + checksum: aecf4f8cdb0ebd5feac5e29b748d6ab376ac5717ddcbc5a6bb24cc3808bde755ff0fa3a8379a2d25f6c4b969ced1ac065d22a615c71747cd305731efa643e30d languageName: node linkType: hard @@ -31403,9 +36622,9 @@ __metadata: linkType: hard "reselect@npm:^4.0.0": - version: 4.1.8 - resolution: "reselect@npm:4.1.8" - checksum: a4ac87cedab198769a29be92bc221c32da76cfdad6911eda67b4d3e7136dca86208c3b210e31632eae31ebd2cded18596f0dd230d3ccc9e978df22f233b5583e + version: 4.0.0 + resolution: "reselect@npm:4.0.0" + checksum: ac7dfc9ef2cdb42b6fc87a856f3ce904c2e4363a2bc1e6fb7eea5f78902a6f506e4388e6509752984877c6dbfe501100c076671d334799eb5a1bfe9936cb2c12 languageName: node linkType: hard @@ -31473,20 +36692,20 @@ __metadata: linkType: hard "resolve-url-loader@npm:^3.1.2": - version: 3.1.5 - resolution: "resolve-url-loader@npm:3.1.5" + version: 3.1.4 + resolution: "resolve-url-loader@npm:3.1.4" dependencies: adjust-sourcemap-loader: 3.0.0 camelcase: 5.3.1 compose-function: 3.0.3 convert-source-map: 1.7.0 es6-iterator: 2.0.3 - loader-utils: ^1.2.3 + loader-utils: 1.2.3 postcss: 7.0.36 rework: 1.0.1 rework-visit: 1.0.0 source-map: 0.6.1 - checksum: eb52911eff20723f07409cc12138d254fa0dd4a4f3b1ba11ee1b29912afb03f1272aaddb523658be1e3a946e0d1bf6f603d0e107753ab83d48ad2116cf04b7f6 + checksum: aa54911a8ba835b5af5a03d7e3201fe1fa8ae5f3703ce1224b29257f510f4196c4184237e105958eccc97bf78faebf996a745e7c4ddeb724045ac4c78024b514 languageName: node linkType: hard @@ -31497,14 +36716,7 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^1.1.0": - version: 1.1.1 - resolution: "resolve.exports@npm:1.1.1" - checksum: 485aa10082eb388a569d696e17ad7b16f4186efc97dd34eadd029d95b811f21ffee13b1b733198bb4584dbb3cb296aa6f141835221fb7613b9606b84f1386655 - languageName: node - linkType: hard - -"resolve@npm:1.18.1": +"resolve@npm:1.18.1, resolve@npm:^1.18.1": version: 1.18.1 resolution: "resolve@npm:1.18.1" dependencies: @@ -31514,33 +36726,48 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.13.1, resolve@npm:^1.14.2, resolve@npm:^1.15.1, resolve@npm:^1.17.0, resolve@npm:^1.18.1, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2, resolve@npm:^1.5.0": - version: 1.22.3 - resolution: "resolve@npm:1.22.3" +"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.13.1, resolve@npm:^1.3.2, resolve@npm:^1.5.0, resolve@npm:^1.8.1": + version: 1.14.1 + resolution: "resolve@npm:1.14.1" dependencies: - is-core-module: ^2.12.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: fb834b81348428cb545ff1b828a72ea28feb5a97c026a1cf40aa1008352c72811ff4d4e71f2035273dc536dcfcae20c13604ba6283c612d70fa0b6e44519c374 + path-parse: ^1.0.6 + checksum: ff77ac5adbfb4504973b41f537a7c942184e1a356e51ec36b6304f475ab24295bc26565576a9a38fb64b554e1c5b4af398ce91362b2b3c5bc17ab888df05fdeb languageName: node linkType: hard -"resolve@npm:^2.0.0-next.4": - version: 2.0.0-next.4 - resolution: "resolve@npm:2.0.0-next.4" +"resolve@npm:^1.1.7": + version: 1.22.1 + resolution: "resolve@npm:1.22.1" dependencies: is-core-module: ^2.9.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: c438ac9a650f2030fd074219d7f12ceb983b475da2d89ad3d6dd05fbf6b7a0a8cd37d4d10b43cb1f632bc19f22246ab7f36ebda54d84a29bfb2910a0680906d3 + checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e + languageName: node + linkType: hard + +"resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0": + version: 1.20.0 + resolution: "resolve@npm:1.20.0" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: 40cf70b2cde00ef57f99daf2dc63c6a56d6c14a1b7fc51735d06a6f0a3b97cb67b4fb7ef6c747b4e13a7baba83b0ef625d7c4ce92a483cd5af923c3b65fd16fe + languageName: node + linkType: hard + +"resolve@npm:^1.15.1, resolve@npm:^1.17.0": + version: 1.17.0 + resolution: "resolve@npm:1.17.0" + dependencies: + path-parse: ^1.0.6 + checksum: 9ceaf83b3429f2d7ff5d0281b8d8f18a1f05b6ca86efea7633e76b8f76547f33800799dfdd24434942dec4fbd9e651ed3aef577d9a6b5ec87ad89c1060e24759 languageName: node linkType: hard -"resolve@patch:resolve@1.18.1#~builtin": +"resolve@patch:resolve@1.18.1#~builtin, resolve@patch:resolve@^1.18.1#~builtin": version: 1.18.1 resolution: "resolve@patch:resolve@npm%3A1.18.1#~builtin::version=1.18.1&hash=07638b" dependencies: @@ -31550,33 +36777,48 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.13.1#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.15.1#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.18.1#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin, resolve@patch:resolve@^1.5.0#~builtin": - version: 1.22.3 - resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin::version=1.22.3&hash=07638b" +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.13.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin, resolve@patch:resolve@^1.5.0#~builtin, resolve@patch:resolve@^1.8.1#~builtin": + version: 1.14.1 + resolution: "resolve@patch:resolve@npm%3A1.14.1#~builtin::version=1.14.1&hash=07638b" dependencies: - is-core-module: ^2.12.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: ad59734723b596d0891321c951592ed9015a77ce84907f89c9d9307dd0c06e11a67906a3e628c4cae143d3e44898603478af0ddeb2bba3f229a9373efe342665 + path-parse: ^1.0.6 + checksum: bf6627b6cf62ca7934d592037d30e061f24f61c95c57bb374212d7f622cbfa8fb49a7df8a8b0720c029b07e748bbf3452a997c7f80b5e582f52ee61fd80ae65f languageName: node linkType: hard -"resolve@patch:resolve@^2.0.0-next.4#~builtin": - version: 2.0.0-next.4 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=07638b" +"resolve@patch:resolve@^1.1.7#~builtin": + version: 1.22.1 + resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: is-core-module: ^2.9.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 4bf9f4f8a458607af90518ff73c67a4bc1a38b5a23fef2bb0ccbd45e8be89820a1639b637b0ba377eb2be9eedfb1739a84cde24fe4cd670c8207d8fea922b011 + checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin": + version: 1.20.0 + resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin::version=1.20.0&hash=07638b" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: a0dd7d16a8e47af23afa9386df2dff10e3e0debb2c7299a42e581d9d9b04d7ad5d2c53f24f1e043f7b3c250cbdc71150063e53d0b6559683d37f790b7c8c3cd5 + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.15.1#~builtin, resolve@patch:resolve@^1.17.0#~builtin": + version: 1.17.0 + resolution: "resolve@patch:resolve@npm%3A1.17.0#~builtin::version=1.17.0&hash=07638b" + dependencies: + path-parse: ^1.0.6 + checksum: 6fd799f282ddf078c4bc20ce863e3af01fa8cb218f0658d9162c57161a2dbafe092b13015b9a4c58d0e1e801cf7aa7a4f13115fea9db98c3f9a0c43e429bad6f languageName: node linkType: hard -"responselike@npm:1.0.2": +"responselike@npm:1.0.2, responselike@npm:^1.0.2": version: 1.0.2 resolution: "responselike@npm:1.0.2" dependencies: @@ -31685,25 +36927,25 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" +"rimraf@npm:2.x.x, rimraf@npm:^2.2.8, rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.3, rimraf@npm:^2.7.1": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" dependencies: glob: ^7.1.3 bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + rimraf: ./bin.js + checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd languageName: node linkType: hard -"rimraf@npm:^2.2.8, rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.3": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" +"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" dependencies: glob: ^7.1.3 bin: - rimraf: ./bin.js - checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 languageName: node linkType: hard @@ -31827,20 +37069,16 @@ __metadata: linkType: hard "run-parallel-limit@npm:^1.0.5": - version: 1.1.0 - resolution: "run-parallel-limit@npm:1.1.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: 672c3b87e7f939c684b9965222b361421db0930223ed1e43ebf0e7e48ccc1a022ea4de080bef4d5468434e2577c33b7681e3f03b7593fdc49ad250a55381123c + version: 1.0.6 + resolution: "run-parallel-limit@npm:1.0.6" + checksum: 52bde57d58610bbd20a62b0a1e97ff5f669225d54ba7cca0afbc352e4d22a2d1666f560731ee0ce5904c72a4a55e7f0628d6a1f5f379750add62e8ee0c80c95b languageName: node linkType: hard "run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + version: 1.1.9 + resolution: "run-parallel@npm:1.1.9" + checksum: 8bbeda89c2c1dbfeaa0cdb9f17e93a011ac58ef77339ef1e61a62208b67c8e7b661891df677bb7c5be84b8792e27061177368d500b3c731bb019b0c71e667591 languageName: node linkType: hard @@ -31869,12 +37107,30 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^6.3.3, rxjs@npm:^6.5.2": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" +"rxjs@npm:^5.4.3": + version: 5.5.12 + resolution: "rxjs@npm:5.5.12" + dependencies: + symbol-observable: 1.0.1 + checksum: 3c2522402b913c3aa04514cd34e1b290b2a781a2fd6b0e92ac2746eee411aacc1c335716b51b83869075b077df4a6b973831cb54d40d528b42f8f8ad26ffb77c + languageName: node + linkType: hard + +"rxjs@npm:^6.3.3": + version: 6.5.5 + resolution: "rxjs@npm:6.5.5" dependencies: tslib: ^1.9.0 - checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b + checksum: fc578fc34b73e5f35bfdd71cabf73113453e87917aecead0f3459e4403c4c4a41871c726271d9b6fe4a5e966efb02f7b1a5db2fc08dbe9ba5e239368e15adc5f + languageName: node + linkType: hard + +"rxjs@npm:^6.5.2": + version: 6.6.0 + resolution: "rxjs@npm:6.6.0" + dependencies: + tslib: ^1.9.0 + checksum: 08f9336b83ce2a496380c593681191a789a0b7e9f161404d6e1510db5e639fd5f43cb02507ff47380a9cfd4267de5dc6ac4422805ad2598f4e3e6325d90d6eb9 languageName: node linkType: hard @@ -31901,18 +37157,6 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-array-concat@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.0 - has-symbols: ^1.0.3 - isarray: ^2.0.5 - checksum: f43cb98fe3b566327d0c09284de2b15fb85ae964a89495c1b1a5d50c7c8ed484190f4e5e71aacc167e16231940079b326f2c0807aea633d47cc7322f40a6b57f - languageName: node - linkType: hard - "safe-buffer@npm:5.1.1": version: 5.1.1 resolution: "safe-buffer@npm:5.1.1" @@ -31927,13 +37171,20 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.2.1": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard +"safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": + version: 5.2.0 + resolution: "safe-buffer@npm:5.2.0" + checksum: 91d50127aeaee9b8cb1ee12c810d719e29813d1ab1ce6d1b4704cd9ca0e0bfa47455e02cf1bb238be90f2db764447f058fbaef1a1018ae8387c692615d72f86c + languageName: node + linkType: hard + "safe-json-stringify@npm:~1": version: 1.2.0 resolution: "safe-json-stringify@npm:1.2.0" @@ -31941,17 +37192,6 @@ __metadata: languageName: node linkType: hard -"safe-regex-test@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 - is-regex: ^1.1.4 - checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 - languageName: node - linkType: hard - "safe-regex@npm:^1.1.0": version: 1.1.0 resolution: "safe-regex@npm:1.1.0" @@ -31961,10 +37201,10 @@ __metadata: languageName: node linkType: hard -"safe-stable-stringify@npm:^2.2.0, safe-stable-stringify@npm:^2.3.1": - version: 2.4.3 - resolution: "safe-stable-stringify@npm:2.4.3" - checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 +"safe-stable-stringify@npm:^2.2.0": + version: 2.4.2 + resolution: "safe-stable-stringify@npm:2.4.2" + checksum: 0324ba2e40f78cae63e31a02b1c9bdf1b786621f9e8760845608eb9e81aef401944ac2078e5c9c1533cf516aea34d08fa8052ca853637ced84b791caaf1e394e languageName: node linkType: hard @@ -32011,8 +37251,8 @@ __metadata: linkType: hard "sass-loader@npm:^10.0.5": - version: 10.4.1 - resolution: "sass-loader@npm:10.4.1" + version: 10.2.0 + resolution: "sass-loader@npm:10.2.0" dependencies: klona: ^2.0.4 loader-utils: ^2.0.0 @@ -32021,7 +37261,7 @@ __metadata: semver: ^7.3.2 peerDependencies: fibers: ">= 3.1.0" - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 sass: ^1.3.0 webpack: ^4.36.0 || ^5.0.0 peerDependenciesMeta: @@ -32031,7 +37271,7 @@ __metadata: optional: true sass: optional: true - checksum: df9a65a62247e95305299ccbdf212cffdcdb69490928aecdf4f3dcf539b5302ed7cbffa663f83c5fc3ce0864decf84257a9ce484f6df4cb4426feeb88445dcd0 + checksum: d53212e5d199cdd221a67046ab4276c352d56b50ca64347115b36e8ebbb2c68ec396a14d6cf5a08853c830a6b0ec1fd2b016cdc53cbe90a0332a908f50ec2043 languageName: node linkType: hard @@ -32042,7 +37282,7 @@ __metadata: languageName: node linkType: hard -"sax@npm:>=0.6.0, sax@npm:^1.2.4, sax@npm:~1.2.4": +"sax@npm:>=0.6.0, sax@npm:^1.2.1, sax@npm:^1.2.4, sax@npm:~1.2.4": version: 1.2.4 resolution: "sax@npm:1.2.4" checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe @@ -32077,7 +37317,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:2.7.0": +"schema-utils@npm:2.7.0, schema-utils@npm:^2.6.5, schema-utils@npm:^2.7.0": version: 2.7.0 resolution: "schema-utils@npm:2.7.0" dependencies: @@ -32099,7 +37339,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^2.6.5, schema-utils@npm:^2.7.0, schema-utils@npm:^2.7.1": +"schema-utils@npm:^2.7.1": version: 2.7.1 resolution: "schema-utils@npm:2.7.1" dependencies: @@ -32110,14 +37350,14 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.1.2": - version: 3.1.2 - resolution: "schema-utils@npm:3.1.2" +"schema-utils@npm:^3.0.0": + version: 3.1.1 + resolution: "schema-utils@npm:3.1.1" dependencies: "@types/json-schema": ^7.0.8 ajv: ^6.12.5 ajv-keywords: ^3.5.2 - checksum: 39683edfe3beff018cdb1ae4fa296fc55cea13a080aa2b4d9351895cd64b22ba4d87e2e548c2a2ac1bc76e60980670adb0f413a58104479f1a0c12e5663cb8ca + checksum: fb73f3d759d43ba033c877628fe9751620a26879f6301d3dbeeb48cf2a65baec5cdf99da65d1bf3b4ff5444b2e59cbe4f81c2456b5e0d2ba7d7fd4aed5da29ce languageName: node linkType: hard @@ -32136,11 +37376,11 @@ __metadata: linkType: hard "selfsigned@npm:^1.10.8": - version: 1.10.14 - resolution: "selfsigned@npm:1.10.14" + version: 1.10.11 + resolution: "selfsigned@npm:1.10.11" dependencies: node-forge: ^0.10.0 - checksum: 616d131b18516ba2876398f0230987511d50a13816e0709b9f0d20246a524a2e83dfb27ea46ce2bfe331519583a156afa67bc3ece8bf0f9804aec06e2e8c7a21 + checksum: 1fd8fd317dc0b7d713d12d828131ac03c53abf41c4538b263fecd37bbc15688526c631654049ff00806b757ccb85492de6a13d6fefcad5cb54926631e48a76e1 languageName: node linkType: hard @@ -32151,7 +37391,16 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.0.3, semver@npm:^5.1.0, semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.0, semver@npm:^5.7.1": +"semver-diff@npm:^3.1.1": + version: 3.1.1 + resolution: "semver-diff@npm:3.1.1" + dependencies: + semver: ^6.3.0 + checksum: 8bbe5a5d7add2d5e51b72314a9215cd294d71f41cdc2bf6bd59ee76411f3610b576172896f1d191d0d7294cb9f2f847438d2ee158adacc0c224dca79052812fe + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.0.3, semver@npm:^5.1.0, semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.5.1, semver@npm:^5.6.0, semver@npm:^5.7.0, semver@npm:^5.7.1": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -32160,7 +37409,25 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.3.2": +"semver@npm:4.3.2": + version: 4.3.2 + resolution: "semver@npm:4.3.2" + bin: + semver: ./bin/semver + checksum: a0bc4015f01c1843a4f270b0a8e668bbc99e2847d239ae9103c7eb54ab6b5c426d8e857c8796025fefeb131984825da977b0c2bcfbb2179ac22dbb018f91acfd + languageName: node + linkType: hard + +"semver@npm:7.0.0, semver@npm:~7.0.0": + version: 7.0.0 + resolution: "semver@npm:7.0.0" + bin: + semver: bin/semver.js + checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 + languageName: node + linkType: hard + +"semver@npm:7.3.2, semver@npm:^7.2.1, semver@npm:^7.3.2": version: 7.3.2 resolution: "semver@npm:7.3.2" bin: @@ -32169,18 +37436,18 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": - version: 7.5.1 - resolution: "semver@npm:7.5.1" +"semver@npm:7.x, semver@npm:^7.3.4, semver@npm:^7.3.5": + version: 7.3.5 + resolution: "semver@npm:7.3.5" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: d16dbedad53c65b086f79524b9ef766bf38670b2395bdad5c957f824dcc566b624988013564f4812bcace3f9d405355c3635e2007396a39d1bffc71cfec4a2fc + checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60 languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": +"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.2.0, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" bin: @@ -32189,12 +37456,35 @@ __metadata: languageName: node linkType: hard -"semver@npm:~7.0.0": - version: 7.0.0 - resolution: "semver@npm:7.0.0" +"semver@npm:^7.3.7": + version: 7.5.1 + resolution: "semver@npm:7.5.1" + dependencies: + lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 + checksum: d16dbedad53c65b086f79524b9ef766bf38670b2395bdad5c957f824dcc566b624988013564f4812bcace3f9d405355c3635e2007396a39d1bffc71cfec4a2fc + languageName: node + linkType: hard + +"send@npm:0.17.1": + version: 0.17.1 + resolution: "send@npm:0.17.1" + 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.7.2 + mime: 1.6.0 + ms: 2.1.1 + on-finished: ~2.3.0 + range-parser: ~1.2.1 + statuses: ~1.5.0 + checksum: d214c2fa42e7fae3f8fc1aa3931eeb3e6b78c2cf141574e09dbe159915c1e3a337269fc6b7512e7dfddcd7d6ff5974cb62f7c3637ba86a55bde20a92c18bdca0 languageName: node linkType: hard @@ -32237,30 +37527,30 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:5.0.1, serialize-javascript@npm:^5.0.1": - version: 5.0.1 - resolution: "serialize-javascript@npm:5.0.1" +"serialize-javascript@npm:4.0.0, serialize-javascript@npm:^4.0.0": + version: 4.0.0 + resolution: "serialize-javascript@npm:4.0.0" dependencies: randombytes: ^2.1.0 - checksum: bb45a427690c3d2711e28499de0fbf25036af1e23c63c6a9237ed0aa572fd0941fcdefe50a2dccf26d9df8c8b86ae38659e19d8ba7afd3fbc1f1c7539a2a48d2 + checksum: 3273b3394b951671fcf388726e9577021870dfbf85e742a1183fb2e91273e6101bdccea81ff230724f6659a7ee4cef924b0ff9baca32b79d9384ec37caf07302 languageName: node linkType: hard -"serialize-javascript@npm:^4.0.0": - version: 4.0.0 - resolution: "serialize-javascript@npm:4.0.0" +"serialize-javascript@npm:^3.1.0": + version: 3.1.0 + resolution: "serialize-javascript@npm:3.1.0" dependencies: randombytes: ^2.1.0 - checksum: 3273b3394b951671fcf388726e9577021870dfbf85e742a1183fb2e91273e6101bdccea81ff230724f6659a7ee4cef924b0ff9baca32b79d9384ec37caf07302 + checksum: 0fc0131a78168d6237cfe1b21564f20a3b9b72e8ceebb21935baacf026631ed636912c20c7e9fa721a8f27a247e6f9849e705f27032d19863333c2cfab16d1c9 languageName: node linkType: hard -"serialize-javascript@npm:^6.0.1": - version: 6.0.1 - resolution: "serialize-javascript@npm:6.0.1" +"serialize-javascript@npm:^5.0.1": + version: 5.0.1 + resolution: "serialize-javascript@npm:5.0.1" dependencies: randombytes: ^2.1.0 - checksum: 3c4f4cb61d0893b988415bdb67243637333f3f574e9e9cc9a006a2ced0b390b0b3b44aef8d51c951272a9002ec50885eefdc0298891bc27eb2fe7510ea87dc4f + checksum: bb45a427690c3d2711e28499de0fbf25036af1e23c63c6a9237ed0aa572fd0941fcdefe50a2dccf26d9df8c8b86ae38659e19d8ba7afd3fbc1f1c7539a2a48d2 languageName: node linkType: hard @@ -32292,7 +37582,19 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.15.0, serve-static@npm:^1.13.1": +"serve-static@npm:1.14.1, serve-static@npm:^1.13.1": + version: 1.14.1 + resolution: "serve-static@npm:1.14.1" + dependencies: + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + parseurl: ~1.3.3 + send: 0.17.1 + checksum: c6b268e8486d39ecd54b86c7f2d0ee4a38cd7514ddd9c92c8d5793bb005afde5e908b12395898ae206782306ccc848193d93daa15b86afb3cbe5a8414806abe8 + languageName: node + linkType: hard + +"serve-static@npm:1.15.0": version: 1.15.0 resolution: "serve-static@npm:1.15.0" dependencies: @@ -32344,6 +37646,13 @@ __metadata: languageName: node linkType: hard +"setprototypeof@npm:1.1.1": + version: 1.1.1 + resolution: "setprototypeof@npm:1.1.1" + checksum: a8bee29c1c64c245d460ce53f7460af8cbd0aceac68d66e5215153992cc8b3a7a123416353e0c642060e85cc5fd4241c92d1190eec97eda0dcb97436e8fcca3b + languageName: node + linkType: hard + "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -32440,20 +37749,13 @@ __metadata: languageName: node linkType: hard -"shell-quote@npm:1.7.2": +"shell-quote@npm:1.7.2, shell-quote@npm:^1.6.1": version: 1.7.2 resolution: "shell-quote@npm:1.7.2" checksum: efad426fb25d8a54d06363f1f45774aa9e195f62f14fa696d542b44bfe418ab41206448b63af18d726c62e099e66d9a3f4f44858b9ea2ce4b794b41b802672d1 languageName: node linkType: hard -"shell-quote@npm:^1.6.1": - version: 1.8.1 - resolution: "shell-quote@npm:1.8.1" - checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b - languageName: node - linkType: hard - "shelljs@npm:^0.8.5": version: 0.8.5 resolution: "shelljs@npm:0.8.5" @@ -32474,6 +37776,16 @@ __metadata: languageName: node linkType: hard +"side-channel@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel@npm:1.0.2" + dependencies: + es-abstract: ^1.17.0-next.1 + object-inspect: ^1.7.0 + checksum: ddadc833752d47bad47a518b9cb7999e03e1139834ae2ce3d34dcde01b19c3b0a3895a1536f830ebf7ce5bf0033785739aefe3453f37cf70bb8f692ebe798269 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -32492,7 +37804,28 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.0": + version: 3.0.2 + resolution: "signal-exit@npm:3.0.2" + checksum: ccc08b9ad53644154d274ed147bb5e6cd5fd09c81bc6480a93bbe581f9030a599882907f78b305b81214ea725be7c09ed9182b58c675a148a1fe48cd50e43b2b + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2": + version: 3.0.3 + resolution: "signal-exit@npm:3.0.3" + checksum: f0169d3f1263d06df32ca072b0bf33b34c6f8f0341a7a1621558a2444dfbe8f5fec76b35537fcc6f0bc4944bdb5336fe0bdcf41a5422c4e45a1dba3f45475e6c + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.3": + version: 3.0.5 + resolution: "signal-exit@npm:3.0.5" + checksum: a1d3d0d63f581bd298b30ed8f6de21b73a0fe5a0c0f123b2e8ed7168bbff8f4c1a45e681de12a1966a89bb725d8eb727816be1c436e136951f31953e4a201587 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -32520,13 +37853,13 @@ __metadata: linkType: hard "simple-plist@npm:^1.0.0": - version: 1.4.0 - resolution: "simple-plist@npm:1.4.0" + version: 1.1.0 + resolution: "simple-plist@npm:1.1.0" dependencies: - bplist-creator: 0.1.1 - bplist-parser: 0.3.2 - plist: ^3.0.5 - checksum: fa8086f6b781c289f1abad21306481dda4af6373b32a5d998a70e53c2b7218a1d21ebb5ae3e736baae704c21d311d3d39d01d0e6a2387eda01b4020b9ebd909e + bplist-creator: 0.0.8 + bplist-parser: 0.2.0 + plist: ^3.0.1 + checksum: c9565236150d729de79f9a115174e58dfc41915e83e0b2ed598503cc679f0d3cf5367b5d4e1efa8f48ccbfc6d02f00e3da766174fa2c930d81e0eb96642548fb languageName: node linkType: hard @@ -32539,7 +37872,7 @@ __metadata: languageName: node linkType: hard -"simple-update-notifier@npm:^1.0.0, simple-update-notifier@npm:^1.0.7": +"simple-update-notifier@npm:^1.0.0": version: 1.1.0 resolution: "simple-update-notifier@npm:1.1.0" dependencies: @@ -32559,25 +37892,33 @@ __metadata: linkType: hard "sinon-test@npm:^3.0.0": - version: 3.1.5 - resolution: "sinon-test@npm:3.1.5" + version: 3.0.0 + resolution: "sinon-test@npm:3.0.0" peerDependencies: - sinon: ">= 2.x" - checksum: 84342c2b72361ee770e46859335047bf19c6fe280840f82ea785d3bd0ed6ee7fb47753f87cd8fc0828377256acdf7a9048cb9457eea6baa5521398d22a488fb6 + sinon: 2.x - 9.x + checksum: 29d2bf2d8c7c138ffa6b3a72b8f4370d074dcdf169a96fe19dfb010222ad9a965478e36328ee5e4a698c4906926c25576616d9d9970f571abb0be09063d960ae languageName: node linkType: hard "sinon@npm:^9.0.2": - version: 9.2.4 - resolution: "sinon@npm:9.2.4" + version: 9.0.2 + resolution: "sinon@npm:9.0.2" dependencies: - "@sinonjs/commons": ^1.8.1 + "@sinonjs/commons": ^1.7.2 "@sinonjs/fake-timers": ^6.0.1 - "@sinonjs/samsam": ^5.3.1 + "@sinonjs/formatio": ^5.0.1 + "@sinonjs/samsam": ^5.0.3 diff: ^4.0.2 - nise: ^4.0.4 + nise: ^4.0.1 supports-color: ^7.1.0 - checksum: 34b881886daa4b491bb9147ccad43d662f58b45a1b6f1e8b26a405ad77041108306fac3648646335f00f702897f0ba12282588ab64de470f48f1a7678e08dc65 + checksum: 171e90a9395dea98ae0ad0a7d0bc4e4a69464bc60f24685b0109a69880ee5c68c3bb561f4e85d161a603be9cfcf59cc5a4d77a31856af0a1ae8366a5086d5aa4 + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.3": + version: 1.0.4 + resolution: "sisteransi@npm:1.0.4" + checksum: 099b97ee2e202951d7eaa40574ac91e9b9f49c6bd92dc92e83dae5b499bcb6d5757ca16b4827bb47c86c00c45860971c54265ab73c27c545e12f46aeeb02409f languageName: node linkType: hard @@ -32638,6 +37979,13 @@ __metadata: languageName: node linkType: hard +"slide@npm:^1.1.5": + version: 1.1.6 + resolution: "slide@npm:1.1.6" + checksum: 5768635d227172e215b7a1a91d32f8781f5783b4961feaaf3d536bbf83cc51878928c137508cde7659fea6d7c04074927cab982731302771ee0051518ff24896 + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -32734,26 +38082,27 @@ __metadata: linkType: hard "sockjs-client@npm:^1.5.0": - version: 1.6.1 - resolution: "sockjs-client@npm:1.6.1" + version: 1.5.2 + resolution: "sockjs-client@npm:1.5.2" dependencies: - debug: ^3.2.7 - eventsource: ^2.0.2 - faye-websocket: ^0.11.4 + debug: ^3.2.6 + eventsource: ^1.0.7 + faye-websocket: ^0.11.3 inherits: ^2.0.4 - url-parse: ^1.5.10 - checksum: c7623bbc9891f427c1670145550a1c9c2d5379719e174a791606ba4f12c7d92e4cfb9acec6c17f91fda45d910b23c308a1f9fbcad4916ce5db4e982b24079fc7 + json3: ^3.3.3 + url-parse: ^1.5.3 + checksum: b3c3966ca8ebe72454e3bbb83b21b0f58dda1c725815f2897162104afc42b779de9a6d964fb2b164ea290cb4c0c94cb3542bd7f788f21fe5df018da963826f96 languageName: node linkType: hard "sockjs@npm:^0.3.21": - version: 0.3.24 - resolution: "sockjs@npm:0.3.24" + version: 0.3.21 + resolution: "sockjs@npm:0.3.21" dependencies: faye-websocket: ^0.11.3 - uuid: ^8.3.2 + uuid: ^3.4.0 websocket-driver: ^0.7.4 - checksum: 355309b48d2c4e9755349daa29cea1c0d9ee23e49b983841c6bf7a20276b00d3c02343f9f33f26d2ee8b261a5a02961b52a25c8da88b2538c5b68d3071b4934c + checksum: 9614e5dded95d38c08c42bba3505638801d0e88d9fec03dc1ae37296286ad5c31dff503b8c81a11e573bd0bea76b295db93d4f00cc336e749bc89f9f7cc7e6c9 languageName: node linkType: hard @@ -32769,21 +38118,30 @@ __metadata: linkType: hard "socks@npm:^2.6.2": - version: 2.7.1 - resolution: "socks@npm:2.7.1" + version: 2.7.0 + resolution: "socks@npm:2.7.0" dependencies: ip: ^2.0.0 smart-buffer: ^4.2.0 - checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + checksum: 0b5d94e2b3c11e7937b40fc5dac1e80d8b92a330e68c51f1d271ce6980c70adca42a3f8cd47c4a5769956bada074823b53374f2dc5f2ea5c2121b222dec6eadf languageName: node linkType: hard -"sort-any@npm:^2.0.0": - version: 2.0.0 - resolution: "sort-any@npm:2.0.0" +"sort-any@npm:^1.1.19": + version: 1.1.19 + resolution: "sort-any@npm:1.1.19" dependencies: - lodash: ^4.17.21 - checksum: d2dc6cc4f56298ce50b13ce6aafd8bf16010a8f8d0ae75345e8424118ac2cc017a8ffea0eedd136dd67751c09e7b0edb09c959d052ed7ed02afcfbab63c68277 + lodash: ^4.17.15 + checksum: fc3e2cfc0d8ad11541020cd6416677c008dd1591182ca9574b649b5afe683fb95c17cb04900792f6de67f038e3bde25e4d77b59eb34959d16901f1610f06c7ad + languageName: node + linkType: hard + +"sort-any@npm:^1.1.21": + version: 1.1.22 + resolution: "sort-any@npm:1.1.22" + dependencies: + lodash: ^4.17.15 + checksum: 1cdaa7dc3020b64a0ddb25bcd2aedf092fb5c2e88d83c507e46113987460dac4875735b94cf7181f8a7f7ee3707fee0dad6df21703a345cc8f88c24c87e353ae languageName: node linkType: hard @@ -32812,6 +38170,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^0.6.2": + version: 0.6.2 + resolution: "source-map-js@npm:0.6.2" + checksum: 9c8151a29e00fd8d3ba87709fdf9a9ce48313d653f4a29a39b4ae53d346ac79e005de624796ff42eff55cbaf26d2e87f4466001ca87831d400d818c5cf146a0e + languageName: node + linkType: hard + "source-map-js@npm:^1.0.2": version: 1.0.2 resolution: "source-map-js@npm:1.0.2" @@ -32832,6 +38197,16 @@ __metadata: languageName: node linkType: hard +"source-map-resolve@npm:^0.6.0": + version: 0.6.0 + resolution: "source-map-resolve@npm:0.6.0" + dependencies: + atob: ^2.1.2 + decode-uri-component: ^0.2.0 + checksum: fe503b9e5dac1c54be835282fcfec10879434e7b3ee08a9774f230299c724a8d403484d9531276d1670c87390e0e4d1d3f92b14cca6e4a2445ea3016b786ecd4 + languageName: node + linkType: hard + "source-map-support@npm:^0.4.15": version: 0.4.18 resolution: "source-map-support@npm:0.4.18" @@ -32841,20 +38216,30 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12, source-map-support@npm:~0.5.20": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" +"source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12": + version: 0.5.16 + resolution: "source-map-support@npm:0.5.16" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: bcf6651f4231d78838bd546f53f5643843a80f54a4c1105ba5246e7a46ccaee996f20a59abb202e6bbf55d3c25966ecc5d63727028c1478220dfc4a3cb4434a1 + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.20 + resolution: "source-map-support@npm:0.5.20" dependencies: buffer-from: ^1.0.0 source-map: ^0.6.0 - checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + checksum: 43946aff452011960d16154304b11011e0185549493e65dd90da045959409fb2d266ba1c854fff3d5949f8e59382e3fcc7f7c5fa66136007a6750ad06c6c0baa languageName: node linkType: hard "source-map-url@npm:^0.4.0": - version: 0.4.1 - resolution: "source-map-url@npm:0.4.1" - checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c + version: 0.4.0 + resolution: "source-map-url@npm:0.4.0" + checksum: 63ed54045fcd7b4ec7ca17513f48fdc23b573eef679326ecf1a31333e1aaecc0a9c085adaa7d118283b160e65b71cc72da9e1385f2de4ac5ed68294e3920d719 languageName: node linkType: hard @@ -32888,14 +38273,14 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.7.3": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 +"source-map@npm:^0.7.3, source-map@npm:~0.7.2": + version: 0.7.3 + resolution: "source-map@npm:0.7.3" + checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.8": +"sourcemap-codec@npm:^1.4.4": version: 1.4.8 resolution: "sourcemap-codec@npm:1.4.8" checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 @@ -32910,9 +38295,9 @@ __metadata: linkType: hard "spawn-command@npm:^0.0.2-1": - version: 0.0.2 - resolution: "spawn-command@npm:0.0.2" - checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b + version: 0.0.2-1 + resolution: "spawn-command@npm:0.0.2-1" + checksum: 2cac8519332193d1ed37d57298c4a1f73095e9edd20440fbab4aa47f531da83831734f2b51c44bb42b2747bf3485dec3fa2b0a1003f74c67561f2636622e328b languageName: node linkType: hard @@ -32931,36 +38316,36 @@ __metadata: linkType: hard "spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" + version: 3.1.0 + resolution: "spdx-correct@npm:3.1.0" dependencies: spdx-expression-parse: ^3.0.0 spdx-license-ids: ^3.0.0 - checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + checksum: fda9fc191e8e45209049054119e1343f4a449d54b677f38bd7b47956eac47d31d065d8fb7a58d2430d5974fcb6d88c9faada02e935847f9ed386073c18ba5c8a languageName: node linkType: hard "spdx-exceptions@npm:^2.1.0": - version: 2.3.0 - resolution: "spdx-exceptions@npm:2.3.0" - checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + version: 2.2.0 + resolution: "spdx-exceptions@npm:2.2.0" + checksum: 29189de3f60ac6d74d84fa85cfc49ca6a838f710242db99d9414461c2c1717ca3f4aae59b2ce57a99cf6427adc62bdcc4c198fb7ae17383497e5e85cc851f8d7 languageName: node linkType: hard "spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" + version: 3.0.0 + resolution: "spdx-expression-parse@npm:3.0.0" dependencies: spdx-exceptions: ^2.1.0 spdx-license-ids: ^3.0.0 - checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + checksum: 308c8c4925f3a584d5740e2d13615aa90e800fc16f9f794195723c9a3f56030096bf5cf34f68b2b05aedac292edd48fe7d51bac13e77e6f94abf921044e40248 languageName: node linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.13 - resolution: "spdx-license-ids@npm:3.0.13" - checksum: 3469d85c65f3245a279fa11afc250c3dca96e9e847f2f79d57f466940c5bb8495da08a542646086d499b7f24a74b8d0b42f3fc0f95d50ff99af1f599f6360ad7 + version: 3.0.5 + resolution: "spdx-license-ids@npm:3.0.5" + checksum: b1ceea3f87407ec375d1de90f6fc7610d6c845ff5f8db21d4d752b3d4e121df563c78113df7c564daff4e8778ad54b9a9024a7e9ea3779f13a43dd0e9128c08e languageName: node linkType: hard @@ -33007,10 +38392,12 @@ __metadata: languageName: node linkType: hard -"split2@npm:^4.1.0": - version: 4.2.0 - resolution: "split2@npm:4.2.0" - checksum: 05d54102546549fe4d2455900699056580cca006c0275c334611420f854da30ac999230857a85fdd9914dc2109ae50f80fda43d2a445f2aa86eccdc1dfce779d +"split@npm:^1.0.0": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: 2 + checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a languageName: node linkType: hard @@ -33029,13 +38416,13 @@ __metadata: linkType: hard "ssf@npm:~0.10.0": - version: 0.10.3 - resolution: "ssf@npm:0.10.3" + version: 0.10.2 + resolution: "ssf@npm:0.10.2" dependencies: frac: ~1.1.2 bin: - ssf: bin/ssf.njs - checksum: 03d639bd5ea95e8c148a8c62d5c564036dc58d62fb4337940ec6d935ccaf3506704d5f6caf92f51380eced94aa4e22c193b5a047c2fd55910616b18bdd9e4bf9 + ssf: ./bin/ssf.njs + checksum: 06272773018c75b42836ba668495d0ed1aee9e5daff3f34866909d6a9094115e9f20ec501aaad823874342ca4b303460d22f0a4bdcaf6605b2f9880688f588f8 languageName: node linkType: hard @@ -33048,26 +38435,29 @@ __metadata: languageName: node linkType: hard -"ssh2@npm:1.4.0": - version: 1.4.0 - resolution: "ssh2@npm:1.4.0" +"ssh2-streams@npm:~0.1.15": + version: 0.1.20 + resolution: "ssh2-streams@npm:0.1.20" dependencies: - asn1: ^0.2.4 - bcrypt-pbkdf: ^1.0.2 - cpu-features: 0.0.2 - nan: ^2.15.0 - dependenciesMeta: - cpu-features: - optional: true - nan: - optional: true - checksum: 354ed1a4ed5df39e4d898b9ad02f0207851c2256adfddd34ca53971a67b793e72b4581d8812b2155c9d70bceb69b4c582445e743a013867516595c31e922d674 + asn1: ~0.2.0 + semver: ^5.1.0 + streamsearch: ~0.1.2 + checksum: 8c48667451803390f36546a2188c3da36ffdb97367b68523dffd11ae7e6905b2cfee10573c6496cc7442bef1291207582eeca5e814e0eac4b68d44bb8089bbb9 languageName: node linkType: hard -"sshpk@npm:^1.14.1, sshpk@npm:^1.7.0": - version: 1.17.0 - resolution: "sshpk@npm:1.17.0" +"ssh2@npm:0.5.4": + version: 0.5.4 + resolution: "ssh2@npm:0.5.4" + dependencies: + ssh2-streams: ~0.1.15 + checksum: 649641070dfbce172f779544a7eab5c5698ce100d1743917208f056d39279f23767d91c0d5ec547f6d33b736ceee55941c6738a41e8edb86e20c779a7de7e578 + languageName: node + linkType: hard + +"sshpk@npm:^1.7.0": + version: 1.16.1 + resolution: "sshpk@npm:1.16.1" dependencies: asn1: ~0.2.3 assert-plus: ^1.0.0 @@ -33082,25 +38472,25 @@ __metadata: sshpk-conv: bin/sshpk-conv sshpk-sign: bin/sshpk-sign sshpk-verify: bin/sshpk-verify - checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 + checksum: 5e76afd1cedc780256f688b7c09327a8a650902d18e284dfeac97489a735299b03c3e72c6e8d22af03dbbe4d6f123fdfd5f3c4ed6bedbec72b9529a55051b857 languageName: node linkType: hard "ssri@npm:^6.0.1": - version: 6.0.2 - resolution: "ssri@npm:6.0.2" + version: 6.0.1 + resolution: "ssri@npm:6.0.1" dependencies: figgy-pudding: ^3.5.1 - checksum: 7c2e5d442f6252559c8987b7114bcf389fe5614bf65de09ba3e6f9a57b9b65b2967de348fcc3acccff9c069adb168140dd2c5fc2f6f4a779e604a27ef1f7d551 + checksum: 9520acadfe75867e4a9d815572320133465730b1cd5f76b80913096b69266eceb40673e62b4899c7a62607eb07f625b9748016d94bdfcf8d813b3c2f9629ec76 languageName: node linkType: hard -"ssri@npm:^8.0.1": - version: 8.0.1 - resolution: "ssri@npm:8.0.1" +"ssri@npm:^8.0.0": + version: 8.0.0 + resolution: "ssri@npm:8.0.0" dependencies: minipass: ^3.1.1 - checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 + checksum: 50085886f4f476f14ef40c063abca59b9855f773cb3962da4e873f2a010b4fc73b36b4b15f6439b816ee6bee36da30d1b6046cf5412a294fa316828de3ec8d9f languageName: node linkType: hard @@ -33128,36 +38518,43 @@ __metadata: linkType: hard "stack-utils@npm:^1.0.1": - version: 1.0.5 - resolution: "stack-utils@npm:1.0.5" + version: 1.0.2 + resolution: "stack-utils@npm:1.0.2" + checksum: a8353a26f26b036d5b33d7c67ec7b0075e854c738e7d40dc1e27ca026b037381fc0cec9be2f6438e8963dcd17097180921d3029676add21ae6687235348e8bb3 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.2": + version: 2.0.2 + resolution: "stack-utils@npm:2.0.2" dependencies: escape-string-regexp: ^2.0.0 - checksum: f82baf8d89536252a55c76866d5be3d04c96b09693a8d2ab3794b9fdec3674e05bd3f3d19345093e2cbba116a1f8f413858e0537bc3c81c605249261c3d26182 + checksum: e767be7ec6db03ae17b078dffe5ed64531a5bf13c28ec6d6f239b1baa440d4d80792a10808d6660fd914dd7564eec151322057560d6187cab6077d662029e64c languageName: node linkType: hard -"stack-utils@npm:^2.0.2, stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" +"stack-utils@npm:^2.0.3": + version: 2.0.5 + resolution: "stack-utils@npm:2.0.5" dependencies: escape-string-regexp: ^2.0.0 - checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + checksum: 76b69da0f5b48a34a0f93c98ee2a96544d2c4ca2557f7eef5ddb961d3bdc33870b46f498a84a7c4f4ffb781df639840e7ebf6639164ed4da5e1aeb659615b9c7 languageName: node linkType: hard -"stackframe@npm:^1.3.4": - version: 1.3.4 - resolution: "stackframe@npm:1.3.4" - checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d +"stackframe@npm:^1.1.1": + version: 1.1.1 + resolution: "stackframe@npm:1.1.1" + checksum: 6031b30cc070972be6b12f4f4109e62150912ddbc8d6d2bc1707387bfa74b69ec298aa1211b9bf8dc4cf4f5245a5cdb72dda4b7c0467ea0cce2d10e4f10ffe3a languageName: node linkType: hard "stacktrace-parser@npm:^0.1.3": - version: 0.1.10 - resolution: "stacktrace-parser@npm:0.1.10" + version: 0.1.8 + resolution: "stacktrace-parser@npm:0.1.8" dependencies: type-fest: ^0.7.1 - checksum: f4fbddfc09121d91e587b60de4beb4941108e967d71ad3a171812dc839b010ca374d064ad0a296295fed13acd103609d99a4224a25b4e67de13cae131f1901ee + checksum: a909f97620841e6c4af6a95c018ab5b3d8566894e4020afba3c828ba1a0b78fba0cd50a565f67444a9f70da68ee4b7039af373867bde8a7ec48b435283b6e600 languageName: node linkType: hard @@ -33185,7 +38582,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:>= 1.4.0 < 2, statuses@npm:^1.2.0, statuses@npm:~1.5.0": +"statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:^1.2.0, statuses@npm:~1.5.0": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c @@ -33201,7 +38598,14 @@ __metadata: languageName: node linkType: hard -"store2@npm:^2.12.0, store2@npm:^2.14.2": +"store2@npm:^2.12.0": + version: 2.12.0 + resolution: "store2@npm:2.12.0" + checksum: dd4184a677b11e5efc304b910d08f43e2b0ea018930a4e5ac407cb3472f08a6d42004c43b5f249c7299ba9cfd05cbe1eed998ea3f3388d2ca0f0650a6efb5dc4 + languageName: node + linkType: hard + +"store2@npm:^2.14.2": version: 2.14.2 resolution: "store2@npm:2.14.2" checksum: 6f270fc5bab99b63f45fcc7bd8b99c2714b4adf880f557ed7ffb5ed3987131251165bccde425a00928aaf044870aee79ddeef548576d093c68703ed2edec45d7 @@ -33230,7 +38634,7 @@ __metadata: languageName: node linkType: hard -"stream-buffers@npm:2.2.x": +"stream-buffers@npm:~2.2.0": version: 2.2.0 resolution: "stream-buffers@npm:2.2.0" checksum: 4587d9e8f050d689fb38b4295e73408401b16de8edecc12026c6f4ae92956705ecfd995ae3845d7fa3ebf19502d5754df9143d91447fd881d86e518f43882c1c @@ -33274,7 +38678,7 @@ __metadata: languageName: node linkType: hard -"streamsearch@npm:0.1.2": +"streamsearch@npm:0.1.2, streamsearch@npm:~0.1.2": version: 0.1.2 resolution: "streamsearch@npm:0.1.2" checksum: d2db57cbfbf7947ab9c75a7b4c80a8ef8d24850cf0a1a24258bb6956c97317ce1eab7dbcbf9c5aba3e6198611af1053b02411057bbedb99bf9c64b8275248997 @@ -33303,12 +38707,12 @@ __metadata: linkType: hard "string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" + version: 4.0.1 + resolution: "string-length@npm:4.0.1" dependencies: char-regex: ^1.0.2 strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + checksum: 7bd3191668ddafa6f574a8b17a1bd1b085737d64ceefa51f72cdd19c45a730422cd70d984eee7584d6e5b5c84b6318633c6d6a720a4bfd7c58769985fa77573e languageName: node linkType: hard @@ -33343,7 +38747,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": +"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -33375,74 +38779,108 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.0 || ^3.0.1, string.prototype.matchall@npm:^4.0.2, string.prototype.matchall@npm:^4.0.8": - version: 4.0.8 - resolution: "string.prototype.matchall@npm:4.0.8" +"string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0": + version: 4.2.0 + resolution: "string-width@npm:4.2.0" dependencies: - call-bind: ^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.4.3 - side-channel: ^1.0.4 - checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6 + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.0 + checksum: ee2c68df9a3ce4256565d2bdc8490f5706f195f88e799d3d425889264d3eff3d7984fe8b38dfc983dac948e03d8cdc737294b1c81f1528c37c9935d86b67593d + languageName: node + linkType: hard + +"string.prototype.matchall@npm:^4.0.0 || ^3.0.1, string.prototype.matchall@npm:^4.0.2": + version: 4.0.2 + resolution: "string.prototype.matchall@npm:4.0.2" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.0 + has-symbols: ^1.0.1 + internal-slot: ^1.0.2 + regexp.prototype.flags: ^1.3.0 + side-channel: ^1.0.2 + checksum: c08c0db9aadc47b82c43444c3d1a733ac2b12f00348177d1a17e573b8fbaeceab40bc1ae5ed0cbca03691de4b8471039b17b60b86eea69872a3eae469c9e6b5a languageName: node linkType: hard "string.prototype.padend@npm:^3.0.0": - version: 3.1.4 - resolution: "string.prototype.padend@npm:3.1.4" + version: 3.1.0 + resolution: "string.prototype.padend@npm:3.1.0" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 76e07238fe31dc12177428f0436b7ed6985f6a7ba97470fd53e4f0a6d9860bfee127d81957f3073cc879b434233df143825d140581e1340278053ad993c92f6c + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + checksum: bd6d401c7b0f1d04d92b71afc448dd29a6f05436bd9736e617bf1c802a17c713c6c5b3f87fecca606be9f778335783f265e2e787f5c279e894bf60a5b34b8683 languageName: node linkType: hard "string.prototype.padstart@npm:^3.0.0": - version: 3.1.4 - resolution: "string.prototype.padstart@npm:3.1.4" + version: 3.1.0 + resolution: "string.prototype.padstart@npm:3.1.0" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: a8517d83fd4fc5832b85cd9621188156094392494983fa41f6e6e727ab6af20f6bf8b2aac43b97ffad94e21fa52f1bb21342e2f87b79965707fe174cff5b8b2b + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + checksum: 5d6256d2ad3ee362e27dff22f02a0ca795854919c1498d14c07f4236385e9a2f518ed2dc9610a16b1ac18b324f799908deddcc4432fda22cf2517ad28a5b252b languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.7": - version: 1.2.7 - resolution: "string.prototype.trim@npm:1.2.7" +"string.prototype.trimend@npm:^1.0.1": + version: 1.0.1 + resolution: "string.prototype.trimend@npm:1.0.1" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + checksum: e4e2c21f0145a6fa8c111b1bee6075d509a40702611329bcebd7ffc5cc13562cfa99636faeacccbea306d01c023dc763ce0cf38cf5d7b654705b74847b0f0e57 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimend@npm:1.0.6" +"string.prototype.trimend@npm:^1.0.4": + version: 1.0.4 + resolution: "string.prototype.trimend@npm:1.0.4" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e + define-properties: ^1.1.3 + checksum: 17e5aa45c3983f582693161f972c1c1fa4bbbdf22e70e582b00c91b6575f01680dc34e83005b98e31abe4d5d29e0b21fcc24690239c106c7b2315aade6a898ac languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimstart@npm:1.0.6" +"string.prototype.trimleft@npm:^2.1.1": + version: 2.1.1 + resolution: "string.prototype.trimleft@npm:2.1.1" + dependencies: + define-properties: ^1.1.3 + function-bind: ^1.1.1 + checksum: 2581c73a3714b2ac5166d7ee6d3b36f3e92b6b481d635230ee262227cdc53baa010f30d39fdaf1d448bee97c443e29f00c7fdfdfb07be5b5f94209e5929de110 + languageName: node + linkType: hard + +"string.prototype.trimright@npm:^2.1.1": + version: 2.1.1 + resolution: "string.prototype.trimright@npm:2.1.1" + dependencies: + define-properties: ^1.1.3 + function-bind: ^1.1.1 + checksum: f02a1d15cd4d8c2161eb0f685b49f560fb579fcd747dc40ff0dcd82575a5df75316d0fad9b89da7408b067759c47bd3c2271ab544e9c98a0fc6a315ee8c747e2 + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.1": + version: 1.0.1 + resolution: "string.prototype.trimstart@npm:1.0.1" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + checksum: 0fe3cad8d597a418b058b6ec2d5c48b73172c71cb60089a0a38373eb3c2d501c4d9a00bbfad90e581c2ecf136f10f85a9dc664390e059b805dae9e4707465e0f + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.4": + version: 1.0.4 + resolution: "string.prototype.trimstart@npm:1.0.4" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 + define-properties: ^1.1.3 + checksum: 3fb06818d3cccac5fa3f5f9873d984794ca0e9f6616fae6fcc745885d9efed4e17fe15f832515d9af5e16c279857fdbffdfc489ca4ed577811b017721b30302f languageName: node linkType: hard @@ -33500,7 +38938,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:6.0.0": +"strip-ansi@npm:6.0.0, strip-ansi@npm:^6.0.0": version: 6.0.0 resolution: "strip-ansi@npm:6.0.0" dependencies: @@ -33518,7 +38956,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -33594,13 +39032,27 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:3.0.1": + version: 3.0.1 + resolution: "strip-json-comments@npm:3.0.1" + checksum: 2b860124c04b9b4ac09ec63c17fea142c789ea99b30569240f63c91917c3a8fdc250fc799280bc80dbbad1cccbcfc5f662636f960f80ce660e230f770c3f3a95 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 languageName: node linkType: hard +"strip-json-comments@npm:^3.1.0": + version: 3.1.0 + resolution: "strip-json-comments@npm:3.1.0" + checksum: 80689a5da7f0f92ecabf9bf96dda41fa6f7b7dd8c74381700157f78aa568b8e0a5c2023280760c1a344deb062a1976981959b1e9775872581108c3dc01d41b98 + languageName: node + linkType: hard + "strip-json-comments@npm:~2.0.1": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" @@ -33629,7 +39081,29 @@ __metadata: languageName: node linkType: hard -"styled-components@npm:^5.0.1, styled-components@npm:^5.1.0, styled-components@npm:^5.3.11": +"styled-components@npm:^5.0.1, styled-components@npm:^5.1.0": + version: 5.1.1 + resolution: "styled-components@npm:5.1.1" + dependencies: + "@babel/helper-module-imports": ^7.0.0 + "@babel/traverse": ^7.4.5 + "@emotion/is-prop-valid": ^0.8.8 + "@emotion/stylis": ^0.8.4 + "@emotion/unitless": ^0.7.4 + babel-plugin-styled-components: ">= 1" + css-to-react-native: ^3.0.0 + hoist-non-react-statics: ^3.0.0 + shallowequal: ^1.1.0 + supports-color: ^5.5.0 + peerDependencies: + react: ">= 16.8.0" + react-dom: ">= 16.8.0" + react-is: ">= 16.8.0" + checksum: ce8688176bf847628569f20dcfa31ecd01487e92db49c4ce2b44aee1c451d3877f2e0207986d6df711cba3bdc3f0058a8baa6ffbccf501ddfc776c074391c9f1 + languageName: node + linkType: hard + +"styled-components@npm:^5.3.11": version: 5.3.11 resolution: "styled-components@npm:5.3.11" dependencies: @@ -33697,12 +39171,12 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:8.1.1, supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" +"supports-color@npm:7.1.0, supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": + version: 7.1.0 + resolution: "supports-color@npm:7.1.0" dependencies: has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + checksum: 899480ac858a650abcca4a02ae655555270e6ace833b15a74e4a2d3456f54cd19b6b12ce14e9bac997c18dd69a0596ee65b95ba013f209dd0f99ebfe87783e41 languageName: node linkType: hard @@ -33731,7 +39205,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0, supports-color@npm:^7.2.0": +"supports-color@npm:^7.2.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -33740,13 +39214,22 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + "supports-hyperlinks@npm:^2.0.0": - version: 2.3.0 - resolution: "supports-hyperlinks@npm:2.3.0" + version: 2.1.0 + resolution: "supports-hyperlinks@npm:2.1.0" dependencies: has-flag: ^4.0.0 supports-color: ^7.0.0 - checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 + checksum: e4f430c870a258c9854b8bd7f166a9c1e76e3b851da84d4399d6a8f1d4a485e4ec36c16455dde80acf06c86e7c0a6df76ed22b6a4644a6ae3eced8616b3f21b5 languageName: node linkType: hard @@ -33804,7 +39287,14 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:^1.0.3, symbol-observable@npm:^1.0.4, symbol-observable@npm:^1.1.0": +"symbol-observable@npm:1.0.1": + version: 1.0.1 + resolution: "symbol-observable@npm:1.0.1" + checksum: 8e8a4591f4ba4ec82e7c1ba6b0e695331e43572337b87fda06d183f445539f05d1ab9fe177e162c13dd74dbe1374bb96451698157d97ad417c26f7e46e7053be + languageName: node + linkType: hard + +"symbol-observable@npm:^1.0.3, symbol-observable@npm:^1.0.4, symbol-observable@npm:^1.1.0, symbol-observable@npm:^1.2.0": version: 1.2.0 resolution: "symbol-observable@npm:1.2.0" checksum: 48ffbc22e3d75f9853b3ff2ae94a44d84f386415110aea5effc24d84c502e03a4a6b7a8f75ebaf7b585780bda34eb5d6da3121f826a6f93398429d30032971b6 @@ -33819,14 +39309,12 @@ __metadata: linkType: hard "symbol.prototype.description@npm:^1.0.0": - version: 1.0.5 - resolution: "symbol.prototype.description@npm:1.0.5" + version: 1.0.2 + resolution: "symbol.prototype.description@npm:1.0.2" dependencies: - call-bind: ^1.0.2 - get-symbol-description: ^1.0.0 - has-symbols: ^1.0.2 - object.getownpropertydescriptors: ^2.1.2 - checksum: 2bf20a5fbc74bdda7133e0915b978bf50bf5e2a48dd2174885ba6cd623d001ca18f7dbb1e01a3f3ea3a34f05030175ebee3dcb357f099a61af6e964f3281e9b9 + es-abstract: ^1.17.0-next.1 + has-symbols: ^1.0.1 + checksum: 7ad14bb407d072ab25fd50bf140113036735eddfb8f7b709a95f8bef5d4db5c44c71b4a2d38c5e45cad0c2f40d46d1c738d27fb57daf14bed40360576481ab9c languageName: node linkType: hard @@ -33848,16 +39336,29 @@ __metadata: languageName: node linkType: hard +"table@npm:^6.0.4": + version: 6.0.7 + resolution: "table@npm:6.0.7" + dependencies: + ajv: ^7.0.2 + lodash: ^4.17.20 + slice-ansi: ^4.0.0 + string-width: ^4.2.0 + checksum: 5a981ff05b5a404bcddf1aae40b26951aaf4e77ce22348d2e9c86a681c32ff6ae4ac4da7e6496780a3b2feb7fb8b302c1dfb6c88e025bff913a2d380b24f847d + languageName: node + linkType: hard + "table@npm:^6.0.9": - version: 6.8.1 - resolution: "table@npm:6.8.1" + version: 6.7.1 + resolution: "table@npm:6.7.1" dependencies: ajv: ^8.0.1 + lodash.clonedeep: ^4.5.0 lodash.truncate: ^4.4.2 slice-ansi: ^4.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - checksum: 08249c7046125d9d0a944a6e96cfe9ec66908d6b8a9db125531be6eb05fa0de047fd5542e9d43b4f987057f00a093b276b8d3e19af162a9c40db2681058fd306 + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + checksum: 053b61fa4e8f8396c65ff7a95da90e85620370932652d501ff7a0a3ed7317f1cc549702bd2abf2bd9ed01e20757b73a8b57374f8a8a2ac02fbe0550276263fb6 languageName: node linkType: hard @@ -33868,13 +39369,6 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.1.1, tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 - languageName: node - linkType: hard - "tar-fs@npm:2.1.1, tar-fs@npm:^2.1.1": version: 2.1.1 resolution: "tar-fs@npm:2.1.1" @@ -33900,7 +39394,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^4.4.2": +"tar@npm:^4.4.13": version: 4.4.19 resolution: "tar@npm:4.4.19" dependencies: @@ -33915,7 +39409,50 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.0.1, tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.13, tar@npm:^6.1.2": +"tar@npm:^4.4.2": + version: 4.4.13 + resolution: "tar@npm:4.4.13" + dependencies: + chownr: ^1.1.1 + fs-minipass: ^1.2.5 + minipass: ^2.8.6 + minizlib: ^1.2.1 + mkdirp: ^0.5.0 + safe-buffer: ^5.1.2 + yallist: ^3.0.3 + checksum: 71d9914468eb7cdc361a5d79267aa45d41081fbc8e1a244381052e6147ac1b285d3b8eb9a3521bf58a6a0d8498394623b3fd8db16c808364594874a15e6fa10a + languageName: node + linkType: hard + +"tar@npm:^6.0.1, tar@npm:^6.0.2": + version: 6.0.5 + resolution: "tar@npm:6.0.5" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^3.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: e1bdfbf5cc00a5912a855ddf5e0372547ddb56f263839a99c49cad74cfbc20421b1dce1a3231c77348f1a14773924d118512f8c39ff234194896a7590eec7354 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.1.11 + resolution: "tar@npm:6.1.11" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^3.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: a04c07bb9e2d8f46776517d4618f2406fb977a74d914ad98b264fc3db0fe8224da5bec11e5f8902c5b9bcb8ace22d95fbe3c7b36b8593b7dfc8391a25898f32f + languageName: node + linkType: hard + +"tar@npm:^6.1.13": version: 6.1.15 resolution: "tar@npm:6.1.15" dependencies: @@ -33943,9 +39480,9 @@ __metadata: languageName: node linkType: hard -"telejson@npm:^6.0.8": - version: 6.0.8 - resolution: "telejson@npm:6.0.8" +"telejson@npm:^5.3.2": + version: 5.3.3 + resolution: "telejson@npm:5.3.3" dependencies: "@types/is-function": ^1.0.0 global: ^4.4.0 @@ -33955,7 +39492,7 @@ __metadata: isobject: ^4.0.0 lodash: ^4.17.21 memoizerific: ^1.11.3 - checksum: 7411a5e78a35720bd0654a544409d3ce467b1dbb2073c73f36476b4c0905d97dbf539d6cbae737bb1fd8c872c2058f2a5450163a15117ed3fa031b2a2b8b33f6 + checksum: 16a3152bd49e1eb634856de8bf45d82e9b0ccea5ac4ae0092bced4abbd5536a60fb0a2a20fdd930b56242125a51baa86a3d15b7beb8d3640353548c7b5c2516a languageName: node linkType: hard @@ -34025,6 +39562,13 @@ __metadata: languageName: node linkType: hard +"term-size@npm:^2.1.0": + version: 2.2.0 + resolution: "term-size@npm:2.2.0" + checksum: 47b2abd0147c675adb9a5e41dea403606e4734b26048ac0d32ba4a27a2d84b3cc12862361efbba0e08b20c5990823dc3f4c893b11933da3ea494f5472c10fd5a + languageName: node + linkType: hard + "terminal-link@npm:^2.0.0": version: 2.1.1 resolution: "terminal-link@npm:2.1.1" @@ -34055,70 +39599,87 @@ __metadata: linkType: hard "terser-webpack-plugin@npm:^1.4.3": - version: 1.4.5 - resolution: "terser-webpack-plugin@npm:1.4.5" + version: 1.4.4 + resolution: "terser-webpack-plugin@npm:1.4.4" dependencies: cacache: ^12.0.2 find-cache-dir: ^2.1.0 is-wsl: ^1.1.0 schema-utils: ^1.0.0 - serialize-javascript: ^4.0.0 + serialize-javascript: ^3.1.0 source-map: ^0.6.1 terser: ^4.1.2 webpack-sources: ^1.4.0 worker-farm: ^1.7.0 peerDependencies: webpack: ^4.0.0 - checksum: 02aada80927d3c8105d69cb00384d307b73aed67d180db5d20023a8d649149f3803ad50f9cd2ef9eb2622005de87e677198ecc5088f51422bfac5d4d57472d0e + checksum: f17d97eb6db81ae34ce6a66ba55cfd1abdeb7bbb90c7eab54e78183bcf7385ca394e6304b1cd1bb198202acb73e058fc1e40759ebd982b25e44d169543e71d3a languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.3.7": - version: 5.3.9 - resolution: "terser-webpack-plugin@npm:5.3.9" +"terser@npm:^4.1.2": + version: 4.4.3 + resolution: "terser@npm:4.4.3" dependencies: - "@jridgewell/trace-mapping": ^0.3.17 - jest-worker: ^27.4.5 - schema-utils: ^3.1.1 - serialize-javascript: ^6.0.1 - terser: ^5.16.8 - peerDependencies: - webpack: ^5.1.0 - peerDependenciesMeta: - "@swc/core": - optional: true - esbuild: - optional: true - uglify-js: - optional: true - checksum: 41705713d6f9cb83287936b21e27c658891c78c4392159f5148b5623f0e8c48559869779619b058382a4c9758e7820ea034695e57dc7c474b4962b79f553bc5f + commander: ^2.20.0 + source-map: ~0.6.1 + source-map-support: ~0.5.12 + bin: + terser: bin/terser + checksum: 9151f9ad1ba73035a563965e218bf1df391f70edb6ddffc334f55c587e7eee7c99601e1916b2aa626c215ac2013e78a75fcd2c76344028718d9bdee5dce385b0 languageName: node linkType: hard -"terser@npm:^4.1.2, terser@npm:^4.6.2, terser@npm:^4.6.3": - version: 4.8.1 - resolution: "terser@npm:4.8.1" +"terser@npm:^4.6.2": + version: 4.8.0 + resolution: "terser@npm:4.8.0" dependencies: commander: ^2.20.0 source-map: ~0.6.1 source-map-support: ~0.5.12 bin: terser: bin/terser - checksum: b342819bf7e82283059aaa3f22bb74deb1862d07573ba5a8947882190ad525fd9b44a15074986be083fd379c58b9a879457a330b66dcdb77b485c44267f9a55a + checksum: f980789097d4f856c1ef4b9a7ada37beb0bb022fb8aa3057968862b5864ad7c244253b3e269c9eb0ab7d0caf97b9521273f2d1cf1e0e942ff0016e0583859c71 languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.16.8, terser@npm:^5.3.4": - version: 5.17.6 - resolution: "terser@npm:5.17.6" +"terser@npm:^4.6.3": + version: 4.7.0 + resolution: "terser@npm:4.7.0" dependencies: - "@jridgewell/source-map": ^0.3.2 - acorn: ^8.5.0 + commander: ^2.20.0 + source-map: ~0.6.1 + source-map-support: ~0.5.12 + bin: + terser: bin/terser + checksum: 18ccfa0517aeed66a6f7a3cf2961d65a9edf30cc9b4fe338b247a05f7d687c78c1cd07f1b3cc2b4a14f49bd1f61ae1516792ed24538b61b506a63687bb71bfed + languageName: node + linkType: hard + +"terser@npm:^5.10.0": + version: 5.17.7 + resolution: "terser@npm:5.17.7" + dependencies: + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 commander: ^2.20.0 source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 9c0ab0261a99a61c5f53d05d4ecc7f68c552bae6af481464fdd596bc9d7e89ce8e21b1833cb3ce06ad5f658e2b226081d543e4fe6e324b2cdf03ee8b7eeec01a + checksum: b7b17b281febadf3bea9b9412d699fa24edf9b3e20fc7ad4e1a9cec276bdb65ddaa291c9663d5ab66b58834e433377477f73328574ccab2da1637a15b095811d + languageName: node + linkType: hard + +"terser@npm:^5.3.4": + version: 5.8.0 + resolution: "terser@npm:5.8.0" + dependencies: + commander: ^2.20.0 + source-map: ~0.7.2 + source-map-support: ~0.5.20 + bin: + terser: bin/terser + checksum: 770b7d3fad7eece4a423464a9774e4456b7aca70b869d0c783bde42d7453fac2670ef7532dbce0a5a6f79038c367f2cb6353995190b730e2c52cb4914f3d671e languageName: node linkType: hard @@ -34186,9 +39747,16 @@ __metadata: linkType: hard "throat@npm:^6.0.1": - version: 6.0.2 - resolution: "throat@npm:6.0.2" - checksum: 463093768d4884772020bb18b0f33d3fec8a2b4173f7da3958dfbe88ff0f1e686ffadf0f87333bf6f6db7306b1450efc7855df69c78bf0bfa61f6d84a3361fe8 + version: 6.0.1 + resolution: "throat@npm:6.0.1" + checksum: 782d4171ee4e3cf947483ed2ff1af3e17cc4354c693b9d339284f61f99fbc401d171e0b0d2db3295bb7d447630333e9319c174ebd7ef315c6fb791db9675369c + languageName: node + linkType: hard + +"throttle-debounce@npm:^3.0.1": + version: 3.0.1 + resolution: "throttle-debounce@npm:3.0.1" + checksum: e34ef638e8df3a9154249101b68afcbf2652a139c803415ef8a2f6a8bc577bcd4d79e4bb914ad3cd206523ac78b9fb7e80885bfa049f64fbb1927f99d98b5736 languageName: node linkType: hard @@ -34209,7 +39777,7 @@ __metadata: languageName: node linkType: hard -"through@npm:^2.3.6, through@npm:^2.3.8": +"through@npm:2, through@npm:^2.3.6, through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd @@ -34254,11 +39822,11 @@ __metadata: linkType: hard "timers-browserify@npm:^2.0.4": - version: 2.0.12 - resolution: "timers-browserify@npm:2.0.12" + version: 2.0.11 + resolution: "timers-browserify@npm:2.0.11" dependencies: setimmediate: ^1.0.4 - checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 + checksum: 2a2ecbfd0c2380078d4a1e63e4eeb46884156d8fca0efe34d6fd8c615d68ef1a7785888629157ab0e5720e3c0d7f57bf1766b2ad037feb9aea07cbff1623092c languageName: node linkType: hard @@ -34276,14 +39844,21 @@ __metadata: languageName: node linkType: hard -"tiny-invariant@npm:^1.0.2, tiny-invariant@npm:^1.0.6, tiny-invariant@npm:^1.2.0": - version: 1.3.1 - resolution: "tiny-invariant@npm:1.3.1" - checksum: 872dbd1ff20a21303a2fd20ce3a15602cfa7fcf9b228bd694a52e2938224313b5385a1078cb667ed7375d1612194feaca81c4ecbe93121ca1baebe344de4f84c +"tiny-invariant@npm:^1.0.2, tiny-invariant@npm:^1.0.6": + version: 1.2.0 + resolution: "tiny-invariant@npm:1.2.0" + checksum: e09a718a7c4a499ba592cdac61f015d87427a0867ca07f50c11fd9b623f90cdba18937b515d4a5e4f43dac92370498d7bdaee0d0e7a377a61095e02c4a92eade + languageName: node + linkType: hard + +"tiny-invariant@npm:^1.1.0": + version: 1.1.0 + resolution: "tiny-invariant@npm:1.1.0" + checksum: 27d29bbb9e1d1d86e25766711c28ad91af6d67c87d561167077ac7fbce5212b97bbfe875e70bc369808e075748c825864c9b61f0e9f8652275ec86bcf4dcc924 languageName: node linkType: hard -"tiny-warning@npm:^1.0.0, tiny-warning@npm:^1.0.2": +"tiny-warning@npm:^1.0.0, tiny-warning@npm:^1.0.2, tiny-warning@npm:^1.0.3": version: 1.0.3 resolution: "tiny-warning@npm:1.0.3" checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 @@ -34315,6 +39890,13 @@ __metadata: languageName: node linkType: hard +"tmpl@npm:1.0.x": + version: 1.0.4 + resolution: "tmpl@npm:1.0.4" + checksum: 72c93335044b5b8771207d2e9cf71e8c26b110d0f0f924f6d6c06b509d89552c7c0e4086a574ce4f05110ac40c1faf6277ecba7221afeb57ebbab70d8de39cc4 + languageName: node + linkType: hard + "to-arraybuffer@npm:^1.0.0": version: 1.0.1 resolution: "to-arraybuffer@npm:1.0.1" @@ -34345,6 +39927,13 @@ __metadata: languageName: node linkType: hard +"to-readable-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "to-readable-stream@npm:1.0.0" + checksum: 2bd7778490b6214a2c40276065dd88949f4cf7037ce3964c76838b8cb212893aeb9cceaaf4352a4c486e3336214c350270f3263e1ce7a0c38863a715a4d9aeb5 + languageName: node + linkType: hard + "to-regex-range@npm:^2.1.0": version: 2.1.1 resolution: "to-regex-range@npm:2.1.1" @@ -34376,6 +39965,20 @@ __metadata: languageName: node linkType: hard +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: a90dc80ed1e7b18db8f4e16e86a5574f87632dc729cfc07d9ea3ced50021ad42bb4e08f22c0913e0b98e3837b0b717e0a51613c65f30418e21eb99da6556a74c + languageName: node + linkType: hard + +"toidentifier@npm:1.0.0": + version: 1.0.0 + resolution: "toidentifier@npm:1.0.0" + checksum: 199e6bfca1531d49b3506cff02353d53ec987c9ee10ee272ca6484ed97f1fc10fb77c6c009079ca16d5c5be4a10378178c3cacdb41ce9ec954c3297c74c6053e + languageName: node + linkType: hard + "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -34420,14 +40023,23 @@ __metadata: linkType: hard "tough-cookie@npm:^4.0.0": - version: 4.1.2 - resolution: "tough-cookie@npm:4.1.2" + version: 4.0.0 + resolution: "tough-cookie@npm:4.0.0" dependencies: psl: ^1.1.33 punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a + universalify: ^0.1.2 + checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 + languageName: node + linkType: hard + +"tough-cookie@npm:~2.4.3": + version: 2.4.3 + resolution: "tough-cookie@npm:2.4.3" + dependencies: + psl: ^1.1.24 + punycode: ^1.4.1 + checksum: af5c7b03f22fc60b7a03339414d7e5b4d68aea84bcc591b4bfab73d85f71e218ff9ebdf94042205051faf980bdb2eeec5c8cf6ea5368fd9f878d2c3f718640b7 languageName: node linkType: hard @@ -34441,6 +40053,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^2.0.2": + version: 2.0.2 + resolution: "tr46@npm:2.0.2" + dependencies: + punycode: ^2.1.1 + checksum: 2b2b3dfa6bc65d027b2fac729fba0fb5b9d98af7b69ad6876c0f088ebf127f2d53e5a4d4464e5de40380cf721f392262c9183d2a05cea4967a890e8801c842f6 + languageName: node + linkType: hard + "tr46@npm:^2.1.0": version: 2.1.0 resolution: "tr46@npm:2.1.0" @@ -34474,9 +40095,9 @@ __metadata: linkType: hard "trim-newlines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-newlines@npm:3.0.1" - checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 + version: 3.0.0 + resolution: "trim-newlines@npm:3.0.0" + checksum: ad99b771e7e6fc785cfdd60f3eeb794a6f2f230dd291987107974abd0c95a051d7cf3b6d45b542a59bfe67eb680c5b259ec19741e6fdfdbee0ab783ab8861585 languageName: node linkType: hard @@ -34488,9 +40109,9 @@ __metadata: linkType: hard "trim-trailing-lines@npm:^1.0.0": - version: 1.1.4 - resolution: "trim-trailing-lines@npm:1.1.4" - checksum: 5d39d21c0d4b258667012fcd784f73129e148ea1c213b1851d8904f80499fc91df6710c94c7dd49a486a32da2b9cb86020dda79f285a9a2586cfa622f80490c2 + version: 1.1.3 + resolution: "trim-trailing-lines@npm:1.1.3" + checksum: 7eb4ac54079c330211453114be3d62f6a2f480e422b428982ccb7a48d278c5f826366f9f453e001eef42d50c06c0aafa2ec88280c971ecd6bc00c330a8214045 languageName: node linkType: hard @@ -34501,7 +40122,7 @@ __metadata: languageName: node linkType: hard -"triple-beam@npm:^1.3.0": +"triple-beam@npm:^1.2.0, triple-beam@npm:^1.3.0": version: 1.3.0 resolution: "triple-beam@npm:1.3.0" checksum: 7d7b77d8625fb252c126c24984a68de462b538a8fcd1de2abd0a26421629cf3527d48e23b3c2264f08f4a6c3bc40a478a722176f4d7b6a1acc154cb70c359f2b @@ -34538,9 +40159,16 @@ __metadata: languageName: node linkType: hard +"ts-essentials@npm:^2.0.3": + version: 2.0.12 + resolution: "ts-essentials@npm:2.0.12" + checksum: e46916ef44b4417f0c726faac333c8d2f363a47a5c1994eb9d42045a85d247284a3220cb7f71fb30a9bd2eef43ed7eb3bc1f76f4fedf946200a98cfde7eb3a3f + languageName: node + linkType: hard + "ts-jest@npm:^27.1.3": - version: 27.1.5 - resolution: "ts-jest@npm:27.1.5" + version: 27.1.3 + resolution: "ts-jest@npm:27.1.3" dependencies: bs-logger: 0.x fast-json-stable-stringify: 2.x @@ -34554,6 +40182,7 @@ __metadata: "@babel/core": ">=7.0.0-beta.0 <8" "@types/jest": ^27.0.0 babel-jest: ">=27.0.0 <28" + esbuild: ~0.14.0 jest: ^27.0.0 typescript: ">=3.8 <5.0" peerDependenciesMeta: @@ -34567,11 +40196,49 @@ __metadata: optional: true bin: ts-jest: cli.js - checksum: 3ef51c538b82f49b3f529331c1a017871a2f90e7a9a6e69333304755036d121818c6b120e2ce32dd161ff8bb2487efec0c790753ecd39b46a9ed1ce0d241464c + checksum: eb54e5b8fc5f06e4cc20ecec7891201ddc78a3537d5eb3775e29ffbc7e83fd2a68f91db801b6a8c820c872060b24dc41fb6decac800b76256d3cdda6520b5c4f + languageName: node + linkType: hard + +"ts-node@npm:^10.7.0": + version: 10.7.0 + resolution: "ts-node@npm:10.7.0" + dependencies: + "@cspotcode/source-map-support": 0.7.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.0 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 2a379e43f7478d0b79e1e63af91fe222d83857727957df4bd3bdf3c0a884de5097b12feb9bbf530074526b8874c0338b0e6328cf334f3a5e2c49c71e837273f7 languageName: node linkType: hard -"ts-node@npm:^10.7.0, ts-node@npm:^10.9.1": +"ts-node@npm:^10.9.1": version: 10.9.1 resolution: "ts-node@npm:10.9.1" dependencies: @@ -34619,33 +40286,91 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.14.1": - version: 3.14.2 - resolution: "tsconfig-paths@npm:3.14.2" +"tsconfig-paths@npm:^3.11.0": + version: 3.11.0 + resolution: "tsconfig-paths@npm:3.11.0" dependencies: "@types/json5": ^0.0.29 - json5: ^1.0.2 - minimist: ^1.2.6 + json5: ^1.0.1 + minimist: ^1.2.0 strip-bom: ^3.0.0 - checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 + checksum: e14aaa6883f316d611db41cbb0fc8779b59c66b31d1e045565ad4540c77ccd3d2bb66f7c261b74ff535d3cc6b4a1ce21dc84774bf2a2a603ed6b0fb96f7e0cc7 languageName: node linkType: hard -"tslib@npm:^1.8.1, tslib@npm:^1.9.0": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd +"tsconfig-paths@npm:^3.9.0": + version: 3.9.0 + resolution: "tsconfig-paths@npm:3.9.0" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.1 + minimist: ^1.2.0 + strip-bom: ^3.0.0 + checksum: 243b3b098c76a4ca90ea0431683f3755a4ff175c6123bcba5f7b4bd80fe2ef8fa9bdc8f4d525148a1e71ade7f3e037e7c0313ae177fd12398ab68f05c2c7f25d + languageName: node + linkType: hard + +"tslib@npm:^1.10.0, tslib@npm:^1.9.0": + version: 1.13.0 + resolution: "tslib@npm:1.13.0" + checksum: 50e9327361f94f328c0715582a7f725f69838ab3c2559d143643c5367262fe14552768ba8cfc65bc7dc924a619aea599b3a28b6653458cdca77bbebaf9bc8df4 + languageName: node + linkType: hard + +"tslib@npm:^1.8.1": + version: 1.10.0 + resolution: "tslib@npm:1.10.0" + checksum: 1d0450dc6f64b918b14acaf3b956ebe1c72d7401c632adce932a60e3cd8d2a70f6040ceef6a7c3561146c3f29bcf584c41c2e09a5d20a27d6c3057f0d5f2a836 + languageName: node + linkType: hard + +"tslib@npm:^2.0.0": + version: 2.0.1 + resolution: "tslib@npm:2.0.1" + checksum: 507f32fc24a614c5097d414b622373b6cbb99e305413517e7fd49bef1e63570c0dd15b417ae68152088c3496218e82a5d8c7cd6b48c7a32dcee1a3f7191fff74 + languageName: node + linkType: hard + +"tslib@npm:^2.0.1": + version: 2.0.3 + resolution: "tslib@npm:2.0.3" + checksum: 00fcdd1f9995c9f8eb6a4a1ad03f55bc95946321b7f55434182dddac259d4e095fedf78a84f73b6e32dd3f881d9281f09cb583123d3159ed4bdac9ad7393ef8b + languageName: node + linkType: hard + +"tslib@npm:^2.0.3": + version: 2.4.1 + resolution: "tslib@npm:2.4.1" + checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca + languageName: node + linkType: hard + +"tslib@npm:^2.3.0": + version: 2.3.1 + resolution: "tslib@npm:2.3.1" + checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.4.0": +"tslib@npm:^2.4.0": version: 2.5.2 resolution: "tslib@npm:2.5.2" checksum: 4d3c1e238b94127ed0e88aa0380db3c2ddae581dc0f4bae5a982345e9f50ee5eda90835b8bfba99b02df10a5734470be197158c36f9129ac49fdc14a6a9da222 languageName: node linkType: hard -"tsutils@npm:^3.17.1, tsutils@npm:^3.21.0": +"tsutils@npm:^3.17.1": + version: 3.17.1 + resolution: "tsutils@npm:3.17.1" + dependencies: + tslib: ^1.8.1 + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 0dd8c29b2f554d71179dfdd7c3a55b973c0d21ba2b28868ca2acc0bda7469e2ae94f7f454c0f342934b3a653ed4424bfa9c12fa84dac0e126408d6fcd9271510 + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" dependencies: @@ -34673,13 +40398,13 @@ __metadata: linkType: hard "tunnel-ssh@npm:^4.0.0": - version: 4.1.6 - resolution: "tunnel-ssh@npm:4.1.6" + version: 4.1.4 + resolution: "tunnel-ssh@npm:4.1.4" dependencies: debug: 2.6.9 lodash.defaults: ^4.1.0 - ssh2: 1.4.0 - checksum: 4d39e3a7ffee1ebfa24607b9f4d920f4b2aa3fa841e60301ef7a115b5227243a97cbbc9d6032a2bab9a35888b6b736013e51fa55882fa7538ecf86e17bfe5289 + ssh2: 0.5.4 + checksum: 9f8bafe3f7fecb44170b7eb03ac85058d821c240143f3684bbbd63b8294ae5677f679c17e0a3a64b9bfd1a36a3ac579180c1cc299cc556e4a6d90001732ccba8 languageName: node linkType: hard @@ -34745,6 +40470,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.11.0": + version: 0.11.0 + resolution: "type-fest@npm:0.11.0" + checksum: 8e7589e1eb5ced6c8e1d3051553b59b9f525c41e58baa898229915781c7bf55db8cb2f74e56d8031f6af5af2eecc7cb8da9ca3af7e5b80b49d8ca5a81891f3f9 + languageName: node + linkType: hard + "type-fest@npm:^0.13.1": version: 0.13.1 resolution: "type-fest@npm:0.13.1" @@ -34802,9 +40534,9 @@ __metadata: linkType: hard "type-fest@npm:^1.2.1": - version: 1.4.0 - resolution: "type-fest@npm:1.4.0" - checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 + version: 1.2.2 + resolution: "type-fest@npm:1.2.2" + checksum: 51ea6792ffae81c037ace48bbf085672273efc5af0226092d8debabb9b724ee6ade0f6456ca173c98975ac1ff267a1778bbe051d08479d18e47c2a60fd4a399e languageName: node linkType: hard @@ -34815,7 +40547,7 @@ __metadata: languageName: node linkType: hard -"type-is@npm:^1.6.4, type-is@npm:~1.6.18": +"type-is@npm:^1.6.4, type-is@npm:~1.6.17, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: @@ -34832,28 +40564,17 @@ __metadata: languageName: node linkType: hard -"type@npm:^2.7.2": - version: 2.7.2 - resolution: "type@npm:2.7.2" - checksum: 0f42379a8adb67fe529add238a3e3d16699d95b42d01adfe7b9a7c5da297f5c1ba93de39265ba30ffeb37dfd0afb3fb66ae09f58d6515da442219c086219f6f4 - languageName: node - linkType: hard - -"typed-array-length@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-length@npm:1.0.4" - dependencies: - call-bind: ^1.0.2 - for-each: ^0.3.3 - is-typed-array: ^1.1.9 - checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 +"type@npm:^2.0.0": + version: 2.0.0 + resolution: "type@npm:2.0.0" + checksum: 43f56b90e0da625c2f08f897c580d65162c16287960a0ef62c1a935743c09ddbc0ca85a4067bc79be0c215a1ee517c902af260fc7777d62a38c659d0eb43529f languageName: node linkType: hard "typed-function@npm:^2.0.0": - version: 2.1.0 - resolution: "typed-function@npm:2.1.0" - checksum: 168c2c8f765fbecc842521a5fb62a5800958f9fcb0ce78d69c38a5e96c81fe133f853256ec8ee245ee2fc42b4c9342b5ba754c732189550c64c12e758892dc43 + version: 2.0.0 + resolution: "typed-function@npm:2.0.0" + checksum: 8abb39dff088706f454cd3fa3e884ed98b61f28fcae6ea8b0f3b83225ca130d0ee5ab20acc91f820b41773532f0fd4308e25b5b346c9ab6a626bd8b4e83c59dc languageName: node linkType: hard @@ -34924,22 +40645,22 @@ __metadata: linkType: hard "typescript@npm:^4.2.0": - version: 4.9.5 - resolution: "typescript@npm:4.9.5" + version: 4.2.3 + resolution: "typescript@npm:4.2.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db + checksum: b4a2020c021211184ac15caf59936b2089c13e79685f340a31aaa839c9de2f73b44a5e3757292de6cdad2ed967aef80d4592161b814cc29c0570f261850c4bca languageName: node linkType: hard "typescript@npm:^5.0.2, typescript@npm:^5.0.4": - version: 5.0.4 - resolution: "typescript@npm:5.0.4" + version: 5.1.3 + resolution: "typescript@npm:5.1.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + checksum: d9d51862d98efa46534f2800a1071a613751b1585dc78884807d0c179bcd93d6e9d4012a508e276742f5f33c480adefc52ffcafaf9e0e00ab641a14cde9a31c7 languageName: node linkType: hard @@ -34954,22 +40675,22 @@ __metadata: linkType: hard "typescript@patch:typescript@^4.2.0#~builtin": - version: 4.9.5 - resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=7ad353" + version: 4.2.3 + resolution: "typescript@patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=7ad353" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 + checksum: f00e6e6e72c950865979d5beb66916c75d92eda09514eb2953828b95505cfd2ef3ae9ac776fdac9f841a9ce67744999b70d23779726e0072656a1841c8080860 languageName: node linkType: hard "typescript@patch:typescript@^5.0.2#~builtin, typescript@patch:typescript@^5.0.4#~builtin": - version: 5.0.4 - resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=7ad353" + version: 5.1.3 + resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin::version=5.1.3&hash=7ad353" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 6a1fe9a77bb9c5176ead919cc4a1499ee63e46b4e05bf667079f11bf3a8f7887f135aa72460a4c3b016e6e6bb65a822cb8689a6d86cbfe92d22cc9f501f09213 + checksum: 32a25b2e128a4616f999d4ee502aabb1525d5647bc8955e6edf05d7fbc53af8aa98252e2f6ba80bcedfc0260c982b885f3c09cfac8bb65d2924f3133ad1e1e62 languageName: node linkType: hard @@ -34990,10 +40711,10 @@ __metadata: languageName: node linkType: hard -"ua-parser-js@npm:^0.7.18, ua-parser-js@npm:^0.7.30": - version: 0.7.35 - resolution: "ua-parser-js@npm:0.7.35" - checksum: 0a332e8d72d277e62f29ecb3a33843b274de93eb9378350b746ea0f89ef05ee09c94f2c1fdab8001373ad5e95a48beb0a94f39dc1670c908db9fc9b8f0876204 +"ua-parser-js@npm:^0.7.18": + version: 0.7.21 + resolution: "ua-parser-js@npm:0.7.21" + checksum: 5c1f523e784442ee03d859981fccd642c3825c50365148c3803e151ba19419cef0ec1c47af9ebde1cb7be211ed194d255f7e5ba659a9f1f77d3c674da7b454da languageName: node linkType: hard @@ -35005,14 +40726,14 @@ __metadata: linkType: hard "uglify-es@npm:^3.1.9": - version: 3.3.10 - resolution: "uglify-es@npm:3.3.10" + version: 3.3.9 + resolution: "uglify-es@npm:3.3.9" dependencies: - commander: ~2.14.1 + commander: ~2.13.0 source-map: ~0.6.1 bin: uglifyjs: bin/uglifyjs - checksum: 22b028b6454c4d684c76617e9ac5b8da0e56611b32cd5d89e797225d6f1022f697a5642d9084319436df3aed462225749f8287d37bf67dccda1ac9d0365dd950 + checksum: f2de133ba71f05aca442db2c31a2f2614201e5b540948f022f5b53cd39b6b1b43a7db7cc2aa9917383bbb26e8043947fce35867cd1edcf2444854cb7fae0fa99 languageName: node linkType: hard @@ -35032,15 +40753,15 @@ __metadata: languageName: node linkType: hard -"unbox-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "unbox-primitive@npm:1.0.2" +"unbox-primitive@npm:^1.0.1": + version: 1.0.1 + resolution: "unbox-primitive@npm:1.0.1" dependencies: - call-bind: ^1.0.2 - has-bigints: ^1.0.2 - has-symbols: ^1.0.3 + function-bind: ^1.1.1 + has-bigints: ^1.0.1 + has-symbols: ^1.0.2 which-boxed-primitive: ^1.0.2 - checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + checksum: 89d950e18fb45672bc6b3c961f1e72c07beb9640c7ceed847b571ba6f7d2af570ae1a2584cfee268b9d9ea1e3293f7e33e0bc29eaeb9f8e8a0bab057ff9e6bba languageName: node linkType: hard @@ -35061,10 +40782,12 @@ __metadata: languageName: node linkType: hard -"undefsafe@npm:^2.0.5": - version: 2.0.5 - resolution: "undefsafe@npm:2.0.5" - checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc +"undefsafe@npm:^2.0.2": + version: 2.0.2 + resolution: "undefsafe@npm:2.0.2" + dependencies: + debug: ^2.2.0 + checksum: d34caeaff38f8026369efc79dc7ed978e89d443f822620ff59c8b9ff6d6a3f4836d8c4e2dafe82c10a2d2c178659fe26ec87904fa30a9ec4d06f7da05e49345f languageName: node linkType: hard @@ -35085,6 +40808,13 @@ __metadata: languageName: node linkType: hard +"unicode-canonical-property-names-ecmascript@npm:^1.0.4": + version: 1.0.4 + resolution: "unicode-canonical-property-names-ecmascript@npm:1.0.4" + checksum: cc1973b18d0e1a151711e5551f87f4b3086c4f542cd5142aa691307d5720fd725fa7d36c24e12e944e108b91c72554237b0c236772d35592839434da5506c40f + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -35092,6 +40822,16 @@ __metadata: languageName: node linkType: hard +"unicode-match-property-ecmascript@npm:^1.0.4": + version: 1.0.4 + resolution: "unicode-match-property-ecmascript@npm:1.0.4" + dependencies: + unicode-canonical-property-names-ecmascript: ^1.0.4 + unicode-property-aliases-ecmascript: ^1.0.4 + checksum: 08e269fac71b5ace0f8331df9e87b9b533fe97b00c43ea58de69ae81816581490f846050e0c472279a3e7434524feba99915a93816f90dbbc0a30bcbd082da88 + languageName: node + linkType: hard + "unicode-match-property-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-match-property-ecmascript@npm:2.0.0" @@ -35102,6 +40842,13 @@ __metadata: languageName: node linkType: hard +"unicode-match-property-value-ecmascript@npm:^1.2.0": + version: 1.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:1.2.0" + checksum: 2e663cfec8e2cf317b69613566314979f717034ea8f58a237dd63234795044a87337410064fe839774d71e1d7e12195520e9edd69ed8e28f2a9eb28a2db38595 + languageName: node + linkType: hard + "unicode-match-property-value-ecmascript@npm:^2.1.0": version: 2.1.0 resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" @@ -35109,6 +40856,13 @@ __metadata: languageName: node linkType: hard +"unicode-property-aliases-ecmascript@npm:^1.0.4": + version: 1.0.5 + resolution: "unicode-property-aliases-ecmascript@npm:1.0.5" + checksum: 93fd8bae2a6f68c8f6343d0484fa3c1b8d4bf20e3b94432943a6c026ca6ed482834c1cf397c741acfe19fc72489d2aa3779e83c3109d2ae665a7aafd022754c8 + languageName: node + linkType: hard + "unicode-property-aliases-ecmascript@npm:^2.0.0": version: 2.1.0 resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" @@ -35165,15 +40919,6 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f - languageName: node - linkType: hard - "unique-slug@npm:^2.0.0": version: 2.0.2 resolution: "unique-slug@npm:2.0.2" @@ -35183,15 +40928,6 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c - languageName: node - linkType: hard - "unique-string@npm:^1.0.0": version: 1.0.0 resolution: "unique-string@npm:1.0.0" @@ -35218,16 +40954,16 @@ __metadata: linkType: hard "unist-util-generated@npm:^1.0.0": - version: 1.1.6 - resolution: "unist-util-generated@npm:1.1.6" - checksum: 86239ff88a08800d52198f2f0e15911f05bab2dad17cef95550f7c2728f15ebb0344694fcc3101d05762d88adaf86cb85aa7a3300fedabd0b6d7d00b41cdcb7f + version: 1.1.5 + resolution: "unist-util-generated@npm:1.1.5" + checksum: 7c2a2efb5467f756679761cbc02c36c8d9f8ca7fcb27e8add5e583b9bd9d1beda9c3805b6cb487cbfea8d1d45372a34f6e8d470e35526877fc42fc0c6327f6ab languageName: node linkType: hard "unist-util-is@npm:^4.0.0": - version: 4.1.0 - resolution: "unist-util-is@npm:4.1.0" - checksum: 726484cd2adc9be75a939aeedd48720f88294899c2e4a3143da413ae593f2b28037570730d5cf5fd910ff41f3bc1501e3d636b6814c478d71126581ef695f7ea + version: 4.0.2 + resolution: "unist-util-is@npm:4.0.2" + checksum: 851a07cd0eeadde5ec98fe7453d554804b3cc5be94d892de6f52178c05b683d753dfd7bb566bb42afa7aca8633935e86b1c34816832d151b41a28348bd876cc1 languageName: node linkType: hard @@ -35248,11 +40984,11 @@ __metadata: linkType: hard "unist-util-remove@npm:^2.0.0": - version: 2.1.0 - resolution: "unist-util-remove@npm:2.1.0" + version: 2.0.0 + resolution: "unist-util-remove@npm:2.0.0" dependencies: unist-util-is: ^4.0.0 - checksum: 99e54f3ea0523f8cf957579a6e84e5b58427bffab929cc7f6aa5119581f929db683dd4691ea5483df0c272f486dda9dbd04f4ab74dca6cae1f3ebe8e4261a4d9 + checksum: 0e0bddf890e5de2eed6cd2dc5178f70ff5ff497e60877f9e4242b87418d24f272a684c3fb200c810f032e6bc9847bf0b40e3aefb3e8fde1059f1b34d3991adc9 languageName: node linkType: hard @@ -35266,12 +41002,12 @@ __metadata: linkType: hard "unist-util-visit-parents@npm:^3.0.0": - version: 3.1.1 - resolution: "unist-util-visit-parents@npm:3.1.1" + version: 3.1.0 + resolution: "unist-util-visit-parents@npm:3.1.0" dependencies: "@types/unist": ^2.0.0 unist-util-is: ^4.0.0 - checksum: 1170e397dff88fab01e76d5154981666eb0291019d2462cff7a2961a3e76d3533b42eaa16b5b7e2d41ad42a5ea7d112301458283d255993e660511387bf67bc3 + checksum: 9a05c21cadf90e864638893ac8f0f66713d30533616fb216734c0093b5d4688301560205f2138c2783b6897c5914bb426e7a97c9941fe94cf8db4057ba3465c2 languageName: node linkType: hard @@ -35286,17 +41022,17 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.0": +"universalify@npm:^0.1.0, universalify@npm:^0.1.2": version: 0.1.2 resolution: "universalify@npm:0.1.2" checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff languageName: node linkType: hard -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 +"universalify@npm:^1.0.0": + version: 1.0.0 + resolution: "universalify@npm:1.0.0" + checksum: 095a808f2b915e3b89d29b6f3b4ee4163962b02fa5b7cb686970b8d0439f4ca789bc43f319b7cbb1ce552ae724e631d148e5aee9ce04c4f46a7fe0c5bbfd2b9e languageName: node linkType: hard @@ -35353,15 +41089,6 @@ __metadata: languageName: node linkType: hard -"untildify@npm:^2.0.0": - version: 2.1.0 - resolution: "untildify@npm:2.1.0" - dependencies: - os-homedir: ^1.0.0 - checksum: 071b394053fc94747d9df8c7f7ca50af41355c1207c8a0bf9f35f52b0d9ad5142a1920b018bc2b6ff04340a4f9c599ad50c9b8f4ff2c689ae52b1463ebbda94e - languageName: node - linkType: hard - "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" @@ -35390,6 +41117,41 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.0.5": + version: 1.0.5 + resolution: "update-browserslist-db@npm:1.0.5" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + browserslist-lint: cli.js + checksum: 7e425fe5dbbebdccf72a84ce70ec47fc74dce561d28f47bc2b84a1c2b84179a862c2261b18ab66a5e73e261c7e2ef9e11c6129112989d4d52e8f75a56bb923f8 + languageName: node + linkType: hard + +"update-notifier@npm:^4.0.0": + version: 4.1.1 + resolution: "update-notifier@npm:4.1.1" + dependencies: + boxen: ^4.2.0 + chalk: ^3.0.0 + configstore: ^5.0.1 + has-yarn: ^2.1.0 + import-lazy: ^2.1.0 + is-ci: ^2.0.0 + is-installed-globally: ^0.3.1 + is-npm: ^4.0.0 + is-yarn-global: ^0.3.0 + latest-version: ^5.0.0 + pupa: ^2.0.1 + semver-diff: ^3.1.1 + xdg-basedir: ^4.0.0 + checksum: bd665349d2e25abd2417431e1c64365faf8fe40f9ef2419b507c9573e209bc8ba2114957cbe20e914073ee31bcfa112937c6518208c0c64fa2614f22b7a2ee40 + languageName: node + linkType: hard + "upper-case-first@npm:^2.0.2": version: 2.0.2 resolution: "upper-case-first@npm:2.0.2" @@ -35409,11 +41171,11 @@ __metadata: linkType: hard "uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" + version: 4.2.2 + resolution: "uri-js@npm:4.2.2" dependencies: punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + checksum: 5a91c55d8ae6d9a1ff9dc1b0774888a99aae7cc6e9056c57b709275c0f6753b05cd1a9f2728a1479244b93a9f57ab37c60d277a48d9f2d032d6ae65837bf9bc7 languageName: node linkType: hard @@ -35450,13 +41212,23 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.1.8, url-parse@npm:^1.4.3, url-parse@npm:^1.4.4, url-parse@npm:^1.5.10, url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" +"url-parse@npm:^1.1.8, url-parse@npm:^1.4.3, url-parse@npm:^1.4.4": + version: 1.4.7 + resolution: "url-parse@npm:1.4.7" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: 3ede937508436c9685a60c90634894aaf745d75160c0092c7f36335c79563effedf1a9fe0181f98e9c5165af73ba5f8fe1dc6e274c6556ae170be01f6e54c67f + languageName: node + linkType: hard + +"url-parse@npm:^1.5.3": + version: 1.5.3 + resolution: "url-parse@npm:1.5.3" dependencies: querystringify: ^2.1.1 requires-port: ^1.0.0 - checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + checksum: c6b32fff835e43f3b1b4150239f459744f0ab1a908841dbfecbfc79bf67f4d6c8d9af1841d0c6d814d45bfa08525cc29312a0bef31db7aa894306b3db07e4ee0 languageName: node linkType: hard @@ -35496,12 +41268,49 @@ __metadata: languageName: node linkType: hard +"use-composed-ref@npm:^1.0.0": + version: 1.0.0 + resolution: "use-composed-ref@npm:1.0.0" + dependencies: + ts-essentials: ^2.0.3 + peerDependencies: + react: ^16.8.0 + checksum: e8af62dfb1e4e7f9ccc151ebdfffc9e160c13f025b61b2dc0f7320ca28b4d525452d3c95f3a3c13c9a99d3d2623d57372ac854f3c8d267704847d12e60bb873a + languageName: node + linkType: hard + +"use-isomorphic-layout-effect@npm:^1.0.0": + version: 1.0.0 + resolution: "use-isomorphic-layout-effect@npm:1.0.0" + peerDependencies: + react: ^16.8.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: ae47fd96ad5973208472490b9e769c0965b0bfedbc21696c1450b6e71745732129cbb66450b8f33c6f6ef65716fff4381cb97c9fb3d5d7a2622fe6c6f6d3e702 + languageName: node + linkType: hard + +"use-latest@npm:^1.0.0": + version: 1.1.0 + resolution: "use-latest@npm:1.1.0" + dependencies: + use-isomorphic-layout-effect: ^1.0.0 + peerDependencies: + react: ^16.8.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: d865c59cca002d53ebb16da4ca6198c5e40d513fb65816449a9507b70753b31b436bf90afab5ac55f3ffc65671d23a0bd48d1f4bcc35f6866313c1f9360c1f21 + languageName: node + linkType: hard + "use-memo-one@npm:^1.1.1": - version: 1.1.3 - resolution: "use-memo-one@npm:1.1.3" + version: 1.1.2 + resolution: "use-memo-one@npm:1.1.2" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 8f08eba26d69406b61bb4b8dacdd5a92bd6aef5b53d346dfe87954f7330ee10ecabc937cc7854635155d46053828e85c10b5a5aff7a04720e6a97b9f42999bac + react: ^16.8.0 || ^17.0.0 + checksum: 71f4598ce422b64a971dc93f45dc245158977f8882f56be82d4629c21577c22244959ac3aa99bd9559d64007b632d58aa43b256981afe56603c77ce3fdee165f languageName: node linkType: hard @@ -35518,22 +41327,13 @@ __metadata: linkType: hard "use-subscription@npm:^1.0.0": - version: 1.8.0 - resolution: "use-subscription@npm:1.8.0" + version: 1.5.1 + resolution: "use-subscription@npm:1.5.1" dependencies: - use-sync-external-store: ^1.2.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: beac1f0ff14fe23fd6ae9c34681258936729f343bf6532bbce36caa8f4c1019ff380783e35b4aeb7f3faaec1a83af242d7833bf7e660816d24555dbdd2c934da - languageName: node - linkType: hard - -"use-sync-external-store@npm:^1.2.0": - version: 1.2.0 - resolution: "use-sync-external-store@npm:1.2.0" + object-assign: ^4.1.1 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a + react: ^16.8.0 || ^17.0.0 + checksum: 96e64977a573244fd11350a3141b2cf57fb72dd9dd902f387c8a0a565d0a948bc81588bd7378c6ef6defc0d1119f37f73aac4a7a287c8443abd444bd4e7bbea8 languageName: node linkType: hard @@ -35565,7 +41365,7 @@ __metadata: languageName: node linkType: hard -"util.promisify@npm:1.0.0": +"util.promisify@npm:1.0.0, util.promisify@npm:~1.0.0": version: 1.0.0 resolution: "util.promisify@npm:1.0.0" dependencies: @@ -35575,18 +41375,6 @@ __metadata: languageName: node linkType: hard -"util.promisify@npm:~1.0.0": - version: 1.0.1 - resolution: "util.promisify@npm:1.0.1" - dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.2 - has-symbols: ^1.0.1 - object.getownpropertydescriptors: ^2.1.0 - checksum: d823c75b3fc66510018596f128a6592c98991df38bc0464a633bdf9134e2de0a1a33199c5c21cc261048a3982d7a19e032ecff8835b3c587f843deba96063e37 - languageName: node - linkType: hard - "util@npm:0.10.3": version: 0.10.3 resolution: "util@npm:0.10.3" @@ -35618,13 +41406,27 @@ __metadata: languageName: node linkType: hard -"utila@npm:~0.4": +"utila@npm:^0.4.0, utila@npm:~0.4": version: 0.4.0 resolution: "utila@npm:0.4.0" checksum: 97ffd3bd2bb80c773429d3fb8396469115cd190dded1e733f190d8b602bd0a1bcd6216b7ce3c4395ee3c79e3c879c19d268dbaae3093564cb169ad1212d436f4 languageName: node linkType: hard +"utile@npm:0.3.x": + version: 0.3.0 + resolution: "utile@npm:0.3.0" + dependencies: + async: ~0.9.0 + deep-equal: ~0.2.1 + i: 0.3.x + mkdirp: 0.x.x + ncp: 1.0.x + rimraf: 2.x.x + checksum: 54a16b55d35ca421be0f4b2250d426a08a975342caa02656973c1155e4932fefbb41fec8b4fe1d6e61afb8b87c8e6a41b8e8b5a05001e0315bdb0a4c66d7616f + languageName: node + linkType: hard + "utils-merge@npm:1.0.1": version: 1.0.1 resolution: "utils-merge@npm:1.0.1" @@ -35632,16 +41434,25 @@ __metadata: languageName: node linkType: hard -"uuid@npm:8.0.0": - version: 8.0.0 - resolution: "uuid@npm:8.0.0" +"uuid@npm:3.3.2": + version: 3.3.2 + resolution: "uuid@npm:3.3.2" bin: - uuid: dist/bin/uuid - checksum: 56d4e23aa7ac26fa2db6bd1778db34cb8c9f5a10df1770a27167874bf6705fc8f14a4ac414af58a0d96c7653b2bd4848510b29d1c2ef8c91ccb17429c1872b5e + uuid: ./bin/uuid + checksum: 8793629d2799f500aeea9fcd0aec6c4e9fbcc4d62ed42159ad96be345c3fffac1bbf61a23e18e2782600884fee05e6d4012ce4b70d0037c8e987533ae6a77870 languageName: node linkType: hard "uuid@npm:^3.2.1, uuid@npm:^3.3.2": + version: 3.3.3 + resolution: "uuid@npm:3.3.3" + bin: + uuid: ./bin/uuid + checksum: 21133d0e8a85e607f59a66913bf4f1dd79bdc4a80979a872b913f7ec75f530255edfe8bc6b69ce32017b8367f0d60a8b24ccd2af99156dc1ef2b8b9fe0ec8065 + languageName: node + linkType: hard + +"uuid@npm:^3.3.3, uuid@npm:^3.4.0": version: 3.4.0 resolution: "uuid@npm:3.4.0" bin: @@ -35650,7 +41461,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^8.3.0, uuid@npm:^8.3.2": +"uuid@npm:^8.3.0": version: 8.3.2 resolution: "uuid@npm:8.3.2" bin: @@ -35668,6 +41479,13 @@ __metadata: languageName: node linkType: hard +"v8-compile-cache-lib@npm:^3.0.0": + version: 3.0.0 + resolution: "v8-compile-cache-lib@npm:3.0.0" + checksum: 674e312bbca796584b61dc915f33c7e7dc4e06d196e0048cb772c8964493a1ec723f1dd014d9419fd55c24a6eae148f60769da23f622e05cd13268063fa1ed6b + languageName: node + linkType: hard + "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -35676,9 +41494,9 @@ __metadata: linkType: hard "v8-compile-cache@npm:^2.0.3": - version: 2.3.0 - resolution: "v8-compile-cache@npm:2.3.0" - checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e + version: 2.1.1 + resolution: "v8-compile-cache@npm:2.1.1" + checksum: 692f6bc698df9167cb71e5ba1232e90ab06f9da0de6723e7be33c507d1b094472d791affd94c6b1121a3259855b7438e6cb5d3b40a84fead9b74ede985a201ca languageName: node linkType: hard @@ -35694,13 +41512,13 @@ __metadata: linkType: hard "v8-to-istanbul@npm:^8.1.0": - version: 8.1.1 - resolution: "v8-to-istanbul@npm:8.1.1" + version: 8.1.0 + resolution: "v8-to-istanbul@npm:8.1.0" dependencies: "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^1.6.0 source-map: ^0.7.3 - checksum: 54ce92bec2727879626f623d02c8d193f0c7e919941fa373ec135189a8382265117f5316ea317a1e12a5f9c13d84d8449052a731fe3306fa4beaafbfa4cab229 + checksum: c7dabf9567e0c210b24d0720e553803cbe1ff81edb1ec7f2080eb4be01ed081a40286cc9f4aaa86d1bf8d57840cefae8fdf326b7cb8faa316ba50c7b948030d4 languageName: node linkType: hard @@ -35782,13 +41600,13 @@ __metadata: linkType: hard "vendors@npm:^1.0.0": - version: 1.0.4 - resolution: "vendors@npm:1.0.4" - checksum: 4b16e0bc18dbdd7ac8dd745c776c08f6c73e9a7f620ffd9faf94a3d86a35feaf4c6cb1bbdb304d2381548a30d0abe69b83eeb1b7b1bf5bb33935e64b28812681 + version: 1.0.3 + resolution: "vendors@npm:1.0.3" + checksum: 33e3b65b35f52647596d94988b38c46352d416751e7f7f84833f01d00d68e4d669664ad26d5c88a3eeec3cd19f6434a11d422ddd16828803d834fd3ed517f8c3 languageName: node linkType: hard -"verror@npm:1.10.0": +"verror@npm:1.10.0, verror@npm:^1.10.0": version: 1.10.0 resolution: "verror@npm:1.10.0" dependencies: @@ -35799,21 +41617,10 @@ __metadata: languageName: node linkType: hard -"verror@npm:^1.10.0": - version: 1.10.1 - resolution: "verror@npm:1.10.1" - dependencies: - assert-plus: ^1.0.0 - core-util-is: 1.0.2 - extsprintf: ^1.2.0 - checksum: 690a8d6ad5a4001672290e9719e3107c86269bc45fe19f844758eecf502e59f8aa9631b19b839f6d3dea562334884d22d1eb95ae7c863032075a9212c889e116 - languageName: node - linkType: hard - -"vfile-location@npm:^3.0.0, vfile-location@npm:^3.2.0": - version: 3.2.0 - resolution: "vfile-location@npm:3.2.0" - checksum: 9bb3df6d0be31b5dd2d8da0170c27b7045c64493a8ba7b6ff7af8596c524fc8896924b8dd85ae12d201eead2709217a0fbc44927b7264f4bbf0aa8027a78be9c +"vfile-location@npm:^3.0.0": + version: 3.0.1 + resolution: "vfile-location@npm:3.0.1" + checksum: 82511b49f80a1dee0ca5751bfa007f7aded918ce743bd10ea824fed1b3648471950e02026a1710d00f2ba1ffaee77adc82ee072fb241639e1b99e277c83eebbc languageName: node linkType: hard @@ -35828,14 +41635,15 @@ __metadata: linkType: hard "vfile@npm:^4.0.0": - version: 4.2.1 - resolution: "vfile@npm:4.2.1" + version: 4.1.1 + resolution: "vfile@npm:4.1.1" dependencies: "@types/unist": ^2.0.0 is-buffer: ^2.0.0 + replace-ext: 1.0.0 unist-util-stringify-position: ^2.0.0 vfile-message: ^2.0.0 - checksum: ee5726e10d170472cde778fc22e0f7499caa096eb85babea5d0ce0941455b721037ee1c9e6ae506ca2803250acd313d0f464328ead0b55cfe7cb6315f1b462d6 + checksum: 4a1b62d12ce7cc6684cb4d0dbae3dd6e22f8abfa7e332752320bfe8f76e96d22db76e7256a015068d30a4cdd4ed3362c20aa094013c4d29ad3bf43c4e4f7b00c languageName: node linkType: hard @@ -35955,7 +41763,16 @@ __metadata: languageName: node linkType: hard -"walker@npm:^1.0.7, walker@npm:^1.0.8, walker@npm:~1.0.5": +"walker@npm:^1.0.7, walker@npm:~1.0.5": + version: 1.0.7 + resolution: "walker@npm:1.0.7" + dependencies: + makeerror: 1.0.x + checksum: 4038fcf92f6ab0288267ad05008aec9e089a759f1bd32e1ea45cc2eb498eb12095ec43cf8ca2bf23a465f4580a0d33b25b89f450ba521dd27083cbc695ee6bf5 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" dependencies: @@ -35982,33 +41799,33 @@ __metadata: languageName: node linkType: hard -"watchpack-chokidar2@npm:^2.0.1": - version: 2.0.1 - resolution: "watchpack-chokidar2@npm:2.0.1" +"watchpack-chokidar2@npm:^2.0.0": + version: 2.0.0 + resolution: "watchpack-chokidar2@npm:2.0.0" dependencies: chokidar: ^2.1.8 - checksum: acf0f9ebca0c0b2fd1fe87ba557670477a6c0410bf1a653a726e68eb0620aa94fd9a43027a160a76bc793a21ea12e215e1e87dafe762682c13ef92ad4daf7b58 + checksum: b91c3445dad37a42abd04dafcf4453b7787a06490187a91be3d0ed7b0f04f36ff1474e4cedc316d2a2c00640b44b8db1d22e2382e45e46262740a84c88d3e8ae languageName: node linkType: hard "watchpack@npm:^1.7.4": - version: 1.7.5 - resolution: "watchpack@npm:1.7.5" + version: 1.7.4 + resolution: "watchpack@npm:1.7.4" dependencies: chokidar: ^3.4.1 graceful-fs: ^4.1.2 neo-async: ^2.5.0 - watchpack-chokidar2: ^2.0.1 + watchpack-chokidar2: ^2.0.0 dependenciesMeta: chokidar: optional: true watchpack-chokidar2: optional: true - checksum: 8b7cb8c8df8f4dd0e8ac47693c0141c4f020a4b031411247d600eca31522fde6f1f9a3a6f6518b46e71f7971b0ed5734c08c60d7fdd2530e7262776286f69236 + checksum: 32061a7887bcc879eeec46bc3b55e41271e3622b7e973b6f1faa65ab57f76922d959a4b18cf66cbbf595ce370a0c33ff8cdbe22d94245f2e853a554ede966492 languageName: node linkType: hard -"watchpack@npm:^2.2.0, watchpack@npm:^2.4.0": +"watchpack@npm:^2.2.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" dependencies: @@ -36064,7 +41881,22 @@ __metadata: languageName: node linkType: hard -"webpack-dev-middleware@npm:^3.7.2, webpack-dev-middleware@npm:^3.7.3": +"webpack-dev-middleware@npm:^3.7.2": + version: 3.7.2 + resolution: "webpack-dev-middleware@npm:3.7.2" + dependencies: + memory-fs: ^0.4.1 + mime: ^2.4.4 + mkdirp: ^0.5.1 + range-parser: ^1.2.1 + webpack-log: ^2.0.0 + peerDependencies: + webpack: ^4.0.0 + checksum: d7320d7a8c65fa1af702c5b723ffb4e55219f340025ced17871e3d2e8f3a7cde3ad505cfd1572d31955d7d972bf3d29e7007577e28bad8d469dc3d5c64d30b74 + languageName: node + linkType: hard + +"webpack-dev-middleware@npm:^3.7.3": version: 3.7.3 resolution: "webpack-dev-middleware@npm:3.7.3" dependencies: @@ -36136,14 +41968,15 @@ __metadata: languageName: node linkType: hard -"webpack-hot-middleware@npm:^2.25.1": - version: 2.25.3 - resolution: "webpack-hot-middleware@npm:2.25.3" +"webpack-hot-middleware@npm:^2.25.0": + version: 2.25.0 + resolution: "webpack-hot-middleware@npm:2.25.0" dependencies: - ansi-html-community: 0.0.8 - html-entities: ^2.1.0 - strip-ansi: ^6.0.0 - checksum: 74fe5d15f3120742cf0f88a4af7e72f3678f2d05905676e37ab4e85c559f2c21d8aa72b0efe7c262993370bfc83fbe5a8d42561bcd10b370fac88640f87c463a + ansi-html: 0.0.7 + html-entities: ^1.2.0 + querystring: ^0.2.0 + strip-ansi: ^3.0.0 + checksum: 542fdb27a268bdcfb13b05c7a2f61aaec2d00f4c63d63e1fbe0cd241617a4f5d1e4055720903804fe20e0ce2a18aa4d61d7f7ebcda29aba54fe81b90c5a0b928 languageName: node linkType: hard @@ -36280,44 +42113,18 @@ __metadata: languageName: node linkType: hard -"webpack@npm:>=4.43.0 <6.0.0": - version: 5.84.1 - resolution: "webpack@npm:5.84.1" +"websocket-driver@npm:>=0.5.1": + version: 0.7.3 + resolution: "websocket-driver@npm:0.7.3" dependencies: - "@types/eslint-scope": ^3.7.3 - "@types/estree": ^1.0.0 - "@webassemblyjs/ast": ^1.11.5 - "@webassemblyjs/wasm-edit": ^1.11.5 - "@webassemblyjs/wasm-parser": ^1.11.5 - acorn: ^8.7.1 - acorn-import-assertions: ^1.9.0 - browserslist: ^4.14.5 - chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.14.1 - es-module-lexer: ^1.2.1 - eslint-scope: 5.1.1 - events: ^3.2.0 - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.2.9 - 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.2 - tapable: ^2.1.1 - terser-webpack-plugin: ^5.3.7 - watchpack: ^2.4.0 - webpack-sources: ^3.2.3 - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: 646b645df5badf2dac2ddd0193c9e9a177d51283d18f918eead36a0cdf7b750c4111d9ac11d9825c1334cbd0a6fb8f82628fbfb90d0066f927265dd11b47b192 + http-parser-js: ">=0.4.0 <0.4.11" + safe-buffer: ">=5.1.0" + websocket-extensions: ">=0.1.1" + checksum: 22e14295f4f2ec9cb9320858154f44e7b06e31a159f742d487635e53190cf3759e2bd9e0df20fdb12c95fefb205a47c9b946af2e04dfee3ee62c0e24fa5d6ba2 languageName: node linkType: hard -"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": +"websocket-driver@npm:^0.7.4": version: 0.7.4 resolution: "websocket-driver@npm:0.7.4" dependencies: @@ -36329,9 +42136,9 @@ __metadata: linkType: hard "websocket-extensions@npm:>=0.1.1": - version: 0.1.4 - resolution: "websocket-extensions@npm:0.1.4" - checksum: 5976835e68a86afcd64c7a9762ed85f2f27d48c488c707e67ba85e717b90fa066b98ab33c744d64255c9622d349eedecf728e65a5f921da71b58d0e9591b9038 + version: 0.1.3 + resolution: "websocket-extensions@npm:0.1.3" + checksum: 453d51465b7bad037da41621d32fa65f04396f7d6d4cfeb707a33f24c0d6610e1bf8eee5e83339150efb4d5bed344c54028a310e9019cad79f43d06b78d87bef languageName: node linkType: hard @@ -36351,7 +42158,14 @@ __metadata: languageName: node linkType: hard -"whatwg-fetch@npm:>=0.10.0, whatwg-fetch@npm:^3.0.0, whatwg-fetch@npm:^3.4.1": +"whatwg-fetch@npm:>=0.10.0, whatwg-fetch@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-fetch@npm:3.0.0" + checksum: dcb90ab919e742d275c32d397d7480f6981da4c1b49961f0d0a2fa6825325b553fee2d793bc38ed85b9bcc8c50de39802440e2480fe40243067b3dab228c52c3 + languageName: node + linkType: hard + +"whatwg-fetch@npm:^3.4.1": version: 3.6.2 resolution: "whatwg-fetch@npm:3.6.2" checksum: ee976b7249e7791edb0d0a62cd806b29006ad7ec3a3d89145921ad8c00a3a67e4be8f3fb3ec6bc7b58498724fd568d11aeeeea1f7827e7e1e5eae6c8a275afed @@ -36375,7 +42189,18 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": +"whatwg-url@npm:^8.0.0": + version: 8.1.0 + resolution: "whatwg-url@npm:8.1.0" + dependencies: + lodash.sortby: ^4.7.0 + tr46: ^2.0.2 + webidl-conversions: ^5.0.0 + checksum: 10642be39ae676474df005163991f5007ef0b61a070a997b3dd393975978bf4dc1b81fa9499f97f62d5aef03b1ba313da0e05fde4e7a9dc84db7959b95a3838b + languageName: node + linkType: hard + +"whatwg-url@npm:^8.5.0": version: 8.7.0 resolution: "whatwg-url@npm:8.7.0" dependencies: @@ -36419,9 +42244,9 @@ __metadata: linkType: hard "which-module@npm:^2.0.0": - version: 2.0.1 - resolution: "which-module@npm:2.0.1" - checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + version: 2.0.0 + resolution: "which-module@npm:2.0.0" + checksum: 809f7fd3dfcb2cdbe0180b60d68100c88785084f8f9492b0998c051d7a8efe56784492609d3f09ac161635b78ea29219eb1418a98c15ce87d085bce905705c9c languageName: node linkType: hard @@ -36472,7 +42297,7 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:1.1.3": +"wide-align@npm:1.1.3, wide-align@npm:^1.1.0": version: 1.1.3 resolution: "wide-align@npm:1.1.3" dependencies: @@ -36481,7 +42306,7 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:^1.1.0, wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": +"wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" dependencies: @@ -36499,32 +42324,32 @@ __metadata: languageName: node linkType: hard -"winston-transport@npm:^4.4.0, winston-transport@npm:^4.5.0": - version: 4.5.0 - resolution: "winston-transport@npm:4.5.0" +"winston-transport@npm:^4.4.0": + version: 4.4.0 + resolution: "winston-transport@npm:4.4.0" dependencies: - logform: ^2.3.2 - readable-stream: ^3.6.0 - triple-beam: ^1.3.0 - checksum: a56e5678a80b88a73e77ed998fc6e19d0db19c989a356b137ec236782f2bf58ae4511b11c29163f99391fa4dc12102c7bc5738dcb6543f28877fa2819adc3ee9 + readable-stream: ^2.3.7 + triple-beam: ^1.2.0 + checksum: 953d78d152b355962d97697c3ccdc26fda6be017a0e1e555729e218d1269aa32a60e9ff16eb7a72c6403f733e88bab664b259feae3857667b54ff8e2f149fa52 languageName: node linkType: hard -"winston@npm:2.x": - version: 2.4.7 - resolution: "winston@npm:2.4.7" +"winston@npm:2.1.x": + version: 2.1.1 + resolution: "winston@npm:2.1.1" dependencies: - async: ^2.6.4 + async: ~1.0.0 colors: 1.0.x cycle: 1.0.x eyes: 0.1.x isstream: 0.1.x + pkginfo: 0.3.x stack-trace: 0.0.x - checksum: 0843f39e7d5298b0bffbdea51bc0662715b3c49414fd2b245ebf9b9a4aca452683f35f03ae60e93542b7b16e1eeee34eb3c62bb7ec644201587a4067e8d64dda + checksum: 60b070baa6d9ef7c3f2ba6c835154e57899a922abfbbcc112817124cb37fa2c3e0e8997752db6d2d398605dfcbea062e606e6d4f8af66622fd7c013b57f1b9fc languageName: node linkType: hard -"winston@npm:3.3.3": +"winston@npm:3.3.3, winston@npm:^3.2.1, winston@npm:^3.3.3": version: 3.3.3 resolution: "winston@npm:3.3.3" dependencies: @@ -36541,25 +42366,6 @@ __metadata: languageName: node linkType: hard -"winston@npm:^3.2.1, winston@npm:^3.3.3": - version: 3.9.0 - resolution: "winston@npm:3.9.0" - dependencies: - "@colors/colors": 1.5.0 - "@dabh/diagnostics": ^2.0.2 - async: ^3.2.3 - is-stream: ^2.0.0 - logform: ^2.4.0 - one-time: ^1.0.0 - readable-stream: ^3.4.0 - safe-stable-stringify: ^2.3.1 - stack-trace: 0.0.x - triple-beam: ^1.3.0 - winston-transport: ^4.5.0 - checksum: 410f82b7a502106e7d93e62cd21d7e9bcfd37884d0d95921b12526d2fe163e654ec9cd39e18f9884fad5cf6506a45d07bd2519c1dc9c88e82f0f12b2ce9fa510 - languageName: node - linkType: hard - "wmf@npm:~1.0.1": version: 1.0.2 resolution: "wmf@npm:1.0.2" @@ -36588,6 +42394,13 @@ __metadata: languageName: node linkType: hard +"wordwrap@npm:~0.0.2": + version: 0.0.3 + resolution: "wordwrap@npm:0.0.3" + checksum: dfc2d3512e857ae4b3bc2e8d4e5d2c285c28a4b87cd1d81c977ce9a1a99152d355807e046851a3d61148f39d877fbb889352e07b65a9cbdd2256aa928e159026 + languageName: node + linkType: hard + "workbox-background-sync@npm:^5.1.4": version: 5.1.4 resolution: "workbox-background-sync@npm:5.1.4" @@ -36793,10 +42606,10 @@ __metadata: languageName: node linkType: hard -"workerpool@npm:6.1.0": - version: 6.1.0 - resolution: "workerpool@npm:6.1.0" - checksum: 519d03a4d008fd95ff9e1a583afe537e6a0eecd8250452044e390db3e1dc4ce91616a8ee6c4bba9a2fda38440c2666664c31b50b5a9fd05cc43c739df54d5781 +"workerpool@npm:6.0.0": + version: 6.0.0 + resolution: "workerpool@npm:6.0.0" + checksum: 7ab008dbbab531aac372ecf9742374f6a728dbe9d2f12d93be270c41f1d5309cfdad31df9ded48e51d5bc48a007d16781e7bf10e0e54e11a78b7e0bec783ec97 languageName: node linkType: hard @@ -36850,6 +42663,17 @@ __metadata: languageName: node linkType: hard +"write-file-atomic@npm:^1.2.0": + version: 1.3.4 + resolution: "write-file-atomic@npm:1.3.4" + dependencies: + graceful-fs: ^4.1.11 + imurmurhash: ^0.1.4 + slide: ^1.1.5 + checksum: ed5a1fc812abe99dd03cd42be145a5e13af42609e19873244510c71b2e261a169db6d06cb9a92b6b0489dd05f045e53bf464d9ad7713e443934af9b81a9cc65d + languageName: node + linkType: hard + "write-file-atomic@npm:^2.3.0": version: 2.4.3 resolution: "write-file-atomic@npm:2.4.3" @@ -36908,7 +42732,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^6.1.0, ws@npm:^6.2.1": +"ws@npm:^6.1.0": version: 6.2.2 resolution: "ws@npm:6.2.2" dependencies: @@ -36917,9 +42741,33 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7, ws@npm:^7.4.6": - version: 7.5.9 - resolution: "ws@npm:7.5.9" +"ws@npm:^6.2.1": + version: 6.2.1 + resolution: "ws@npm:6.2.1" + dependencies: + async-limiter: ~1.0.0 + checksum: 82f7512bb74ad6e94002b5016944aee2aeefd1c480477b5f55a03ee010d4a1bd5bb4a688e07695f0a727227a0591a1a7c70e31f97baad826e3c48f85be4db6a9 + languageName: node + linkType: hard + +"ws@npm:^7": + version: 7.4.0 + resolution: "ws@npm:7.4.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 83a19a742aa2254ac5d7aa5d8f9a3bf7f2312bd147427fed02fc13168545c938450f1da9d8371133b292f63d1a21dcf7e7a09c6f89b8603581a27ed6c8e24e09 + languageName: node + linkType: hard + +"ws@npm:^7.4.6": + version: 7.5.5 + resolution: "ws@npm:7.5.5" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -36928,7 +42776,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 + checksum: bd2b437256012af526c69c03d6670a132e7ab0fe5853f3b7092826acea4203fad4ee2a8d0d9bd44834b2b968e747bf34f753ab535f4a3edf40d262da4b1d0805 languageName: node linkType: hard @@ -36947,20 +42795,6 @@ __metadata: languageName: node linkType: hard -"x-default-browser@npm:^0.4.0": - version: 0.4.0 - resolution: "x-default-browser@npm:0.4.0" - dependencies: - default-browser-id: ^1.0.4 - dependenciesMeta: - default-browser-id: - optional: true - bin: - x-default-browser: bin/x-default-browser.js - checksum: 9649fe6b4b91de93d5a48a5042b55a6e15c87d2514bc4f2e12582f8b25c1a6810fafc6f4c454fb531540e431e32a0a26ac130e418c0ce5c6ca892fb01945ea9e - languageName: node - linkType: hard - "xcode@npm:2.0.0": version: 2.0.0 resolution: "xcode@npm:2.0.0" @@ -36981,6 +42815,13 @@ __metadata: languageName: node linkType: hard +"xdg-basedir@npm:^4.0.0": + version: 4.0.0 + resolution: "xdg-basedir@npm:4.0.0" + checksum: 0073d5b59a37224ed3a5ac0dd2ec1d36f09c49f0afd769008a6e9cd3cd666bd6317bd1c7ce2eab47e1de285a286bad11a9b038196413cd753b79770361855f3c + languageName: node + linkType: hard + "xlsx@npm:^0.10.9": version: 0.10.9 resolution: "xlsx@npm:0.10.9" @@ -36999,19 +42840,22 @@ __metadata: linkType: hard "xlsx@npm:^0.17.0": - version: 0.17.5 - resolution: "xlsx@npm:0.17.5" + version: 0.17.0 + resolution: "xlsx@npm:0.17.0" dependencies: adler-32: ~1.2.0 cfb: ^1.1.4 - codepage: ~1.15.0 + codepage: ~1.14.0 + commander: ~2.17.1 crc-32: ~1.2.0 + exit-on-epipe: ~1.0.1 + fflate: ^0.3.8 ssf: ~0.11.2 wmf: ~1.0.1 word: ~0.3.0 bin: xlsx: bin/xlsx.njs - checksum: f2dc48671994ba13aa98c4aaa14d7cb13f75f248964f555809ec3d4069e80e99a0bcb6657273e3872af3765118aa30630d566b991a14b6193f1ad79022542e46 + checksum: 64e44eba53b64b989667b11655b88ef59a695aa07cce2415f9edff64ef6a48d936ed33208d98db3654e31769d79c42fd50e96d983d55e0850cb54a591b28960e languageName: node linkType: hard @@ -37022,27 +42866,20 @@ __metadata: languageName: node linkType: hard -"xml2js@npm:0.5.0": - version: 0.5.0 - resolution: "xml2js@npm:0.5.0" +"xml2js@npm:0.4.19": + version: 0.4.19 + resolution: "xml2js@npm:0.4.19" dependencies: sax: ">=0.6.0" - xmlbuilder: ~11.0.0 - checksum: 1aa71d62e5bc2d89138e3929b9ea46459157727759cbc62ef99484b778641c0cd21fb637696c052d901a22f82d092a3e740a16b4ce218e81ac59b933535124ea - languageName: node - linkType: hard - -"xmlbuilder@npm:^15.1.1": - version: 15.1.1 - resolution: "xmlbuilder@npm:15.1.1" - checksum: 14f7302402e28d1f32823583d121594a9dca36408d40320b33f598bd589ca5163a352d076489c9c64d2dc1da19a790926a07bf4191275330d4de2b0d85bb1843 + xmlbuilder: ~9.0.1 + checksum: ca8b2fee430d450a18947786bfd7cd1a353ee00fc6fd550acbc8a8e65f1b4df5e9786fcb2990c1a5514ecd554d445fb74e1d716b3a4fcfffc10554aeb5db482b languageName: node linkType: hard -"xmlbuilder@npm:~11.0.0": - version: 11.0.1 - resolution: "xmlbuilder@npm:11.0.1" - checksum: 7152695e16f1a9976658215abab27e55d08b1b97bca901d58b048d2b6e106b5af31efccbdecf9b07af37c8377d8e7e821b494af10b3a68b0ff4ae60331b415b0 +"xmlbuilder@npm:^9.0.7, xmlbuilder@npm:~9.0.1": + version: 9.0.7 + resolution: "xmlbuilder@npm:9.0.7" + checksum: 8193bb323806a002764f013bea0c6e9ff2dc26fd29109408761b16b59a8ad2214c2abe8e691755fd8b525586e3a0e1efeb92335947d7b0899032b779f1705a53 languageName: node linkType: hard @@ -37054,11 +42891,18 @@ __metadata: linkType: hard "xmldoc@npm:^1.1.2": - version: 1.3.0 - resolution: "xmldoc@npm:1.3.0" + version: 1.1.2 + resolution: "xmldoc@npm:1.1.2" dependencies: - sax: ^1.2.4 - checksum: 06354246b6912cf63978e78acd5dee5f8d3069547b89a210a4111747d226c82a475c2062a73f1cdb34191a8b2a8fb57a11948f45ffd5c1effa8bbcf34691b2d2 + sax: ^1.2.1 + checksum: ada5101e8221e87e3cf0f339a1bec213a7c91ad56fe453c27fc0f5b88feee67437a5604a08484f72041cd6104e23cf86c5000bc9bf658a01176b01b6daded429 + languageName: node + linkType: hard + +"xmldom@npm:0.1.x": + version: 0.1.31 + resolution: "xmldom@npm:0.1.31" + checksum: 3073ca4a096892f86991ad0fce9aa1e874f16a974aa2c0911b1a218922d80fe3762b56aa3a2d9fe4a46d61416193c6dc0839776748b24e0cfb56197babf77a94 languageName: node linkType: hard @@ -37070,11 +42914,11 @@ __metadata: linkType: hard "xregexp@npm:^4.3.0": - version: 4.4.1 - resolution: "xregexp@npm:4.4.1" + version: 4.3.0 + resolution: "xregexp@npm:4.3.0" dependencies: - "@babel/runtime-corejs3": ^7.12.1 - checksum: 134d70116655f0de90725a0d2aaf73b2a69f8b4cd7f1908e394c7ff4de53819a0a2d9595e1722d71334a33d9392071b1f983f5954c57d83ab3e451116d9f8499 + "@babel/runtime-corejs3": ^7.8.3 + checksum: 01246b9d9231dbff988030d2c8529c045ec78b6ccecec808f0a62629f71a4c40bce0abac5e51d4239473a062154da1a68badc72d4ffc1d4129afa2407b3ec753 languageName: node linkType: hard @@ -37086,16 +42930,16 @@ __metadata: linkType: hard "y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 + version: 4.0.0 + resolution: "y18n@npm:4.0.0" + checksum: 66e22d38bf994723b625dcc0159f6fd4068c511f8c565df39e8aa53426f5f31e4a9664a8d7099fbde2c22a1c71be2cb60e83f4c2961a5ee48672418d825a7bc2 languageName: node linkType: hard "y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + version: 5.0.5 + resolution: "y18n@npm:5.0.5" + checksum: f97d3cc7e5a0f68114721e39036cd64f4b993b06d08cea6e0cc8a684a7f34a2fee05be55e2e7dde7329ba77788376bd43b4eb19c6c9dbc3e2c3cdea68b3ba38e languageName: node linkType: hard @@ -37106,7 +42950,7 @@ __metadata: languageName: node linkType: hard -"yallist@npm:^3.0.0, yallist@npm:^3.0.2, yallist@npm:^3.1.1": +"yallist@npm:^3.0.0, yallist@npm:^3.0.2, yallist@npm:^3.0.3, yallist@npm:^3.1.1": version: 3.1.1 resolution: "yallist@npm:3.1.1" checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d @@ -37120,44 +42964,56 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^1.10.0, yaml@npm:^1.7.2": +"yaml@npm:^1.10.0": version: 1.10.2 resolution: "yaml@npm:1.10.2" checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f languageName: node linkType: hard -"yargs-parser@npm:20.2.4": - version: 20.2.4 - resolution: "yargs-parser@npm:20.2.4" - checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 +"yaml@npm:^1.7.2": + version: 1.7.2 + resolution: "yaml@npm:1.7.2" + dependencies: + "@babel/runtime": ^7.6.3 + checksum: 250e743ebaa0db3b5f3854d191ffb70c1aaa85397b16fa58a91475036b45a31ff73deefac00a06df9eab8cba7ae6533d6264c11e3e9a31a92501e92e2b37206a + languageName: node + linkType: hard + +"yargs-parser@npm:13.1.2, yargs-parser@npm:^13.1.2": + version: 13.1.2 + resolution: "yargs-parser@npm:13.1.2" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: c8bb6f44d39a4acd94462e96d4e85469df865de6f4326e0ab1ac23ae4a835e5dd2ddfe588317ebf80c3a7e37e741bd5cb0dc8d92bcc5812baefb7df7c885e86b languageName: node linkType: hard -"yargs-parser@npm:20.x, yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.9": +"yargs-parser@npm:20.x, yargs-parser@npm:^20.2.9": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 languageName: node linkType: hard -"yargs-parser@npm:^13.1.2": - version: 13.1.2 - resolution: "yargs-parser@npm:13.1.2" +"yargs-parser@npm:^13.1.1": + version: 13.1.1 + resolution: "yargs-parser@npm:13.1.1" dependencies: camelcase: ^5.0.0 decamelize: ^1.2.0 - checksum: c8bb6f44d39a4acd94462e96d4e85469df865de6f4326e0ab1ac23ae4a835e5dd2ddfe588317ebf80c3a7e37e741bd5cb0dc8d92bcc5812baefb7df7c885e86b + checksum: fa5fd27736aa423dc9a114d160dae94625f7faf19c252b8c91ac0197be9715d1dbc9b98fda893f75f182111fb6c3c0ce60c631b73859dd1a06bec07cddfb98f4 languageName: node linkType: hard "yargs-parser@npm:^15.0.1": - version: 15.0.3 - resolution: "yargs-parser@npm:15.0.3" + version: 15.0.1 + resolution: "yargs-parser@npm:15.0.1" dependencies: camelcase: ^5.0.0 decamelize: ^1.2.0 - checksum: 06611c1893fa9f1c25ae79df3c6e2edbac7c8d75257a4b55b8432cbc87ee03eda86bea0537f65b4b8a0d9684c83fa6e9ef61ef720a1e5cc8a9aa6893b54ee4c3 + checksum: 01901b674045405d7ca2b70e0c4b0fca79a4c069d49b6b0a5aaaceddd3ba67a6610e1146ee12dba1224e1956f03d7228e25fd671e7d766fccfbc8e5975bf39f0 languageName: node linkType: hard @@ -37171,6 +43027,13 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^20.2.2": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 + languageName: node + linkType: hard + "yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" @@ -37178,36 +43041,40 @@ __metadata: languageName: node linkType: hard -"yargs-unparser@npm:2.0.0": - version: 2.0.0 - resolution: "yargs-unparser@npm:2.0.0" +"yargs-unparser@npm:1.6.1": + version: 1.6.1 + resolution: "yargs-unparser@npm:1.6.1" dependencies: - camelcase: ^6.0.0 - decamelize: ^4.0.0 - flat: ^5.0.2 - is-plain-obj: ^2.1.0 - checksum: 68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 + camelcase: ^5.3.1 + decamelize: ^1.2.0 + flat: ^4.1.0 + is-plain-obj: ^1.1.0 + yargs: ^14.2.3 + checksum: dccf276df69667338c7a9f6d670f186d05150ffacfa8f4b543aed9a6b6ce8ca2afd2c23ccdb1f48c8769ad6ff4bb28451c988753d383cc07c362b787910677fe languageName: node linkType: hard -"yargs@npm:16.2.0, yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" +"yargs@npm:13.3.2, yargs@npm:^13.3.2": + version: 13.3.2 + resolution: "yargs@npm:13.3.2" dependencies: - cliui: ^7.0.2 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 + cliui: ^5.0.0 + find-up: ^3.0.0 + get-caller-file: ^2.0.1 require-directory: ^2.1.1 - string-width: ^4.2.0 - y18n: ^5.0.5 - yargs-parser: ^20.2.2 - checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + require-main-filename: ^2.0.0 + set-blocking: ^2.0.0 + string-width: ^3.0.0 + which-module: ^2.0.0 + y18n: ^4.0.0 + yargs-parser: ^13.1.2 + checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 languageName: node linkType: hard -"yargs@npm:^13.3.0, yargs@npm:^13.3.2": - version: 13.3.2 - resolution: "yargs@npm:13.3.2" +"yargs@npm:^13.3.0": + version: 13.3.0 + resolution: "yargs@npm:13.3.0" dependencies: cliui: ^5.0.0 find-up: ^3.0.0 @@ -37218,12 +43085,12 @@ __metadata: string-width: ^3.0.0 which-module: ^2.0.0 y18n: ^4.0.0 - yargs-parser: ^13.1.2 - checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 + yargs-parser: ^13.1.1 + checksum: 50aac9a7248ecbd9b5a6dd93010696e4847a3c9e23ae162d6e0caf10b236a0a90b461abaeab7678ded83dbd118538a331b4ac6fc7f5d22ec650b2e77e6403d5c languageName: node linkType: hard -"yargs@npm:^14.2.0": +"yargs@npm:^14.2.0, yargs@npm:^14.2.3": version: 14.2.3 resolution: "yargs@npm:14.2.3" dependencies: @@ -37242,7 +43109,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^15.0.2, yargs@npm:^15.1.0, yargs@npm:^15.3.1, yargs@npm:^15.4.1": +"yargs@npm:^15.0.2, yargs@npm:^15.1.0, yargs@npm:^15.4.1": version: 15.4.1 resolution: "yargs@npm:15.4.1" dependencies: @@ -37261,9 +43128,24 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.1.1, yargs@npm:^17.7.2": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" +"yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + languageName: node + linkType: hard + +"yargs@npm:^17.1.1, yargs@npm:^17.3.1": + version: 17.6.2 + resolution: "yargs@npm:17.6.2" dependencies: cliui: ^8.0.1 escalade: ^3.1.1 @@ -37272,7 +43154,7 @@ __metadata: string-width: ^4.2.3 y18n: ^5.0.5 yargs-parser: ^21.1.1 - checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 languageName: node linkType: hard @@ -37293,13 +43175,6 @@ __metadata: languageName: node linkType: hard -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 - languageName: node - linkType: hard - "yup@npm:^0.32.9": version: 0.32.11 resolution: "yup@npm:0.32.11" From 740972563b8d7bca401da96eb44699b8eb513665 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 6 Jun 2023 09:30:00 +1200 Subject: [PATCH 091/251] pin react version to ui-components --- packages/tupaia-web/package.json | 6 ++-- packages/tupaia-web/src/AppProviders.tsx | 4 +-- packages/tupaia-web/vite.config.ts | 4 +++ yarn.lock | 40 +++--------------------- 4 files changed, 12 insertions(+), 42 deletions(-) diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index e0198cb721..b3badf605c 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -38,8 +38,8 @@ "@material-ui/styles": "^4.9.10", "axios": "^1.4.0", "material-ui": "^0.18.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^16.13.1", + "react-dom": "^16.13.1", "styled-components": "^5.3.11", "vite-plugin-ejs": "^1.6.4", "vite-plugin-env-compatible": "^1.1.1" @@ -57,8 +57,6 @@ "@types/dom-to-image": "^2.6.4", "@types/downloadjs": "^1.4.3", "@types/material-ui": "^0.21.12", - "@types/react": "^18.0.28", - "@types/react-dom": "^18.0.11", "@vitejs/plugin-react": "^4.0.0", "npm-run-all": "^4.1.5", "storybook": "^7.0.18", diff --git a/packages/tupaia-web/src/AppProviders.tsx b/packages/tupaia-web/src/AppProviders.tsx index 499f70d228..7b601d34b1 100644 --- a/packages/tupaia-web/src/AppProviders.tsx +++ b/packages/tupaia-web/src/AppProviders.tsx @@ -4,14 +4,14 @@ */ import { ReactNode } from 'react'; import { - createTheme, + createMuiTheme, ThemeProvider as MuiThemeProvider, StylesProvider, } from '@material-ui/core/styles'; import CssBaseline from '@material-ui/core/CssBaseline'; import { ThemeProvider } from 'styled-components'; -const theme = createTheme(); +const theme = createMuiTheme(); export const AppProviders = ({ children }: { children: ReactNode }) => ( diff --git a/packages/tupaia-web/vite.config.ts b/packages/tupaia-web/vite.config.ts index bd2e065131..d3a038332a 100644 --- a/packages/tupaia-web/vite.config.ts +++ b/packages/tupaia-web/vite.config.ts @@ -11,7 +11,11 @@ export default defineConfig({ open: true, }, envPrefix: 'REACT_APP_', // to allow any existing REACT_APP_ env variables to be used; + define: { + global: {}, + }, resolve: { + dedupe: ['@material-ui/core', 'styled-components'], preserveSymlinks: true, // this is the fix! alias: { http: 'moduleMock.js', diff --git a/yarn.lock b/yarn.lock index 6ed454a280..ef6018ac65 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8717,14 +8717,12 @@ __metadata: "@types/dom-to-image": ^2.6.4 "@types/downloadjs": ^1.4.3 "@types/material-ui": ^0.21.12 - "@types/react": ^18.0.28 - "@types/react-dom": ^18.0.11 "@vitejs/plugin-react": ^4.0.0 axios: ^1.4.0 material-ui: ^0.18.3 npm-run-all: ^4.1.5 - react: ^18.2.0 - react-dom: ^18.2.0 + react: ^16.13.1 + react-dom: ^16.13.1 storybook: ^7.0.18 styled-components: ^5.3.11 typescript: ^5.0.2 @@ -9962,7 +9960,7 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.0.11, @types/react-dom@npm:^18.2.4": +"@types/react-dom@npm:^18.2.4": version: 18.2.4 resolution: "@types/react-dom@npm:18.2.4" dependencies: @@ -10060,7 +10058,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:>=16, @types/react@npm:^18.0.28": +"@types/react@npm:>=16": version: 18.2.8 resolution: "@types/react@npm:18.2.8" dependencies: @@ -34583,18 +34581,6 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" - dependencies: - loose-envify: ^1.1.0 - scheduler: ^0.23.0 - peerDependencies: - react: ^18.2.0 - checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc - languageName: node - linkType: hard - "react-draggable@npm:^4.4.3": version: 4.4.4 resolution: "react-draggable@npm:4.4.4" @@ -35675,15 +35661,6 @@ __metadata: languageName: node linkType: hard -"react@npm:^18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" - dependencies: - loose-envify: ^1.1.0 - checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b - languageName: node - linkType: hard - "reactstrap@npm:^5.0.0": version: 5.0.0 resolution: "reactstrap@npm:5.0.0" @@ -37308,15 +37285,6 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" - dependencies: - loose-envify: ^1.1.0 - checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a - languageName: node - linkType: hard - "schema-utils@npm:2.7.0, schema-utils@npm:^2.6.5, schema-utils@npm:^2.7.0": version: 2.7.0 resolution: "schema-utils@npm:2.7.0" From 7c45272ddbe7af251f899c8f14ecec1451d8c7b4 Mon Sep 17 00:00:00 2001 From: acdunham Date: Tue, 6 Jun 2023 09:38:28 +1200 Subject: [PATCH 092/251] Revert "WAITP-1202 Fix mismatched TS versions" This reverts commit 607d34176799187395120a3cf7652d67ddc0f9ff. --- packages/tupaia-web/package.json | 1 + packages/ui-components/package.json | 3 ++- yarn.lock | 22 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index ad93b45183..1042543a13 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -66,6 +66,7 @@ "@vitejs/plugin-react": "^4.0.0", "npm-run-all": "^4.1.5", "storybook": "^7.0.18", + "typescript": "^5.0.2", "vite": "^4.3.2", "vite-plugin-html": "^3.2.0" } diff --git a/packages/ui-components/package.json b/packages/ui-components/package.json index cbba60a707..e106c2ce00 100644 --- a/packages/ui-components/package.json +++ b/packages/ui-components/package.json @@ -63,6 +63,7 @@ "fast-glob": "^3.2.5", "react-docgen-typescript-plugin": "^1.0.5", "react-hook-form": "^6.0.6", - "react-password-strength-bar": "^0.3.3" + "react-password-strength-bar": "^0.3.3", + "typescript": "^5.0.4" } } diff --git a/yarn.lock b/yarn.lock index f617fe1f45..c856a8dbcb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7092,6 +7092,7 @@ __metadata: react-router-dom: ^6.11.2 storybook: ^7.0.18 styled-components: ^5.3.11 + typescript: ^5.0.2 vite: ^4.3.2 vite-plugin-ejs: ^1.6.4 vite-plugin-env-compatible: ^1.1.1 @@ -7176,6 +7177,7 @@ __metadata: react-table: ^7.7.0 recharts: ^1.8.5 styled-components: ^5.0.1 + typescript: ^5.0.4 xlsx: ^0.17.0 languageName: unknown linkType: soft @@ -34920,6 +34922,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.0.2, typescript@npm:^5.0.4": + version: 5.0.4 + resolution: "typescript@npm:5.0.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + languageName: node + linkType: hard + "typescript@npm:~4.8.2": version: 4.8.4 resolution: "typescript@npm:4.8.4" @@ -34940,6 +34952,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^5.0.2#~builtin, typescript@patch:typescript@^5.0.4#~builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 6a1fe9a77bb9c5176ead919cc4a1499ee63e46b4e05bf667079f11bf3a8f7887f135aa72460a4c3b016e6e6bb65a822cb8689a6d86cbfe92d22cc9f501f09213 + languageName: node + linkType: hard + "typescript@patch:typescript@~4.8.2#~builtin": version: 4.8.4 resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=7ad353" From d9a50aa2600c5b3648568054f0aa99056dd8a81b Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 6 Jun 2023 10:00:26 +1200 Subject: [PATCH 093/251] fix tupaia-web --- packages/tupaia-web/src/App.tsx | 2 +- packages/tupaia-web/src/AppProviders.tsx | 2 +- packages/tupaia-web/src/main.tsx | 6 +++--- packages/tupaia-web/vite.config.ts | 7 ++++++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 55ca040c59..94be3bcf44 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -2,7 +2,7 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - +import React from 'react'; import { Alert } from '@tupaia/ui-components'; import { AppProviders } from './AppProviders'; diff --git a/packages/tupaia-web/src/AppProviders.tsx b/packages/tupaia-web/src/AppProviders.tsx index 7b601d34b1..0b319e2274 100644 --- a/packages/tupaia-web/src/AppProviders.tsx +++ b/packages/tupaia-web/src/AppProviders.tsx @@ -2,7 +2,7 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import { ReactNode } from 'react'; +import React, { ReactNode } from 'react'; import { createMuiTheme, ThemeProvider as MuiThemeProvider, diff --git a/packages/tupaia-web/src/main.tsx b/packages/tupaia-web/src/main.tsx index 9a194afb5f..5771bac739 100644 --- a/packages/tupaia-web/src/main.tsx +++ b/packages/tupaia-web/src/main.tsx @@ -2,8 +2,8 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - -import ReactDOM from 'react-dom/client'; +import React from 'react'; +import { render as renderReactApp } from 'react-dom'; import App from './App.tsx'; -ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(); +renderReactApp(, document.getElementById('root')); diff --git a/packages/tupaia-web/vite.config.ts b/packages/tupaia-web/vite.config.ts index d3a038332a..f1b725cf9c 100644 --- a/packages/tupaia-web/vite.config.ts +++ b/packages/tupaia-web/vite.config.ts @@ -5,7 +5,12 @@ import react from '@vitejs/plugin-react'; // https://vitejs.dev/config/ export default defineConfig({ // ViteEjsPlugin is used to allow the use of EJS templates in the index.html file, for analytics scripts etc - plugins: [ViteEjsPlugin(), react()], + plugins: [ + ViteEjsPlugin(), + react({ + jsxRuntime: 'classic', + }), + ], server: { port: 8088, open: true, From f16b9518b0c3147d4bfb09bf4ed627f53df1deb8 Mon Sep 17 00:00:00 2001 From: acdunham Date: Tue, 6 Jun 2023 10:36:02 +1200 Subject: [PATCH 094/251] WAITP-1202 fix version of react-router --- packages/tupaia-web/package.json | 4 +-- yarn.lock | 52 ++++++++++++-------------------- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index b3badf605c..fe326ce64e 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -40,6 +40,8 @@ "material-ui": "^0.18.3", "react": "^16.13.1", "react-dom": "^16.13.1", + "react-router": "6.3.0", + "react-router-dom": "6.3.0", "styled-components": "^5.3.11", "vite-plugin-ejs": "^1.6.4", "vite-plugin-env-compatible": "^1.1.1" @@ -54,8 +56,6 @@ "@storybook/react": "^7.0.18", "@storybook/react-vite": "^7.0.18", "@storybook/testing-library": "^0.0.14-next.2", - "@types/dom-to-image": "^2.6.4", - "@types/downloadjs": "^1.4.3", "@types/material-ui": "^0.21.12", "@vitejs/plugin-react": "^4.0.0", "npm-run-all": "^4.1.5", diff --git a/yarn.lock b/yarn.lock index 2c3618f547..377316a6d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8714,8 +8714,6 @@ __metadata: "@storybook/react": ^7.0.18 "@storybook/react-vite": ^7.0.18 "@storybook/testing-library": ^0.0.14-next.2 - "@types/dom-to-image": ^2.6.4 - "@types/downloadjs": ^1.4.3 "@types/material-ui": ^0.21.12 "@vitejs/plugin-react": ^4.0.0 axios: ^1.4.0 @@ -8723,6 +8721,8 @@ __metadata: npm-run-all: ^4.1.5 react: ^16.13.1 react-dom: ^16.13.1 + react-router: 6.3.0 + react-router-dom: 6.3.0 storybook: ^7.0.18 styled-components: ^5.3.11 typescript: ^5.0.2 @@ -9200,20 +9200,6 @@ __metadata: languageName: node linkType: hard -"@types/dom-to-image@npm:^2.6.4": - version: 2.6.4 - resolution: "@types/dom-to-image@npm:2.6.4" - checksum: ddc8d74b944909040a6e6d9ca2feb246b50dc8c3ad908a90634fb6e46e4c438b47aa0a5df4994bd19c1d6f110eb90a15146d1c1a7b8762ab9d050f70e6de4050 - languageName: node - linkType: hard - -"@types/downloadjs@npm:^1.4.3": - version: 1.4.3 - resolution: "@types/downloadjs@npm:1.4.3" - checksum: d5b5e29399fdbb415f351fee64e7f7b3ddef0f251d2375ddaa0c16cd5c026f4a8dce1b4c76d05e019bc65c96f589d70f13512b44e54d568063fdefa0dbfd40c8 - languageName: node - linkType: hard - "@types/ejs@npm:^3.1.1": version: 3.1.2 resolution: "@types/ejs@npm:3.1.2" @@ -10002,7 +9988,7 @@ __metadata: languageName: node linkType: hard -"@types/react-router@npm:*, @types/react-router@npm:^5.1.20": +"@types/react-router@npm:*": version: 5.1.20 resolution: "@types/react-router@npm:5.1.20" dependencies: @@ -35339,6 +35325,19 @@ __metadata: languageName: node linkType: hard +"react-router-dom@npm:6.3.0, react-router-dom@npm:^6.3.0": + version: 6.3.0 + resolution: "react-router-dom@npm:6.3.0" + dependencies: + history: ^5.2.0 + react-router: 6.3.0 + peerDependencies: + react: ">=16.8" + react-dom: ">=16.8" + checksum: 77603a654f8a8dc7f65535a2e5917a65f8d9ffcb06546d28dd297e52adcc4b8a84377e0115f48dca330b080af2da3e78f29d590c89307094d36927d2b1751ec3 + languageName: node + linkType: hard + "react-router-dom@npm:^5.1.2, react-router-dom@npm:^5.2.0": version: 5.2.0 resolution: "react-router-dom@npm:5.2.0" @@ -35356,19 +35355,6 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^6.11.2, react-router-dom@npm:^6.3.0": - version: 6.11.2 - resolution: "react-router-dom@npm:6.11.2" - dependencies: - history: ^5.2.0 - react-router: 6.11.2 - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 77603a654f8a8dc7f65535a2e5917a65f8d9ffcb06546d28dd297e52adcc4b8a84377e0115f48dca330b080af2da3e78f29d590c89307094d36927d2b1751ec3 - languageName: node - linkType: hard - "react-router@npm:5.2.0": version: 5.2.0 resolution: "react-router@npm:5.2.0" @@ -35389,9 +35375,9 @@ __metadata: languageName: node linkType: hard -"react-router@npm:6.11.2, react-router@npm:^6.11.2": - version: 6.11.2 - resolution: "react-router@npm:6.11.2" +"react-router@npm:6.3.0": + version: 6.3.0 + resolution: "react-router@npm:6.3.0" dependencies: history: ^5.2.0 peerDependencies: From 5fbbd6af1dfaea52e3f717c0519bf6ff3d822d68 Mon Sep 17 00:00:00 2001 From: acdunham Date: Tue, 6 Jun 2023 11:22:04 +1200 Subject: [PATCH 095/251] WAITP-1202 updated routes for v6.3 --- packages/tupaia-web/package.json | 2 + packages/tupaia-web/src/App.tsx | 5 +- packages/tupaia-web/src/Router.tsx | 59 +++++++------------ packages/tupaia-web/src/pages/LandingPage.tsx | 2 +- packages/tupaia-web/src/pages/LoginForm.tsx | 2 + .../src/pages/PasswordResetForm.tsx | 2 + packages/tupaia-web/src/pages/Project.tsx | 4 +- .../tupaia-web/src/pages/RegisterForm.tsx | 2 + .../src/pages/RequestAccessForm.tsx | 2 + .../tupaia-web/src/pages/VerifyEmailForm.tsx | 1 + packages/tupaia-web/tsconfig.json | 20 +++++-- yarn.lock | 4 +- 12 files changed, 53 insertions(+), 52 deletions(-) diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index fe326ce64e..9b7b4622fc 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -57,6 +57,8 @@ "@storybook/react-vite": "^7.0.18", "@storybook/testing-library": "^0.0.14-next.2", "@types/material-ui": "^0.21.12", + "@types/react": "^18.2.8", + "@types/react-dom": "^18.2.4", "@vitejs/plugin-react": "^4.0.0", "npm-run-all": "^4.1.5", "storybook": "^7.0.18", diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 87bee6629c..0ff12be8d2 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -2,15 +2,14 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import React from 'react'; -import { RouterProvider } from 'react-router'; +import React from 'react'; import { AppStyleProviders } from './AppStyleProviders'; import { Router } from './Router'; const App = () => { return ( - + ); }; diff --git a/packages/tupaia-web/src/Router.tsx b/packages/tupaia-web/src/Router.tsx index b8dad85f36..37eda4d1a5 100644 --- a/packages/tupaia-web/src/Router.tsx +++ b/packages/tupaia-web/src/Router.tsx @@ -2,8 +2,8 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - -import { Navigate, createBrowserRouter } from 'react-router-dom'; +import React from 'react'; +import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'; import { LandingPage, LoginForm, @@ -15,40 +15,21 @@ import { } from './pages'; import { DEFAULT_URL } from './constants'; -const Routes = [ - { - path: '/', - element: , // This is to redirect from no URL to the default project URL. Some logic will also have to be added in here to render the projects modal in this case as well - }, - // The below user pages will actually be modals, which will be done when each view is created. There is an example at: https://github.com/remix-run/react-router/tree/dev/examples/modal - { - path: '/register', - element: , - }, - { - path: '/login', - element: , - }, - { - path: '/reset-password', - element: , - }, - { - path: '/request-access', - element: , - }, - { - path: '/verify-email', - element: , - }, - { - path: '/:landingPageUrlSegment', - element: , - }, - { - path: '/:projectCode/:entityCode/:dashboardCode?', - element: , - }, -]; - -export const Router = createBrowserRouter(Routes); +export const Router = () => ( + + + } /> + {/** + * The below user pages will actually be modals, which will be done when each view is created. There is an example at: https://github.com/remix-run/react-router/tree/dev/examples/modal + */} + } /> + } /> + } /> + } /> + } /> + } /> + {/** react-router v 6.4 an above dob't work in our setup. Which means we need to handle the routes with a base project page using splats (catchall routes), since version 6.3 doesn't support optional segments */} + } /> + + +); diff --git a/packages/tupaia-web/src/pages/LandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage.tsx index dc63fafb2d..1d650ea6a3 100644 --- a/packages/tupaia-web/src/pages/LandingPage.tsx +++ b/packages/tupaia-web/src/pages/LandingPage.tsx @@ -2,7 +2,7 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - +import React from 'react'; import { useParams } from 'react-router-dom'; export const LandingPage = () => { diff --git a/packages/tupaia-web/src/pages/LoginForm.tsx b/packages/tupaia-web/src/pages/LoginForm.tsx index 7ef5db9707..8fff11ced8 100644 --- a/packages/tupaia-web/src/pages/LoginForm.tsx +++ b/packages/tupaia-web/src/pages/LoginForm.tsx @@ -2,6 +2,8 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +import React from 'react'; + export const LoginForm = () => { return
LoginForm
; }; diff --git a/packages/tupaia-web/src/pages/PasswordResetForm.tsx b/packages/tupaia-web/src/pages/PasswordResetForm.tsx index 6ac2a341e6..23ac65c155 100644 --- a/packages/tupaia-web/src/pages/PasswordResetForm.tsx +++ b/packages/tupaia-web/src/pages/PasswordResetForm.tsx @@ -2,6 +2,8 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +import React from 'react'; + export const PasswordResetForm = () => { return
PasswordResetForm
; }; diff --git a/packages/tupaia-web/src/pages/Project.tsx b/packages/tupaia-web/src/pages/Project.tsx index 31eff2df2b..58624d1348 100644 --- a/packages/tupaia-web/src/pages/Project.tsx +++ b/packages/tupaia-web/src/pages/Project.tsx @@ -2,12 +2,12 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - +import React from 'react'; import { useParams } from 'react-router-dom'; export const Project = () => { // Use these to fetch the project and any other entity info you might need - const { projectCode, entityCode, dashboardCode } = useParams(); + const { projectCode, entityCode, '*': dashboardCode } = useParams(); return (
diff --git a/packages/tupaia-web/src/pages/RegisterForm.tsx b/packages/tupaia-web/src/pages/RegisterForm.tsx index 962b28ff4f..d13fd63870 100644 --- a/packages/tupaia-web/src/pages/RegisterForm.tsx +++ b/packages/tupaia-web/src/pages/RegisterForm.tsx @@ -2,6 +2,8 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +import React from 'react'; + export const RegisterForm = () => { return
RegisterForm
; }; diff --git a/packages/tupaia-web/src/pages/RequestAccessForm.tsx b/packages/tupaia-web/src/pages/RequestAccessForm.tsx index ef3f5edb96..f40ceaa61a 100644 --- a/packages/tupaia-web/src/pages/RequestAccessForm.tsx +++ b/packages/tupaia-web/src/pages/RequestAccessForm.tsx @@ -2,6 +2,8 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +import React from 'react'; + export const RequestAccessForm = () => { return
RequestAccessForm
; }; diff --git a/packages/tupaia-web/src/pages/VerifyEmailForm.tsx b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx index 92fce15524..456dc92b09 100644 --- a/packages/tupaia-web/src/pages/VerifyEmailForm.tsx +++ b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx @@ -2,6 +2,7 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +import React from 'react'; export const VerifyEmailForm = () => { return
VerifyEmailForm
; diff --git a/packages/tupaia-web/tsconfig.json b/packages/tupaia-web/tsconfig.json index c81ef9f382..4af7feedfc 100644 --- a/packages/tupaia-web/tsconfig.json +++ b/packages/tupaia-web/tsconfig.json @@ -1,24 +1,32 @@ { "compilerOptions": { "target": "ESNext", - "lib": ["DOM", "DOM.Iterable", "ESNext"], + "lib": [ + "DOM", + "DOM.Iterable", + "ESNext" + ], "module": "ESNext", "skipLibCheck": true, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx", - + "jsx": "react", /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] + "include": [ + "src" + ], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] } diff --git a/yarn.lock b/yarn.lock index 377316a6d0..87d52ea2d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8715,6 +8715,8 @@ __metadata: "@storybook/react-vite": ^7.0.18 "@storybook/testing-library": ^0.0.14-next.2 "@types/material-ui": ^0.21.12 + "@types/react": ^18.2.8 + "@types/react-dom": ^18.2.4 "@vitejs/plugin-react": ^4.0.0 axios: ^1.4.0 material-ui: ^0.18.3 @@ -10044,7 +10046,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:>=16": +"@types/react@npm:>=16, @types/react@npm:^18.2.8": version: 18.2.8 resolution: "@types/react@npm:18.2.8" dependencies: From 05a78dadcde089138bcb5bec20792e18ee220c90 Mon Sep 17 00:00:00 2001 From: acdunham Date: Tue, 6 Jun 2023 11:58:48 +1200 Subject: [PATCH 096/251] WAITP-1202 fix config and types version --- packages/tupaia-web/package.json | 2 -- packages/tupaia-web/src/Router.tsx | 8 +++++++- packages/tupaia-web/vite.config.ts | 20 +++++++++++++++----- yarn.lock | 4 +--- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index 9b7b4622fc..fe326ce64e 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -57,8 +57,6 @@ "@storybook/react-vite": "^7.0.18", "@storybook/testing-library": "^0.0.14-next.2", "@types/material-ui": "^0.21.12", - "@types/react": "^18.2.8", - "@types/react-dom": "^18.2.4", "@vitejs/plugin-react": "^4.0.0", "npm-run-all": "^4.1.5", "storybook": "^7.0.18", diff --git a/packages/tupaia-web/src/Router.tsx b/packages/tupaia-web/src/Router.tsx index 37eda4d1a5..319fcecffb 100644 --- a/packages/tupaia-web/src/Router.tsx +++ b/packages/tupaia-web/src/Router.tsx @@ -15,6 +15,12 @@ import { } from './pages'; import { DEFAULT_URL } from './constants'; +/** + * This Router is using [version 6.3]{@link https://reactrouter.com/en/v6.3.0}, as later versions are not supported by our TS setup. See [this issue here]{@link https://github.com/remix-run/react-router/discussions/8364} + * This means the newer 'createBrowserRouter' and 'RouterProvider' can't be used here. + * + * **/ + export const Router = () => ( @@ -28,7 +34,7 @@ export const Router = () => ( } /> } /> } /> - {/** react-router v 6.4 an above dob't work in our setup. Which means we need to handle the routes with a base project page using splats (catchall routes), since version 6.3 doesn't support optional segments */} + {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} } /> diff --git a/packages/tupaia-web/vite.config.ts b/packages/tupaia-web/vite.config.ts index f1b725cf9c..b37e9cc7b7 100644 --- a/packages/tupaia-web/vite.config.ts +++ b/packages/tupaia-web/vite.config.ts @@ -2,8 +2,7 @@ import { defineConfig } from 'vite'; import { ViteEjsPlugin } from 'vite-plugin-ejs'; import react from '@vitejs/plugin-react'; -// https://vitejs.dev/config/ -export default defineConfig({ +const baseConfig = { // ViteEjsPlugin is used to allow the use of EJS templates in the index.html file, for analytics scripts etc plugins: [ ViteEjsPlugin(), @@ -16,9 +15,6 @@ export default defineConfig({ open: true, }, envPrefix: 'REACT_APP_', // to allow any existing REACT_APP_ env variables to be used; - define: { - global: {}, - }, resolve: { dedupe: ['@material-ui/core', 'styled-components'], preserveSymlinks: true, // this is the fix! @@ -29,4 +25,18 @@ export default defineConfig({ ['node-fetch']: 'moduleMock.js', }, }, +}; + +// https://vitejs.dev/config/ +export default defineConfig(({ command }) => { + // Dev specific config. This is because `define.global` breaks the build + if (command === 'serve') { + return { + ...baseConfig, + define: { + global: {}, + }, + }; + } + return baseConfig; }); diff --git a/yarn.lock b/yarn.lock index 87d52ea2d5..377316a6d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8715,8 +8715,6 @@ __metadata: "@storybook/react-vite": ^7.0.18 "@storybook/testing-library": ^0.0.14-next.2 "@types/material-ui": ^0.21.12 - "@types/react": ^18.2.8 - "@types/react-dom": ^18.2.4 "@vitejs/plugin-react": ^4.0.0 axios: ^1.4.0 material-ui: ^0.18.3 @@ -10046,7 +10044,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:>=16, @types/react@npm:^18.2.8": +"@types/react@npm:>=16": version: 18.2.8 resolution: "@types/react@npm:18.2.8" dependencies: From 76c2a9e90631e35ed974fd194bd3c270be967c01 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 6 Jun 2023 12:06:59 +1200 Subject: [PATCH 097/251] add react-hook form --- packages/tupaia-web/package.json | 1 + packages/tupaia-web/src/App.tsx | 6 +++--- yarn.lock | 15 ++++++++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index b3badf605c..5029438515 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -40,6 +40,7 @@ "material-ui": "^0.18.3", "react": "^16.13.1", "react-dom": "^16.13.1", + "react-hook-form": "^7.44.3", "styled-components": "^5.3.11", "vite-plugin-ejs": "^1.6.4", "vite-plugin-env-compatible": "^1.1.1" diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 94be3bcf44..5a56e925b8 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -4,14 +4,14 @@ */ import React from 'react'; import { Alert } from '@tupaia/ui-components'; -import { AppProviders } from './AppProviders'; +import { AppStyleProviders } from './AppStyleProviders.tsx'; const App = () => { return ( - + Alert

Tupaia web

-
+ ); }; diff --git a/yarn.lock b/yarn.lock index ef6018ac65..d7f60dcdb2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8723,6 +8723,7 @@ __metadata: npm-run-all: ^4.1.5 react: ^16.13.1 react-dom: ^16.13.1 + react-hook-form: ^7.44.3 storybook: ^7.0.18 styled-components: ^5.3.11 typescript: ^5.0.2 @@ -8810,7 +8811,6 @@ __metadata: react-table: ^7.7.0 recharts: ^1.8.5 styled-components: ^5.0.1 - typescript: ^5.0.4 xlsx: ^0.17.0 languageName: unknown linkType: soft @@ -34693,6 +34693,15 @@ __metadata: languageName: node linkType: hard +"react-hook-form@npm:^7.44.3": + version: 7.44.3 + resolution: "react-hook-form@npm:7.44.3" + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + checksum: 8dc97e705d28d842c60fd79b0f07b8b045c458c234e3bf422baab87a844d0ebecbdf3e349538eaaa5c12366cd85169f60a52ed84dd31cdd99729899e424548bf + languageName: node + linkType: hard + "react-icon-base@npm:2.1.0": version: 2.1.0 resolution: "react-icon-base@npm:2.1.0" @@ -40622,7 +40631,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.0.2, typescript@npm:^5.0.4": +"typescript@npm:^5.0.2": version: 5.1.3 resolution: "typescript@npm:5.1.3" bin: @@ -40652,7 +40661,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^5.0.2#~builtin, typescript@patch:typescript@^5.0.4#~builtin": +"typescript@patch:typescript@^5.0.2#~builtin": version: 5.1.3 resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin::version=5.1.3&hash=7ad353" bin: From 2c311886a270f258f5441c86c64bb5042422ce88 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 6 Jun 2023 12:47:30 +1200 Subject: [PATCH 098/251] add react hook form --- packages/tupaia-web/.storybook/preview.tsx | 6 +- packages/tupaia-web/package.json | 1 + packages/tupaia-web/src/App.tsx | 6 +- packages/tupaia-web/src/AppProviders.tsx | 10 ++- packages/tupaia-web/src/pages/LandingPage.tsx | 2 +- packages/tupaia-web/src/pages/LoginForm.tsx | 80 ++++++++++++++----- packages/tupaia-web/src/pages/Project.tsx | 2 +- packages/tupaia-web/src/pages/index.ts | 4 +- yarn.lock | 29 +++++++ 9 files changed, 107 insertions(+), 33 deletions(-) diff --git a/packages/tupaia-web/.storybook/preview.tsx b/packages/tupaia-web/.storybook/preview.tsx index 763b4020eb..d9ab0d9944 100644 --- a/packages/tupaia-web/.storybook/preview.tsx +++ b/packages/tupaia-web/.storybook/preview.tsx @@ -1,6 +1,6 @@ import React from 'react'; import type { Preview } from '@storybook/react'; -import { AppStyleProviders } from '../src/AppStyleProviders'; +import { AppProviders } from '../src/AppProviders'; import { DARK_BLUE, WHITE } from '../src/theme'; const preview: Preview = { @@ -23,9 +23,9 @@ const preview: Preview = { decorators: [ Story => { return ( - + - + ); }, ], diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index 82de519453..eb8ca0e691 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -41,6 +41,7 @@ "react": "^16.13.1", "react-dom": "^16.13.1", "react-hook-form": "^7.44.3", + "react-query": "^3.39.3", "react-router": "6.3.0", "react-router-dom": "6.3.0", "styled-components": "^5.3.11", diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 0ff12be8d2..8ff9b76bc1 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -3,14 +3,14 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { AppStyleProviders } from './AppStyleProviders'; +import { AppProviders } from './AppProviders.tsx'; import { Router } from './Router'; const App = () => { return ( - + - + ); }; diff --git a/packages/tupaia-web/src/AppProviders.tsx b/packages/tupaia-web/src/AppProviders.tsx index 9e8d21f8ce..bb9d7cf340 100644 --- a/packages/tupaia-web/src/AppProviders.tsx +++ b/packages/tupaia-web/src/AppProviders.tsx @@ -3,6 +3,7 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React, { ReactNode } from 'react'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { createMuiTheme, ThemeProvider as MuiThemeProvider, @@ -12,13 +13,16 @@ import CssBaseline from '@material-ui/core/CssBaseline'; import { ThemeProvider } from 'styled-components'; const theme = createMuiTheme(); +const queryClient = new QueryClient(); -export const AppStyleProviders = ({ children }: { children: ReactNode }) => ( +export const AppProviders = ({ children }: { children: ReactNode }) => ( - - {children} + + + {children} + diff --git a/packages/tupaia-web/src/pages/LandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage.tsx index 1d650ea6a3..40e2cb7121 100644 --- a/packages/tupaia-web/src/pages/LandingPage.tsx +++ b/packages/tupaia-web/src/pages/LandingPage.tsx @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ import React from 'react'; import { useParams } from 'react-router-dom'; diff --git a/packages/tupaia-web/src/pages/LoginForm.tsx b/packages/tupaia-web/src/pages/LoginForm.tsx index a81ea41dab..045f7b721a 100644 --- a/packages/tupaia-web/src/pages/LoginForm.tsx +++ b/packages/tupaia-web/src/pages/LoginForm.tsx @@ -1,12 +1,13 @@ /* * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { Form } from 'react-router-dom'; +import { useMutation, useQueryClient } from 'react-query'; +import { useForm } from 'react-hook-form'; import styled from 'styled-components'; import { TextField, Button } from '@tupaia/ui-components'; -import { get, post } from '../api'; +import { post } from '../api'; const Container = styled.div` background: #2e2f33; @@ -42,34 +43,73 @@ const FormContainer = styled.div` margin-top: 1rem; `; -export async function action({ request }) { - const formData = await request.formData(); - const { email, password } = Object.fromEntries(formData); +const useLogin = () => { + const queryClient = useQueryClient(); - await post('login', { - data: { - emailAddress: email, - password, - deviceName: window.navigator.userAgent, + const query = useMutation( + data => { + console.log('data', data); + return post('login', { + data: { + emailAddress: data.email, + password: data.password, + deviceName: window.navigator.userAgent, + }, + }); }, - }); + { + onSuccess: () => { + queryClient.clear(); + }, + }, + ); - const user = get('getUser'); - console.log('user', user); - return user; -} + return query; +}; export const LoginForm = () => { + const { + handleSubmit, + register, + formState: { errors }, + } = useForm(); + const { mutate: login } = useLogin(); + + console.log('errors', errors); + return ( Log in Enter your details below to log in -
- - + + + + - +
); diff --git a/packages/tupaia-web/src/pages/Project.tsx b/packages/tupaia-web/src/pages/Project.tsx index 58624d1348..9fe8fa7cbe 100644 --- a/packages/tupaia-web/src/pages/Project.tsx +++ b/packages/tupaia-web/src/pages/Project.tsx @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ import React from 'react'; import { useParams } from 'react-router-dom'; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index dbdeaa04ba..d7390c1adb 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -3,9 +3,9 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export { LandingPage } from './LandingPage'; -export { LoginForm, action as loginAction } from './LoginForm'; +export { LoginForm } from './LoginForm'; export { PasswordResetForm } from './PasswordResetForm'; -export { Project, loader as projectLoader } from './Project'; +export { Project } from './Project'; export { RegisterForm } from './RegisterForm'; export { RequestAccessForm } from './RequestAccessForm'; export { VerifyEmailForm } from './VerifyEmailForm'; diff --git a/yarn.lock b/yarn.lock index 377316a6d0..733fa3115e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8721,6 +8721,8 @@ __metadata: npm-run-all: ^4.1.5 react: ^16.13.1 react-dom: ^16.13.1 + react-hook-form: ^7.44.3 + react-query: ^3.39.3 react-router: 6.3.0 react-router-dom: 6.3.0 storybook: ^7.0.18 @@ -34679,6 +34681,15 @@ __metadata: languageName: node linkType: hard +"react-hook-form@npm:^7.44.3": + version: 7.44.3 + resolution: "react-hook-form@npm:7.44.3" + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + checksum: 8dc97e705d28d842c60fd79b0f07b8b045c458c234e3bf422baab87a844d0ebecbdf3e349538eaaa5c12366cd85169f60a52ed84dd31cdd99729899e424548bf + languageName: node + linkType: hard + "react-icon-base@npm:2.1.0": version: 2.1.0 resolution: "react-icon-base@npm:2.1.0" @@ -35230,6 +35241,24 @@ __metadata: languageName: node linkType: hard +"react-query@npm:^3.39.3": + version: 3.39.3 + resolution: "react-query@npm:3.39.3" + dependencies: + "@babel/runtime": ^7.5.5 + broadcast-channel: ^3.4.1 + match-sorter: ^6.0.2 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: d2de6a0992dbf039ff2de564de1ae6361f8ac7310159dae42ec16f833b79c05caedced187235c42373ac331cc5f2fe9e2b31b14ae75a815e86d86e30ca9887ad + languageName: node + linkType: hard + "react-redux@npm:^5.0.6, react-redux@npm:^5.0.7": version: 5.1.2 resolution: "react-redux@npm:5.1.2" From d1065d1a7a4d559f7036d6e39dc58c935512db9d Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 6 Jun 2023 14:21:35 +1200 Subject: [PATCH 099/251] fetch initial data --- packages/tupaia-web/src/App.tsx | 13 ++- packages/tupaia-web/src/AppProviders.tsx | 9 +- .../tupaia-web/src/api/mutations/index.ts | 1 + .../tupaia-web/src/api/mutations/useLogin.ts | 28 +++++ packages/tupaia-web/src/api/queries/index.ts | 8 ++ .../tupaia-web/src/api/queries/useProjects.ts | 11 ++ .../tupaia-web/src/api/queries/useUser.ts | 11 ++ .../src/components/forms/TextField.tsx | 31 +++++ packages/tupaia-web/src/main.tsx | 8 +- packages/tupaia-web/src/pages/LoginForm.tsx | 109 ++++++++---------- 10 files changed, 162 insertions(+), 67 deletions(-) create mode 100644 packages/tupaia-web/src/api/mutations/useLogin.ts create mode 100644 packages/tupaia-web/src/api/queries/useProjects.ts create mode 100644 packages/tupaia-web/src/api/queries/useUser.ts create mode 100644 packages/tupaia-web/src/components/forms/TextField.tsx diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 8ff9b76bc1..6e00ed4000 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -3,15 +3,16 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { AppProviders } from './AppProviders.tsx'; import { Router } from './Router'; +import { useUser } from './api/queries/useUser.ts'; +import { useProjects } from './api/queries'; const App = () => { - return ( - - - - ); + const useQ = useUser(); + const projectQ = useProjects(); + console.log('useQ', useQ); + console.log('projectQ', projectQ); + return ; }; export default App; diff --git a/packages/tupaia-web/src/AppProviders.tsx b/packages/tupaia-web/src/AppProviders.tsx index bb9d7cf340..4727f1f873 100644 --- a/packages/tupaia-web/src/AppProviders.tsx +++ b/packages/tupaia-web/src/AppProviders.tsx @@ -13,7 +13,14 @@ import CssBaseline from '@material-ui/core/CssBaseline'; import { ThemeProvider } from 'styled-components'; const theme = createMuiTheme(); -const queryClient = new QueryClient(); + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + refetchOnWindowFocus: false, // default: true + }, + }, +}); export const AppProviders = ({ children }: { children: ReactNode }) => ( diff --git a/packages/tupaia-web/src/api/mutations/index.ts b/packages/tupaia-web/src/api/mutations/index.ts index 2700aabe4e..f30f119bab 100644 --- a/packages/tupaia-web/src/api/mutations/index.ts +++ b/packages/tupaia-web/src/api/mutations/index.ts @@ -4,3 +4,4 @@ * */ +export * from './useLogin'; diff --git a/packages/tupaia-web/src/api/mutations/useLogin.ts b/packages/tupaia-web/src/api/mutations/useLogin.ts new file mode 100644 index 0000000000..11e93647d8 --- /dev/null +++ b/packages/tupaia-web/src/api/mutations/useLogin.ts @@ -0,0 +1,28 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + */ + +import { useMutation, useQueryClient } from 'react-query'; +import { post } from '../api.ts'; + +export const useLogin = () => { + const queryClient = useQueryClient(); + + return useMutation( + ({ email, password }) => { + return post('login', { + data: { + emailAddress: email, + password, + deviceName: window.navigator.userAgent, + }, + }); + }, + { + onSuccess: () => { + queryClient.invalidateQueries(); + }, + }, + ); +}; diff --git a/packages/tupaia-web/src/api/queries/index.ts b/packages/tupaia-web/src/api/queries/index.ts index e69de29bb2..37e998e7f9 100644 --- a/packages/tupaia-web/src/api/queries/index.ts +++ b/packages/tupaia-web/src/api/queries/index.ts @@ -0,0 +1,8 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * + */ + +export * from './useProjects.ts'; +export * from './useUser.ts'; diff --git a/packages/tupaia-web/src/api/queries/useProjects.ts b/packages/tupaia-web/src/api/queries/useProjects.ts new file mode 100644 index 0000000000..bc5309839e --- /dev/null +++ b/packages/tupaia-web/src/api/queries/useProjects.ts @@ -0,0 +1,11 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + */ + +import { useQuery } from 'react-query'; +import { get } from '../api.ts'; + +export const useProjects = () => { + return useQuery('projects', () => get('projects')); +}; diff --git a/packages/tupaia-web/src/api/queries/useUser.ts b/packages/tupaia-web/src/api/queries/useUser.ts new file mode 100644 index 0000000000..a76b12a0eb --- /dev/null +++ b/packages/tupaia-web/src/api/queries/useUser.ts @@ -0,0 +1,11 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + */ + +import { useQuery } from 'react-query'; +import { get } from '../api.ts'; + +export const useUser = () => { + return useQuery('getUser', () => get('getUser')); +}; diff --git a/packages/tupaia-web/src/components/forms/TextField.tsx b/packages/tupaia-web/src/components/forms/TextField.tsx new file mode 100644 index 0000000000..b4de6d2cd5 --- /dev/null +++ b/packages/tupaia-web/src/components/forms/TextField.tsx @@ -0,0 +1,31 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import MuiTextField, { TextFieldProps } from '@material-ui/core/TextField'; +import styled from 'styled-components'; + +const StyledTextField = styled(MuiTextField)` + display: flex; + width: 100%; + margin-bottom: 1rem; + + .MuiFormLabel-root { + color: #9ba0a6 !important; + } + + .MuiInputBase-root.MuiInput-underline { + &:before, + &:after { + border-bottom: 1px solid #9ba0a6 !important; + } + } + + .MuiInputBase-input { + color: white; + font-size: 14px; + line-height: 18px; + } +`; +export const TextField = props => ; diff --git a/packages/tupaia-web/src/main.tsx b/packages/tupaia-web/src/main.tsx index 5771bac739..c4a2c4bdf8 100644 --- a/packages/tupaia-web/src/main.tsx +++ b/packages/tupaia-web/src/main.tsx @@ -5,5 +5,11 @@ import React from 'react'; import { render as renderReactApp } from 'react-dom'; import App from './App.tsx'; +import { AppProviders } from './AppProviders.tsx'; -renderReactApp(, document.getElementById('root')); +renderReactApp( + + + , + document.getElementById('root'), +); diff --git a/packages/tupaia-web/src/pages/LoginForm.tsx b/packages/tupaia-web/src/pages/LoginForm.tsx index 045f7b721a..455341ac0f 100644 --- a/packages/tupaia-web/src/pages/LoginForm.tsx +++ b/packages/tupaia-web/src/pages/LoginForm.tsx @@ -3,11 +3,11 @@ * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { useMutation, useQueryClient } from 'react-query'; import { useForm } from 'react-hook-form'; import styled from 'styled-components'; -import { TextField, Button } from '@tupaia/ui-components'; -import { post } from '../api'; +import { Button } from '@tupaia/ui-components'; +import { useLogin } from '../api/mutations'; +import { TextField } from '../components/forms/TextField.tsx'; const Container = styled.div` background: #2e2f33; @@ -39,78 +39,69 @@ const Text = styled.h2` line-height: 18px; `; -const FormContainer = styled.div` - margin-top: 1rem; +const LinkText = styled.div` + font-weight: 400; + font-size: 11px; + line-height: 15px; `; -const useLogin = () => { - const queryClient = useQueryClient(); +const StyledForm = styled.form` + margin-top: 1rem; + width: 340px; + max-width: 100%; - const query = useMutation( - data => { - console.log('data', data); - return post('login', { - data: { - emailAddress: data.email, - password: data.password, - deviceName: window.navigator.userAgent, - }, - }); - }, - { - onSuccess: () => { - queryClient.clear(); - }, - }, - ); + button { + width: 100%; + margin-top: 1rem; + margin-bottom: 1rem; + text-transform: none; + } +`; - return query; -}; export const LoginForm = () => { const { handleSubmit, register, formState: { errors }, } = useForm(); - const { mutate: login } = useLogin(); - - console.log('errors', errors); + const { mutate: login, isLoading } = useLogin(); return ( Log in Enter your details below to log in - -
- - - - - -
+ + + + Forgot password? + + Don't have an account? Register here +
); }; From b589a0b107b86bd536c518e2cba32cbd1fea111e Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Tue, 6 Jun 2023 14:30:45 +1200 Subject: [PATCH 100/251] Waitp 1200 setup mui (#4615) * WAITP-1200 initial MUI setup * WAITP-1200 change file name as per base branch * WAITP-1200 Update styled-components version and config, + theme --- packages/tupaia-web/package.json | 5 +- packages/tupaia-web/src/AppProviders.tsx | 26 +++++++-- packages/tupaia-web/tsconfig.json | 20 +++++-- packages/tupaia-web/vite.config.ts | 4 +- yarn.lock | 74 +----------------------- 5 files changed, 39 insertions(+), 90 deletions(-) diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index b3badf605c..1b3a7771da 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -37,10 +37,9 @@ "@material-ui/lab": "^4.0.0-alpha.57", "@material-ui/styles": "^4.9.10", "axios": "^1.4.0", - "material-ui": "^0.18.3", "react": "^16.13.1", "react-dom": "^16.13.1", - "styled-components": "^5.3.11", + "styled-components": "^5.1.0", "vite-plugin-ejs": "^1.6.4", "vite-plugin-env-compatible": "^1.1.1" }, @@ -54,8 +53,6 @@ "@storybook/react": "^7.0.18", "@storybook/react-vite": "^7.0.18", "@storybook/testing-library": "^0.0.14-next.2", - "@types/dom-to-image": "^2.6.4", - "@types/downloadjs": "^1.4.3", "@types/material-ui": "^0.21.12", "@vitejs/plugin-react": "^4.0.0", "npm-run-all": "^4.1.5", diff --git a/packages/tupaia-web/src/AppProviders.tsx b/packages/tupaia-web/src/AppProviders.tsx index 0b319e2274..47e2ca1f68 100644 --- a/packages/tupaia-web/src/AppProviders.tsx +++ b/packages/tupaia-web/src/AppProviders.tsx @@ -4,22 +4,36 @@ */ import React, { ReactNode } from 'react'; import { + StylesProvider, createMuiTheme, ThemeProvider as MuiThemeProvider, - StylesProvider, } from '@material-ui/core/styles'; import CssBaseline from '@material-ui/core/CssBaseline'; import { ThemeProvider } from 'styled-components'; -const theme = createMuiTheme(); +// Base theme overrides. Any extra overrides should be added here, as needed. +const theme = createMuiTheme({ + palette: { + type: 'dark', + primary: { + main: '#0296c5', // Main blue (as seen on primary buttons) + }, + secondary: { + main: '##ee6230', // Tupaia Orange + }, + background: { + default: '#262834', // Dark blue background + }, + }, +}); export const AppProviders = ({ children }: { children: ReactNode }) => ( - - + + {children} - - + + ); diff --git a/packages/tupaia-web/tsconfig.json b/packages/tupaia-web/tsconfig.json index c81ef9f382..4af7feedfc 100644 --- a/packages/tupaia-web/tsconfig.json +++ b/packages/tupaia-web/tsconfig.json @@ -1,24 +1,32 @@ { "compilerOptions": { "target": "ESNext", - "lib": ["DOM", "DOM.Iterable", "ESNext"], + "lib": [ + "DOM", + "DOM.Iterable", + "ESNext" + ], "module": "ESNext", "skipLibCheck": true, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx", - + "jsx": "react", /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] + "include": [ + "src" + ], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] } diff --git a/packages/tupaia-web/vite.config.ts b/packages/tupaia-web/vite.config.ts index f1b725cf9c..66ac1090d2 100644 --- a/packages/tupaia-web/vite.config.ts +++ b/packages/tupaia-web/vite.config.ts @@ -20,8 +20,8 @@ export default defineConfig({ global: {}, }, resolve: { - dedupe: ['@material-ui/core', 'styled-components'], - preserveSymlinks: true, // this is the fix! + preserveSymlinks: true, + dedupe: ['@material-ui/core', 'react', 'react-dom', 'styled-components'], // deduplicate these packages to avoid duplicate copies of them in the bundle, which might happen and cause errors with ui component packages alias: { http: 'moduleMock.js', winston: 'moduleMock.js', diff --git a/yarn.lock b/yarn.lock index ef6018ac65..3dea7e0943 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4121,15 +4121,6 @@ __metadata: languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^1.1.0": - version: 1.2.1 - resolution: "@emotion/is-prop-valid@npm:1.2.1" - dependencies: - "@emotion/memoize": ^0.8.1 - checksum: 8f42dc573a3fad79b021479becb639b8fe3b60bdd1081a775d32388bca418ee53074c7602a4c845c5f75fa6831eb1cbdc4d208cc0299f57014ed3a02abcad16a - languageName: node - linkType: hard - "@emotion/memoize@npm:0.7.4": version: 0.7.4 resolution: "@emotion/memoize@npm:0.7.4" @@ -4137,13 +4128,6 @@ __metadata: languageName: node linkType: hard -"@emotion/memoize@npm:^0.8.1": - version: 0.8.1 - resolution: "@emotion/memoize@npm:0.8.1" - checksum: a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 - languageName: node - linkType: hard - "@emotion/serialize@npm:^0.11.15, @emotion/serialize@npm:^0.11.16": version: 0.11.16 resolution: "@emotion/serialize@npm:0.11.16" @@ -8714,17 +8698,14 @@ __metadata: "@storybook/react": ^7.0.18 "@storybook/react-vite": ^7.0.18 "@storybook/testing-library": ^0.0.14-next.2 - "@types/dom-to-image": ^2.6.4 - "@types/downloadjs": ^1.4.3 "@types/material-ui": ^0.21.12 "@vitejs/plugin-react": ^4.0.0 axios: ^1.4.0 - material-ui: ^0.18.3 npm-run-all: ^4.1.5 react: ^16.13.1 react-dom: ^16.13.1 storybook: ^7.0.18 - styled-components: ^5.3.11 + styled-components: ^5.1.0 typescript: ^5.0.2 vite: ^4.3.2 vite-plugin-ejs: ^1.6.4 @@ -9200,20 +9181,6 @@ __metadata: languageName: node linkType: hard -"@types/dom-to-image@npm:^2.6.4": - version: 2.6.4 - resolution: "@types/dom-to-image@npm:2.6.4" - checksum: ddc8d74b944909040a6e6d9ca2feb246b50dc8c3ad908a90634fb6e46e4c438b47aa0a5df4994bd19c1d6f110eb90a15146d1c1a7b8762ab9d050f70e6de4050 - languageName: node - linkType: hard - -"@types/downloadjs@npm:^1.4.3": - version: 1.4.3 - resolution: "@types/downloadjs@npm:1.4.3" - checksum: d5b5e29399fdbb415f351fee64e7f7b3ddef0f251d2375ddaa0c16cd5c026f4a8dce1b4c76d05e019bc65c96f589d70f13512b44e54d568063fdefa0dbfd40c8 - languageName: node - linkType: hard - "@types/ejs@npm:^3.1.1": version: 3.1.2 resolution: "@types/ejs@npm:3.1.2" @@ -12975,21 +12942,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-styled-components@npm:>= 1.12.0": - version: 2.1.3 - resolution: "babel-plugin-styled-components@npm:2.1.3" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-module-imports": ^7.21.4 - babel-plugin-syntax-jsx: ^6.18.0 - lodash: ^4.17.21 - picomatch: ^2.3.1 - peerDependencies: - styled-components: ">= 2" - checksum: 0a4f2ca560e6124fb2e16aa2d35be33cc26f55f0a34307b5466df15e3645c32ac5795072807bac69792b4bcc4427ac892f8305d1cd18e4b1fd82016405b99a0d - languageName: node - linkType: hard - "babel-plugin-syntax-jsx@npm:^6.18.0": version: 6.18.0 resolution: "babel-plugin-syntax-jsx@npm:6.18.0" @@ -32279,7 +32231,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": +"picomatch@npm:^2.3.0": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf @@ -39071,28 +39023,6 @@ __metadata: languageName: node linkType: hard -"styled-components@npm:^5.3.11": - version: 5.3.11 - resolution: "styled-components@npm:5.3.11" - dependencies: - "@babel/helper-module-imports": ^7.0.0 - "@babel/traverse": ^7.4.5 - "@emotion/is-prop-valid": ^1.1.0 - "@emotion/stylis": ^0.8.4 - "@emotion/unitless": ^0.7.4 - babel-plugin-styled-components: ">= 1.12.0" - css-to-react-native: ^3.0.0 - hoist-non-react-statics: ^3.0.0 - shallowequal: ^1.1.0 - supports-color: ^5.5.0 - peerDependencies: - react: ">= 16.8.0" - react-dom: ">= 16.8.0" - react-is: ">= 16.8.0" - checksum: 10edd4dae3b0231ec02d86bdd09c88e894eedfa7e9d4f8e562b09fb69c67a27d586cbcf35c785002d59b3bf11e6c0940b0efce40d13ae9ed148b26b1dc8f3284 - languageName: node - linkType: hard - "stylehacks@npm:^4.0.0": version: 4.0.3 resolution: "stylehacks@npm:4.0.3" From a30f89c1992ceab7dbda02e3ea2d546b48417019 Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Tue, 6 Jun 2023 14:43:01 +1200 Subject: [PATCH 101/251] Waitp 1202 setup routes (#4608) * WIP * WAITP-1202 Working basic routing * WAITP-1202 Add constants to index * WAITP-1202 fix merge conflicts * WAITP-1202 tidy up code * WAITP-1202 update format * WAITP-1202 tweaks * WAITP-1202 Update routing variables * WAITP-1202 Fix mismatched TS versions * Revert "WAITP-1202 Fix mismatched TS versions" This reverts commit 607d34176799187395120a3cf7652d67ddc0f9ff. * WAITP-1202 fix version of react-router * WAITP-1202 updated routes for v6.3 * WAITP-1202 fix config and types version * WAITP-1202 Update validation --- .../constructNewRecordValidationRules.js | 14 +++++++ packages/tupaia-web/package.json | 2 + packages/tupaia-web/src/App.tsx | 11 +++-- ...AppProviders.tsx => AppStyleProviders.tsx} | 2 +- packages/tupaia-web/src/Router.tsx | 41 +++++++++++++++++++ .../tupaia-web/src/constants/constants.ts | 8 ++++ packages/tupaia-web/src/constants/index.ts | 1 + packages/tupaia-web/src/pages/LandingPage.tsx | 13 ++++++ packages/tupaia-web/src/pages/LoginForm.tsx | 9 ++++ .../src/pages/PasswordResetForm.tsx | 9 ++++ packages/tupaia-web/src/pages/Project.tsx | 19 +++++++++ .../tupaia-web/src/pages/RegisterForm.tsx | 9 ++++ .../src/pages/RequestAccessForm.tsx | 9 ++++ .../tupaia-web/src/pages/VerifyEmailForm.tsx | 9 ++++ packages/tupaia-web/src/pages/index.ts | 7 ++++ packages/tupaia-web/vite.config.ts | 20 ++++++--- yarn.lock | 28 +++++++------ 17 files changed, 186 insertions(+), 25 deletions(-) rename packages/tupaia-web/src/{AppProviders.tsx => AppStyleProviders.tsx} (92%) create mode 100644 packages/tupaia-web/src/Router.tsx create mode 100644 packages/tupaia-web/src/constants/constants.ts create mode 100644 packages/tupaia-web/src/pages/LandingPage.tsx create mode 100644 packages/tupaia-web/src/pages/LoginForm.tsx create mode 100644 packages/tupaia-web/src/pages/PasswordResetForm.tsx create mode 100644 packages/tupaia-web/src/pages/Project.tsx create mode 100644 packages/tupaia-web/src/pages/RegisterForm.tsx create mode 100644 packages/tupaia-web/src/pages/RequestAccessForm.tsx create mode 100644 packages/tupaia-web/src/pages/VerifyEmailForm.tsx diff --git a/packages/central-server/src/apiV2/utilities/constructNewRecordValidationRules.js b/packages/central-server/src/apiV2/utilities/constructNewRecordValidationRules.js index d9e913b159..5b4e99716b 100644 --- a/packages/central-server/src/apiV2/utilities/constructNewRecordValidationRules.js +++ b/packages/central-server/src/apiV2/utilities/constructNewRecordValidationRules.js @@ -320,6 +320,20 @@ export const constructForSingle = (models, recordType) => { hasContent, isURLPathSegment, constructRecordNotExistsWithField(models.landingPage, 'url_segment'), + urlSegment => { + const forbiddenRoutes = [ + 'login', + 'register', + 'request-access', + 'reset-password', + 'request-access', + 'verify-email', + ]; + if (forbiddenRoutes.includes(urlSegment)) { + throw new Error('This url segment is not allowed'); + } + return true; + }, ], project_codes: [ hasContent, diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index 1b3a7771da..8518eb5471 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -39,6 +39,8 @@ "axios": "^1.4.0", "react": "^16.13.1", "react-dom": "^16.13.1", + "react-router": "6.3.0", + "react-router-dom": "6.3.0", "styled-components": "^5.1.0", "vite-plugin-ejs": "^1.6.4", "vite-plugin-env-compatible": "^1.1.1" diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 94be3bcf44..0ff12be8d2 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -3,15 +3,14 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { Alert } from '@tupaia/ui-components'; -import { AppProviders } from './AppProviders'; +import { AppStyleProviders } from './AppStyleProviders'; +import { Router } from './Router'; const App = () => { return ( - - Alert -

Tupaia web

-
+ + + ); }; diff --git a/packages/tupaia-web/src/AppProviders.tsx b/packages/tupaia-web/src/AppStyleProviders.tsx similarity index 92% rename from packages/tupaia-web/src/AppProviders.tsx rename to packages/tupaia-web/src/AppStyleProviders.tsx index 47e2ca1f68..35900ac04f 100644 --- a/packages/tupaia-web/src/AppProviders.tsx +++ b/packages/tupaia-web/src/AppStyleProviders.tsx @@ -27,7 +27,7 @@ const theme = createMuiTheme({ }, }); -export const AppProviders = ({ children }: { children: ReactNode }) => ( +export const AppStyleProviders = ({ children }: { children: ReactNode }) => ( diff --git a/packages/tupaia-web/src/Router.tsx b/packages/tupaia-web/src/Router.tsx new file mode 100644 index 0000000000..319fcecffb --- /dev/null +++ b/packages/tupaia-web/src/Router.tsx @@ -0,0 +1,41 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'; +import { + LandingPage, + LoginForm, + PasswordResetForm, + Project, + RegisterForm, + RequestAccessForm, + VerifyEmailForm, +} from './pages'; +import { DEFAULT_URL } from './constants'; + +/** + * This Router is using [version 6.3]{@link https://reactrouter.com/en/v6.3.0}, as later versions are not supported by our TS setup. See [this issue here]{@link https://github.com/remix-run/react-router/discussions/8364} + * This means the newer 'createBrowserRouter' and 'RouterProvider' can't be used here. + * + * **/ + +export const Router = () => ( + + + } /> + {/** + * The below user pages will actually be modals, which will be done when each view is created. There is an example at: https://github.com/remix-run/react-router/tree/dev/examples/modal + */} + } /> + } /> + } /> + } /> + } /> + } /> + {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} + } /> + + +); diff --git a/packages/tupaia-web/src/constants/constants.ts b/packages/tupaia-web/src/constants/constants.ts new file mode 100644 index 0000000000..308a6ed433 --- /dev/null +++ b/packages/tupaia-web/src/constants/constants.ts @@ -0,0 +1,8 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export const DEFAULT_PROJECT_CODE = 'explore'; +export const DEFAULT_ENTITY_CODE = 'explore'; +export const DEFAULT_URL = `${DEFAULT_PROJECT_CODE}/${DEFAULT_ENTITY_CODE}`; diff --git a/packages/tupaia-web/src/constants/index.ts b/packages/tupaia-web/src/constants/index.ts index 3e8b42ad8f..c89172dfac 100644 --- a/packages/tupaia-web/src/constants/index.ts +++ b/packages/tupaia-web/src/constants/index.ts @@ -2,3 +2,4 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +export * from './constants'; diff --git a/packages/tupaia-web/src/pages/LandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage.tsx new file mode 100644 index 0000000000..1d650ea6a3 --- /dev/null +++ b/packages/tupaia-web/src/pages/LandingPage.tsx @@ -0,0 +1,13 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import { useParams } from 'react-router-dom'; + +export const LandingPage = () => { + const { landingPageUrlSegment } = useParams(); + // use the landingPageUrlSegment to query for the landing page. + // If found, render landing page. If not, render a default landing page + return
{landingPageUrlSegment}
; +}; diff --git a/packages/tupaia-web/src/pages/LoginForm.tsx b/packages/tupaia-web/src/pages/LoginForm.tsx new file mode 100644 index 0000000000..8fff11ced8 --- /dev/null +++ b/packages/tupaia-web/src/pages/LoginForm.tsx @@ -0,0 +1,9 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; + +export const LoginForm = () => { + return
LoginForm
; +}; diff --git a/packages/tupaia-web/src/pages/PasswordResetForm.tsx b/packages/tupaia-web/src/pages/PasswordResetForm.tsx new file mode 100644 index 0000000000..23ac65c155 --- /dev/null +++ b/packages/tupaia-web/src/pages/PasswordResetForm.tsx @@ -0,0 +1,9 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; + +export const PasswordResetForm = () => { + return
PasswordResetForm
; +}; diff --git a/packages/tupaia-web/src/pages/Project.tsx b/packages/tupaia-web/src/pages/Project.tsx new file mode 100644 index 0000000000..58624d1348 --- /dev/null +++ b/packages/tupaia-web/src/pages/Project.tsx @@ -0,0 +1,19 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import { useParams } from 'react-router-dom'; + +export const Project = () => { + // Use these to fetch the project and any other entity info you might need + const { projectCode, entityCode, '*': dashboardCode } = useParams(); + + return ( +
+

Project: {projectCode}

+

Entity: {entityCode}

+

Dashboard: {dashboardCode}

+
+ ); +}; diff --git a/packages/tupaia-web/src/pages/RegisterForm.tsx b/packages/tupaia-web/src/pages/RegisterForm.tsx new file mode 100644 index 0000000000..d13fd63870 --- /dev/null +++ b/packages/tupaia-web/src/pages/RegisterForm.tsx @@ -0,0 +1,9 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; + +export const RegisterForm = () => { + return
RegisterForm
; +}; diff --git a/packages/tupaia-web/src/pages/RequestAccessForm.tsx b/packages/tupaia-web/src/pages/RequestAccessForm.tsx new file mode 100644 index 0000000000..f40ceaa61a --- /dev/null +++ b/packages/tupaia-web/src/pages/RequestAccessForm.tsx @@ -0,0 +1,9 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; + +export const RequestAccessForm = () => { + return
RequestAccessForm
; +}; diff --git a/packages/tupaia-web/src/pages/VerifyEmailForm.tsx b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx new file mode 100644 index 0000000000..456dc92b09 --- /dev/null +++ b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx @@ -0,0 +1,9 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; + +export const VerifyEmailForm = () => { + return
VerifyEmailForm
; +}; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index 652a972fc4..d7390c1adb 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -2,3 +2,10 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +export { LandingPage } from './LandingPage'; +export { LoginForm } from './LoginForm'; +export { PasswordResetForm } from './PasswordResetForm'; +export { Project } from './Project'; +export { RegisterForm } from './RegisterForm'; +export { RequestAccessForm } from './RequestAccessForm'; +export { VerifyEmailForm } from './VerifyEmailForm'; diff --git a/packages/tupaia-web/vite.config.ts b/packages/tupaia-web/vite.config.ts index 66ac1090d2..eb7eae4fe5 100644 --- a/packages/tupaia-web/vite.config.ts +++ b/packages/tupaia-web/vite.config.ts @@ -2,8 +2,7 @@ import { defineConfig } from 'vite'; import { ViteEjsPlugin } from 'vite-plugin-ejs'; import react from '@vitejs/plugin-react'; -// https://vitejs.dev/config/ -export default defineConfig({ +const baseConfig = { // ViteEjsPlugin is used to allow the use of EJS templates in the index.html file, for analytics scripts etc plugins: [ ViteEjsPlugin(), @@ -16,9 +15,6 @@ export default defineConfig({ open: true, }, envPrefix: 'REACT_APP_', // to allow any existing REACT_APP_ env variables to be used; - define: { - global: {}, - }, resolve: { preserveSymlinks: true, dedupe: ['@material-ui/core', 'react', 'react-dom', 'styled-components'], // deduplicate these packages to avoid duplicate copies of them in the bundle, which might happen and cause errors with ui component packages @@ -29,4 +25,18 @@ export default defineConfig({ ['node-fetch']: 'moduleMock.js', }, }, +}; + +// https://vitejs.dev/config/ +export default defineConfig(({ command }) => { + // Dev specific config. This is because `define.global` breaks the build + if (command === 'serve') { + return { + ...baseConfig, + define: { + global: {}, + }, + }; + } + return baseConfig; }); diff --git a/yarn.lock b/yarn.lock index 3dea7e0943..d5129eec0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8704,6 +8704,8 @@ __metadata: npm-run-all: ^4.1.5 react: ^16.13.1 react-dom: ^16.13.1 + react-router: 6.3.0 + react-router-dom: 6.3.0 storybook: ^7.0.18 styled-components: ^5.1.0 typescript: ^5.0.2 @@ -35291,6 +35293,19 @@ __metadata: languageName: node linkType: hard +"react-router-dom@npm:6.3.0, react-router-dom@npm:^6.3.0": + version: 6.3.0 + resolution: "react-router-dom@npm:6.3.0" + dependencies: + history: ^5.2.0 + react-router: 6.3.0 + peerDependencies: + react: ">=16.8" + react-dom: ">=16.8" + checksum: 77603a654f8a8dc7f65535a2e5917a65f8d9ffcb06546d28dd297e52adcc4b8a84377e0115f48dca330b080af2da3e78f29d590c89307094d36927d2b1751ec3 + languageName: node + linkType: hard + "react-router-dom@npm:^5.1.2, react-router-dom@npm:^5.2.0": version: 5.2.0 resolution: "react-router-dom@npm:5.2.0" @@ -35308,19 +35323,6 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^6.3.0": - version: 6.3.0 - resolution: "react-router-dom@npm:6.3.0" - dependencies: - history: ^5.2.0 - react-router: 6.3.0 - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 77603a654f8a8dc7f65535a2e5917a65f8d9ffcb06546d28dd297e52adcc4b8a84377e0115f48dca330b080af2da3e78f29d590c89307094d36927d2b1751ec3 - languageName: node - linkType: hard - "react-router@npm:5.2.0": version: 5.2.0 resolution: "react-router@npm:5.2.0" From bd0c3e7f26e492cba1799b63a2d771efc4b05386 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 6 Jun 2023 16:13:32 +1200 Subject: [PATCH 102/251] Style modal component --- packages/tupaia-web/src/App.tsx | 11 ++- packages/tupaia-web/src/Router.tsx | 50 ++++++++------ .../tupaia-web/src/api/mutations/useLogin.ts | 3 + packages/tupaia-web/src/components/Modal.tsx | 55 +++++++++++++++ .../src/components/{forms => }/TextField.tsx | 4 +- .../src/pages/{LoginForm.tsx => Login.tsx} | 67 ++++++++++--------- packages/tupaia-web/src/pages/Project.tsx | 38 +++++++++-- packages/tupaia-web/src/pages/index.ts | 2 +- 8 files changed, 167 insertions(+), 63 deletions(-) create mode 100644 packages/tupaia-web/src/components/Modal.tsx rename packages/tupaia-web/src/components/{forms => }/TextField.tsx (87%) rename packages/tupaia-web/src/pages/{LoginForm.tsx => Login.tsx} (63%) diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 6e00ed4000..4c4709b29b 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -3,6 +3,7 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; +import { BrowserRouter } from 'react-router-dom'; import { Router } from './Router'; import { useUser } from './api/queries/useUser.ts'; import { useProjects } from './api/queries'; @@ -10,9 +11,13 @@ import { useProjects } from './api/queries'; const App = () => { const useQ = useUser(); const projectQ = useProjects(); - console.log('useQ', useQ); - console.log('projectQ', projectQ); - return ; + // console.log('useQ', useQ); + // console.log('projectQ', projectQ); + return ( + + + + ); }; export default App; diff --git a/packages/tupaia-web/src/Router.tsx b/packages/tupaia-web/src/Router.tsx index 319fcecffb..0ebb22a1f6 100644 --- a/packages/tupaia-web/src/Router.tsx +++ b/packages/tupaia-web/src/Router.tsx @@ -3,10 +3,10 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'; +import { Navigate, Route, Routes, useLocation } from 'react-router-dom'; import { LandingPage, - LoginForm, + Login, PasswordResetForm, Project, RegisterForm, @@ -21,21 +21,31 @@ import { DEFAULT_URL } from './constants'; * * **/ -export const Router = () => ( - - - } /> - {/** - * The below user pages will actually be modals, which will be done when each view is created. There is an example at: https://github.com/remix-run/react-router/tree/dev/examples/modal - */} - } /> - } /> - } /> - } /> - } /> - } /> - {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} - } /> - - -); +export const Router = () => { + let location = useLocation(); + // The `backgroundLocation` state is the location that we were at when one of + // the gallery links was clicked. If it's there, use it as the location for + // the so we show the gallery in the background, behind the modal. + let state = location.state as { backgroundLocation?: Location }; + + return ( + <> + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} + } /> + + {state?.backgroundLocation && ( + + } /> + + )} + + ); +}; diff --git a/packages/tupaia-web/src/api/mutations/useLogin.ts b/packages/tupaia-web/src/api/mutations/useLogin.ts index 11e93647d8..782578a460 100644 --- a/packages/tupaia-web/src/api/mutations/useLogin.ts +++ b/packages/tupaia-web/src/api/mutations/useLogin.ts @@ -3,10 +3,12 @@ * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ +import { useNavigate } from 'react-router-dom'; import { useMutation, useQueryClient } from 'react-query'; import { post } from '../api.ts'; export const useLogin = () => { + const navigate = useNavigate(); const queryClient = useQueryClient(); return useMutation( @@ -22,6 +24,7 @@ export const useLogin = () => { { onSuccess: () => { queryClient.invalidateQueries(); + navigate(-1); }, }, ); diff --git a/packages/tupaia-web/src/components/Modal.tsx b/packages/tupaia-web/src/components/Modal.tsx new file mode 100644 index 0000000000..43a7eadf43 --- /dev/null +++ b/packages/tupaia-web/src/components/Modal.tsx @@ -0,0 +1,55 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import { Button } from '@tupaia/ui-components'; +import BaseModal from '@material-ui/core/Modal'; +import CloseIcon from '@material-ui/icons/Close'; +import IconButton from '@material-ui/core/IconButton'; +import styled from 'styled-components'; + +const Container = styled.div` + position: absolute; + top: 50%; + left: 50%; + width: 660px; + max-width: 100%; + transform: translate(-50%, -50%); + border-radius: 5px; + background: #2e2f33; + padding: 2rem 2rem 7rem; + display: flex; + flex-direction: column; + align-items: center; + + .MuiIconButton-root { + position: absolute; + top: 2px; + right: 4px; + color: white; + + svg { + font-size: 2rem; + } + } +`; +export const Modal = ({ onClose, open, children }) => { + return ( + + + + + + {children} + + + ); +}; + +export const ModalButton = styled(Button)` + width: 100%; + margin-top: 2rem; + margin-bottom: 1.2rem; + text-transform: none; +`; diff --git a/packages/tupaia-web/src/components/forms/TextField.tsx b/packages/tupaia-web/src/components/TextField.tsx similarity index 87% rename from packages/tupaia-web/src/components/forms/TextField.tsx rename to packages/tupaia-web/src/components/TextField.tsx index b4de6d2cd5..366544bf05 100644 --- a/packages/tupaia-web/src/components/forms/TextField.tsx +++ b/packages/tupaia-web/src/components/TextField.tsx @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ import React from 'react'; import MuiTextField, { TextFieldProps } from '@material-ui/core/TextField'; @@ -9,7 +9,7 @@ import styled from 'styled-components'; const StyledTextField = styled(MuiTextField)` display: flex; width: 100%; - margin-bottom: 1rem; + margin-bottom: 0.7rem; .MuiFormLabel-root { color: #9ba0a6 !important; diff --git a/packages/tupaia-web/src/pages/LoginForm.tsx b/packages/tupaia-web/src/pages/Login.tsx similarity index 63% rename from packages/tupaia-web/src/pages/LoginForm.tsx rename to packages/tupaia-web/src/pages/Login.tsx index 455341ac0f..be16bb2c13 100644 --- a/packages/tupaia-web/src/pages/LoginForm.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -3,71 +3,72 @@ * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ import React from 'react'; +import { useNavigate, Link } from 'react-router-dom'; import { useForm } from 'react-hook-form'; import styled from 'styled-components'; -import { Button } from '@tupaia/ui-components'; +import Typography from '@material-ui/core/Typography'; import { useLogin } from '../api/mutations'; -import { TextField } from '../components/forms/TextField.tsx'; - -const Container = styled.div` - background: #2e2f33; - margin: 1rem auto; - max-width: 1000px; - height: 600px; - padding: 1rem; - display: flex; - flex-direction: column; - align-items: center; -`; +import { TextField } from '../components/TextField.tsx'; +import { Modal, ModalButton } from '../components/Modal.tsx'; const StyledImg = styled.img` height: 2.6rem; width: auto; - margin-bottom: 2.5rem; + margin-bottom: 5rem; `; const Logo = () => ; -const Title = styled.h1` +const Title = styled(Typography)` font-weight: 500; font-size: 32px; line-height: 13px; + margin-bottom: 1.6rem; `; -const Text = styled.h2` +const Text = styled(Typography)` font-weight: 400; font-size: 14px; line-height: 18px; `; -const LinkText = styled.div` +const LinkText = styled(Typography)` font-weight: 400; font-size: 11px; line-height: 15px; + color: white; + + a { + color: white; + } +`; + +const ForgotPasswordText = styled(LinkText)` + display: block; + margin-top: -0.6rem; + text-align: right; `; const StyledForm = styled.form` margin-top: 1rem; width: 340px; max-width: 100%; - - button { - width: 100%; - margin-top: 1rem; - margin-bottom: 1rem; - text-transform: none; - } `; -export const LoginForm = () => { +export const Login = () => { const { handleSubmit, register, formState: { errors }, } = useForm(); const { mutate: login, isLoading } = useLogin(); + const navigate = useNavigate(); + + const handleClose = () => { + navigate(-1); + }; return ( - + Log in Enter your details below to log in @@ -96,12 +97,16 @@ export const LoginForm = () => { required: 'Required', })} /> - Forgot password? - - Don't have an account? Register here + + + Don't have an account? Register here + - + ); }; diff --git a/packages/tupaia-web/src/pages/Project.tsx b/packages/tupaia-web/src/pages/Project.tsx index 9fe8fa7cbe..222458c136 100644 --- a/packages/tupaia-web/src/pages/Project.tsx +++ b/packages/tupaia-web/src/pages/Project.tsx @@ -3,17 +3,43 @@ * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { useParams } from 'react-router-dom'; +import { useParams, Outlet, Link, useLocation } from 'react-router-dom'; +import styled from 'styled-components'; + +const Container = styled.div` + display: flex; + height: 100vh; +`; + +const MapSection = styled.div` + background: #070d17; + flex: 1; +`; + +const Panel = styled.div` + background: #272832; + width: 300px; + padding: 1rem; + max-width: 100%; +`; export const Project = () => { + const location = useLocation(); // Use these to fetch the project and any other entity info you might need const { projectCode, entityCode, '*': dashboardCode } = useParams(); return ( -
-

Project: {projectCode}

-

Entity: {entityCode}

-

Dashboard: {dashboardCode}

-
+ + + +

Project: {projectCode}

+

Entity: {entityCode}

+

Dashboard: {dashboardCode}

+ + Login + +
+ +
); }; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index d7390c1adb..c5abfa73a5 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -3,7 +3,7 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export { LandingPage } from './LandingPage'; -export { LoginForm } from './LoginForm'; +export { Login } from './Login.tsx'; export { PasswordResetForm } from './PasswordResetForm'; export { Project } from './Project'; export { RegisterForm } from './RegisterForm'; From de52b81fa30b1ef55645e934089e83184bfb2652 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 6 Jun 2023 16:19:30 +1200 Subject: [PATCH 103/251] Update yarn.lock --- yarn.lock | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/yarn.lock b/yarn.lock index d5129eec0e..db670bf3f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8704,6 +8704,8 @@ __metadata: npm-run-all: ^4.1.5 react: ^16.13.1 react-dom: ^16.13.1 + react-hook-form: ^7.44.3 + react-query: ^3.39.3 react-router: 6.3.0 react-router-dom: 6.3.0 storybook: ^7.0.18 @@ -34647,6 +34649,15 @@ __metadata: languageName: node linkType: hard +"react-hook-form@npm:^7.44.3": + version: 7.44.3 + resolution: "react-hook-form@npm:7.44.3" + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + checksum: 8dc97e705d28d842c60fd79b0f07b8b045c458c234e3bf422baab87a844d0ebecbdf3e349538eaaa5c12366cd85169f60a52ed84dd31cdd99729899e424548bf + languageName: node + linkType: hard + "react-icon-base@npm:2.1.0": version: 2.1.0 resolution: "react-icon-base@npm:2.1.0" @@ -35198,6 +35209,24 @@ __metadata: languageName: node linkType: hard +"react-query@npm:^3.39.3": + version: 3.39.3 + resolution: "react-query@npm:3.39.3" + dependencies: + "@babel/runtime": ^7.5.5 + broadcast-channel: ^3.4.1 + match-sorter: ^6.0.2 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: d2de6a0992dbf039ff2de564de1ae6361f8ac7310159dae42ec16f833b79c05caedced187235c42373ac331cc5f2fe9e2b31b14ae75a815e86d86e30ca9887ad + languageName: node + linkType: hard + "react-redux@npm:^5.0.6, react-redux@npm:^5.0.7": version: 5.1.2 resolution: "react-redux@npm:5.1.2" From 3e50b49a91e12da2d12ec1df49f4d05915e6a82c Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 6 Jun 2023 17:11:52 +1200 Subject: [PATCH 104/251] fix import paths --- packages/tupaia-web/src/App.tsx | 2 +- packages/tupaia-web/src/Router.tsx | 2 +- packages/tupaia-web/src/api/mutations/useLogin.ts | 2 +- packages/tupaia-web/src/api/queries/index.ts | 4 ++-- packages/tupaia-web/src/api/queries/useProjects.ts | 2 +- packages/tupaia-web/src/api/queries/useUser.ts | 2 +- packages/tupaia-web/src/main.tsx | 4 ++-- packages/tupaia-web/src/pages/Login.tsx | 4 ++-- packages/tupaia-web/src/pages/index.ts | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 4c4709b29b..83cbcd7dfb 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -5,7 +5,7 @@ import React from 'react'; import { BrowserRouter } from 'react-router-dom'; import { Router } from './Router'; -import { useUser } from './api/queries/useUser.ts'; +import { useUser } from './api/queries/useUser'; import { useProjects } from './api/queries'; const App = () => { diff --git a/packages/tupaia-web/src/Router.tsx b/packages/tupaia-web/src/Router.tsx index 0ebb22a1f6..814b7126e7 100644 --- a/packages/tupaia-web/src/Router.tsx +++ b/packages/tupaia-web/src/Router.tsx @@ -39,7 +39,7 @@ export const Router = () => { } /> } /> {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} - } /> + } />
{state?.backgroundLocation && ( diff --git a/packages/tupaia-web/src/api/mutations/useLogin.ts b/packages/tupaia-web/src/api/mutations/useLogin.ts index 782578a460..030346b536 100644 --- a/packages/tupaia-web/src/api/mutations/useLogin.ts +++ b/packages/tupaia-web/src/api/mutations/useLogin.ts @@ -5,7 +5,7 @@ import { useNavigate } from 'react-router-dom'; import { useMutation, useQueryClient } from 'react-query'; -import { post } from '../api.ts'; +import { post } from '../api'; export const useLogin = () => { const navigate = useNavigate(); diff --git a/packages/tupaia-web/src/api/queries/index.ts b/packages/tupaia-web/src/api/queries/index.ts index 37e998e7f9..e983b38eb5 100644 --- a/packages/tupaia-web/src/api/queries/index.ts +++ b/packages/tupaia-web/src/api/queries/index.ts @@ -4,5 +4,5 @@ * */ -export * from './useProjects.ts'; -export * from './useUser.ts'; +export * from './useProjects'; +export * from './useUser'; diff --git a/packages/tupaia-web/src/api/queries/useProjects.ts b/packages/tupaia-web/src/api/queries/useProjects.ts index bc5309839e..30f3849ec9 100644 --- a/packages/tupaia-web/src/api/queries/useProjects.ts +++ b/packages/tupaia-web/src/api/queries/useProjects.ts @@ -4,7 +4,7 @@ */ import { useQuery } from 'react-query'; -import { get } from '../api.ts'; +import { get } from '../api'; export const useProjects = () => { return useQuery('projects', () => get('projects')); diff --git a/packages/tupaia-web/src/api/queries/useUser.ts b/packages/tupaia-web/src/api/queries/useUser.ts index a76b12a0eb..0b8763c371 100644 --- a/packages/tupaia-web/src/api/queries/useUser.ts +++ b/packages/tupaia-web/src/api/queries/useUser.ts @@ -4,7 +4,7 @@ */ import { useQuery } from 'react-query'; -import { get } from '../api.ts'; +import { get } from '../api'; export const useUser = () => { return useQuery('getUser', () => get('getUser')); diff --git a/packages/tupaia-web/src/main.tsx b/packages/tupaia-web/src/main.tsx index c4a2c4bdf8..e792ccc365 100644 --- a/packages/tupaia-web/src/main.tsx +++ b/packages/tupaia-web/src/main.tsx @@ -4,8 +4,8 @@ */ import React from 'react'; import { render as renderReactApp } from 'react-dom'; -import App from './App.tsx'; -import { AppProviders } from './AppProviders.tsx'; +import App from './App'; +import { AppProviders } from './AppProviders'; renderReactApp( diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/Login.tsx index be16bb2c13..c2f90c3b0c 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -8,8 +8,8 @@ import { useForm } from 'react-hook-form'; import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import { useLogin } from '../api/mutations'; -import { TextField } from '../components/TextField.tsx'; -import { Modal, ModalButton } from '../components/Modal.tsx'; +import { TextField } from '../components/TextField'; +import { Modal, ModalButton } from '../components/Modal'; const StyledImg = styled.img` height: 2.6rem; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index c5abfa73a5..28854bd922 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -3,7 +3,7 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export { LandingPage } from './LandingPage'; -export { Login } from './Login.tsx'; +export { Login } from './Login'; export { PasswordResetForm } from './PasswordResetForm'; export { Project } from './Project'; export { RegisterForm } from './RegisterForm'; From dedf22c60aebb836fe4bf36fe4117723925fc0fd Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Wed, 7 Jun 2023 12:04:19 +1200 Subject: [PATCH 105/251] storybook --- package.json | 1 + .../src/reportBuilder/transform/transform.ts | 1 - packages/tupaia-web/.storybook/main.ts | 2 +- packages/tupaia-web/.storybook/preview.tsx | 5 +- packages/tupaia-web/src/App.tsx | 7 +- packages/tupaia-web/src/components/Modal.tsx | 4 +- .../tupaia-web/src/components/TextField.tsx | 12 +- packages/tupaia-web/src/pages/Login.tsx | 8 +- packages/tupaia-web/src/pages/LoginForm.tsx | 9 - packages/tupaia-web/stories/Introduction.mdx | 213 ------------------ packages/tupaia-web/stories/Modal.stories.tsx | 38 ++++ .../tupaia-web/stories/TextField.stories.tsx | 49 ++++ packages/tupaia-web/tsconfig.json | 4 +- 13 files changed, 113 insertions(+), 240 deletions(-) delete mode 100644 packages/tupaia-web/src/pages/LoginForm.tsx delete mode 100644 packages/tupaia-web/stories/Introduction.mdx create mode 100644 packages/tupaia-web/stories/Modal.stories.tsx create mode 100644 packages/tupaia-web/stories/TextField.stories.tsx diff --git a/package.json b/package.json index 053a08d554..ec483b70db 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "migrate-create": "yarn workspace @tupaia/database migrate-create", "migrate-down": "yarn workspace @tupaia/database migrate-down", "package-json-lint": "npmPkgJsonLint --configFile .npmpackagejsonlintrc.json .", + "postinstall": "test -n \"$SKIP_BUILD_INTERNAL_DEPENDENCIES\" || yarn build:internal-dependencies", "refresh-database": "yarn workspace @tupaia/database refresh-database --root ../../", "test-all": "node ./scripts/node/testAll --silent", "validate": "./scripts/bash/validate.sh", diff --git a/packages/report-server/src/reportBuilder/transform/transform.ts b/packages/report-server/src/reportBuilder/transform/transform.ts index 18f836a550..cc02858a53 100644 --- a/packages/report-server/src/reportBuilder/transform/transform.ts +++ b/packages/report-server/src/reportBuilder/transform/transform.ts @@ -49,7 +49,6 @@ const transform = async (table: TransformTable, transformSteps: BuiltTransformPa } const titlePart = transformStep.title ? ` (${transformStep.title})` : ''; const errorMessagePrefix = `Error in transform[${i + 1}]${titlePart}: `; - // @ts-ignore e.message = `${errorMessagePrefix}${(e as Error).message}`; throw e; } diff --git a/packages/tupaia-web/.storybook/main.ts b/packages/tupaia-web/.storybook/main.ts index bcd781cba5..96194a5be8 100644 --- a/packages/tupaia-web/.storybook/main.ts +++ b/packages/tupaia-web/.storybook/main.ts @@ -1,6 +1,6 @@ import type { StorybookConfig } from '@storybook/react-vite'; const config: StorybookConfig = { - stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], + stories: ['../stories/**/*.mdx', '../stories/**/*.stories.@(js|jsx|ts|tsx)'], addons: [ '@storybook/addon-links', '@storybook/addon-essentials', diff --git a/packages/tupaia-web/.storybook/preview.tsx b/packages/tupaia-web/.storybook/preview.tsx index d9ab0d9944..8364918d67 100644 --- a/packages/tupaia-web/.storybook/preview.tsx +++ b/packages/tupaia-web/.storybook/preview.tsx @@ -1,15 +1,14 @@ import React from 'react'; import type { Preview } from '@storybook/react'; import { AppProviders } from '../src/AppProviders'; -import { DARK_BLUE, WHITE } from '../src/theme'; const preview: Preview = { parameters: { backgrounds: { default: 'Dark', values: [ - { name: 'Dark', value: DARK_BLUE }, - { name: 'Light', value: WHITE }, + { name: 'Dark', value: '#262834' }, + { name: 'Light', value: '#ffffff' }, ], }, actions: { argTypesRegex: '^on[A-Z].*' }, diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 83cbcd7dfb..3da4ac839a 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -5,12 +5,11 @@ import React from 'react'; import { BrowserRouter } from 'react-router-dom'; import { Router } from './Router'; -import { useUser } from './api/queries/useUser'; -import { useProjects } from './api/queries'; +import { useProjects, useUser } from './api/queries'; const App = () => { - const useQ = useUser(); - const projectQ = useProjects(); + useUser(); + useProjects(); // console.log('useQ', useQ); // console.log('projectQ', projectQ); return ( diff --git a/packages/tupaia-web/src/components/Modal.tsx b/packages/tupaia-web/src/components/Modal.tsx index 43a7eadf43..e2903e763a 100644 --- a/packages/tupaia-web/src/components/Modal.tsx +++ b/packages/tupaia-web/src/components/Modal.tsx @@ -18,7 +18,8 @@ const Container = styled.div` transform: translate(-50%, -50%); border-radius: 5px; background: #2e2f33; - padding: 2rem 2rem 7rem; + color: white; + padding: 2rem 2rem 5rem; display: flex; flex-direction: column; align-items: center; @@ -34,6 +35,7 @@ const Container = styled.div` } } `; + export const Modal = ({ onClose, open, children }) => { return ( diff --git a/packages/tupaia-web/src/components/TextField.tsx b/packages/tupaia-web/src/components/TextField.tsx index 366544bf05..6c19e49e07 100644 --- a/packages/tupaia-web/src/components/TextField.tsx +++ b/packages/tupaia-web/src/components/TextField.tsx @@ -11,14 +11,14 @@ const StyledTextField = styled(MuiTextField)` width: 100%; margin-bottom: 0.7rem; - .MuiFormLabel-root { - color: #9ba0a6 !important; + .MuiFormLabel-root.MuiInputLabel-root { + color: #9ba0a6; } - .MuiInputBase-root.MuiInput-underline { + .MuiInputBase-root.MuiInput-root.MuiInput-underline.MuiInputBase-formControl.MuiInput-formControl { &:before, &:after { - border-bottom: 1px solid #9ba0a6 !important; + border-bottom: 1px solid #9ba0a6; } } @@ -27,5 +27,9 @@ const StyledTextField = styled(MuiTextField)` font-size: 14px; line-height: 18px; } + + .MuiFormHelperText-root:not(.Mui-error) { + color: #9ba0a6; + } `; export const TextField = props => ; diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/Login.tsx index c2f90c3b0c..2763d5de17 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -29,6 +29,7 @@ const Text = styled(Typography)` font-weight: 400; font-size: 14px; line-height: 18px; + margin-bottom: 0.5rem; `; const LinkText = styled(Typography)` @@ -49,7 +50,7 @@ const ForgotPasswordText = styled(LinkText)` `; const StyledForm = styled.form` - margin-top: 1rem; + margin-top: 0.5rem; width: 340px; max-width: 100%; `; @@ -60,7 +61,7 @@ export const Login = () => { register, formState: { errors }, } = useForm(); - const { mutate: login, isLoading } = useLogin(); + const { mutate: login, isLoading, isError, error } = useLogin(); const navigate = useNavigate(); const handleClose = () => { @@ -70,8 +71,9 @@ export const Login = () => { return ( - Log in + Log in Enter your details below to log in + {isError && {error.message}} { - return
LoginForm
; -}; diff --git a/packages/tupaia-web/stories/Introduction.mdx b/packages/tupaia-web/stories/Introduction.mdx deleted file mode 100644 index ff7fc71fbf..0000000000 --- a/packages/tupaia-web/stories/Introduction.mdx +++ /dev/null @@ -1,213 +0,0 @@ -import { Meta } from '@storybook/blocks'; -import Code from './assets/code-brackets.svg'; -import Colors from './assets/colors.svg'; -import Comments from './assets/comments.svg'; -import Direction from './assets/direction.svg'; -import Flow from './assets/flow.svg'; -import Plugin from './assets/plugin.svg'; -import Repo from './assets/repo.svg'; -import StackAlt from './assets/stackalt.svg'; - - - - - -# Welcome to Storybook - -Storybook helps you build UI components in isolation from your app's business logic, data, and context. -That makes it easy to develop hard-to-reach states. Save these UI states as **stories** to revisit during development, testing, or QA. - -Browse example stories now by navigating to them in the sidebar. -View their code in the `stories` directory to learn how they work. -We recommend building UIs with a [**component-driven**](https://componentdriven.org) process starting with atomic components and ending with pages. - -
Configure
- - - -
Learn
- - - -
- TipEdit the Markdown in{' '} - stories/Introduction.stories.mdx -
diff --git a/packages/tupaia-web/stories/Modal.stories.tsx b/packages/tupaia-web/stories/Modal.stories.tsx new file mode 100644 index 0000000000..bbb42138ab --- /dev/null +++ b/packages/tupaia-web/stories/Modal.stories.tsx @@ -0,0 +1,38 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import type { Meta, StoryObj } from '@storybook/react'; +import { Typography } from '@material-ui/core'; +import { Modal } from '../src/components/Modal'; + +const meta: Meta = { + title: 'Modal', + component: Modal, + decorators: [ + Story => ( +
+ +
+ ), + ], +}; + +export default meta; +type Story = StoryObj; + +export const Simple: Story = { + render: () => ( + + + Lorem ipsum. + + + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam aliquid aperiam commodi + consequatur cupiditate doloribus earum facere ipsum modi, molestiae, neque, nobis nulla + perspiciatis qui sint tempora temporibus vel voluptatum! + + + ), +}; diff --git a/packages/tupaia-web/stories/TextField.stories.tsx b/packages/tupaia-web/stories/TextField.stories.tsx new file mode 100644 index 0000000000..cefd22f23a --- /dev/null +++ b/packages/tupaia-web/stories/TextField.stories.tsx @@ -0,0 +1,49 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import type { Meta, StoryObj } from '@storybook/react'; + +import { TextField } from '../src/components/TextField'; + +const meta: Meta = { + title: 'TextField', + component: TextField, + decorators: [ + Story => ( +
+ +
+ ), + ], +}; + +export default meta; +type Story = StoryObj; + +export const Simple: Story = { + render: () => , +}; + +export const HelperText: Story = { + render: () => ( + + ), +}; + +export const TextArea: Story = { + render: () => , +}; + +export const Validation: Story = { + render: () => ( + + ), +}; diff --git a/packages/tupaia-web/tsconfig.json b/packages/tupaia-web/tsconfig.json index 4af7feedfc..0887d75f18 100644 --- a/packages/tupaia-web/tsconfig.json +++ b/packages/tupaia-web/tsconfig.json @@ -1,11 +1,13 @@ { "compilerOptions": { + "esModuleInterop": true, "target": "ESNext", "lib": [ "DOM", "DOM.Iterable", "ESNext" ], + "rootDirs": ["src", "stories", ".storybook"], "module": "ESNext", "skipLibCheck": true, /* Bundler mode */ @@ -22,7 +24,7 @@ "noFallthroughCasesInSwitch": true }, "include": [ - "src" + "src","stories", ".storybook" ], "references": [ { From 6be041ad18f3fd57984a9b0c72aa2bd52ff18244 Mon Sep 17 00:00:00 2001 From: Ethan McQuarrie <69437175+EMcQ-BES@users.noreply.github.com> Date: Thu, 8 Jun 2023 09:48:17 +1200 Subject: [PATCH 106/251] WAITP-1255: Tupaia web server report and dashboard routes (#4602) * WAITP-1255 Add web config to api client * WAITP-1255 Add user and report route to tupaia-web-server * WAITP-1255 Update SessionSwitchingAuthHandler to use util functions * WAITP-1255 Add fetchReport to ReportApi * WAITP-1255 Add temporary logout route * WAITP-1255 Allow no session in attach function * WAITP-1255 Update user route default to match current web config server behaviour * WAITP-1255 Add dashboard route to tupaia-web-server * WAITP-1255 Add mock web config api * WAITP-1255 Remove unnecessary SessionCookie redefinition * WAITP-1255 PR Fixups * WAITP-1255 Add mock export * WAITP-1255 Only discard 401s from attachSession * WAITP-1255 Do it the recommended way instead --- .../api-client/src/MockTupaiaApiClient.ts | 5 +++ packages/api-client/src/TupaiaApiClient.ts | 4 +++ .../src/auth/SessionSwitchingAuthHandler.ts | 13 +++----- .../api-client/src/connections/ReportApi.ts | 4 +++ .../src/connections/WebConfigApi.ts | 16 ++++++++++ packages/api-client/src/connections/index.ts | 1 + .../src/connections/mocks/MockReportApi.ts | 3 ++ .../src/connections/mocks/MockWebConfigApi.ts | 12 +++++++ .../api-client/src/connections/mocks/index.ts | 1 + packages/api-client/src/constants.ts | 14 +++++++-- packages/server-boilerplate/src/index.ts | 1 + .../src/orchestrator/index.ts | 2 +- .../src/orchestrator/session/attachSession.ts | 13 ++++++++ .../src/orchestrator/session/index.ts | 2 +- .../src/@types/express/index.d.ts | 5 ++- .../tupaia-web-server/src/app/createApp.ts | 21 ++++++++++++- .../src/routes/DashboardsRoute.ts | 31 +++++++++++++++++++ .../src/routes/ReportRoute.ts | 30 ++++++++++++++++++ .../src/routes/TempLogoutRoute.ts | 28 +++++++++++++++++ .../tupaia-web-server/src/routes/UserRoute.ts | 23 ++++++++++++++ .../tupaia-web-server/src/routes/index.ts | 11 +++++++ 21 files changed, 226 insertions(+), 14 deletions(-) create mode 100644 packages/api-client/src/connections/WebConfigApi.ts create mode 100644 packages/api-client/src/connections/mocks/MockWebConfigApi.ts create mode 100644 packages/tupaia-web-server/src/routes/DashboardsRoute.ts create mode 100644 packages/tupaia-web-server/src/routes/ReportRoute.ts create mode 100644 packages/tupaia-web-server/src/routes/TempLogoutRoute.ts create mode 100644 packages/tupaia-web-server/src/routes/UserRoute.ts create mode 100644 packages/tupaia-web-server/src/routes/index.ts diff --git a/packages/api-client/src/MockTupaiaApiClient.ts b/packages/api-client/src/MockTupaiaApiClient.ts index 2eb34e2a8b..a2bda22705 100644 --- a/packages/api-client/src/MockTupaiaApiClient.ts +++ b/packages/api-client/src/MockTupaiaApiClient.ts @@ -9,6 +9,7 @@ import { DataTableApiInterface, EntityApiInterface, ReportApiInterface, + WebConfigApiInterface, } from './connections'; import { @@ -17,6 +18,7 @@ import { MockDataTableApi, MockEntityApi, MockReportApi, + MockWebConfigApi, } from './connections/mocks'; export class MockTupaiaApiClient { @@ -25,6 +27,7 @@ export class MockTupaiaApiClient { public readonly dataTable: DataTableApiInterface; public readonly entity: EntityApiInterface; public readonly report: ReportApiInterface; + public readonly webConfig: WebConfigApiInterface; public constructor({ auth = new MockAuthApi(), @@ -32,11 +35,13 @@ export class MockTupaiaApiClient { dataTable = new MockDataTableApi(), entity = new MockEntityApi(), report = new MockReportApi(), + webConfig = new MockWebConfigApi(), } = {}) { this.auth = auth; this.central = central; this.dataTable = dataTable; this.entity = entity; this.report = report; + this.webConfig = webConfig } } diff --git a/packages/api-client/src/TupaiaApiClient.ts b/packages/api-client/src/TupaiaApiClient.ts index 8676bbd34b..714a435549 100644 --- a/packages/api-client/src/TupaiaApiClient.ts +++ b/packages/api-client/src/TupaiaApiClient.ts @@ -12,11 +12,13 @@ import { DataTableApi, EntityApi, ReportApi, + WebConfigApi, AuthApiInterface, CentralApiInterface, DataTableApiInterface, EntityApiInterface, ReportApiInterface, + WebConfigApiInterface, } from './connections'; import { PRODUCTION_BASE_URLS, ServiceBaseUrlSet } from './constants'; @@ -26,6 +28,7 @@ export class TupaiaApiClient { public readonly dataTable: DataTableApiInterface; public readonly auth: AuthApiInterface; public readonly report: ReportApiInterface; + public readonly webConfig: WebConfigApiInterface; public constructor(authHandler: AuthHandler, baseUrls: ServiceBaseUrlSet = PRODUCTION_BASE_URLS) { this.auth = new AuthApi(new ApiConnection(authHandler, baseUrls.auth)); @@ -33,5 +36,6 @@ export class TupaiaApiClient { this.central = new CentralApi(new ApiConnection(authHandler, baseUrls.central)); this.report = new ReportApi(new ApiConnection(authHandler, baseUrls.report)); this.dataTable = new DataTableApi(new ApiConnection(authHandler, baseUrls.dataTable)); + this.webConfig = new WebConfigApi(new ApiConnection(authHandler, baseUrls.webConfig)); } } diff --git a/packages/api-client/src/auth/SessionSwitchingAuthHandler.ts b/packages/api-client/src/auth/SessionSwitchingAuthHandler.ts index d0094b22a3..68c84f306f 100644 --- a/packages/api-client/src/auth/SessionSwitchingAuthHandler.ts +++ b/packages/api-client/src/auth/SessionSwitchingAuthHandler.ts @@ -3,15 +3,9 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import { createBasicHeader } from '@tupaia/utils'; +import { createBasicHeader, getEnvVarOrDefault } from '@tupaia/utils'; import { AuthHandler, SessionType } from '../types'; -const { API_CLIENT_NAME = '', API_CLIENT_PASSWORD = '' } = process.env; -const DEFAULT_AUTH_HEADER = createBasicHeader( - API_CLIENT_NAME, - API_CLIENT_PASSWORD, -); - // Handles switching between microservice client and user login sessions export class SessionSwitchingAuthHandler implements AuthHandler { session?: SessionType; @@ -29,6 +23,9 @@ export class SessionSwitchingAuthHandler implements AuthHandler { return this.session.getAuthHeader(); } - return DEFAULT_AUTH_HEADER; + return createBasicHeader( + getEnvVarOrDefault('API_CLIENT_NAME', ''), + getEnvVarOrDefault('API_CLIENT_PASSWORD', ''), + ); } } diff --git a/packages/api-client/src/connections/ReportApi.ts b/packages/api-client/src/connections/ReportApi.ts index f48bab44e3..d3a6d8f7e1 100644 --- a/packages/api-client/src/connections/ReportApi.ts +++ b/packages/api-client/src/connections/ReportApi.ts @@ -16,6 +16,10 @@ export class ReportApi extends BaseApi { public async fetchTransformSchemas() { return this.connection.get('fetchTransformSchemas'); } + + public async fetchReport(reportCode: string, query?: QueryParameters | null) { + return this.connection.get(`fetchReport/${reportCode}`, query); + } } export interface ReportApiInterface extends PublicInterface {} diff --git a/packages/api-client/src/connections/WebConfigApi.ts b/packages/api-client/src/connections/WebConfigApi.ts new file mode 100644 index 0000000000..1595f5baf7 --- /dev/null +++ b/packages/api-client/src/connections/WebConfigApi.ts @@ -0,0 +1,16 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import { QueryParameters } from '../types'; +import { BaseApi } from './BaseApi'; +import { PublicInterface } from './types'; + +export class WebConfigApi extends BaseApi { + public async fetchReport(reportCode: string, query?: QueryParameters | null) { + return this.connection.get(`report/${reportCode}`, query); + } +} + +export interface WebConfigApiInterface extends PublicInterface {}; diff --git a/packages/api-client/src/connections/index.ts b/packages/api-client/src/connections/index.ts index 8e429eea6b..122ab264b2 100644 --- a/packages/api-client/src/connections/index.ts +++ b/packages/api-client/src/connections/index.ts @@ -10,3 +10,4 @@ export { DataTableApi, DataTableApiInterface } from './DataTableApi'; export { EntityApi, EntityApiInterface } from './EntityApi'; export { CentralApi, CentralApiInterface } from './CentralApi'; export { ReportApi, ReportApiInterface } from './ReportApi'; +export { WebConfigApi, WebConfigApiInterface } from './WebConfigApi'; diff --git a/packages/api-client/src/connections/mocks/MockReportApi.ts b/packages/api-client/src/connections/mocks/MockReportApi.ts index dad42d0c44..bcb3242153 100644 --- a/packages/api-client/src/connections/mocks/MockReportApi.ts +++ b/packages/api-client/src/connections/mocks/MockReportApi.ts @@ -18,4 +18,7 @@ export class MockReportApi implements ReportApiInterface { public fetchTransformSchemas(): Promise { throw new Error('Method not implemented.'); } + public fetchReport(): Promise { + throw new Error('Method not implemented.'); + } } diff --git a/packages/api-client/src/connections/mocks/MockWebConfigApi.ts b/packages/api-client/src/connections/mocks/MockWebConfigApi.ts new file mode 100644 index 0000000000..80af8b34d2 --- /dev/null +++ b/packages/api-client/src/connections/mocks/MockWebConfigApi.ts @@ -0,0 +1,12 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import { WebConfigApiInterface } from '..'; + +export class MockWebConfigApi implements WebConfigApiInterface { + public fetchReport(): Promise { + throw new Error('Method not implemented.'); + } +} diff --git a/packages/api-client/src/connections/mocks/index.ts b/packages/api-client/src/connections/mocks/index.ts index 35166205df..9a3a3fda30 100644 --- a/packages/api-client/src/connections/mocks/index.ts +++ b/packages/api-client/src/connections/mocks/index.ts @@ -8,3 +8,4 @@ export { MockCentralApi } from './MockCentralApi'; export { MockDataTableApi } from './MockDataTableApi'; export { MockEntityApi } from './MockEntityApi'; export { MockReportApi } from './MockReportApi'; +export { MockWebConfigApi } from './MockWebConfigApi'; diff --git a/packages/api-client/src/constants.ts b/packages/api-client/src/constants.ts index fae93b8b4d..75b6767c24 100644 --- a/packages/api-client/src/constants.ts +++ b/packages/api-client/src/constants.ts @@ -5,7 +5,7 @@ export const DATA_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'; -type ServiceName = 'auth' | 'entity' | 'central' | 'report' | 'dataTable'; +type ServiceName = 'auth' | 'entity' | 'central' | 'report' | 'dataTable' | 'webConfig'; export type ServiceBaseUrlSet = Record; const productionSubdomains = [ @@ -52,6 +52,11 @@ const SERVICES = { version: 'v1', localPort: '8010', }, + webConfig: { + subdomain: 'config', + version: 'v1', + localPort: '8000', + }, }; const getLocalUrl = (service: ServiceName): string => @@ -62,6 +67,7 @@ export const LOCALHOST_BASE_URLS: ServiceBaseUrlSet = { central: getLocalUrl('central'), report: getLocalUrl('report'), dataTable: getLocalUrl('dataTable'), + webConfig: getLocalUrl('webConfig'), }; const getServiceUrl = (service: ServiceName, subdomainPrefix?: string): string => { @@ -76,6 +82,7 @@ export const DEV_BASE_URLS: ServiceBaseUrlSet = { central: getServiceUrl('central', 'dev'), report: getServiceUrl('report', 'dev'), dataTable: getServiceUrl('dataTable', 'dev'), + webConfig: getServiceUrl('webConfig', 'dev'), }; export const PRODUCTION_BASE_URLS: ServiceBaseUrlSet = { @@ -84,6 +91,7 @@ export const PRODUCTION_BASE_URLS: ServiceBaseUrlSet = { central: getServiceUrl('central'), report: getServiceUrl('report'), dataTable: getServiceUrl('dataTable'), + webConfig: getServiceUrl('webConfig'), }; const getServiceUrlForSubdomain = (service: ServiceName, originalSubdomain: string): string => { @@ -122,16 +130,18 @@ const getDefaultBaseUrls = (hostname: string): ServiceBaseUrlSet => { central: getServiceUrlForSubdomain('central', subdomain), report: getServiceUrlForSubdomain('report', subdomain), dataTable: getServiceUrlForSubdomain('dataTable', subdomain), + webConfig: getServiceUrlForSubdomain('webConfig', subdomain), }; }; export const getBaseUrlsForHost = (hostname: string): ServiceBaseUrlSet => { - const { auth, entity, central, report, dataTable } = getDefaultBaseUrls(hostname); + const { auth, entity, central, report, dataTable, webConfig } = getDefaultBaseUrls(hostname); return { auth: process.env.AUTH_API_URL || auth, entity: process.env.ENTITY_API_URL || entity, central: process.env.CENTRAL_API_URL || central, report: process.env.REPORT_API_URL || report, dataTable: process.env.DATA_TABLE_API_URL || dataTable, + webConfig: process.env.WEB_CONFIG_API_URL || webConfig, }; }; diff --git a/packages/server-boilerplate/src/index.ts b/packages/server-boilerplate/src/index.ts index b4cf17e991..1d31be3c71 100644 --- a/packages/server-boilerplate/src/index.ts +++ b/packages/server-boilerplate/src/index.ts @@ -17,6 +17,7 @@ export { SessionType, SessionCookie, attachSession, + attachSessionIfAvailable, } from './orchestrator'; export * from './types'; export * from './models'; diff --git a/packages/server-boilerplate/src/orchestrator/index.ts b/packages/server-boilerplate/src/orchestrator/index.ts index 64413aa875..73158d7656 100644 --- a/packages/server-boilerplate/src/orchestrator/index.ts +++ b/packages/server-boilerplate/src/orchestrator/index.ts @@ -6,4 +6,4 @@ export { ApiBuilder } from './api'; export { SessionModel, SessionType } from './models'; export { SessionCookie } from './types'; -export { attachSession } from './session'; +export { attachSession, attachSessionIfAvailable } from './session'; diff --git a/packages/server-boilerplate/src/orchestrator/session/attachSession.ts b/packages/server-boilerplate/src/orchestrator/session/attachSession.ts index c837c313f5..3ca3b97fe6 100644 --- a/packages/server-boilerplate/src/orchestrator/session/attachSession.ts +++ b/packages/server-boilerplate/src/orchestrator/session/attachSession.ts @@ -27,3 +27,16 @@ export const attachSession = async (req: Request, res: Response, next: NextFunct next(error); } }; + +export const attachSessionIfAvailable = async (req: Request, res: Response, next: NextFunction) => { + // Discard authorization errors from attach session so function succeeds even if session doesn't exist + try { + attachSession(req, res, () => { next() }); + } catch(error: any) { + if (error instanceof UnauthenticatedError) { + next(); + } else { + throw error; + } + } +}; diff --git a/packages/server-boilerplate/src/orchestrator/session/index.ts b/packages/server-boilerplate/src/orchestrator/session/index.ts index 79b978af44..2b7df48463 100644 --- a/packages/server-boilerplate/src/orchestrator/session/index.ts +++ b/packages/server-boilerplate/src/orchestrator/session/index.ts @@ -3,4 +3,4 @@ * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ -export { attachSession } from './attachSession'; +export { attachSession, attachSessionIfAvailable } from './attachSession'; diff --git a/packages/tupaia-web-server/src/@types/express/index.d.ts b/packages/tupaia-web-server/src/@types/express/index.d.ts index a4bcfc0be3..3db6620306 100644 --- a/packages/tupaia-web-server/src/@types/express/index.d.ts +++ b/packages/tupaia-web-server/src/@types/express/index.d.ts @@ -5,13 +5,16 @@ import { AccessPolicy } from '@tupaia/access-policy'; import { TupaiaApiClient } from '@tupaia/api-client'; +import { SessionCookie } from '@tupaia/server-boilerplate'; -import { TupaiaWebSessionType } from '../../models'; +import { TupaiaWebSessionType, TupaiaWebSessionModel } from '../../models'; declare global { namespace Express { export interface Request { accessPolicy: AccessPolicy; + sessionModel: TupaiaWebSessionModel; + sessionCookie?: SessionCookie; session: TupaiaWebSessionType; ctx: { services: TupaiaApiClient; diff --git a/packages/tupaia-web-server/src/app/createApp.ts b/packages/tupaia-web-server/src/app/createApp.ts index 286102a435..1efdeec6f5 100644 --- a/packages/tupaia-web-server/src/app/createApp.ts +++ b/packages/tupaia-web-server/src/app/createApp.ts @@ -2,21 +2,40 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ + import { TupaiaDatabase } from '@tupaia/database'; import { OrchestratorApiBuilder, handleWith, useForwardUnhandledRequests, + attachSessionIfAvailable, } from '@tupaia/server-boilerplate'; import { SessionSwitchingAuthHandler } from '@tupaia/api-client'; import { TupaiaWebSessionModel } from '../models'; +import { + DashboardsRoute, + ReportRoute, + UserRoute, + TempLogoutRoute, + + DashboardsRequest, + ReportRequest, + UserRequest, + TempLogoutRequest, +} from '../routes'; const { WEB_CONFIG_API_URL = 'http://localhost:8000/api/v1' } = process.env; export function createApp() { const app = new OrchestratorApiBuilder(new TupaiaDatabase(), 'tupaia-web') - .attachApiClientToContext(req => new SessionSwitchingAuthHandler(req.session)) .useSessionModel(TupaiaWebSessionModel) + .useAttachSession(attachSessionIfAvailable) + .attachApiClientToContext(req => new SessionSwitchingAuthHandler(req.session)) + .get('report/:reportCode', handleWith(ReportRoute)) + .get('getUser', handleWith(UserRoute)) + .get('dashboards', handleWith(DashboardsRoute)) + // TODO: Stop using get for logout, then delete this + .get('logout', handleWith(TempLogoutRoute)) .build(); useForwardUnhandledRequests(app, WEB_CONFIG_API_URL); diff --git a/packages/tupaia-web-server/src/routes/DashboardsRoute.ts b/packages/tupaia-web-server/src/routes/DashboardsRoute.ts new file mode 100644 index 0000000000..02a12c2ac5 --- /dev/null +++ b/packages/tupaia-web-server/src/routes/DashboardsRoute.ts @@ -0,0 +1,31 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import { Request } from 'express'; +import { Route } from '@tupaia/server-boilerplate'; + +export type DashboardsRequest = Request< + any, + any, + any, + any +>; + +export class DashboardsRoute extends Route { + public async buildResponse() { + const { query, ctx } = this.req; + const { organisationUnitCode, projectCode } = query; + + const project = (await ctx.services.central.fetchResources('projects', { filter: { code: projectCode }, columns: JSON.stringify(['entity_id', 'entity_hierarchy.name']) }))[0]; + const baseEntity = await ctx.services.entity.getEntity(project['entity_hierarchy.name'], organisationUnitCode); + // TODO: Add a better getAncestors function to the EntityApi + const entities = await ctx.services.entity.getRelationshipsOfEntity(project['entity_hierarchy.name'], project.entity_id, 'descendant', {}, {} , { filter: { type: baseEntity.type } }); + const dashboards = await ctx.services.central.fetchResources('dashboards', { filter: { root_entity_code: entities.ancestors }}); + return Promise.all(dashboards.map(async (dash: any) => ({ + ...dash, + items: await ctx.services.central.fetchResources(`dashboards/${dash.id}/dashboardRelations`) + }))); + } +} diff --git a/packages/tupaia-web-server/src/routes/ReportRoute.ts b/packages/tupaia-web-server/src/routes/ReportRoute.ts new file mode 100644 index 0000000000..dd4b91b50b --- /dev/null +++ b/packages/tupaia-web-server/src/routes/ReportRoute.ts @@ -0,0 +1,30 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * + */ + +import { Request } from 'express'; +import { Route } from '@tupaia/server-boilerplate'; + +export type ReportRequest = Request< + { reportCode: string }, + any, + any, + any +>; + +export class ReportRoute extends Route { + public async buildResponse() { + const { query, ctx } = this.req; + const { reportCode } = this.req.params; + const { legacy } = query; + + // Legacy data builders are handled through the web config server still + if (legacy === 'true') { + return ctx.services.webConfig.fetchReport(reportCode, query); + } + + return ctx.services.report.fetchReport(reportCode, query); + } +} diff --git a/packages/tupaia-web-server/src/routes/TempLogoutRoute.ts b/packages/tupaia-web-server/src/routes/TempLogoutRoute.ts new file mode 100644 index 0000000000..8ae17c7352 --- /dev/null +++ b/packages/tupaia-web-server/src/routes/TempLogoutRoute.ts @@ -0,0 +1,28 @@ +// TODO: Stop using get for logout, then delete this whole file + +import { Request } from 'express'; +import { Route } from '@tupaia/server-boilerplate'; + +export type TempLogoutRequest = Request< + any, + { loggedOut: boolean }, + any, + any +>; + +export class TempLogoutRoute extends Route { + public async buildResponse() { + const { sessionCookie } = this.req; + const sessionId = sessionCookie?.id; + + if (sessionId && this.req.sessionModel) { + await this.req.sessionModel.deleteById(sessionId); + } + + if (sessionCookie !== undefined) { + sessionCookie.reset?.(); + } + + return { loggedOut: true }; + } +} diff --git a/packages/tupaia-web-server/src/routes/UserRoute.ts b/packages/tupaia-web-server/src/routes/UserRoute.ts new file mode 100644 index 0000000000..5b2f7857e1 --- /dev/null +++ b/packages/tupaia-web-server/src/routes/UserRoute.ts @@ -0,0 +1,23 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import { Request } from 'express'; +import { Route } from '@tupaia/server-boilerplate'; + +export type UserRequest = Request; + +export class UserRoute extends Route { + public async buildResponse() { + const { ctx, session } = this.req; + + // Avoid sending a 'me' request as the api user + if (!session) { + // Triggers frontend login + return { name: 'public' }; + } + + return ctx.services.central.getUser(); + } +} diff --git a/packages/tupaia-web-server/src/routes/index.ts b/packages/tupaia-web-server/src/routes/index.ts new file mode 100644 index 0000000000..51fd89e7bb --- /dev/null +++ b/packages/tupaia-web-server/src/routes/index.ts @@ -0,0 +1,11 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { DashboardsRequest, DashboardsRoute } from './DashboardsRoute'; +export { ReportRequest, ReportRoute } from './ReportRoute'; +export { UserRequest, UserRoute } from './UserRoute'; + +// TODO: Stop using get for logout, then delete this +export { TempLogoutRequest, TempLogoutRoute } from './TempLogoutRoute'; From 22053e027d08bb89012c3324f75cf5ab45c98955 Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Thu, 8 Jun 2023 11:53:03 +1200 Subject: [PATCH 107/251] Waitp 1201 basic web layout (#4620) * WAITP-1201 Top bar * WAITP-1201 Add map layout part 1 * WAITP-1201 Map layout part 2 * WAITP-1201 Update map layout * WAITP-1202 Update map layout and add context for sidebar * WAITP-1201 add types for context * WAITP-1201 fix types * WAITP-1201 add comments * WAITP-1201 AuthModal layout * WAITP-1201 update menus * WAITP-1201 Add buttons to auth modal * WAITP-1201 Set user views as auth modals * WAITP-1201 Update comments and folder structure * WAITP-1201 Add stories * WAITP-1201 remove storybook-react-router * WAITP-1201 tweaks * WAITP-1201 remove theme variables * WAITP-1201 remove dropdown and stories * WAITP-1201 move mapdiv * WAITP-1201 remove extra height line * WAITP-1201 keep padding in close button * Update packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx Co-authored-by: Tom Caiger * Update min-width Co-authored-by: Tom Caiger --------- Co-authored-by: Tom Caiger --- .../.storybook/ReactRouterDecorator.tsx | 27 +++ packages/tupaia-web/.storybook/main.ts | 2 +- packages/tupaia-web/.storybook/preview.tsx | 8 +- packages/tupaia-web/package.json | 2 +- .../public/images/tupaia-logo-light.svg | 12 + packages/tupaia-web/src/App.tsx | 11 +- packages/tupaia-web/src/AppStyleProviders.tsx | 23 +- packages/tupaia-web/src/Router.tsx | 41 ---- packages/tupaia-web/src/Routes.tsx | 36 +++ packages/tupaia-web/src/components/Modal.tsx | 61 +++++ packages/tupaia-web/src/components/index.ts | 1 + packages/tupaia-web/src/constants/colors.ts | 5 + .../tupaia-web/src/constants/constants.ts | 2 + packages/tupaia-web/src/constants/index.ts | 1 + packages/tupaia-web/src/layout/AuthModal.tsx | 100 ++++++++ packages/tupaia-web/src/layout/Layout.tsx | 39 ++++ .../src/layout/MapLayout/MapLayout.tsx | 71 ++++++ .../src/layout/MapLayout/MapWatermark.tsx | 38 ++++ .../tupaia-web/src/layout/MapLayout/index.ts | 7 + .../src/layout/Sidebar/ExpandButton.tsx | 43 ++++ .../tupaia-web/src/layout/Sidebar/Sidebar.tsx | 46 ++++ .../tupaia-web/src/layout/Sidebar/index.ts | 6 + .../tupaia-web/src/layout/TopBar/Logo.tsx | 89 ++++++++ .../tupaia-web/src/layout/TopBar/TopBar.tsx | 54 +++++ .../tupaia-web/src/layout/TopBar/index.ts | 6 + .../src/layout/UserMenu/DrawerMenu.tsx | 128 +++++++++++ .../src/layout/UserMenu/MenuList.tsx | 102 +++++++++ .../src/layout/UserMenu/PopoverMenu.tsx | 53 +++++ .../src/layout/UserMenu/UserMenu.tsx | 79 +++++++ .../tupaia-web/src/layout/UserMenu/index.ts | 6 + packages/tupaia-web/src/layout/index.ts | 4 + packages/tupaia-web/src/pages/LoginForm.tsx | 14 +- .../src/pages/PasswordResetForm.tsx | 3 +- packages/tupaia-web/src/pages/Project.tsx | 25 +- .../tupaia-web/src/pages/RegisterForm.tsx | 3 +- .../src/pages/RequestAccessForm.tsx | 3 +- .../tupaia-web/src/pages/VerifyEmailForm.tsx | 3 +- packages/tupaia-web/src/theme/constants.ts | 12 + packages/tupaia-web/src/theme/index.ts | 2 + packages/tupaia-web/src/theme/theme.ts | 16 ++ packages/tupaia-web/src/types/mui.d.ts | 7 + packages/tupaia-web/stories/Introduction.mdx | 213 ------------------ .../stories/components/modal.stories.tsx | 28 +++ .../stories/layout/authModal.stories.tsx | 58 +++++ packages/tupaia-web/vite.config.ts | 4 + .../src/components/EnvBanner.tsx | 8 +- 46 files changed, 1200 insertions(+), 302 deletions(-) create mode 100644 packages/tupaia-web/.storybook/ReactRouterDecorator.tsx create mode 100644 packages/tupaia-web/public/images/tupaia-logo-light.svg delete mode 100644 packages/tupaia-web/src/Router.tsx create mode 100644 packages/tupaia-web/src/Routes.tsx create mode 100644 packages/tupaia-web/src/components/Modal.tsx create mode 100644 packages/tupaia-web/src/constants/colors.ts create mode 100644 packages/tupaia-web/src/layout/AuthModal.tsx create mode 100644 packages/tupaia-web/src/layout/Layout.tsx create mode 100644 packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx create mode 100644 packages/tupaia-web/src/layout/MapLayout/MapWatermark.tsx create mode 100644 packages/tupaia-web/src/layout/MapLayout/index.ts create mode 100644 packages/tupaia-web/src/layout/Sidebar/ExpandButton.tsx create mode 100644 packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx create mode 100644 packages/tupaia-web/src/layout/Sidebar/index.ts create mode 100644 packages/tupaia-web/src/layout/TopBar/Logo.tsx create mode 100644 packages/tupaia-web/src/layout/TopBar/TopBar.tsx create mode 100644 packages/tupaia-web/src/layout/TopBar/index.ts create mode 100644 packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx create mode 100644 packages/tupaia-web/src/layout/UserMenu/MenuList.tsx create mode 100644 packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx create mode 100644 packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx create mode 100644 packages/tupaia-web/src/layout/UserMenu/index.ts create mode 100644 packages/tupaia-web/src/theme/constants.ts create mode 100644 packages/tupaia-web/src/theme/theme.ts create mode 100644 packages/tupaia-web/src/types/mui.d.ts delete mode 100644 packages/tupaia-web/stories/Introduction.mdx create mode 100644 packages/tupaia-web/stories/components/modal.stories.tsx create mode 100644 packages/tupaia-web/stories/layout/authModal.stories.tsx diff --git a/packages/tupaia-web/.storybook/ReactRouterDecorator.tsx b/packages/tupaia-web/.storybook/ReactRouterDecorator.tsx new file mode 100644 index 0000000000..5d640ff82c --- /dev/null +++ b/packages/tupaia-web/.storybook/ReactRouterDecorator.tsx @@ -0,0 +1,27 @@ +import React, { useEffect } from 'react'; +import { action } from '@storybook/addon-actions'; +import { BrowserRouter, useLocation } from 'react-router-dom'; +import { Args } from '@storybook/react'; +import { DecoratorFunction } from '@storybook/csf'; + +const LocationChangeAction = ({ children }) => { + const location = useLocation(); + + useEffect(() => { + if (location.key !== 'default') action('React Router Location Change')(location); + }, [location]); + + return <>{children}; +}; + +const ReactRouterDecorator: DecoratorFunction = (Story, context) => { + return ( + + + + + + ); +}; + +export default ReactRouterDecorator; diff --git a/packages/tupaia-web/.storybook/main.ts b/packages/tupaia-web/.storybook/main.ts index bcd781cba5..96194a5be8 100644 --- a/packages/tupaia-web/.storybook/main.ts +++ b/packages/tupaia-web/.storybook/main.ts @@ -1,6 +1,6 @@ import type { StorybookConfig } from '@storybook/react-vite'; const config: StorybookConfig = { - stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], + stories: ['../stories/**/*.mdx', '../stories/**/*.stories.@(js|jsx|ts|tsx)'], addons: [ '@storybook/addon-links', '@storybook/addon-essentials', diff --git a/packages/tupaia-web/.storybook/preview.tsx b/packages/tupaia-web/.storybook/preview.tsx index 763b4020eb..660fc72347 100644 --- a/packages/tupaia-web/.storybook/preview.tsx +++ b/packages/tupaia-web/.storybook/preview.tsx @@ -1,15 +1,14 @@ import React from 'react'; import type { Preview } from '@storybook/react'; import { AppStyleProviders } from '../src/AppStyleProviders'; -import { DARK_BLUE, WHITE } from '../src/theme'; - +import ReactRouterDecorator from './ReactRouterDecorator'; const preview: Preview = { parameters: { backgrounds: { default: 'Dark', values: [ - { name: 'Dark', value: DARK_BLUE }, - { name: 'Light', value: WHITE }, + { name: 'Dark', value: '#135D8F' }, + { name: 'Light', value: '#ffffff' }, ], }, actions: { argTypesRegex: '^on[A-Z].*' }, @@ -21,6 +20,7 @@ const preview: Preview = { }, }, decorators: [ + ReactRouterDecorator, Story => { return ( diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index 8518eb5471..568b1360c1 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -40,7 +40,7 @@ "react": "^16.13.1", "react-dom": "^16.13.1", "react-router": "6.3.0", - "react-router-dom": "6.3.0", + "react-router-dom": "6.3.0", "styled-components": "^5.1.0", "vite-plugin-ejs": "^1.6.4", "vite-plugin-env-compatible": "^1.1.1" diff --git a/packages/tupaia-web/public/images/tupaia-logo-light.svg b/packages/tupaia-web/public/images/tupaia-logo-light.svg new file mode 100644 index 0000000000..9a15c95936 --- /dev/null +++ b/packages/tupaia-web/public/images/tupaia-logo-light.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index 0ff12be8d2..e66328215e 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -4,12 +4,19 @@ */ import React from 'react'; import { AppStyleProviders } from './AppStyleProviders'; -import { Router } from './Router'; +import { Routes } from './Routes'; +import { Layout } from './layout'; +import { BrowserRouter } from 'react-router-dom'; const App = () => { return ( - + + {/** The Layout component needs to be inside BrowserRouter so that Link component from react-router-dom can be used (in menu etc.) */} + + + + ); }; diff --git a/packages/tupaia-web/src/AppStyleProviders.tsx b/packages/tupaia-web/src/AppStyleProviders.tsx index 35900ac04f..0c223b8085 100644 --- a/packages/tupaia-web/src/AppStyleProviders.tsx +++ b/packages/tupaia-web/src/AppStyleProviders.tsx @@ -3,29 +3,10 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React, { ReactNode } from 'react'; -import { - StylesProvider, - createMuiTheme, - ThemeProvider as MuiThemeProvider, -} from '@material-ui/core/styles'; +import { ThemeProvider as MuiThemeProvider, StylesProvider } from '@material-ui/core/styles'; import CssBaseline from '@material-ui/core/CssBaseline'; import { ThemeProvider } from 'styled-components'; - -// Base theme overrides. Any extra overrides should be added here, as needed. -const theme = createMuiTheme({ - palette: { - type: 'dark', - primary: { - main: '#0296c5', // Main blue (as seen on primary buttons) - }, - secondary: { - main: '##ee6230', // Tupaia Orange - }, - background: { - default: '#262834', // Dark blue background - }, - }, -}); +import { theme } from './theme'; export const AppStyleProviders = ({ children }: { children: ReactNode }) => ( diff --git a/packages/tupaia-web/src/Router.tsx b/packages/tupaia-web/src/Router.tsx deleted file mode 100644 index 319fcecffb..0000000000 --- a/packages/tupaia-web/src/Router.tsx +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import React from 'react'; -import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'; -import { - LandingPage, - LoginForm, - PasswordResetForm, - Project, - RegisterForm, - RequestAccessForm, - VerifyEmailForm, -} from './pages'; -import { DEFAULT_URL } from './constants'; - -/** - * This Router is using [version 6.3]{@link https://reactrouter.com/en/v6.3.0}, as later versions are not supported by our TS setup. See [this issue here]{@link https://github.com/remix-run/react-router/discussions/8364} - * This means the newer 'createBrowserRouter' and 'RouterProvider' can't be used here. - * - * **/ - -export const Router = () => ( - - - } /> - {/** - * The below user pages will actually be modals, which will be done when each view is created. There is an example at: https://github.com/remix-run/react-router/tree/dev/examples/modal - */} - } /> - } /> - } /> - } /> - } /> - } /> - {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} - } /> - - -); diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx new file mode 100644 index 0000000000..e16b719442 --- /dev/null +++ b/packages/tupaia-web/src/Routes.tsx @@ -0,0 +1,36 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import { Navigate, Route, Routes as RouterRoutes } from 'react-router-dom'; +import { + LandingPage, + LoginForm, + PasswordResetForm, + Project, + RegisterForm, + RequestAccessForm, + VerifyEmailForm, +} from './pages'; +import { DEFAULT_URL } from './constants'; + +/** + * This Router is using [version 6.3]{@link https://reactrouter.com/en/v6.3.0}, as later versions are not supported by our TS setup. See [this issue here]{@link https://github.com/remix-run/react-router/discussions/8364} + * This means the newer 'createBrowserRouter' and 'RouterProvider' can't be used here. + * + * **/ + +export const Routes = () => ( + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} + } /> + +); diff --git a/packages/tupaia-web/src/components/Modal.tsx b/packages/tupaia-web/src/components/Modal.tsx new file mode 100644 index 0000000000..c40375c58b --- /dev/null +++ b/packages/tupaia-web/src/components/Modal.tsx @@ -0,0 +1,61 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React, { ReactNode } from 'react'; +import { Dialog, Paper as MuiPaper, useTheme, useMediaQuery } from '@material-ui/core'; +import MuiCloseIcon from '@material-ui/icons/Close'; +import styled from 'styled-components'; +import { IconButton } from '@tupaia/ui-components'; + +interface ModalProps { + children?: ReactNode; + onClose: () => void; + isOpen: boolean; +} + +const Wrapper = styled.div` + text-align: center; + overflow-x: hidden; + padding: 2em; +`; + +const CloseIcon = styled(MuiCloseIcon)` + width: 1.2em; + height: 1.2em; +`; + +const CloseButton = styled(IconButton)` + background-color: transparent; + min-width: initial; + position: absolute; + top: 0.6em; + right: 0.6em; +`; + +const Paper = styled(MuiPaper)` + background-color: ${({ theme }) => theme.palette.background.default}; + padding: 0; + color: rgba(255, 255, 255, 0.9); + overflow-y: auto; + max-width: 920px; + min-width: 300px; + // Prevent width from animating. + transition: transform 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms; +`; + +export const Modal = ({ children, isOpen, onClose }: ModalProps) => { + // make the modal full screen at small screen sizes + const theme = useTheme(); + const fullScreen = useMediaQuery(theme.breakpoints.down('xs')); + return ( + + + + + + {children} + + + ); +}; diff --git a/packages/tupaia-web/src/components/index.ts b/packages/tupaia-web/src/components/index.ts index 652a972fc4..e5c2d245d9 100644 --- a/packages/tupaia-web/src/components/index.ts +++ b/packages/tupaia-web/src/components/index.ts @@ -2,3 +2,4 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +export { Modal } from './Modal'; diff --git a/packages/tupaia-web/src/constants/colors.ts b/packages/tupaia-web/src/constants/colors.ts new file mode 100644 index 0000000000..2f8cb75b56 --- /dev/null +++ b/packages/tupaia-web/src/constants/colors.ts @@ -0,0 +1,5 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + */ +export const TRANSPARENT_BLACK = 'rgba(43, 45, 56, 0.94)'; diff --git a/packages/tupaia-web/src/constants/constants.ts b/packages/tupaia-web/src/constants/constants.ts index 308a6ed433..78ca63eb92 100644 --- a/packages/tupaia-web/src/constants/constants.ts +++ b/packages/tupaia-web/src/constants/constants.ts @@ -6,3 +6,5 @@ export const DEFAULT_PROJECT_CODE = 'explore'; export const DEFAULT_ENTITY_CODE = 'explore'; export const DEFAULT_URL = `${DEFAULT_PROJECT_CODE}/${DEFAULT_ENTITY_CODE}`; + +export const TUPAIA_LIGHT_LOGO_SRC = '/images/tupaia-logo-light.svg'; diff --git a/packages/tupaia-web/src/constants/index.ts b/packages/tupaia-web/src/constants/index.ts index c89172dfac..ec91fa77a7 100644 --- a/packages/tupaia-web/src/constants/index.ts +++ b/packages/tupaia-web/src/constants/index.ts @@ -2,4 +2,5 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +export * from './colors'; export * from './constants'; diff --git a/packages/tupaia-web/src/layout/AuthModal.tsx b/packages/tupaia-web/src/layout/AuthModal.tsx new file mode 100644 index 0000000000..b19385f134 --- /dev/null +++ b/packages/tupaia-web/src/layout/AuthModal.tsx @@ -0,0 +1,100 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React, { ReactNode } from 'react'; +import { To, useNavigate } from 'react-router'; +import { Modal } from '../components'; +import styled from 'styled-components'; +import { TUPAIA_LIGHT_LOGO_SRC } from '../constants'; +import { Button, Typography } from '@material-ui/core'; +import { FONT_SIZES } from '../theme'; +import { OutlinedButton } from '@tupaia/ui-components'; + +const Logo = styled.img` + min-width: 110px; + margin-top: 1.8em; + margin-bottom: 3em; +`; + +const Title = styled(Typography)` + font-size: ${FONT_SIZES.viewTitle}; + font-weight: 500; +`; + +const Subtitle = styled(Typography)` + font-size: 1em; + margin-top: 1.4em; +`; + +const PrimaryButton = styled(Button).attrs({ + variant: 'contained', + color: 'primary', +})` + text-transform: none; + font-size: 1em; + width: 100%; + margin-left: 0 !important; + margin-top: 2em; +`; + +const SecondaryButton = styled(OutlinedButton).attrs({ + color: 'default', +})` + text-transform: none; + font-size: 1em; + width: 100%; + margin-left: 0 !important; + padding: 0.375em 1em; // to match the height of the primary button + border-color: ${({ theme }) => theme.palette.text.secondary}; + ${PrimaryButton} + & { + margin-top: 1.3em; + } +`; + +type ButtonProps = { + onClick: () => void; + text: string; +}; +interface AuthModalProps { + children?: ReactNode; + onClose?: () => void; + title?: string; + subtitle?: string; + navigateTo?: To | number; // the path to navigate to on close, if set. Numbers are acceptable for e.g. -1 meaning back 1 route + primaryButton?: ButtonProps; + secondaryButton?: ButtonProps; +} + +export const AuthModal = ({ + children, + onClose, + navigateTo = -1, + title, + subtitle, + primaryButton, + secondaryButton, +}: AuthModalProps) => { + const navigate = useNavigate(); + const onCloseModal = () => { + // navigate back to the previous route on close if no path is provided + navigate(navigateTo as To); + if (onClose) onClose(); + }; + // This modal will always be open in this case, because these are only visible on certain routes + return ( + + + {title} + {subtitle && {subtitle}} + {children} + {primaryButton && ( + {primaryButton.text} + )} + {secondaryButton && ( + {secondaryButton.text} + )} + + ); +}; diff --git a/packages/tupaia-web/src/layout/Layout.tsx b/packages/tupaia-web/src/layout/Layout.tsx new file mode 100644 index 0000000000..b7f4d896ac --- /dev/null +++ b/packages/tupaia-web/src/layout/Layout.tsx @@ -0,0 +1,39 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React, { ReactNode } from 'react'; +import styled from 'styled-components'; +import { EnvBanner } from '@tupaia/ui-components'; +import { TopBar } from './TopBar'; + +/** + * This is the layout for the entire app, which contains the top bar and the main content. This is used to wrap the entire app content + */ +const Container = styled.div` + position: fixed; + flex-direction: column; + flex-wrap: nowrap; + width: 100%; + pointer-events: none; + display: flex; + align-items: stretch; + align-content: stretch; + overflow-y: hidden; + height: 100%; + + svg.recharts-surface { + overflow: visible; + } +`; + +export const Layout = ({ children }: { children: ReactNode }) => { + return ( + + + + {children} + + ); +}; diff --git a/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx b/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx new file mode 100644 index 0000000000..e37ec61001 --- /dev/null +++ b/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx @@ -0,0 +1,71 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import styled from 'styled-components'; +import { MapWatermark } from './MapWatermark'; + +const MapContainer = styled.div` + height: 100vh; + transition: width 0.5s ease; + width: 100%; +`; + +export const Map = () => { + return {/* */}; +}; + +const Wrapper = styled.div` + flex: 1; + display: flex; + position: relative; +`; + +const MapControlsContainer = styled.div` + display: flex; + flex-direction: column; + flex: 1; + position: absolute; // make this absolutely positioned so that it lays over the map + width: 100%; + height: 100%; +`; + +const MapLegendWrapper = styled.div` + display: flex; + flex-direction: row; + align-items: flex-end; + justify-content: center; +`; + +const Watermark = styled(MapWatermark)` + margin-left: 2px; + margin-bottom: 16px; +`; + +// Placeholder for MapOverlaySelector component +const MapOverlaySelector = styled.div` + width: 25%; + margin: 2em; + height: 200px; + background-color: rgba(255, 255, 255, 0.2); +`; + +/** + * This is the layout for the lefthand side of the app, which contains the map controls and watermark, as well as the map + */ + +export const MapLayout = () => { + return ( + + + + {/** This is where the map legend would go */} + + + {/** This is where the tilepicker would go */} + + + ); +}; diff --git a/packages/tupaia-web/src/layout/MapLayout/MapWatermark.tsx b/packages/tupaia-web/src/layout/MapLayout/MapWatermark.tsx new file mode 100644 index 0000000000..931c2c32d3 --- /dev/null +++ b/packages/tupaia-web/src/layout/MapLayout/MapWatermark.tsx @@ -0,0 +1,38 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2022 Beyond Essential Systems Pty Ltd + */ + +import React, { AnchorHTMLAttributes } from 'react'; +import styled from 'styled-components'; + +const StyledLink = styled.a` + position: absolute; + display: block; + height: 20px; + width: 65px; + left: 0; + bottom: 0; + text-indent: -9999px; + z-index: 99999; + overflow: hidden; + + /* This is the recommended way of adding the watermark + @see https://docs.mapbox.com/help/how-mapbox-works/attribution */ + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgODAuNDcgMjAuMDIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDgwLjQ3IDIwLjAyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4uc3Qwe29wYWNpdHk6MC42O2ZpbGw6I0ZGRkZGRjtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30uc3Qxe29wYWNpdHk6MC42O2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fTwvc3R5bGU+PGc+PHBhdGggY2xhc3M9InN0MCIgZD0iTTc5LjI5LDEzLjYxYzAsMC4xMS0wLjA5LDAuMi0wLjIsMC4yaC0xLjUzYy0wLjEyLDAtMC4yMy0wLjA2LTAuMjktMC4xNmwtMS4zNy0yLjI4bC0xLjM3LDIuMjhjLTAuMDYsMC4xLTAuMTcsMC4xNi0wLjI5LDAuMTZoLTEuNTNjLTAuMDQsMC0wLjA4LTAuMDEtMC4xMS0wLjAzYy0wLjA5LTAuMDYtMC4xMi0wLjE4LTAuMDYtMC4yN2MwLDAsMCwwLDAsMGwyLjMxLTMuNWwtMi4yOC0zLjQ3Yy0wLjAyLTAuMDMtMC4wMy0wLjA3LTAuMDMtMC4xMWMwLTAuMTEsMC4wOS0wLjIsMC4yLTAuMmgxLjUzYzAuMTIsMCwwLjIzLDAuMDYsMC4yOSwwLjE2bDEuMzQsMi4yNWwxLjMzLTIuMjRjMC4wNi0wLjEsMC4xNy0wLjE2LDAuMjktMC4xNmgxLjUzYzAuMDQsMCwwLjA4LDAuMDEsMC4xMSwwLjAzYzAuMDksMC4wNiwwLjEyLDAuMTgsMC4wNiwwLjI3YzAsMCwwLDAsMCwwTDc2Ljk2LDEwbDIuMzEsMy41Qzc5LjI4LDEzLjUzLDc5LjI5LDEzLjU3LDc5LjI5LDEzLjYxeiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik02My4wOSw5LjE2Yy0wLjM3LTEuNzktMS44Ny0zLjEyLTMuNjYtMy4xMmMtMC45OCwwLTEuOTMsMC40LTIuNiwxLjEyVjMuMzdjMC0wLjEyLTAuMS0wLjIyLTAuMjItMC4yMmgtMS4zM2MtMC4xMiwwLTAuMjIsMC4xLTAuMjIsMC4yMnYxMC4yMWMwLDAuMTIsMC4xLDAuMjIsMC4yMiwwLjIyaDEuMzNjMC4xMiwwLDAuMjItMC4xLDAuMjItMC4yMnYtMC43YzAuNjgsMC43MSwxLjYyLDEuMTIsMi42LDEuMTJjMS43OSwwLDMuMjktMS4zNCwzLjY2LTMuMTNDNjMuMjEsMTAuMyw2My4yMSw5LjcyLDYzLjA5LDkuMTZMNjMuMDksOS4xNnogTTU5LjEyLDEyLjQxYy0xLjI2LDAtMi4yOC0xLjA2LTIuMy0yLjM2VjkuOTljMC4wMi0xLjMxLDEuMDQtMi4zNiwyLjMtMi4zNnMyLjMsMS4wNywyLjMsMi4zOVM2MC4zOSwxMi40MSw1OS4xMiwxMi40MXoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNNjguMjYsNi4wNGMtMS44OS0wLjAxLTMuNTQsMS4yOS0zLjk2LDMuMTNjLTAuMTIsMC41Ni0wLjEyLDEuMTMsMCwxLjY5YzAuNDIsMS44NSwyLjA3LDMuMTYsMy45NywzLjE0YzIuMjQsMCw0LjA2LTEuNzgsNC4wNi0zLjk5UzcwLjUxLDYuMDQsNjguMjYsNi4wNHogTTY4LjI0LDEyLjQyYy0xLjI3LDAtMi4zLTEuMDctMi4zLTIuMzlzMS4wMy0yLjQsMi4zLTIuNHMyLjMsMS4wNywyLjMsMi4zOVM2OS41MSwxMi40MSw2OC4yNCwxMi40Mkw2OC4yNCwxMi40MnoiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNNTkuMTIsNy42M2MtMS4yNiwwLTIuMjgsMS4wNi0yLjMsMi4zNnYwLjA2YzAuMDIsMS4zMSwxLjA0LDIuMzYsMi4zLDIuMzZzMi4zLTEuMDcsMi4zLTIuMzlTNjAuMzksNy42Myw1OS4xMiw3LjYzeiBNNTkuMTIsMTEuMjNjLTAuNiwwLTEuMDktMC41My0xLjExLTEuMTlWMTBjMC4wMS0wLjY2LDAuNTEtMS4xOSwxLjExLTEuMTlzMS4xMSwwLjU0LDEuMTEsMS4yMVM1OS43NCwxMS4yMyw1OS4xMiwxMS4yM3oiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNNjguMjQsNy42M2MtMS4yNywwLTIuMywxLjA3LTIuMywyLjM5czEuMDMsMi4zOSwyLjMsMi4zOXMyLjMtMS4wNywyLjMtMi4zOVM2OS41MSw3LjYzLDY4LjI0LDcuNjN6IE02OC4yNCwxMS4yM2MtMC42MSwwLTEuMTEtMC41NC0xLjExLTEuMjFzMC41LTEuMiwxLjExLTEuMnMxLjExLDAuNTQsMS4xMSwxLjIxUzY4Ljg1LDExLjIzLDY4LjI0LDExLjIzeiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00My41Niw2LjI0aC0xLjMzYy0wLjEyLDAtMC4yMiwwLjEtMC4yMiwwLjIydjAuN2MtMC42OC0wLjcxLTEuNjItMS4xMi0yLjYtMS4xMmMtMi4wNywwLTMuNzUsMS43OC0zLjc1LDMuOTlzMS42OSwzLjk5LDMuNzUsMy45OWMwLjk5LDAsMS45My0wLjQxLDIuNi0xLjEzdjAuN2MwLDAuMTIsMC4xLDAuMjIsMC4yMiwwLjIyaDEuMzNjMC4xMiwwLDAuMjItMC4xLDAuMjItMC4yMlY2LjQ0YzAtMC4xMS0wLjA5LTAuMjEtMC4yMS0wLjIxQzQzLjU3LDYuMjQsNDMuNTcsNi4yNCw0My41Niw2LjI0eiBNNDIuMDIsMTAuMDVjLTAuMDEsMS4zMS0xLjA0LDIuMzYtMi4zLDIuMzZzLTIuMy0xLjA3LTIuMy0yLjM5czEuMDMtMi40LDIuMjktMi40YzEuMjcsMCwyLjI4LDEuMDYsMi4zLDIuMzZMNDIuMDIsMTAuMDV6Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTM5LjcyLDcuNjNjLTEuMjcsMC0yLjMsMS4wNy0yLjMsMi4zOXMxLjAzLDIuMzksMi4zLDIuMzlzMi4yOC0xLjA2LDIuMy0yLjM2VjkuOTlDNDIsOC42OCw0MC45OCw3LjYzLDM5LjcyLDcuNjN6IE0zOC42MiwxMC4wMmMwLTAuNjcsMC41LTEuMjEsMS4xMS0xLjIxYzAuNjEsMCwxLjA5LDAuNTMsMS4xMSwxLjE5djAuMDRjLTAuMDEsMC42NS0wLjUsMS4xOC0xLjExLDEuMThTMzguNjIsMTAuNjgsMzguNjIsMTAuMDJ6Ii8+PHBhdGggY2xhc3M9InN0MCIgZD0iTTQ5LjkxLDYuMDRjLTAuOTgsMC0xLjkzLDAuNC0yLjYsMS4xMlY2LjQ1YzAtMC4xMi0wLjEtMC4yMi0wLjIyLTAuMjJoLTEuMzNjLTAuMTIsMC0wLjIyLDAuMS0wLjIyLDAuMjJ2MTAuMjFjMCwwLjEyLDAuMSwwLjIyLDAuMjIsMC4yMmgxLjMzYzAuMTIsMCwwLjIyLTAuMSwwLjIyLTAuMjJ2LTMuNzhjMC42OCwwLjcxLDEuNjIsMS4xMiwyLjYxLDEuMTJjMi4wNywwLDMuNzUtMS43OCwzLjc1LTMuOTlTNTEuOTgsNi4wNCw0OS45MSw2LjA0eiBNNDkuNiwxMi40MmMtMS4yNiwwLTIuMjgtMS4wNi0yLjMtMi4zNlY5Ljk5YzAuMDItMS4zMSwxLjA0LTIuMzcsMi4yOS0yLjM3YzEuMjYsMCwyLjMsMS4wNywyLjMsMi4zOVM1MC44NiwxMi40MSw0OS42LDEyLjQyTDQ5LjYsMTIuNDJ6Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTQ5LjYsNy42M2MtMS4yNiwwLTIuMjgsMS4wNi0yLjMsMi4zNnYwLjA2YzAuMDIsMS4zMSwxLjA0LDIuMzYsMi4zLDIuMzZzMi4zLTEuMDcsMi4zLTIuMzlTNTAuODYsNy42Myw0OS42LDcuNjN6IE00OS42LDExLjIzYy0wLjYsMC0xLjA5LTAuNTMtMS4xMS0xLjE5VjEwQzQ4LjUsOS4zNCw0OSw4LjgxLDQ5LjYsOC44MWMwLjYsMCwxLjExLDAuNTUsMS4xMSwxLjIxUzUwLjIxLDExLjIzLDQ5LjYsMTEuMjN6Ii8+PHBhdGggY2xhc3M9InN0MCIgZD0iTTM0LjM2LDEzLjU5YzAsMC4xMi0wLjEsMC4yMi0wLjIyLDAuMjJoLTEuMzRjLTAuMTIsMC0wLjIyLTAuMS0wLjIyLTAuMjJWOS4yNGMwLTAuOTMtMC43LTEuNjMtMS41NC0xLjYzYy0wLjc2LDAtMS4zOSwwLjY3LTEuNTEsMS41NGwwLjAxLDQuNDRjMCwwLjEyLTAuMSwwLjIyLTAuMjIsMC4yMmgtMS4zNGMtMC4xMiwwLTAuMjItMC4xLTAuMjItMC4yMlY5LjI0YzAtMC45My0wLjctMS42My0xLjU0LTEuNjNjLTAuODEsMC0xLjQ3LDAuNzUtMS41MiwxLjcxdjQuMjdjMCwwLjEyLTAuMSwwLjIyLTAuMjIsMC4yMmgtMS4zM2MtMC4xMiwwLTAuMjItMC4xLTAuMjItMC4yMlY2LjQ0YzAuMDEtMC4xMiwwLjEtMC4yMSwwLjIyLTAuMjFoMS4zM2MwLjEyLDAsMC4yMSwwLjEsMC4yMiwwLjIxdjAuNjNjMC40OC0wLjY1LDEuMjQtMS4wNCwyLjA2LTEuMDVoMC4wM2MxLjA0LDAsMS45OSwwLjU3LDIuNDgsMS40OGMwLjQzLTAuOSwxLjMzLTEuNDgsMi4zMi0xLjQ5YzEuNTQsMCwyLjc5LDEuMTksMi43NiwyLjY1TDM0LjM2LDEzLjU5eiIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik04MC4zMiwxMi45N2wtMC4wNy0wLjEyTDc4LjM4LDEwbDEuODUtMi44MWMwLjQyLTAuNjQsMC4yNS0xLjQ5LTAuMzktMS45MmMtMC4wMS0wLjAxLTAuMDItMC4wMS0wLjAzLTAuMDJjLTAuMjItMC4xNC0wLjQ4LTAuMjEtMC43NC0wLjIxaC0xLjUzYy0wLjUzLDAtMS4wMywwLjI4LTEuMywwLjc0bC0wLjMyLDAuNTNsLTAuMzItMC41M2MtMC4yOC0wLjQ2LTAuNzctMC43NC0xLjMxLTAuNzRoLTEuNTNjLTAuNTcsMC0xLjA4LDAuMzUtMS4yOSwwLjg4Yy0yLjA5LTEuNTgtNS4wMy0xLjQtNi45MSwwLjQzYy0wLjMzLDAuMzItMC42MiwwLjY5LTAuODUsMS4wOWMtMC44NS0xLjU1LTIuNDUtMi42LTQuMjgtMi42Yy0wLjQ4LDAtMC45NiwwLjA3LTEuNDEsMC4yMlYzLjM3YzAtMC43OC0wLjYzLTEuNDEtMS40LTEuNDFoLTEuMzNjLTAuNzcsMC0xLjQsMC42My0xLjQsMS40djMuNTdjLTAuOS0xLjMtMi4zOC0yLjA4LTMuOTctMi4wOWMtMC43LDAtMS4zOSwwLjE1LTIuMDIsMC40NWMtMC4yMy0wLjE2LTAuNTEtMC4yNS0wLjgtMC4yNWgtMS4zM2MtMC40MywwLTAuODMsMC4yLTEuMSwwLjUzYy0wLjAyLTAuMDMtMC4wNC0wLjA1LTAuMDctMC4wOGMtMC4yNy0wLjI5LTAuNjUtMC40NS0xLjA0LTAuNDVoLTEuMzJjLTAuMjksMC0wLjU3LDAuMDktMC44LDAuMjVDNDAuOCw1LDQwLjEyLDQuODUsMzkuNDIsNC44NWMtMS43NCwwLTMuMjcsMC45NS00LjE2LDIuMzhjLTAuMTktMC40NC0wLjQ2LTAuODUtMC43OS0xLjE5Yy0wLjc2LTAuNzctMS44LTEuMTktMi44OC0xLjE5aC0wLjAxYy0wLjg1LDAuMDEtMS42NywwLjMxLTIuMzQsMC44NGMtMC43LTAuNTQtMS41Ni0wLjg0LTIuNDUtMC44NGgtMC4wM2MtMC4yOCwwLTAuNTUsMC4wMy0wLjgyLDAuMWMtMC4yNywwLjA2LTAuNTMsMC4xNS0wLjc4LDAuMjdjLTAuMi0wLjExLTAuNDMtMC4xNy0wLjY3LTAuMTdoLTEuMzNjLTAuNzgsMC0xLjQsMC42My0xLjQsMS40djcuMTRjMCwwLjc4LDAuNjMsMS40LDEuNCwxLjRoMS4zM2MwLjc4LDAsMS40MS0wLjYzLDEuNDEtMS40MWMwLDAsMCwwLDAsMFY5LjM1YzAuMDMtMC4zNCwwLjIyLTAuNTYsMC4zNC0wLjU2YzAuMTcsMCwwLjM2LDAuMTcsMC4zNiwwLjQ1djQuMzVjMCwwLjc4LDAuNjMsMS40LDEuNCwxLjRoMS4zNGMwLjc4LDAsMS40LTAuNjMsMS40LTEuNGwtMC4wMS00LjM1YzAuMDYtMC4zLDAuMjQtMC40NSwwLjMzLTAuNDVjMC4xNywwLDAuMzYsMC4xNywwLjM2LDAuNDV2NC4zNWMwLDAuNzgsMC42MywxLjQsMS40LDEuNGgxLjM0YzAuNzgsMCwxLjQtMC42MywxLjQtMS40di0wLjM2YzAuOTEsMS4yMywyLjM0LDEuOTYsMy44NywxLjk2YzAuNywwLDEuMzktMC4xNSwyLjAyLTAuNDVjMC4yMywwLjE2LDAuNTEsMC4yNSwwLjgsMC4yNWgxLjMyYzAuMjksMCwwLjU3LTAuMDksMC44LTAuMjV2MS45MWMwLDAuNzgsMC42MywxLjQsMS40LDEuNGgxLjMzYzAuNzgsMCwxLjQtMC42MywxLjQtMS40di0xLjY5YzAuNDYsMC4xNCwwLjk0LDAuMjIsMS40MiwwLjIxYzEuNjIsMCwzLjA3LTAuODMsMy45Ny0yLjF2MC41YzAsMC43OCwwLjYzLDEuNCwxLjQsMS40aDEuMzNjMC4yOSwwLDAuNTctMC4wOSwwLjgtMC4yNWMwLjYzLDAuMywxLjMyLDAuNDUsMi4wMiwwLjQ1YzEuODMsMCwzLjQzLTEuMDUsNC4yOC0yLjZjMS40NywyLjUyLDQuNzEsMy4zNiw3LjIyLDEuODljMC4xNy0wLjEsMC4zNC0wLjIxLDAuNS0wLjM0YzAuMjEsMC41MiwwLjcyLDAuODcsMS4yOSwwLjg2aDEuNTNjMC41MywwLDEuMDMtMC4yOCwxLjMtMC43NGwwLjM1LTAuNThsMC4zNSwwLjU4YzAuMjgsMC40NiwwLjc3LDAuNzQsMS4zMSwwLjc0aDEuNTJjMC43NywwLDEuMzktMC42MywxLjM4LTEuMzlDODAuNDcsMTMuMzgsODAuNDIsMTMuMTcsODAuMzIsMTIuOTdMODAuMzIsMTIuOTd6IE0zNC4xNSwxMy44MWgtMS4zNGMtMC4xMiwwLTAuMjItMC4xLTAuMjItMC4yMlY5LjI0YzAtMC45My0wLjctMS42My0xLjU0LTEuNjNjLTAuNzYsMC0xLjM5LDAuNjctMS41MSwxLjU0bDAuMDEsNC40NGMwLDAuMTItMC4xLDAuMjItMC4yMiwwLjIyaC0xLjM0Yy0wLjEyLDAtMC4yMi0wLjEtMC4yMi0wLjIyVjkuMjRjMC0wLjkzLTAuNy0xLjYzLTEuNTQtMS42M2MtMC44MSwwLTEuNDcsMC43NS0xLjUyLDEuNzF2NC4yN2MwLDAuMTItMC4xLDAuMjItMC4yMiwwLjIyaC0xLjMzYy0wLjEyLDAtMC4yMi0wLjEtMC4yMi0wLjIyVjYuNDRjMC4wMS0wLjEyLDAuMS0wLjIxLDAuMjItMC4yMWgxLjMzYzAuMTIsMCwwLjIxLDAuMSwwLjIyLDAuMjF2MC42M2MwLjQ4LTAuNjUsMS4yNC0xLjA0LDIuMDYtMS4wNWgwLjAzYzEuMDQsMCwxLjk5LDAuNTcsMi40OCwxLjQ4YzAuNDMtMC45LDEuMzMtMS40OCwyLjMyLTEuNDljMS41NCwwLDIuNzksMS4xOSwyLjc2LDIuNjVsMC4wMSw0LjkxQzM0LjM3LDEzLjcsMzQuMjcsMTMuOCwzNC4xNSwxMy44MUMzNC4xNSwxMy44MSwzNC4xNSwxMy44MSwzNC4xNSwxMy44MXogTTQzLjc4LDEzLjU5YzAsMC4xMi0wLjEsMC4yMi0wLjIyLDAuMjJoLTEuMzNjLTAuMTIsMC0wLjIyLTAuMS0wLjIyLTAuMjJ2LTAuNzFDNDEuMzQsMTMuNiw0MC40LDE0LDM5LjQyLDE0Yy0yLjA3LDAtMy43NS0xLjc4LTMuNzUtMy45OXMxLjY5LTMuOTksMy43NS0zLjk5YzAuOTgsMCwxLjkyLDAuNDEsMi42LDEuMTJ2LTAuN2MwLTAuMTIsMC4xLTAuMjIsMC4yMi0wLjIyaDEuMzNjMC4xMS0wLjAxLDAuMjEsMC4wOCwwLjIyLDAuMmMwLDAuMDEsMCwwLjAxLDAsMC4wMlYxMy41OXogTTQ5LjkxLDE0Yy0wLjk4LDAtMS45Mi0wLjQxLTIuNi0xLjEydjMuNzhjMCwwLjEyLTAuMSwwLjIyLTAuMjIsMC4yMmgtMS4zM2MtMC4xMiwwLTAuMjItMC4xLTAuMjItMC4yMlY2LjQ1YzAtMC4xMiwwLjEtMC4yMSwwLjIyLTAuMjFoMS4zM2MwLjEyLDAsMC4yMiwwLjEsMC4yMiwwLjIydjAuN2MwLjY4LTAuNzIsMS42Mi0xLjEyLDIuNi0xLjEyYzIuMDcsMCwzLjc1LDEuNzcsMy43NSwzLjk4UzUxLjk4LDE0LDQ5LjkxLDE0eiBNNjMuMDksMTAuODdDNjIuNzIsMTIuNjUsNjEuMjIsMTQsNTkuNDMsMTRjLTAuOTgsMC0xLjkyLTAuNDEtMi42LTEuMTJ2MC43YzAsMC4xMi0wLjEsMC4yMi0wLjIyLDAuMjJoLTEuMzNjLTAuMTIsMC0wLjIyLTAuMS0wLjIyLTAuMjJWMy4zN2MwLTAuMTIsMC4xLTAuMjIsMC4yMi0wLjIyaDEuMzNjMC4xMiwwLDAuMjIsMC4xLDAuMjIsMC4yMnYzLjc4YzAuNjgtMC43MSwxLjYyLTEuMTIsMi42LTEuMTFjMS43OSwwLDMuMjksMS4zMywzLjY2LDMuMTJDNjMuMjEsOS43Myw2My4yMSwxMC4zMSw2My4wOSwxMC44N0w2My4wOSwxMC44N0w2My4wOSwxMC44N3ogTTY4LjI2LDE0LjAxYy0xLjksMC4wMS0zLjU1LTEuMjktMy45Ny0zLjE0Yy0wLjEyLTAuNTYtMC4xMi0xLjEzLDAtMS42OWMwLjQyLTEuODUsMi4wNy0zLjE1LDMuOTctMy4xNGMyLjI1LDAsNC4wNiwxLjc4LDQuMDYsMy45OVM3MC41LDE0LjAxLDY4LjI2LDE0LjAxTDY4LjI2LDE0LjAxeiBNNzkuMDksMTMuODFoLTEuNTNjLTAuMTIsMC0wLjIzLTAuMDYtMC4yOS0wLjE2bC0xLjM3LTIuMjhsLTEuMzcsMi4yOGMtMC4wNiwwLjEtMC4xNywwLjE2LTAuMjksMC4xNmgtMS41M2MtMC4wNCwwLTAuMDgtMC4wMS0wLjExLTAuMDNjLTAuMDktMC4wNi0wLjEyLTAuMTgtMC4wNi0wLjI3YzAsMCwwLDAsMCwwbDIuMzEtMy41bC0yLjI4LTMuNDdjLTAuMDItMC4wMy0wLjAzLTAuMDctMC4wMy0wLjExYzAtMC4xMSwwLjA5LTAuMiwwLjItMC4yaDEuNTNjMC4xMiwwLDAuMjMsMC4wNiwwLjI5LDAuMTZsMS4zNCwyLjI1bDEuMzQtMi4yNWMwLjA2LTAuMSwwLjE3LTAuMTYsMC4yOS0wLjE2aDEuNTNjMC4wNCwwLDAuMDgsMC4wMSwwLjExLDAuMDNjMC4wOSwwLjA2LDAuMTIsMC4xOCwwLjA2LDAuMjdjMCwwLDAsMCwwLDBMNzYuOTYsMTBsMi4zMSwzLjVjMC4wMiwwLjAzLDAuMDMsMC4wNywwLjAzLDAuMTFDNzkuMjksMTMuNzIsNzkuMiwxMy44MSw3OS4wOSwxMy44MUM3OS4wOSwxMy44MSw3OS4wOSwxMy44MSw3OS4wOSwxMy44MUw3OS4wOSwxMy44MXoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTAsMS4yMWMtNC44NywwLTguODEsMy45NS04LjgxLDguODFzMy45NSw4LjgxLDguODEsOC44MXM4LjgxLTMuOTUsOC44MS04LjgxQzE4LjgxLDUuMTUsMTQuODcsMS4yMSwxMCwxLjIxeiBNMTQuMTgsMTIuMTljLTEuODQsMS44NC00LjU1LDIuMi02LjM4LDIuMmMtMC42NywwLTEuMzQtMC4wNS0yLTAuMTVjMCwwLTAuOTctNS4zNywyLjA0LTguMzljMC43OS0wLjc5LDEuODYtMS4yMiwyLjk4LTEuMjJjMS4yMSwwLDIuMzcsMC40OSwzLjIzLDEuMzVDMTUuOCw3LjczLDE1Ljg1LDEwLjUsMTQuMTgsMTIuMTl6Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTEwLDAuMDJjLTUuNTIsMC0xMCw0LjQ4LTEwLDEwczQuNDgsMTAsMTAsMTBzMTAtNC40OCwxMC0xMEMxOS45OSw0LjUsMTUuNTIsMC4wMiwxMCwwLjAyeiBNMTAsMTguODNjLTQuODcsMC04LjgxLTMuOTUtOC44MS04LjgxUzUuMTMsMS4yLDEwLDEuMnM4LjgxLDMuOTUsOC44MSw4LjgxQzE4LjgxLDE0Ljg5LDE0Ljg3LDE4LjgzLDEwLDE4LjgzeiIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNC4wNCw1Ljk4Yy0xLjc1LTEuNzUtNC41My0xLjgxLTYuMi0wLjE0QzQuODMsOC44Niw1LjgsMTQuMjMsNS44LDE0LjIzczUuMzcsMC45Nyw4LjM5LTIuMDRDMTUuODUsMTAuNSwxNS44LDcuNzMsMTQuMDQsNS45OHogTTExLjg4LDkuODdsLTAuODcsMS43OGwtMC44Ni0xLjc4TDguMzgsOS4wMWwxLjc3LTAuODZsMC44Ni0xLjc4bDAuODcsMS43OGwxLjc3LDAuODZMMTEuODgsOS44N3oiLz48cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjEzLjY1LDkuMDEgMTEuODgsOS44NyAxMS4wMSwxMS42NSAxMC4xNSw5Ljg3IDguMzgsOS4wMSAxMC4xNSw4LjE1IDExLjAxLDYuMzcgMTEuODgsOC4xNSAiLz48L2c+PC9zdmc+); + background-repeat: no-repeat; + background-position: 0 0; + background-size: 65px 20px; +`; + +export const MapWatermark = (props: AnchorHTMLAttributes) => ( + + Mapbox + +); diff --git a/packages/tupaia-web/src/layout/MapLayout/index.ts b/packages/tupaia-web/src/layout/MapLayout/index.ts new file mode 100644 index 0000000000..7d473704f9 --- /dev/null +++ b/packages/tupaia-web/src/layout/MapLayout/index.ts @@ -0,0 +1,7 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { MapLayout } from './MapLayout'; +export { MapWatermark } from './MapWatermark'; diff --git a/packages/tupaia-web/src/layout/Sidebar/ExpandButton.tsx b/packages/tupaia-web/src/layout/Sidebar/ExpandButton.tsx new file mode 100644 index 0000000000..261d9bc6db --- /dev/null +++ b/packages/tupaia-web/src/layout/Sidebar/ExpandButton.tsx @@ -0,0 +1,43 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import styled from 'styled-components'; +import { KeyboardArrowLeft, KeyboardArrowRight } from '@material-ui/icons'; +import { TRANSPARENT_BLACK } from '../../constants'; + +const SemiCircle = styled.div` + position: absolute; + top: 50%; + left: -30px; + display: flex; + justify-content: center; + align-items: center; + background-color: ${TRANSPARENT_BLACK}; + min-height: 60px; + min-width: 30px; + border-top-left-radius: 60px; + border-bottom-left-radius: 60px; + cursor: pointer; + pointer-events: auto; +`; + +const CloseArrowIcon = styled(KeyboardArrowRight)` + margin-left: 5px; +`; + +const OpenArrowIcon = styled(KeyboardArrowLeft)` + margin-left: 5px; +`; + +interface ExpandButtonProps { + isExpanded: boolean; + setIsExpanded: () => void; +} + +export const ExpandButton = ({ isExpanded, setIsExpanded }: ExpandButtonProps) => { + const arrowIcon = isExpanded ? : ; + return {arrowIcon}; +}; diff --git a/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx new file mode 100644 index 0000000000..c5c540b671 --- /dev/null +++ b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx @@ -0,0 +1,46 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React, { useState } from 'react'; +import styled from 'styled-components'; +import { TRANSPARENT_BLACK } from '../../constants'; +import { ExpandButton } from './ExpandButton'; + +const MAX_SIDEBAR_EXPANDED_WIDTH = 1000; +const MAX_SIDEBAR_COLLAPSED_WIDTH = 350; + +const Panel = styled.div<{ + $isExpanded: boolean; +}>` + display: flex; + align-items: stretch; + flex-direction: column; + align-content: stretch; + position: relative; + overflow: visible; + background-color: ${TRANSPARENT_BLACK}; + pointer-events: auto; + height: 100%; + cursor: auto; + transition: width 0.5s ease, max-width 0.5s ease; + width: ${({ $isExpanded }) => ($isExpanded ? 45 : 30)}%; + min-width: 335px; + max-width: ${({ $isExpanded }) => + $isExpanded ? MAX_SIDEBAR_EXPANDED_WIDTH : MAX_SIDEBAR_COLLAPSED_WIDTH}px; +`; + +export const Sidebar = () => { + const [isExpanded, setIsExpanded] = useState(false); + + const toggleExpanded = () => { + setIsExpanded(!isExpanded); + }; + + return ( + + + + ); +}; diff --git a/packages/tupaia-web/src/layout/Sidebar/index.ts b/packages/tupaia-web/src/layout/Sidebar/index.ts new file mode 100644 index 0000000000..a1ac18fc21 --- /dev/null +++ b/packages/tupaia-web/src/layout/Sidebar/index.ts @@ -0,0 +1,6 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { Sidebar } from './Sidebar'; diff --git a/packages/tupaia-web/src/layout/TopBar/Logo.tsx b/packages/tupaia-web/src/layout/TopBar/Logo.tsx new file mode 100644 index 0000000000..02c14d97e4 --- /dev/null +++ b/packages/tupaia-web/src/layout/TopBar/Logo.tsx @@ -0,0 +1,89 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React, { ReactNode } from 'react'; +import { Typography } from '@material-ui/core'; +import styled from 'styled-components'; +import { Link } from 'react-router-dom'; +import { DEFAULT_URL, TUPAIA_LIGHT_LOGO_SRC } from '../../constants'; + +const LogoWrapper = styled.div` + flex-grow: 1; + height: 100%; + display: flex; + align-items: center; +`; + +const LogoImage = styled.img` + max-height: 80%; + width: auto; + max-width: 50px; + @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { + max-width: 100%; + } +`; + +const LogoLink = styled(Link)` + cursor: pointer; + pointer-events: auto; + padding: 0.5em; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + background: none; + border: none; +`; + +const Name = styled(Typography)` + font-style: normal; + font-weight: ${props => props.theme.typography.fontWeightBold}; + font-size: 1rem; + line-height: 1; + letter-spacing: 0.1rem; + @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { + font-size: 1.2rem; + } + @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.md}px) { + font-size: 1.5rem; + } +`; + +const NameWrapper = styled.div` + max-width: 100%; + ${LogoImage} + & { + margin-left: 1.2rem; + } +`; + +// If logo is from a custom landing page, don't wrap in clickable button +const LogoComponent = ({ + isCustomLandingPage, + children, +}: { + isCustomLandingPage: boolean; + children: ReactNode[]; +}) => (isCustomLandingPage ? <>{children} : {children}); + +export const Logo = () => { + // Here is where we should swap out the logo for the custom landing page logo if applicable + const logoSrc = TUPAIA_LIGHT_LOGO_SRC; + + // These will later come from custom landing pages, where applicable + const displayName = false; + const name = ''; + return ( + + + + {/** If a custom landing page has set to display the name in the header, display it here */} + {displayName && ( + + {name} + + )} + + + ); +}; diff --git a/packages/tupaia-web/src/layout/TopBar/TopBar.tsx b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx new file mode 100644 index 0000000000..369314e83e --- /dev/null +++ b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx @@ -0,0 +1,54 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import styled from 'styled-components'; +import { Logo } from './Logo'; +import { UserMenu } from '../UserMenu'; + +const TOP_BAR_HEIGHT = 60; +const TOP_BAR_HEIGHT_MOBILE = 50; +/* Both min height and height must be specified due to bugs in Firefox flexbox, that means that topbar height will be ignored even if using flex-basis. */ +const Header = styled.header<{ + $primaryColor?: string; + $secondaryColor?: string; +}>` + background-color: ${({ $primaryColor, theme }) => + $primaryColor || theme.palette.background.default}; + height: ${TOP_BAR_HEIGHT_MOBILE}px; + min-height: ${TOP_BAR_HEIGHT_MOBILE}px; + display: flex; + align-items: center; + z-index: 1000; + position: relative; + padding: 0 0.625em; + border-bottom: 1px solid rgba(151, 151, 151, 0.3); + > * { + background-color: ${({ $primaryColor, theme }) => + $primaryColor || theme.palette.background.default}; + } + button, + a, + p, + h1, + li { + color: ${({ $secondaryColor, theme }) => $secondaryColor || theme.palette.text.primary}; + } + @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { + height: ${TOP_BAR_HEIGHT}px; + min-height: ${TOP_BAR_HEIGHT}px; + align-items: initial; + } +`; + +export const TopBar = () => { + // When handing custom landing pages, pass the primary and secondary colors to the Header component + return ( +
+ + +
+ ); +}; diff --git a/packages/tupaia-web/src/layout/TopBar/index.ts b/packages/tupaia-web/src/layout/TopBar/index.ts new file mode 100644 index 0000000000..a27c0a3605 --- /dev/null +++ b/packages/tupaia-web/src/layout/TopBar/index.ts @@ -0,0 +1,6 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { TopBar } from './TopBar'; diff --git a/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx new file mode 100644 index 0000000000..5cbc1cda2e --- /dev/null +++ b/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx @@ -0,0 +1,128 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React, { ReactNode } from 'react'; +import styled from 'styled-components'; +import { Drawer as MuiDrawer } from '@material-ui/core'; +import { IconButton } from '@tupaia/ui-components'; +import CloseIcon from '@material-ui/icons/Close'; +import { MenuItem, MenuList } from './MenuList'; + +/** + * DrawerMenu is a drawer menu used when the user is on a mobile device + */ + +const Drawer = styled(MuiDrawer)` + @media screen and (min-width: ${props => props.theme.breakpoints.values.md}px) { + display: none; + } +`; + +const MenuWrapper = styled.div` + padding: 0 1.5em; + li a, + li button { + font-size: 1.2em; + padding: 0.8em; + line-height: 1.4; + text-align: left; + width: 100%; + font-weight: ${props => props.theme.typography.fontWeightRegular}; + color: inherit; + } + a > span { + text-decoration: underline; + } +`; + +const Username = styled.p` + font-weight: ${props => props.theme.typography.fontWeightMedium}; + text-transform: uppercase; + margin: 0; + width: 100%; + padding: 0 1em; +`; + +const MenuHeaderWrapper = styled.div` + padding: 0; +`; + +const MenuHeaderContainer = styled.div<{ + $secondaryColor?: string; +}>` + border-bottom: 1px solid + ${({ $secondaryColor, theme }) => $secondaryColor || theme.palette.text.primary}; + display: flex; + justify-content: flex-end; + padding: 0.8em 0; + align-items: center; + color: ${({ $secondaryColor }) => $secondaryColor}; +`; + +const MenuCloseIcon = styled(CloseIcon)<{ + $secondaryColor?: string; +}>` + width: 1.2em; + height: 1.2em; + fill: ${({ $secondaryColor, theme }) => $secondaryColor || theme.palette.text.primary}; +`; + +const MenuCloseButton = styled(IconButton)` + padding: 0; +`; + +interface DrawerMenuProps { + children: ReactNode; + menuOpen: boolean; + onCloseMenu: () => void; + primaryColor?: string; + secondaryColor?: string; + isUserLoggedIn: boolean; + currentUserUsername?: string; +} + +export const DrawerMenu = ({ + children, + menuOpen, + onCloseMenu, + primaryColor, + secondaryColor, + isUserLoggedIn, + currentUserUsername, +}: DrawerMenuProps) => { + return ( + + + + + {currentUserUsername && {currentUserUsername}} + + + + + + + {/** If the user is not logged in, show the register and login buttons */} + {!isUserLoggedIn && ( + <> + + Log in + + + Register + + + )} + {children} + + + + ); +}; diff --git a/packages/tupaia-web/src/layout/UserMenu/MenuList.tsx b/packages/tupaia-web/src/layout/UserMenu/MenuList.tsx new file mode 100644 index 0000000000..354275464c --- /dev/null +++ b/packages/tupaia-web/src/layout/UserMenu/MenuList.tsx @@ -0,0 +1,102 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React, { ReactNode } from 'react'; +import styled from 'styled-components'; +import { Button, ListItem, ListItemProps } from '@material-ui/core'; +import { Link } from 'react-router-dom'; + +/** + * Menulist is a component that displays a list of menu items for the hamburger menu + */ +const MenuListWrapper = styled.ul<{ + $secondaryColor?: string; +}>` + list-style: none; + margin-block-start: 0; + margin-block-end: 0; + padding-inline-start: 0; + * { + color: ${({ $secondaryColor }) => $secondaryColor}; + } +`; + +const MenuItemButton = styled(Button)` + text-transform: none; + font-size: 1rem; + font-weight: ${props => props.theme.typography.fontWeightRegular}; + padding: 0.4em 1em; + line-height: 1.4; + width: 100%; + justify-content: flex-start; +`; + +const MenuItemLink = styled(Link)` + font-size: 1rem; + padding: 0.4em 1em; + line-height: 1.4; + width: 100%; + text-decoration: none; + &:hover, + &:focus { + text-decoration: none; + background-color: rgba(255, 255, 255, 0.08); + } +`; + +type MenuListItemType = ListItemProps & { + $secondaryColor?: string; +}; + +const MenuListItem = styled(ListItem)<{ + $secondaryColor?: string; +}>` + padding: 0; + color: ${({ $secondaryColor }) => $secondaryColor}; +` as MenuListItemType; + +interface MenuItemProps { + href?: string; + children: ReactNode; + onClick?: () => void; + onCloseMenu: () => void; + secondaryColor?: string; + target?: string; +} + +// If is a link, use a link component, else a button so that we have correct semantic HTML +export const MenuItem = ({ + href, + children, + onClick, + onCloseMenu, + secondaryColor, + target, +}: MenuItemProps) => { + const handleClickMenuItem = () => { + if (onClick) onClick(); + onCloseMenu(); + }; + return ( + + {href ? ( + + {children} + + ) : ( + {children} + )} + + ); +}; + +interface MenuListProps { + children: ReactNode; + secondaryColor?: string; +} + +export const MenuList = ({ children, secondaryColor }: MenuListProps) => { + return {children}; +}; diff --git a/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx new file mode 100644 index 0000000000..5c13ee9c58 --- /dev/null +++ b/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx @@ -0,0 +1,53 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React, { ReactNode } from 'react'; +import { Popover as MuiPopover } from '@material-ui/core'; +import { MenuList } from './MenuList'; +import styled from 'styled-components'; + +/** + * PopoverMenu is a popover menu used when the user is on a desktop device + */ + +const Popover = styled(MuiPopover)` + @media screen and (max-width: ${({ theme }) => theme.breakpoints.values.md}px) { + display: none; + } +`; + +interface PopoverMenuProps { + children: ReactNode; + primaryColor?: string; + menuOpen: boolean; + onCloseMenu: () => void; + secondaryColor?: string; +} +export const PopoverMenu = ({ + children, + primaryColor, + menuOpen, + onCloseMenu, + secondaryColor, +}: PopoverMenuProps) => { + return ( + document.getElementById('user-menu-button') as HTMLElement} + onClose={onCloseMenu} + anchorOrigin={{ + vertical: 'bottom', + horizontal: 'right', + }} + transformOrigin={{ + vertical: 'top', + horizontal: 'right', + }} + > + {children} + + ); +}; diff --git a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx new file mode 100644 index 0000000000..2d1057cd70 --- /dev/null +++ b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx @@ -0,0 +1,79 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React, { ReactNode, useState } from 'react'; +import MuiMenuIcon from '@material-ui/icons/Menu'; +import { Button, MenuList, useTheme } from '@material-ui/core'; +import styled from 'styled-components'; +import { PopoverMenu } from './PopoverMenu'; +import { DrawerMenu } from './DrawerMenu'; + +const UserMenuContainer = styled.div<{ + secondaryColor?: string; +}>` + display: flex; + align-items: center; + color: ${({ secondaryColor, theme }) => secondaryColor || theme.palette.text.primary}; +`; + +const MenuButton = styled(Button)` + width: 2em; + min-width: 2em; + height: 2em; + text-align: right; + padding: 0; + pointer-events: auto; +`; + +const MenuIcon = styled(MuiMenuIcon)` + width: 100%; + height: 100%; +`; + +export const UserMenu = () => { + const [menuOpen, setMenuOpen] = useState(false); + const toggleUserMenu = () => { + setMenuOpen(!menuOpen); + }; + + const onCloseMenu = () => { + setMenuOpen(false); + }; + + // Here will be the menu items logic. These will probably come from a context somewhere that handles when a user is logged in, and when it is a custom landing page + const menuItems = [] as ReactNode[]; + + const theme = useTheme(); + + // these will later be updated to handle custom landing pages + const primaryColor = theme.palette.background.default; + const secondaryColor = theme.palette.text.primary; + + return ( + + + + + {/** PopoverMenu is for larger (desktop size) screens, and DrawerMenu is for mobile screens. Each component takes care of the hiding and showing at different screen sizes. Eventually all the props will come from a context */} + + {menuItems} + + + {menuItems} + + + ); +}; diff --git a/packages/tupaia-web/src/layout/UserMenu/index.ts b/packages/tupaia-web/src/layout/UserMenu/index.ts new file mode 100644 index 0000000000..bc3f79334a --- /dev/null +++ b/packages/tupaia-web/src/layout/UserMenu/index.ts @@ -0,0 +1,6 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { UserMenu } from './UserMenu'; diff --git a/packages/tupaia-web/src/layout/index.ts b/packages/tupaia-web/src/layout/index.ts index 652a972fc4..2b862370e6 100644 --- a/packages/tupaia-web/src/layout/index.ts +++ b/packages/tupaia-web/src/layout/index.ts @@ -2,3 +2,7 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +export { AuthModal } from './AuthModal'; +export { Layout } from './Layout'; +export { MapLayout } from './MapLayout'; +export { Sidebar } from './Sidebar'; diff --git a/packages/tupaia-web/src/pages/LoginForm.tsx b/packages/tupaia-web/src/pages/LoginForm.tsx index 8fff11ced8..aaa4b7396e 100644 --- a/packages/tupaia-web/src/pages/LoginForm.tsx +++ b/packages/tupaia-web/src/pages/LoginForm.tsx @@ -3,7 +3,19 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; +import { AuthModal } from '../layout'; export const LoginForm = () => { - return
LoginForm
; + return ( + {}, + text: 'Login', + }} + > +

Login form goes here

+
+ ); }; diff --git a/packages/tupaia-web/src/pages/PasswordResetForm.tsx b/packages/tupaia-web/src/pages/PasswordResetForm.tsx index 23ac65c155..caf11b30a7 100644 --- a/packages/tupaia-web/src/pages/PasswordResetForm.tsx +++ b/packages/tupaia-web/src/pages/PasswordResetForm.tsx @@ -3,7 +3,8 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; +import { AuthModal } from '../layout'; export const PasswordResetForm = () => { - return
PasswordResetForm
; + return PasswordResetForm; }; diff --git a/packages/tupaia-web/src/pages/Project.tsx b/packages/tupaia-web/src/pages/Project.tsx index 58624d1348..a1c4acaad7 100644 --- a/packages/tupaia-web/src/pages/Project.tsx +++ b/packages/tupaia-web/src/pages/Project.tsx @@ -3,17 +3,28 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { useParams } from 'react-router-dom'; +import styled from 'styled-components'; +import { MapLayout, Sidebar } from '../layout'; +const Container = styled.div` + display: flex; + flex-direction: row; + flex: 1; + overflow: hidden; +`; + +/** + * This is the layout for the project/* view. This contains the map and the sidebar, as well as any overlays that are not auth overlays (i.e. not needed in landing pages) + */ export const Project = () => { // Use these to fetch the project and any other entity info you might need - const { projectCode, entityCode, '*': dashboardCode } = useParams(); + // const { projectCode, entityCode, '*': dashboardCode } = useParams(); return ( -
-

Project: {projectCode}

-

Entity: {entityCode}

-

Dashboard: {dashboardCode}

-
+ + + + {/** This is where SessionExpiredDialog and any other overlays would go, as well as loading screen */} + ); }; diff --git a/packages/tupaia-web/src/pages/RegisterForm.tsx b/packages/tupaia-web/src/pages/RegisterForm.tsx index d13fd63870..3d9c43cee1 100644 --- a/packages/tupaia-web/src/pages/RegisterForm.tsx +++ b/packages/tupaia-web/src/pages/RegisterForm.tsx @@ -3,7 +3,8 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; +import { AuthModal } from '../layout'; export const RegisterForm = () => { - return
RegisterForm
; + return RegisterForm; }; diff --git a/packages/tupaia-web/src/pages/RequestAccessForm.tsx b/packages/tupaia-web/src/pages/RequestAccessForm.tsx index f40ceaa61a..a72144d0a6 100644 --- a/packages/tupaia-web/src/pages/RequestAccessForm.tsx +++ b/packages/tupaia-web/src/pages/RequestAccessForm.tsx @@ -3,7 +3,8 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; +import { AuthModal } from '../layout'; export const RequestAccessForm = () => { - return
RequestAccessForm
; + return RequestAccessForm; }; diff --git a/packages/tupaia-web/src/pages/VerifyEmailForm.tsx b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx index 456dc92b09..422c76f4ad 100644 --- a/packages/tupaia-web/src/pages/VerifyEmailForm.tsx +++ b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx @@ -3,7 +3,8 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; +import { AuthModal } from '../layout'; export const VerifyEmailForm = () => { - return
VerifyEmailForm
; + return VerifyEmailForm; }; diff --git a/packages/tupaia-web/src/theme/constants.ts b/packages/tupaia-web/src/theme/constants.ts new file mode 100644 index 0000000000..a15a725733 --- /dev/null +++ b/packages/tupaia-web/src/theme/constants.ts @@ -0,0 +1,12 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +/** + * Theme constants that don't require being in the entire theme object, ie. things that won't change if a custom theme was applied + */ + +export const FONT_SIZES = { + viewTitle: '2em', +}; diff --git a/packages/tupaia-web/src/theme/index.ts b/packages/tupaia-web/src/theme/index.ts index 652a972fc4..f180c0a582 100644 --- a/packages/tupaia-web/src/theme/index.ts +++ b/packages/tupaia-web/src/theme/index.ts @@ -2,3 +2,5 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +export * from './constants'; +export * from './theme'; diff --git a/packages/tupaia-web/src/theme/theme.ts b/packages/tupaia-web/src/theme/theme.ts new file mode 100644 index 0000000000..83ba090035 --- /dev/null +++ b/packages/tupaia-web/src/theme/theme.ts @@ -0,0 +1,16 @@ +import { createMuiTheme } from '@material-ui/core'; + +export const theme = createMuiTheme({ + palette: { + type: 'dark', + primary: { + main: '#1978D4', // Main blue (as seen on primary buttons) + }, + secondary: { + main: '#ee6230', // Tupaia Orange + }, + background: { + default: '#262834', // Dark blue background + }, + }, +}); diff --git a/packages/tupaia-web/src/types/mui.d.ts b/packages/tupaia-web/src/types/mui.d.ts new file mode 100644 index 0000000000..57a570aaf7 --- /dev/null +++ b/packages/tupaia-web/src/types/mui.d.ts @@ -0,0 +1,7 @@ +import { ListItemProps as MuiListItemProps } from '@material-ui/core'; + +declare module '@material-ui/core' { + export type ListItemProps = Omit & { + button?: boolean; // override this to make it optional, due to issue with 'button' prop in MuiListItemProps throwing an error when it is undefined + }; +} diff --git a/packages/tupaia-web/stories/Introduction.mdx b/packages/tupaia-web/stories/Introduction.mdx deleted file mode 100644 index ff7fc71fbf..0000000000 --- a/packages/tupaia-web/stories/Introduction.mdx +++ /dev/null @@ -1,213 +0,0 @@ -import { Meta } from '@storybook/blocks'; -import Code from './assets/code-brackets.svg'; -import Colors from './assets/colors.svg'; -import Comments from './assets/comments.svg'; -import Direction from './assets/direction.svg'; -import Flow from './assets/flow.svg'; -import Plugin from './assets/plugin.svg'; -import Repo from './assets/repo.svg'; -import StackAlt from './assets/stackalt.svg'; - - - - - -# Welcome to Storybook - -Storybook helps you build UI components in isolation from your app's business logic, data, and context. -That makes it easy to develop hard-to-reach states. Save these UI states as **stories** to revisit during development, testing, or QA. - -Browse example stories now by navigating to them in the sidebar. -View their code in the `stories` directory to learn how they work. -We recommend building UIs with a [**component-driven**](https://componentdriven.org) process starting with atomic components and ending with pages. - -
Configure
- - - -
Learn
- - - -
- TipEdit the Markdown in{' '} - stories/Introduction.stories.mdx -
diff --git a/packages/tupaia-web/stories/components/modal.stories.tsx b/packages/tupaia-web/stories/components/modal.stories.tsx new file mode 100644 index 0000000000..85e4532f61 --- /dev/null +++ b/packages/tupaia-web/stories/components/modal.stories.tsx @@ -0,0 +1,28 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import { Meta } from '@storybook/react'; +import { Modal } from '../../src/components/Modal'; +import { useState } from 'react'; +import { Button } from '@material-ui/core'; + +const meta: Meta = { + title: 'components/Modal', + component: Modal, +}; + +export default meta; + +export const Simple = () => { + const [isOpen, setIsOpen] = useState(true); + return ( + <> + + setIsOpen(false)}> + Hi, I am a modal + + + ); +}; diff --git a/packages/tupaia-web/stories/layout/authModal.stories.tsx b/packages/tupaia-web/stories/layout/authModal.stories.tsx new file mode 100644 index 0000000000..389aeb50c4 --- /dev/null +++ b/packages/tupaia-web/stories/layout/authModal.stories.tsx @@ -0,0 +1,58 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import { Meta } from '@storybook/react'; +import { AuthModal } from '../../src/layout/AuthModal'; + +const meta: Meta = { + title: 'layout/AuthModal', + component: AuthModal, +}; + +export default meta; + +export const Simple = () => { + return ( + + Hi, I am an auth modal + + ); +}; + +export const PrimaryButton = () => { + return ( + {}, + }} + > + Hi, I am an auth modal + + ); +}; + +export const SecondaryButton = () => { + return ( + {}, + }} + secondaryButton={{ + text: 'Cancel', + onClick: () => {}, + }} + > + Hi, I am an auth modal + + ); +}; diff --git a/packages/tupaia-web/vite.config.ts b/packages/tupaia-web/vite.config.ts index eb7eae4fe5..b1faa2cd3c 100644 --- a/packages/tupaia-web/vite.config.ts +++ b/packages/tupaia-web/vite.config.ts @@ -14,6 +14,9 @@ const baseConfig = { port: 8088, open: true, }, + define: { + 'process.env': process.env, // to stop errors when libraries use 'process.env' + }, envPrefix: 'REACT_APP_', // to allow any existing REACT_APP_ env variables to be used; resolve: { preserveSymlinks: true, @@ -34,6 +37,7 @@ export default defineConfig(({ command }) => { return { ...baseConfig, define: { + ...baseConfig.define, global: {}, }, }; diff --git a/packages/ui-components/src/components/EnvBanner.tsx b/packages/ui-components/src/components/EnvBanner.tsx index bb688f0a7f..2e4b45ce94 100644 --- a/packages/ui-components/src/components/EnvBanner.tsx +++ b/packages/ui-components/src/components/EnvBanner.tsx @@ -24,13 +24,7 @@ const StyledBanner = styled(FlexCenter)<{ } `; -export const EnvBanner = ( - { - color = '#f39c12' - }: { - color?: CSSStyleDeclaration['color']; - } -) => { +export const EnvBanner = ({ color = '#f39c12' }: { color?: CSSStyleDeclaration['color'] }) => { const deploymentName = process.env.REACT_APP_DEPLOYMENT_NAME; if ( From f99bca8cbe5b52bbd56efca9e4e171c7cb8f7467 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Thu, 8 Jun 2023 12:15:29 +1200 Subject: [PATCH 108/251] update routes --- packages/tupaia-web/.storybook/preview.tsx | 6 ++-- packages/tupaia-web/src/App.tsx | 6 ++-- packages/tupaia-web/src/AppProviders.tsx | 9 ++--- packages/tupaia-web/src/Routes.tsx | 40 ++++++++++++++-------- packages/tupaia-web/src/pages/Login.tsx | 4 +-- 5 files changed, 35 insertions(+), 30 deletions(-) diff --git a/packages/tupaia-web/.storybook/preview.tsx b/packages/tupaia-web/.storybook/preview.tsx index 660fc72347..9c66c88a0f 100644 --- a/packages/tupaia-web/.storybook/preview.tsx +++ b/packages/tupaia-web/.storybook/preview.tsx @@ -1,6 +1,6 @@ import React from 'react'; import type { Preview } from '@storybook/react'; -import { AppStyleProviders } from '../src/AppStyleProviders'; +import { AppProviders } from '../src/AppProviders'; import ReactRouterDecorator from './ReactRouterDecorator'; const preview: Preview = { parameters: { @@ -23,9 +23,9 @@ const preview: Preview = { ReactRouterDecorator, Story => { return ( - + - +
); }, ], diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index e66328215e..df9243d59a 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -3,21 +3,21 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { AppStyleProviders } from './AppStyleProviders'; +import { AppProviders } from './AppProviders'; import { Routes } from './Routes'; import { Layout } from './layout'; import { BrowserRouter } from 'react-router-dom'; const App = () => { return ( - + {/** The Layout component needs to be inside BrowserRouter so that Link component from react-router-dom can be used (in menu etc.) */} - + ); }; diff --git a/packages/tupaia-web/src/AppProviders.tsx b/packages/tupaia-web/src/AppProviders.tsx index 4727f1f873..cf42e71388 100644 --- a/packages/tupaia-web/src/AppProviders.tsx +++ b/packages/tupaia-web/src/AppProviders.tsx @@ -4,15 +4,10 @@ */ import React, { ReactNode } from 'react'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { - createMuiTheme, - ThemeProvider as MuiThemeProvider, - StylesProvider, -} from '@material-ui/core/styles'; +import { ThemeProvider as MuiThemeProvider, StylesProvider } from '@material-ui/core/styles'; import CssBaseline from '@material-ui/core/CssBaseline'; import { ThemeProvider } from 'styled-components'; - -const theme = createMuiTheme(); +import { theme } from './theme'; const queryClient = new QueryClient({ defaultOptions: { diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index e16b719442..3d45b93248 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -3,10 +3,10 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { Navigate, Route, Routes as RouterRoutes } from 'react-router-dom'; +import { Navigate, Route, Routes as RouterRoutes, useLocation } from 'react-router-dom'; import { LandingPage, - LoginForm, + Login, PasswordResetForm, Project, RegisterForm, @@ -21,16 +21,26 @@ import { DEFAULT_URL } from './constants'; * * **/ -export const Routes = () => ( - - } /> - } /> - } /> - } /> - } /> - } /> - } /> - {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} - } /> - -); +export const Routes = () => { + let location = useLocation(); + let state = location.state as { backgroundLocation?: Location }; + return ( + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} + } /> + + {state?.backgroundLocation && ( + + } /> + + )} + + ); +}; diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/Login.tsx index 2763d5de17..8711025276 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -9,14 +9,14 @@ import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import { useLogin } from '../api/mutations'; import { TextField } from '../components/TextField'; -import { Modal, ModalButton } from '../components/Modal'; +import { Modal } from '../components/Modal'; const StyledImg = styled.img` height: 2.6rem; width: auto; margin-bottom: 5rem; `; -const Logo = () => ; +const Logo = () => ; const Title = styled(Typography)` font-weight: 500; From 500d0843a8565b01ba5d8a2ea119554f4bedf76d Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Thu, 8 Jun 2023 15:07:23 +1200 Subject: [PATCH 109/251] sue auth modal --- packages/tupaia-web/src/layout/AuthModal.tsx | 41 +++---------------- .../tupaia-web/src/layout/Sidebar/Sidebar.tsx | 4 ++ packages/tupaia-web/src/layout/index.ts | 2 +- packages/tupaia-web/src/pages/Login.tsx | 24 +++++------ 4 files changed, 21 insertions(+), 50 deletions(-) diff --git a/packages/tupaia-web/src/layout/AuthModal.tsx b/packages/tupaia-web/src/layout/AuthModal.tsx index b19385f134..1062618c61 100644 --- a/packages/tupaia-web/src/layout/AuthModal.tsx +++ b/packages/tupaia-web/src/layout/AuthModal.tsx @@ -28,10 +28,7 @@ const Subtitle = styled(Typography)` margin-top: 1.4em; `; -const PrimaryButton = styled(Button).attrs({ - variant: 'contained', - color: 'primary', -})` +export const ModalButton = styled(Button)` text-transform: none; font-size: 1em; width: 100%; @@ -39,7 +36,7 @@ const PrimaryButton = styled(Button).attrs({ margin-top: 2em; `; -const SecondaryButton = styled(OutlinedButton).attrs({ +export const ModalCancelButton = styled(OutlinedButton).attrs({ color: 'default', })` text-transform: none; @@ -48,53 +45,25 @@ const SecondaryButton = styled(OutlinedButton).attrs({ margin-left: 0 !important; padding: 0.375em 1em; // to match the height of the primary button border-color: ${({ theme }) => theme.palette.text.secondary}; - ${PrimaryButton} + & { + ${ModalButton} + & { margin-top: 1.3em; } `; -type ButtonProps = { - onClick: () => void; - text: string; -}; interface AuthModalProps { children?: ReactNode; onClose?: () => void; title?: string; subtitle?: string; - navigateTo?: To | number; // the path to navigate to on close, if set. Numbers are acceptable for e.g. -1 meaning back 1 route - primaryButton?: ButtonProps; - secondaryButton?: ButtonProps; } -export const AuthModal = ({ - children, - onClose, - navigateTo = -1, - title, - subtitle, - primaryButton, - secondaryButton, -}: AuthModalProps) => { - const navigate = useNavigate(); - const onCloseModal = () => { - // navigate back to the previous route on close if no path is provided - navigate(navigateTo as To); - if (onClose) onClose(); - }; - // This modal will always be open in this case, because these are only visible on certain routes +export const AuthModal = ({ children, title, subtitle, onClose }: AuthModalProps) => { return ( - + {title} {subtitle && {subtitle}} {children} - {primaryButton && ( - {primaryButton.text} - )} - {secondaryButton && ( - {secondaryButton.text} - )} ); }; diff --git a/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx index c5c540b671..7be174a663 100644 --- a/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx +++ b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx @@ -4,6 +4,7 @@ */ import React, { useState } from 'react'; +import { Link } from 'react-router-dom'; import styled from 'styled-components'; import { TRANSPARENT_BLACK } from '../../constants'; import { ExpandButton } from './ExpandButton'; @@ -40,6 +41,9 @@ export const Sidebar = () => { return ( + + Login + ); diff --git a/packages/tupaia-web/src/layout/index.ts b/packages/tupaia-web/src/layout/index.ts index 2b862370e6..76e119c103 100644 --- a/packages/tupaia-web/src/layout/index.ts +++ b/packages/tupaia-web/src/layout/index.ts @@ -2,7 +2,7 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -export { AuthModal } from './AuthModal'; +export { AuthModal, ModalButton, ModalCancelButton } from './AuthModal'; export { Layout } from './Layout'; export { MapLayout } from './MapLayout'; export { Sidebar } from './Sidebar'; diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/Login.tsx index 8711025276..c61d2cce87 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -9,7 +9,7 @@ import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import { useLogin } from '../api/mutations'; import { TextField } from '../components/TextField'; -import { Modal } from '../components/Modal'; +import { AuthModal, ModalButton } from '../layout'; const StyledImg = styled.img` height: 2.6rem; @@ -64,23 +64,21 @@ export const Login = () => { const { mutate: login, isLoading, isError, error } = useLogin(); const navigate = useNavigate(); - const handleClose = () => { + const onClose = () => { navigate(-1); }; + const onSubmit = data => console.log(data); + return ( - - - Log in - Enter your details below to log in - {isError && {error.message}} - + + { name="password" label="Password *" type="password" - error={!!errors.password} - helperText={errors.password && errors.password.message} + error={!!errors?.password} + helperText={errors?.password && errors?.password.message} inputProps={register('password', { required: 'Required', })} @@ -109,6 +107,6 @@ export const Login = () => { Don't have an account? Register here - + ); }; From ceb9b39f5b352a1a607b9eb1e7515946cc302f01 Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Thu, 8 Jun 2023 15:36:13 +1200 Subject: [PATCH 110/251] WAITP-1216 Add project permissions to landing page projects in response (#4623) --- .../src/apiV1/landingPages.js | 44 ++++++------------- .../web-config-server/src/apiV1/projects.js | 2 +- 2 files changed, 14 insertions(+), 32 deletions(-) diff --git a/packages/web-config-server/src/apiV1/landingPages.js b/packages/web-config-server/src/apiV1/landingPages.js index 32b12b4864..30a32f7cc3 100644 --- a/packages/web-config-server/src/apiV1/landingPages.js +++ b/packages/web-config-server/src/apiV1/landingPages.js @@ -1,37 +1,7 @@ import { respond } from '@tupaia/utils'; - -function buildProjectData(project) { - const { - name, - code, - description, - sort_order: sortOrder, - image_url: imageUrl, - logo_url: logoUrl, - permission_groups: permissionGroups, - dashboard_group_name: dashboardGroupName, - default_measure: defaultMeasure, - config, - } = project; - - return { - name, - code, - permissionGroups, - description, - sortOrder, - imageUrl, - logoUrl, - dashboardGroupName, - defaultMeasure, - config, - }; -} +import { buildProjectDataForFrontend } from './projects'; async function buildLandingPageDataForFrontend(landingPage, req) { - const projectData = await req.models.project.find({ code: landingPage.project_codes }); - const projects = projectData.map(project => buildProjectData(project)); - const { name, image_url: imageUrl, @@ -45,8 +15,20 @@ async function buildLandingPageDataForFrontend(landingPage, req) { website_url: websiteUrl, include_name_in_header: includeNameInHeader, extended_title: extendedTitle, + project_codes: projectCodes, } = landingPage; + // Fetch all the projects with their entity_ids + const allProjects = await req.models.project.getAllProjectDetails(); + + // Filter to only the projects that are included in the landing page + const applicableProjects = allProjects.filter(project => projectCodes.includes(project.code)); + + // Build the project data for the frontend, using the method from the projects API, so that we get the same information returned, including permissions + const projects = await Promise.all( + applicableProjects.map(project => buildProjectDataForFrontend(project, req)), + ); + return { name, imageUrl, diff --git a/packages/web-config-server/src/apiV1/projects.js b/packages/web-config-server/src/apiV1/projects.js index a38676f347..c082f53d45 100644 --- a/packages/web-config-server/src/apiV1/projects.js +++ b/packages/web-config-server/src/apiV1/projects.js @@ -32,7 +32,7 @@ function getHomeEntityCode(project, entitiesWithAccess) { return project.entity_code; } -async function buildProjectDataForFrontend(project, req) { +export async function buildProjectDataForFrontend(project, req) { const { id: projectId, name, From fd9bf5351f1e834baddf829c28a15940067461ac Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Thu, 8 Jun 2023 17:02:34 +1200 Subject: [PATCH 111/251] clean up --- packages/tupaia-web/src/AppProviders.tsx | 2 +- packages/tupaia-web/src/Routes.tsx | 28 ++++++------ packages/tupaia-web/src/api/api.ts | 14 +++--- .../tupaia-web/src/api/mutations/useLogin.ts | 8 +++- packages/tupaia-web/src/components/Modal.tsx | 17 ++++--- .../tupaia-web/src/components/TextField.tsx | 2 +- packages/tupaia-web/src/layout/AuthModal.tsx | 28 ++++++------ .../tupaia-web/src/layout/Sidebar/Sidebar.tsx | 5 --- .../src/layout/UserMenu/MenuList.tsx | 10 ++++- .../src/layout/UserMenu/PopoverMenu.tsx | 19 +++++++- .../src/layout/UserMenu/UserMenu.tsx | 3 +- packages/tupaia-web/src/pages/Login.tsx | 44 ++++++------------- .../src/pages/PasswordResetForm.tsx | 2 +- .../tupaia-web/src/pages/RegisterForm.tsx | 2 +- .../src/pages/RequestAccessForm.tsx | 2 +- .../tupaia-web/src/pages/VerifyEmailForm.tsx | 2 +- packages/tupaia-web/src/theme/constants.ts | 4 -- packages/tupaia-web/src/theme/index.ts | 1 - packages/tupaia-web/src/theme/theme.ts | 3 ++ packages/tupaia-web/stories/Modal.stories.tsx | 38 ---------------- .../textField.stories.tsx} | 3 +- .../stories/layout/authModal.stories.tsx | 31 +++---------- 22 files changed, 108 insertions(+), 160 deletions(-) delete mode 100644 packages/tupaia-web/stories/Modal.stories.tsx rename packages/tupaia-web/stories/{TextField.stories.tsx => components/textField.stories.tsx} (94%) diff --git a/packages/tupaia-web/src/AppProviders.tsx b/packages/tupaia-web/src/AppProviders.tsx index cf42e71388..3ed9778578 100644 --- a/packages/tupaia-web/src/AppProviders.tsx +++ b/packages/tupaia-web/src/AppProviders.tsx @@ -12,7 +12,7 @@ import { theme } from './theme'; const queryClient = new QueryClient({ defaultOptions: { queries: { - refetchOnWindowFocus: false, // default: true + refetchOnWindowFocus: false, }, }, }); diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index 3d45b93248..5d48dd144e 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -23,24 +23,26 @@ import { DEFAULT_URL } from './constants'; export const Routes = () => { let location = useLocation(); - let state = location.state as { backgroundLocation?: Location }; + const state = location.state as { backgroundLocation?: Location }; + return ( - - } /> - } /> - } /> - } /> - } /> - } /> - } /> - {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} - } /> +
+ + } /> + } /> + } /> + } /> + } /> + } /> + {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} + } /> + {state?.backgroundLocation && ( - } /> + } /> )} - +
); }; diff --git a/packages/tupaia-web/src/api/api.ts b/packages/tupaia-web/src/api/api.ts index 6b13c2a355..14e165ff69 100644 --- a/packages/tupaia-web/src/api/api.ts +++ b/packages/tupaia-web/src/api/api.ts @@ -4,7 +4,6 @@ * */ import axios from 'axios'; -import { sleep } from '@tupaia/utils'; import FetchError from './fetchError'; export const API_URL = @@ -22,22 +21,21 @@ type RequestParameters = Record & { type RequestParametersWithMethod = RequestParameters & { method: 'get' | 'post' | 'put' | 'delete'; }; -const getRequestOptions = (options: RequestParametersWithMethod) => { +const getRequestOptions = (options?: RequestParametersWithMethod) => { const locale = window.location.pathname.split('/')[1]; return { ...options, timeout, params: { - ...options.params, + ...options?.params, locale, }, }; }; // Todo: Move api request util to ui-components and allow for mapping to backend request type safety -const request = async (endpoint: string, options: RequestParametersWithMethod) => { +const request = async (endpoint: string, options?: RequestParametersWithMethod) => { const requestOptions = getRequestOptions(options); - await sleep(3000); try { const response = await axios(`${API_URL}/${endpoint}`, requestOptions); @@ -64,13 +62,13 @@ const request = async (endpoint: string, options: RequestParametersWithMethod) = } }; -export const get = (endpoint: string, options: RequestParameters) => +export const get = (endpoint: string, options?: RequestParameters) => request(endpoint, { method: 'get', ...options }); -export const post = (endpoint: string, options: RequestParameters) => +export const post = (endpoint: string, options?: RequestParameters) => request(endpoint, { method: 'post', ...options }); -export const put = (endpoint: string, options: RequestParameters) => +export const put = (endpoint: string, options?: RequestParameters) => request(endpoint, { method: 'put', ...options }); export const remove = (endpoint: string) => request(endpoint, { method: 'delete' }); diff --git a/packages/tupaia-web/src/api/mutations/useLogin.ts b/packages/tupaia-web/src/api/mutations/useLogin.ts index 030346b536..3578f42490 100644 --- a/packages/tupaia-web/src/api/mutations/useLogin.ts +++ b/packages/tupaia-web/src/api/mutations/useLogin.ts @@ -7,12 +7,16 @@ import { useNavigate } from 'react-router-dom'; import { useMutation, useQueryClient } from 'react-query'; import { post } from '../api'; +type LoginCredentials = { + email: string; + password: string; +}; export const useLogin = () => { const navigate = useNavigate(); const queryClient = useQueryClient(); - return useMutation( - ({ email, password }) => { + return useMutation( + ({ email, password }: LoginCredentials) => { return post('login', { data: { emailAddress: email, diff --git a/packages/tupaia-web/src/components/Modal.tsx b/packages/tupaia-web/src/components/Modal.tsx index c40375c58b..801fa156b4 100644 --- a/packages/tupaia-web/src/components/Modal.tsx +++ b/packages/tupaia-web/src/components/Modal.tsx @@ -15,30 +15,35 @@ interface ModalProps { } const Wrapper = styled.div` + display: flex; + flex-direction: column; + align-items: center; text-align: center; overflow-x: hidden; - padding: 2em; + padding: 2rem 2rem 4rem; `; const CloseIcon = styled(MuiCloseIcon)` - width: 1.2em; - height: 1.2em; + width: 2rem; + height: 2rem; `; const CloseButton = styled(IconButton)` background-color: transparent; min-width: initial; position: absolute; - top: 0.6em; - right: 0.6em; + top: 0.1rem; + right: 0.1rem; `; const Paper = styled(MuiPaper)` background-color: ${({ theme }) => theme.palette.background.default}; padding: 0; + border-radius: 5px; color: rgba(255, 255, 255, 0.9); overflow-y: auto; - max-width: 920px; + width: 660px; + max-width: 100%; min-width: 300px; // Prevent width from animating. transition: transform 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms; diff --git a/packages/tupaia-web/src/components/TextField.tsx b/packages/tupaia-web/src/components/TextField.tsx index 6c19e49e07..279a33a0f5 100644 --- a/packages/tupaia-web/src/components/TextField.tsx +++ b/packages/tupaia-web/src/components/TextField.tsx @@ -32,4 +32,4 @@ const StyledTextField = styled(MuiTextField)` color: #9ba0a6; } `; -export const TextField = props => ; +export const TextField = (props: TextFieldProps) => ; diff --git a/packages/tupaia-web/src/layout/AuthModal.tsx b/packages/tupaia-web/src/layout/AuthModal.tsx index 1062618c61..5f06472d9b 100644 --- a/packages/tupaia-web/src/layout/AuthModal.tsx +++ b/packages/tupaia-web/src/layout/AuthModal.tsx @@ -4,55 +4,53 @@ */ import React, { ReactNode } from 'react'; -import { To, useNavigate } from 'react-router'; import { Modal } from '../components'; import styled from 'styled-components'; import { TUPAIA_LIGHT_LOGO_SRC } from '../constants'; -import { Button, Typography } from '@material-ui/core'; -import { FONT_SIZES } from '../theme'; -import { OutlinedButton } from '@tupaia/ui-components'; +import { Typography } from '@material-ui/core'; +import { Button, OutlinedButton } from '@tupaia/ui-components'; const Logo = styled.img` min-width: 110px; - margin-top: 1.8em; - margin-bottom: 3em; + margin-bottom: 3.6rem; `; const Title = styled(Typography)` - font-size: ${FONT_SIZES.viewTitle}; + font-size: 2rem; font-weight: 500; `; const Subtitle = styled(Typography)` - font-size: 1em; - margin-top: 1.4em; + font-size: 0.875rem; + line-height: 1.3; + margin-top: 1rem; `; export const ModalButton = styled(Button)` text-transform: none; - font-size: 1em; + font-size: 1rem; width: 100%; margin-left: 0 !important; - margin-top: 2em; + margin-top: 2rem; `; export const ModalCancelButton = styled(OutlinedButton).attrs({ color: 'default', })` text-transform: none; - font-size: 1em; + font-size: 1rem; width: 100%; margin-left: 0 !important; - padding: 0.375em 1em; // to match the height of the primary button + padding: 0.375rem 1rem; // to match the height of the primary button border-color: ${({ theme }) => theme.palette.text.secondary}; ${ModalButton} + & { - margin-top: 1.3em; + margin-top: 1.3rem; } `; interface AuthModalProps { children?: ReactNode; - onClose?: () => void; + onClose: () => void; title?: string; subtitle?: string; } diff --git a/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx index 7be174a663..743ff11a37 100644 --- a/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx +++ b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx @@ -4,7 +4,6 @@ */ import React, { useState } from 'react'; -import { Link } from 'react-router-dom'; import styled from 'styled-components'; import { TRANSPARENT_BLACK } from '../../constants'; import { ExpandButton } from './ExpandButton'; @@ -34,16 +33,12 @@ const Panel = styled.div<{ export const Sidebar = () => { const [isExpanded, setIsExpanded] = useState(false); - const toggleExpanded = () => { setIsExpanded(!isExpanded); }; return ( - - Login - ); diff --git a/packages/tupaia-web/src/layout/UserMenu/MenuList.tsx b/packages/tupaia-web/src/layout/UserMenu/MenuList.tsx index 354275464c..36b237af57 100644 --- a/packages/tupaia-web/src/layout/UserMenu/MenuList.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/MenuList.tsx @@ -6,7 +6,7 @@ import React, { ReactNode } from 'react'; import styled from 'styled-components'; import { Button, ListItem, ListItemProps } from '@material-ui/core'; -import { Link } from 'react-router-dom'; +import { Link, useLocation } from 'react-router-dom'; /** * Menulist is a component that displays a list of menu items for the hamburger menu @@ -75,6 +75,7 @@ export const MenuItem = ({ secondaryColor, target, }: MenuItemProps) => { + const location = useLocation(); const handleClickMenuItem = () => { if (onClick) onClick(); onCloseMenu(); @@ -82,7 +83,12 @@ export const MenuItem = ({ return ( {href ? ( - + {children} ) : ( diff --git a/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx index 5c13ee9c58..7f9408d357 100644 --- a/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx @@ -5,7 +5,7 @@ import React, { ReactNode } from 'react'; import { Popover as MuiPopover } from '@material-ui/core'; -import { MenuList } from './MenuList'; +import { MenuItem, MenuList } from './MenuList'; import styled from 'styled-components'; /** @@ -24,6 +24,7 @@ interface PopoverMenuProps { menuOpen: boolean; onCloseMenu: () => void; secondaryColor?: string; + isUserLoggedIn: boolean; } export const PopoverMenu = ({ children, @@ -31,6 +32,7 @@ export const PopoverMenu = ({ menuOpen, onCloseMenu, secondaryColor, + isUserLoggedIn, }: PopoverMenuProps) => { return ( - {children} + + {/** If the user is not logged in, show the register and login buttons */} + {!isUserLoggedIn && ( + <> + + Log in + + + Register + + + )} + {children} + ); }; diff --git a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx index 2d1057cd70..2789c1026c 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx @@ -5,7 +5,7 @@ import React, { ReactNode, useState } from 'react'; import MuiMenuIcon from '@material-ui/icons/Menu'; -import { Button, MenuList, useTheme } from '@material-ui/core'; +import { Button, useTheme } from '@material-ui/core'; import styled from 'styled-components'; import { PopoverMenu } from './PopoverMenu'; import { DrawerMenu } from './DrawerMenu'; @@ -60,6 +60,7 @@ export const UserMenu = () => { diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/Login.tsx index c61d2cce87..69c2e258f0 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -4,32 +4,17 @@ */ import React from 'react'; import { useNavigate, Link } from 'react-router-dom'; -import { useForm } from 'react-hook-form'; +import { SubmitHandler, useForm } from 'react-hook-form'; import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import { useLogin } from '../api/mutations'; import { TextField } from '../components/TextField'; import { AuthModal, ModalButton } from '../layout'; -const StyledImg = styled.img` - height: 2.6rem; - width: auto; - margin-bottom: 5rem; -`; -const Logo = () => ; - -const Title = styled(Typography)` - font-weight: 500; - font-size: 32px; - line-height: 13px; - margin-bottom: 1.6rem; -`; - -const Text = styled(Typography)` - font-weight: 400; - font-size: 14px; - line-height: 18px; - margin-bottom: 0.5rem; +const StyledForm = styled.form` + margin-top: 1rem; + width: 340px; + max-width: 100%; `; const LinkText = styled(Typography)` @@ -41,6 +26,10 @@ const LinkText = styled(Typography)` a { color: white; } + + ${ModalButton} + & { + margin-top: 1.3rem; + } `; const ForgotPasswordText = styled(LinkText)` @@ -49,12 +38,6 @@ const ForgotPasswordText = styled(LinkText)` text-align: right; `; -const StyledForm = styled.form` - margin-top: 0.5rem; - width: 340px; - max-width: 100%; -`; - export const Login = () => { const { handleSubmit, @@ -68,11 +51,10 @@ export const Login = () => { navigate(-1); }; - const onSubmit = data => console.log(data); - return ( - - + + {isError && {error.message}} + )} noValidate> { required: 'Required', })} /> - + Forgot password? diff --git a/packages/tupaia-web/src/pages/PasswordResetForm.tsx b/packages/tupaia-web/src/pages/PasswordResetForm.tsx index caf11b30a7..baa34704f7 100644 --- a/packages/tupaia-web/src/pages/PasswordResetForm.tsx +++ b/packages/tupaia-web/src/pages/PasswordResetForm.tsx @@ -6,5 +6,5 @@ import React from 'react'; import { AuthModal } from '../layout'; export const PasswordResetForm = () => { - return PasswordResetForm; + return {}}>PasswordResetForm; }; diff --git a/packages/tupaia-web/src/pages/RegisterForm.tsx b/packages/tupaia-web/src/pages/RegisterForm.tsx index 3d9c43cee1..bfdd2ab9f3 100644 --- a/packages/tupaia-web/src/pages/RegisterForm.tsx +++ b/packages/tupaia-web/src/pages/RegisterForm.tsx @@ -6,5 +6,5 @@ import React from 'react'; import { AuthModal } from '../layout'; export const RegisterForm = () => { - return RegisterForm; + return {}}>RegisterForm; }; diff --git a/packages/tupaia-web/src/pages/RequestAccessForm.tsx b/packages/tupaia-web/src/pages/RequestAccessForm.tsx index a72144d0a6..df3cdabb22 100644 --- a/packages/tupaia-web/src/pages/RequestAccessForm.tsx +++ b/packages/tupaia-web/src/pages/RequestAccessForm.tsx @@ -6,5 +6,5 @@ import React from 'react'; import { AuthModal } from '../layout'; export const RequestAccessForm = () => { - return RequestAccessForm; + return {}}>RequestAccessForm; }; diff --git a/packages/tupaia-web/src/pages/VerifyEmailForm.tsx b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx index 422c76f4ad..d09ccc48f8 100644 --- a/packages/tupaia-web/src/pages/VerifyEmailForm.tsx +++ b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx @@ -6,5 +6,5 @@ import React from 'react'; import { AuthModal } from '../layout'; export const VerifyEmailForm = () => { - return VerifyEmailForm; + return {}}>VerifyEmailForm; }; diff --git a/packages/tupaia-web/src/theme/constants.ts b/packages/tupaia-web/src/theme/constants.ts index a15a725733..f075b61f18 100644 --- a/packages/tupaia-web/src/theme/constants.ts +++ b/packages/tupaia-web/src/theme/constants.ts @@ -6,7 +6,3 @@ /** * Theme constants that don't require being in the entire theme object, ie. things that won't change if a custom theme was applied */ - -export const FONT_SIZES = { - viewTitle: '2em', -}; diff --git a/packages/tupaia-web/src/theme/index.ts b/packages/tupaia-web/src/theme/index.ts index f180c0a582..71768c69a6 100644 --- a/packages/tupaia-web/src/theme/index.ts +++ b/packages/tupaia-web/src/theme/index.ts @@ -2,5 +2,4 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -export * from './constants'; export * from './theme'; diff --git a/packages/tupaia-web/src/theme/theme.ts b/packages/tupaia-web/src/theme/theme.ts index 83ba090035..21196228f6 100644 --- a/packages/tupaia-web/src/theme/theme.ts +++ b/packages/tupaia-web/src/theme/theme.ts @@ -13,4 +13,7 @@ export const theme = createMuiTheme({ default: '#262834', // Dark blue background }, }, + shape: { + borderRadius: 3, + }, }); diff --git a/packages/tupaia-web/stories/Modal.stories.tsx b/packages/tupaia-web/stories/Modal.stories.tsx deleted file mode 100644 index bbb42138ab..0000000000 --- a/packages/tupaia-web/stories/Modal.stories.tsx +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import React from 'react'; -import type { Meta, StoryObj } from '@storybook/react'; -import { Typography } from '@material-ui/core'; -import { Modal } from '../src/components/Modal'; - -const meta: Meta = { - title: 'Modal', - component: Modal, - decorators: [ - Story => ( -
- -
- ), - ], -}; - -export default meta; -type Story = StoryObj; - -export const Simple: Story = { - render: () => ( - - - Lorem ipsum. - - - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam aliquid aperiam commodi - consequatur cupiditate doloribus earum facere ipsum modi, molestiae, neque, nobis nulla - perspiciatis qui sint tempora temporibus vel voluptatum! - - - ), -}; diff --git a/packages/tupaia-web/stories/TextField.stories.tsx b/packages/tupaia-web/stories/components/textField.stories.tsx similarity index 94% rename from packages/tupaia-web/stories/TextField.stories.tsx rename to packages/tupaia-web/stories/components/textField.stories.tsx index cefd22f23a..aaa3f1ebf6 100644 --- a/packages/tupaia-web/stories/TextField.stories.tsx +++ b/packages/tupaia-web/stories/components/textField.stories.tsx @@ -4,8 +4,7 @@ */ import React from 'react'; import type { Meta, StoryObj } from '@storybook/react'; - -import { TextField } from '../src/components/TextField'; +import { TextField } from '../../src/components/TextField'; const meta: Meta = { title: 'TextField', diff --git a/packages/tupaia-web/stories/layout/authModal.stories.tsx b/packages/tupaia-web/stories/layout/authModal.stories.tsx index 389aeb50c4..519fd12413 100644 --- a/packages/tupaia-web/stories/layout/authModal.stories.tsx +++ b/packages/tupaia-web/stories/layout/authModal.stories.tsx @@ -4,7 +4,7 @@ */ import React from 'react'; import { Meta } from '@storybook/react'; -import { AuthModal } from '../../src/layout/AuthModal'; +import { AuthModal, ModalButton, ModalCancelButton } from '../../src/layout/AuthModal'; const meta: Meta = { title: 'layout/AuthModal', @@ -15,7 +15,7 @@ export default meta; export const Simple = () => { return ( - + {}}> Hi, I am an auth modal ); @@ -23,36 +23,19 @@ export const Simple = () => { export const PrimaryButton = () => { return ( - {}, - }} - > + {}}> Hi, I am an auth modal + Login ); }; export const SecondaryButton = () => { return ( - {}, - }} - secondaryButton={{ - text: 'Cancel', - onClick: () => {}, - }} - > + {}}> Hi, I am an auth modal + Login + Login ); }; From 329ea47f0179e2c42e0998407a2f916453ceec81 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Thu, 8 Jun 2023 17:14:53 +1200 Subject: [PATCH 112/251] fix colours --- packages/tupaia-web/src/Routes.tsx | 4 ++-- packages/tupaia-web/src/components/TextField.tsx | 7 ++++--- packages/tupaia-web/src/constants/colors.ts | 4 ++++ packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx | 1 + 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index 5d48dd144e..05b37229de 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -26,7 +26,7 @@ export const Routes = () => { const state = location.state as { backgroundLocation?: Location }; return ( -
+ <> } /> } /> @@ -43,6 +43,6 @@ export const Routes = () => { } /> )} -
+ ); }; diff --git a/packages/tupaia-web/src/components/TextField.tsx b/packages/tupaia-web/src/components/TextField.tsx index 279a33a0f5..2ff2191a7a 100644 --- a/packages/tupaia-web/src/components/TextField.tsx +++ b/packages/tupaia-web/src/components/TextField.tsx @@ -5,6 +5,7 @@ import React from 'react'; import MuiTextField, { TextFieldProps } from '@material-ui/core/TextField'; import styled from 'styled-components'; +import { FORM_COLORS } from '../constants'; const StyledTextField = styled(MuiTextField)` display: flex; @@ -12,13 +13,13 @@ const StyledTextField = styled(MuiTextField)` margin-bottom: 0.7rem; .MuiFormLabel-root.MuiInputLabel-root { - color: #9ba0a6; + color: ${FORM_COLORS.BORDER}; } .MuiInputBase-root.MuiInput-root.MuiInput-underline.MuiInputBase-formControl.MuiInput-formControl { &:before, &:after { - border-bottom: 1px solid #9ba0a6; + border-bottom: 1px solid ${FORM_COLORS.BORDER}; } } @@ -29,7 +30,7 @@ const StyledTextField = styled(MuiTextField)` } .MuiFormHelperText-root:not(.Mui-error) { - color: #9ba0a6; + color: ${FORM_COLORS.BORDER}; } `; export const TextField = (props: TextFieldProps) => ; diff --git a/packages/tupaia-web/src/constants/colors.ts b/packages/tupaia-web/src/constants/colors.ts index 2f8cb75b56..d1ec811249 100644 --- a/packages/tupaia-web/src/constants/colors.ts +++ b/packages/tupaia-web/src/constants/colors.ts @@ -2,4 +2,8 @@ * Tupaia * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ + export const TRANSPARENT_BLACK = 'rgba(43, 45, 56, 0.94)'; +export const FORM_COLORS = { + BORDER: '#d9d9d9', +}; diff --git a/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx b/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx index e37ec61001..7b80108836 100644 --- a/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx +++ b/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx @@ -18,6 +18,7 @@ export const Map = () => { }; const Wrapper = styled.div` + background: lightgrey; flex: 1; display: flex; position: relative; From c8269a5bf6546b4d1624f0f5f0da86b0253cfc71 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Thu, 8 Jun 2023 17:20:52 +1200 Subject: [PATCH 113/251] test files --- packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx | 1 - packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx b/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx index 7b80108836..e37ec61001 100644 --- a/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx +++ b/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx @@ -18,7 +18,6 @@ export const Map = () => { }; const Wrapper = styled.div` - background: lightgrey; flex: 1; display: flex; position: relative; diff --git a/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx index 743ff11a37..c5c540b671 100644 --- a/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx +++ b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx @@ -33,6 +33,7 @@ const Panel = styled.div<{ export const Sidebar = () => { const [isExpanded, setIsExpanded] = useState(false); + const toggleExpanded = () => { setIsExpanded(!isExpanded); }; From 30f193036df2ed0a598fb29e21e7b8aa548c6bfe Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Fri, 9 Jun 2023 10:30:43 +1200 Subject: [PATCH 114/251] add comments --- packages/tupaia-web/src/Routes.tsx | 3 +++ packages/tupaia-web/src/components/TextField.tsx | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index 05b37229de..f617957030 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -33,11 +33,14 @@ export const Routes = () => { } /> } /> } /> + } /> } /> {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} } />
+ {/* The `backgroundLocation` state is the location that we were at when one of the gallery links was clicked. If it's there, use it as the location for + the so we show the gallery in the background, behind the modal. See react router docs [here]{@Link https://github.com/remix-run/react-router/tree/dev/examples/modal} */} {state?.backgroundLocation && ( } /> diff --git a/packages/tupaia-web/src/components/TextField.tsx b/packages/tupaia-web/src/components/TextField.tsx index 2ff2191a7a..90ac49f618 100644 --- a/packages/tupaia-web/src/components/TextField.tsx +++ b/packages/tupaia-web/src/components/TextField.tsx @@ -12,6 +12,7 @@ const StyledTextField = styled(MuiTextField)` width: 100%; margin-bottom: 0.7rem; + // Todo Fix nested material ui themes .MuiFormLabel-root.MuiInputLabel-root { color: ${FORM_COLORS.BORDER}; } @@ -25,8 +26,8 @@ const StyledTextField = styled(MuiTextField)` .MuiInputBase-input { color: white; - font-size: 14px; - line-height: 18px; + font-size: 0.875rem; + line-height: 1.3; } .MuiFormHelperText-root:not(.Mui-error) { From 4b1c5dddcecdd98dcfb872b38ada28d5eb9894c5 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Fri, 9 Jun 2023 10:50:06 +1200 Subject: [PATCH 115/251] Update main.tsx --- packages/tupaia-web/src/main.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/tupaia-web/src/main.tsx b/packages/tupaia-web/src/main.tsx index e792ccc365..98ddd7c033 100644 --- a/packages/tupaia-web/src/main.tsx +++ b/packages/tupaia-web/src/main.tsx @@ -5,11 +5,5 @@ import React from 'react'; import { render as renderReactApp } from 'react-dom'; import App from './App'; -import { AppProviders } from './AppProviders'; -renderReactApp( - - - , - document.getElementById('root'), -); +renderReactApp(, document.getElementById('root')); From 87724d95f34aba7efcd1b7cd990a5540d50e35e1 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Fri, 9 Jun 2023 11:45:12 +1200 Subject: [PATCH 116/251] use navigate back util --- .../tupaia-web/src/api/mutations/useLogin.ts | 8 +++---- .../tupaia-web/src/api/queries/useProjects.ts | 2 +- .../tupaia-web/src/api/queries/useUser.ts | 2 +- .../tupaia-web/src/components/TextField.tsx | 4 ++-- packages/tupaia-web/src/constants/colors.ts | 2 +- .../tupaia-web/src/constants/constants.ts | 2 +- packages/tupaia-web/src/layout/AuthModal.tsx | 7 ++++--- .../src/layout/Sidebar/ExpandButton.tsx | 2 +- packages/tupaia-web/src/pages/Login.tsx | 11 +++------- .../src/pages/PasswordResetForm.tsx | 2 +- .../tupaia-web/src/pages/RegisterForm.tsx | 2 +- .../src/pages/RequestAccessForm.tsx | 2 +- .../tupaia-web/src/pages/VerifyEmailForm.tsx | 2 +- .../tupaia-web/src/utils/useNavigateBack.ts | 21 +++++++++++++++++++ .../stories/layout/authModal.stories.tsx | 6 +++--- 15 files changed, 46 insertions(+), 29 deletions(-) create mode 100644 packages/tupaia-web/src/utils/useNavigateBack.ts diff --git a/packages/tupaia-web/src/api/mutations/useLogin.ts b/packages/tupaia-web/src/api/mutations/useLogin.ts index 3578f42490..3f89ef85e2 100644 --- a/packages/tupaia-web/src/api/mutations/useLogin.ts +++ b/packages/tupaia-web/src/api/mutations/useLogin.ts @@ -1,19 +1,19 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import { useNavigate } from 'react-router-dom'; import { useMutation, useQueryClient } from 'react-query'; import { post } from '../api'; +import { useNavigateBack } from '../../utils/useNavigateBack.ts'; type LoginCredentials = { email: string; password: string; }; export const useLogin = () => { - const navigate = useNavigate(); const queryClient = useQueryClient(); + const navigateBack = useNavigateBack(); return useMutation( ({ email, password }: LoginCredentials) => { @@ -28,7 +28,7 @@ export const useLogin = () => { { onSuccess: () => { queryClient.invalidateQueries(); - navigate(-1); + navigateBack(); }, }, ); diff --git a/packages/tupaia-web/src/api/queries/useProjects.ts b/packages/tupaia-web/src/api/queries/useProjects.ts index 30f3849ec9..3876bf2396 100644 --- a/packages/tupaia-web/src/api/queries/useProjects.ts +++ b/packages/tupaia-web/src/api/queries/useProjects.ts @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import { useQuery } from 'react-query'; diff --git a/packages/tupaia-web/src/api/queries/useUser.ts b/packages/tupaia-web/src/api/queries/useUser.ts index 0b8763c371..299b22626f 100644 --- a/packages/tupaia-web/src/api/queries/useUser.ts +++ b/packages/tupaia-web/src/api/queries/useUser.ts @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import { useQuery } from 'react-query'; diff --git a/packages/tupaia-web/src/components/TextField.tsx b/packages/tupaia-web/src/components/TextField.tsx index 90ac49f618..d364e40fc1 100644 --- a/packages/tupaia-web/src/components/TextField.tsx +++ b/packages/tupaia-web/src/components/TextField.tsx @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; import MuiTextField, { TextFieldProps } from '@material-ui/core/TextField'; @@ -20,7 +20,7 @@ const StyledTextField = styled(MuiTextField)` .MuiInputBase-root.MuiInput-root.MuiInput-underline.MuiInputBase-formControl.MuiInput-formControl { &:before, &:after { - border-bottom: 1px solid ${FORM_COLORS.BORDER}; + border-width: 1px; } } diff --git a/packages/tupaia-web/src/constants/colors.ts b/packages/tupaia-web/src/constants/colors.ts index d1ec811249..6498756e29 100644 --- a/packages/tupaia-web/src/constants/colors.ts +++ b/packages/tupaia-web/src/constants/colors.ts @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export const TRANSPARENT_BLACK = 'rgba(43, 45, 56, 0.94)'; diff --git a/packages/tupaia-web/src/constants/constants.ts b/packages/tupaia-web/src/constants/constants.ts index 78ca63eb92..d294b10b6f 100644 --- a/packages/tupaia-web/src/constants/constants.ts +++ b/packages/tupaia-web/src/constants/constants.ts @@ -5,6 +5,6 @@ export const DEFAULT_PROJECT_CODE = 'explore'; export const DEFAULT_ENTITY_CODE = 'explore'; -export const DEFAULT_URL = `${DEFAULT_PROJECT_CODE}/${DEFAULT_ENTITY_CODE}`; +export const DEFAULT_URL = `/${DEFAULT_PROJECT_CODE}/${DEFAULT_ENTITY_CODE}`; export const TUPAIA_LIGHT_LOGO_SRC = '/images/tupaia-logo-light.svg'; diff --git a/packages/tupaia-web/src/layout/AuthModal.tsx b/packages/tupaia-web/src/layout/AuthModal.tsx index 5f06472d9b..6ceb4bf0af 100644 --- a/packages/tupaia-web/src/layout/AuthModal.tsx +++ b/packages/tupaia-web/src/layout/AuthModal.tsx @@ -9,6 +9,7 @@ import styled from 'styled-components'; import { TUPAIA_LIGHT_LOGO_SRC } from '../constants'; import { Typography } from '@material-ui/core'; import { Button, OutlinedButton } from '@tupaia/ui-components'; +import { useNavigateBack } from '../utils/useNavigateBack.ts'; const Logo = styled.img` min-width: 110px; @@ -50,14 +51,14 @@ export const ModalCancelButton = styled(OutlinedButton).attrs({ interface AuthModalProps { children?: ReactNode; - onClose: () => void; title?: string; subtitle?: string; } -export const AuthModal = ({ children, title, subtitle, onClose }: AuthModalProps) => { +export const AuthModal = ({ children, title, subtitle }: AuthModalProps) => { + const navigateBack = useNavigateBack(); return ( - + {title} {subtitle && {subtitle}} diff --git a/packages/tupaia-web/src/layout/Sidebar/ExpandButton.tsx b/packages/tupaia-web/src/layout/Sidebar/ExpandButton.tsx index 261d9bc6db..6331e04d06 100644 --- a/packages/tupaia-web/src/layout/Sidebar/ExpandButton.tsx +++ b/packages/tupaia-web/src/layout/Sidebar/ExpandButton.tsx @@ -1,6 +1,6 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/Login.tsx index 69c2e258f0..d15061fb63 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -1,9 +1,9 @@ /* * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { useNavigate, Link } from 'react-router-dom'; +import { Link } from 'react-router-dom'; import { SubmitHandler, useForm } from 'react-hook-form'; import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; @@ -45,14 +45,9 @@ export const Login = () => { formState: { errors }, } = useForm(); const { mutate: login, isLoading, isError, error } = useLogin(); - const navigate = useNavigate(); - - const onClose = () => { - navigate(-1); - }; return ( - + {isError && {error.message}} )} noValidate> { - return {}}>PasswordResetForm; + return PasswordResetForm; }; diff --git a/packages/tupaia-web/src/pages/RegisterForm.tsx b/packages/tupaia-web/src/pages/RegisterForm.tsx index bfdd2ab9f3..3d9c43cee1 100644 --- a/packages/tupaia-web/src/pages/RegisterForm.tsx +++ b/packages/tupaia-web/src/pages/RegisterForm.tsx @@ -6,5 +6,5 @@ import React from 'react'; import { AuthModal } from '../layout'; export const RegisterForm = () => { - return {}}>RegisterForm; + return RegisterForm; }; diff --git a/packages/tupaia-web/src/pages/RequestAccessForm.tsx b/packages/tupaia-web/src/pages/RequestAccessForm.tsx index df3cdabb22..a72144d0a6 100644 --- a/packages/tupaia-web/src/pages/RequestAccessForm.tsx +++ b/packages/tupaia-web/src/pages/RequestAccessForm.tsx @@ -6,5 +6,5 @@ import React from 'react'; import { AuthModal } from '../layout'; export const RequestAccessForm = () => { - return {}}>RequestAccessForm; + return RequestAccessForm; }; diff --git a/packages/tupaia-web/src/pages/VerifyEmailForm.tsx b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx index d09ccc48f8..422c76f4ad 100644 --- a/packages/tupaia-web/src/pages/VerifyEmailForm.tsx +++ b/packages/tupaia-web/src/pages/VerifyEmailForm.tsx @@ -6,5 +6,5 @@ import React from 'react'; import { AuthModal } from '../layout'; export const VerifyEmailForm = () => { - return {}}>VerifyEmailForm; + return VerifyEmailForm; }; diff --git a/packages/tupaia-web/src/utils/useNavigateBack.ts b/packages/tupaia-web/src/utils/useNavigateBack.ts new file mode 100644 index 0000000000..e9452f5716 --- /dev/null +++ b/packages/tupaia-web/src/utils/useNavigateBack.ts @@ -0,0 +1,21 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import { DEFAULT_URL } from '../constants'; +import { useLocation, useNavigate } from 'react-router-dom'; + +export const useNavigateBack = () => { + const navigate = useNavigate(); + const { key } = useLocation(); + + return function navigateBack() { + /* The location.key property is a unique string associated with this location. On the initial location, this will be the string default. On all subsequent locations, this string will be a unique identifier. + { @link https://github.com/remix-run/history/blob/main/docs/api-reference.md#locationkey } */ + if (key === 'default') { + navigate(DEFAULT_URL); + } else { + navigate(-1); + } + }; +}; diff --git a/packages/tupaia-web/stories/layout/authModal.stories.tsx b/packages/tupaia-web/stories/layout/authModal.stories.tsx index 519fd12413..7457fcbded 100644 --- a/packages/tupaia-web/stories/layout/authModal.stories.tsx +++ b/packages/tupaia-web/stories/layout/authModal.stories.tsx @@ -15,7 +15,7 @@ export default meta; export const Simple = () => { return ( - {}}> + Hi, I am an auth modal ); @@ -23,7 +23,7 @@ export const Simple = () => { export const PrimaryButton = () => { return ( - {}}> + Hi, I am an auth modal Login @@ -32,7 +32,7 @@ export const PrimaryButton = () => { export const SecondaryButton = () => { return ( - {}}> + Hi, I am an auth modal Login Login From 5ca81d4f59ba61401549e5f1ea070b599f87b9fa Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Fri, 9 Jun 2023 11:47:14 +1200 Subject: [PATCH 117/251] WAITP-1216 Add default dashboard to project response (#4627) --- packages/database/src/modelClasses/Project.js | 2 +- .../web-config-server/src/apiV1/projects.js | 26 +++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/database/src/modelClasses/Project.js b/packages/database/src/modelClasses/Project.js index eb07aba453..d55ffcf93b 100644 --- a/packages/database/src/modelClasses/Project.js +++ b/packages/database/src/modelClasses/Project.js @@ -33,7 +33,7 @@ export class ProjectModel extends DatabaseModel { p.sort_order, p.permission_groups, p.entity_id, p.image_url, p.logo_url, p.dashboard_group_name, - p.default_measure, p.config + p.default_measure, p.config, p.entity_hierarchy_id from project p left join entity e on p.entity_id = e.id diff --git a/packages/web-config-server/src/apiV1/projects.js b/packages/web-config-server/src/apiV1/projects.js index c082f53d45..4dacc0973a 100644 --- a/packages/web-config-server/src/apiV1/projects.js +++ b/packages/web-config-server/src/apiV1/projects.js @@ -22,14 +22,22 @@ const fetchHasPendingProjectAccess = async (projectId, userId, req) => { return accessRequests.length > 0; }; // work out the entity to zoom to and open the dashboard of when this project is selected -function getHomeEntityCode(project, entitiesWithAccess) { +function getHomeEntity(project, entitiesWithAccess, allEntities) { if (entitiesWithAccess.length === 1) { // only one entity (country) inside, return that code - return entitiesWithAccess[0].code; + return entitiesWithAccess[0]; } // more than one child entity, return the code of the project entity, which should have bounds // encompassing all children - return project.entity_code; + return allEntities.find(e => e.id === project.entity_ids); +} + +// Fetch the project's default dashboard code using the dashboardGroupName, or the first dashboard code if the default dashboard can't be found +async function fetchDefaultDashboardCode(dashboardGroupName, entityHierachyId, homeEntity, req) { + const dashboards = await req.models.dashboard.getDashboards(homeEntity, entityHierachyId); + if (!dashboards.length) return 'General'; + const defaultDashboard = dashboards.find(d => d.name === dashboardGroupName); + return defaultDashboard ? defaultDashboard.code : dashboards[0].code; } export async function buildProjectDataForFrontend(project, req) { @@ -45,6 +53,7 @@ export async function buildProjectDataForFrontend(project, req) { entity_ids: entityIds, dashboard_group_name: dashboardGroupName, default_measure: defaultMeasure, + entity_hierachy_id: entityHierachyId, config, } = project; @@ -56,7 +65,13 @@ export async function buildProjectDataForFrontend(project, req) { // This controls which entity the project zooms to and what level dashboards are shown on the front-end. // If a single entity is available, zoom to that, otherwise show the project entity const hasAccess = entitiesWithAccess.length > 0; - const homeEntityCode = getHomeEntityCode(project, entitiesWithAccess); + const homeEntity = getHomeEntity(project, entitiesWithAccess, entities); + const defaultDashboard = await fetchDefaultDashboardCode( + dashboardGroupName, + entityHierachyId, + homeEntity, + req, + ); // Only want to check pending if no access const { userId } = req.userJson; @@ -75,10 +90,11 @@ export async function buildProjectDataForFrontend(project, req) { names, hasAccess, hasPendingAccess, - homeEntityCode, + homeEntityCode: homeEntity.code, dashboardGroupName, defaultMeasure, config, + defaultDashboard, }; } From 757780be93348f75f95d951b9d5602a5889a35d9 Mon Sep 17 00:00:00 2001 From: acdunham Date: Fri, 9 Jun 2023 11:53:04 +1200 Subject: [PATCH 118/251] WAITP-1216 fix typo --- packages/web-config-server/src/apiV1/projects.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-config-server/src/apiV1/projects.js b/packages/web-config-server/src/apiV1/projects.js index 4dacc0973a..547c8117f4 100644 --- a/packages/web-config-server/src/apiV1/projects.js +++ b/packages/web-config-server/src/apiV1/projects.js @@ -29,7 +29,7 @@ function getHomeEntity(project, entitiesWithAccess, allEntities) { } // more than one child entity, return the code of the project entity, which should have bounds // encompassing all children - return allEntities.find(e => e.id === project.entity_ids); + return allEntities.find(e => e.id === project.entity_id); } // Fetch the project's default dashboard code using the dashboardGroupName, or the first dashboard code if the default dashboard can't be found From 1ed64682fe55c63020bfdec41dfa34e49b0e5d5a Mon Sep 17 00:00:00 2001 From: acdunham Date: Fri, 9 Jun 2023 12:07:09 +1200 Subject: [PATCH 119/251] WAITP-1216 Fix entity object issue --- packages/web-config-server/src/apiV1/projects.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/web-config-server/src/apiV1/projects.js b/packages/web-config-server/src/apiV1/projects.js index 547c8117f4..e96f000a20 100644 --- a/packages/web-config-server/src/apiV1/projects.js +++ b/packages/web-config-server/src/apiV1/projects.js @@ -23,13 +23,12 @@ const fetchHasPendingProjectAccess = async (projectId, userId, req) => { }; // work out the entity to zoom to and open the dashboard of when this project is selected function getHomeEntity(project, entitiesWithAccess, allEntities) { - if (entitiesWithAccess.length === 1) { - // only one entity (country) inside, return that code - return entitiesWithAccess[0]; - } // more than one child entity, return the code of the project entity, which should have bounds - // encompassing all children - return allEntities.find(e => e.id === project.entity_id); + const homeEntityCode = + entitiesWithAccess.length === 1 ? entitiesWithAccess[0].code : project.entity_id; + + // return the entire entity object + return allEntities.find(e => e.code === homeEntityCode); } // Fetch the project's default dashboard code using the dashboardGroupName, or the first dashboard code if the default dashboard can't be found @@ -57,7 +56,7 @@ export async function buildProjectDataForFrontend(project, req) { config, } = project; - const entities = await Promise.all(entityIds.map(id => req.models.entity.findById(id))); + const entities = await Promise.all(entityIds.map(id => req.models.entity.findById(id))); // the return value of these is different to entitiesWithAccess const accessByEntity = await fetchEntitiesWithProjectAccess(req, entities, permissionGroups); const entitiesWithAccess = accessByEntity.filter(e => e.hasAccess.some(x => x)); const names = entities.map(e => e.name); From ab82e92edba92676bc22cd5c3454b7678786854b Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Fri, 9 Jun 2023 14:50:50 +1200 Subject: [PATCH 120/251] add router button --- packages/tupaia-web/src/Routes.tsx | 5 ++- .../src/components/RouterButton.tsx | 31 ++++++++++++++ packages/tupaia-web/src/layout/Layout.tsx | 1 - .../src/layout/MapLayout/MapLayout.tsx | 11 +++-- .../tupaia-web/src/layout/Sidebar/Sidebar.tsx | 1 - .../tupaia-web/src/layout/TopBar/Logo.tsx | 3 +- .../tupaia-web/src/layout/TopBar/TopBar.tsx | 40 ++++++++++++++++++- .../src/layout/UserMenu/PopoverMenu.tsx | 19 +-------- .../src/layout/UserMenu/UserMenu.tsx | 2 - 9 files changed, 83 insertions(+), 30 deletions(-) create mode 100644 packages/tupaia-web/src/components/RouterButton.tsx diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index f617957030..a8edd98300 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -28,8 +28,8 @@ export const Routes = () => { return ( <> - } /> - } /> + } /> + } /> } /> } /> } /> @@ -43,6 +43,7 @@ export const Routes = () => { the so we show the gallery in the background, behind the modal. See react router docs [here]{@Link https://github.com/remix-run/react-router/tree/dev/examples/modal} */} {state?.backgroundLocation && ( + } /> } /> )} diff --git a/packages/tupaia-web/src/components/RouterButton.tsx b/packages/tupaia-web/src/components/RouterButton.tsx new file mode 100644 index 0000000000..183a9e18de --- /dev/null +++ b/packages/tupaia-web/src/components/RouterButton.tsx @@ -0,0 +1,31 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React, { ReactNode } from 'react'; +import styled from 'styled-components'; +import Button from '@material-ui/core/Button'; +import { Link as RouterLink, useLocation, LinkProps } from 'react-router-dom'; + +const StyledLink = styled(RouterLink)` + color: white; + text-transform: none; + margin-right: 1rem; + border-radius: 2.5rem; + padding: 0.3125rem 1.25rem; +`; + +interface RouterButtonProps { + to: LinkProps['to']; + children?: ReactNode; +} + +export const RouterButton = ({ to, children, ...props }: RouterButtonProps) => { + const location = useLocation(); + + return ( + + ); +}; diff --git a/packages/tupaia-web/src/layout/Layout.tsx b/packages/tupaia-web/src/layout/Layout.tsx index b7f4d896ac..8cfab06352 100644 --- a/packages/tupaia-web/src/layout/Layout.tsx +++ b/packages/tupaia-web/src/layout/Layout.tsx @@ -16,7 +16,6 @@ const Container = styled.div` flex-direction: column; flex-wrap: nowrap; width: 100%; - pointer-events: none; display: flex; align-items: stretch; align-content: stretch; diff --git a/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx b/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx index e37ec61001..134d8a8924 100644 --- a/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx +++ b/packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx @@ -21,6 +21,7 @@ const Wrapper = styled.div` flex: 1; display: flex; position: relative; + pointer-events: none; `; const MapControlsContainer = styled.div` @@ -46,10 +47,12 @@ const Watermark = styled(MapWatermark)` // Placeholder for MapOverlaySelector component const MapOverlaySelector = styled.div` - width: 25%; - margin: 2em; - height: 200px; - background-color: rgba(255, 255, 255, 0.2); + width: 300px; + margin: 1em; + height: 40px; + border-radius: 5px; + background: #ff7428; + opacity: 0.6; `; /** diff --git a/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx index c5c540b671..dbf54280b0 100644 --- a/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx +++ b/packages/tupaia-web/src/layout/Sidebar/Sidebar.tsx @@ -21,7 +21,6 @@ const Panel = styled.div<{ position: relative; overflow: visible; background-color: ${TRANSPARENT_BLACK}; - pointer-events: auto; height: 100%; cursor: auto; transition: width 0.5s ease, max-width 0.5s ease; diff --git a/packages/tupaia-web/src/layout/TopBar/Logo.tsx b/packages/tupaia-web/src/layout/TopBar/Logo.tsx index 02c14d97e4..5f9885e701 100644 --- a/packages/tupaia-web/src/layout/TopBar/Logo.tsx +++ b/packages/tupaia-web/src/layout/TopBar/Logo.tsx @@ -16,7 +16,7 @@ const LogoWrapper = styled.div` `; const LogoImage = styled.img` - max-height: 80%; + max-height: 75%; width: auto; max-width: 50px; @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { @@ -26,7 +26,6 @@ const LogoImage = styled.img` const LogoLink = styled(Link)` cursor: pointer; - pointer-events: auto; padding: 0.5em; height: 100%; display: flex; diff --git a/packages/tupaia-web/src/layout/TopBar/TopBar.tsx b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx index 369314e83e..855d0aaefa 100644 --- a/packages/tupaia-web/src/layout/TopBar/TopBar.tsx +++ b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx @@ -2,11 +2,11 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ - import React from 'react'; import styled from 'styled-components'; import { Logo } from './Logo'; import { UserMenu } from '../UserMenu'; +import { RouterButton } from '../../components/RouterButton.tsx'; const TOP_BAR_HEIGHT = 60; const TOP_BAR_HEIGHT_MOBILE = 50; @@ -20,6 +20,7 @@ const Header = styled.header<{ height: ${TOP_BAR_HEIGHT_MOBILE}px; min-height: ${TOP_BAR_HEIGHT_MOBILE}px; display: flex; + justify-content: space-between; align-items: center; z-index: 1000; position: relative; @@ -43,11 +44,48 @@ const Header = styled.header<{ } `; +const Inner = styled.div` + display: flex; + align-items: center; +`; + +const SearchBar = styled.div` + display: none; + width: 300px; + height: 40px; + left: 1010px; + top: 15px; + background: #202124; + border-radius: 43px; + margin-right: 30px; + + @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.md}px) { + display: block; + } +`; + +const RegisterButton = styled(RouterButton)` + color: white; + text-transform: none; + margin-right: 1rem; + border-radius: 2.5rem; + padding: 0.3125rem 1.25rem; +`; + +const LoginButton = styled(RegisterButton).attrs({ variant: 'outlined' })` + border: 1px solid white; +`; + export const TopBar = () => { // When handing custom landing pages, pass the primary and secondary colors to the Header component return (
+ + + Register + Log in +
); diff --git a/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx index 7f9408d357..5c13ee9c58 100644 --- a/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx @@ -5,7 +5,7 @@ import React, { ReactNode } from 'react'; import { Popover as MuiPopover } from '@material-ui/core'; -import { MenuItem, MenuList } from './MenuList'; +import { MenuList } from './MenuList'; import styled from 'styled-components'; /** @@ -24,7 +24,6 @@ interface PopoverMenuProps { menuOpen: boolean; onCloseMenu: () => void; secondaryColor?: string; - isUserLoggedIn: boolean; } export const PopoverMenu = ({ children, @@ -32,7 +31,6 @@ export const PopoverMenu = ({ menuOpen, onCloseMenu, secondaryColor, - isUserLoggedIn, }: PopoverMenuProps) => { return ( - - {/** If the user is not logged in, show the register and login buttons */} - {!isUserLoggedIn && ( - <> - - Log in - - - Register - - - )} - {children} - + {children} ); }; diff --git a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx index 2789c1026c..0843934a20 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx @@ -24,7 +24,6 @@ const MenuButton = styled(Button)` height: 2em; text-align: right; padding: 0; - pointer-events: auto; `; const MenuIcon = styled(MuiMenuIcon)` @@ -60,7 +59,6 @@ export const UserMenu = () => { From 7be869d7462e6cdb1f4ed64211918efdef50ce93 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Fri, 9 Jun 2023 14:52:50 +1200 Subject: [PATCH 121/251] Update Routes.tsx --- packages/tupaia-web/src/Routes.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index a8edd98300..de7beaca7c 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -39,8 +39,8 @@ export const Routes = () => { } />
- {/* The `backgroundLocation` state is the location that we were at when one of the gallery links was clicked. If it's there, use it as the location for - the so we show the gallery in the background, behind the modal. See react router docs [here]{@Link https://github.com/remix-run/react-router/tree/dev/examples/modal} */} + {/* The `backgroundLocation` state is the location that we were at when the modal links was clicked. If it's there, use it as the location for + the and we show the main page in the background, behind the modal. See react router docs [here]{@Link https://github.com/remix-run/react-router/tree/dev/examples/modal} */} {state?.backgroundLocation && ( } /> From 05119fb9ff1e9364d47812077472b56b1ad35ad1 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Fri, 9 Jun 2023 16:09:49 +1200 Subject: [PATCH 122/251] Update TopBar.tsx --- packages/tupaia-web/src/layout/TopBar/TopBar.tsx | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/packages/tupaia-web/src/layout/TopBar/TopBar.tsx b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx index 855d0aaefa..5acb018a7e 100644 --- a/packages/tupaia-web/src/layout/TopBar/TopBar.tsx +++ b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx @@ -6,7 +6,6 @@ import React from 'react'; import styled from 'styled-components'; import { Logo } from './Logo'; import { UserMenu } from '../UserMenu'; -import { RouterButton } from '../../components/RouterButton.tsx'; const TOP_BAR_HEIGHT = 60; const TOP_BAR_HEIGHT_MOBILE = 50; @@ -64,18 +63,6 @@ const SearchBar = styled.div` } `; -const RegisterButton = styled(RouterButton)` - color: white; - text-transform: none; - margin-right: 1rem; - border-radius: 2.5rem; - padding: 0.3125rem 1.25rem; -`; - -const LoginButton = styled(RegisterButton).attrs({ variant: 'outlined' })` - border: 1px solid white; -`; - export const TopBar = () => { // When handing custom landing pages, pass the primary and secondary colors to the Header component return ( @@ -83,8 +70,6 @@ export const TopBar = () => { - Register - Log in From d34e26eeca8db9495e04cda279018e0fb2623fa6 Mon Sep 17 00:00:00 2001 From: acdunham Date: Mon, 12 Jun 2023 10:32:52 +1200 Subject: [PATCH 123/251] WAITP-1216 FIx entity id/code error --- packages/web-config-server/src/apiV1/projects.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/web-config-server/src/apiV1/projects.js b/packages/web-config-server/src/apiV1/projects.js index e96f000a20..9a0b9e1285 100644 --- a/packages/web-config-server/src/apiV1/projects.js +++ b/packages/web-config-server/src/apiV1/projects.js @@ -24,11 +24,10 @@ const fetchHasPendingProjectAccess = async (projectId, userId, req) => { // work out the entity to zoom to and open the dashboard of when this project is selected function getHomeEntity(project, entitiesWithAccess, allEntities) { // more than one child entity, return the code of the project entity, which should have bounds - const homeEntityCode = - entitiesWithAccess.length === 1 ? entitiesWithAccess[0].code : project.entity_id; - + const homeEntityId = + entitiesWithAccess.length === 1 ? entitiesWithAccess[0].id : project.entity_ids[0]; // return the entire entity object - return allEntities.find(e => e.code === homeEntityCode); + return allEntities.find(e => e.id === homeEntityId); } // Fetch the project's default dashboard code using the dashboardGroupName, or the first dashboard code if the default dashboard can't be found @@ -65,6 +64,7 @@ export async function buildProjectDataForFrontend(project, req) { // If a single entity is available, zoom to that, otherwise show the project entity const hasAccess = entitiesWithAccess.length > 0; const homeEntity = getHomeEntity(project, entitiesWithAccess, entities); + const defaultDashboard = await fetchDefaultDashboardCode( dashboardGroupName, entityHierachyId, From c11bfc6b0874f05519b446052436ca2d6a3d3f2b Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Mon, 12 Jun 2023 11:13:54 +1200 Subject: [PATCH 124/251] add register form --- packages/tupaia-web/src/Routes.tsx | 12 +-- .../tupaia-web/src/api/mutations/index.ts | 1 + .../src/api/mutations/useRegister.ts | 35 +++++++++ packages/tupaia-web/src/components/index.ts | 1 + .../src/pages/{Login.tsx => LoginModal.tsx} | 2 +- .../tupaia-web/src/pages/RegisterForm.tsx | 10 --- .../tupaia-web/src/pages/RegisterModal.tsx | 73 +++++++++++++++++++ packages/tupaia-web/src/pages/index.ts | 4 +- 8 files changed, 119 insertions(+), 19 deletions(-) create mode 100644 packages/tupaia-web/src/api/mutations/useRegister.ts rename packages/tupaia-web/src/pages/{Login.tsx => LoginModal.tsx} (98%) delete mode 100644 packages/tupaia-web/src/pages/RegisterForm.tsx create mode 100644 packages/tupaia-web/src/pages/RegisterModal.tsx diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index de7beaca7c..aa38f4d6ec 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -6,10 +6,10 @@ import React from 'react'; import { Navigate, Route, Routes as RouterRoutes, useLocation } from 'react-router-dom'; import { LandingPage, - Login, + LoginModal, PasswordResetForm, Project, - RegisterForm, + RegisterModal, RequestAccessForm, VerifyEmailForm, } from './pages'; @@ -29,11 +29,11 @@ export const Routes = () => { <> } /> - } /> + } /> } /> } /> } /> - } /> + } /> } /> {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} } /> @@ -43,8 +43,8 @@ export const Routes = () => { the and we show the main page in the background, behind the modal. See react router docs [here]{@Link https://github.com/remix-run/react-router/tree/dev/examples/modal} */} {state?.backgroundLocation && ( - } /> - } /> + } /> + } /> )} diff --git a/packages/tupaia-web/src/api/mutations/index.ts b/packages/tupaia-web/src/api/mutations/index.ts index f30f119bab..60d19208ec 100644 --- a/packages/tupaia-web/src/api/mutations/index.ts +++ b/packages/tupaia-web/src/api/mutations/index.ts @@ -5,3 +5,4 @@ */ export * from './useLogin'; +export * from './useRegister.ts'; diff --git a/packages/tupaia-web/src/api/mutations/useRegister.ts b/packages/tupaia-web/src/api/mutations/useRegister.ts new file mode 100644 index 0000000000..c80dd2a27c --- /dev/null +++ b/packages/tupaia-web/src/api/mutations/useRegister.ts @@ -0,0 +1,35 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import { useMutation, useQueryClient } from 'react-query'; +import { post } from '../api'; +import { useNavigateBack } from '../../utils/useNavigateBack.ts'; + +type LoginCredentials = { + email: string; + password: string; +}; +export const useRegister = () => { + const queryClient = useQueryClient(); + const navigateBack = useNavigateBack(); + + return useMutation( + ({ email, password }: LoginCredentials) => { + return post('login', { + data: { + emailAddress: email, + password, + deviceName: window.navigator.userAgent, + }, + }); + }, + { + onSuccess: () => { + queryClient.invalidateQueries(); + navigateBack(); + }, + }, + ); +}; diff --git a/packages/tupaia-web/src/components/index.ts b/packages/tupaia-web/src/components/index.ts index e5c2d245d9..1cf6c46086 100644 --- a/packages/tupaia-web/src/components/index.ts +++ b/packages/tupaia-web/src/components/index.ts @@ -3,3 +3,4 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export { Modal } from './Modal'; +export { TextField } from './TextField'; diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/LoginModal.tsx similarity index 98% rename from packages/tupaia-web/src/pages/Login.tsx rename to packages/tupaia-web/src/pages/LoginModal.tsx index d15061fb63..91d5284d57 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/LoginModal.tsx @@ -38,7 +38,7 @@ const ForgotPasswordText = styled(LinkText)` text-align: right; `; -export const Login = () => { +export const LoginModal = () => { const { handleSubmit, register, diff --git a/packages/tupaia-web/src/pages/RegisterForm.tsx b/packages/tupaia-web/src/pages/RegisterForm.tsx deleted file mode 100644 index 3d9c43cee1..0000000000 --- a/packages/tupaia-web/src/pages/RegisterForm.tsx +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import React from 'react'; -import { AuthModal } from '../layout'; - -export const RegisterForm = () => { - return RegisterForm; -}; diff --git a/packages/tupaia-web/src/pages/RegisterModal.tsx b/packages/tupaia-web/src/pages/RegisterModal.tsx new file mode 100644 index 0000000000..d694b9f977 --- /dev/null +++ b/packages/tupaia-web/src/pages/RegisterModal.tsx @@ -0,0 +1,73 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { SubmitHandler, useForm } from 'react-hook-form'; +import styled from 'styled-components'; +import Typography from '@material-ui/core/Typography'; +import { useLogin } from '../api/mutations'; +import { TextField } from '../components'; +import { AuthModal, ModalButton } from '../layout'; + +const StyledForm = styled.form` + margin-top: 1rem; + width: 340px; + max-width: 100%; +`; + +const LinkText = styled(Typography)` + font-weight: 400; + font-size: 11px; + line-height: 15px; + color: white; + + a { + color: white; + } + + ${ModalButton} + & { + margin-top: 1.3rem; + } +`; + +const ForgotPasswordText = styled(LinkText)` + display: block; + margin-top: -0.6rem; + text-align: right; +`; + +export const RegisterModal = () => { + const { + handleSubmit, + register, + formState: { errors }, + } = useForm(); + const { mutate: login, isLoading, isError, error } = useLogin(); + + return ( + + {isError && {error.message}} + )} noValidate> + + + + Forgot password? + + + Log in + + + Don't have an account? Register here + + + + ); +}; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index 28854bd922..60befcc3e0 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -3,9 +3,9 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export { LandingPage } from './LandingPage'; -export { Login } from './Login'; +export { LoginModal } from './LoginModal.tsx'; export { PasswordResetForm } from './PasswordResetForm'; export { Project } from './Project'; -export { RegisterForm } from './RegisterForm'; +export { RegisterModal } from './RegisterModal.tsx'; export { RequestAccessForm } from './RequestAccessForm'; export { VerifyEmailForm } from './VerifyEmailForm'; From 3cd02931359b89ba51d1a10ce9372ba8ac22d335 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Mon, 12 Jun 2023 11:52:24 +1200 Subject: [PATCH 125/251] fix forms --- packages/tupaia-web/package.json | 2 +- packages/tupaia-web/src/pages/Login.tsx | 12 ++++-------- yarn.lock | 11 +---------- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index 1a808aaf29..b37558ece6 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -39,7 +39,7 @@ "axios": "^1.4.0", "react": "^16.13.1", "react-dom": "^16.13.1", - "react-hook-form": "^7.44.3", + "react-hook-form": "^6.15.1", "react-query": "^3.39.3", "react-router": "6.3.0", "react-router-dom": "6.3.0", diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/Login.tsx index d15061fb63..0db52b6f12 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -39,24 +39,20 @@ const ForgotPasswordText = styled(LinkText)` `; export const Login = () => { - const { - handleSubmit, - register, - formState: { errors }, - } = useForm(); + const { handleSubmit, register, errors } = useForm(); const { mutate: login, isLoading, isError, error } = useLogin(); return ( {isError && {error.message}} - )} noValidate> + )}> { type="password" error={!!errors?.password} helperText={errors?.password && errors?.password.message} - inputProps={register('password', { + inputRef={register({ required: 'Required', })} /> diff --git a/yarn.lock b/yarn.lock index db670bf3f9..d98d4eb757 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8704,7 +8704,7 @@ __metadata: npm-run-all: ^4.1.5 react: ^16.13.1 react-dom: ^16.13.1 - react-hook-form: ^7.44.3 + react-hook-form: ^6.15.1 react-query: ^3.39.3 react-router: 6.3.0 react-router-dom: 6.3.0 @@ -34649,15 +34649,6 @@ __metadata: languageName: node linkType: hard -"react-hook-form@npm:^7.44.3": - version: 7.44.3 - resolution: "react-hook-form@npm:7.44.3" - peerDependencies: - react: ^16.8.0 || ^17 || ^18 - checksum: 8dc97e705d28d842c60fd79b0f07b8b045c458c234e3bf422baab87a844d0ebecbdf3e349538eaaa5c12366cd85169f60a52ed84dd31cdd99729899e424548bf - languageName: node - linkType: hard - "react-icon-base@npm:2.1.0": version: 2.1.0 resolution: "react-icon-base@npm:2.1.0" From 6b014e9cfa46d446f447b53efcf80a6a22a63b9b Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Mon, 12 Jun 2023 12:00:38 +1200 Subject: [PATCH 126/251] Waitp 1216 custom landing pages navigation (#4628) * WAITP-1216 Inital setup of landing pages + types * WAITP-1216 Add types package to tupaia-web * WAITP-1216 Add query options * Merge 'epic-landing-pages' into branch * WAITP-1216 Add single project view initial setup * WAITP-1216 Single landing page button * WAITP-1216 Single project landing page * WAITP-1216 Add comment * WAITP-1216 Multi-project landing page * WAITP-1216 Layout and top bar for landing pages * WAITP-1216 Update props * WAITP-1216 Update types * WAITP-1216 Add details to menu on landing page * WAITP-1216 Add comment * WAITP-1216 tweaks * Update import * WAITP-1216 tweaks * WAITP-1216 Use variables in routes --- packages/tupaia-web/.env.example | 2 +- packages/tupaia-web/package.json | 1 + .../images/custom-landing-page-default.png | Bin 0 -> 398369 bytes packages/tupaia-web/src/App.tsx | 8 +- packages/tupaia-web/src/AppProviders.tsx | 1 + packages/tupaia-web/src/Routes.tsx | 39 +- packages/tupaia-web/src/api/index.ts | 2 - packages/tupaia-web/src/api/queries/index.ts | 1 + .../src/api/queries/useLandingPage.ts | 25 + .../src/components/LoadingScreen.tsx | 36 + packages/tupaia-web/src/components/index.ts | 1 + .../tupaia-web/src/constants/constants.ts | 6 + packages/tupaia-web/src/layout/Layout.tsx | 5 +- .../layout/ProjectCardList/ProjectCard.tsx | 175 +++ .../ProjectCardList/ProjectCardList.tsx | 69 ++ .../src/layout/ProjectCardList/index.ts | 12 + .../tupaia-web/src/layout/TopBar/Logo.tsx | 14 +- .../tupaia-web/src/layout/TopBar/TopBar.tsx | 18 +- .../src/layout/UserMenu/PopoverMenu.tsx | 2 +- .../src/layout/UserMenu/UserInfo.tsx | 89 ++ .../src/layout/UserMenu/UserMenu.tsx | 63 +- packages/tupaia-web/src/layout/index.ts | 1 + packages/tupaia-web/src/pages/LandingPage.tsx | 13 - .../src/pages/LandingPage/LandingPage.tsx | 92 ++ .../pages/LandingPage/LandingPageFooter.tsx | 150 +++ .../LandingPage/MultiProjectLandingPage.tsx | 108 ++ .../LandingPage/SingleProjectLandingPage.tsx | 111 ++ .../tupaia-web/src/pages/LandingPage/index.ts | 6 + packages/tupaia-web/src/theme/theme.ts | 36 +- packages/tupaia-web/src/types/helpers.ts | 18 + packages/tupaia-web/src/types/index.d.ts | 1 + .../tupaia-web/src/types/react-query.d.ts | 9 + packages/tupaia-web/src/types/types.d.ts | 15 + .../src/utils/getProjectAccessType.ts | 19 + packages/tupaia-web/src/utils/index.ts | 6 + packages/types/src/types/models.ts | 1023 +++++++++-------- packages/types/src/utils/utils.ts | 26 +- .../ui-components/src/components/Button.tsx | 8 +- .../src/screens/LandingPage/LandingPage.js | 2 - yarn.lock | 1 + 40 files changed, 1634 insertions(+), 580 deletions(-) create mode 100644 packages/tupaia-web/public/images/custom-landing-page-default.png create mode 100644 packages/tupaia-web/src/api/queries/useLandingPage.ts create mode 100644 packages/tupaia-web/src/components/LoadingScreen.tsx create mode 100644 packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx create mode 100644 packages/tupaia-web/src/layout/ProjectCardList/ProjectCardList.tsx create mode 100644 packages/tupaia-web/src/layout/ProjectCardList/index.ts create mode 100644 packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx delete mode 100644 packages/tupaia-web/src/pages/LandingPage.tsx create mode 100644 packages/tupaia-web/src/pages/LandingPage/LandingPage.tsx create mode 100644 packages/tupaia-web/src/pages/LandingPage/LandingPageFooter.tsx create mode 100644 packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx create mode 100644 packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx create mode 100644 packages/tupaia-web/src/pages/LandingPage/index.ts create mode 100644 packages/tupaia-web/src/types/helpers.ts create mode 100644 packages/tupaia-web/src/types/index.d.ts create mode 100644 packages/tupaia-web/src/types/react-query.d.ts create mode 100644 packages/tupaia-web/src/types/types.d.ts create mode 100644 packages/tupaia-web/src/utils/getProjectAccessType.ts create mode 100644 packages/tupaia-web/src/utils/index.ts diff --git a/packages/tupaia-web/.env.example b/packages/tupaia-web/.env.example index de5bd82bab..f55aa581b2 100644 --- a/packages/tupaia-web/.env.example +++ b/packages/tupaia-web/.env.example @@ -1 +1 @@ -REACT_APP_CONFIG_SERVER_BASE_URL= +REACT_APP_TUPAIA_WEB_API_URL= diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index b37558ece6..fd45156ed9 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -57,6 +57,7 @@ "@storybook/react": "^7.0.18", "@storybook/react-vite": "^7.0.18", "@storybook/testing-library": "^0.0.14-next.2", + "@tupaia/types": "1.0.0", "@types/material-ui": "^0.21.12", "@vitejs/plugin-react": "^4.0.0", "npm-run-all": "^4.1.5", diff --git a/packages/tupaia-web/public/images/custom-landing-page-default.png b/packages/tupaia-web/public/images/custom-landing-page-default.png new file mode 100644 index 0000000000000000000000000000000000000000..f789807b1196b74447d3121d7ccf294d83004a01 GIT binary patch literal 398369 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

72+WZF}$OufypJEv?fa!8V6sO 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 Mt5#P^F5iv%AG_%;i~s-t literal 0 HcmV?d00001 diff --git a/packages/tupaia-web/src/App.tsx b/packages/tupaia-web/src/App.tsx index df9243d59a..d5eb4b68fb 100644 --- a/packages/tupaia-web/src/App.tsx +++ b/packages/tupaia-web/src/App.tsx @@ -3,19 +3,15 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; +import { BrowserRouter } from 'react-router-dom'; import { AppProviders } from './AppProviders'; import { Routes } from './Routes'; -import { Layout } from './layout'; -import { BrowserRouter } from 'react-router-dom'; const App = () => { return ( - {/** The Layout component needs to be inside BrowserRouter so that Link component from react-router-dom can be used (in menu etc.) */} - - - + ); diff --git a/packages/tupaia-web/src/AppProviders.tsx b/packages/tupaia-web/src/AppProviders.tsx index 3ed9778578..a9ade2d3fc 100644 --- a/packages/tupaia-web/src/AppProviders.tsx +++ b/packages/tupaia-web/src/AppProviders.tsx @@ -12,6 +12,7 @@ import { theme } from './theme'; const queryClient = new QueryClient({ defaultOptions: { queries: { + staleTime: 1000 * 60 * 5, // 5 minutes refetchOnWindowFocus: false, }, }, diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index de7beaca7c..f54443373f 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -14,6 +14,15 @@ import { VerifyEmailForm, } from './pages'; import { DEFAULT_URL } from './constants'; +import { Layout } from './layout'; + +export const USER_ROUTES = { + LOGIN: '/login', + REGISTER: '/register', + RESET_PASSWORD: '/reset-password', + REQUEST_ACCESS: '/request-access', + VERIFY_EMAIL: '/verify-email', +}; /** * This Router is using [version 6.3]{@link https://reactrouter.com/en/v6.3.0}, as later versions are not supported by our TS setup. See [this issue here]{@link https://github.com/remix-run/react-router/discussions/8364} @@ -28,23 +37,31 @@ export const Routes = () => { return ( <> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} - } /> + {/* This is the layout for the entire app, so needs to be wrapped around the rest of the routes so that we can access params in top bar etc */} + }> + } /> + } /> + } /> + } + /> + } /> + } /> + } /> + {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} + } /> + {/* The `backgroundLocation` state is the location that we were at when the modal links was clicked. If it's there, use it as the location for the and we show the main page in the background, behind the modal. See react router docs [here]{@Link https://github.com/remix-run/react-router/tree/dev/examples/modal} */} {state?.backgroundLocation && ( - } /> - } /> + }> + } /> + } /> + )} diff --git a/packages/tupaia-web/src/api/index.ts b/packages/tupaia-web/src/api/index.ts index bdd78c19b7..95426c272a 100644 --- a/packages/tupaia-web/src/api/index.ts +++ b/packages/tupaia-web/src/api/index.ts @@ -2,6 +2,4 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -// export * from './mutations'; -// export * from './queries'; export * from './api'; diff --git a/packages/tupaia-web/src/api/queries/index.ts b/packages/tupaia-web/src/api/queries/index.ts index e983b38eb5..fcb4030fcb 100644 --- a/packages/tupaia-web/src/api/queries/index.ts +++ b/packages/tupaia-web/src/api/queries/index.ts @@ -4,5 +4,6 @@ * */ +export { useLandingPage } from './useLandingPage'; export * from './useProjects'; export * from './useUser'; diff --git a/packages/tupaia-web/src/api/queries/useLandingPage.ts b/packages/tupaia-web/src/api/queries/useLandingPage.ts new file mode 100644 index 0000000000..bb05e3d61f --- /dev/null +++ b/packages/tupaia-web/src/api/queries/useLandingPage.ts @@ -0,0 +1,25 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * + */ + +import { useQuery } from 'react-query'; +import { get } from '../api'; +import { SingleLandingPage } from '../../types'; + +export const useLandingPage = (urlSegment?: string) => { + const landingPageResponse = useQuery( + ['landingPage', urlSegment], + () => get(`landingPage/${urlSegment}`, {}), + { + enabled: !!urlSegment, + }, + ); + // handle default landing page value as empty object + return { + ...landingPageResponse, + isLandingPage: !!landingPageResponse.data, + landingPage: (landingPageResponse.data || {}) as SingleLandingPage, + }; +}; diff --git a/packages/tupaia-web/src/components/LoadingScreen.tsx b/packages/tupaia-web/src/components/LoadingScreen.tsx new file mode 100644 index 0000000000..9d8aa1ec4c --- /dev/null +++ b/packages/tupaia-web/src/components/LoadingScreen.tsx @@ -0,0 +1,36 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import styled from 'styled-components'; + +const Screen = styled.div<{ + $background: string; +}>` + position: fixed; + top: 0; + left: 0; + height: 100vh; + width: 100vw; + display: flex; + background: ${props => props.$background}; + align-items: center; + justify-content: center; + z-index: ${Number.MAX_SAFE_INTEGER}; +`; + +interface LoadingScreenProps { + isLoading: boolean; + background?: string; +} +export const LoadingScreen = ({ + isLoading, + background = 'rgba(0, 0, 0, 0.5)', +}: LoadingScreenProps) => + isLoading ? ( + + + + ) : null; diff --git a/packages/tupaia-web/src/components/index.ts b/packages/tupaia-web/src/components/index.ts index e5c2d245d9..2e41cd00eb 100644 --- a/packages/tupaia-web/src/components/index.ts +++ b/packages/tupaia-web/src/components/index.ts @@ -2,4 +2,5 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +export { LoadingScreen } from './LoadingScreen'; export { Modal } from './Modal'; diff --git a/packages/tupaia-web/src/constants/constants.ts b/packages/tupaia-web/src/constants/constants.ts index d294b10b6f..cf90764bbb 100644 --- a/packages/tupaia-web/src/constants/constants.ts +++ b/packages/tupaia-web/src/constants/constants.ts @@ -8,3 +8,9 @@ export const DEFAULT_ENTITY_CODE = 'explore'; export const DEFAULT_URL = `/${DEFAULT_PROJECT_CODE}/${DEFAULT_ENTITY_CODE}`; export const TUPAIA_LIGHT_LOGO_SRC = '/images/tupaia-logo-light.svg'; + +export const PROJECT_ACCESS_TYPES = { + PENDING: 'PENDING', + ALLOWED: 'ALLOWED', + DENIED: 'DENIED', +}; diff --git a/packages/tupaia-web/src/layout/Layout.tsx b/packages/tupaia-web/src/layout/Layout.tsx index 8cfab06352..7b88bd5ef6 100644 --- a/packages/tupaia-web/src/layout/Layout.tsx +++ b/packages/tupaia-web/src/layout/Layout.tsx @@ -7,6 +7,7 @@ import React, { ReactNode } from 'react'; import styled from 'styled-components'; import { EnvBanner } from '@tupaia/ui-components'; import { TopBar } from './TopBar'; +import { Outlet } from 'react-router'; /** * This is the layout for the entire app, which contains the top bar and the main content. This is used to wrap the entire app content @@ -27,12 +28,12 @@ const Container = styled.div` } `; -export const Layout = ({ children }: { children: ReactNode }) => { +export const Layout = () => { return ( - {children} + ); }; diff --git a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx new file mode 100644 index 0000000000..4b30b0ad54 --- /dev/null +++ b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx @@ -0,0 +1,175 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React, { ComponentType } from 'react'; +import styled from 'styled-components'; +import Lock from '@material-ui/icons/Lock'; +import Alarm from '@material-ui/icons/Alarm'; +import { darken } from '@material-ui/core/styles'; +import { Typography } from '@material-ui/core'; +import { Link } from 'react-router-dom'; +import { Button, OutlinedButton } from '@tupaia/ui-components'; +import { SingleProject } from '../../types'; +import { USER_ROUTES } from '../../Routes'; + +const Card = styled.div` + display: flex; + flex-direction: column; + padding: 1.6rem; + min-height: 20rem; + border-radius: 5px; + background: ${({ theme }) => theme.projectCard.background}; + color: white; + box-sizing: border-box; + align-items: flex-start; + justify-content: space-between; + + @media (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { + padding: 2.5rem; + height: 24rem; + } + + button { + margin-top: auto; + } +`; + +const Logo = styled.div` + position: relative; + background: white; + width: 5rem; + height: 5rem; + border-radius: 3px; + overflow: hidden; + margin-bottom: 0.625rem; + + > img { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + max-width: 100%; + max-height: 100%; + } +`; + +const Title = styled(Typography)` + font-size: 1.25rem; + line-height: 1.4; + font-weight: 500; + margin-bottom: 0.625rem; +`; + +const Text = styled(Typography)` + font-size: 0.875rem; + line-height: 1.2; + margin-bottom: 0.625rem; +`; + +const CountryText = styled(Text)` + color: ${({ theme }) => theme.palette.text.secondary}; +`; + +const Body = styled.div` + flex: 1; + display: flex; + flex-direction: column; + justify-content: space-evenly; +`; + +const BaseLink = styled(Button).attrs({ + component: Link, +})` + background: ${({ theme }) => theme.palette.primary.main}; + border: 1px solid ${({ theme }) => theme.palette.primary.main}; + color: white; + border-radius: 3px; + font-weight: 500; + font-size: 0.875rem; + line-height: 1.2; + text-transform: none; + padding: 0.6875rem 1.25rem; + min-width: 11.5rem; + + &:hover { + background: ${({ theme }) => darken(theme.palette.primary.main, 0.1)}; + } + + .MuiSvgIcon-root { + font-size: 1.2em; + } +`; + +const OutlineLink = styled(OutlinedButton).attrs({ + component: Link, +})` + border: 1px solid ${({ theme }) => theme.palette.primary.main}; + color: ${({ theme }) => theme.palette.primary.main}; + background: transparent; + + &:hover { + background-color: rgba(255, 255, 255, 0.08); + } +`; + +interface LinkProps { + url: string; +} + +export const ProjectDeniedLink = ({ url }: LinkProps) => ( + }> + Request access + +); + +export const ProjectLoginLink = () => Log in; + +export const ProjectPendingLink = () => ( + }> + Approval in progress + +); +export const ProjectAllowedLink = ({ url }: LinkProps) => ( + View project +); + +interface ProjectCardProps extends Partial { + ProjectButton: ComponentType; +} + +function getCountryNames(countryNames: ProjectCardProps['names']) { + if (countryNames && countryNames.length < 3) { + return countryNames.sort().join(', '); + } + + return 'Multiple countries'; +} + +function getDescription(text: ProjectCardProps['description'], limit: number = 190) { + return text && text.length > limit ? `${text.substring(0, limit)}...` : text; +} + +export const ProjectCard = ({ + name, + description, + logoUrl, + names, + ProjectButton, +}: ProjectCardProps) => ( + + {logoUrl && ( + + {`${name} + + )} + + {name} +

+ + + +); diff --git a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCardList.tsx b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCardList.tsx new file mode 100644 index 0000000000..38ef62204d --- /dev/null +++ b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCardList.tsx @@ -0,0 +1,69 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import { ProjectCard as ProjectCardComponent } from './ProjectCard'; +import { PROJECT_ACCESS_TYPES } from '../../constants'; +import { getProjectAccessType } from '../../utils'; +import { SingleProject } from '../../types'; + +const EXPLORE_CODE = 'explore'; + +interface ProjectCardListProps { + projects: SingleProject[]; + actions: { + [key: string]: (props: any) => JSX.Element; + }; + ProjectCard?: (props: any) => JSX.Element; // this is to allow for legacy project cards to be used, e.g. in the projects modal +} + +type SortedProject = SingleProject & { + ActionButton: (props: any) => JSX.Element; +}; + +export const ProjectCardList = ({ + projects, + actions, + ProjectCard = ProjectCardComponent, +}: ProjectCardListProps) => { + const sortedProjects = Object.keys(PROJECT_ACCESS_TYPES).reduce((result, accessType) => { + const action = actions[PROJECT_ACCESS_TYPES[accessType as keyof typeof PROJECT_ACCESS_TYPES]]; + // If there is no action passed in for this access type, then the project card is useless, so ignore it so that nothing breaks + if (!action) return result; + const accessTypeProjects = projects.filter(project => { + const projectAccessType = getProjectAccessType(project); + return project.code !== EXPLORE_CODE && projectAccessType === accessType; + }); + return [ + ...result, + ...accessTypeProjects + .sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0)) + .map(project => ({ + ...project, + ActionButton: actions[accessType], + })), + ]; + }, [] as SortedProject[]); + + // Have to wrap this in a fragment so that consuming components don't throw a TS error about type of component not being valid + return ( + <> + {sortedProjects.map(project => { + const { name, description, logoUrl, imageUrl, names, ActionButton } = project; + return ( + } + names={names} + /> + ); + })} + + ); +}; diff --git a/packages/tupaia-web/src/layout/ProjectCardList/index.ts b/packages/tupaia-web/src/layout/ProjectCardList/index.ts new file mode 100644 index 0000000000..7a7cdb9515 --- /dev/null +++ b/packages/tupaia-web/src/layout/ProjectCardList/index.ts @@ -0,0 +1,12 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +export { ProjectCardList } from './ProjectCardList'; +export { + ProjectCard, + ProjectDeniedLink, + ProjectAllowedLink, + ProjectPendingLink, + ProjectLoginLink, +} from './ProjectCard'; diff --git a/packages/tupaia-web/src/layout/TopBar/Logo.tsx b/packages/tupaia-web/src/layout/TopBar/Logo.tsx index 5f9885e701..48623eeb27 100644 --- a/packages/tupaia-web/src/layout/TopBar/Logo.tsx +++ b/packages/tupaia-web/src/layout/TopBar/Logo.tsx @@ -6,7 +6,7 @@ import React, { ReactNode } from 'react'; import { Typography } from '@material-ui/core'; import styled from 'styled-components'; import { Link } from 'react-router-dom'; -import { DEFAULT_URL, TUPAIA_LIGHT_LOGO_SRC } from '../../constants'; +import { DEFAULT_URL } from '../../constants'; const LogoWrapper = styled.div` flex-grow: 1; @@ -65,13 +65,13 @@ const LogoComponent = ({ children: ReactNode[]; }) => (isCustomLandingPage ? <>{children} : {children}); -export const Logo = () => { - // Here is where we should swap out the logo for the custom landing page logo if applicable - const logoSrc = TUPAIA_LIGHT_LOGO_SRC; +interface LogoProps { + logoSrc?: string; + displayName?: boolean; + name?: string; +} - // These will later come from custom landing pages, where applicable - const displayName = false; - const name = ''; +export const Logo = ({ logoSrc, displayName = false, name = '' }: LogoProps) => { return ( diff --git a/packages/tupaia-web/src/layout/TopBar/TopBar.tsx b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx index 5acb018a7e..cc0d78ef6c 100644 --- a/packages/tupaia-web/src/layout/TopBar/TopBar.tsx +++ b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx @@ -6,6 +6,9 @@ import React from 'react'; import styled from 'styled-components'; import { Logo } from './Logo'; import { UserMenu } from '../UserMenu'; +import { useLandingPage } from '../../api/queries'; +import { useParams } from 'react-router'; +import { TUPAIA_LIGHT_LOGO_SRC } from '../../constants'; const TOP_BAR_HEIGHT = 60; const TOP_BAR_HEIGHT_MOBILE = 50; @@ -64,10 +67,19 @@ const SearchBar = styled.div` `; export const TopBar = () => { - // When handing custom landing pages, pass the primary and secondary colors to the Header component + const { landingPageUrlSegment } = useParams(); + // gets landing page data if landing page url segment is present, otherwise will return {} + const { landingPage } = useLandingPage(landingPageUrlSegment); + + // use the landing page settings if found, else the defaults + const { primaryHexcode, secondaryHexcode, includeNameInHeader, name, logoUrl } = landingPage; return ( -
- +
+ diff --git a/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx index 5c13ee9c58..276edbccfa 100644 --- a/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/PopoverMenu.tsx @@ -21,9 +21,9 @@ const Popover = styled(MuiPopover)` interface PopoverMenuProps { children: ReactNode; primaryColor?: string; + secondaryColor?: string; menuOpen: boolean; onCloseMenu: () => void; - secondaryColor?: string; } export const PopoverMenu = ({ children, diff --git a/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx b/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx new file mode 100644 index 0000000000..c84c2af9e0 --- /dev/null +++ b/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx @@ -0,0 +1,89 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import styled from 'styled-components'; +import { Link, LinkProps } from 'react-router-dom'; +import { OutlinedButton, TextButton } from '@tupaia/ui-components'; +import { USER_ROUTES } from '../../Routes'; + +/** + * UserInfo is a component that displays the user's name if user is logged in, or a register and sign in button if not set + */ +const Wrapper = styled.div` + @media screen and (max-width: ${({ theme }) => theme.breakpoints.values.md}px) { + display: none; + } +`; + +const UsernameContainer = styled.p<{ + $isLandingPage?: boolean; +}>` + padding-right: ${({ $isLandingPage }) => ($isLandingPage ? '1.5rem' : '5px')}; + margin: 0; + font-weight: ${({ $isLandingPage, theme }) => + $isLandingPage ? theme.typography.fontWeightMedium : theme.typography.fontWeightRegular}; + font-size: 0.875rem; + text-transform: ${({ $isLandingPage }) => ($isLandingPage ? 'uppercase' : 'none')}; + @media screen and (max-width: ${({ theme }) => theme.breakpoints.values.md}px) { + display: none; + } +`; + +const Register = styled(TextButton).attrs({ + component: Link, +})` + text-transform: none; + margin-right: 1.3rem; + font-size: 0.875rem; +`; + +const SignInButton = styled(OutlinedButton).attrs({ + component: Link, +})< + LinkProps & { + $secondaryColor?: string; + } +>` + font-size: 0.875rem; + text-transform: none; + border: 1px solid ${({ $secondaryColor }) => $secondaryColor}; + border-radius: 18px; + font-weight: ${({ theme }) => theme.typography.fontWeightMedium}; + height: 30px; + margin-right: 1.7rem; + padding-left: 1em; + padding-right: 1em; +`; + +interface UserInfoProps { + currentUserUsername?: string; + isLandingPage?: boolean; + secondaryColor?: string; + isUserLoggedIn?: boolean; +} + +/** + * This is the username OR user buttons. These are only visible in desktop + */ +export const UserInfo = ({ + currentUserUsername, + isLandingPage, + secondaryColor, + isUserLoggedIn, +}: UserInfoProps) => { + if (isUserLoggedIn) + return ( + {currentUserUsername} + ); + return ( + + {isLandingPage && Register} + + Log in + + + ); +}; diff --git a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx index 0843934a20..fa58d4c46a 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx @@ -9,6 +9,11 @@ import { Button, useTheme } from '@material-ui/core'; import styled from 'styled-components'; import { PopoverMenu } from './PopoverMenu'; import { DrawerMenu } from './DrawerMenu'; +import { useLandingPage } from '../../api/queries'; +import { useParams } from 'react-router'; +import { MenuItem } from './MenuList'; +import { USER_ROUTES } from '../../Routes'; +import { UserInfo } from './UserInfo'; const UserMenuContainer = styled.div<{ secondaryColor?: string; @@ -41,17 +46,52 @@ export const UserMenu = () => { setMenuOpen(false); }; - // Here will be the menu items logic. These will probably come from a context somewhere that handles when a user is logged in, and when it is a custom landing page - const menuItems = [] as ReactNode[]; - + const { landingPageUrlSegment } = useParams(); const theme = useTheme(); + const { + isLandingPage, + landingPage: { primaryHexcode, secondaryHexcode }, + } = useLandingPage(landingPageUrlSegment); + + // this will come from login state + const isUserLoggedIn = false; + + // Create the menu items + const BaseMenuItem = ({ children, ...props }: any) => ( + + {children} + + ); + + const VisitMainSite = ( + + Visit tupaia.org + + ); + + const ChangePassword = ( + Change password + ); + // The custom landing pages need different menu items to the other views + const customLandingPageMenuItems = isUserLoggedIn + ? [VisitMainSite, ChangePassword] + : [VisitMainSite]; + + const baseMenuItems = [] as ReactNode[]; + + const menuItems = isLandingPage ? customLandingPageMenuItems : baseMenuItems; - // these will later be updated to handle custom landing pages - const primaryColor = theme.palette.background.default; - const secondaryColor = theme.palette.text.primary; + const menuPrimaryColor = primaryHexcode || theme.palette.background.default; + const menuSecondaryColor = secondaryHexcode || theme.palette.text.primary; return ( + @@ -59,17 +99,18 @@ export const UserMenu = () => { {menuItems} {menuItems} diff --git a/packages/tupaia-web/src/layout/index.ts b/packages/tupaia-web/src/layout/index.ts index 76e119c103..0105d9bc0d 100644 --- a/packages/tupaia-web/src/layout/index.ts +++ b/packages/tupaia-web/src/layout/index.ts @@ -5,4 +5,5 @@ export { AuthModal, ModalButton, ModalCancelButton } from './AuthModal'; export { Layout } from './Layout'; export { MapLayout } from './MapLayout'; +export * from './ProjectCardList'; export { Sidebar } from './Sidebar'; diff --git a/packages/tupaia-web/src/pages/LandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage.tsx deleted file mode 100644 index 1d650ea6a3..0000000000 --- a/packages/tupaia-web/src/pages/LandingPage.tsx +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import React from 'react'; -import { useParams } from 'react-router-dom'; - -export const LandingPage = () => { - const { landingPageUrlSegment } = useParams(); - // use the landingPageUrlSegment to query for the landing page. - // If found, render landing page. If not, render a default landing page - return
{landingPageUrlSegment}
; -}; diff --git a/packages/tupaia-web/src/pages/LandingPage/LandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage/LandingPage.tsx new file mode 100644 index 0000000000..c6601c36ec --- /dev/null +++ b/packages/tupaia-web/src/pages/LandingPage/LandingPage.tsx @@ -0,0 +1,92 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import { useParams } from 'react-router-dom'; +import styled from 'styled-components'; +import { Container as MuiContainer } from '@material-ui/core'; +import { useLandingPage } from '../../api/queries'; +import { LoadingScreen } from '../../components'; +import { SingleProjectLandingPage } from './SingleProjectLandingPage'; +import { LandingPageFooter } from './LandingPageFooter'; +import { SingleLandingPage } from '../../types'; +import { MultiProjectLandingPage } from './MultiProjectLandingPage'; + +const DEFAULT_LANDING_IMAGE_URL = '/images/custom-landing-page-default.png'; + +const Wrapper = styled.div<{ + $backgroundImage?: string; +}>` + position: relative; + background-size: cover; + background-position: center; + background-color: ${({ theme }) => theme.palette.background.default}; + background-image: ${({ $backgroundImage }) => `url(${$backgroundImage})`}; + height: 100%; + overflow-y: auto; +`; + +const Container = styled(MuiContainer)` + background: linear-gradient(rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0.7) 100%); + padding: 1em; + display: flex; + flex-direction: column; + justify-content: space-between; + min-height: 100%; + @media screen and (min-width: ${({ theme }) => + theme.breakpoints.values.sm}px) and (min-height: 600px) { + padding: 2em 3.5em; + } +`; + +const ProjectScreen = ({ + landingPage, + isUserLoggedIn, +}: { + landingPage: SingleLandingPage; + isUserLoggedIn: boolean; +}) => { + const { projects = [], extendedTitle, includeNameInHeader } = landingPage; + + if (projects.length === 1) + return ( + + ); + return ( + + ); +}; + +export const LandingPage = () => { + const { landingPageUrlSegment } = useParams(); + const { landingPage, isLoading } = useLandingPage(landingPageUrlSegment!); + const { imageUrl } = landingPage; + + // This will come from actual login state once merged in + const isUserLoggedIn = true; + + // use the landingPageUrlSegment to query for the landing page. + // If found, render landing page. If not, render a default landing page + return ( + + + {isLoading ? ( + + ) : ( + + )} + + + + ); +}; diff --git a/packages/tupaia-web/src/pages/LandingPage/LandingPageFooter.tsx b/packages/tupaia-web/src/pages/LandingPage/LandingPageFooter.tsx new file mode 100644 index 0000000000..8a6e3daddd --- /dev/null +++ b/packages/tupaia-web/src/pages/LandingPage/LandingPageFooter.tsx @@ -0,0 +1,150 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import styled from 'styled-components'; +import { Link, Typography, List } from '@material-ui/core'; +import { SingleLandingPage } from '../../types'; + +const Footer = styled.footer` + margin-top: auto; + color: ${props => props.theme.palette.common.white}; + display: flex; + flex-direction: column; +`; + +const FooterContentWrapper = styled.div` + display: flex; + flex-direction: column; + @media screen and (min-width: ${props => props.theme.breakpoints.values.md}px) { + flex-direction: row; + } +`; + +const FooterHeader = styled(Typography)` + font-size: 1.2em; + font-weight: 600; + margin-bottom: 1em; +`; + +const FooterBodyText = styled.p` + margin: 0; + font-size: 0.875em; + @media screen and (min-width: ${({ theme }) => + theme.breakpoints.values.sm}px) and (min-height: 600px) { + font-size: 1em; + } +`; + +const FooterLink = styled(Link)` + color: ${props => props.theme.palette.common.white}; + text-decoration: underline; +`; + +const FooterContentContainer = styled.div` + & + & { + margin-top: 1em; + } + @media screen and (min-width: ${props => props.theme.breakpoints.values.md}px) { + width: 30%; + & + & { + margin-left: 4em; + margin-top: 0; + } + } +`; + +const FooterContactList = styled(List)` + list-style: none; + padding: 0; +`; + +const FooterContactListItem = styled.li` + font-size: 0.875em; + & + & { + margin-top: 0.5em; + } + @media screen and (min-width: ${({ theme }) => + theme.breakpoints.values.sm}px) and (min-height: 600px) { + font-size: 1em; + } +`; + +const FooterPoweredByWrapper = styled.div` + margin-top: -2px; + display: flex; + justify-content: flex-end; + padding-top: 1em; + @media screen and (min-width: ${({ theme }) => + theme.breakpoints.values.sm}px) and (min-height: 600px) { + padding-top: 2em; + margin-top: -3px; + } +`; + +export const LandingPageFooter = ({ landingPage }: { landingPage: SingleLandingPage }) => { + const { longBio, name, includeNameInHeader, externalLink, phoneNumber, websiteUrl } = landingPage; + // use h3 for footer item headers if there is already an h2 in the page (i.e. the name is h1, and the extended title is h2, else h2) + const footerHeaderVariant = includeNameInHeader ? 'h3' : 'h2'; + + // Parse the url, because if the http(s) is not included, the link will not be assumed to be the current origin + the url + const parseUrl = (url: string) => { + if (url.includes('http')) return url; + return `https://${url}`; + }; + const hasAboutSection = longBio || externalLink; + const hasContactSection = phoneNumber || websiteUrl; + + return ( +
+ + {hasAboutSection && ( + + About {name} + + {longBio} + {externalLink && ( + <> +   + + Learn more + + + )} + + + )} + {hasContactSection && ( + + Contact us + + {phoneNumber && ( + + Ph:  {phoneNumber} + + )} + {websiteUrl && ( + + Website:   + + {websiteUrl} + + + )} + + + )} + + + + Powered by   + + Tupaia + + + +
+ ); +}; diff --git a/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx new file mode 100644 index 0000000000..7f278c4291 --- /dev/null +++ b/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx @@ -0,0 +1,108 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ +import React from 'react'; +import styled from 'styled-components'; +import { Typography } from '@material-ui/core'; +import { TRANSPARENT_BLACK } from '../../constants'; +import { SingleLandingPage } from '../../types'; +import { PROJECT_ACCESS_TYPES } from '../../constants'; +import { + ProjectAllowedLink, + ProjectCardList, + ProjectDeniedLink, + ProjectLoginLink, + ProjectPendingLink, +} from '../../layout'; +import { USER_ROUTES } from '../../Routes'; + +const ProjectsWrapper = styled.div` + width: 100%; + max-width: ${({ theme }) => theme.breakpoints.values.lg}px; + margin: 0 auto; +`; + +const ProjectsContainer = styled.div` + display: grid; + grid-template-columns: 1fr; + column-gap: 1.2em; + row-gap: 1.2em; + + @media (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { + grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr)); + column-gap: 3.2em; + row-gap: 3.2em; + } +`; + +const Title = styled(Typography)` + font-weight: ${({ theme }) => theme.typography.fontWeightBold}; + font-size: 1.5em; + line-height: 1.4; + margin-bottom: 1.2em; + color: ${({ theme }) => theme.palette.common.white}; + text-shadow: 1px 1px ${TRANSPARENT_BLACK}; + max-width: 30em; + @media screen and (min-width: ${({ theme }) => + theme.breakpoints.values.sm}px) and (min-height: 600px) { + font-size: 2em; + } + @media screen and (min-width: ${({ theme }) => + theme.breakpoints.values.lg}px) and (min-height: 800px) { + margin-bottom: 1.8em; + } +`; + +const Wrapper = styled.div` + height: 100%; + display: flex; + flex-direction: column; + width: 100%; + margin-bottom: 2em; + @media (min-width: ${({ theme }) => theme.breakpoints.values.lg}px) { + margin-top: 2em; + } +`; + +interface MultiProjectLandingPageProps + extends Pick { + isUserLoggedIn: boolean; +} + +export function MultiProjectLandingPage({ + isUserLoggedIn, + projects, + includeNameInHeader, +}: MultiProjectLandingPageProps) { + return ( + + Select a project below to view. + + + ( + + ), + [PROJECT_ACCESS_TYPES.PENDING]: () => , + [PROJECT_ACCESS_TYPES.DENIED]: ({ project: { code } }) => { + if (isUserLoggedIn) { + return ; + } + return ; + }, + }} + /> + + + + ); +} diff --git a/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx new file mode 100644 index 0000000000..f9938b84bd --- /dev/null +++ b/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx @@ -0,0 +1,111 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import styled from 'styled-components'; +import { Typography } from '@material-ui/core'; +import { Link } from 'react-router-dom'; +import { Button } from '@tupaia/ui-components'; +import { PROJECT_ACCESS_TYPES } from '../../constants'; +import { getProjectAccessType } from '../../utils'; +import { SingleLandingPage, SingleProject } from '../../types'; +import { USER_ROUTES } from '../../Routes'; + +/** + * This is the template for the content of a landing page if there is only one project + */ + +const Wrapper = styled.div` + max-width: 30em; + display: flex; + flex-direction: column; + justify-content: center; + margin: auto 0; // centre the content in the remaining page space + min-height: 300px; // handle landscape mobile screens +`; + +const ExtendedTitle = styled(Typography)` + color: ${props => props.theme.palette.common.white}; + font-weight: ${props => props.theme.typography.fontWeightBold}; + font-size: 1.5em; + @media screen and (min-width: ${({ theme }) => + theme.breakpoints.values.sm}px) and (min-height: 600px) { + font-size: 2em; + } +`; + +const ActionLink = styled(Button)` + text-align: center; + width: 75%; + min-width: 10rem; + background-color: ${props => props.theme.palette.common.white}; + color: ${props => props.theme.palette.common.black}; + text-transform: none; + font-size: 0.975rem; + line-height: 1.5; + padding: 1em; + border-radius: 0.6em; + text-decoration: none; + ${ExtendedTitle} + & { + margin-top: 2em; + } + &:hover { + color: ${props => props.theme.palette.common.white}; + } + @media screen and (min-width: ${({ theme }) => + theme.breakpoints.values.sm}px) and (min-height: 600px) { + font-size: 1rem; + } +`; + +interface SingleProjectLandingPageProps + extends Pick { + project: SingleProject; + isUserLoggedIn: boolean; +} + +export function SingleProjectLandingPage({ + project, + extendedTitle, + includeNameInHeader, + isUserLoggedIn, +}: SingleProjectLandingPageProps) { + const accessType = getProjectAccessType(project); + + const { homeEntityCode, code } = project; + + const urls = { + [PROJECT_ACCESS_TYPES.PENDING]: '', + [PROJECT_ACCESS_TYPES.ALLOWED]: `/${code}/${homeEntityCode}`, + [PROJECT_ACCESS_TYPES.DENIED]: isUserLoggedIn + ? `${USER_ROUTES.REQUEST_ACCESS}/${code}` + : USER_ROUTES.LOGIN, + }; + + const actionTexts = { + [PROJECT_ACCESS_TYPES.PENDING]: 'Approval in progress', + [PROJECT_ACCESS_TYPES.ALLOWED]: 'View data', + [PROJECT_ACCESS_TYPES.DENIED]: isUserLoggedIn ? 'Request access' : 'Log in to view data', + }; + + return ( + + {extendedTitle && ( + {extendedTitle} + )} + {/* Only display a link if access type is set, and link is disabled if access has not yet been granted */} + {accessType && ( + + {actionTexts[accessType]} + + )} + + ); +} diff --git a/packages/tupaia-web/src/pages/LandingPage/index.ts b/packages/tupaia-web/src/pages/LandingPage/index.ts new file mode 100644 index 0000000000..86872a9792 --- /dev/null +++ b/packages/tupaia-web/src/pages/LandingPage/index.ts @@ -0,0 +1,6 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { LandingPage } from './LandingPage'; diff --git a/packages/tupaia-web/src/theme/theme.ts b/packages/tupaia-web/src/theme/theme.ts index 21196228f6..542d972481 100644 --- a/packages/tupaia-web/src/theme/theme.ts +++ b/packages/tupaia-web/src/theme/theme.ts @@ -1,19 +1,29 @@ import { createMuiTheme } from '@material-ui/core'; -export const theme = createMuiTheme({ - palette: { - type: 'dark', - primary: { - main: '#1978D4', // Main blue (as seen on primary buttons) +export const theme = createMuiTheme( + { + palette: { + type: 'dark', + primary: { + main: '#1978D4', // Main blue (as seen on primary buttons) + }, + secondary: { + main: '#ee6230', // Tupaia Orange + }, + background: { + default: '#262834', // Dark blue background + }, + text: { + secondary: '#9ba0a6', + }, }, - secondary: { - main: '#ee6230', // Tupaia Orange + }, + { + projectCard: { + background: '#2e2f33', }, - background: { - default: '#262834', // Dark blue background + shape: { + borderRadius: 3, }, }, - shape: { - borderRadius: 3, - }, -}); +); diff --git a/packages/tupaia-web/src/types/helpers.ts b/packages/tupaia-web/src/types/helpers.ts new file mode 100644 index 0000000000..5db517454b --- /dev/null +++ b/packages/tupaia-web/src/types/helpers.ts @@ -0,0 +1,18 @@ +// Converts a type key to camel case, from snake case +export type CamelCase = S extends `${infer P1}_${infer P2}${infer P3}` + ? `${Lowercase}${Uppercase}${CamelCase}` + : Lowercase; + +// Converts a type object to camel case, from snake case +export type ObjectToCamel = { + [K in keyof T as CamelCase]: T[K] extends Record + ? KeysToCamelCase + : T[K]; +}; + +// Converts type objects or arrays to camel case +export type KeysToCamelCase = { + [K in keyof T as CamelCase]: T[K] extends Array + ? KeysToCamelCase[] + : ObjectToCamel; +}; diff --git a/packages/tupaia-web/src/types/index.d.ts b/packages/tupaia-web/src/types/index.d.ts new file mode 100644 index 0000000000..fcb073fefc --- /dev/null +++ b/packages/tupaia-web/src/types/index.d.ts @@ -0,0 +1 @@ +export * from './types'; diff --git a/packages/tupaia-web/src/types/react-query.d.ts b/packages/tupaia-web/src/types/react-query.d.ts new file mode 100644 index 0000000000..1001855dae --- /dev/null +++ b/packages/tupaia-web/src/types/react-query.d.ts @@ -0,0 +1,9 @@ +import { UseQueryResult as ReactQueryUseQueryResult } from 'react-query'; + +declare module 'react-query' { + export type UseQueryResult = Omit & { + error?: ReactQueryUseQueryResult['error'] & { + code?: number; + }; // override this to make code a valid type, as it is not present in types with react-query + }; +} diff --git a/packages/tupaia-web/src/types/types.d.ts b/packages/tupaia-web/src/types/types.d.ts new file mode 100644 index 0000000000..9998dd52cb --- /dev/null +++ b/packages/tupaia-web/src/types/types.d.ts @@ -0,0 +1,15 @@ +import { LandingPage, Project } from '@tupaia/types'; +import { KeysToCamelCase } from './helpers'; + +export type SingleProject = KeysToCamelCase & { + hasAccess: boolean; + hasPendingAccess: boolean; + homeEntityCode: string; + defaultDashboard: string; + name: string; + names: string[]; +}; + +export type SingleLandingPage = KeysToCamelCase> & { + projects: SingleProject[]; +}; diff --git a/packages/tupaia-web/src/utils/getProjectAccessType.ts b/packages/tupaia-web/src/utils/getProjectAccessType.ts new file mode 100644 index 0000000000..137705b0b1 --- /dev/null +++ b/packages/tupaia-web/src/utils/getProjectAccessType.ts @@ -0,0 +1,19 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import { PROJECT_ACCESS_TYPES } from '../constants'; +import { SingleProject } from '../types'; + +export const getProjectAccessType = (project: SingleProject) => { + if (!project) return null; + const { hasAccess, hasPendingAccess } = project; + if (hasPendingAccess) { + return PROJECT_ACCESS_TYPES.PENDING; + } + if (hasAccess) { + return PROJECT_ACCESS_TYPES.ALLOWED; + } + return PROJECT_ACCESS_TYPES.DENIED; +}; diff --git a/packages/tupaia-web/src/utils/index.ts b/packages/tupaia-web/src/utils/index.ts new file mode 100644 index 0000000000..bdfea6368d --- /dev/null +++ b/packages/tupaia-web/src/utils/index.ts @@ -0,0 +1,6 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { getProjectAccessType } from './getProjectAccessType'; diff --git a/packages/types/src/types/models.ts b/packages/types/src/types/models.ts index b69a098783..9472cc5947 100644 --- a/packages/types/src/types/models.ts +++ b/packages/types/src/types/models.ts @@ -7,663 +7,682 @@ * This file was generated by a tool. * Rerun generate:models to recreate this file. */ +import { KeysToCamelCase } from '../utils'; import { ReportConfig } from './models-extra'; import { DashboardItemConfig } from './models-extra'; export { - DashboardItemConfig, - StandardReportConfig, - BarChartConfig, - ComposedChartConfig, - GaugeChartConfig, - LineChartConfig, - PieChartConfig, - BaseChartConfig, - CartesianChartConfig, - ValueType, + DashboardItemConfig, + StandardReportConfig, + BarChartConfig, + ComposedChartConfig, + GaugeChartConfig, + LineChartConfig, + PieChartConfig, + BaseChartConfig, + CartesianChartConfig, + ValueType, } from './models-extra'; export interface AccessRequest { - approved?: boolean | null; - created_time?: Date; - entity_id?: string | null; - id: string; - message?: string | null; - note?: string | null; - permission_group_id?: string | null; - processed_by?: string | null; - processed_date?: Date | null; - project_id?: string | null; - user_id?: string | null; + approved?: boolean | null; + created_time?: Date; + entity_id?: string | null; + id: string; + message?: string | null; + note?: string | null; + permission_group_id?: string | null; + processed_by?: string | null; + processed_date?: Date | null; + project_id?: string | null; + user_id?: string | null; } export interface AdminPanelSession { - access_policy: any; - access_token: string; - access_token_expiry: string; - email: string; - id: string; - refresh_token: string; + access_policy: any; + access_token: string; + access_token_expiry: string; + email: string; + id: string; + refresh_token: string; } export interface Analytics { - answer_entity_m_row$?: string | null; - answer_m_row$?: string | null; - data_element_code?: string | null; - data_element_m_row$?: string | null; - data_group_code?: string | null; - date?: Date | null; - day_period?: string | null; - entity_code?: string | null; - entity_m_row$?: string | null; - entity_name?: string | null; - event_id?: string | null; - month_period?: string | null; - question_m_row$?: string | null; - survey_m_row$?: string | null; - survey_response_m_row$?: string | null; - type?: string | null; - value?: string | null; - week_period?: string | null; - year_period?: string | null; + answer_entity_m_row$?: string | null; + answer_m_row$?: string | null; + data_element_code?: string | null; + data_element_m_row$?: string | null; + data_group_code?: string | null; + date?: Date | null; + day_period?: string | null; + entity_code?: string | null; + entity_m_row$?: string | null; + entity_name?: string | null; + event_id?: string | null; + month_period?: string | null; + question_m_row$?: string | null; + survey_m_row$?: string | null; + survey_response_m_row$?: string | null; + type?: string | null; + value?: string | null; + week_period?: string | null; + year_period?: string | null; } export interface AncestorDescendantRelation { - ancestor_id: string; - descendant_id: string; - entity_hierarchy_id: string; - generational_distance: number; - id: string; + ancestor_id: string; + descendant_id: string; + entity_hierarchy_id: string; + generational_distance: number; + id: string; } export interface Answer { - id: string; - m_row$?: string; - question_id: string; - survey_response_id: string; - text?: string | null; - type: string; + id: string; + m_row$?: string; + question_id: string; + survey_response_id: string; + text?: string | null; + type: string; } export interface ApiClient { - id: string; - secret_key_hash: string; - user_account_id?: string | null; - username: string; + id: string; + secret_key_hash: string; + user_account_id?: string | null; + username: string; } export interface ApiRequestLog { - api: string; - endpoint: string; - id: string; - metadata?: any | null; - method?: string | null; - query?: any | null; - refresh_token?: string | null; - request_time?: Date | null; - user_id?: string | null; - version: number; + api: string; + endpoint: string; + id: string; + metadata?: any | null; + method?: string | null; + query?: any | null; + refresh_token?: string | null; + request_time?: Date | null; + user_id?: string | null; + version: number; } export interface Clinic { - category_code?: string | null; - code: string; - country_id: string; - geographical_area_id: string; - id: string; - name: string; - type?: string | null; - type_name?: string | null; + category_code?: string | null; + code: string; + country_id: string; + geographical_area_id: string; + id: string; + name: string; + type?: string | null; + type_name?: string | null; } export interface Comment { - created_time?: Date; - id: string; - last_modified_time?: Date; - text: string; - user_id?: string | null; + created_time?: Date; + id: string; + last_modified_time?: Date; + text: string; + user_id?: string | null; } export interface Country { - code: string; - id: string; - name: string; + code: string; + id: string; + name: string; } export interface Dashboard { - code: string; - id: string; - name: string; - root_entity_code: string; - sort_order?: number | null; + code: string; + id: string; + name: string; + root_entity_code: string; + sort_order?: number | null; } export interface DashboardItem { - code: string; - config?: DashboardItemConfig; - id: string; - legacy?: boolean; - permission_group_ids?: string[] | null; - report_code?: string | null; + code: string; + config?: DashboardItemConfig; + id: string; + legacy?: boolean; + permission_group_ids?: string[] | null; + report_code?: string | null; } export interface DashboardRelation { - child_id: string; - dashboard_id: string; - entity_types: any; - id: string; - permission_groups: string[]; - project_codes: string[]; - sort_order?: number | null; + child_id: string; + dashboard_id: string; + entity_types: any; + id: string; + permission_groups: string[]; + project_codes: string[]; + sort_order?: number | null; } export interface DataElement { - code: string; - config?: any; - id: string; - m_row$?: string; - permission_groups?: string[]; - service_type: ServiceType; + code: string; + config?: any; + id: string; + m_row$?: string; + permission_groups?: string[]; + service_type: ServiceType; } export interface DataElementDataGroup { - data_element_id: string; - data_group_id: string; - id: string; + data_element_id: string; + data_group_id: string; + id: string; } export interface DataElementDataService { - country_code: string; - data_element_code: string; - id: string; - service_config?: any; - service_type: ServiceType; + country_code: string; + data_element_code: string; + id: string; + service_config?: any; + service_type: ServiceType; } export interface DataGroup { - code: string; - config?: any; - id: string; - service_type: ServiceType; + code: string; + config?: any; + id: string; + service_type: ServiceType; } export interface DataServiceEntity { - config: any; - entity_code: string; - id: string; + config: any; + entity_code: string; + id: string; } export interface DataServiceSyncGroup { - code: string; - config: any; - data_group_code: string; - id: string; - service_type: ServiceType; - sync_cursor?: string | null; - sync_status?: SyncGroupSyncStatus | null; + code: string; + config: any; + data_group_code: string; + id: string; + service_type: ServiceType; + sync_cursor?: string | null; + sync_status?: SyncGroupSyncStatus | null; } export interface DataTable { - code: string; - config?: any; - description?: string | null; - id: string; - permission_groups: string[]; - type: DataTableType; + code: string; + config?: any; + description?: string | null; + id: string; + permission_groups: string[]; + type: DataTableType; } export interface DhisInstance { - code: string; - config: any; - id: string; - readonly: boolean; + code: string; + config: any; + id: string; + readonly: boolean; } export interface DhisSyncLog { - data?: string | null; - deleted?: number | null; - dhis_reference?: string | null; - error_list?: string | null; - id: string; - ignored?: number | null; - imported?: number | null; - record_id: string; - record_type: string; - updated?: number | null; + data?: string | null; + deleted?: number | null; + dhis_reference?: string | null; + error_list?: string | null; + id: string; + ignored?: number | null; + imported?: number | null; + record_id: string; + record_type: string; + updated?: number | null; } export interface DhisSyncQueue { - bad_request_count?: number | null; - change_time?: number | null; - details?: string | null; - id: string; - is_dead_letter?: boolean | null; - is_deleted?: boolean | null; - priority?: number | null; - record_id: string; - record_type: string; - type: string; + bad_request_count?: number | null; + change_time?: number | null; + details?: string | null; + id: string; + is_dead_letter?: boolean | null; + is_deleted?: boolean | null; + priority?: number | null; + record_id: string; + record_type: string; + type: string; } export interface Disaster { - countryCode: string; - description?: string | null; - id: string; - name: string; - type: DisasterType; + countryCode: string; + description?: string | null; + id: string; + name: string; + type: DisasterType; } export interface DisasterEvent { - date: Date; - disasterId: string; - id: string; - organisationUnitCode: string; - type: DisasterEventType; + date: Date; + disasterId: string; + id: string; + organisationUnitCode: string; + type: DisasterEventType; } export interface Entity { - attributes?: any | null; - bounds?: any | null; - code: string; - country_code?: string | null; - id: string; - image_url?: string | null; - m_row$?: string; - metadata?: any | null; - name: string; - parent_id?: string | null; - point?: any | null; - region?: any | null; - type?: EntityType | null; + attributes?: any | null; + bounds?: any | null; + code: string; + country_code?: string | null; + id: string; + image_url?: string | null; + m_row$?: string; + metadata?: any | null; + name: string; + parent_id?: string | null; + point?: any | null; + region?: any | null; + type?: EntityType | null; } export interface EntityHierarchy { - canonical_types?: string[] | null; - id: string; - name: string; + canonical_types?: string[] | null; + id: string; + name: string; } export interface EntityRelation { - child_id: string; - entity_hierarchy_id: string; - id: string; - parent_id: string; + child_id: string; + entity_hierarchy_id: string; + id: string; + parent_id: string; } export interface ErrorLog { - api_request_log_id?: string | null; - error_time?: Date | null; - id: string; - message?: string | null; - type?: string | null; + api_request_log_id?: string | null; + error_time?: Date | null; + id: string; + message?: string | null; + type?: string | null; } export interface ExternalDatabaseConnection { - code: string; - description?: string | null; - id: string; - name: string; - permission_groups?: string[]; + code: string; + description?: string | null; + id: string; + name: string; + permission_groups?: string[]; } export interface FeedItem { - country_id?: string | null; - creation_date?: Date | null; - geographical_area_id?: string | null; - id: string; - permission_group_id?: string | null; - record_id?: string | null; - template_variables?: Object | null; - type?: string | null; - user_id?: string | null; + country_id?: string | null; + creation_date?: Date | null; + geographical_area_id?: string | null; + id: string; + permission_group_id?: string | null; + record_id?: string | null; + template_variables?: Object | null; + type?: string | null; + user_id?: string | null; } export interface GeographicalArea { - code?: string | null; - country_id: string; - id: string; - level_code: string; - level_name: string; - name: string; - parent_id?: string | null; + code?: string | null; + country_id: string; + id: string; + level_code: string; + level_name: string; + name: string; + parent_id?: string | null; } export interface Indicator { - builder: string; - code: string; - config?: any; - id: string; + builder: string; + code: string; + config?: any; + id: string; } export interface LegacyReport { - code: string; - data_builder?: string | null; - data_builder_config?: any | null; - data_services?: any | null; - id: string; + code: string; + data_builder?: string | null; + data_builder_config?: any | null; + data_services?: any | null; + id: string; } export interface LesmisSession { - access_policy: any; - access_token: string; - access_token_expiry: string; - email: string; - id: string; - refresh_token: string; + access_policy: any; + access_token: string; + access_token_expiry: string; + email: string; + id: string; + refresh_token: string; } export interface MapOverlay { - code: string; - config?: any; - country_codes?: string[] | null; - data_services?: any | null; - id?: string; - legacy?: boolean; - linked_measures?: string[] | null; - name: string; - permission_group: string; - project_codes?: string[] | null; - report_code?: string | null; + code: string; + config?: any; + country_codes?: string[] | null; + data_services?: any | null; + id?: string; + legacy?: boolean; + linked_measures?: string[] | null; + name: string; + permission_group: string; + project_codes?: string[] | null; + report_code?: string | null; } export interface MapOverlayGroup { - code: string; - id: string; - name: string; + code: string; + id: string; + name: string; } export interface MapOverlayGroupRelation { - child_id: string; - child_type: string; - id: string; - map_overlay_group_id: string; - sort_order?: number | null; + child_id: string; + child_type: string; + id: string; + map_overlay_group_id: string; + sort_order?: number | null; } export interface MeditrakDevice { - app_version?: string | null; - config?: any | null; - id: string; - install_id: string; - platform?: string | null; - user_id: string; + app_version?: string | null; + config?: any | null; + id: string; + install_id: string; + platform?: string | null; + user_id: string; } export interface MeditrakSyncQueue { - change_time?: number | null; - id: string; - record_id: string; - record_type: string; - type: string; + change_time?: number | null; + id: string; + record_id: string; + record_type: string; + type: string; } export interface Ms1SyncLog { - count?: number | null; - data?: string | null; - endpoint?: string | null; - error_list?: string | null; - id: string; - record_id: string; - record_type: string; + count?: number | null; + data?: string | null; + endpoint?: string | null; + error_list?: string | null; + id: string; + record_id: string; + record_type: string; } export interface Ms1SyncQueue { - bad_request_count?: number | null; - change_time?: number | null; - details?: string | null; - id: string; - is_dead_letter?: boolean | null; - is_deleted?: boolean | null; - priority?: number | null; - record_id: string; - record_type: string; - type: string; + bad_request_count?: number | null; + change_time?: number | null; + details?: string | null; + id: string; + is_dead_letter?: boolean | null; + is_deleted?: boolean | null; + priority?: number | null; + record_id: string; + record_type: string; + type: string; } export interface OneTimeLogin { - creation_date?: Date | null; - id: string; - token: string; - use_date?: Date | null; - user_id: string; + creation_date?: Date | null; + id: string; + token: string; + use_date?: Date | null; + user_id: string; } export interface Option { - attributes?: any | null; - id: string; - label?: string | null; - option_set_id: string; - sort_order?: number | null; - value: string; + attributes?: any | null; + id: string; + label?: string | null; + option_set_id: string; + sort_order?: number | null; + value: string; } export interface OptionSet { - id: string; - name: string; + id: string; + name: string; } export interface PermissionGroup { - id: string; - name: string; - parent_id?: string | null; + id: string; + name: string; + parent_id?: string | null; } export interface PermissionsBasedMeditrakSyncQueue { - change_time?: number | null; - country_ids?: string[] | null; - entity_type?: EntityType | null; - id?: string | null; - permission_groups?: string[] | null; - record_id?: string | null; - record_type?: string | null; - type?: string | null; + change_time?: number | null; + country_ids?: string[] | null; + entity_type?: EntityType | null; + id?: string | null; + permission_groups?: string[] | null; + record_id?: string | null; + record_type?: string | null; + type?: string | null; } export interface Project { - code: string; - config?: any | null; - dashboard_group_name?: string | null; - default_measure?: string | null; - description?: string | null; - entity_hierarchy_id?: string | null; - entity_id?: string | null; - id: string; - image_url?: string | null; - logo_url?: string | null; - permission_groups?: string[] | null; - sort_order?: number | null; + code: string; + config?: any | null; + dashboard_group_name?: string | null; + default_measure?: string | null; + description?: string | null; + entity_hierarchy_id?: string | null; + entity_id?: string | null; + id: string; + image_url?: string | null; + logo_url?: string | null; + permission_groups?: string[] | null; + sort_order?: number | null; } export interface PsssSession { - access_policy: any; - access_token: string; - access_token_expiry: string; - email: string; - id: string; - refresh_token: string; + access_policy: any; + access_token: string; + access_token_expiry: string; + email: string; + id: string; + refresh_token: string; } export interface Question { - code?: string | null; - data_element_id?: string | null; - detail?: string | null; - hook?: string | null; - id: string; - m_row$?: string; - name?: string | null; - option_set_id?: string | null; - options?: string[] | null; - text: string; - type: string; + code?: string | null; + data_element_id?: string | null; + detail?: string | null; + hook?: string | null; + id: string; + m_row$?: string; + name?: string | null; + option_set_id?: string | null; + options?: string[] | null; + text: string; + type: string; } export interface RefreshToken { - device?: string | null; - expiry?: number | null; - id: string; - meditrak_device_id?: string | null; - token: string; - user_id: string; + device?: string | null; + expiry?: number | null; + id: string; + meditrak_device_id?: string | null; + token: string; + user_id: string; } export interface Report { - code: string; - config: ReportConfig; - id: string; - permission_group_id: string; + code: string; + config: ReportConfig; + id: string; + permission_group_id: string; } export interface Setting { - id: string; - key: string; - value?: string | null; + id: string; + key: string; + value?: string | null; } export interface SupersetInstance { - code: string; - config: any; - id: string; + code: string; + config: any; + id: string; } export interface Survey { - can_repeat?: boolean | null; - code: string; - country_ids?: string[] | null; - data_group_id?: string | null; - id: string; - integration_metadata?: any | null; - m_row$?: string; - name: string; - period_granularity?: PeriodGranularity | null; - permission_group_id?: string | null; - requires_approval?: boolean | null; - survey_group_id?: string | null; + can_repeat?: boolean | null; + code: string; + country_ids?: string[] | null; + data_group_id?: string | null; + id: string; + integration_metadata?: any | null; + m_row$?: string; + name: string; + period_granularity?: PeriodGranularity | null; + permission_group_id?: string | null; + requires_approval?: boolean | null; + survey_group_id?: string | null; } export interface SurveyGroup { - id: string; - name: string; + id: string; + name: string; } export interface SurveyResponse { - approval_status?: ApprovalStatus | null; - assessor_name: string; - data_time?: Date | null; - end_time: Date; - entity_id: string; - id: string; - m_row$?: string; - metadata?: string | null; - outdated?: boolean | null; - start_time: Date; - survey_id: string; - timezone?: string | null; - user_id: string; + approval_status?: ApprovalStatus | null; + assessor_name: string; + data_time?: Date | null; + end_time: Date; + entity_id: string; + id: string; + m_row$?: string; + metadata?: string | null; + outdated?: boolean | null; + start_time: Date; + survey_id: string; + timezone?: string | null; + user_id: string; } export interface SurveyResponseComment { - comment_id: string; - id: string; - survey_response_id: string; + comment_id: string; + id: string; + survey_response_id: string; } export interface SurveyScreen { - id: string; - screen_number: number; - survey_id: string; + id: string; + screen_number: number; + survey_id: string; } export interface SurveyScreenComponent { - answers_enabling_follow_up?: string[] | null; - component_number: number; - config?: string | null; - detail_label?: string | null; - id: string; - is_follow_up?: boolean | null; - question_id: string; - question_label?: string | null; - screen_id: string; - validation_criteria?: string | null; - visibility_criteria?: string | null; + answers_enabling_follow_up?: string[] | null; + component_number: number; + config?: string | null; + detail_label?: string | null; + id: string; + is_follow_up?: boolean | null; + question_id: string; + question_label?: string | null; + screen_id: string; + validation_criteria?: string | null; + visibility_criteria?: string | null; } export interface SyncGroupLog { - id: string; - log_message: string; - service_type: ServiceType; - sync_group_code: string; - timestamp?: Date | null; + id: string; + log_message: string; + service_type: ServiceType; + sync_group_code: string; + timestamp?: Date | null; } export interface UserAccount { - creation_date?: Date | null; - email: string; - employer?: string | null; - first_name?: string | null; - gender?: string | null; - id: string; - last_name?: string | null; - mobile_number?: string | null; - password_hash: string; - password_salt: string; - position?: string | null; - primary_platform?: PrimaryPlatform | null; - profile_image?: string | null; - verified_email?: VerifiedEmail | null; + creation_date?: Date | null; + email: string; + employer?: string | null; + first_name?: string | null; + gender?: string | null; + id: string; + last_name?: string | null; + mobile_number?: string | null; + password_hash: string; + password_salt: string; + position?: string | null; + primary_platform?: PrimaryPlatform | null; + profile_image?: string | null; + verified_email?: VerifiedEmail | null; } export interface UserEntityPermission { - entity_id?: string | null; - id: string; - permission_group_id?: string | null; - user_id?: string | null; + entity_id?: string | null; + id: string; + permission_group_id?: string | null; + user_id?: string | null; } export interface UserFavouriteDashboardItem { - dashboard_item_id: string; - id: string; - user_id: string; + dashboard_item_id: string; + id: string; + user_id: string; } export interface UserSession { - access_token_expiry?: string; - accessPolicy?: any | null; - accessToken?: string | null; - id: string; - refreshToken: string; - userName: string; + access_token_expiry?: string; + accessPolicy?: any | null; + accessToken?: string | null; + id: string; + refreshToken: string; + userName: string; } export enum VerifiedEmail { - 'unverified' = 'unverified', - 'new_user' = 'new_user', - 'verified' = 'verified', + 'unverified' = 'unverified', + 'new_user' = 'new_user', + 'verified' = 'verified', } export enum SyncGroupSyncStatus { - 'IDLE' = 'IDLE', - 'SYNCING' = 'SYNCING', - 'ERROR' = 'ERROR', + 'IDLE' = 'IDLE', + 'SYNCING' = 'SYNCING', + 'ERROR' = 'ERROR', } export enum ServiceType { - 'dhis' = 'dhis', - 'tupaia' = 'tupaia', - 'indicator' = 'indicator', - 'weather' = 'weather', - 'kobo' = 'kobo', - 'data-lake' = 'data-lake', - 'superset' = 'superset', + 'dhis' = 'dhis', + 'tupaia' = 'tupaia', + 'indicator' = 'indicator', + 'weather' = 'weather', + 'kobo' = 'kobo', + 'data-lake' = 'data-lake', + 'superset' = 'superset', } export enum PrimaryPlatform { - 'tupaia' = 'tupaia', - 'lesmis' = 'lesmis', + 'tupaia' = 'tupaia', + 'lesmis' = 'lesmis', } export enum PeriodGranularity { - 'yearly' = 'yearly', - 'quarterly' = 'quarterly', - 'monthly' = 'monthly', - 'weekly' = 'weekly', - 'daily' = 'daily', + 'yearly' = 'yearly', + 'quarterly' = 'quarterly', + 'monthly' = 'monthly', + 'weekly' = 'weekly', + 'daily' = 'daily', } export enum EntityType { - 'world' = 'world', - 'project' = 'project', - 'country' = 'country', - 'district' = 'district', - 'sub_district' = 'sub_district', - 'facility' = 'facility', - 'village' = 'village', - 'case' = 'case', - 'case_contact' = 'case_contact', - 'disaster' = 'disaster', - 'school' = 'school', - 'catchment' = 'catchment', - 'sub_catchment' = 'sub_catchment', - 'field_station' = 'field_station', - 'city' = 'city', - 'individual' = 'individual', - 'sub_facility' = 'sub_facility', - 'postcode' = 'postcode', - 'household' = 'household', - 'larval_habitat' = 'larval_habitat', - 'local_government' = 'local_government', - 'medical_area' = 'medical_area', - 'nursing_zone' = 'nursing_zone', - 'fetp_graduate' = 'fetp_graduate', - 'incident' = 'incident', - 'incident_reported' = 'incident_reported', - 'fiji_aspen_facility' = 'fiji_aspen_facility', - 'wish_sub_district' = 'wish_sub_district', - 'trap' = 'trap', - 'asset' = 'asset', - 'institute' = 'institute', - 'msupply_store' = 'msupply_store', - 'complaint' = 'complaint', - 'water_sample' = 'water_sample', + 'world' = 'world', + 'project' = 'project', + 'country' = 'country', + 'district' = 'district', + 'sub_district' = 'sub_district', + 'facility' = 'facility', + 'village' = 'village', + 'case' = 'case', + 'case_contact' = 'case_contact', + 'disaster' = 'disaster', + 'school' = 'school', + 'catchment' = 'catchment', + 'sub_catchment' = 'sub_catchment', + 'field_station' = 'field_station', + 'city' = 'city', + 'individual' = 'individual', + 'sub_facility' = 'sub_facility', + 'postcode' = 'postcode', + 'household' = 'household', + 'larval_habitat' = 'larval_habitat', + 'local_government' = 'local_government', + 'medical_area' = 'medical_area', + 'nursing_zone' = 'nursing_zone', + 'fetp_graduate' = 'fetp_graduate', + 'incident' = 'incident', + 'incident_reported' = 'incident_reported', + 'fiji_aspen_facility' = 'fiji_aspen_facility', + 'wish_sub_district' = 'wish_sub_district', + 'trap' = 'trap', + 'asset' = 'asset', + 'institute' = 'institute', + 'msupply_store' = 'msupply_store', + 'complaint' = 'complaint', + 'water_sample' = 'water_sample', } export enum DisasterType { - 'cyclone' = 'cyclone', - 'eruption' = 'eruption', - 'earthquake' = 'earthquake', - 'tsunami' = 'tsunami', - 'flood' = 'flood', + 'cyclone' = 'cyclone', + 'eruption' = 'eruption', + 'earthquake' = 'earthquake', + 'tsunami' = 'tsunami', + 'flood' = 'flood', } export enum DisasterEventType { - 'start' = 'start', - 'end' = 'end', - 'resolve' = 'resolve', + 'start' = 'start', + 'end' = 'end', + 'resolve' = 'resolve', } export enum DataTableType { - 'analytics' = 'analytics', - 'events' = 'events', - 'entity_relations' = 'entity_relations', - 'entities' = 'entities', - 'sql' = 'sql', - 'data_group_metadata' = 'data_group_metadata', - 'data_element_metadata' = 'data_element_metadata', - 'entity_attributes' = 'entity_attributes', + 'analytics' = 'analytics', + 'events' = 'events', + 'entity_relations' = 'entity_relations', + 'entities' = 'entities', + 'sql' = 'sql', + 'data_group_metadata' = 'data_group_metadata', + 'data_element_metadata' = 'data_element_metadata', + 'entity_attributes' = 'entity_attributes', } export enum DataSourceType { - 'dataElement' = 'dataElement', - 'dataGroup' = 'dataGroup', + 'dataElement' = 'dataElement', + 'dataGroup' = 'dataGroup', } export enum ApprovalStatus { - 'not_required' = 'not_required', - 'pending' = 'pending', - 'rejected' = 'rejected', - 'approved' = 'approved', + 'not_required' = 'not_required', + 'pending' = 'pending', + 'rejected' = 'rejected', + 'approved' = 'approved', +} + +export interface LandingPage { + contact_us?: string; + extended_title?: string; + external_link?: string; + id: string; + image_url?: string; + include_name_in_header?: boolean; + logo_url?: string; + long_bio?: string; + name: string; + phone_number?: string; + primary_hexcode?: string; + project_codes: string[]; + secondary_hexcode?: string; + url_segment: string; + website_url?: string; } diff --git a/packages/types/src/utils/utils.ts b/packages/types/src/utils/utils.ts index 618b976db9..722fe33d6a 100644 --- a/packages/types/src/utils/utils.ts +++ b/packages/types/src/utils/utils.ts @@ -22,8 +22,9 @@ export type NullableKeys = { [K in keyof T]-?: null | T[K] extends T[K] ? K : * Maps keys of type that fields which can be null are instead optional (useful for serializing database items to JSON output) * NullableKeysToOptional<{ cat: string; dog: number; fish: boolean | null; }> => { cat: string; dog: number; fish?: boolean; } */ -export type NullableKeysToOptional = Pick> & - { [P in NullableKeys]?: Exclude }; +export type NullableKeysToOptional = Pick> & { + [P in NullableKeys]?: Exclude; +}; /** * Deeply partial object, eg. @@ -56,9 +57,28 @@ export type Flatten< // eslint-disable-next-line @typescript-eslint/no-explicit-any T extends Record>, J extends string = '.', - K extends keyof T & string = keyof T & string + K extends keyof T & string = keyof T & string, > = UnionToIntersection< { [V in K]: { [field in keyof T[V] & string as `${V}${J}${field}`]: T[V][field] }; }[K] >; + +// Converts a type key to camel case, from snake case +export type CamelCase = S extends `${infer P1}_${infer P2}${infer P3}` + ? `${Lowercase}${Uppercase}${CamelCase}` + : Lowercase; + +// Converts a type object to camel case, from snake case +export type ObjectToCamel = { + [K in keyof T as CamelCase]: T[K] extends Record + ? KeysToCamelCase + : T[K]; +}; + +// Converts type objects or arrays to camel case +export type KeysToCamelCase = { + [K in keyof T as CamelCase]: T[K] extends Array + ? KeysToCamelCase[] + : ObjectToCamel; +}; diff --git a/packages/ui-components/src/components/Button.tsx b/packages/ui-components/src/components/Button.tsx index f19d2952f7..bc4f5cf474 100644 --- a/packages/ui-components/src/components/Button.tsx +++ b/packages/ui-components/src/components/Button.tsx @@ -51,7 +51,7 @@ export const Button = ({ loadingText = 'Loading', disabled = false, ...props -}: ButtonProps) => ( +}: OverrideableComponentProps) => ( {isLoading ? `${loadingText}...` : children} @@ -77,7 +77,7 @@ export const GreyButton = styled(Button) /* * Text Button */ -export const TextButton = styled(MuiButton)` +export const TextButton = styled(MuiButton)>` font-size: 0.8125rem; font-weight: 400; `; @@ -143,7 +143,9 @@ export const SmallButton = styled(Button)` /* * Light Outlined Button */ -export const OutlinedButton = (props: MuiButtonProps) => ); diff --git a/packages/tupaia-web/src/components/index.ts b/packages/tupaia-web/src/components/index.ts index 2e41cd00eb..19c7dfa71e 100644 --- a/packages/tupaia-web/src/components/index.ts +++ b/packages/tupaia-web/src/components/index.ts @@ -4,3 +4,4 @@ */ export { LoadingScreen } from './LoadingScreen'; export { Modal } from './Modal'; +export { RouterButton } from './RouterButton'; diff --git a/packages/tupaia-web/src/constants/constants.ts b/packages/tupaia-web/src/constants/constants.ts index cf90764bbb..7123ee539d 100644 --- a/packages/tupaia-web/src/constants/constants.ts +++ b/packages/tupaia-web/src/constants/constants.ts @@ -9,6 +9,9 @@ export const DEFAULT_URL = `/${DEFAULT_PROJECT_CODE}/${DEFAULT_ENTITY_CODE}`; export const TUPAIA_LIGHT_LOGO_SRC = '/images/tupaia-logo-light.svg'; +export enum MODAL_TYPES { + PROJECTS = 'projects', +} export const PROJECT_ACCESS_TYPES = { PENDING: 'PENDING', ALLOWED: 'ALLOWED', diff --git a/packages/tupaia-web/src/layout/AuthModal.tsx b/packages/tupaia-web/src/layout/AuthModal.tsx index 6ceb4bf0af..ba4c098f8d 100644 --- a/packages/tupaia-web/src/layout/AuthModal.tsx +++ b/packages/tupaia-web/src/layout/AuthModal.tsx @@ -27,6 +27,12 @@ const Subtitle = styled(Typography)` margin-top: 1rem; `; +const Wrapper = styled.div` + display: flex; + flex-direction: column; + align-items: center; +`; + export const ModalButton = styled(Button)` text-transform: none; font-size: 1rem; @@ -53,16 +59,19 @@ interface AuthModalProps { children?: ReactNode; title?: string; subtitle?: string; + className?: string; } -export const AuthModal = ({ children, title, subtitle }: AuthModalProps) => { +export const AuthModal = ({ children, title, subtitle, className }: AuthModalProps) => { const navigateBack = useNavigateBack(); return ( - - - {title} - {subtitle && {subtitle}} - {children} + + + + {title} + {subtitle && {subtitle}} + {children} + ); }; diff --git a/packages/tupaia-web/src/layout/Layout.tsx b/packages/tupaia-web/src/layout/Layout.tsx index 7b88bd5ef6..3105c8ea16 100644 --- a/packages/tupaia-web/src/layout/Layout.tsx +++ b/packages/tupaia-web/src/layout/Layout.tsx @@ -3,11 +3,11 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import React, { ReactNode } from 'react'; +import React from 'react'; import styled from 'styled-components'; +import { Outlet } from 'react-router'; import { EnvBanner } from '@tupaia/ui-components'; import { TopBar } from './TopBar'; -import { Outlet } from 'react-router'; /** * This is the layout for the entire app, which contains the top bar and the main content. This is used to wrap the entire app content diff --git a/packages/tupaia-web/src/layout/ProjectCardList/LegacyProjectCard.tsx b/packages/tupaia-web/src/layout/ProjectCardList/LegacyProjectCard.tsx new file mode 100644 index 0000000000..96d55d4bda --- /dev/null +++ b/packages/tupaia-web/src/layout/ProjectCardList/LegacyProjectCard.tsx @@ -0,0 +1,167 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd + */ + +import React, { ReactNode } from 'react'; +import styled from 'styled-components'; +import Lock from '@material-ui/icons/Lock'; +import Alarm from '@material-ui/icons/Alarm'; +import { RouterButton } from '../../components'; + +const Card = styled.div` + display: grid; + grid-template-columns: auto; + grid-template-rows: auto auto auto; + gap: 16px; + padding-bottom: 16px; + border-radius: 3px; + text-align: center; + position: relative; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.3); + background: ${({ theme }) => theme.palette.common.white}; + color: #000000; +`; + +const Title = styled.div` + font-size: 22px; + font-weight: 500; + margin-top: -8px; + padding: 0 16px; +`; + +const Header = styled.div<{ + $backgroundImage: string; +}>` + position: relative; + display: flex; + justify-content: center; + margin-bottom: 15px; + height: 120px; + background-color: ${({ theme }) => theme.projectCard.fallBack}; /* fallback color */ + background-image: ${({ $backgroundImage }) => `url(${$backgroundImage})`}; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + + > img { + width: 100%; + height: 100%; + } +`; + +const Logo = styled.div` + background: white; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.25); + position: absolute; + width: 120px; + height: 85px; + bottom: -15px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 3px; + + > img { + max-width: 100%; + max-height: 100%; + } +`; + +const FullWidthRow = styled.div` + grid-column: 1 / -1; + padding: 0 16px; +`; + +const Countries = styled(FullWidthRow)` + margin-bottom: 8px; + font-size: 14px; + opacity: 0.7; + padding: 0; +`; + +const Footer = styled(FullWidthRow)` + display: grid; + align-content: end; + padding: 0 16px; +`; + +const LockIcon = styled(Lock)` + margin-right: 5px; +`; + +const AlarmIcon = styled(Alarm)` + margin-right: 5px; +`; + +const StyledPendingButton = styled(RouterButton).attrs({ + variant: 'outlined', + disabled: true, + to: '', +})` + background: #cde9ff; + color: ${({ theme }) => theme.palette.primary.main}; + padding: 5px; +`; + +export const LegacyProjectDeniedLink = ({ + url, + children, +}: { + url: string; + children: ReactNode; +}) => ( + + + {children} + +); + +export const LegacyProjectPendingLink = () => ( + + + Approval in progress + +); + +export const LegacyProjectAllowedLink = ({ url }: { url: string }) => ( + + View project + +); + +interface LegacyProjectCardProps { + name: string; + description: string; + imageUrl: string; + logoUrl: string; + names: string[]; + ProjectButton: any; +} + +export const LegacyProjectCard = ({ + name, + description, + imageUrl, + logoUrl, + names, + ProjectButton, +}: LegacyProjectCardProps) => { + return ( + +
+ {logoUrl && ( + + project logo + + )} +
+ {name} + {description} +
+ {name === 'Disaster Response' ? 'Global' : names.sort().join(', ')} + +
+
+ ); +}; diff --git a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx index 4b30b0ad54..66eb161425 100644 --- a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx +++ b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx @@ -2,16 +2,15 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import React, { ComponentType } from 'react'; +import React, { ComponentType, ReactNode } from 'react'; import styled from 'styled-components'; import Lock from '@material-ui/icons/Lock'; import Alarm from '@material-ui/icons/Alarm'; import { darken } from '@material-ui/core/styles'; import { Typography } from '@material-ui/core'; -import { Link } from 'react-router-dom'; -import { Button, OutlinedButton } from '@tupaia/ui-components'; import { SingleProject } from '../../types'; import { USER_ROUTES } from '../../Routes'; +import { RouterButton } from '../../components'; const Card = styled.div` display: flex; @@ -78,9 +77,7 @@ const Body = styled.div` justify-content: space-evenly; `; -const BaseLink = styled(Button).attrs({ - component: Link, -})` +const BaseLink = styled(RouterButton)` background: ${({ theme }) => theme.palette.primary.main}; border: 1px solid ${({ theme }) => theme.palette.primary.main}; color: white; @@ -101,8 +98,8 @@ const BaseLink = styled(Button).attrs({ } `; -const OutlineLink = styled(OutlinedButton).attrs({ - component: Link, +const OutlineLink = styled(RouterButton).attrs({ + variant: 'outlined', })` border: 1px solid ${({ theme }) => theme.palette.primary.main}; color: ${({ theme }) => theme.palette.primary.main}; diff --git a/packages/tupaia-web/src/layout/ProjectCardList/index.ts b/packages/tupaia-web/src/layout/ProjectCardList/index.ts index 7a7cdb9515..ccb51f35f6 100644 --- a/packages/tupaia-web/src/layout/ProjectCardList/index.ts +++ b/packages/tupaia-web/src/layout/ProjectCardList/index.ts @@ -10,3 +10,4 @@ export { ProjectPendingLink, ProjectLoginLink, } from './ProjectCard'; +export * from './LegacyProjectCard'; diff --git a/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx index 5cbc1cda2e..6237aa6f8b 100644 --- a/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx @@ -79,7 +79,7 @@ interface DrawerMenuProps { onCloseMenu: () => void; primaryColor?: string; secondaryColor?: string; - isUserLoggedIn: boolean; + isLoggedIn: boolean; currentUserUsername?: string; } @@ -89,7 +89,7 @@ export const DrawerMenu = ({ onCloseMenu, primaryColor, secondaryColor, - isUserLoggedIn, + isLoggedIn, currentUserUsername, }: DrawerMenuProps) => { return ( @@ -110,7 +110,7 @@ export const DrawerMenu = ({ {/** If the user is not logged in, show the register and login buttons */} - {!isUserLoggedIn && ( + {!isLoggedIn && ( <> Log in diff --git a/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx b/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx index c84c2af9e0..7643562045 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx @@ -5,9 +5,9 @@ import React from 'react'; import styled from 'styled-components'; -import { Link, LinkProps } from 'react-router-dom'; -import { OutlinedButton, TextButton } from '@tupaia/ui-components'; +import { LinkProps } from 'react-router-dom'; import { USER_ROUTES } from '../../Routes'; +import { RouterButton } from '../../components'; /** * UserInfo is a component that displays the user's name if user is logged in, or a register and sign in button if not set @@ -32,16 +32,16 @@ const UsernameContainer = styled.p<{ } `; -const Register = styled(TextButton).attrs({ - component: Link, +const Register = styled(RouterButton).attrs({ + variant: 'text', })` text-transform: none; - margin-right: 1.3rem; font-size: 0.875rem; `; -const SignInButton = styled(OutlinedButton).attrs({ - component: Link, +const SignInButton = styled(RouterButton).attrs({ + variant: 'outlined', + color: 'default', })< LinkProps & { $secondaryColor?: string; @@ -49,6 +49,7 @@ const SignInButton = styled(OutlinedButton).attrs({ >` font-size: 0.875rem; text-transform: none; + background: none; border: 1px solid ${({ $secondaryColor }) => $secondaryColor}; border-radius: 18px; font-weight: ${({ theme }) => theme.typography.fontWeightMedium}; @@ -62,7 +63,7 @@ interface UserInfoProps { currentUserUsername?: string; isLandingPage?: boolean; secondaryColor?: string; - isUserLoggedIn?: boolean; + isLoggedIn?: boolean; } /** @@ -72,16 +73,16 @@ export const UserInfo = ({ currentUserUsername, isLandingPage, secondaryColor, - isUserLoggedIn, + isLoggedIn, }: UserInfoProps) => { - if (isUserLoggedIn) + if (isLoggedIn) return ( {currentUserUsername} ); return ( - {isLandingPage && Register} - + Register + Log in diff --git a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx index fa58d4c46a..38289d7af4 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx @@ -3,17 +3,18 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import React, { ReactNode, useState } from 'react'; +import React, { useState } from 'react'; import MuiMenuIcon from '@material-ui/icons/Menu'; import { Button, useTheme } from '@material-ui/core'; import styled from 'styled-components'; +import { useParams } from 'react-router'; +import { useLandingPage, useUser } from '../../api/queries'; import { PopoverMenu } from './PopoverMenu'; import { DrawerMenu } from './DrawerMenu'; -import { useLandingPage } from '../../api/queries'; -import { useParams } from 'react-router'; import { MenuItem } from './MenuList'; import { USER_ROUTES } from '../../Routes'; import { UserInfo } from './UserInfo'; +import { MODAL_TYPES } from '../../constants'; const UserMenuContainer = styled.div<{ secondaryColor?: string; @@ -53,8 +54,7 @@ export const UserMenu = () => { landingPage: { primaryHexcode, secondaryHexcode }, } = useLandingPage(landingPageUrlSegment); - // this will come from login state - const isUserLoggedIn = false; + const { isLoggedIn, data } = useUser(); // Create the menu items const BaseMenuItem = ({ children, ...props }: any) => ( @@ -69,15 +69,17 @@ export const UserMenu = () => { ); + const ViewProjects = ( + View projects + ); + const ChangePassword = ( - Change password + Change password ); // The custom landing pages need different menu items to the other views - const customLandingPageMenuItems = isUserLoggedIn - ? [VisitMainSite, ChangePassword] - : [VisitMainSite]; + const customLandingPageMenuItems = isLoggedIn ? [VisitMainSite, ChangePassword] : [VisitMainSite]; - const baseMenuItems = [] as ReactNode[]; + const baseMenuItems = [ViewProjects]; const menuItems = isLandingPage ? customLandingPageMenuItems : baseMenuItems; @@ -87,8 +89,8 @@ export const UserMenu = () => { return ( @@ -107,7 +109,7 @@ export const UserMenu = () => { { const { projects = [], extendedTitle, includeNameInHeader } = landingPage; @@ -54,14 +54,14 @@ const ProjectScreen = ({ ); return ( ); @@ -72,8 +72,7 @@ export const LandingPage = () => { const { landingPage, isLoading } = useLandingPage(landingPageUrlSegment!); const { imageUrl } = landingPage; - // This will come from actual login state once merged in - const isUserLoggedIn = true; + const { isLoggedIn } = useUser(); // use the landingPageUrlSegment to query for the landing page. // If found, render landing page. If not, render a default landing page @@ -83,7 +82,7 @@ export const LandingPage = () => { {isLoading ? ( ) : ( - + )} diff --git a/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx index 7f278c4291..b11c5f98af 100644 --- a/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx +++ b/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx @@ -9,10 +9,10 @@ import { TRANSPARENT_BLACK } from '../../constants'; import { SingleLandingPage } from '../../types'; import { PROJECT_ACCESS_TYPES } from '../../constants'; import { - ProjectAllowedLink, ProjectCardList, - ProjectDeniedLink, ProjectLoginLink, + ProjectDeniedLink, + ProjectAllowedLink, ProjectPendingLink, } from '../../layout'; import { USER_ROUTES } from '../../Routes'; @@ -67,11 +67,11 @@ const Wrapper = styled.div` interface MultiProjectLandingPageProps extends Pick { - isUserLoggedIn: boolean; + isLoggedIn: boolean; } export function MultiProjectLandingPage({ - isUserLoggedIn, + isLoggedIn, projects, includeNameInHeader, }: MultiProjectLandingPageProps) { @@ -94,7 +94,7 @@ export function MultiProjectLandingPage({ ), [PROJECT_ACCESS_TYPES.PENDING]: () => , [PROJECT_ACCESS_TYPES.DENIED]: ({ project: { code } }) => { - if (isUserLoggedIn) { + if (isLoggedIn) { return ; } return ; diff --git a/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx index f9938b84bd..b1d80fadb0 100644 --- a/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx +++ b/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx @@ -63,14 +63,14 @@ const ActionLink = styled(Button)` interface SingleProjectLandingPageProps extends Pick { project: SingleProject; - isUserLoggedIn: boolean; + isLoggedIn: boolean; } export function SingleProjectLandingPage({ project, extendedTitle, includeNameInHeader, - isUserLoggedIn, + isLoggedIn, }: SingleProjectLandingPageProps) { const accessType = getProjectAccessType(project); @@ -79,7 +79,7 @@ export function SingleProjectLandingPage({ const urls = { [PROJECT_ACCESS_TYPES.PENDING]: '', [PROJECT_ACCESS_TYPES.ALLOWED]: `/${code}/${homeEntityCode}`, - [PROJECT_ACCESS_TYPES.DENIED]: isUserLoggedIn + [PROJECT_ACCESS_TYPES.DENIED]: isLoggedIn ? `${USER_ROUTES.REQUEST_ACCESS}/${code}` : USER_ROUTES.LOGIN, }; @@ -87,7 +87,7 @@ export function SingleProjectLandingPage({ const actionTexts = { [PROJECT_ACCESS_TYPES.PENDING]: 'Approval in progress', [PROJECT_ACCESS_TYPES.ALLOWED]: 'View data', - [PROJECT_ACCESS_TYPES.DENIED]: isUserLoggedIn ? 'Request access' : 'Log in to view data', + [PROJECT_ACCESS_TYPES.DENIED]: isLoggedIn ? 'Request access' : 'Log in to view data', }; return ( diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/Login.tsx index 0db52b6f12..c48c184ca3 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -43,7 +43,7 @@ export const Login = () => { const { mutate: login, isLoading, isError, error } = useLogin(); return ( - + {isError && {error.message}} )}> { + const [searchParams, setSearchParams] = useSearchParams(); + const modal = searchParams.get('modal') as typeof MODAL_TYPES[keyof typeof MODAL_TYPES]; + // If no modal param or invalid modal param, return null + if (!modal || !Object.values(MODAL_TYPES).includes(modal)) return null; + + const onCloseModal = () => { + // remove the modal param from URLSearchParams + searchParams.delete('modal'); + setSearchParams(searchParams); + }; + + const ModalView = modalViews[modal]; + return ( + + + + ); +}; diff --git a/packages/tupaia-web/src/pages/Projects.tsx b/packages/tupaia-web/src/pages/Projects.tsx new file mode 100644 index 0000000000..aa0dc6375b --- /dev/null +++ b/packages/tupaia-web/src/pages/Projects.tsx @@ -0,0 +1,118 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import styled from 'styled-components'; +import ExploreIcon from '@material-ui/icons/ExploreOutlined'; +import { DEFAULT_URL, PROJECT_ACCESS_TYPES, TUPAIA_LIGHT_LOGO_SRC } from '../constants'; +import { useProjects, useUser } from '../api/queries'; +import { USER_ROUTES } from '../Routes'; +import { + LegacyProjectCard, + LegacyProjectAllowedLink, + LegacyProjectDeniedLink, + LegacyProjectPendingLink, + ProjectCardList, +} from '../layout'; +import { RouterButton } from '../components'; + +const Wrapper = styled.div` + display: flex; + flex-direction: column; + padding: 0.2rem 2rem 0; + width: 100%; +`; + +const TagLine = styled.p` + margin: 0.625rem 0 2.5rem; +`; + +const ProjectsGrid = styled.div` + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 16px; + margin: 24px 0; + + @media (max-width: 600px) { + grid-template-columns: 1fr; + } +`; + +const ExploreButton = styled(RouterButton).attrs({ + variant: 'outlined', + color: 'default', + to: DEFAULT_URL, +})` + margin-bottom: 16px; + width: 250px; + height: 50px; + border-radius: 3px; + font-size: 13px; + + svg { + margin-right: 10px; + } +`; + +const Logo = styled.img` + width: 200px; + height: 85px; +`; + +/** + * This is the projects view that is shown when the projects modal is open + */ +export const Projects = () => { + const { + data: { projects }, + } = useProjects(); + const { isLoggedIn } = useUser(); + return ( + +
+ + + Data aggregation, analysis, and visualisation for the most remote settings in the world + +
+
+ + I just want to explore + + + ( + + ), + [PROJECT_ACCESS_TYPES.PENDING]: () => , + [PROJECT_ACCESS_TYPES.DENIED]: ({ project: { code } }) => { + const LINK = { + TEXT: 'Log in', + URL: USER_ROUTES.LOGIN, + }; + if (isLoggedIn) { + LINK.TEXT = 'Request Access'; + LINK.URL = `/${USER_ROUTES.REQUEST_ACCESS}/${code}`; + } + return ( + {LINK.TEXT} + ); + }, + }} + /> + +
+
+ ); +}; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index 28854bd922..00c983a539 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -6,6 +6,7 @@ export { LandingPage } from './LandingPage'; export { Login } from './Login'; export { PasswordResetForm } from './PasswordResetForm'; export { Project } from './Project'; +export { Projects } from './Projects'; export { RegisterForm } from './RegisterForm'; export { RequestAccessForm } from './RequestAccessForm'; export { VerifyEmailForm } from './VerifyEmailForm'; diff --git a/packages/tupaia-web/src/theme/theme.ts b/packages/tupaia-web/src/theme/theme.ts index 542d972481..cddae63c2b 100644 --- a/packages/tupaia-web/src/theme/theme.ts +++ b/packages/tupaia-web/src/theme/theme.ts @@ -21,6 +21,7 @@ export const theme = createMuiTheme( { projectCard: { background: '#2e2f33', + fallBack: '#EFEFF0', }, shape: { borderRadius: 3, diff --git a/packages/web-config-server/src/apiV1/projects.js b/packages/web-config-server/src/apiV1/projects.js index 9a0b9e1285..fc63617ea2 100644 --- a/packages/web-config-server/src/apiV1/projects.js +++ b/packages/web-config-server/src/apiV1/projects.js @@ -65,7 +65,7 @@ export async function buildProjectDataForFrontend(project, req) { const hasAccess = entitiesWithAccess.length > 0; const homeEntity = getHomeEntity(project, entitiesWithAccess, entities); - const defaultDashboard = await fetchDefaultDashboardCode( + const defaultDashboardCode = await fetchDefaultDashboardCode( dashboardGroupName, entityHierachyId, homeEntity, @@ -93,7 +93,7 @@ export async function buildProjectDataForFrontend(project, req) { dashboardGroupName, defaultMeasure, config, - defaultDashboard, + defaultDashboardCode, }; } From a78a4e2ef88b92c14bfd06987eaa166a96278dd3 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Mon, 12 Jun 2023 16:44:30 +1200 Subject: [PATCH 133/251] email verification --- packages/tupaia-web/src/Routes.tsx | 1 + .../src/api/mutations/useRegister.ts | 3 - ...{VerifyEmail.tsx => EmailVerification.tsx} | 2 +- packages/tupaia-web/src/pages/LoginModal.tsx | 6 +- .../pages/ReSendEmailVerificationModal.tsx | 55 +++++++++++++++++++ .../pages/{ => Register}/RegisterModal.tsx | 26 +++++---- .../src/pages/Register/SignUpComplete.tsx | 54 ++++++++++++++++++ .../tupaia-web/src/pages/Register/index.ts | 6 ++ packages/tupaia-web/src/pages/index.ts | 2 +- 9 files changed, 136 insertions(+), 19 deletions(-) rename packages/tupaia-web/src/pages/{VerifyEmail.tsx => EmailVerification.tsx} (94%) create mode 100644 packages/tupaia-web/src/pages/ReSendEmailVerificationModal.tsx rename packages/tupaia-web/src/pages/{ => Register}/RegisterModal.tsx (87%) create mode 100644 packages/tupaia-web/src/pages/Register/SignUpComplete.tsx create mode 100644 packages/tupaia-web/src/pages/Register/index.ts diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index f39a4a75f1..dd3d2544d0 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -45,6 +45,7 @@ export const Routes = () => { path={`${USER_ROUTES.REQUEST_ACCESS}/:projectCode`} element={} /> + {/* Email verification links redirect to the login page where the verification happens */} } diff --git a/packages/tupaia-web/src/api/mutations/useRegister.ts b/packages/tupaia-web/src/api/mutations/useRegister.ts index 36385bc3c0..a54461c095 100644 --- a/packages/tupaia-web/src/api/mutations/useRegister.ts +++ b/packages/tupaia-web/src/api/mutations/useRegister.ts @@ -5,7 +5,6 @@ import { useMutation, useQueryClient } from 'react-query'; import { post } from '../api'; -import { useNavigateBack } from '../../utils/useNavigateBack'; // Todo: replace with request body type from backend type RegisterUserBody = { @@ -20,7 +19,6 @@ type RegisterUserBody = { }; export const useRegister = () => { const queryClient = useQueryClient(); - const navigateBack = useNavigateBack(); return useMutation( (data: RegisterUserBody) => { @@ -29,7 +27,6 @@ export const useRegister = () => { { onSuccess: () => { queryClient.invalidateQueries(); - navigateBack(); }, }, ); diff --git a/packages/tupaia-web/src/pages/VerifyEmail.tsx b/packages/tupaia-web/src/pages/EmailVerification.tsx similarity index 94% rename from packages/tupaia-web/src/pages/VerifyEmail.tsx rename to packages/tupaia-web/src/pages/EmailVerification.tsx index 6f2d19224f..c3a6bd5305 100644 --- a/packages/tupaia-web/src/pages/VerifyEmail.tsx +++ b/packages/tupaia-web/src/pages/EmailVerification.tsx @@ -15,7 +15,7 @@ const Error = styled(Typography)` color: ${({ theme }) => theme.palette.error.main}; `; -export const VerifyEmail = () => { +export const EmailVerification = () => { const { isSuccess, isError } = useEmailVerification(); return ( diff --git a/packages/tupaia-web/src/pages/LoginModal.tsx b/packages/tupaia-web/src/pages/LoginModal.tsx index 60b8188569..e122efe63e 100644 --- a/packages/tupaia-web/src/pages/LoginModal.tsx +++ b/packages/tupaia-web/src/pages/LoginModal.tsx @@ -12,7 +12,7 @@ import { TextField } from '../components'; import { AuthModal, ModalButton } from '../layout'; import { FORM_FIELD_VALIDATION } from '../constants'; import { USER_ROUTES } from '../Routes.tsx'; -import { VerifyEmail } from './VerifyEmail'; +import { EmailVerification } from './EmailVerification.tsx'; const StyledForm = styled.form` margin-top: 1rem; @@ -45,11 +45,9 @@ export const LoginModal = () => { const { handleSubmit, register, errors } = useForm(); const { mutate: login, isLoading, isError, error } = useLogin(); - console.log(errors); - return ( - {isError ? {error.message} : } + {isError ? {error.message} : } )} noValidate> { + const titleText = 'Sign in to Tupaia'; + + + {hasSentEmail ? ( + + Please check your email for further instructions on how to verify your account. + + ) : ( + +
+
onResendEmail(email)} + render={submitForm => ( + <> + + + Re-send Email + + + )} + /> +
+
} +
+ ); +}; diff --git a/packages/tupaia-web/src/pages/RegisterModal.tsx b/packages/tupaia-web/src/pages/Register/RegisterModal.tsx similarity index 87% rename from packages/tupaia-web/src/pages/RegisterModal.tsx rename to packages/tupaia-web/src/pages/Register/RegisterModal.tsx index 9dfff1c50e..e2e6f45682 100644 --- a/packages/tupaia-web/src/pages/RegisterModal.tsx +++ b/packages/tupaia-web/src/pages/Register/RegisterModal.tsx @@ -3,16 +3,18 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { Checkbox } from '@tupaia/ui-components'; -import { Link } from 'react-router-dom'; -import { SubmitHandler, useForm } from 'react-hook-form'; import styled from 'styled-components'; +import { useForm } from 'react-hook-form'; import Typography from '@material-ui/core/Typography'; -import { useRegister } from '../api/mutations'; -import { TextField } from '../components'; -import { FORM_FIELD_VALIDATION } from '../constants'; -import { AuthModal, ModalButton } from '../layout'; -import { USER_ROUTES } from '../Routes.tsx'; +import { useRegister } from '../../api/mutations'; +import { AuthModal, ModalButton } from '../../layout'; +import { SignupComplete } from './SignUpComplete'; +import { SubmitHandler } from 'react-hook-form'; +import { TextField } from '../../components'; +import { FORM_FIELD_VALIDATION } from '../../constants'; +import { Checkbox } from '@tupaia/ui-components'; +import { Link } from 'react-router-dom'; +import { USER_ROUTES } from '../../Routes.tsx'; const StyledAuthModal = styled(AuthModal)` .MuiDialog-paper { @@ -53,8 +55,12 @@ const FullWidthColumn = styled.div` `; export const RegisterModal = () => { - const { handleSubmit, register, errors, getValues } = useForm(); - const { mutate: onSubmit, isLoading, isError, error } = useRegister(); + const { mutate: onSubmit, isLoading, isSuccess, isError, error } = useRegister(); + const { errors, handleSubmit, getValues, register } = useForm(); + + if (isSuccess) { + return ; + } return ( diff --git a/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx new file mode 100644 index 0000000000..3effc61901 --- /dev/null +++ b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx @@ -0,0 +1,54 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import { RouterButton } from '../../components/RouterButton'; +import styled from 'styled-components'; +import { USER_ROUTES } from '../../Routes.tsx'; + +const FormLink = styled.a` + color: white; + font-weight: 500; +`; + +const Container = styled.div` + margin: 18px; + display: flex; + flex-direction: column; + align-items: center; + + button { + margin-top: 20px; + width: 50%; + } +`; + +export const SignupComplete = () => { + return ( + +
+ Congratulations, you have successfully signed up to Tupaia. To activate your account please{' '} + click the verification link in your email. Once activated, you can use your new + account to log in to tupaia.org as well as our app, Tupaia Meditrak on{' '} + +  iOS + +  and + +  Android . + +
+ Re-send verification email +
+ ); +}; diff --git a/packages/tupaia-web/src/pages/Register/index.ts b/packages/tupaia-web/src/pages/Register/index.ts new file mode 100644 index 0000000000..e7c7c680c2 --- /dev/null +++ b/packages/tupaia-web/src/pages/Register/index.ts @@ -0,0 +1,6 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +export { RegisterModal } from './RegisterModal'; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index 7d733e2a3f..0954ed1b4b 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -8,4 +8,4 @@ export { PasswordResetForm } from './PasswordResetForm'; export { Project } from './Project'; export { RegisterModal } from './RegisterModal'; export { RequestAccessForm } from './RequestAccessForm'; -export { VerifyEmail } from './VerifyEmail.tsx'; +export { EmailVerification } from './EmailVerification.tsx'; From c3824c084d1a7c820e2d69f6b18b8dccb382ae7c Mon Sep 17 00:00:00 2001 From: Ethan McQuarrie <69437175+EMcQ-BES@users.noreply.github.com> Date: Mon, 12 Jun 2023 16:50:48 +1200 Subject: [PATCH 134/251] WAITP-1253 Tupaia web server cleanup (#4629) * WAITP-1253 Remove trailing whitespace from line * WAITP-1253 Move SessionSwitchingAuthHandler to server-boilerplate Allow it to run prior to session being attached to request * WAITP-1253 Allow passing AuthHandlers into useForwardUnhandledRequests * WAITP-1253 Use the entity code in dashboard route --- .../src/auth/SessionSwitchingAuthHandler.ts | 31 ------------ packages/api-client/src/auth/index.ts | 1 - packages/api-client/src/types.ts | 5 -- packages/server-boilerplate/src/index.ts | 1 + .../auth/SessionSwitchingAuthHandler.ts | 47 +++++++++++++++++++ .../src/orchestrator/auth/index.ts | 1 + .../src/orchestrator/index.ts | 1 + .../src/utils/useForwardUnhandledRequests.ts | 20 ++++++-- .../tupaia-web-server/src/app/createApp.ts | 9 ++-- .../src/routes/DashboardsRoute.ts | 4 +- 10 files changed, 73 insertions(+), 47 deletions(-) delete mode 100644 packages/api-client/src/auth/SessionSwitchingAuthHandler.ts create mode 100644 packages/server-boilerplate/src/orchestrator/auth/SessionSwitchingAuthHandler.ts diff --git a/packages/api-client/src/auth/SessionSwitchingAuthHandler.ts b/packages/api-client/src/auth/SessionSwitchingAuthHandler.ts deleted file mode 100644 index 68c84f306f..0000000000 --- a/packages/api-client/src/auth/SessionSwitchingAuthHandler.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import { createBasicHeader, getEnvVarOrDefault } from '@tupaia/utils'; -import { AuthHandler, SessionType } from '../types'; - -// Handles switching between microservice client and user login sessions -export class SessionSwitchingAuthHandler implements AuthHandler { - session?: SessionType; - - constructor(session?: SessionType) { - this.session = session; - } - - get hasSession() { - return !!this.session; - } - - async getAuthHeader() { - if (this.session) { - return this.session.getAuthHeader(); - } - - return createBasicHeader( - getEnvVarOrDefault('API_CLIENT_NAME', ''), - getEnvVarOrDefault('API_CLIENT_PASSWORD', ''), - ); - } -} diff --git a/packages/api-client/src/auth/index.ts b/packages/api-client/src/auth/index.ts index 50c290a25c..29fdcc81a8 100644 --- a/packages/api-client/src/auth/index.ts +++ b/packages/api-client/src/auth/index.ts @@ -5,5 +5,4 @@ export * from './BasicAuthHandler'; export * from './ForwardingAuthHandler'; -export * from './SessionSwitchingAuthHandler'; export * from './TokenAuthHandler'; diff --git a/packages/api-client/src/types.ts b/packages/api-client/src/types.ts index c4d497a9ab..12aae1d55c 100644 --- a/packages/api-client/src/types.ts +++ b/packages/api-client/src/types.ts @@ -12,8 +12,3 @@ export type QueryParameters = Record; export interface AuthHandler { getAuthHeader: () => Promise; } - -// Minimum definition for use in SessionSwitchingAuthHandler -export interface SessionType { - getAuthHeader: () => Promise; -} diff --git a/packages/server-boilerplate/src/index.ts b/packages/server-boilerplate/src/index.ts index 1d31be3c71..38443e4127 100644 --- a/packages/server-boilerplate/src/index.ts +++ b/packages/server-boilerplate/src/index.ts @@ -16,6 +16,7 @@ export { SessionModel, SessionType, SessionCookie, + SessionSwitchingAuthHandler, attachSession, attachSessionIfAvailable, } from './orchestrator'; diff --git a/packages/server-boilerplate/src/orchestrator/auth/SessionSwitchingAuthHandler.ts b/packages/server-boilerplate/src/orchestrator/auth/SessionSwitchingAuthHandler.ts new file mode 100644 index 0000000000..069a2d01be --- /dev/null +++ b/packages/server-boilerplate/src/orchestrator/auth/SessionSwitchingAuthHandler.ts @@ -0,0 +1,47 @@ +/** + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import { Request } from 'express'; +import { createBasicHeader, getEnvVarOrDefault } from '@tupaia/utils'; +import { AuthHandler } from '@tupaia/api-client'; +import { SessionType } from '../models'; + +// Handles switching between microservice client and user login sessions +export class SessionSwitchingAuthHandler implements AuthHandler { + req: Request; + session?: SessionType; + + // AuthHandlers are run before the session is attached to the request + // So we unfortunately need to fetch it separately here + constructor(req: Request) { + // Save out the request so we can use the attached models later + this.req = req; + } + + private async getSession() { + // We let this resolve undefined if there's no current session + if (!this.session) { + const sessionId = this.req.sessionCookie?.id; + if (sessionId) { + this.session = await this.req.sessionModel.findById(sessionId); + } + } + + return this.session; + } + + async getAuthHeader() { + await this.getSession(); + + if (this.session) { + return this.session.getAuthHeader(); + } + + return createBasicHeader( + getEnvVarOrDefault('API_CLIENT_NAME', ''), + getEnvVarOrDefault('API_CLIENT_PASSWORD', ''), + ); + } +} diff --git a/packages/server-boilerplate/src/orchestrator/auth/index.ts b/packages/server-boilerplate/src/orchestrator/auth/index.ts index 1b5cd98cb8..14eefc0494 100644 --- a/packages/server-boilerplate/src/orchestrator/auth/index.ts +++ b/packages/server-boilerplate/src/orchestrator/auth/index.ts @@ -4,3 +4,4 @@ */ export { AuthConnection, AuthResponse } from './AuthConnection'; +export { SessionSwitchingAuthHandler } from './SessionSwitchingAuthHandler'; diff --git a/packages/server-boilerplate/src/orchestrator/index.ts b/packages/server-boilerplate/src/orchestrator/index.ts index 73158d7656..ad2874f786 100644 --- a/packages/server-boilerplate/src/orchestrator/index.ts +++ b/packages/server-boilerplate/src/orchestrator/index.ts @@ -7,3 +7,4 @@ export { ApiBuilder } from './api'; export { SessionModel, SessionType } from './models'; export { SessionCookie } from './types'; export { attachSession, attachSessionIfAvailable } from './session'; +export { SessionSwitchingAuthHandler } from './auth'; diff --git a/packages/server-boilerplate/src/utils/useForwardUnhandledRequests.ts b/packages/server-boilerplate/src/utils/useForwardUnhandledRequests.ts index 26c3abef48..3488147e0f 100644 --- a/packages/server-boilerplate/src/utils/useForwardUnhandledRequests.ts +++ b/packages/server-boilerplate/src/utils/useForwardUnhandledRequests.ts @@ -8,17 +8,26 @@ import { createProxyMiddleware, fixRequestBody } from 'http-proxy-middleware'; import { UnauthenticatedError } from '@tupaia/utils'; import { handleError } from './handleError'; import { attachSession as defaultAttachSession } from '../orchestrator'; +import { AuthHandler } from '@tupaia/api-client'; -const attachAuthorizationHeader = async (req: Request, res: Response, next: NextFunction) => { +type AuthHandlerProvider = (req: Request) => AuthHandler; + +// Create a middleware function using the given authHandler +const attachAuthorizationHeader = (authHandlerProvider: AuthHandlerProvider) => async (req: Request, res: Response, next: NextFunction) => { + const authHandler = authHandlerProvider(req); + req.headers.authorization = await authHandler.getAuthHeader(); + next(); +}; + +const defaultAuthHandlerProvider = (req: Request) => { const { session } = req; if (!session) { throw new UnauthenticatedError('Session is not attached'); } - req.headers.authorization = await session.getAuthHeader(); - - next(); + // Session already has a getAuthHeader function so can act as an AuthHandler + return session; }; type Middleware = (req: Request, res: Response, next: NextFunction) => void; @@ -28,6 +37,7 @@ export const useForwardUnhandledRequests = ( target: string, prefix?: string, attachSession: Middleware = defaultAttachSession, + authHandlerProvider: AuthHandlerProvider = defaultAuthHandlerProvider, ) => { const options = { target, @@ -55,5 +65,5 @@ export const useForwardUnhandledRequests = ( }; // Forward any unhandled request to central-server - app.use(attachSession, attachAuthorizationHeader, createProxyMiddleware(options), handleError); + app.use(attachSession, attachAuthorizationHeader(authHandlerProvider), createProxyMiddleware(options), handleError); }; diff --git a/packages/tupaia-web-server/src/app/createApp.ts b/packages/tupaia-web-server/src/app/createApp.ts index 1efdeec6f5..dc34fec11e 100644 --- a/packages/tupaia-web-server/src/app/createApp.ts +++ b/packages/tupaia-web-server/src/app/createApp.ts @@ -3,14 +3,15 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ +import { Request } from 'express'; import { TupaiaDatabase } from '@tupaia/database'; import { OrchestratorApiBuilder, handleWith, useForwardUnhandledRequests, attachSessionIfAvailable, + SessionSwitchingAuthHandler, } from '@tupaia/server-boilerplate'; -import { SessionSwitchingAuthHandler } from '@tupaia/api-client'; import { TupaiaWebSessionModel } from '../models'; import { DashboardsRoute, @@ -26,11 +27,13 @@ import { const { WEB_CONFIG_API_URL = 'http://localhost:8000/api/v1' } = process.env; +const authHandlerProvider = (req: Request) => new SessionSwitchingAuthHandler(req); + export function createApp() { const app = new OrchestratorApiBuilder(new TupaiaDatabase(), 'tupaia-web') .useSessionModel(TupaiaWebSessionModel) .useAttachSession(attachSessionIfAvailable) - .attachApiClientToContext(req => new SessionSwitchingAuthHandler(req.session)) + .attachApiClientToContext(authHandlerProvider) .get('report/:reportCode', handleWith(ReportRoute)) .get('getUser', handleWith(UserRoute)) .get('dashboards', handleWith(DashboardsRoute)) @@ -38,7 +41,7 @@ export function createApp() { .get('logout', handleWith(TempLogoutRoute)) .build(); - useForwardUnhandledRequests(app, WEB_CONFIG_API_URL); + useForwardUnhandledRequests(app, WEB_CONFIG_API_URL, '', attachSessionIfAvailable, authHandlerProvider); return app; } diff --git a/packages/tupaia-web-server/src/routes/DashboardsRoute.ts b/packages/tupaia-web-server/src/routes/DashboardsRoute.ts index 02a12c2ac5..d98c19fac5 100644 --- a/packages/tupaia-web-server/src/routes/DashboardsRoute.ts +++ b/packages/tupaia-web-server/src/routes/DashboardsRoute.ts @@ -18,10 +18,10 @@ export class DashboardsRoute extends Route { const { query, ctx } = this.req; const { organisationUnitCode, projectCode } = query; - const project = (await ctx.services.central.fetchResources('projects', { filter: { code: projectCode }, columns: JSON.stringify(['entity_id', 'entity_hierarchy.name']) }))[0]; + const project = (await ctx.services.central.fetchResources('projects', { filter: { code: projectCode }, columns: JSON.stringify(['entity.code', 'entity_hierarchy.name']) }))[0]; const baseEntity = await ctx.services.entity.getEntity(project['entity_hierarchy.name'], organisationUnitCode); // TODO: Add a better getAncestors function to the EntityApi - const entities = await ctx.services.entity.getRelationshipsOfEntity(project['entity_hierarchy.name'], project.entity_id, 'descendant', {}, {} , { filter: { type: baseEntity.type } }); + const entities = await ctx.services.entity.getRelationshipsOfEntity(project['entity_hierarchy.name'], project['entity.code'], 'descendant', {}, {} , { filter: { type: baseEntity.type } }); const dashboards = await ctx.services.central.fetchResources('dashboards', { filter: { root_entity_code: entities.ancestors }}); return Promise.all(dashboards.map(async (dash: any) => ({ ...dash, From c0bcfdf154776a3c903e346e1cd0e5d8acabd268 Mon Sep 17 00:00:00 2001 From: Ethan McQuarrie Date: Tue, 13 Jun 2023 09:38:18 +1200 Subject: [PATCH 135/251] Remove unused include --- packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx index 66eb161425..3f075a0bfc 100644 --- a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx +++ b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx @@ -2,7 +2,7 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import React, { ComponentType, ReactNode } from 'react'; +import React, { ComponentType } from 'react'; import styled from 'styled-components'; import Lock from '@material-ui/icons/Lock'; import Alarm from '@material-ui/icons/Alarm'; From d7570b44b03133b38a14d9ba9fc682e226bc9f42 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 13 Jun 2023 10:05:37 +1200 Subject: [PATCH 136/251] verify resend --- packages/tupaia-web/src/Routes.tsx | 3 + .../pages/ReSendEmailVerificationModal.tsx | 55 ----- .../src/pages/Register/RegisterModal.tsx | 210 +++++++++--------- .../src/pages/Register/SignUpComplete.tsx | 27 ++- .../src/pages/VerifyEmailResend.tsx | 65 ++++++ packages/tupaia-web/src/pages/index.ts | 2 +- 6 files changed, 192 insertions(+), 170 deletions(-) delete mode 100644 packages/tupaia-web/src/pages/ReSendEmailVerificationModal.tsx create mode 100644 packages/tupaia-web/src/pages/VerifyEmailResend.tsx diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index 77068d209c..5e3f3ec183 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -15,6 +15,7 @@ import { import { DEFAULT_URL } from './constants'; import { Layout } from './layout'; import { ModalRoute } from './pages/ModalRoute'; +import { VerifyEmailResend } from './pages/VerifyEmailResend.tsx'; export const USER_ROUTES = { LOGIN: '/login', @@ -22,6 +23,7 @@ export const USER_ROUTES = { RESET_PASSWORD: '/reset-password', REQUEST_ACCESS: '/request-access', VERIFY_EMAIL: '/verify-email', + VERIFY_EMAIL_RESEND: '/verify-email-resend', }; /** @@ -66,6 +68,7 @@ export const Routes = () => { }> } /> } /> + } /> )} diff --git a/packages/tupaia-web/src/pages/ReSendEmailVerificationModal.tsx b/packages/tupaia-web/src/pages/ReSendEmailVerificationModal.tsx deleted file mode 100644 index cbfd895e60..0000000000 --- a/packages/tupaia-web/src/pages/ReSendEmailVerificationModal.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { TextField } from '../../components'; - -const CheckEmailMessage = styled.p` - text-align: center; - padding: 0 15px; -`; - -export const VerifyEmailForm = ({ - onResendEmail, - hasSentEmail, - messageFailEmailVerify, - currentUserEmail, -}) => { - const titleText = 'Sign in to Tupaia'; - - - {hasSentEmail ? ( - - Please check your email for further instructions on how to verify your account. - - ) : ( - -
- onResendEmail(email)} - render={submitForm => ( - <> - - - Re-send Email - - - )} - /> -
-
} -
- ); -}; diff --git a/packages/tupaia-web/src/pages/Register/RegisterModal.tsx b/packages/tupaia-web/src/pages/Register/RegisterModal.tsx index e2e6f45682..d37ba01c1b 100644 --- a/packages/tupaia-web/src/pages/Register/RegisterModal.tsx +++ b/packages/tupaia-web/src/pages/Register/RegisterModal.tsx @@ -58,109 +58,115 @@ export const RegisterModal = () => { const { mutate: onSubmit, isLoading, isSuccess, isError, error } = useRegister(); const { errors, handleSubmit, getValues, register } = useForm(); - if (isSuccess) { - return ; - } - return ( - - {isError && {error.message}} - )} noValidate> - - - - - - value === getValues('password') || 'Passwords do not match.', - ...FORM_FIELD_VALIDATION.PASSWORD, - })} - /> - - - - - - Register account - - - Already have an account? Log in here - - - + + {isSuccess ? ( + + ) : ( + <> + {isError && {error.message}} + )} noValidate> + + + + + + value === getValues('password') || 'Passwords do not match.', + ...FORM_FIELD_VALIDATION.PASSWORD, + })} + /> + + + + + + Register account + + + Already have an account? Log in here + + + + + )} ); }; diff --git a/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx index 3effc61901..91225048ed 100644 --- a/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx +++ b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx @@ -4,31 +4,34 @@ */ import React from 'react'; -import { RouterButton } from '../../components/RouterButton'; +import { RouterButton } from '../../components'; +import { Typography } from '@material-ui/core'; import styled from 'styled-components'; -import { USER_ROUTES } from '../../Routes.tsx'; - -const FormLink = styled.a` - color: white; - font-weight: 500; -`; +import { USER_ROUTES } from '../../Routes'; const Container = styled.div` - margin: 18px; + margin: 1rem; display: flex; flex-direction: column; align-items: center; + max-width: 100%; + width: 36rem; - button { - margin-top: 20px; + a { + margin-top: 2rem; width: 50%; } `; +const FormLink = styled.a` + color: white; + font-weight: 500; +`; + export const SignupComplete = () => { return ( -
+ Congratulations, you have successfully signed up to Tupaia. To activate your account please{' '} click the verification link in your email. Once activated, you can use your new account to log in to tupaia.org as well as our app, Tupaia Meditrak on{' '} @@ -47,7 +50,7 @@ export const SignupComplete = () => { >  Android . -
+ Re-send verification email
); diff --git a/packages/tupaia-web/src/pages/VerifyEmailResend.tsx b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx new file mode 100644 index 0000000000..33bcb168e1 --- /dev/null +++ b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx @@ -0,0 +1,65 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import styled from 'styled-components'; +import { TextField } from '../components'; +import { AuthModal, ModalButton } from '../layout'; +import { FORM_FIELD_VALIDATION } from '../constants'; +import { useForm } from 'react-hook-form'; +import { useLogin } from '../api/mutations'; + +const StyledAuthModal = styled(AuthModal)` + .MuiDialog-paper { + width: 53rem; + } +`; +const CheckEmailMessage = styled.p` + text-align: center; + padding: 0 15px; +`; + +const StyledForm = styled.form` + margin-top: 1rem; + width: 42rem; + max-width: 100%; + + @media (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { + display: grid; + grid-template-columns: 1fr 1fr; + column-gap: 2rem; + row-gap: 0; + } +`; + +export const VerifyEmailResend = () => { + const { handleSubmit, register, errors } = useForm(); + const { mutate: login, isSuccess, isLoading, isError, error } = useLogin(); + + return ( + + {isSuccess ? ( + + Please check your email for further instructions on how to verify your account. + + ) : ( + + + Submit + + )} + + ); +}; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index 249640c372..8e7cdfae34 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -6,7 +6,7 @@ export { LandingPage } from './LandingPage'; export { LoginModal } from './LoginModal'; export { PasswordResetForm } from './PasswordResetForm'; export { Project } from './Project'; -export { RegisterModal } from './RegisterModal'; +export { RegisterModal } from './Register'; export { Projects } from './Projects'; export { RequestAccessForm } from './RequestAccessForm'; export { EmailVerification } from './EmailVerification.tsx'; From 75299be6e18bd733b8fd5db7496313d45f1da50f Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 13 Jun 2023 11:42:13 +1200 Subject: [PATCH 137/251] refactor to use modals --- packages/tupaia-web/src/Routes.tsx | 47 +++---------------- .../tupaia-web/src/api/mutations/useLogin.ts | 3 -- .../src/{layout => components}/AuthModal.tsx | 44 ++++++++--------- packages/tupaia-web/src/components/Modal.tsx | 18 ++++--- packages/tupaia-web/src/components/index.ts | 1 + .../tupaia-web/src/constants/constants.ts | 7 ++- .../layout/ProjectCardList/ProjectCard.tsx | 8 ++-- .../src/layout/UserMenu/DrawerMenu.tsx | 6 +-- .../src/layout/UserMenu/UserInfo.tsx | 6 +-- .../src/layout/UserMenu/UserMenu.tsx | 7 +-- packages/tupaia-web/src/layout/index.ts | 1 - .../LandingPage/MultiProjectLandingPage.tsx | 3 +- .../LandingPage/SingleProjectLandingPage.tsx | 5 +- packages/tupaia-web/src/pages/LoginModal.tsx | 22 +++++---- packages/tupaia-web/src/pages/ModalRoute.tsx | 18 ++++--- .../src/pages/PasswordResetForm.tsx | 4 +- packages/tupaia-web/src/pages/Projects.tsx | 12 +++-- .../src/pages/Register/RegisterModal.tsx | 23 ++++----- .../src/pages/Register/SignUpComplete.tsx | 4 +- .../src/pages/RequestAccessForm.tsx | 4 +- .../src/pages/VerifyEmailResend.tsx | 11 ++--- .../tupaia-web/src/utils/useNavigateBack.ts | 21 --------- 22 files changed, 112 insertions(+), 163 deletions(-) rename packages/tupaia-web/src/{layout => components}/AuthModal.tsx (61%) delete mode 100644 packages/tupaia-web/src/utils/useNavigateBack.ts diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index 5e3f3ec183..d7c0e81a53 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -4,34 +4,16 @@ */ import React from 'react'; import { Navigate, Route, Routes as RouterRoutes, useLocation } from 'react-router-dom'; -import { - LandingPage, - LoginModal, - PasswordResetForm, - Project, - RegisterModal, - RequestAccessForm, -} from './pages'; -import { DEFAULT_URL } from './constants'; +import { LandingPage, Project } from './pages'; +import { USER_ROUTES, DEFAULT_URL } from './constants'; import { Layout } from './layout'; import { ModalRoute } from './pages/ModalRoute'; -import { VerifyEmailResend } from './pages/VerifyEmailResend.tsx'; - -export const USER_ROUTES = { - LOGIN: '/login', - REGISTER: '/register', - RESET_PASSWORD: '/reset-password', - REQUEST_ACCESS: '/request-access', - VERIFY_EMAIL: '/verify-email', - VERIFY_EMAIL_RESEND: '/verify-email-resend', -}; /** * This Router is using [version 6.3]{@link https://reactrouter.com/en/v6.3.0}, as later versions are not supported by our TS setup. See [this issue here]{@link https://github.com/remix-run/react-router/discussions/8364} * This means the newer 'createBrowserRouter' and 'RouterProvider' can't be used here. * * **/ - export const Routes = () => { let location = useLocation(); const state = location.state as { backgroundLocation?: Location }; @@ -43,35 +25,18 @@ export const Routes = () => { {/* This is the layout for the entire app, so needs to be wrapped around the rest of the routes so that we can access params in top bar etc */} }> } /> - } /> - } /> - } - /> {/* Email verification links redirect to the login page where the verification happens */} } + path="/verify-email" + element={ + + } /> - } /> } /> {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} } /> - - {/* The `backgroundLocation` state is the location that we were at when the modal links was clicked. If it's there, use it as the location for - the and we show the main page in the background, behind the modal. See react router docs [here]{@Link https://github.com/remix-run/react-router/tree/dev/examples/modal} */} - {state?.backgroundLocation && ( - - }> - } /> - } /> - } /> - - - )} ); }; diff --git a/packages/tupaia-web/src/api/mutations/useLogin.ts b/packages/tupaia-web/src/api/mutations/useLogin.ts index 6937f397d2..772f5923fd 100644 --- a/packages/tupaia-web/src/api/mutations/useLogin.ts +++ b/packages/tupaia-web/src/api/mutations/useLogin.ts @@ -5,7 +5,6 @@ import { useMutation, useQueryClient } from 'react-query'; import { post } from '../api'; -import { useNavigateBack } from '../../utils/useNavigateBack'; type LoginCredentials = { email: string; @@ -13,7 +12,6 @@ type LoginCredentials = { }; export const useLogin = () => { const queryClient = useQueryClient(); - const navigateBack = useNavigateBack(); return useMutation( ({ email, password }: LoginCredentials) => { @@ -28,7 +26,6 @@ export const useLogin = () => { { onSuccess: () => { queryClient.invalidateQueries(); - navigateBack(); }, }, ); diff --git a/packages/tupaia-web/src/layout/AuthModal.tsx b/packages/tupaia-web/src/components/AuthModal.tsx similarity index 61% rename from packages/tupaia-web/src/layout/AuthModal.tsx rename to packages/tupaia-web/src/components/AuthModal.tsx index cea9e48894..4efe7b6c31 100644 --- a/packages/tupaia-web/src/layout/AuthModal.tsx +++ b/packages/tupaia-web/src/components/AuthModal.tsx @@ -1,15 +1,20 @@ -/** +/* * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React, { ReactNode } from 'react'; -import { Modal } from '../components'; import styled from 'styled-components'; -import { TUPAIA_LIGHT_LOGO_SRC } from '../constants'; import { Typography } from '@material-ui/core'; import { Button, OutlinedButton } from '@tupaia/ui-components'; -import { useNavigateBack } from '../utils/useNavigateBack'; +import { TUPAIA_LIGHT_LOGO_SRC } from '../constants'; + +const Wrapper = styled.div` + display: flex; + flex-direction: column; + align-items: center; + max-width: 100%; +`; const Logo = styled.img` min-width: 110px; @@ -27,13 +32,7 @@ const Subtitle = styled(Typography)` margin-top: 1rem; `; -const Wrapper = styled.div` - display: flex; - flex-direction: column; - align-items: center; -`; - -export const ModalButton = styled(Button)` +export const AuthModalButton = styled(Button)` text-transform: none; font-size: 1rem; width: 22rem; @@ -42,7 +41,7 @@ export const ModalButton = styled(Button)` margin-top: 2rem; `; -export const ModalCancelButton = styled(OutlinedButton).attrs({ +export const AuthModalCancelButton = styled(OutlinedButton).attrs({ color: 'default', })` text-transform: none; @@ -52,7 +51,7 @@ export const ModalCancelButton = styled(OutlinedButton).attrs({ margin-left: 0 !important; padding: 0.375rem 1rem; // to match the height of the primary button border-color: ${({ theme }) => theme.palette.text.secondary}; - ${ModalButton} + & { + ${AuthModalButton} + & { margin-top: 1.3rem; } `; @@ -64,16 +63,13 @@ interface AuthModalProps { className?: string; } -export const AuthModal = ({ children, title, subtitle, className }: AuthModalProps) => { - const navigateBack = useNavigateBack(); +export const AuthModalBody = ({ children, title, subtitle, className }: AuthModalProps) => { return ( - - - - {title} - {subtitle && {subtitle}} - {children} - - + + + {title} + {subtitle && {subtitle}} + {children} + ); }; diff --git a/packages/tupaia-web/src/components/Modal.tsx b/packages/tupaia-web/src/components/Modal.tsx index b90234dee1..f89edbd538 100644 --- a/packages/tupaia-web/src/components/Modal.tsx +++ b/packages/tupaia-web/src/components/Modal.tsx @@ -23,15 +23,7 @@ const Wrapper = styled.div` text-align: center; overflow-x: hidden; padding: 2rem 2rem 4rem; - width: 100%; - &.project { - max-width: 920px; - } - &.login { - @media (min-width: ${({ theme }) => theme.breakpoints.values.md}px) { - width: 42rem; - } - } + max-width: 100%; `; const CloseIcon = styled(MuiCloseIcon)` @@ -64,7 +56,13 @@ export const Modal = ({ children, isOpen, onClose, className }: ModalProps) => { const theme = useTheme(); const fullScreen = useMediaQuery(theme.breakpoints.down('sm')); return ( - + diff --git a/packages/tupaia-web/src/components/index.ts b/packages/tupaia-web/src/components/index.ts index ff9ad3b98d..5cc2f5dc3a 100644 --- a/packages/tupaia-web/src/components/index.ts +++ b/packages/tupaia-web/src/components/index.ts @@ -4,5 +4,6 @@ */ export { LoadingScreen } from './LoadingScreen'; export { Modal } from './Modal'; +export { AuthModalBody, AuthModalButton, AuthModalCancelButton } from './AuthModal'; export { TextField } from './TextField'; export { RouterButton } from './RouterButton'; diff --git a/packages/tupaia-web/src/constants/constants.ts b/packages/tupaia-web/src/constants/constants.ts index 2042e14c35..146e958496 100644 --- a/packages/tupaia-web/src/constants/constants.ts +++ b/packages/tupaia-web/src/constants/constants.ts @@ -9,8 +9,13 @@ export const DEFAULT_URL = `/${DEFAULT_PROJECT_CODE}/${DEFAULT_ENTITY_CODE}`; export const TUPAIA_LIGHT_LOGO_SRC = '/images/tupaia-logo-light.svg'; -export enum MODAL_TYPES { +export enum USER_ROUTES { PROJECTS = 'projects', + LOGIN = 'login', + REGISTER = 'register', + RESET_PASSWORD = 'reset-password', + REQUEST_ACCESS = 'request-access', + VERIFY_EMAIL_RESEND = 'verify-email-resend', } export const PROJECT_ACCESS_TYPES = { PENDING: 'PENDING', diff --git a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx index 66eb161425..9f5c1bd548 100644 --- a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx +++ b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx @@ -2,14 +2,14 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import React, { ComponentType, ReactNode } from 'react'; +import React, { ComponentType } from 'react'; import styled from 'styled-components'; import Lock from '@material-ui/icons/Lock'; import Alarm from '@material-ui/icons/Alarm'; import { darken } from '@material-ui/core/styles'; import { Typography } from '@material-ui/core'; import { SingleProject } from '../../types'; -import { USER_ROUTES } from '../../Routes'; +import { USER_ROUTES } from '../../constants'; import { RouterButton } from '../../components'; const Card = styled.div` @@ -120,7 +120,9 @@ export const ProjectDeniedLink = ({ url }: LinkProps) => ( ); -export const ProjectLoginLink = () => Log in; +export const ProjectLoginLink = () => ( + Log in +); export const ProjectPendingLink = () => ( }> diff --git a/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx index 667e2952fe..86f390baa3 100644 --- a/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx @@ -9,7 +9,7 @@ import { Drawer as MuiDrawer } from '@material-ui/core'; import { IconButton } from '@tupaia/ui-components'; import CloseIcon from '@material-ui/icons/Close'; import { MenuItem, MenuList } from './MenuList'; -import { USER_ROUTES } from '../../Routes.tsx'; +import { USER_ROUTES } from '../../constants'; /** * DrawerMenu is a drawer menu used when the user is on a mobile device @@ -113,10 +113,10 @@ export const DrawerMenu = ({ {/** If the user is not logged in, show the register and login buttons */} {!isLoggedIn && ( <> - + Log in - + Register diff --git a/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx b/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx index 7643562045..fd84a98f8d 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx @@ -6,7 +6,7 @@ import React from 'react'; import styled from 'styled-components'; import { LinkProps } from 'react-router-dom'; -import { USER_ROUTES } from '../../Routes'; +import { USER_ROUTES } from '../../constants'; import { RouterButton } from '../../components'; /** @@ -81,8 +81,8 @@ export const UserInfo = ({ ); return ( - Register - + Register + Log in diff --git a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx index 38289d7af4..af2400ee24 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx @@ -12,9 +12,8 @@ import { useLandingPage, useUser } from '../../api/queries'; import { PopoverMenu } from './PopoverMenu'; import { DrawerMenu } from './DrawerMenu'; import { MenuItem } from './MenuList'; -import { USER_ROUTES } from '../../Routes'; +import { USER_ROUTES } from '../../constants'; import { UserInfo } from './UserInfo'; -import { MODAL_TYPES } from '../../constants'; const UserMenuContainer = styled.div<{ secondaryColor?: string; @@ -70,7 +69,9 @@ export const UserMenu = () => { ); const ViewProjects = ( - View projects + + View projects + ); const ChangePassword = ( diff --git a/packages/tupaia-web/src/layout/index.ts b/packages/tupaia-web/src/layout/index.ts index 0105d9bc0d..cbac274a2e 100644 --- a/packages/tupaia-web/src/layout/index.ts +++ b/packages/tupaia-web/src/layout/index.ts @@ -2,7 +2,6 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -export { AuthModal, ModalButton, ModalCancelButton } from './AuthModal'; export { Layout } from './Layout'; export { MapLayout } from './MapLayout'; export * from './ProjectCardList'; diff --git a/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx index b11c5f98af..a3092f0ea1 100644 --- a/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx +++ b/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx @@ -7,7 +7,7 @@ import styled from 'styled-components'; import { Typography } from '@material-ui/core'; import { TRANSPARENT_BLACK } from '../../constants'; import { SingleLandingPage } from '../../types'; -import { PROJECT_ACCESS_TYPES } from '../../constants'; +import { PROJECT_ACCESS_TYPES, USER_ROUTES } from '../../constants'; import { ProjectCardList, ProjectLoginLink, @@ -15,7 +15,6 @@ import { ProjectAllowedLink, ProjectPendingLink, } from '../../layout'; -import { USER_ROUTES } from '../../Routes'; const ProjectsWrapper = styled.div` width: 100%; diff --git a/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx index b1d80fadb0..0d0a3590bc 100644 --- a/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx +++ b/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx @@ -8,10 +8,9 @@ import styled from 'styled-components'; import { Typography } from '@material-ui/core'; import { Link } from 'react-router-dom'; import { Button } from '@tupaia/ui-components'; -import { PROJECT_ACCESS_TYPES } from '../../constants'; +import { PROJECT_ACCESS_TYPES, USER_ROUTES } from '../../constants'; import { getProjectAccessType } from '../../utils'; import { SingleLandingPage, SingleProject } from '../../types'; -import { USER_ROUTES } from '../../Routes'; /** * This is the template for the content of a landing page if there is only one project @@ -81,7 +80,7 @@ export function SingleProjectLandingPage({ [PROJECT_ACCESS_TYPES.ALLOWED]: `/${code}/${homeEntityCode}`, [PROJECT_ACCESS_TYPES.DENIED]: isLoggedIn ? `${USER_ROUTES.REQUEST_ACCESS}/${code}` - : USER_ROUTES.LOGIN, + : `?modal=${USER_ROUTES.LOGIN}`, }; const actionTexts = { diff --git a/packages/tupaia-web/src/pages/LoginModal.tsx b/packages/tupaia-web/src/pages/LoginModal.tsx index dd73abde8e..6561fecd77 100644 --- a/packages/tupaia-web/src/pages/LoginModal.tsx +++ b/packages/tupaia-web/src/pages/LoginModal.tsx @@ -8,12 +8,14 @@ import { SubmitHandler, useForm } from 'react-hook-form'; import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import { useLogin } from '../api/mutations'; -import { TextField } from '../components'; -import { AuthModal, ModalButton } from '../layout'; -import { FORM_FIELD_VALIDATION } from '../constants'; -import { USER_ROUTES } from '../Routes.tsx'; +import { AuthModalBody, AuthModalButton, TextField } from '../components'; +import { FORM_FIELD_VALIDATION, USER_ROUTES } from '../constants'; import { EmailVerification } from './EmailVerification.tsx'; +const Container = styled(AuthModalBody)` + width: 42rem; +`; + const StyledForm = styled.form` margin-top: 1rem; width: 340px; @@ -30,7 +32,7 @@ const LinkText = styled(Typography)` color: white; } - ${ModalButton} + & { + ${AuthModalButton} + & { margin-top: 1.3rem; } `; @@ -46,7 +48,7 @@ export const LoginModal = () => { const { mutate: login, isLoading, isError, error } = useLogin(); return ( - + {isError ? {error.message} : } )} noValidate> { Forgot password? - + Log in - + - Don't have an account? Register here + Don't have an account? Register here - + ); }; diff --git a/packages/tupaia-web/src/pages/ModalRoute.tsx b/packages/tupaia-web/src/pages/ModalRoute.tsx index 4fde46bdbc..49de7ec37b 100644 --- a/packages/tupaia-web/src/pages/ModalRoute.tsx +++ b/packages/tupaia-web/src/pages/ModalRoute.tsx @@ -5,8 +5,8 @@ import React from 'react'; import { useSearchParams } from 'react-router-dom'; -import { MODAL_TYPES } from '../constants'; -import { Projects } from '.'; +import { USER_ROUTES } from '../constants'; +import { Projects, LoginModal, RegisterModal } from '.'; import { Modal } from '../components'; /** @@ -14,14 +14,20 @@ import { Modal } from '../components'; */ const modalViews = { - [MODAL_TYPES.PROJECTS]: Projects, + [USER_ROUTES.PROJECTS]: Projects, + [USER_ROUTES.LOGIN]: LoginModal, + [USER_ROUTES.REGISTER]: RegisterModal, + [USER_ROUTES.RESET_PASSWORD]: Projects, + [USER_ROUTES.REQUEST_ACCESS]: Projects, + [USER_ROUTES.VERIFY_EMAIL_RESEND]: Projects, }; export const ModalRoute = () => { const [searchParams, setSearchParams] = useSearchParams(); - const modal = searchParams.get('modal') as typeof MODAL_TYPES[keyof typeof MODAL_TYPES]; + const modal = searchParams.get('modal') as typeof USER_ROUTES[keyof typeof USER_ROUTES]; + // If no modal param or invalid modal param, return null - if (!modal || !Object.values(MODAL_TYPES).includes(modal)) return null; + if (!modal || !Object.values(USER_ROUTES).includes(modal)) return null; const onCloseModal = () => { // remove the modal param from URLSearchParams @@ -31,7 +37,7 @@ export const ModalRoute = () => { const ModalView = modalViews[modal]; return ( - + ); diff --git a/packages/tupaia-web/src/pages/PasswordResetForm.tsx b/packages/tupaia-web/src/pages/PasswordResetForm.tsx index caf11b30a7..700035f0f5 100644 --- a/packages/tupaia-web/src/pages/PasswordResetForm.tsx +++ b/packages/tupaia-web/src/pages/PasswordResetForm.tsx @@ -3,8 +3,8 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { AuthModal } from '../layout'; +import { AuthModalBody } from '../components'; export const PasswordResetForm = () => { - return PasswordResetForm; + return PasswordResetForm; }; diff --git a/packages/tupaia-web/src/pages/Projects.tsx b/packages/tupaia-web/src/pages/Projects.tsx index aa0dc6375b..6055fc090d 100644 --- a/packages/tupaia-web/src/pages/Projects.tsx +++ b/packages/tupaia-web/src/pages/Projects.tsx @@ -6,9 +6,13 @@ import React from 'react'; import styled from 'styled-components'; import ExploreIcon from '@material-ui/icons/ExploreOutlined'; -import { DEFAULT_URL, PROJECT_ACCESS_TYPES, TUPAIA_LIGHT_LOGO_SRC } from '../constants'; +import { + USER_ROUTES, + DEFAULT_URL, + PROJECT_ACCESS_TYPES, + TUPAIA_LIGHT_LOGO_SRC, +} from '../constants'; import { useProjects, useUser } from '../api/queries'; -import { USER_ROUTES } from '../Routes'; import { LegacyProjectCard, LegacyProjectAllowedLink, @@ -22,7 +26,7 @@ const Wrapper = styled.div` display: flex; flex-direction: column; padding: 0.2rem 2rem 0; - width: 100%; + width: 58rem; `; const TagLine = styled.p` @@ -99,7 +103,7 @@ export const Projects = () => { [PROJECT_ACCESS_TYPES.DENIED]: ({ project: { code } }) => { const LINK = { TEXT: 'Log in', - URL: USER_ROUTES.LOGIN, + URL: `?modal=${USER_ROUTES.LOGIN}`, }; if (isLoggedIn) { LINK.TEXT = 'Request Access'; diff --git a/packages/tupaia-web/src/pages/Register/RegisterModal.tsx b/packages/tupaia-web/src/pages/Register/RegisterModal.tsx index d37ba01c1b..b0c158c5be 100644 --- a/packages/tupaia-web/src/pages/Register/RegisterModal.tsx +++ b/packages/tupaia-web/src/pages/Register/RegisterModal.tsx @@ -7,19 +7,16 @@ import styled from 'styled-components'; import { useForm } from 'react-hook-form'; import Typography from '@material-ui/core/Typography'; import { useRegister } from '../../api/mutations'; -import { AuthModal, ModalButton } from '../../layout'; import { SignupComplete } from './SignUpComplete'; import { SubmitHandler } from 'react-hook-form'; -import { TextField } from '../../components'; +import { TextField, AuthModalBody, AuthModalButton } from '../../components'; import { FORM_FIELD_VALIDATION } from '../../constants'; import { Checkbox } from '@tupaia/ui-components'; import { Link } from 'react-router-dom'; -import { USER_ROUTES } from '../../Routes.tsx'; +import { USER_ROUTES } from '../../constants'; -const StyledAuthModal = styled(AuthModal)` - .MuiDialog-paper { - width: 53rem; - } +const Container = styled(AuthModalBody)` + width: 53rem; `; const StyledForm = styled.form` @@ -45,7 +42,7 @@ const LinkText = styled(Typography)` color: white; } - ${ModalButton} + & { + ${AuthModalButton} + & { margin-top: 1.3rem; } `; @@ -59,7 +56,7 @@ export const RegisterModal = () => { const { errors, handleSubmit, getValues, register } = useForm(); return ( - @@ -157,16 +154,16 @@ export const RegisterModal = () => { })} /> - + Register account - + - Already have an account? Log in here + Already have an account? Log in here
)} - + ); }; diff --git a/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx index 91225048ed..9d8c55461e 100644 --- a/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx +++ b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { RouterButton } from '../../components'; import { Typography } from '@material-ui/core'; import styled from 'styled-components'; -import { USER_ROUTES } from '../../Routes'; +import { USER_ROUTES } from '../../constants'; const Container = styled.div` margin: 1rem; @@ -51,7 +51,7 @@ export const SignupComplete = () => {  Android . - Re-send verification email + Re-send verification email ); }; diff --git a/packages/tupaia-web/src/pages/RequestAccessForm.tsx b/packages/tupaia-web/src/pages/RequestAccessForm.tsx index a72144d0a6..4c7acfa371 100644 --- a/packages/tupaia-web/src/pages/RequestAccessForm.tsx +++ b/packages/tupaia-web/src/pages/RequestAccessForm.tsx @@ -3,8 +3,8 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ import React from 'react'; -import { AuthModal } from '../layout'; +import { AuthModalBody } from '../components'; export const RequestAccessForm = () => { - return RequestAccessForm; + return RequestAccessForm; }; diff --git a/packages/tupaia-web/src/pages/VerifyEmailResend.tsx b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx index 33bcb168e1..83431ac7e0 100644 --- a/packages/tupaia-web/src/pages/VerifyEmailResend.tsx +++ b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx @@ -5,13 +5,12 @@ import React from 'react'; import styled from 'styled-components'; -import { TextField } from '../components'; -import { AuthModal, ModalButton } from '../layout'; +import { AuthModalBody, AuthModalButton, TextField } from '../components'; import { FORM_FIELD_VALIDATION } from '../constants'; import { useForm } from 'react-hook-form'; import { useLogin } from '../api/mutations'; -const StyledAuthModal = styled(AuthModal)` +const Container = styled(AuthModalBody)` .MuiDialog-paper { width: 53rem; } @@ -39,7 +38,7 @@ export const VerifyEmailResend = () => { const { mutate: login, isSuccess, isLoading, isError, error } = useLogin(); return ( - + {isSuccess ? ( Please check your email for further instructions on how to verify your account. @@ -57,9 +56,9 @@ export const VerifyEmailResend = () => { ...FORM_FIELD_VALIDATION.EMAIL, })} /> - Submit + Submit
)} - + ); }; diff --git a/packages/tupaia-web/src/utils/useNavigateBack.ts b/packages/tupaia-web/src/utils/useNavigateBack.ts deleted file mode 100644 index e9452f5716..0000000000 --- a/packages/tupaia-web/src/utils/useNavigateBack.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import { DEFAULT_URL } from '../constants'; -import { useLocation, useNavigate } from 'react-router-dom'; - -export const useNavigateBack = () => { - const navigate = useNavigate(); - const { key } = useLocation(); - - return function navigateBack() { - /* The location.key property is a unique string associated with this location. On the initial location, this will be the string default. On all subsequent locations, this string will be a unique identifier. - { @link https://github.com/remix-run/history/blob/main/docs/api-reference.md#locationkey } */ - if (key === 'default') { - navigate(DEFAULT_URL); - } else { - navigate(-1); - } - }; -}; From 6b56d384e8ed101f23694dfb77ffc8d3d5af573e Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 13 Jun 2023 12:02:05 +1200 Subject: [PATCH 138/251] refactor to user routes naming --- packages/tupaia-web/src/Routes.tsx | 8 +++--- .../tupaia-web/src/components/AuthModal.tsx | 6 ++--- packages/tupaia-web/src/components/Modal.tsx | 25 +++++++++++-------- .../tupaia-web/src/constants/constants.ts | 2 +- .../layout/ProjectCardList/ProjectCard.tsx | 4 +-- .../src/layout/UserMenu/DrawerMenu.tsx | 6 ++--- .../src/layout/UserMenu/UserInfo.tsx | 6 ++--- .../src/layout/UserMenu/UserMenu.tsx | 6 ++--- .../LandingPage/MultiProjectLandingPage.tsx | 4 +-- .../LandingPage/SingleProjectLandingPage.tsx | 6 ++--- packages/tupaia-web/src/pages/LoginModal.tsx | 4 +-- .../pages/{ModalRoute.tsx => ModalRoutes.tsx} | 22 ++++++++-------- packages/tupaia-web/src/pages/Projects.tsx | 9 +++---- .../src/pages/Register/RegisterModal.tsx | 5 ++-- .../src/pages/Register/SignUpComplete.tsx | 4 +-- .../src/pages/VerifyEmailResend.tsx | 4 +-- packages/tupaia-web/src/pages/index.ts | 1 + 17 files changed, 62 insertions(+), 60 deletions(-) rename packages/tupaia-web/src/pages/{ModalRoute.tsx => ModalRoutes.tsx} (55%) diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index d7c0e81a53..dc847125af 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -5,9 +5,9 @@ import React from 'react'; import { Navigate, Route, Routes as RouterRoutes, useLocation } from 'react-router-dom'; import { LandingPage, Project } from './pages'; -import { USER_ROUTES, DEFAULT_URL } from './constants'; +import { MODAL_ROUTES, DEFAULT_URL } from './constants'; import { Layout } from './layout'; -import { ModalRoute } from './pages/ModalRoute'; +import { ModalRoutes } from './pages/ModalRoutes.tsx'; /** * This Router is using [version 6.3]{@link https://reactrouter.com/en/v6.3.0}, as later versions are not supported by our TS setup. See [this issue here]{@link https://github.com/remix-run/react-router/discussions/8364} @@ -20,7 +20,7 @@ export const Routes = () => { return ( <> - + {/* This is the layout for the entire app, so needs to be wrapped around the rest of the routes so that we can access params in top bar etc */} }> @@ -29,7 +29,7 @@ export const Routes = () => { + } /> } /> diff --git a/packages/tupaia-web/src/components/AuthModal.tsx b/packages/tupaia-web/src/components/AuthModal.tsx index 4efe7b6c31..d47ad46bf7 100644 --- a/packages/tupaia-web/src/components/AuthModal.tsx +++ b/packages/tupaia-web/src/components/AuthModal.tsx @@ -13,7 +13,6 @@ const Wrapper = styled.div` display: flex; flex-direction: column; align-items: center; - max-width: 100%; `; const Logo = styled.img` @@ -60,12 +59,11 @@ interface AuthModalProps { children?: ReactNode; title?: string; subtitle?: string; - className?: string; } -export const AuthModalBody = ({ children, title, subtitle, className }: AuthModalProps) => { +export const AuthModalBody = ({ children, title, subtitle }: AuthModalProps) => { return ( - + {title} {subtitle && {subtitle}} diff --git a/packages/tupaia-web/src/components/Modal.tsx b/packages/tupaia-web/src/components/Modal.tsx index f89edbd538..289c16bc95 100644 --- a/packages/tupaia-web/src/components/Modal.tsx +++ b/packages/tupaia-web/src/components/Modal.tsx @@ -12,7 +12,6 @@ interface ModalProps { children?: ReactNode; onClose: () => void; isOpen: boolean; - className?: string; } const Wrapper = styled.div` @@ -24,6 +23,18 @@ const Wrapper = styled.div` overflow-x: hidden; padding: 2rem 2rem 4rem; max-width: 100%; + width: 41rem; + + .projects { + width: 920px; + } + .login { + width: 41rem; + } + + .register { + width: 41rem; + } `; const CloseIcon = styled(MuiCloseIcon)` @@ -51,19 +62,13 @@ const Paper = styled(MuiPaper)` transition: transform 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms; `; -export const Modal = ({ children, isOpen, onClose, className }: ModalProps) => { +export const Modal = ({ children, isOpen, onClose }: ModalProps) => { // make the modal full screen at small screen sizes const theme = useTheme(); const fullScreen = useMediaQuery(theme.breakpoints.down('sm')); return ( - - + + diff --git a/packages/tupaia-web/src/constants/constants.ts b/packages/tupaia-web/src/constants/constants.ts index 146e958496..e3a2f13d6b 100644 --- a/packages/tupaia-web/src/constants/constants.ts +++ b/packages/tupaia-web/src/constants/constants.ts @@ -9,7 +9,7 @@ export const DEFAULT_URL = `/${DEFAULT_PROJECT_CODE}/${DEFAULT_ENTITY_CODE}`; export const TUPAIA_LIGHT_LOGO_SRC = '/images/tupaia-logo-light.svg'; -export enum USER_ROUTES { +export enum MODAL_ROUTES { PROJECTS = 'projects', LOGIN = 'login', REGISTER = 'register', diff --git a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx index 9f5c1bd548..c97527b697 100644 --- a/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx +++ b/packages/tupaia-web/src/layout/ProjectCardList/ProjectCard.tsx @@ -9,7 +9,7 @@ import Alarm from '@material-ui/icons/Alarm'; import { darken } from '@material-ui/core/styles'; import { Typography } from '@material-ui/core'; import { SingleProject } from '../../types'; -import { USER_ROUTES } from '../../constants'; +import { MODAL_ROUTES } from '../../constants'; import { RouterButton } from '../../components'; const Card = styled.div` @@ -121,7 +121,7 @@ export const ProjectDeniedLink = ({ url }: LinkProps) => ( ); export const ProjectLoginLink = () => ( - Log in + Log in ); export const ProjectPendingLink = () => ( diff --git a/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx index 86f390baa3..8ed96e83c3 100644 --- a/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/DrawerMenu.tsx @@ -9,7 +9,7 @@ import { Drawer as MuiDrawer } from '@material-ui/core'; import { IconButton } from '@tupaia/ui-components'; import CloseIcon from '@material-ui/icons/Close'; import { MenuItem, MenuList } from './MenuList'; -import { USER_ROUTES } from '../../constants'; +import { MODAL_ROUTES } from '../../constants'; /** * DrawerMenu is a drawer menu used when the user is on a mobile device @@ -113,10 +113,10 @@ export const DrawerMenu = ({ {/** If the user is not logged in, show the register and login buttons */} {!isLoggedIn && ( <> - + Log in - + Register diff --git a/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx b/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx index fd84a98f8d..8084c36c1c 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserInfo.tsx @@ -6,7 +6,7 @@ import React from 'react'; import styled from 'styled-components'; import { LinkProps } from 'react-router-dom'; -import { USER_ROUTES } from '../../constants'; +import { MODAL_ROUTES } from '../../constants'; import { RouterButton } from '../../components'; /** @@ -81,8 +81,8 @@ export const UserInfo = ({ ); return ( - Register - + Register + Log in diff --git a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx index af2400ee24..176a86deab 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx @@ -12,7 +12,7 @@ import { useLandingPage, useUser } from '../../api/queries'; import { PopoverMenu } from './PopoverMenu'; import { DrawerMenu } from './DrawerMenu'; import { MenuItem } from './MenuList'; -import { USER_ROUTES } from '../../constants'; +import { MODAL_ROUTES } from '../../constants'; import { UserInfo } from './UserInfo'; const UserMenuContainer = styled.div<{ @@ -69,13 +69,13 @@ export const UserMenu = () => { ); const ViewProjects = ( - + View projects ); const ChangePassword = ( - Change password + Change password ); // The custom landing pages need different menu items to the other views const customLandingPageMenuItems = isLoggedIn ? [VisitMainSite, ChangePassword] : [VisitMainSite]; diff --git a/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx index a3092f0ea1..e2c0d5eebf 100644 --- a/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx +++ b/packages/tupaia-web/src/pages/LandingPage/MultiProjectLandingPage.tsx @@ -7,7 +7,7 @@ import styled from 'styled-components'; import { Typography } from '@material-ui/core'; import { TRANSPARENT_BLACK } from '../../constants'; import { SingleLandingPage } from '../../types'; -import { PROJECT_ACCESS_TYPES, USER_ROUTES } from '../../constants'; +import { PROJECT_ACCESS_TYPES, MODAL_ROUTES } from '../../constants'; import { ProjectCardList, ProjectLoginLink, @@ -94,7 +94,7 @@ export function MultiProjectLandingPage({ [PROJECT_ACCESS_TYPES.PENDING]: () => , [PROJECT_ACCESS_TYPES.DENIED]: ({ project: { code } }) => { if (isLoggedIn) { - return ; + return ; } return ; }, diff --git a/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx b/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx index 0d0a3590bc..520b3859e4 100644 --- a/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx +++ b/packages/tupaia-web/src/pages/LandingPage/SingleProjectLandingPage.tsx @@ -8,7 +8,7 @@ import styled from 'styled-components'; import { Typography } from '@material-ui/core'; import { Link } from 'react-router-dom'; import { Button } from '@tupaia/ui-components'; -import { PROJECT_ACCESS_TYPES, USER_ROUTES } from '../../constants'; +import { PROJECT_ACCESS_TYPES, MODAL_ROUTES } from '../../constants'; import { getProjectAccessType } from '../../utils'; import { SingleLandingPage, SingleProject } from '../../types'; @@ -79,8 +79,8 @@ export function SingleProjectLandingPage({ [PROJECT_ACCESS_TYPES.PENDING]: '', [PROJECT_ACCESS_TYPES.ALLOWED]: `/${code}/${homeEntityCode}`, [PROJECT_ACCESS_TYPES.DENIED]: isLoggedIn - ? `${USER_ROUTES.REQUEST_ACCESS}/${code}` - : `?modal=${USER_ROUTES.LOGIN}`, + ? `${MODAL_ROUTES.REQUEST_ACCESS}/${code}` + : `?modal=${MODAL_ROUTES.LOGIN}`, }; const actionTexts = { diff --git a/packages/tupaia-web/src/pages/LoginModal.tsx b/packages/tupaia-web/src/pages/LoginModal.tsx index 6561fecd77..f85ccf831a 100644 --- a/packages/tupaia-web/src/pages/LoginModal.tsx +++ b/packages/tupaia-web/src/pages/LoginModal.tsx @@ -9,7 +9,7 @@ import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; import { useLogin } from '../api/mutations'; import { AuthModalBody, AuthModalButton, TextField } from '../components'; -import { FORM_FIELD_VALIDATION, USER_ROUTES } from '../constants'; +import { FORM_FIELD_VALIDATION, MODAL_ROUTES } from '../constants'; import { EmailVerification } from './EmailVerification.tsx'; const Container = styled(AuthModalBody)` @@ -80,7 +80,7 @@ export const LoginModal = () => { Log in - Don't have an account? Register here + Don't have an account? Register here diff --git a/packages/tupaia-web/src/pages/ModalRoute.tsx b/packages/tupaia-web/src/pages/ModalRoutes.tsx similarity index 55% rename from packages/tupaia-web/src/pages/ModalRoute.tsx rename to packages/tupaia-web/src/pages/ModalRoutes.tsx index 49de7ec37b..e8275dde99 100644 --- a/packages/tupaia-web/src/pages/ModalRoute.tsx +++ b/packages/tupaia-web/src/pages/ModalRoutes.tsx @@ -5,8 +5,8 @@ import React from 'react'; import { useSearchParams } from 'react-router-dom'; -import { USER_ROUTES } from '../constants'; -import { Projects, LoginModal, RegisterModal } from '.'; +import { MODAL_ROUTES } from '../constants'; +import { Projects, LoginModal, RegisterModal, VerifyEmailResend } from '.'; import { Modal } from '../components'; /** @@ -14,20 +14,20 @@ import { Modal } from '../components'; */ const modalViews = { - [USER_ROUTES.PROJECTS]: Projects, - [USER_ROUTES.LOGIN]: LoginModal, - [USER_ROUTES.REGISTER]: RegisterModal, - [USER_ROUTES.RESET_PASSWORD]: Projects, - [USER_ROUTES.REQUEST_ACCESS]: Projects, - [USER_ROUTES.VERIFY_EMAIL_RESEND]: Projects, + [MODAL_ROUTES.PROJECTS]: Projects, + [MODAL_ROUTES.LOGIN]: LoginModal, + [MODAL_ROUTES.REGISTER]: RegisterModal, + // [MODAL_ROUTES.RESET_PASSWORD]: Projects, + // [MODAL_ROUTES.REQUEST_ACCESS]: Projects, + [MODAL_ROUTES.VERIFY_EMAIL_RESEND]: VerifyEmailResend, }; -export const ModalRoute = () => { +export const ModalRoutes = () => { const [searchParams, setSearchParams] = useSearchParams(); - const modal = searchParams.get('modal') as typeof USER_ROUTES[keyof typeof USER_ROUTES]; + const modal = searchParams.get('modal') as typeof MODAL_ROUTES[keyof typeof MODAL_ROUTES]; // If no modal param or invalid modal param, return null - if (!modal || !Object.values(USER_ROUTES).includes(modal)) return null; + if (!modal || !Object.values(MODAL_ROUTES).includes(modal)) return null; const onCloseModal = () => { // remove the modal param from URLSearchParams diff --git a/packages/tupaia-web/src/pages/Projects.tsx b/packages/tupaia-web/src/pages/Projects.tsx index 6055fc090d..0a09e5675e 100644 --- a/packages/tupaia-web/src/pages/Projects.tsx +++ b/packages/tupaia-web/src/pages/Projects.tsx @@ -7,7 +7,7 @@ import React from 'react'; import styled from 'styled-components'; import ExploreIcon from '@material-ui/icons/ExploreOutlined'; import { - USER_ROUTES, + MODAL_ROUTES, DEFAULT_URL, PROJECT_ACCESS_TYPES, TUPAIA_LIGHT_LOGO_SRC, @@ -26,7 +26,6 @@ const Wrapper = styled.div` display: flex; flex-direction: column; padding: 0.2rem 2rem 0; - width: 58rem; `; const TagLine = styled.p` @@ -74,7 +73,7 @@ export const Projects = () => { } = useProjects(); const { isLoggedIn } = useUser(); return ( - +
@@ -103,11 +102,11 @@ export const Projects = () => { [PROJECT_ACCESS_TYPES.DENIED]: ({ project: { code } }) => { const LINK = { TEXT: 'Log in', - URL: `?modal=${USER_ROUTES.LOGIN}`, + URL: `?modal=${MODAL_ROUTES.LOGIN}`, }; if (isLoggedIn) { LINK.TEXT = 'Request Access'; - LINK.URL = `/${USER_ROUTES.REQUEST_ACCESS}/${code}`; + LINK.URL = `/${MODAL_ROUTES.REQUEST_ACCESS}/${code}`; } return ( {LINK.TEXT} diff --git a/packages/tupaia-web/src/pages/Register/RegisterModal.tsx b/packages/tupaia-web/src/pages/Register/RegisterModal.tsx index b0c158c5be..233649ac88 100644 --- a/packages/tupaia-web/src/pages/Register/RegisterModal.tsx +++ b/packages/tupaia-web/src/pages/Register/RegisterModal.tsx @@ -13,7 +13,7 @@ import { TextField, AuthModalBody, AuthModalButton } from '../../components'; import { FORM_FIELD_VALIDATION } from '../../constants'; import { Checkbox } from '@tupaia/ui-components'; import { Link } from 'react-router-dom'; -import { USER_ROUTES } from '../../constants'; +import { MODAL_ROUTES } from '../../constants'; const Container = styled(AuthModalBody)` width: 53rem; @@ -158,7 +158,8 @@ export const RegisterModal = () => { Register account - Already have an account? Log in here + Already have an account?{' '} + Log in here diff --git a/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx index 9d8c55461e..82a7ff41d9 100644 --- a/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx +++ b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { RouterButton } from '../../components'; import { Typography } from '@material-ui/core'; import styled from 'styled-components'; -import { USER_ROUTES } from '../../constants'; +import { MODAL_ROUTES } from '../../constants'; const Container = styled.div` margin: 1rem; @@ -51,7 +51,7 @@ export const SignupComplete = () => {  Android . - Re-send verification email + Re-send verification email ); }; diff --git a/packages/tupaia-web/src/pages/VerifyEmailResend.tsx b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx index 83431ac7e0..138220bade 100644 --- a/packages/tupaia-web/src/pages/VerifyEmailResend.tsx +++ b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx @@ -11,9 +11,7 @@ import { useForm } from 'react-hook-form'; import { useLogin } from '../api/mutations'; const Container = styled(AuthModalBody)` - .MuiDialog-paper { - width: 53rem; - } + width: 53rem; `; const CheckEmailMessage = styled.p` text-align: center; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index 8e7cdfae34..67a59de44c 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -10,3 +10,4 @@ export { RegisterModal } from './Register'; export { Projects } from './Projects'; export { RequestAccessForm } from './RequestAccessForm'; export { EmailVerification } from './EmailVerification.tsx'; +export { VerifyEmailResend } from './VerifyEmailResend.tsx'; From 4d29accf6413b312ed01028f1e05673bac4d7dad Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 13 Jun 2023 12:23:49 +1200 Subject: [PATCH 139/251] styling tweaks --- .../tupaia-web/src/api/mutations/index.ts | 1 + .../mutations/useResendVerificationEmail.ts | 20 +++++++++++ .../tupaia-web/src/components/AuthModal.tsx | 4 +-- packages/tupaia-web/src/components/Modal.tsx | 15 +-------- .../src/pages/{LoginModal.tsx => Login.tsx} | 8 ++--- packages/tupaia-web/src/pages/ModalRoutes.tsx | 6 ++-- packages/tupaia-web/src/pages/Projects.tsx | 3 +- .../{RegisterModal.tsx => Register.tsx} | 14 +++++--- .../src/pages/Register/SignUpComplete.tsx | 4 ++- .../tupaia-web/src/pages/Register/index.ts | 2 +- .../src/pages/VerifyEmailResend.tsx | 33 ++++++++++--------- packages/tupaia-web/src/pages/index.ts | 4 +-- 12 files changed, 65 insertions(+), 49 deletions(-) create mode 100644 packages/tupaia-web/src/api/mutations/useResendVerificationEmail.ts rename packages/tupaia-web/src/pages/{LoginModal.tsx => Login.tsx} (93%) rename packages/tupaia-web/src/pages/Register/{RegisterModal.tsx => Register.tsx} (96%) diff --git a/packages/tupaia-web/src/api/mutations/index.ts b/packages/tupaia-web/src/api/mutations/index.ts index 2a31c07a60..fb4bcc48e3 100644 --- a/packages/tupaia-web/src/api/mutations/index.ts +++ b/packages/tupaia-web/src/api/mutations/index.ts @@ -6,3 +6,4 @@ export * from './useLogin'; export * from './useRegister'; +export * from './useResendVerificationEmail'; diff --git a/packages/tupaia-web/src/api/mutations/useResendVerificationEmail.ts b/packages/tupaia-web/src/api/mutations/useResendVerificationEmail.ts new file mode 100644 index 0000000000..099cf36290 --- /dev/null +++ b/packages/tupaia-web/src/api/mutations/useResendVerificationEmail.ts @@ -0,0 +1,20 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + */ + +import { useMutation } from 'react-query'; +import { post } from '../api'; + +type RequestBody = { + email: string; +}; +export const useResendVerificationEmail = () => { + return useMutation(({ email }: RequestBody) => { + return post('resendEmail', { + data: { + emailAddress: email, + }, + }); + }); +}; diff --git a/packages/tupaia-web/src/components/AuthModal.tsx b/packages/tupaia-web/src/components/AuthModal.tsx index d47ad46bf7..5e70226fcd 100644 --- a/packages/tupaia-web/src/components/AuthModal.tsx +++ b/packages/tupaia-web/src/components/AuthModal.tsx @@ -61,9 +61,9 @@ interface AuthModalProps { subtitle?: string; } -export const AuthModalBody = ({ children, title, subtitle }: AuthModalProps) => { +export const AuthModalBody = ({ children, title, subtitle, className }: AuthModalProps) => { return ( - + {title} {subtitle && {subtitle}} diff --git a/packages/tupaia-web/src/components/Modal.tsx b/packages/tupaia-web/src/components/Modal.tsx index 289c16bc95..0c4e5537d2 100644 --- a/packages/tupaia-web/src/components/Modal.tsx +++ b/packages/tupaia-web/src/components/Modal.tsx @@ -21,20 +21,7 @@ const Wrapper = styled.div` align-items: center; text-align: center; overflow-x: hidden; - padding: 2rem 2rem 4rem; - max-width: 100%; - width: 41rem; - - .projects { - width: 920px; - } - .login { - width: 41rem; - } - - .register { - width: 41rem; - } + padding: 2rem 0 4rem; `; const CloseIcon = styled(MuiCloseIcon)` diff --git a/packages/tupaia-web/src/pages/LoginModal.tsx b/packages/tupaia-web/src/pages/Login.tsx similarity index 93% rename from packages/tupaia-web/src/pages/LoginModal.tsx rename to packages/tupaia-web/src/pages/Login.tsx index f85ccf831a..2581eae65d 100644 --- a/packages/tupaia-web/src/pages/LoginModal.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -12,7 +12,7 @@ import { AuthModalBody, AuthModalButton, TextField } from '../components'; import { FORM_FIELD_VALIDATION, MODAL_ROUTES } from '../constants'; import { EmailVerification } from './EmailVerification.tsx'; -const Container = styled(AuthModalBody)` +const ModalBody = styled(AuthModalBody)` width: 42rem; `; @@ -43,12 +43,12 @@ const ForgotPasswordText = styled(LinkText)` text-align: right; `; -export const LoginModal = () => { +export const Login = () => { const { handleSubmit, register, errors } = useForm(); const { mutate: login, isLoading, isError, error } = useLogin(); return ( - + {isError ? {error.message} : } )} noValidate> { Don't have an account? Register here - + ); }; diff --git a/packages/tupaia-web/src/pages/ModalRoutes.tsx b/packages/tupaia-web/src/pages/ModalRoutes.tsx index e8275dde99..f8f2a30d57 100644 --- a/packages/tupaia-web/src/pages/ModalRoutes.tsx +++ b/packages/tupaia-web/src/pages/ModalRoutes.tsx @@ -6,7 +6,7 @@ import React from 'react'; import { useSearchParams } from 'react-router-dom'; import { MODAL_ROUTES } from '../constants'; -import { Projects, LoginModal, RegisterModal, VerifyEmailResend } from '.'; +import { Projects, Login, Register, VerifyEmailResend } from '.'; import { Modal } from '../components'; /** @@ -15,8 +15,8 @@ import { Modal } from '../components'; const modalViews = { [MODAL_ROUTES.PROJECTS]: Projects, - [MODAL_ROUTES.LOGIN]: LoginModal, - [MODAL_ROUTES.REGISTER]: RegisterModal, + [MODAL_ROUTES.LOGIN]: Login, + [MODAL_ROUTES.REGISTER]: Register, // [MODAL_ROUTES.RESET_PASSWORD]: Projects, // [MODAL_ROUTES.REQUEST_ACCESS]: Projects, [MODAL_ROUTES.VERIFY_EMAIL_RESEND]: VerifyEmailResend, diff --git a/packages/tupaia-web/src/pages/Projects.tsx b/packages/tupaia-web/src/pages/Projects.tsx index 0a09e5675e..30f3438375 100644 --- a/packages/tupaia-web/src/pages/Projects.tsx +++ b/packages/tupaia-web/src/pages/Projects.tsx @@ -26,6 +26,7 @@ const Wrapper = styled.div` display: flex; flex-direction: column; padding: 0.2rem 2rem 0; + width: 58rem; `; const TagLine = styled.p` @@ -73,7 +74,7 @@ export const Projects = () => { } = useProjects(); const { isLoggedIn } = useUser(); return ( - +
diff --git a/packages/tupaia-web/src/pages/Register/RegisterModal.tsx b/packages/tupaia-web/src/pages/Register/Register.tsx similarity index 96% rename from packages/tupaia-web/src/pages/Register/RegisterModal.tsx rename to packages/tupaia-web/src/pages/Register/Register.tsx index 233649ac88..acf8a58894 100644 --- a/packages/tupaia-web/src/pages/Register/RegisterModal.tsx +++ b/packages/tupaia-web/src/pages/Register/Register.tsx @@ -15,7 +15,7 @@ import { Checkbox } from '@tupaia/ui-components'; import { Link } from 'react-router-dom'; import { MODAL_ROUTES } from '../../constants'; -const Container = styled(AuthModalBody)` +const ModalBody = styled(AuthModalBody)` width: 53rem; `; @@ -32,6 +32,10 @@ const StyledForm = styled.form` } `; +const StyledCheckbox = styled(Checkbox)` + display: flex; +`; + const LinkText = styled(Typography)` font-weight: 400; font-size: 11px; @@ -51,12 +55,12 @@ const FullWidthColumn = styled.div` grid-column: 1/-1; `; -export const RegisterModal = () => { +export const Register = () => { const { mutate: onSubmit, isLoading, isSuccess, isError, error } = useRegister(); const { errors, handleSubmit, getValues, register } = useForm(); return ( - @@ -143,7 +147,7 @@ export const RegisterModal = () => { required: 'Required', })} /> - { )} - + ); }; diff --git a/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx index 82a7ff41d9..4d088fb27c 100644 --- a/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx +++ b/packages/tupaia-web/src/pages/Register/SignUpComplete.tsx @@ -51,7 +51,9 @@ export const SignupComplete = () => {  Android . - Re-send verification email + + Re-send verification email + ); }; diff --git a/packages/tupaia-web/src/pages/Register/index.ts b/packages/tupaia-web/src/pages/Register/index.ts index e7c7c680c2..d9fdf9b835 100644 --- a/packages/tupaia-web/src/pages/Register/index.ts +++ b/packages/tupaia-web/src/pages/Register/index.ts @@ -3,4 +3,4 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -export { RegisterModal } from './RegisterModal'; +export { Register } from './Register.tsx'; diff --git a/packages/tupaia-web/src/pages/VerifyEmailResend.tsx b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx index 138220bade..e4c1ee0e61 100644 --- a/packages/tupaia-web/src/pages/VerifyEmailResend.tsx +++ b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx @@ -5,14 +5,16 @@ import React from 'react'; import styled from 'styled-components'; +import Typography from '@material-ui/core/Typography'; import { AuthModalBody, AuthModalButton, TextField } from '../components'; import { FORM_FIELD_VALIDATION } from '../constants'; -import { useForm } from 'react-hook-form'; -import { useLogin } from '../api/mutations'; +import { SubmitHandler, useForm } from 'react-hook-form'; +import { useResendVerificationEmail } from '../api/mutations'; -const Container = styled(AuthModalBody)` +const ModalBody = styled(AuthModalBody)` width: 53rem; `; + const CheckEmailMessage = styled.p` text-align: center; padding: 0 15px; @@ -20,29 +22,26 @@ const CheckEmailMessage = styled.p` const StyledForm = styled.form` margin-top: 1rem; - width: 42rem; + width: 21rem; max-width: 100%; - - @media (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { - display: grid; - grid-template-columns: 1fr 1fr; - column-gap: 2rem; - row-gap: 0; - } `; export const VerifyEmailResend = () => { const { handleSubmit, register, errors } = useForm(); - const { mutate: login, isSuccess, isLoading, isError, error } = useLogin(); + const { mutate: submit, isSuccess, isLoading, isError, error } = useResendVerificationEmail(); return ( - + + {isError && {error.message}} {isSuccess ? ( Please check your email for further instructions on how to verify your account. ) : ( - + )} noValidate> { ...FORM_FIELD_VALIDATION.EMAIL, })} /> - Submit + + Resend verification email + )} - + ); }; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index 67a59de44c..572e708bbb 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -3,10 +3,10 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export { LandingPage } from './LandingPage'; -export { LoginModal } from './LoginModal'; +export { Login } from './Login.tsx'; export { PasswordResetForm } from './PasswordResetForm'; export { Project } from './Project'; -export { RegisterModal } from './Register'; +export { Register } from './Register'; export { Projects } from './Projects'; export { RequestAccessForm } from './RequestAccessForm'; export { EmailVerification } from './EmailVerification.tsx'; From f93464a7a2183abac6b29a90ca3a744c9784f3f0 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 13 Jun 2023 13:24:07 +1200 Subject: [PATCH 140/251] fix storybook --- packages/tupaia-web/.storybook/preview.tsx | 2 +- .../tupaia-web/src/components/AuthModal.tsx | 1 + packages/tupaia-web/src/pages/ModalRoutes.tsx | 13 ++++-- .../stories/components/modal.stories.tsx | 26 ++++++++++-- .../stories/layout/authModal.stories.tsx | 41 ------------------- 5 files changed, 35 insertions(+), 48 deletions(-) delete mode 100644 packages/tupaia-web/stories/layout/authModal.stories.tsx diff --git a/packages/tupaia-web/.storybook/preview.tsx b/packages/tupaia-web/.storybook/preview.tsx index 9c66c88a0f..9e3751a302 100644 --- a/packages/tupaia-web/.storybook/preview.tsx +++ b/packages/tupaia-web/.storybook/preview.tsx @@ -7,7 +7,7 @@ const preview: Preview = { backgrounds: { default: 'Dark', values: [ - { name: 'Dark', value: '#135D8F' }, + { name: 'Dark', value: '#262834' }, { name: 'Light', value: '#ffffff' }, ], }, diff --git a/packages/tupaia-web/src/components/AuthModal.tsx b/packages/tupaia-web/src/components/AuthModal.tsx index 5e70226fcd..ad48e48a54 100644 --- a/packages/tupaia-web/src/components/AuthModal.tsx +++ b/packages/tupaia-web/src/components/AuthModal.tsx @@ -59,6 +59,7 @@ interface AuthModalProps { children?: ReactNode; title?: string; subtitle?: string; + className?: string; } export const AuthModalBody = ({ children, title, subtitle, className }: AuthModalProps) => { diff --git a/packages/tupaia-web/src/pages/ModalRoutes.tsx b/packages/tupaia-web/src/pages/ModalRoutes.tsx index f8f2a30d57..f116459307 100644 --- a/packages/tupaia-web/src/pages/ModalRoutes.tsx +++ b/packages/tupaia-web/src/pages/ModalRoutes.tsx @@ -6,7 +6,14 @@ import React from 'react'; import { useSearchParams } from 'react-router-dom'; import { MODAL_ROUTES } from '../constants'; -import { Projects, Login, Register, VerifyEmailResend } from '.'; +import { + Projects, + Login, + Register, + VerifyEmailResend, + PasswordResetForm, + RequestAccessForm, +} from '.'; import { Modal } from '../components'; /** @@ -17,8 +24,8 @@ const modalViews = { [MODAL_ROUTES.PROJECTS]: Projects, [MODAL_ROUTES.LOGIN]: Login, [MODAL_ROUTES.REGISTER]: Register, - // [MODAL_ROUTES.RESET_PASSWORD]: Projects, - // [MODAL_ROUTES.REQUEST_ACCESS]: Projects, + [MODAL_ROUTES.RESET_PASSWORD]: PasswordResetForm, + [MODAL_ROUTES.REQUEST_ACCESS]: RequestAccessForm, [MODAL_ROUTES.VERIFY_EMAIL_RESEND]: VerifyEmailResend, }; diff --git a/packages/tupaia-web/stories/components/modal.stories.tsx b/packages/tupaia-web/stories/components/modal.stories.tsx index 85e4532f61..adb3964209 100644 --- a/packages/tupaia-web/stories/components/modal.stories.tsx +++ b/packages/tupaia-web/stories/components/modal.stories.tsx @@ -2,11 +2,11 @@ * Tupaia * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import React from 'react'; +import React, { useState } from 'react'; import { Meta } from '@storybook/react'; -import { Modal } from '../../src/components/Modal'; -import { useState } from 'react'; +import styled from 'styled-components'; import { Button } from '@material-ui/core'; +import { AuthModalBody, AuthModalButton, AuthModalCancelButton, Modal } from '../../src/components'; const meta: Meta = { title: 'components/Modal', @@ -26,3 +26,23 @@ export const Simple = () => { ); }; + +const ModalBody = styled(AuthModalBody)` + width: 42rem; +`; + +export const AuthModal = () => { + const [isOpen, setIsOpen] = useState(true); + return ( + <> + + setIsOpen(false)}> + + Hi, I am an auth modal + Login + Cancel + + + + ); +}; diff --git a/packages/tupaia-web/stories/layout/authModal.stories.tsx b/packages/tupaia-web/stories/layout/authModal.stories.tsx deleted file mode 100644 index 7457fcbded..0000000000 --- a/packages/tupaia-web/stories/layout/authModal.stories.tsx +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import React from 'react'; -import { Meta } from '@storybook/react'; -import { AuthModal, ModalButton, ModalCancelButton } from '../../src/layout/AuthModal'; - -const meta: Meta = { - title: 'layout/AuthModal', - component: AuthModal, -}; - -export default meta; - -export const Simple = () => { - return ( - - Hi, I am an auth modal - - ); -}; - -export const PrimaryButton = () => { - return ( - - Hi, I am an auth modal - Login - - ); -}; - -export const SecondaryButton = () => { - return ( - - Hi, I am an auth modal - Login - Login - - ); -}; From cf98df0de81a7e0352149717ea11764e695318a0 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 13 Jun 2023 13:53:53 +1200 Subject: [PATCH 141/251] tweak on success handling --- packages/tupaia-web/src/Routes.tsx | 27 ++++++++++++++++--- .../tupaia-web/src/api/mutations/useLogin.ts | 4 +++ .../src/api/mutations/useRegister.ts | 17 +++--------- packages/tupaia-web/src/pages/index.ts | 5 ++-- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index dc847125af..d194e2fd77 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -4,10 +4,9 @@ */ import React from 'react'; import { Navigate, Route, Routes as RouterRoutes, useLocation } from 'react-router-dom'; -import { LandingPage, Project } from './pages'; +import { ModalRoutes, LandingPage, Project } from './pages'; import { MODAL_ROUTES, DEFAULT_URL } from './constants'; import { Layout } from './layout'; -import { ModalRoutes } from './pages/ModalRoutes.tsx'; /** * This Router is using [version 6.3]{@link https://reactrouter.com/en/v6.3.0}, as later versions are not supported by our TS setup. See [this issue here]{@link https://github.com/remix-run/react-router/discussions/8364} @@ -29,7 +28,29 @@ export const Routes = () => { + + } + /> + {/* Redirect /login and /register to the correct routes just in case */} + + } + /> + } /> } /> diff --git a/packages/tupaia-web/src/api/mutations/useLogin.ts b/packages/tupaia-web/src/api/mutations/useLogin.ts index 772f5923fd..c89d20f0ea 100644 --- a/packages/tupaia-web/src/api/mutations/useLogin.ts +++ b/packages/tupaia-web/src/api/mutations/useLogin.ts @@ -4,6 +4,7 @@ */ import { useMutation, useQueryClient } from 'react-query'; +import { useSearchParams } from 'react-router-dom'; import { post } from '../api'; type LoginCredentials = { @@ -11,6 +12,7 @@ type LoginCredentials = { password: string; }; export const useLogin = () => { + const [searchParams, setSearchParams] = useSearchParams(); const queryClient = useQueryClient(); return useMutation( @@ -26,6 +28,8 @@ export const useLogin = () => { { onSuccess: () => { queryClient.invalidateQueries(); + searchParams.delete('modal'); + setSearchParams(searchParams); }, }, ); diff --git a/packages/tupaia-web/src/api/mutations/useRegister.ts b/packages/tupaia-web/src/api/mutations/useRegister.ts index a54461c095..7bdda0cee7 100644 --- a/packages/tupaia-web/src/api/mutations/useRegister.ts +++ b/packages/tupaia-web/src/api/mutations/useRegister.ts @@ -3,7 +3,7 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -import { useMutation, useQueryClient } from 'react-query'; +import { useMutation } from 'react-query'; import { post } from '../api'; // Todo: replace with request body type from backend @@ -18,16 +18,7 @@ type RegisterUserBody = { position: string; }; export const useRegister = () => { - const queryClient = useQueryClient(); - - return useMutation( - (data: RegisterUserBody) => { - return post('signup', { data }); - }, - { - onSuccess: () => { - queryClient.invalidateQueries(); - }, - }, - ); + return useMutation((data: RegisterUserBody) => { + return post('signup', { data }); + }); }; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index 572e708bbb..ac0d0d60ec 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -9,5 +9,6 @@ export { Project } from './Project'; export { Register } from './Register'; export { Projects } from './Projects'; export { RequestAccessForm } from './RequestAccessForm'; -export { EmailVerification } from './EmailVerification.tsx'; -export { VerifyEmailResend } from './VerifyEmailResend.tsx'; +export { EmailVerification } from './EmailVerification'; +export { VerifyEmailResend } from './VerifyEmailResend'; +export { ModalRoutes } from './ModalRoutes'; From 345b17441d44b07e740a4af555a0168f3db31ddb Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 13 Jun 2023 14:19:46 +1200 Subject: [PATCH 142/251] fix email verification --- packages/tupaia-web/src/Routes.tsx | 25 ++++++++++--------- .../src/pages/EmailVerification.tsx | 15 ++++++++++- packages/tupaia-web/src/pages/ModalRoutes.tsx | 2 ++ packages/tupaia-web/src/pages/index.ts | 2 +- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index d194e2fd77..8ffa75122f 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -4,7 +4,7 @@ */ import React from 'react'; import { Navigate, Route, Routes as RouterRoutes, useLocation } from 'react-router-dom'; -import { ModalRoutes, LandingPage, Project } from './pages'; +import { ModalRoutes, LandingPage, Project, EmailVerificationRoute } from './pages'; import { MODAL_ROUTES, DEFAULT_URL } from './constants'; import { Layout } from './layout'; @@ -13,6 +13,7 @@ import { Layout } from './layout'; * This means the newer 'createBrowserRouter' and 'RouterProvider' can't be used here. * * **/ + export const Routes = () => { let location = useLocation(); const state = location.state as { backgroundLocation?: Location }; @@ -25,21 +26,17 @@ export const Routes = () => { }> } /> {/* Email verification links redirect to the login page where the verification happens */} - - } - /> + } /> {/* Redirect /login and /register to the correct routes just in case */} } @@ -48,7 +45,11 @@ export const Routes = () => { path="/register" element={ } diff --git a/packages/tupaia-web/src/pages/EmailVerification.tsx b/packages/tupaia-web/src/pages/EmailVerification.tsx index c3a6bd5305..a8f1953ee6 100644 --- a/packages/tupaia-web/src/pages/EmailVerification.tsx +++ b/packages/tupaia-web/src/pages/EmailVerification.tsx @@ -3,9 +3,11 @@ * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ import React from 'react'; +import styled from 'styled-components'; import Typography from '@material-ui/core/Typography'; +import { Navigate, useLocation, useSearchParams } from 'react-router-dom'; import { useEmailVerification } from '../api/queries'; -import styled from 'styled-components'; +import { DEFAULT_URL, MODAL_ROUTES } from '../constants'; const Success = styled(Typography)` color: ${({ theme }) => theme.palette.success.main}; @@ -25,3 +27,14 @@ export const EmailVerification = () => { ); }; + +/* + * Email verification links redirect to the login page where the verification happens + */ +export const EmailVerificationRoute = () => { + let location = useLocation(); + const [searchParams] = useSearchParams(); + searchParams.set('modal', MODAL_ROUTES.LOGIN); + const queryString = searchParams.toString(); + return ; +}; diff --git a/packages/tupaia-web/src/pages/ModalRoutes.tsx b/packages/tupaia-web/src/pages/ModalRoutes.tsx index f116459307..d5145530cb 100644 --- a/packages/tupaia-web/src/pages/ModalRoutes.tsx +++ b/packages/tupaia-web/src/pages/ModalRoutes.tsx @@ -33,6 +33,8 @@ export const ModalRoutes = () => { const [searchParams, setSearchParams] = useSearchParams(); const modal = searchParams.get('modal') as typeof MODAL_ROUTES[keyof typeof MODAL_ROUTES]; + console.log('modal', modal); + // If no modal param or invalid modal param, return null if (!modal || !Object.values(MODAL_ROUTES).includes(modal)) return null; diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index ac0d0d60ec..6e879c4ceb 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -9,6 +9,6 @@ export { Project } from './Project'; export { Register } from './Register'; export { Projects } from './Projects'; export { RequestAccessForm } from './RequestAccessForm'; -export { EmailVerification } from './EmailVerification'; +export { EmailVerification, EmailVerificationRoute } from './EmailVerification'; export { VerifyEmailResend } from './VerifyEmailResend'; export { ModalRoutes } from './ModalRoutes'; From 1dffb529b228eb4da5bc28d23c4b733f0331ba30 Mon Sep 17 00:00:00 2001 From: Tom Caiger Date: Tue, 13 Jun 2023 14:43:16 +1200 Subject: [PATCH 143/251] review fixes --- packages/tupaia-web/src/Routes.tsx | 15 ++++++++++++++- packages/tupaia-web/src/constants/constants.ts | 6 +++++- .../tupaia-web/src/layout/UserMenu/UserMenu.tsx | 2 +- .../tupaia-web/src/pages/EmailVerification.tsx | 9 +++------ packages/tupaia-web/src/pages/Login.tsx | 6 ++---- packages/tupaia-web/src/pages/Projects.tsx | 2 +- .../tupaia-web/src/pages/Register/Register.tsx | 13 +++++-------- packages/tupaia-web/src/pages/Register/index.ts | 2 +- .../tupaia-web/src/pages/VerifyEmailResend.tsx | 3 +-- packages/tupaia-web/src/pages/index.ts | 2 +- 10 files changed, 34 insertions(+), 26 deletions(-) diff --git a/packages/tupaia-web/src/Routes.tsx b/packages/tupaia-web/src/Routes.tsx index 8ffa75122f..77f401828d 100644 --- a/packages/tupaia-web/src/Routes.tsx +++ b/packages/tupaia-web/src/Routes.tsx @@ -27,7 +27,7 @@ export const Routes = () => { } /> {/* Email verification links redirect to the login page where the verification happens */} } /> - {/* Redirect /login and /register to the correct routes just in case */} + {/* Redirect modal routes to the correct routes just in case */} { /> } /> + + } + /> } /> {/** Because react-router v 6.3 doesn't support optional url segments, we need to handle dashboardCode with a splat/catch-all instead */} } /> diff --git a/packages/tupaia-web/src/constants/constants.ts b/packages/tupaia-web/src/constants/constants.ts index e3a2f13d6b..897243f447 100644 --- a/packages/tupaia-web/src/constants/constants.ts +++ b/packages/tupaia-web/src/constants/constants.ts @@ -25,10 +25,14 @@ export const PROJECT_ACCESS_TYPES = { export const FORM_FIELD_VALIDATION = { EMAIL: { + required: 'Required', pattern: { value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i, message: 'invalid email address', }, }, - PASSWORD: { minLength: { value: 9, message: 'Must be at over 8 characters long' } }, + PASSWORD: { + required: 'Required', + minLength: { value: 9, message: 'Must be at over 8 characters long' }, + }, }; diff --git a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx index 176a86deab..3477515f28 100644 --- a/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx +++ b/packages/tupaia-web/src/layout/UserMenu/UserMenu.tsx @@ -75,7 +75,7 @@ export const UserMenu = () => { ); const ChangePassword = ( - Change password + Change password ); // The custom landing pages need different menu items to the other views const customLandingPageMenuItems = isLoggedIn ? [VisitMainSite, ChangePassword] : [VisitMainSite]; diff --git a/packages/tupaia-web/src/pages/EmailVerification.tsx b/packages/tupaia-web/src/pages/EmailVerification.tsx index a8f1953ee6..fcb937debc 100644 --- a/packages/tupaia-web/src/pages/EmailVerification.tsx +++ b/packages/tupaia-web/src/pages/EmailVerification.tsx @@ -20,12 +20,9 @@ const Error = styled(Typography)` export const EmailVerification = () => { const { isSuccess, isError } = useEmailVerification(); - return ( - <> - {isSuccess && Your e-mail was successfully verified} - {isError && Your email address could not be verified} - - ); + if (isSuccess) return Your e-mail was successfully verified; + if (isError) return Your email address could not be verified; + return null; }; /* diff --git a/packages/tupaia-web/src/pages/Login.tsx b/packages/tupaia-web/src/pages/Login.tsx index 2581eae65d..3173dde984 100644 --- a/packages/tupaia-web/src/pages/Login.tsx +++ b/packages/tupaia-web/src/pages/Login.tsx @@ -10,7 +10,7 @@ import Typography from '@material-ui/core/Typography'; import { useLogin } from '../api/mutations'; import { AuthModalBody, AuthModalButton, TextField } from '../components'; import { FORM_FIELD_VALIDATION, MODAL_ROUTES } from '../constants'; -import { EmailVerification } from './EmailVerification.tsx'; +import { EmailVerification } from './EmailVerification'; const ModalBody = styled(AuthModalBody)` width: 42rem; @@ -58,7 +58,6 @@ export const Login = () => { error={!!errors?.email} helperText={errors?.email && errors?.email.message} inputRef={register({ - required: 'Required', ...FORM_FIELD_VALIDATION.EMAIL, })} /> @@ -69,11 +68,10 @@ export const Login = () => { error={!!errors?.password} helperText={errors?.password && errors?.password.message} inputRef={register({ - required: 'Required', ...FORM_FIELD_VALIDATION.PASSWORD, })} /> - + Forgot password? diff --git a/packages/tupaia-web/src/pages/Projects.tsx b/packages/tupaia-web/src/pages/Projects.tsx index 30f3438375..4c11c8236a 100644 --- a/packages/tupaia-web/src/pages/Projects.tsx +++ b/packages/tupaia-web/src/pages/Projects.tsx @@ -107,7 +107,7 @@ export const Projects = () => { }; if (isLoggedIn) { LINK.TEXT = 'Request Access'; - LINK.URL = `/${MODAL_ROUTES.REQUEST_ACCESS}/${code}`; + LINK.URL = `?modal=${MODAL_ROUTES.REQUEST_ACCESS}&country${code}`; } return ( {LINK.TEXT} diff --git a/packages/tupaia-web/src/pages/Register/Register.tsx b/packages/tupaia-web/src/pages/Register/Register.tsx index acf8a58894..3f926113a3 100644 --- a/packages/tupaia-web/src/pages/Register/Register.tsx +++ b/packages/tupaia-web/src/pages/Register/Register.tsx @@ -38,12 +38,12 @@ const StyledCheckbox = styled(Checkbox)` const LinkText = styled(Typography)` font-weight: 400; - font-size: 11px; - line-height: 15px; - color: white; + font-size: 0.6875rem; + line-height: 1.4; + color: ${props => props.theme.palette.common.white}; a { - color: white; + color: ${props => props.theme.palette.common.white}; } ${AuthModalButton} + & { @@ -83,7 +83,7 @@ export const Register = () => { name="lastName" label="Last name *" error={!!errors?.lastName} - helperText={errors?.firstNalastNameme && errors?.lastName.message} + helperText={errors?.lastName && errors?.lastName.message} inputRef={register({ required: 'Required', })} @@ -95,7 +95,6 @@ export const Register = () => { error={!!errors?.emailAddress} helperText={errors?.emailAddress && errors?.emailAddress.message} inputRef={register({ - required: 'Required', ...FORM_FIELD_VALIDATION.EMAIL, })} /> @@ -113,7 +112,6 @@ export const Register = () => { error={!!errors?.password} helperText={errors?.password && errors?.password.message} inputRef={register({ - required: 'Required', ...FORM_FIELD_VALIDATION.PASSWORD, })} /> @@ -124,7 +122,6 @@ export const Register = () => { error={!!errors?.passwordConfirm} helperText={errors?.passwordConfirm && errors?.passwordConfirm.message} inputRef={register({ - required: 'Required', validate: value => value === getValues('password') || 'Passwords do not match.', ...FORM_FIELD_VALIDATION.PASSWORD, })} diff --git a/packages/tupaia-web/src/pages/Register/index.ts b/packages/tupaia-web/src/pages/Register/index.ts index d9fdf9b835..a2c9243c21 100644 --- a/packages/tupaia-web/src/pages/Register/index.ts +++ b/packages/tupaia-web/src/pages/Register/index.ts @@ -3,4 +3,4 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ -export { Register } from './Register.tsx'; +export { Register } from './Register'; diff --git a/packages/tupaia-web/src/pages/VerifyEmailResend.tsx b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx index e4c1ee0e61..ff16171a2d 100644 --- a/packages/tupaia-web/src/pages/VerifyEmailResend.tsx +++ b/packages/tupaia-web/src/pages/VerifyEmailResend.tsx @@ -17,7 +17,7 @@ const ModalBody = styled(AuthModalBody)` const CheckEmailMessage = styled.p` text-align: center; - padding: 0 15px; + padding: 0 0.9375rem; `; const StyledForm = styled.form` @@ -49,7 +49,6 @@ export const VerifyEmailResend = () => { error={!!errors?.email} helperText={errors?.email && errors?.email.message} inputRef={register({ - required: 'Required', ...FORM_FIELD_VALIDATION.EMAIL, })} /> diff --git a/packages/tupaia-web/src/pages/index.ts b/packages/tupaia-web/src/pages/index.ts index 6e879c4ceb..f1a2b6df3d 100644 --- a/packages/tupaia-web/src/pages/index.ts +++ b/packages/tupaia-web/src/pages/index.ts @@ -3,7 +3,7 @@ * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd */ export { LandingPage } from './LandingPage'; -export { Login } from './Login.tsx'; +export { Login } from './Login'; export { PasswordResetForm } from './PasswordResetForm'; export { Project } from './Project'; export { Register } from './Register'; From 581fd91149581056ed00efb7646ba2e283f651e7 Mon Sep 17 00:00:00 2001 From: Ethan McQuarrie <69437175+EMcQ-BES@users.noreply.github.com> Date: Tue, 13 Jun 2023 15:27:19 +1200 Subject: [PATCH 144/251] Fixup frontend epic CI/CD (#4633) * Add a stub test to tupaia-web, run tests correctly * Update ui-chart-components to run tests as typescript * Change ui-chart-component test file to *.ts * Regenerate types * Allow custom exports in types autocode * Regenerate types * Revert "Allow custom exports in types autocode" This reverts commit 05b97aeb15ce8916ed88ac82afc36fdc38e23804. * Move model-extra exports to index file * Fixup type errors in tupaia-web * Try regenning types again * Regenerate types one more time --- packages/tupaia-web/package.json | 2 +- .../tupaia-web/src/__tests__/example.test.ts | 11 + .../tupaia-web/src/layout/TopBar/Logo.tsx | 2 +- .../tupaia-web/src/layout/TopBar/TopBar.tsx | 4 +- packages/types/src/schemas/schemas.ts | 31 + packages/types/src/types/index.ts | 14 +- packages/types/src/types/models.ts | 1041 ++++++++--------- .../{jest.config.js => jest.config.ts} | 3 + ...onfig.test.js => parseChartConfig.test.ts} | 0 9 files changed, 579 insertions(+), 529 deletions(-) create mode 100644 packages/tupaia-web/src/__tests__/example.test.ts rename packages/ui-chart-components/{jest.config.js => jest.config.ts} (90%) rename packages/ui-chart-components/src/__tests__/{parseChartConfig.test.js => parseChartConfig.test.ts} (100%) diff --git a/packages/tupaia-web/package.json b/packages/tupaia-web/package.json index fd45156ed9..17ef3cf31b 100644 --- a/packages/tupaia-web/package.json +++ b/packages/tupaia-web/package.json @@ -24,7 +24,7 @@ "start-servers": "npm-run-all -c -l -p start-central-server start-entity-server start-report-server start-web-config-server start-data-table-server", "start-data-table-server": "yarn workspace @tupaia/data-table-server start-dev", "storybook": "storybook dev -p 6006", - "test": "node scripts/test.js --env=jsdom", + "test": "yarn package:test --env=jsdom", "start-ui-components": "yarn workspace @tupaia/ui-components build -w", "start-ui-chart-components": "yarn workspace @tupaia/ui-chart-components build -w", "start-ui-map-components": "yarn workspace @tupaia/ui-map-components build -w", diff --git a/packages/tupaia-web/src/__tests__/example.test.ts b/packages/tupaia-web/src/__tests__/example.test.ts new file mode 100644 index 0000000000..adb84549cb --- /dev/null +++ b/packages/tupaia-web/src/__tests__/example.test.ts @@ -0,0 +1,11 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd + * + */ + +describe('Example test', () => { + it('passes a stub test', () => { + expect(1).toBe(1); + }); +}); diff --git a/packages/tupaia-web/src/layout/TopBar/Logo.tsx b/packages/tupaia-web/src/layout/TopBar/Logo.tsx index 48623eeb27..c2d26d42dc 100644 --- a/packages/tupaia-web/src/layout/TopBar/Logo.tsx +++ b/packages/tupaia-web/src/layout/TopBar/Logo.tsx @@ -67,7 +67,7 @@ const LogoComponent = ({ interface LogoProps { logoSrc?: string; - displayName?: boolean; + displayName?: boolean | null; name?: string; } diff --git a/packages/tupaia-web/src/layout/TopBar/TopBar.tsx b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx index cc0d78ef6c..dc3fae8c97 100644 --- a/packages/tupaia-web/src/layout/TopBar/TopBar.tsx +++ b/packages/tupaia-web/src/layout/TopBar/TopBar.tsx @@ -14,8 +14,8 @@ const TOP_BAR_HEIGHT = 60; const TOP_BAR_HEIGHT_MOBILE = 50; /* Both min height and height must be specified due to bugs in Firefox flexbox, that means that topbar height will be ignored even if using flex-basis. */ const Header = styled.header<{ - $primaryColor?: string; - $secondaryColor?: string; + $primaryColor?: string | null; + $secondaryColor?: string | null; }>` background-color: ${({ $primaryColor, theme }) => $primaryColor || theme.palette.background.default}; diff --git a/packages/types/src/schemas/schemas.ts b/packages/types/src/schemas/schemas.ts index 024e0fe285..3a5c05ae10 100644 --- a/packages/types/src/schemas/schemas.ts +++ b/packages/types/src/schemas/schemas.ts @@ -26014,6 +26014,37 @@ export const SyncGroupLogSchema = { ] } +export const TupaiaWebSessionSchema = { + "properties": { + "access_policy": {}, + "access_token": { + "type": "string" + }, + "access_token_expiry": { + "type": "string" + }, + "email": { + "type": "string" + }, + "id": { + "type": "string" + }, + "refresh_token": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false, + "required": [ + "access_policy", + "access_token", + "access_token_expiry", + "email", + "id", + "refresh_token" + ] +} + export const UserAccountSchema = { "properties": { "creation_date": { diff --git a/packages/types/src/types/index.ts b/packages/types/src/types/index.ts index e14fbbd952..d92a21ae82 100644 --- a/packages/types/src/types/index.ts +++ b/packages/types/src/types/index.ts @@ -5,6 +5,18 @@ */ export * from './models'; -export { StandardReportConfig, CustomReportConfig } from './models-extra'; +export { + StandardReportConfig, + CustomReportConfig, + DashboardItemConfig, + BarChartConfig, + ComposedChartConfig, + GaugeChartConfig, + LineChartConfig, + PieChartConfig, + BaseChartConfig, + CartesianChartConfig, + ValueType, +} from './models-extra'; export * from './requests'; export * from './css'; diff --git a/packages/types/src/types/models.ts b/packages/types/src/types/models.ts index 9472cc5947..7560364286 100644 --- a/packages/types/src/types/models.ts +++ b/packages/types/src/types/models.ts @@ -7,682 +7,675 @@ * This file was generated by a tool. * Rerun generate:models to recreate this file. */ -import { KeysToCamelCase } from '../utils'; import { ReportConfig } from './models-extra'; import { DashboardItemConfig } from './models-extra'; -export { - DashboardItemConfig, - StandardReportConfig, - BarChartConfig, - ComposedChartConfig, - GaugeChartConfig, - LineChartConfig, - PieChartConfig, - BaseChartConfig, - CartesianChartConfig, - ValueType, -} from './models-extra'; - export interface AccessRequest { - approved?: boolean | null; - created_time?: Date; - entity_id?: string | null; - id: string; - message?: string | null; - note?: string | null; - permission_group_id?: string | null; - processed_by?: string | null; - processed_date?: Date | null; - project_id?: string | null; - user_id?: string | null; + 'approved'?: boolean | null; + 'created_time'?: Date; + 'entity_id'?: string | null; + 'id': string; + 'message'?: string | null; + 'note'?: string | null; + 'permission_group_id'?: string | null; + 'processed_by'?: string | null; + 'processed_date'?: Date | null; + 'project_id'?: string | null; + 'user_id'?: string | null; } export interface AdminPanelSession { - access_policy: any; - access_token: string; - access_token_expiry: string; - email: string; - id: string; - refresh_token: string; + 'access_policy': any; + 'access_token': string; + 'access_token_expiry': string; + 'email': string; + 'id': string; + 'refresh_token': string; } export interface Analytics { - answer_entity_m_row$?: string | null; - answer_m_row$?: string | null; - data_element_code?: string | null; - data_element_m_row$?: string | null; - data_group_code?: string | null; - date?: Date | null; - day_period?: string | null; - entity_code?: string | null; - entity_m_row$?: string | null; - entity_name?: string | null; - event_id?: string | null; - month_period?: string | null; - question_m_row$?: string | null; - survey_m_row$?: string | null; - survey_response_m_row$?: string | null; - type?: string | null; - value?: string | null; - week_period?: string | null; - year_period?: string | null; + 'answer_entity_m_row$'?: string | null; + 'answer_m_row$'?: string | null; + 'data_element_code'?: string | null; + 'data_element_m_row$'?: string | null; + 'data_group_code'?: string | null; + 'date'?: Date | null; + 'day_period'?: string | null; + 'entity_code'?: string | null; + 'entity_m_row$'?: string | null; + 'entity_name'?: string | null; + 'event_id'?: string | null; + 'month_period'?: string | null; + 'question_m_row$'?: string | null; + 'survey_m_row$'?: string | null; + 'survey_response_m_row$'?: string | null; + 'type'?: string | null; + 'value'?: string | null; + 'week_period'?: string | null; + 'year_period'?: string | null; } export interface AncestorDescendantRelation { - ancestor_id: string; - descendant_id: string; - entity_hierarchy_id: string; - generational_distance: number; - id: string; + 'ancestor_id': string; + 'descendant_id': string; + 'entity_hierarchy_id': string; + 'generational_distance': number; + 'id': string; } export interface Answer { - id: string; - m_row$?: string; - question_id: string; - survey_response_id: string; - text?: string | null; - type: string; + 'id': string; + 'm_row$'?: string; + 'question_id': string; + 'survey_response_id': string; + 'text'?: string | null; + 'type': string; } export interface ApiClient { - id: string; - secret_key_hash: string; - user_account_id?: string | null; - username: string; + 'id': string; + 'secret_key_hash': string; + 'user_account_id'?: string | null; + 'username': string; } export interface ApiRequestLog { - api: string; - endpoint: string; - id: string; - metadata?: any | null; - method?: string | null; - query?: any | null; - refresh_token?: string | null; - request_time?: Date | null; - user_id?: string | null; - version: number; + 'api': string; + 'endpoint': string; + 'id': string; + 'metadata'?: any | null; + 'method'?: string | null; + 'query'?: any | null; + 'refresh_token'?: string | null; + 'request_time'?: Date | null; + 'user_id'?: string | null; + 'version': number; } export interface Clinic { - category_code?: string | null; - code: string; - country_id: string; - geographical_area_id: string; - id: string; - name: string; - type?: string | null; - type_name?: string | null; + 'category_code'?: string | null; + 'code': string; + 'country_id': string; + 'geographical_area_id': string; + 'id': string; + 'name': string; + 'type'?: string | null; + 'type_name'?: string | null; } export interface Comment { - created_time?: Date; - id: string; - last_modified_time?: Date; - text: string; - user_id?: string | null; + 'created_time'?: Date; + 'id': string; + 'last_modified_time'?: Date; + 'text': string; + 'user_id'?: string | null; } export interface Country { - code: string; - id: string; - name: string; + 'code': string; + 'id': string; + 'name': string; } export interface Dashboard { - code: string; - id: string; - name: string; - root_entity_code: string; - sort_order?: number | null; + 'code': string; + 'id': string; + 'name': string; + 'root_entity_code': string; + 'sort_order'?: number | null; } export interface DashboardItem { - code: string; - config?: DashboardItemConfig; - id: string; - legacy?: boolean; - permission_group_ids?: string[] | null; - report_code?: string | null; + 'code': string; + 'config'?: DashboardItemConfig; + 'id': string; + 'legacy'?: boolean; + 'permission_group_ids'?: string[] | null; + 'report_code'?: string | null; } export interface DashboardRelation { - child_id: string; - dashboard_id: string; - entity_types: any; - id: string; - permission_groups: string[]; - project_codes: string[]; - sort_order?: number | null; + 'child_id': string; + 'dashboard_id': string; + 'entity_types': any; + 'id': string; + 'permission_groups': string[]; + 'project_codes': string[]; + 'sort_order'?: number | null; } export interface DataElement { - code: string; - config?: any; - id: string; - m_row$?: string; - permission_groups?: string[]; - service_type: ServiceType; + 'code': string; + 'config'?: any; + 'id': string; + 'm_row$'?: string; + 'permission_groups'?: string[]; + 'service_type': ServiceType; } export interface DataElementDataGroup { - data_element_id: string; - data_group_id: string; - id: string; + 'data_element_id': string; + 'data_group_id': string; + 'id': string; } export interface DataElementDataService { - country_code: string; - data_element_code: string; - id: string; - service_config?: any; - service_type: ServiceType; + 'country_code': string; + 'data_element_code': string; + 'id': string; + 'service_config'?: any; + 'service_type': ServiceType; } export interface DataGroup { - code: string; - config?: any; - id: string; - service_type: ServiceType; + 'code': string; + 'config'?: any; + 'id': string; + 'service_type': ServiceType; } export interface DataServiceEntity { - config: any; - entity_code: string; - id: string; + 'config': any; + 'entity_code': string; + 'id': string; } export interface DataServiceSyncGroup { - code: string; - config: any; - data_group_code: string; - id: string; - service_type: ServiceType; - sync_cursor?: string | null; - sync_status?: SyncGroupSyncStatus | null; + 'code': string; + 'config': any; + 'data_group_code': string; + 'id': string; + 'service_type': ServiceType; + 'sync_cursor'?: string | null; + 'sync_status'?: SyncGroupSyncStatus | null; } export interface DataTable { - code: string; - config?: any; - description?: string | null; - id: string; - permission_groups: string[]; - type: DataTableType; + 'code': string; + 'config'?: any; + 'description'?: string | null; + 'id': string; + 'permission_groups': string[]; + 'type': DataTableType; } export interface DhisInstance { - code: string; - config: any; - id: string; - readonly: boolean; + 'code': string; + 'config': any; + 'id': string; + 'readonly': boolean; } export interface DhisSyncLog { - data?: string | null; - deleted?: number | null; - dhis_reference?: string | null; - error_list?: string | null; - id: string; - ignored?: number | null; - imported?: number | null; - record_id: string; - record_type: string; - updated?: number | null; + 'data'?: string | null; + 'deleted'?: number | null; + 'dhis_reference'?: string | null; + 'error_list'?: string | null; + 'id': string; + 'ignored'?: number | null; + 'imported'?: number | null; + 'record_id': string; + 'record_type': string; + 'updated'?: number | null; } export interface DhisSyncQueue { - bad_request_count?: number | null; - change_time?: number | null; - details?: string | null; - id: string; - is_dead_letter?: boolean | null; - is_deleted?: boolean | null; - priority?: number | null; - record_id: string; - record_type: string; - type: string; + 'bad_request_count'?: number | null; + 'change_time'?: number | null; + 'details'?: string | null; + 'id': string; + 'is_dead_letter'?: boolean | null; + 'is_deleted'?: boolean | null; + 'priority'?: number | null; + 'record_id': string; + 'record_type': string; + 'type': string; } export interface Disaster { - countryCode: string; - description?: string | null; - id: string; - name: string; - type: DisasterType; + 'countryCode': string; + 'description'?: string | null; + 'id': string; + 'name': string; + 'type': DisasterType; } export interface DisasterEvent { - date: Date; - disasterId: string; - id: string; - organisationUnitCode: string; - type: DisasterEventType; + 'date': Date; + 'disasterId': string; + 'id': string; + 'organisationUnitCode': string; + 'type': DisasterEventType; } export interface Entity { - attributes?: any | null; - bounds?: any | null; - code: string; - country_code?: string | null; - id: string; - image_url?: string | null; - m_row$?: string; - metadata?: any | null; - name: string; - parent_id?: string | null; - point?: any | null; - region?: any | null; - type?: EntityType | null; + 'attributes'?: any | null; + 'bounds'?: any | null; + 'code': string; + 'country_code'?: string | null; + 'id': string; + 'image_url'?: string | null; + 'm_row$'?: string; + 'metadata'?: any | null; + 'name': string; + 'parent_id'?: string | null; + 'point'?: any | null; + 'region'?: any | null; + 'type'?: EntityType | null; } export interface EntityHierarchy { - canonical_types?: string[] | null; - id: string; - name: string; + 'canonical_types'?: string[] | null; + 'id': string; + 'name': string; } export interface EntityRelation { - child_id: string; - entity_hierarchy_id: string; - id: string; - parent_id: string; + 'child_id': string; + 'entity_hierarchy_id': string; + 'id': string; + 'parent_id': string; } export interface ErrorLog { - api_request_log_id?: string | null; - error_time?: Date | null; - id: string; - message?: string | null; - type?: string | null; + 'api_request_log_id'?: string | null; + 'error_time'?: Date | null; + 'id': string; + 'message'?: string | null; + 'type'?: string | null; } export interface ExternalDatabaseConnection { - code: string; - description?: string | null; - id: string; - name: string; - permission_groups?: string[]; + 'code': string; + 'description'?: string | null; + 'id': string; + 'name': string; + 'permission_groups'?: string[]; } export interface FeedItem { - country_id?: string | null; - creation_date?: Date | null; - geographical_area_id?: string | null; - id: string; - permission_group_id?: string | null; - record_id?: string | null; - template_variables?: Object | null; - type?: string | null; - user_id?: string | null; + 'country_id'?: string | null; + 'creation_date'?: Date | null; + 'geographical_area_id'?: string | null; + 'id': string; + 'permission_group_id'?: string | null; + 'record_id'?: string | null; + 'template_variables'?: Object | null; + 'type'?: string | null; + 'user_id'?: string | null; } export interface GeographicalArea { - code?: string | null; - country_id: string; - id: string; - level_code: string; - level_name: string; - name: string; - parent_id?: string | null; + 'code'?: string | null; + 'country_id': string; + 'id': string; + 'level_code': string; + 'level_name': string; + 'name': string; + 'parent_id'?: string | null; } export interface Indicator { - builder: string; - code: string; - config?: any; - id: string; + 'builder': string; + 'code': string; + 'config'?: any; + 'id': string; +} +export interface LandingPage { + 'contact_us'?: string | null; + 'extended_title'?: string | null; + 'external_link'?: string | null; + 'id': string; + 'image_url'?: string | null; + 'include_name_in_header'?: boolean | null; + 'logo_url'?: string | null; + 'long_bio'?: string | null; + 'name': string; + 'phone_number'?: string | null; + 'primary_hexcode'?: string | null; + 'project_codes'?: string[] | null; + 'secondary_hexcode'?: string | null; + 'url_segment': string; + 'website_url'?: string | null; } export interface LegacyReport { - code: string; - data_builder?: string | null; - data_builder_config?: any | null; - data_services?: any | null; - id: string; + 'code': string; + 'data_builder'?: string | null; + 'data_builder_config'?: any | null; + 'data_services'?: any | null; + 'id': string; } export interface LesmisSession { - access_policy: any; - access_token: string; - access_token_expiry: string; - email: string; - id: string; - refresh_token: string; + 'access_policy': any; + 'access_token': string; + 'access_token_expiry': string; + 'email': string; + 'id': string; + 'refresh_token': string; } export interface MapOverlay { - code: string; - config?: any; - country_codes?: string[] | null; - data_services?: any | null; - id?: string; - legacy?: boolean; - linked_measures?: string[] | null; - name: string; - permission_group: string; - project_codes?: string[] | null; - report_code?: string | null; + 'code': string; + 'config'?: any; + 'country_codes'?: string[] | null; + 'data_services'?: any | null; + 'id'?: string; + 'legacy'?: boolean; + 'linked_measures'?: string[] | null; + 'name': string; + 'permission_group': string; + 'project_codes'?: string[] | null; + 'report_code'?: string | null; } export interface MapOverlayGroup { - code: string; - id: string; - name: string; + 'code': string; + 'id': string; + 'name': string; } export interface MapOverlayGroupRelation { - child_id: string; - child_type: string; - id: string; - map_overlay_group_id: string; - sort_order?: number | null; + 'child_id': string; + 'child_type': string; + 'id': string; + 'map_overlay_group_id': string; + 'sort_order'?: number | null; } export interface MeditrakDevice { - app_version?: string | null; - config?: any | null; - id: string; - install_id: string; - platform?: string | null; - user_id: string; + 'app_version'?: string | null; + 'config'?: any | null; + 'id': string; + 'install_id': string; + 'platform'?: string | null; + 'user_id': string; } export interface MeditrakSyncQueue { - change_time?: number | null; - id: string; - record_id: string; - record_type: string; - type: string; + 'change_time'?: number | null; + 'id': string; + 'record_id': string; + 'record_type': string; + 'type': string; } export interface Ms1SyncLog { - count?: number | null; - data?: string | null; - endpoint?: string | null; - error_list?: string | null; - id: string; - record_id: string; - record_type: string; + 'count'?: number | null; + 'data'?: string | null; + 'endpoint'?: string | null; + 'error_list'?: string | null; + 'id': string; + 'record_id': string; + 'record_type': string; } export interface Ms1SyncQueue { - bad_request_count?: number | null; - change_time?: number | null; - details?: string | null; - id: string; - is_dead_letter?: boolean | null; - is_deleted?: boolean | null; - priority?: number | null; - record_id: string; - record_type: string; - type: string; + 'bad_request_count'?: number | null; + 'change_time'?: number | null; + 'details'?: string | null; + 'id': string; + 'is_dead_letter'?: boolean | null; + 'is_deleted'?: boolean | null; + 'priority'?: number | null; + 'record_id': string; + 'record_type': string; + 'type': string; } export interface OneTimeLogin { - creation_date?: Date | null; - id: string; - token: string; - use_date?: Date | null; - user_id: string; + 'creation_date'?: Date | null; + 'id': string; + 'token': string; + 'use_date'?: Date | null; + 'user_id': string; } export interface Option { - attributes?: any | null; - id: string; - label?: string | null; - option_set_id: string; - sort_order?: number | null; - value: string; + 'attributes'?: any | null; + 'id': string; + 'label'?: string | null; + 'option_set_id': string; + 'sort_order'?: number | null; + 'value': string; } export interface OptionSet { - id: string; - name: string; + 'id': string; + 'name': string; } export interface PermissionGroup { - id: string; - name: string; - parent_id?: string | null; + 'id': string; + 'name': string; + 'parent_id'?: string | null; } export interface PermissionsBasedMeditrakSyncQueue { - change_time?: number | null; - country_ids?: string[] | null; - entity_type?: EntityType | null; - id?: string | null; - permission_groups?: string[] | null; - record_id?: string | null; - record_type?: string | null; - type?: string | null; + 'change_time'?: number | null; + 'country_ids'?: string[] | null; + 'entity_type'?: EntityType | null; + 'id'?: string | null; + 'permission_groups'?: string[] | null; + 'record_id'?: string | null; + 'record_type'?: string | null; + 'type'?: string | null; } export interface Project { - code: string; - config?: any | null; - dashboard_group_name?: string | null; - default_measure?: string | null; - description?: string | null; - entity_hierarchy_id?: string | null; - entity_id?: string | null; - id: string; - image_url?: string | null; - logo_url?: string | null; - permission_groups?: string[] | null; - sort_order?: number | null; + 'code': string; + 'config'?: any | null; + 'dashboard_group_name'?: string | null; + 'default_measure'?: string | null; + 'description'?: string | null; + 'entity_hierarchy_id'?: string | null; + 'entity_id'?: string | null; + 'id': string; + 'image_url'?: string | null; + 'logo_url'?: string | null; + 'permission_groups'?: string[] | null; + 'sort_order'?: number | null; } export interface PsssSession { - access_policy: any; - access_token: string; - access_token_expiry: string; - email: string; - id: string; - refresh_token: string; + 'access_policy': any; + 'access_token': string; + 'access_token_expiry': string; + 'email': string; + 'id': string; + 'refresh_token': string; } export interface Question { - code?: string | null; - data_element_id?: string | null; - detail?: string | null; - hook?: string | null; - id: string; - m_row$?: string; - name?: string | null; - option_set_id?: string | null; - options?: string[] | null; - text: string; - type: string; + 'code'?: string | null; + 'data_element_id'?: string | null; + 'detail'?: string | null; + 'hook'?: string | null; + 'id': string; + 'm_row$'?: string; + 'name'?: string | null; + 'option_set_id'?: string | null; + 'options'?: string[] | null; + 'text': string; + 'type': string; } export interface RefreshToken { - device?: string | null; - expiry?: number | null; - id: string; - meditrak_device_id?: string | null; - token: string; - user_id: string; + 'device'?: string | null; + 'expiry'?: number | null; + 'id': string; + 'meditrak_device_id'?: string | null; + 'token': string; + 'user_id': string; } export interface Report { - code: string; - config: ReportConfig; - id: string; - permission_group_id: string; + 'code': string; + 'config': ReportConfig; + 'id': string; + 'permission_group_id': string; } export interface Setting { - id: string; - key: string; - value?: string | null; + 'id': string; + 'key': string; + 'value'?: string | null; } export interface SupersetInstance { - code: string; - config: any; - id: string; + 'code': string; + 'config': any; + 'id': string; } export interface Survey { - can_repeat?: boolean | null; - code: string; - country_ids?: string[] | null; - data_group_id?: string | null; - id: string; - integration_metadata?: any | null; - m_row$?: string; - name: string; - period_granularity?: PeriodGranularity | null; - permission_group_id?: string | null; - requires_approval?: boolean | null; - survey_group_id?: string | null; + 'can_repeat'?: boolean | null; + 'code': string; + 'country_ids'?: string[] | null; + 'data_group_id'?: string | null; + 'id': string; + 'integration_metadata'?: any | null; + 'm_row$'?: string; + 'name': string; + 'period_granularity'?: PeriodGranularity | null; + 'permission_group_id'?: string | null; + 'requires_approval'?: boolean | null; + 'survey_group_id'?: string | null; } export interface SurveyGroup { - id: string; - name: string; + 'id': string; + 'name': string; } export interface SurveyResponse { - approval_status?: ApprovalStatus | null; - assessor_name: string; - data_time?: Date | null; - end_time: Date; - entity_id: string; - id: string; - m_row$?: string; - metadata?: string | null; - outdated?: boolean | null; - start_time: Date; - survey_id: string; - timezone?: string | null; - user_id: string; + 'approval_status'?: ApprovalStatus | null; + 'assessor_name': string; + 'data_time'?: Date | null; + 'end_time': Date; + 'entity_id': string; + 'id': string; + 'm_row$'?: string; + 'metadata'?: string | null; + 'outdated'?: boolean | null; + 'start_time': Date; + 'survey_id': string; + 'timezone'?: string | null; + 'user_id': string; } export interface SurveyResponseComment { - comment_id: string; - id: string; - survey_response_id: string; + 'comment_id': string; + 'id': string; + 'survey_response_id': string; } export interface SurveyScreen { - id: string; - screen_number: number; - survey_id: string; + 'id': string; + 'screen_number': number; + 'survey_id': string; } export interface SurveyScreenComponent { - answers_enabling_follow_up?: string[] | null; - component_number: number; - config?: string | null; - detail_label?: string | null; - id: string; - is_follow_up?: boolean | null; - question_id: string; - question_label?: string | null; - screen_id: string; - validation_criteria?: string | null; - visibility_criteria?: string | null; + 'answers_enabling_follow_up'?: string[] | null; + 'component_number': number; + 'config'?: string | null; + 'detail_label'?: string | null; + 'id': string; + 'is_follow_up'?: boolean | null; + 'question_id': string; + 'question_label'?: string | null; + 'screen_id': string; + 'validation_criteria'?: string | null; + 'visibility_criteria'?: string | null; } export interface SyncGroupLog { - id: string; - log_message: string; - service_type: ServiceType; - sync_group_code: string; - timestamp?: Date | null; + 'id': string; + 'log_message': string; + 'service_type': ServiceType; + 'sync_group_code': string; + 'timestamp'?: Date | null; +} +export interface TupaiaWebSession { + 'access_policy': any; + 'access_token': string; + 'access_token_expiry': string; + 'email': string; + 'id': string; + 'refresh_token': string; } export interface UserAccount { - creation_date?: Date | null; - email: string; - employer?: string | null; - first_name?: string | null; - gender?: string | null; - id: string; - last_name?: string | null; - mobile_number?: string | null; - password_hash: string; - password_salt: string; - position?: string | null; - primary_platform?: PrimaryPlatform | null; - profile_image?: string | null; - verified_email?: VerifiedEmail | null; + 'creation_date'?: Date | null; + 'email': string; + 'employer'?: string | null; + 'first_name'?: string | null; + 'gender'?: string | null; + 'id': string; + 'last_name'?: string | null; + 'mobile_number'?: string | null; + 'password_hash': string; + 'password_salt': string; + 'position'?: string | null; + 'primary_platform'?: PrimaryPlatform | null; + 'profile_image'?: string | null; + 'verified_email'?: VerifiedEmail | null; } export interface UserEntityPermission { - entity_id?: string | null; - id: string; - permission_group_id?: string | null; - user_id?: string | null; + 'entity_id'?: string | null; + 'id': string; + 'permission_group_id'?: string | null; + 'user_id'?: string | null; } export interface UserFavouriteDashboardItem { - dashboard_item_id: string; - id: string; - user_id: string; + 'dashboard_item_id': string; + 'id': string; + 'user_id': string; } export interface UserSession { - access_token_expiry?: string; - accessPolicy?: any | null; - accessToken?: string | null; - id: string; - refreshToken: string; - userName: string; + 'access_token_expiry'?: string; + 'accessPolicy'?: any | null; + 'accessToken'?: string | null; + 'id': string; + 'refreshToken': string; + 'userName': string; } export enum VerifiedEmail { - 'unverified' = 'unverified', - 'new_user' = 'new_user', - 'verified' = 'verified', + 'unverified' = 'unverified', + 'new_user' = 'new_user', + 'verified' = 'verified', } export enum SyncGroupSyncStatus { - 'IDLE' = 'IDLE', - 'SYNCING' = 'SYNCING', - 'ERROR' = 'ERROR', + 'IDLE' = 'IDLE', + 'SYNCING' = 'SYNCING', + 'ERROR' = 'ERROR', } export enum ServiceType { - 'dhis' = 'dhis', - 'tupaia' = 'tupaia', - 'indicator' = 'indicator', - 'weather' = 'weather', - 'kobo' = 'kobo', - 'data-lake' = 'data-lake', - 'superset' = 'superset', + 'dhis' = 'dhis', + 'tupaia' = 'tupaia', + 'indicator' = 'indicator', + 'weather' = 'weather', + 'kobo' = 'kobo', + 'data-lake' = 'data-lake', + 'superset' = 'superset', } export enum PrimaryPlatform { - 'tupaia' = 'tupaia', - 'lesmis' = 'lesmis', + 'tupaia' = 'tupaia', + 'lesmis' = 'lesmis', } export enum PeriodGranularity { - 'yearly' = 'yearly', - 'quarterly' = 'quarterly', - 'monthly' = 'monthly', - 'weekly' = 'weekly', - 'daily' = 'daily', + 'yearly' = 'yearly', + 'quarterly' = 'quarterly', + 'monthly' = 'monthly', + 'weekly' = 'weekly', + 'daily' = 'daily', } export enum EntityType { - 'world' = 'world', - 'project' = 'project', - 'country' = 'country', - 'district' = 'district', - 'sub_district' = 'sub_district', - 'facility' = 'facility', - 'village' = 'village', - 'case' = 'case', - 'case_contact' = 'case_contact', - 'disaster' = 'disaster', - 'school' = 'school', - 'catchment' = 'catchment', - 'sub_catchment' = 'sub_catchment', - 'field_station' = 'field_station', - 'city' = 'city', - 'individual' = 'individual', - 'sub_facility' = 'sub_facility', - 'postcode' = 'postcode', - 'household' = 'household', - 'larval_habitat' = 'larval_habitat', - 'local_government' = 'local_government', - 'medical_area' = 'medical_area', - 'nursing_zone' = 'nursing_zone', - 'fetp_graduate' = 'fetp_graduate', - 'incident' = 'incident', - 'incident_reported' = 'incident_reported', - 'fiji_aspen_facility' = 'fiji_aspen_facility', - 'wish_sub_district' = 'wish_sub_district', - 'trap' = 'trap', - 'asset' = 'asset', - 'institute' = 'institute', - 'msupply_store' = 'msupply_store', - 'complaint' = 'complaint', - 'water_sample' = 'water_sample', + 'world' = 'world', + 'project' = 'project', + 'country' = 'country', + 'district' = 'district', + 'sub_district' = 'sub_district', + 'facility' = 'facility', + 'village' = 'village', + 'case' = 'case', + 'case_contact' = 'case_contact', + 'disaster' = 'disaster', + 'school' = 'school', + 'catchment' = 'catchment', + 'sub_catchment' = 'sub_catchment', + 'field_station' = 'field_station', + 'city' = 'city', + 'individual' = 'individual', + 'sub_facility' = 'sub_facility', + 'postcode' = 'postcode', + 'household' = 'household', + 'larval_habitat' = 'larval_habitat', + 'local_government' = 'local_government', + 'medical_area' = 'medical_area', + 'nursing_zone' = 'nursing_zone', + 'fetp_graduate' = 'fetp_graduate', + 'incident' = 'incident', + 'incident_reported' = 'incident_reported', + 'fiji_aspen_facility' = 'fiji_aspen_facility', + 'wish_sub_district' = 'wish_sub_district', + 'trap' = 'trap', + 'asset' = 'asset', + 'institute' = 'institute', + 'msupply_store' = 'msupply_store', + 'complaint' = 'complaint', + 'water_sample' = 'water_sample', } export enum DisasterType { - 'cyclone' = 'cyclone', - 'eruption' = 'eruption', - 'earthquake' = 'earthquake', - 'tsunami' = 'tsunami', - 'flood' = 'flood', + 'cyclone' = 'cyclone', + 'eruption' = 'eruption', + 'earthquake' = 'earthquake', + 'tsunami' = 'tsunami', + 'flood' = 'flood', } export enum DisasterEventType { - 'start' = 'start', - 'end' = 'end', - 'resolve' = 'resolve', + 'start' = 'start', + 'end' = 'end', + 'resolve' = 'resolve', } export enum DataTableType { - 'analytics' = 'analytics', - 'events' = 'events', - 'entity_relations' = 'entity_relations', - 'entities' = 'entities', - 'sql' = 'sql', - 'data_group_metadata' = 'data_group_metadata', - 'data_element_metadata' = 'data_element_metadata', - 'entity_attributes' = 'entity_attributes', + 'analytics' = 'analytics', + 'events' = 'events', + 'entity_relations' = 'entity_relations', + 'entities' = 'entities', + 'sql' = 'sql', + 'data_group_metadata' = 'data_group_metadata', + 'data_element_metadata' = 'data_element_metadata', + 'entity_attributes' = 'entity_attributes', } export enum DataSourceType { - 'dataElement' = 'dataElement', - 'dataGroup' = 'dataGroup', + 'dataElement' = 'dataElement', + 'dataGroup' = 'dataGroup', } export enum ApprovalStatus { - 'not_required' = 'not_required', - 'pending' = 'pending', - 'rejected' = 'rejected', - 'approved' = 'approved', -} - -export interface LandingPage { - contact_us?: string; - extended_title?: string; - external_link?: string; - id: string; - image_url?: string; - include_name_in_header?: boolean; - logo_url?: string; - long_bio?: string; - name: string; - phone_number?: string; - primary_hexcode?: string; - project_codes: string[]; - secondary_hexcode?: string; - url_segment: string; - website_url?: string; + 'not_required' = 'not_required', + 'pending' = 'pending', + 'rejected' = 'rejected', + 'approved' = 'approved', } diff --git a/packages/ui-chart-components/jest.config.js b/packages/ui-chart-components/jest.config.ts similarity index 90% rename from packages/ui-chart-components/jest.config.js rename to packages/ui-chart-components/jest.config.ts index d9e71e27bd..4cfdbbc0da 100644 --- a/packages/ui-chart-components/jest.config.js +++ b/packages/ui-chart-components/jest.config.ts @@ -3,7 +3,10 @@ * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd */ +import baseConfig from '../../jest.config-ts.json'; + module.exports = { + ...baseConfig, moduleDirectories: ['node_modules'], collectCoverageFrom: ['**/src/components/**/*.js'], // handle static assets @see https://jestjs.io/docs/webpack#handling-static-assets diff --git a/packages/ui-chart-components/src/__tests__/parseChartConfig.test.js b/packages/ui-chart-components/src/__tests__/parseChartConfig.test.ts similarity index 100% rename from packages/ui-chart-components/src/__tests__/parseChartConfig.test.js rename to packages/ui-chart-components/src/__tests__/parseChartConfig.test.ts From c8ca2d90ab5b2ca24f24bbf9887cfb982197f865 Mon Sep 17 00:00:00 2001 From: acdunham <129009580+acdunham@users.noreply.github.com> Date: Tue, 13 Jun 2023 15:35:55 +1200 Subject: [PATCH 145/251] WAITP-1203 Add map packages (#4631) * WAITP-1203 Add map packages * WAITP-1203 working basemap * Add tilepicker * WAITP-1203 working tile picker * WAITP-1203 Tidy up code * Update packages/tupaia-web/src/layout/MapLayout/MapLayout.tsx Co-authored-by: Tom Caiger --------- Co-authored-by: Tom Caiger --- packages/tupaia-web/.env.example | 1 + packages/tupaia-web/index.html | 6 ++ packages/tupaia-web/package.json | 3 + packages/tupaia-web/src/constants/index.ts | 1 + packages/tupaia-web/src/constants/mapbox.ts | 21 +++++++ .../tupaia-web/src/layout/MapLayout/Map.tsx | 59 ++++++++++++++++++ .../src/layout/MapLayout/MapLayout.tsx | 61 +++++++++++-------- .../src/layout/Sidebar/ExpandButton.tsx | 5 +- packages/ui-components/package.json | 1 - packages/ui-map-components/package.json | 1 + yarn.lock | 16 ++++- 11 files changed, 144 insertions(+), 31 deletions(-) create mode 100644 packages/tupaia-web/src/constants/mapbox.ts create mode 100644 packages/tupaia-web/src/layout/MapLayout/Map.tsx diff --git a/packages/tupaia-web/.env.example b/packages/tupaia-web/.env.example index f55aa581b2..0d548b7960 100644 --- a/packages/tupaia-web/.env.example +++ b/packages/tupaia-web/.env.example @@ -1 +1,2 @@ REACT_APP_TUPAIA_WEB_API_URL= +REACT_APP_MAPBOX_TOKEN= diff --git a/packages/tupaia-web/index.html b/packages/tupaia-web/index.html index a64e57b1a4..2efcd46a93 100644 --- a/packages/tupaia-web/index.html +++ b/packages/tupaia-web/index.html @@ -100,6 +100,12 @@ href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700&display=swap" crossorigin="anonymous" /> + Tupaia

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