From e2189dfea1d026d6fe6e486bfa7e795ae269a757 Mon Sep 17 00:00:00 2001 From: MJozefow Date: Thu, 7 Dec 2023 08:28:11 +0100 Subject: [PATCH] Release 1.9.2 --- config/webpack.config.js | 71 +- package-lock.json | 2158 ++++++++++++----- package.json | 6 +- pom.xml | 4 +- public/img/logo.png | Bin 16272 -> 0 bytes public/overrides.css | 25 +- public/overrides.js | 184 +- src/assets/img/logo.png | Bin 16272 -> 0 bytes src/components/App.tsx | 40 +- src/components/Routes.tsx | 3 +- src/components/common/Breadcrumbs.tsx | 6 +- src/components/common/Header.scss | 1 - src/components/common/InfiniteTable.tsx | 25 +- src/components/common/PagedTable.tsx | 7 +- .../radio-buttons/RadioButtons.test.tsx | 2 +- .../common/radio-buttons/RadioButtons.tsx | 2 +- .../common/time-picker/TimePicker.tsx | 8 +- src/components/conditions/Condition.tsx | 32 +- src/components/conditions/Conditions.tsx | 2 +- .../ColumnRow.tsx | 2 +- src/components/find-patient/FindPatient.tsx | 9 +- src/components/locations/Location.test.tsx | 33 +- src/components/locations/Location.tsx | 37 +- src/components/manage-regimens/Drug.tsx | 2 +- src/components/manage-regimens/Regimen.tsx | 10 +- .../manage-regimens/__test__/Drug.test.tsx | 3 +- .../NotificationConfiguration.tsx | 31 +- .../PatientFlagsOverview.tsx | 38 +- .../PatientFlagsOverviewSearch.tsx | 13 +- .../PatientFlagsOverviewTable.tsx | 45 +- src/components/register/Confirm.tsx | 8 +- src/components/register/RegistrationForm.tsx | 17 +- src/components/register/Step.tsx | 6 +- src/components/register/inputs/Select.tsx | 32 +- src/components/register/inputs/TimeInput.tsx | 8 +- src/components/translation/PropsWithIntl.tsx | 11 + .../translation/translation-provider.tsx | 59 + src/lang/en.json | 490 ---- src/lang/fr.json | 538 ---- src/lang/pt_BR.json | 513 ---- src/redux/reducers/apps.ts | 36 +- src/redux/reducers/index.ts | 5 + src/redux/reducers/patient-flags-overview.ts | 11 +- src/redux/reducers/project.ts | 55 + src/redux/reducers/translation-messages.ts | 59 + src/redux/reducers/user.ts | 5 +- src/shared/constants/app.tsx | 1 + src/shared/constants/location.ts | 1 + src/shared/constants/openmrs.tsx | 1 - .../constants/patient-flags-overview.ts | 3 +- src/shared/constants/routes.tsx | 2 +- src/shared/models/patient.ts | 1 + src/shared/util/date-util.ts | 24 + 53 files changed, 2110 insertions(+), 2575 deletions(-) delete mode 100644 public/img/logo.png delete mode 100644 src/assets/img/logo.png create mode 100644 src/components/translation/PropsWithIntl.tsx create mode 100644 src/components/translation/translation-provider.tsx delete mode 100644 src/lang/en.json delete mode 100644 src/lang/fr.json delete mode 100644 src/lang/pt_BR.json create mode 100644 src/redux/reducers/project.ts create mode 100644 src/redux/reducers/translation-messages.ts diff --git a/config/webpack.config.js b/config/webpack.config.js index 5f376b4..1a5e518 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -25,7 +25,6 @@ const safePostCssParser = require('postcss-safe-parser'); const ManifestPlugin = require('webpack-manifest-plugin'); const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); const WorkboxWebpackPlugin = require('workbox-webpack-plugin'); -const WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeModulesPlugin'); const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin'); const getCSSModuleLocalIdent = require('react-dev-utils/getCSSModuleLocalIdent'); const ESLintPlugin = require('eslint-webpack-plugin'); @@ -34,7 +33,6 @@ const modules = require('./modules'); const getClientEnvironment = require('./env'); const ModuleNotFoundPlugin = require('react-dev-utils/ModuleNotFoundPlugin'); const ForkTsCheckerWebpackPlugin = require('react-dev-utils/ForkTsCheckerWebpackPlugin'); -const typescriptFormatter = require('react-dev-utils/typescriptFormatter'); const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); const postcssNormalize = require('postcss-normalize'); @@ -578,11 +576,6 @@ module.exports = function (webpackEnv) { // a plugin that prints an error when you attempt to do this. // See https://github.com/facebook/create-react-app/issues/240 isEnvDevelopment && new CaseSensitivePathsPlugin(), - // If you require a missing module and then `npm install` it, you still have - // to restart the development server for webpack to discover it. This plugin - // makes the discovery automatic so you don't have to restart. - // See https://github.com/facebook/create-react-app/issues/186 - isEnvDevelopment && new WatchMissingNodeModulesPlugin(paths.appNodeModules), isEnvProduction && new MiniCssExtractPlugin({ // Options similar to the same options in webpackOptions.output @@ -633,31 +626,51 @@ module.exports = function (webpackEnv) { }), // TypeScript type checking useTypeScript && - new ForkTsCheckerWebpackPlugin({ - typescript: resolve.sync('typescript', { - basedir: paths.appNodeModules + new ForkTsCheckerWebpackPlugin({ + async: isEnvDevelopment, + typescript: { + typescriptPath: resolve.sync('typescript', { + basedir: paths.appNodeModules, }), - async: isEnvDevelopment, - checkSyntacticErrors: true, - resolveModuleNameModule: process.versions.pnp ? `${__dirname}/pnpTs.js` : undefined, - resolveTypeReferenceDirectiveModule: process.versions.pnp ? `${__dirname}/pnpTs.js` : undefined, - tsconfig: paths.appTsConfig, - reportFiles: [ - // This one is specifically to match during CI tests, - // as micromatch doesn't match - // '../cra-template-typescript/template/src/App.tsx' - // otherwise. + configOverwrite: { + compilerOptions: { + sourceMap: isEnvProduction + ? shouldUseSourceMap + : isEnvDevelopment, + skipLibCheck: true, + inlineSourceMap: false, + declarationMap: false, + noEmit: true, + incremental: true, + }, + }, + context: paths.appPath, + diagnosticOptions: { + syntactic: true, + }, + mode: 'write-references', + // profile: true, + }, + issue: { + // This one is specifically to match during CI tests, + // as micromatch doesn't match + // '../cra-template-typescript/template/src/App.tsx' + // otherwise. + include: [ '../**/src/**/*.{ts,tsx}', '**/src/**/*.{ts,tsx}', - '!**/src/**/__tests__/**', - '!**/src/**/?(*.)(spec|test).*', - '!**/src/setupProxy.*', - '!**/src/setupTests.*' - ], - silent: true, - // The formatter is invoked directly in WebpackDevServerUtils during development - formatter: isEnvProduction ? typescriptFormatter : undefined - }), + ].map(file => ({ file })), + exclude: [ + '**/src/**/__tests__/**', + '**/src/**/?(*.)(spec|test).*', + '**/src/setupProxy.*', + '**/src/setupTests.*', + ].map(file => ({ file })), + }, + logger: { + infrastructure: 'silent', + }, + }), !disableESLintPlugin && new ESLintPlugin({ // Plugin options diff --git a/package-lock.json b/package-lock.json index 044954c..706f585 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "cfl", - "version": "1.8.1-SNAPSHOT", + "version": "1.9.1-SNAPSHOT", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -40,6 +40,23 @@ "babel-runtime": "^6.26.0" } }, + "@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "requires": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "dependencies": { + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + } + } + }, "@babel/code-frame": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", @@ -1285,66 +1302,6 @@ } } }, - "@formatjs/ecma402-abstract": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.6.2.tgz", - "integrity": "sha512-aLBODrSRhHaL/0WdQ0T2UsGqRbdtRRHqqrs4zwNQoRsGBEtEAvlj/rgr6Uea4PSymVJrbZBoAyECM2Z3Pq4i0g==", - "requires": { - "tslib": "^2.1.0" - } - }, - "@formatjs/intl": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-1.8.2.tgz", - "integrity": "sha512-9xHoNKPv4qQIQ5AVfpQbIPZanz50i7oMtZWrd6Fz7Q2GM/5uhBr9mrCrY1tz/+diP7uguKmhj1IweLYaxY3DTQ==", - "requires": { - "@formatjs/ecma402-abstract": "1.6.2", - "@formatjs/intl-datetimeformat": "3.2.12", - "@formatjs/intl-displaynames": "4.0.10", - "@formatjs/intl-listformat": "5.0.10", - "@formatjs/intl-relativetimeformat": "8.1.2", - "fast-memoize": "^2.5.2", - "intl-messageformat": "9.5.2", - "intl-messageformat-parser": "6.4.2", - "tslib": "^2.1.0" - } - }, - "@formatjs/intl-datetimeformat": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/@formatjs/intl-datetimeformat/-/intl-datetimeformat-3.2.12.tgz", - "integrity": "sha512-qvY5+dl3vlgH0iWRXwl8CG9UkSVB5uP2+HH//fyZZ01G4Ww5rxMJmia1SbUqatpoe/dX+Z+aLejCqUUyugyL2g==", - "requires": { - "@formatjs/ecma402-abstract": "1.6.2", - "tslib": "^2.1.0" - } - }, - "@formatjs/intl-displaynames": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-4.0.10.tgz", - "integrity": "sha512-KmYJQHynGnnMeqIWVXhbzCMcEC8lg1TfGVdcO9May6paDT+dksZoOBQc741t7iXi/YVO/wXEZdmXhUNX7ODZug==", - "requires": { - "@formatjs/ecma402-abstract": "1.6.2", - "tslib": "^2.1.0" - } - }, - "@formatjs/intl-listformat": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-5.0.10.tgz", - "integrity": "sha512-FLtrtBPfBoeteRlYcHvThYbSW2YdJTllR0xEnk6cr/6FRArbfPRYMzDpFYlESzb5g8bpQMKZy+kFQ6V2Z+5KaA==", - "requires": { - "@formatjs/ecma402-abstract": "1.6.2", - "tslib": "^2.1.0" - } - }, - "@formatjs/intl-relativetimeformat": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-8.1.2.tgz", - "integrity": "sha512-LZUxbc9GHVGmDc4sqGAXugoxhvZV7EG2lG2c0aKERup2ixvmDMbbEN3iEEr5aKkP7YyGxXxgqDn2dwg7QCPR6Q==", - "requires": { - "@formatjs/ecma402-abstract": "1.6.2", - "tslib": "^2.1.0" - } - }, "@fortawesome/fontawesome-common-types": { "version": "0.2.35", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", @@ -1374,40 +1331,6 @@ "prop-types": "^15.7.2" } }, - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" - }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" - }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" - }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "requires": { - "@hapi/hoek": "^8.3.0" - } - }, "@hypnosphi/create-react-context": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", @@ -1955,6 +1878,49 @@ } } }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -2052,19 +2018,6 @@ "uuid": "^3.2.1" }, "dependencies": { - "intl-messageformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz", - "integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=", - "requires": { - "intl-messageformat-parser": "1.4.0" - } - }, - "intl-messageformat-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz", - "integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=" - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -2144,18 +2097,6 @@ } } }, - "react-intl": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-2.9.0.tgz", - "integrity": "sha512-27jnDlb/d2A7mSJwrbOBnUgD+rPep+abmoJE511Tf8BnoONIAUehy/U1zZCHGO17mnOwMWxqN4qC0nW11cD6rA==", - "requires": { - "hoist-non-react-statics": "^3.3.0", - "intl-format-cache": "^2.0.5", - "intl-messageformat": "^2.1.0", - "intl-relativeformat": "^2.1.0", - "invariant": "^2.1.1" - } - }, "react-router": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", @@ -2264,22 +2205,57 @@ } } }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, "@rollup/plugin-node-resolve": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", - "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "requires": { - "@rollup/pluginutils": "^3.0.8", - "@types/resolve": "0.0.8", + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", "is-module": "^1.0.0", - "resolve": "^1.14.2" + "resolve": "^1.19.0" + }, + "dependencies": { + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "requires": { + "has": "^1.0.3" + } + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } } }, "@rollup/plugin-replace": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.1.tgz", - "integrity": "sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "requires": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" @@ -2319,12 +2295,231 @@ } }, "@surma/rollup-plugin-off-main-thread": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", - "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", "requires": { - "ejs": "^2.6.1", - "magic-string": "^0.25.0" + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + }, + "dependencies": { + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "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.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", + "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-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "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-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "dependencies": { + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + } + } + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "dependencies": { + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + } + } + }, + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "requires": { + "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" + } + }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + } } }, "@svgr/babel-plugin-add-jsx-attribute": { @@ -2842,9 +3037,9 @@ } }, "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "requires": { "@types/node": "*" } @@ -2877,6 +3072,11 @@ "@types/jest": "*" } }, + "@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" + }, "@types/uglify-js": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.12.0.tgz", @@ -3232,9 +3432,9 @@ } }, "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==" }, "adjust-sourcemap-loader": { "version": "3.0.0", @@ -3500,6 +3700,15 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-filter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", @@ -3597,6 +3806,46 @@ "function-bind": "^1.1.1" } }, + "arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "dependencies": { + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } + } + }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -3734,6 +3983,11 @@ "postcss-value-parser": "^4.1.0" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -3782,14 +4036,6 @@ } } }, - "babel-extract-comments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", - "requires": { - "babylon": "^6.18.0" - } - }, "babel-jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", @@ -3976,20 +4222,6 @@ "@babel/helper-define-polyfill-provider": "^0.1.5" } }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, "babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", @@ -4246,11 +4478,6 @@ } } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -4586,9 +4813,9 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" }, "builtin-status-codes": { "version": "3.0.0", @@ -5164,9 +5391,9 @@ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" }, "commondir": { "version": "1.0.1", @@ -5519,9 +5746,9 @@ } }, "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "css": { "version": "2.2.4", @@ -6065,6 +6292,11 @@ "ip-regex": "^2.1.0" } }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -6506,9 +6738,12 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "requires": { + "jake": "^10.8.5" + } }, "electron-to-chromium": { "version": "1.3.677", @@ -6772,6 +7007,34 @@ "unbox-primitive": "^1.0.0" } }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -7060,7 +7323,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -7454,12 +7717,9 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "requires": { - "original": "^1.0.0" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.2.tgz", + "integrity": "sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA==" }, "evp_bytestokey": { "version": "1.0.3", @@ -7768,11 +8028,6 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "fast-memoize": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" - }, "fastq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", @@ -7883,12 +8138,38 @@ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "optional": true }, - "filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" - }, - "fill-range": { + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" + }, + "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", @@ -8011,6 +8292,14 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -8022,19 +8311,33 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", "requires": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -8062,6 +8365,40 @@ } } }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -8083,6 +8420,11 @@ } } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -8121,10 +8463,23 @@ "to-regex": "^3.0.2" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } }, "to-regex-range": { "version": "2.1.1", @@ -8217,6 +8572,11 @@ "minipass": "^3.0.0" } }, + "fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==" + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -8327,6 +8687,15 @@ "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -8389,6 +8758,14 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "requires": { + "define-properties": "^1.1.3" + } + }, "globby": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", @@ -8402,6 +8779,32 @@ "slash": "^3.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } + } + }, "graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", @@ -8419,12 +8822,11 @@ "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" }, "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" + "duplexer": "^0.1.2" } }, "hammerjs": { @@ -8489,11 +8891,32 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -8513,6 +8936,11 @@ "kind-of": "^4.0.0" }, "dependencies": { + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -8524,7 +8952,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "requires": { "is-buffer": "^1.1.5" } @@ -8824,6 +9252,14 @@ "micromatch": "^3.1.10" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -8844,17 +9280,61 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "requires": { "is-extendable": "^0.1.0" } } } }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -8865,7 +9345,7 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "requires": { "is-extendable": "^0.1.0" } @@ -8875,7 +9355,7 @@ "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "requires": { "kind-of": "^3.0.2" }, @@ -8883,7 +9363,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "requires": { "is-buffer": "^1.1.5" } @@ -8910,10 +9390,25 @@ "to-regex": "^3.0.2" } }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -8968,6 +9463,11 @@ "postcss": "^7.0.14" } }, + "idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, "identity-obj-proxy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", @@ -8992,9 +9492,9 @@ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" }, "immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" }, "immutable": { "version": "3.8.2", @@ -9129,23 +9629,17 @@ "integrity": "sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ==" }, "intl-messageformat": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.5.2.tgz", - "integrity": "sha512-sBGXcSQLyBuBA/kzAYhTpzhzkOGfSwGIau2W6FuwLZk0JE+VF3C+y0077FhVDOcRSi60iSfWzT8QC3Z7//dFxw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz", + "integrity": "sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw==", "requires": { - "fast-memoize": "^2.5.2", - "intl-messageformat-parser": "6.4.2", - "tslib": "^2.1.0" + "intl-messageformat-parser": "1.4.0" } }, "intl-messageformat-parser": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-6.4.2.tgz", - "integrity": "sha512-IVNGy24lNEYr/KPWId5tF3KXRHFFbMgzIMI4kUonNa/ide2ywUYyBuOUro1IBGZJqjA2ncBVUyXdYKlMfzqpAA==", - "requires": { - "@formatjs/ecma402-abstract": "1.6.2", - "tslib": "^2.1.0" - } + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz", + "integrity": "sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A==" }, "intl-relativeformat": { "version": "2.2.0", @@ -9153,21 +9647,6 @@ "integrity": "sha512-4bV/7kSKaPEmu6ArxXf9xjv1ny74Zkwuey8Pm01NH4zggPP7JHwg2STk8Y3JdspCKRDriwIyLRfEXnj2ZLr4Bw==", "requires": { "intl-messageformat": "^2.0.0" - }, - "dependencies": { - "intl-messageformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz", - "integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=", - "requires": { - "intl-messageformat-parser": "1.4.0" - } - }, - "intl-messageformat-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz", - "integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=" - } } }, "invariant": { @@ -9224,6 +9703,34 @@ "call-bind": "^1.0.0" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -9375,7 +9882,7 @@ "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, "is-negative-zero": { "version": "2.0.1", @@ -9465,6 +9972,14 @@ "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -9496,6 +10011,14 @@ "has-symbols": "^1.0.1" } }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "requires": { + "which-typed-array": "^1.1.11" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -9507,6 +10030,14 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -9646,6 +10177,75 @@ "istanbul-lib-report": "^3.0.0" } }, + "jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jest": { "version": "26.6.0", "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.0.tgz", @@ -11172,11 +11772,6 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -11222,15 +11817,27 @@ "universalify": "^2.0.0" } }, + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" + }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" + }, + "dependencies": { + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + } } }, "jsx-ast-utils": { @@ -11782,11 +12389,11 @@ "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=" }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "requires": { - "sourcemap-codec": "^1.4.4" + "sourcemap-codec": "^1.4.8" } }, "make-dir": { @@ -11865,6 +12472,14 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "requires": { + "fs-monkey": "^1.0.4" + } + }, "memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", @@ -11923,11 +12538,6 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, "micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", @@ -13867,16 +14477,6 @@ "version": "1.3.1", "bundled": true }, - "jsprim": { - "version": "1.4.1", - "bundled": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "latest-version": { "version": "3.1.0", "bundled": true, @@ -15774,12 +16374,13 @@ } }, "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, "opn": { @@ -15819,14 +16420,6 @@ "word-wrap": "^1.2.3" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "requires": { - "url-parse": "^1.4.3" - } - }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -16064,6 +16657,11 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", @@ -16253,7 +16851,7 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" } } }, @@ -19967,81 +20565,268 @@ } }, "react-dev-utils": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.3.tgz", - "integrity": "sha512-4lEA5gF4OHrcJLMUV1t+4XbNDiJbsAWCH5Z2uqlTqW6dD7Cf5nEASkeXrCI/Mz83sI2o527oBIFKVMXtRf1Vtg==", - "requires": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + } } }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + }, + "@babel/highlight": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, "browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "requires": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + } + }, + "caniuse-lite": { + "version": "1.0.30001522", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "electron-to-chromium": { + "version": "1.4.500", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.500.tgz", + "integrity": "sha512-P38NO8eOuWOKY1sQk5yE0crNtrjgjJj6r3NrbIKtG18KzCHmHE2Bt+aQA7/y0w3uYsHWxDa6icOohzjLJ4vJ4A==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + }, + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" } }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "p-limit": "^3.0.2" } }, "path-key": { @@ -20049,6 +20834,20 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -20062,6 +20861,14 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -20099,9 +20906,9 @@ } }, "react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, "react-fast-compare": { "version": "2.0.4", @@ -20145,21 +20952,15 @@ } }, "react-intl": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.13.2.tgz", - "integrity": "sha512-5NbfIjmA1+35dM4pusDj3xCgc5YgN4uAQealDW32M7IC2PykPmiQy8IZbTya/hYIZGFYpFSnvU3rUVGatqokFQ==", - "requires": { - "@formatjs/ecma402-abstract": "1.6.2", - "@formatjs/intl": "1.8.2", - "@formatjs/intl-displaynames": "4.0.10", - "@formatjs/intl-listformat": "5.0.10", - "@formatjs/intl-relativetimeformat": "8.1.2", - "@types/hoist-non-react-statics": "^3.3.1", - "fast-memoize": "^2.5.2", - "hoist-non-react-statics": "^3.3.2", - "intl-messageformat": "9.5.2", - "intl-messageformat-parser": "6.4.2", - "tslib": "^2.1.0" + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-2.9.0.tgz", + "integrity": "sha512-27jnDlb/d2A7mSJwrbOBnUgD+rPep+abmoJE511Tf8BnoONIAUehy/U1zZCHGO17mnOwMWxqN4qC0nW11cD6rA==", + "requires": { + "hoist-non-react-statics": "^3.3.0", + "intl-format-cache": "^2.0.5", + "intl-messageformat": "^2.1.0", + "intl-relativeformat": "^2.1.0", + "invariant": "^2.1.1" } }, "react-is": { @@ -20676,11 +21477,21 @@ } }, "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.5" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "redent": { @@ -21245,44 +22056,33 @@ } }, "rollup": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - } - }, - "rollup-plugin-babel": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", - "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "requires": { - "@babel/helper-module-imports": "^7.0.0", - "rollup-pluginutils": "^2.8.1" + "fsevents": "~2.3.2" } }, "rollup-plugin-terser": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", - "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", "requires": { - "@babel/code-frame": "^7.5.5", - "jest-worker": "^24.9.0", - "rollup-pluginutils": "^2.8.2", + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", "serialize-javascript": "^4.0.0", - "terser": "^4.6.2" + "terser": "^5.0.0" }, "dependencies": { - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - } + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "serialize-javascript": { "version": "4.0.0", @@ -21292,28 +22092,30 @@ "randombytes": "^2.1.0" } }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { - "has-flag": "^3.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "terser": { + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" } - } - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "requires": { - "estree-walker": "^0.6.1" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" } } }, @@ -21364,6 +22166,40 @@ } } }, + "safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -21377,6 +22213,43 @@ "ret": "~0.1.10" } }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + } + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -21790,9 +22663,9 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" }, "shellwords": { "version": "0.1.1", @@ -22432,13 +23305,9 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", - "requires": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" }, "strip-eof": { "version": "1.0.0", @@ -22539,6 +23408,11 @@ } } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", @@ -22629,24 +23503,30 @@ } }, "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" }, "tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "requires": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" }, "dependencies": { + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" } } }, @@ -23240,6 +24120,67 @@ "mime-types": "~2.1.24" } }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typed-styles": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", @@ -23354,11 +24295,11 @@ } }, "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "requires": { - "crypto-random-string": "^1.0.0" + "crypto-random-string": "^2.0.0" } }, "units-css": { @@ -23426,6 +24367,15 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -23483,9 +24433,9 @@ } }, "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -24836,206 +25786,254 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "workbox-background-sync": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz", - "integrity": "sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz", + "integrity": "sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==", "requires": { - "workbox-core": "^5.1.4" + "idb": "^7.0.1", + "workbox-core": "7.0.0" } }, "workbox-broadcast-update": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz", - "integrity": "sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz", + "integrity": "sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==", "requires": { - "workbox-core": "^5.1.4" + "workbox-core": "7.0.0" } }, "workbox-build": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.4.tgz", - "integrity": "sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow==", - "requires": { - "@babel/core": "^7.8.4", - "@babel/preset-env": "^7.8.4", - "@babel/runtime": "^7.8.4", - "@hapi/joi": "^15.1.0", - "@rollup/plugin-node-resolve": "^7.1.1", - "@rollup/plugin-replace": "^2.3.1", - "@surma/rollup-plugin-off-main-thread": "^1.1.1", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.0.0.tgz", + "integrity": "sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==", + "requires": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", "common-tags": "^1.8.0", "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "glob": "^7.1.6", - "lodash.template": "^4.5.0", + "lodash": "^4.17.20", "pretty-bytes": "^5.3.0", - "rollup": "^1.31.1", - "rollup-plugin-babel": "^4.3.3", - "rollup-plugin-terser": "^5.3.1", - "source-map": "^0.7.3", - "source-map-url": "^0.4.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", "stringify-object": "^3.3.0", - "strip-comments": "^1.0.2", - "tempy": "^0.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", "upath": "^1.2.0", - "workbox-background-sync": "^5.1.4", - "workbox-broadcast-update": "^5.1.4", - "workbox-cacheable-response": "^5.1.4", - "workbox-core": "^5.1.4", - "workbox-expiration": "^5.1.4", - "workbox-google-analytics": "^5.1.4", - "workbox-navigation-preload": "^5.1.4", - "workbox-precaching": "^5.1.4", - "workbox-range-requests": "^5.1.4", - "workbox-routing": "^5.1.4", - "workbox-strategies": "^5.1.4", - "workbox-streams": "^5.1.4", - "workbox-sw": "^5.1.4", - "workbox-window": "^5.1.4" + "workbox-background-sync": "7.0.0", + "workbox-broadcast-update": "7.0.0", + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-google-analytics": "7.0.0", + "workbox-navigation-preload": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-range-requests": "7.0.0", + "workbox-recipes": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0", + "workbox-streams": "7.0.0", + "workbox-sw": "7.0.0", + "workbox-window": "7.0.0" }, "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "requires": { - "graceful-fs": "^4.1.6" + "whatwg-url": "^7.0.0" } }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "requires": { + "punycode": "^2.1.0" + } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } } } }, "workbox-cacheable-response": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz", - "integrity": "sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz", + "integrity": "sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==", "requires": { - "workbox-core": "^5.1.4" + "workbox-core": "7.0.0" } }, "workbox-core": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.4.tgz", - "integrity": "sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.0.0.tgz", + "integrity": "sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==" }, "workbox-expiration": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.4.tgz", - "integrity": "sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.0.0.tgz", + "integrity": "sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==", "requires": { - "workbox-core": "^5.1.4" + "idb": "^7.0.1", + "workbox-core": "7.0.0" } }, "workbox-google-analytics": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz", - "integrity": "sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz", + "integrity": "sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==", "requires": { - "workbox-background-sync": "^5.1.4", - "workbox-core": "^5.1.4", - "workbox-routing": "^5.1.4", - "workbox-strategies": "^5.1.4" + "workbox-background-sync": "7.0.0", + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" } }, "workbox-navigation-preload": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz", - "integrity": "sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz", + "integrity": "sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==", "requires": { - "workbox-core": "^5.1.4" + "workbox-core": "7.0.0" } }, "workbox-precaching": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.4.tgz", - "integrity": "sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.0.0.tgz", + "integrity": "sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==", "requires": { - "workbox-core": "^5.1.4" + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" } }, "workbox-range-requests": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz", - "integrity": "sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz", + "integrity": "sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==", + "requires": { + "workbox-core": "7.0.0" + } + }, + "workbox-recipes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.0.0.tgz", + "integrity": "sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==", "requires": { - "workbox-core": "^5.1.4" + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" } }, "workbox-routing": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.4.tgz", - "integrity": "sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.0.0.tgz", + "integrity": "sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==", "requires": { - "workbox-core": "^5.1.4" + "workbox-core": "7.0.0" } }, "workbox-strategies": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.4.tgz", - "integrity": "sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.0.0.tgz", + "integrity": "sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==", "requires": { - "workbox-core": "^5.1.4", - "workbox-routing": "^5.1.4" + "workbox-core": "7.0.0" } }, "workbox-streams": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.4.tgz", - "integrity": "sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.0.0.tgz", + "integrity": "sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==", "requires": { - "workbox-core": "^5.1.4", - "workbox-routing": "^5.1.4" + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0" } }, "workbox-sw": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.4.tgz", - "integrity": "sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz", + "integrity": "sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==" }, "workbox-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-R1ZzCHPfzeJjLK2/TpKUhxSQ3fFDCxlWxgRhhSjMQLz3G2MlBnyw/XeYb34e7SGgSv0qG22zEhMIzjMNqNeKbw==", "requires": { - "@babel/runtime": "^7.5.5", - "fast-json-stable-stringify": "^2.0.0", - "source-map-url": "^0.4.0", - "upath": "^1.1.2", - "webpack-sources": "^1.3.0", - "workbox-build": "^5.1.4" + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "7.0.0" } }, "workbox-window": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.4.tgz", - "integrity": "sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz", + "integrity": "sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==", "requires": { - "workbox-core": "^5.1.4" + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.0.0" } }, "worker-farm": { @@ -25046,14 +26044,6 @@ "errno": "~0.1.7" } }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "requires": { - "microevent.ts": "~0.1.1" - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/package.json b/package.json index fa65ba2..02e2650 100644 --- a/package.json +++ b/package.json @@ -83,12 +83,12 @@ "react-bootstrap": "^0.32.3", "react-codemirror2": "^7.2.1", "react-datepicker": "^3.8.0", - "react-dev-utils": "^11.0.3", + "react-dev-utils": "^12.0.1", "react-dom": "^16.4.2", "react-dropzone": "^11.3.4", "react-infinite-scroll-component": "^6.1.0", "react-input-mask": "^2.0.4", - "react-intl": "^5.13.2", + "react-intl": "^2.4.0", "react-phone-number-input": "^3.1.17", "react-redux": "^5.1.2", "react-refresh": "^0.8.3", @@ -124,7 +124,7 @@ "webpack": "4.44.2", "webpack-dev-server": "3.11.1", "webpack-manifest-plugin": "2.2.0", - "workbox-webpack-plugin": "5.1.4" + "workbox-webpack-plugin": "7.0.0" }, "lint-staged": { "*.{json,ts,tsx,js,css,scss}": [ diff --git a/pom.xml b/pom.xml index 8810f8f..d4d3ca3 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.openmrs.owa openmrs-owa-cfl - 1.9.0 + 1.9.2 pom openmrs-owa-cfl OpenMRS CFL UI OWA @@ -13,7 +13,7 @@ scm:git:https://github.com/johnsonandjohnson/openmrs-owa-cfl.git scm:git:https://github.com/johnsonandjohnson/openmrs-owa-cfl.git https://github.com/johnsonandjohnson/openmrs-owa-cfl.git - 1.9.0 + 1.9.2 diff --git a/public/img/logo.png b/public/img/logo.png deleted file mode 100644 index b397af9f1ea12159b18ea79c6ae22953166299fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16272 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 diff --git a/public/overrides.css b/public/overrides.css index 6edc6ec..8d87dec 100644 --- a/public/overrides.css +++ b/public/overrides.css @@ -128,12 +128,6 @@ i.cfl-register-patient { margin-top: 0 !important; } -.homepage-heading { - font-size: 40px; - color: #333333; - padding-top: 1rem; -} - /** Breadcrumbs **/ #breadcrumbs { padding: 0 1rem 0; @@ -167,10 +161,6 @@ i.cfl-register-patient { display: none; } -#breadcrumbs li:first-child a::after { - content: 'Home'; -} - #breadcrumbs li i { display: none; } @@ -185,11 +175,6 @@ i.cfl-register-patient { content: none; } -/** Breadcrumbs - Visits **/ -#breadcrumbs > a:first-child::after { - content: 'Home'; -} - #breadcrumbs a:first-child { margin-left: 0; padding: 0; @@ -252,7 +237,7 @@ i.cfl-register-patient { } .patient-header .header-label { - min-width: 125px; + min-width: 150px; } .patient-header h1 { @@ -282,6 +267,11 @@ button.btn:hover { background-color: #00455c; } +button.btn-danger, +button.btn-danger:hover { + background: var(--danger) !important; +} + button.btn.cancel:hover { background-color: transparent; } @@ -710,6 +700,9 @@ tr:hover td:not(.allergyStatus) { color: black; } +/* +WARNING: This is not only for allergy, but at least for Program widget's enroll btn too. +*/ #content button, #allergy > #actions > input { background: #00455c; diff --git a/public/overrides.js b/public/overrides.js index 4c8bdac..4737d2a 100644 --- a/public/overrides.js +++ b/public/overrides.js @@ -8,15 +8,10 @@ * graphic logo is a trademark of OpenMRS Inc. */ -const CFL_UI_BASE = '/openmrs/owa/cfl/'; -const NODE_TYPE_ELEMENT = 1; -const NODE_TYPE_TEXT = 3; -const DATE_PICKER_PLACEHOLDER_REGEX = /\([dmy]{2,4}\/[dmy]{2,4}\/[dmy]{2,4}\)/g; const UNKNOWN_AGE = "unknown"; const UNKNOWN_GENDER = "U"; // Vanilla JS overrides - both for core OpenMRS and OWAs -window.addEventListener('load', redesignAllergyUI); window.addEventListener('load', addCollapseToTheHeader); // Override Patient Header both on load and on page change (OWAs) window.addEventListener('load', () => { @@ -28,50 +23,6 @@ window.addEventListener('load', () => { const jqr = (typeof $ === 'function' || typeof jQuery === 'function') && ($ || jQuery); jqr && jqr(function () { - /** General **/ - // OpenMRS bug: remove occasional (/undefined) from the System Administration breadcrumbs - setTimeout(function () { - elementReady('#breadcrumbs li:last-child:not(:empty)').then(element => { - element.textContent = element.textContent.replace('(/undefined)', ''); - }); - }, 100); - /** Home **/ - // add missing breadcrumb for the Homepage - const breadcrumbs = jqr('#breadcrumbs'); - if (breadcrumbs.is(':empty')) { - jqr('#breadcrumbs').append('Home'); - } - // add heading for the Home/System Administration dashboard - const dashboard = jqr('#body-wrapper > #content'); - if (!!dashboard.has('.row > #apps').length) { - dashboard.prepend('
Home
'); - } else if (!!dashboard.has('#tasks.row').length) { - dashboard.prepend('
System Administration
'); - } - /** Patient Dashboard **/ - // move all the widgets to the first column - const firstInfoContainer = jqr('.info-container:first-of-type'); - if (firstInfoContainer.length) { - const remainingContainersChildren = jqr('.info-container .info-section'); - remainingContainersChildren.detach().appendTo(firstInfoContainer); - } - // replace 'None' with '-NO DATA-' in each widget - const noDataLabel = "-NO DATA-"; - const emptyWidgetBody = `
${noDataLabel}
`; - - jqr('.info-body').each((_, widgetBody) => { - const text = jqr(widgetBody).find('li').text().trim() || jqr(widgetBody).find('p').text().trim() || jqr(widgetBody).text().trim(); - if (text.toLowerCase() === 'none' || text.toLowerCase() === 'unknown') { - jqr(widgetBody).replaceWith(emptyWidgetBody); - } else if (!text.length) { - jqr(widgetBody).append(noDataLabel); - jqr(widgetBody).addClass('empty'); - elementReady('ul > li', widgetBody).then(() => { - jqr(widgetBody).children().last().remove(); - jqr(widgetBody).removeClass('empty'); - }); - } - }); // replace the url of 'Patient profile', 'Caregiver profile' and 'Conditions' const searchParams = new URLSearchParams(window.location.search); if (searchParams.has('patientId')) { @@ -101,6 +52,7 @@ jqr && conditionsIcon.setAttribute('onclick', `location.href = '${CFL_UI_BASE}index.html#/conditions/${patientId}'`); } } + // Add hamburger menu for general actions (visible on smaller screens) const actionContainer = jqr('.action-container'); if (actionContainer.length) { @@ -121,99 +73,8 @@ jqr && ].join('\n') ); } - // HTML Forms bug: remove date picker placeholders - "(dd/mm/yyyy)" etc. - const htmlForm = document.getElementById('htmlform'); - if (!!htmlForm) { - removeDatePickerPlaceholders(htmlForm); - } - // AGRE-15: replace URLs of 'Add New Location' and 'Edit' buttons on 'Manage Locations' page - if (this.URL.includes('locations/manageLocations.page')) { - const addNewLocationButton = document.querySelector('#content > a.button'); - if (addNewLocationButton) { - addNewLocationButton.href = `${CFL_UI_BASE}index.html#/locations/create-location`; - } - const editLocationButtons = document.querySelectorAll('#content #list-locations .edit-action'); - if (editLocationButtons) { - editLocationButtons.forEach(button => { - const buttonOnClick = button.getAttribute('onclick'); - if (buttonOnClick && buttonOnClick.includes('locationId')) { - const regexp = /(?<=locationId=).+(?=&)/; - const locationId = buttonOnClick.match(regexp)[0]; - button.setAttribute('onclick', `location.href='${CFL_UI_BASE}index.html#/locations/edit-location/${locationId}'`); - } - }); - } - } - - if (this.URL.includes('accounts/manageAccounts.page')) { - const addNewUserAccount = document.querySelector('#content > a.button'); - const editUserAccount = document.querySelectorAll('#list-accounts .icon-pencil.edit-action'); - const pagination = document.querySelector('#list-accounts_wrapper > .datatables-info-and-pg'); - const accountFilterInput = document.querySelector('#list-accounts_filter input'); - - if (addNewUserAccount) { - addNewUserAccount.href = `${CFL_UI_BASE}index.html#/user-account`; - } - - if (editUserAccount.length) { - overrideEditUserAccountLinks(editUserAccount); - pagination && - pagination.addEventListener('click', function () { - overrideEditUserAccountLinks(document.querySelectorAll('#list-accounts .icon-pencil.edit-action')); - }); - accountFilterInput && - accountFilterInput.addEventListener('input', function () { - overrideEditUserAccountLinks(document.querySelectorAll('#list-accounts .icon-pencil.edit-action')); - }); - } - } }); -//redirects the user to CfL find patient page instead of the default one -const url = location.href; -if (url.endsWith('app=coreapps.findPatient')) { - window.location.href = '/openmrs/owa/cfl/index.html#/find-patient' -} - -function overrideEditUserAccountLinks(editUserAccoutLinks) { - editUserAccoutLinks.forEach(editUserAccoutLink => { - const currentLocationHref = editUserAccoutLink.getAttribute('onclick'); - const personIdPosition = currentLocationHref.indexOf('personId='); - const personId = currentLocationHref.slice(personIdPosition, currentLocationHref.length - 2); - - editUserAccoutLink.setAttribute('onclick', `location.href='${CFL_UI_BASE}index.html#/user-account?${personId}'`); - }); -} - -function redesignAllergyUI() { - const allergies = document.querySelector('#allergies'); - if (!!allergies) { - const title = document.querySelector('#content > h2'); - if (!!title) { - title.parentElement.removeChild(title); - } - const addAllergyButton = document.querySelector('#allergyui-addNewAllergy'); - if (!!addAllergyButton) { - addAllergyButton.parentElement.removeChild(addAllergyButton); - } - const cancelButton = document.querySelector('#content > button.cancel'); - if (!!cancelButton) { - cancelButton.classList.add('btn'); - } - const htmlLines = [ - '
', - '
', - '

Manage Allergies

', - 'Create, edit and delete Allergies', - addAllergyButton.outerHTML, - '
', - allergies.outerHTML, - '
' - ]; - allergies.replaceWith(...htmlToElements(htmlLines.join('\n'))); - } -} - function addCollapseToTheHeader() { elementReady('.user-options').then(userOptions => { const collapse = window.document.getElementById('navbarSupportedContent'); @@ -288,6 +149,7 @@ function overridePatientHeader() { if (status.length) { personStatus.textContent = status[1]?.trim(); } + var htmlLines = [ '
', '

' + fullName + ageAndGender + '

', @@ -323,14 +185,14 @@ function overridePatientHeader() { const deletePatient = document.querySelector('#org\\.openmrs\\.module\\.coreapps\\.deletePatient'); if (!!deletePatient) { const href = deletePatient.href; - htmlLines = htmlLines.concat(['']); + htmlLines = htmlLines.concat(['']); deletePatient.parentElement.removeChild(deletePatient); } const deleteCaregiver = document.querySelector('#cfl\\.personDashboard\\.deletePerson'); if (!!deleteCaregiver) { const href = deleteCaregiver.href; htmlLines = htmlLines.concat([ - '' ]); @@ -353,10 +215,30 @@ function overridePatientHeader() { } else { patientHeader.replaceWith(...updatedHeader); } - // add (age/gender) to the breadcrumb - elementReady('#breadcrumbs li:last-child:not(:empty)').then(element => { - element.textContent = element.textContent.replace(fullName, fullName + ageAndGender); - }); + + if(!new URL(window.location.href).pathname.includes("/htmlformentryui/htmlform")) { + // add (age/gender) to the breadcrumb + elementReady('#breadcrumbs li:last-child:not(:empty)').then(element => { + element.textContent = shownName + ageAndGender; + }); + } + + // Customize breadcrumbs for the allergies page + if (new URL(window.location.href).pathname.includes("/allergyui")) { + const homeBreadcrumb = $('#breadcrumbs li:first-child:not(:empty)'); + const nameBreadCrumb = homeBreadcrumb.next(); + + const urlParams = new URLSearchParams(window.location.search); + const patientUuid = urlParams.get('patientId'); + const patientDashboardURL = '/openmrs/coreapps/clinicianfacing/patient.page?patientId=' + patientUuid; + + const nameBreadCrumbWrapper = $('', { + href: patientDashboardURL, + text: fullName + ' ' + }); + + nameBreadCrumb.empty().append(nameBreadCrumbWrapper); + } }); } } @@ -426,13 +308,3 @@ function watchElementMutations(selector, callback, parentElement = document) { subtree: true }); } - -function removeDatePickerPlaceholders(node) { - if (node.nodeType === NODE_TYPE_TEXT) { - node.data = node.data.replace(DATE_PICKER_PLACEHOLDER_REGEX, ''); - } else if (node.nodeType === NODE_TYPE_ELEMENT) { - for (var i = 0; i < node.childNodes.length; i++) { - removeDatePickerPlaceholders(node.childNodes[i]); - } - } -} diff --git a/src/assets/img/logo.png b/src/assets/img/logo.png deleted file mode 100644 index b397af9f1ea12159b18ea79c6ae22953166299fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16272 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 diff --git a/src/components/App.tsx b/src/components/App.tsx index aca8bd0..6e89249 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -23,12 +23,7 @@ import '@openmrs/style-referenceapplication/lib/referenceapplication.css'; import { toast } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import { PROJECT_LOCATION_ATTRIBUTE_TYPE_NAME } from 'src/shared/constants/app'; -import { IntlProvider } from "react-intl"; -import { merge } from 'lodash'; -import flatten from 'flat'; -import messagesEN from '../lang/en.json' -import messagesFR from '../lang/fr.json' -import messagesPTBR from '../lang/pt_BR.json' +import TranslationProvider from './translation/translation-provider'; toast.configure(); @@ -36,13 +31,6 @@ export interface IAppProps extends StateProps, DispatchProps { } class App extends React.Component { - defaultLocale = 'en'; - localeMessages = { - en: flatten(messagesEN), - fr: flatten(messagesFR), - 'pt-BR': flatten(messagesPTBR) - }; - componentDidMount() { this.props.getSession(); } @@ -67,41 +55,25 @@ class App extends React.Component { return projectName; } - // Translation fallback: - // locale -> locale without region codes -> default locale without region codes - getMessagesForLocale = (locale) => { - const localeWithoutRegionCode = this.getLocaleWithoutRegionCode(locale); - const defaultLocaleWithoutRegionCode = this.getLocaleWithoutRegionCode(this.defaultLocale); - return merge({}, this.localeMessages[defaultLocaleWithoutRegionCode], this.localeMessages[localeWithoutRegionCode], this.localeMessages[locale]); - }; - - getLocaleWithoutRegionCode = (locale) => { - const regionCodeSeparatorRegex = /[_-]+/; - return locale.toLowerCase().split(regionCodeSeparatorRegex)[0]; - }; - render() { - const locale = this.props.locale ? this.props.locale : this.defaultLocale; - const messages = this.getMessagesForLocale(locale); - - return ( - + return ( +
-
+ ); } } -const mapStateToProps = ({session}) => ({ +const mapStateToProps = ({ session }) => ({ session: session.session, userLocation: session.session?.sessionLocation, locale: session.session?.locale.replace("_", "-") }); -const mapDispatchToProps = {getSession, getApps}; +const mapDispatchToProps = { getSession, getApps }; type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; diff --git a/src/components/Routes.tsx b/src/components/Routes.tsx index 534c663..151fbec 100644 --- a/src/components/Routes.tsx +++ b/src/components/Routes.tsx @@ -19,6 +19,7 @@ import Unauthorized from './common/Unauthorized'; import { Spinner } from 'reactstrap'; import Customize from './customize/customize'; import { routeConfig } from '../shared/constants/routes'; +import { injectIntl } from 'react-intl'; export interface IRoutesProps extends StateProps, DispatchProps {} @@ -69,4 +70,4 @@ const mapDispatchToProps = {}; type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; -export default connect(mapStateToProps, mapDispatchToProps)(Routes); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Routes)); diff --git a/src/components/common/Breadcrumbs.tsx b/src/components/common/Breadcrumbs.tsx index 1f410c8..1cf7209 100644 --- a/src/components/common/Breadcrumbs.tsx +++ b/src/components/common/Breadcrumbs.tsx @@ -12,7 +12,7 @@ import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; import withBreadcrumbs from 'react-router-breadcrumbs-hoc'; import './Breadcrumbs.scss'; -import { FormattedMessage } from 'react-intl'; +import { FormattedMessage, injectIntl } from 'react-intl'; import { nameParamVal, redirectUrl } from '../../shared/util/url-util'; import { ROOT_URL } from '../../shared/constants/openmrs'; import { connect } from 'react-redux'; @@ -25,7 +25,7 @@ export interface IBreadcrumbsProps extends StateProps, DispatchProps, RouteCompo breadcrumbs: any[]; } -class Breadcrumbs extends React.Component { +class Breadcrumbs extends React.Component> { routeBreadcrumbs = () => { const breadcrumbs = this.props.breadcrumbs; return breadcrumbs @@ -81,4 +81,4 @@ const mapDispatchToProps = {}; type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; -export default connect(mapStateToProps, mapDispatchToProps)(withBreadcrumbs(routeConfig)(withRouter(Breadcrumbs))); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(withBreadcrumbs(routeConfig)(withRouter(Breadcrumbs)))); diff --git a/src/components/common/Header.scss b/src/components/common/Header.scss index 750ba00..1f368e0 100644 --- a/src/components/common/Header.scss +++ b/src/components/common/Header.scss @@ -231,7 +231,6 @@ a:hover { } #app header .logo img { - content: url('../../assets/img/logo.png'); height: 30px !important; width: auto !important; } diff --git a/src/components/common/InfiniteTable.tsx b/src/components/common/InfiniteTable.tsx index 05d38c7..922e70d 100644 --- a/src/components/common/InfiniteTable.tsx +++ b/src/components/common/InfiniteTable.tsx @@ -10,7 +10,7 @@ import './Table.scss'; import './InfiniteTable.scss'; -import { FormattedMessage, useIntl } from 'react-intl'; +import { injectIntl } from 'react-intl'; import { Spinner, Table } from 'reactstrap'; import React from 'react'; import _ from 'lodash'; @@ -27,8 +27,7 @@ export interface InfiniteTableProps { getRecordLink?: any; } -const InfiniteTable = (props: InfiniteTableProps) => { - const intl = useIntl(); +const InfiniteTable = (props: PropsWithIntl) => { const handleRowClick = entity => { if (!!props.getRecordLink) { window.location.href = props.getRecordLink(entity); @@ -43,17 +42,21 @@ const InfiniteTable = (props: InfiniteTableProps) => { hasMore={props.hasNext} loader={
- +
} > - - {_.map(props.columns, (column, i) => ( - - ))} - + + {_.map(props.columns, (column, i) => ( + + ))} + {_.map(props.entities, (entity, i) => ( @@ -63,7 +66,7 @@ const InfiniteTable = (props: InfiniteTableProps) => { return ( ); })} @@ -75,4 +78,4 @@ const InfiniteTable = (props: InfiniteTableProps) => { ); }; -export default InfiniteTable; +export default injectIntl(InfiniteTable); diff --git a/src/components/common/PagedTable.tsx b/src/components/common/PagedTable.tsx index 278e80f..f7b8b8e 100644 --- a/src/components/common/PagedTable.tsx +++ b/src/components/common/PagedTable.tsx @@ -9,7 +9,7 @@ */ import './Table.scss'; -import { FormattedMessage, useIntl } from 'react-intl'; +import { FormattedMessage } from 'react-intl'; import { Pagination, PaginationItem, PaginationLink, Table } from 'reactstrap'; import React from 'react'; import _ from 'lodash'; @@ -37,8 +37,7 @@ const switchPage = (callback, page, enabled) => evt => { const MAX_PAGES_SHOWN = 5; const PAGE_DELTA = Math.floor((MAX_PAGES_SHOWN - 1) / 2); -const PagedTable = (props: PagedTableProps) => { - const intl = useIntl(); +const PagedTable = (props: PropsWithIntl) => { const handleRowClick = entity => { if (!!props.getRecordLink) { window.location.href = props.getRecordLink(entity); @@ -64,7 +63,7 @@ const PagedTable = (props: PagedTableProps) => { {_.map(props.entities, (entity, i) => ( handleRowClick(entity)}> {_.map(props.columns, column => ( - + ))} ))} diff --git a/src/components/common/radio-buttons/RadioButtons.test.tsx b/src/components/common/radio-buttons/RadioButtons.test.tsx index ff8b7ad..2c431a6 100644 --- a/src/components/common/radio-buttons/RadioButtons.test.tsx +++ b/src/components/common/radio-buttons/RadioButtons.test.tsx @@ -18,6 +18,6 @@ test('should render match snapshot', () => { { value: 'option2', label: 'option2' } ]; const onChange = jest.fn(); - const input = render(); + const input = render(); expect(input).toMatchSnapshot(); }); diff --git a/src/components/common/radio-buttons/RadioButtons.tsx b/src/components/common/radio-buttons/RadioButtons.tsx index 472b93a..599fa67 100644 --- a/src/components/common/radio-buttons/RadioButtons.tsx +++ b/src/components/common/radio-buttons/RadioButtons.tsx @@ -19,7 +19,7 @@ interface IRadioButtonOption { export interface IRadioButtonsProps { name: string; options: Array; - value: string; + value: string | undefined; onChange: (event: FormEvent) => void; } diff --git a/src/components/common/time-picker/TimePicker.tsx b/src/components/common/time-picker/TimePicker.tsx index 7071060..c63219e 100644 --- a/src/components/common/time-picker/TimePicker.tsx +++ b/src/components/common/time-picker/TimePicker.tsx @@ -20,9 +20,11 @@ export const TimePicker = ({ placeholder = null, showPlaceholder = false, value, - onChange + onChange, + onKeyDown = undefined }) => ( -
+
{!!showPlaceholder && {placeholder || EMPTY_STRING}}
-); +); \ No newline at end of file diff --git a/src/components/conditions/Condition.tsx b/src/components/conditions/Condition.tsx index dccb814..ca1527e 100644 --- a/src/components/conditions/Condition.tsx +++ b/src/components/conditions/Condition.tsx @@ -18,7 +18,7 @@ import { FormattedMessage, injectIntl } from 'react-intl'; import { getSettingByQuery } from '../../redux/reducers/settings'; import Select from 'react-select/creatable'; import '../Inputs.scss'; -import { DATE_FORMAT, isoDateString } from '../../shared/util/date-util'; +import { DATE_FORMAT, MONTH_NAMES_KEYS, WEEK_DAYS_KEYS, isoDateString } from '../../shared/util/date-util'; import DatePicker from 'react-datepicker'; import { RouteComponentProps, withRouter } from 'react-router-dom'; import { getCondition, saveCondition } from '../../redux/reducers/condition'; @@ -90,10 +90,10 @@ class Condition extends React.Component { const { condition, patient, match, conditionUpdated, conceptListClasses } = this.props; const id = match.params.patientUuid; if (prevProps.condition !== condition && !!condition) { - const { concept, status, onSetDate, endDate } = condition; + const { concept, status, onSetDate, endDate, conditionNonCoded } = condition; this.setState({ concept: concept && { - label: concept.name, + label: conditionNonCoded ? `"${conditionNonCoded}"` : concept.name, value: concept.uuid }, active: status === STATUS_ACTIVE, @@ -209,6 +209,30 @@ class Condition extends React.Component { getEndDate = () => !this.state.active ? isoDateString(this.state.endDate) : ''; + getDayLabelsKey = () => { + return WEEK_DAYS_KEYS.map(key => this.props.intl.formatMessage({ id: key })); + } + + getMonthLabelsKey = () => { + return MONTH_NAMES_KEYS.map(key => this.props.intl.formatMessage({ id: key })); + } + + getDatePickerLocaleConfig = () => { + const days = this.getDayLabelsKey(); + const months = this.getMonthLabelsKey(); + + const locale = { + localize: { + day: n => days[n], + month: n => months[n] + }, + formatLong: { + date: () => DATE_FORMAT + } + } + return locale; + } + render() { const { intl } = this.props; const conditionId = this.conditionId(); @@ -251,6 +275,7 @@ class Condition extends React.Component { showYearDropdown dropdownMode="select" dateFormat={DATE_FORMAT} + locale={this.getDatePickerLocaleConfig()} /> {this.state.onsetDate && {intl.formatMessage({ id: 'manageCondition.onsetDate' })}}
@@ -268,6 +293,7 @@ class Condition extends React.Component { showYearDropdown dropdownMode="select" dateFormat={DATE_FORMAT} + locale={this.getDatePickerLocaleConfig()} /> {this.state.onsetDate && {intl.formatMessage({ id: 'manageCondition.endDate' })}} diff --git a/src/components/conditions/Conditions.tsx b/src/components/conditions/Conditions.tsx index 2eb1b9c..634d7e5 100644 --- a/src/components/conditions/Conditions.tsx +++ b/src/components/conditions/Conditions.tsx @@ -93,7 +93,7 @@ class Condition extends React.Component { if (isActive === this.state.active) { return (
- +
{isColumnObject ? column.label : }
{isColumnObject ? props.intl.formatMessage({ + id: `columnNames.${column.label}`, + defaultMessage: column.label + }) : props.intl.formatMessage({ id: `columnNames.${column}`, defaultMessage: column })}
- {props.columnContent(entity, columnValue, intl)} + {props.columnContent(entity, columnValue, props.intl)}
{props.columnContent(entity, column, intl)}{props.columnContent(entity, column, props.intl)}
{lastCondition.concept?.name}{lastCondition.conditionNonCoded ? `"${lastCondition.conditionNonCoded}"` : lastCondition.concept?.name} {lastCondition.onSetDate && formatDate(intl, new Date(lastCondition.onSetDate))} diff --git a/src/components/find-patient-columns-configuration/ColumnRow.tsx b/src/components/find-patient-columns-configuration/ColumnRow.tsx index ec168b3..8389983 100644 --- a/src/components/find-patient-columns-configuration/ColumnRow.tsx +++ b/src/components/find-patient-columns-configuration/ColumnRow.tsx @@ -144,4 +144,4 @@ const mapDispatchToProps = { type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; -export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(ColumnRow)); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnRow)); diff --git a/src/components/find-patient/FindPatient.tsx b/src/components/find-patient/FindPatient.tsx index fbea18e..3955f88 100644 --- a/src/components/find-patient/FindPatient.tsx +++ b/src/components/find-patient/FindPatient.tsx @@ -23,6 +23,7 @@ import { PATIENT_PAGE_URL } from '../../shared/constants/openmrs'; import InfiniteTable from '../common/InfiniteTable'; import { COLUMNS_CONFIGURATION_SETTING_KEY, DEFAULT_COLUMNS } from '../../shared/constants/columns-configuration'; import { getSettingByQuery } from '../../redux/reducers/settings'; +import { DEFAULT_FIND_CAREGIVER_TABLE_COLUMNS } from 'src/shared/constants/patient'; export interface IPatientsProps extends StateProps, DispatchProps { intl: any; @@ -87,7 +88,7 @@ class FindPatient extends React.Component { return (

- +

{this.props.error}
@@ -115,7 +116,7 @@ class FindPatient extends React.Component {
{this.props.totalCount > 0 && ( { } } -const mapStateToProps = ({ cflPatient, settings: { setting } }) => ({ +const mapStateToProps = ({ cflPatient, apps }) => ({ patients: cflPatient.patients, loading: cflPatient.loading, error: cflPatient.errorMessage, @@ -139,7 +140,7 @@ const mapStateToProps = ({ cflPatient, settings: { setting } }) => ({ hasPrev: cflPatient.hasPrev, currentPage: cflPatient.currentPage, totalCount: cflPatient.totalCount, - tableColumns: setting?.value ? JSON.parse(setting.value) : DEFAULT_COLUMNS + tableColumns: (apps.findPatientTableColumns && apps.findPatientTableColumns) || DEFAULT_FIND_CAREGIVER_TABLE_COLUMNS }); const mapDispatchToProps = { search, reset, getSettingByQuery }; diff --git a/src/components/locations/Location.test.tsx b/src/components/locations/Location.test.tsx index 4aa24ca..bdd2448 100644 --- a/src/components/locations/Location.test.tsx +++ b/src/components/locations/Location.test.tsx @@ -15,25 +15,32 @@ import { Location, ILocationProps } from './Location'; import IntlShape from '../../mocks/Intl'; const initialProps: ILocationProps = { - intl: IntlShape, - loadingLocationAttributeTypes: false, - locationAttributeTypes: [], - locations: [], - success: false, - loadingLocation: false, + countryClusters: undefined, + countryNames: undefined, + countryOptions: undefined, editedLocation: null, - getLocationAttributeTypes: jest.fn(), - saveLocation: jest.fn(), - searchLocations: jest.fn(), + getConcept: undefined, getLocation: jest.fn(), + getLocationAttributeTypes: jest.fn(), + getProjectNames: undefined, + getSettingByQuery: undefined, history: null, + intl: IntlShape, + isLocationLoading: undefined, + location: undefined, + locationAttributeTypes: [], + locations: [], match: { params: {}, - isExact: null, - path: null, - url: null + isExact: false, + path: "", + url: "" }, - location: null + projects: undefined, + saveLocation: jest.fn(), + searchLocations: jest.fn(), + settingValue: undefined, + success: false }; const props: ILocationProps = { diff --git a/src/components/locations/Location.tsx b/src/components/locations/Location.tsx index bc88343..104cc31 100644 --- a/src/components/locations/Location.tsx +++ b/src/components/locations/Location.tsx @@ -39,10 +39,12 @@ import { REQUIRED_OCCURRENCE, COUNTRY_CODE_LOCATION_ATTRIBUTE_TYPE_UUID, CLUSTER_LOCATION_ATTRIBUTE_TYPE_UUID, + PROJECT_LOCATION_ATTRIBUTE_TYPE_UUID, MANDATORY_LOCATION_ATTRIBUTE_TYPE_UUID } from '../../shared/constants/location'; import { COUNTRY_CONCEPT_UUID, COUNTRY_CONCEPT_REPRESENTATION } from '../../shared/constants/concept'; import { IConceptSetMember } from '../../shared/models/concept'; +import { getProjectNames } from 'src/redux/reducers/project'; export interface ILocationProps extends StateProps, DispatchProps, RouteComponentProps { intl: IntlShape; @@ -71,6 +73,9 @@ interface IStore { concept: boolean; }; }; + project: { + projects: any[]; + }; } interface IUrlParams { @@ -94,12 +99,14 @@ export const Location = ({ match, settingValue, success, + projects, getConcept, getLocation, getLocationAttributeTypes, getSettingByQuery, saveLocation, - searchLocations + searchLocations, + getProjectNames }: ILocationProps) => { const [location, setLocation] = useState(DEFAULT_LOCATION); const [showValidationErrors, setShowValidationErrors] = useState(false); @@ -109,6 +116,7 @@ export const Location = ({ getLocationAttributeTypes(); searchLocations(); getSettingByQuery(LOCATION_DEFAULT_TAG_LIST_SETTING_KEY); + getProjectNames(); getConcept(COUNTRY_CONCEPT_UUID, COUNTRY_CONCEPT_REPRESENTATION); if (locationId) { getLocation(locationId); @@ -249,6 +257,25 @@ export const Location = ({ {showValidationErrors && isInvalid && }
); + } else if (locationAttributeTypeUuid === PROJECT_LOCATION_ATTRIBUTE_TYPE_UUID) { + const options: Array = projects.map(({ display, uuid }) => ({ label: display, value: uuid })); + const projectUuid = value ? value['uuid'] : ''; + return ( +
+ option.value === projectUuid)} + onChange={(option: IOption | null) => onChange(option?.value || '')} + options={options} + wrapperClassName={cx('flex-1', { invalid: showValidationErrors && isInvalid })} + classNamePrefix="default-select" + theme={selectDefaultTheme} + isClearable + /> + {showValidationErrors && isInvalid && } +
+ ); } else if (locationAttributeTypeUuid === COUNTRY_CODE_LOCATION_ATTRIBUTE_TYPE_UUID) { return (
@@ -326,7 +353,7 @@ export const Location = ({ {showValidationErrors && isInvalid && }
); - } + } }; return ( @@ -460,7 +487,8 @@ const mapStateToProps = ({ concept: { concept: { setMembers: countries }, loading: { concept: loadingConcept } - } + }, + project: { projects }, }: IStore) => ({ isLocationLoading: loadingLocationAttributeTypes || loadingLocation || loadingSetting || loadingConcept, locationAttributeTypes: locationAttributeTypes.filter(locationAttributeType => !locationAttributeType.retired), @@ -468,6 +496,7 @@ const mapStateToProps = ({ success, editedLocation, settingValue: setting?.value, + projects, countryOptions: countries .sort((countryA, countryB) => countryA.display.localeCompare(countryB.display)) .map(({ display }) => ({ label: display, value: display })), @@ -481,7 +510,7 @@ const mapStateToProps = ({ })) }); -const mapDispatchToProps = { getLocationAttributeTypes, searchLocations, saveLocation, getLocation, getSettingByQuery, getConcept }; +const mapDispatchToProps = { getLocationAttributeTypes, searchLocations, saveLocation, getLocation, getSettingByQuery, getConcept, getProjectNames }; type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; diff --git a/src/components/manage-regimens/Drug.tsx b/src/components/manage-regimens/Drug.tsx index 7686871..802ee80 100644 --- a/src/components/manage-regimens/Drug.tsx +++ b/src/components/manage-regimens/Drug.tsx @@ -196,4 +196,4 @@ const mapDispatchToProps = { type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; -export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(Drug)); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Drug)); diff --git a/src/components/manage-regimens/Regimen.tsx b/src/components/manage-regimens/Regimen.tsx index cdc9ddc..ee04893 100644 --- a/src/components/manage-regimens/Regimen.tsx +++ b/src/components/manage-regimens/Regimen.tsx @@ -104,7 +104,13 @@ const Regimen = ({ ); const bodyComponent = drugs.map((drug, drugIdx) => ( - + )); return ( @@ -135,4 +141,4 @@ const mapDispatchToProps = { type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; -export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(Regimen)); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Regimen)); diff --git a/src/components/manage-regimens/__test__/Drug.test.tsx b/src/components/manage-regimens/__test__/Drug.test.tsx index 275e125..1860e4e 100644 --- a/src/components/manage-regimens/__test__/Drug.test.tsx +++ b/src/components/manage-regimens/__test__/Drug.test.tsx @@ -9,7 +9,6 @@ */ import React from 'react'; -import en from '../../../lang/en.json'; import flatten from 'flat'; import userEvent from '@testing-library/user-event'; import { drugProps, invalidEmptyDrugProps } from '../../../mocks/Drug'; @@ -18,7 +17,7 @@ import { IntlProvider } from 'react-intl'; import { Drug } from '../Drug'; import '@testing-library/jest-dom'; -const messages = flatten(en); +const messages = flatten({}); describe('', () => { describe('with the set values', () => { diff --git a/src/components/notification-configuration/NotificationConfiguration.tsx b/src/components/notification-configuration/NotificationConfiguration.tsx index f0eff53..ecf1bf9 100644 --- a/src/components/notification-configuration/NotificationConfiguration.tsx +++ b/src/components/notification-configuration/NotificationConfiguration.tsx @@ -313,15 +313,6 @@ class NotificationConfiguration extends React.Component - @@ -367,15 +358,6 @@ class NotificationConfiguration extends React.Component - @@ -422,15 +404,6 @@ class NotificationConfiguration extends React.Component - @@ -647,9 +620,7 @@ class NotificationConfiguration extends React.Component { + isLoading, + intl, + patientFlagsOverviewTableColumns +}: PropsWithIntl) => { const usePrevious = value => { const ref = useRef(); @@ -52,7 +52,6 @@ const PatientFlagsOverview = ({ return ref.current; }; - const { formatMessage } = useIntl(); const prevSessionLocationUuid = usePrevious(sessionLocation?.uuid); const [inputValue, setInputValue] = useState(EMPTY_STRING); const [flagName, setFlagName] = useState(EMPTY_STRING); @@ -60,10 +59,6 @@ const PatientFlagsOverview = ({ const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); const [isSelectFilterTextEnabled, setInitialTextEnabled] = useState(true); - useEffect(() => { - getAppById(PATIENT_FLAGS_OVERVIEW_APP_NAME); - }, []) - useEffect(() => { getPatientFlags(); }, [getPatientFlags]); @@ -81,6 +76,7 @@ const PatientFlagsOverview = ({ if (inputValue || flagName) { setInitialTextEnabled(false); } + }, [getFlaggedPatientsOverview, sessionLocation?.uuid, inputValue, flagName, page, pageSize, prevSessionLocationUuid]); return ( @@ -92,8 +88,8 @@ const PatientFlagsOverview = ({ ) : ( <>
-

{formatMessage({ id: 'patientFlagsOverview.title' })}

-
{formatMessage({ id: 'patientFlagsOverview.description' })}
+

{intl.formatMessage({ id: 'patientFlagsOverview.title' })}

+
{intl.formatMessage({ id: 'patientFlagsOverview.description' })}
- {isSelectFilterTextEnabled ? formatMessage({ id: 'patientFlagsOverview.pleaseSelectFilter' }) : ''} + {isSelectFilterTextEnabled ? intl.formatMessage({ id: 'patientFlagsOverview.pleaseSelectFilter' }) : ''}
)} @@ -136,7 +132,8 @@ const mapStateToProps = ({ } }, apps: { - appLoading + appLoading, + patientFlagsOverviewTableColumns } }: IStore) => ({ sessionLocation, @@ -147,12 +144,13 @@ const mapStateToProps = ({ showMessageError, flaggedPatients, totalCount, - isLoading: appLoading || flagsLoading + isLoading: appLoading || flagsLoading, + patientFlagsOverviewTableColumns }); -const mapDispatchToProps = { getPatientFlags, getFlaggedPatientsOverview, getAppById }; +const mapDispatchToProps = { getPatientFlags, getFlaggedPatientsOverview }; type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; -export default connect(mapStateToProps, mapDispatchToProps)(PatientFlagsOverview); \ No newline at end of file +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(PatientFlagsOverview)); \ No newline at end of file diff --git a/src/components/patient-flags-overview/PatientFlagsOverviewSearch.tsx b/src/components/patient-flags-overview/PatientFlagsOverviewSearch.tsx index 117ac31..c24438e 100644 --- a/src/components/patient-flags-overview/PatientFlagsOverviewSearch.tsx +++ b/src/components/patient-flags-overview/PatientFlagsOverviewSearch.tsx @@ -9,8 +9,8 @@ */ import React from 'react'; import Select from 'react-select'; -import { useIntl } from 'react-intl'; import { IFlag } from '../../shared/models/patient-flags-overview'; +import { injectIntl } from 'react-intl'; interface IPatientFlagsOverviewSearchProps { flags: IFlag[], @@ -19,10 +19,9 @@ interface IPatientFlagsOverviewSearchProps { const PatientFlagsOverviewSearch = ({ flags, - setFlagName -}: IPatientFlagsOverviewSearchProps) => { - const { formatMessage } = useIntl(); - + setFlagName, + intl +}: PropsWithIntl) => { const handleSelectOnChange = ({ name }) => { setFlagName(name) }; @@ -40,10 +39,10 @@ const PatientFlagsOverviewSearch = ({ classNamePrefix="flags-select" options={flagOptions} onChange={handleSelectOnChange} - placeholder={formatMessage({ id: 'patientFlagsOverview.selectPatientFlagsPlaceholder' })} + placeholder={intl.formatMessage({ id: 'patientFlagsOverview.selectPatientFlagsPlaceholder' })} /> ) }; -export default PatientFlagsOverviewSearch; \ No newline at end of file +export default injectIntl(PatientFlagsOverviewSearch); \ No newline at end of file diff --git a/src/components/patient-flags-overview/PatientFlagsOverviewTable.tsx b/src/components/patient-flags-overview/PatientFlagsOverviewTable.tsx index 59c517e..0d1eed0 100644 --- a/src/components/patient-flags-overview/PatientFlagsOverviewTable.tsx +++ b/src/components/patient-flags-overview/PatientFlagsOverviewTable.tsx @@ -9,12 +9,12 @@ */ import React from 'react'; import ReactTable from 'react-table'; -import { useIntl } from 'react-intl'; import { IFlaggedPatient } from '../../shared/models/patient-flags-overview'; import { PATIENT_PAGE_URL } from '../../shared/constants/openmrs'; import { DEFAULT_PAGE_SIZE, PAGE_SIZE_OPTIONS, DEFAULT_COLUMNS } from '../../shared/constants/patient-flags-overview'; import { ZERO } from '../../shared/constants/input'; import { connect } from 'react-redux'; +import { injectIntl } from 'react-intl'; interface IPatientFlagsOverviewTableProps { flaggedPatientsLoading: boolean, @@ -24,8 +24,8 @@ interface IPatientFlagsOverviewTableProps { setPage: (page: number) => void, setPageSize: (pageSize: number) => void, pageSize: number, - showNoDataComponent: boolean, - app: any + app: any, + patientFlagsOverviewTableColumns: any } const PatientFlagsOverviewTable = ({ @@ -36,11 +36,10 @@ const PatientFlagsOverviewTable = ({ setPage, setPageSize, pageSize, - showNoDataComponent, - app -}: IPatientFlagsOverviewTableProps) => { - - const { formatMessage } = useIntl(); + app, + intl, + patientFlagsOverviewTableColumns +}: PropsWithIntl) => { const fetchData = ({ page, pageSize }) => { setPage(page); @@ -52,12 +51,11 @@ const PatientFlagsOverviewTable = ({ }; const getColumnsToDisplay = () => { - if (app && app.config && app.config.tableColumns) { - const tableColumnsConfig = app.config.tableColumns; - return Object.keys(tableColumnsConfig).map(obj => { + if (patientFlagsOverviewTableColumns) { + return Object.keys(patientFlagsOverviewTableColumns).map(obj => { return { - label: formatMessage({ id: `${obj}` }), - value: tableColumnsConfig[obj] + label: intl.formatMessage({ id: `${obj}` }), + value: patientFlagsOverviewTableColumns[obj] } }); } else { @@ -77,16 +75,23 @@ const PatientFlagsOverviewTable = ({ if (totalCount > 0) { return ( - {totalCount} {formatMessage({ id: 'patientFlagsOverview.recordsFound' })} + {totalCount} {intl.formatMessage({ id: 'patientFlagsOverview.recordsFound' })} ); } else if (showMessageError) { - return formatMessage({ id: 'patientFlagsOverview.somethingWentWrong' }); + return intl.formatMessage({ id: 'patientFlagsOverview.somethingWentWrong' }); } else if (!loading && totalCount === 0) { - return formatMessage({ id: 'patientFlagsOverview.noRecords' }); + return intl.formatMessage({ id: 'patientFlagsOverview.noRecords' }); } }; + const previousText = intl.formatMessage({ id: 'common.table.previousLabel' }); + const nextText = intl.formatMessage({ id: 'common.table.nextLabel' }); + const loadingText = intl.formatMessage({ id: 'common.table.loadingLabel' }); + const pageText = intl.formatMessage({ id: 'common.table.pageLabel' }); + const ofText = intl.formatMessage({ id: 'common.table.ofLabel' }); + const rowsText = intl.formatMessage({ id: 'common.table.resultsLabel' }); + return ( <>
@@ -112,6 +117,12 @@ const PatientFlagsOverviewTable = ({ onClick: () => onRowClick(patientUuid) })} columns={tableColumns} + nextText={nextText} + previousText={previousText} + pageText={pageText} + ofText={ofText} + rowsText={rowsText} + loadingText={loadingText} /> ) @@ -121,4 +132,4 @@ const mapStateToProps = ({ apps: { app } }) => ({ app }); -export default connect(mapStateToProps)(PatientFlagsOverviewTable); \ No newline at end of file +export default injectIntl(connect(mapStateToProps)(PatientFlagsOverviewTable)); \ No newline at end of file diff --git a/src/components/register/Confirm.tsx b/src/components/register/Confirm.tsx index b9ab883..834b09b 100644 --- a/src/components/register/Confirm.tsx +++ b/src/components/register/Confirm.tsx @@ -111,8 +111,12 @@ class Confirm extends React.Component { sections = patient => { const { steps, settings: { settings } } = this.props; const sections = [] as any[]; + const stepsToShow = steps.map(step => ({ + ...step, + fields: step.fields.filter(({ showOnSummary = true }) => showOnSummary) + })); - steps.forEach(step => { + stepsToShow.forEach(step => { const locField = step.fields.find(field => field.optionSource === LOCATIONS_OPTION_SOURCE); const addressFields = step.fields.find(({ type }) => type === INPUT_ADDRESS_FIELDS_TYPE); const foundSetting = settings.find(({ property }) => property === addressFields?.optionUuid); @@ -219,4 +223,4 @@ const mapDispatchToProps = {}; type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; -export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(Confirm)); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Confirm)); diff --git a/src/components/register/RegistrationForm.tsx b/src/components/register/RegistrationForm.tsx index 43cbeb9..9b25ca0 100644 --- a/src/components/register/RegistrationForm.tsx +++ b/src/components/register/RegistrationForm.tsx @@ -108,7 +108,13 @@ class RegistrationForm extends React.Component _.isEmpty(_.pickBy(this.state.stepValidity, step => !step.isValid)) && this.customRequiredElementsChecked(); - + customRequiredElementsChecked = () => { const { patient } = this.state; const { confirmPageCustomElements } = this.props; @@ -281,7 +287,7 @@ class RegistrationForm extends React.Component { - const { confirmPageCustomElements } = this.props; + const { confirmPageCustomElements } = this.props; return ( <>
@@ -398,7 +404,7 @@ class RegistrationForm extends React.Component ({ +const mapStateToProps = ({ registration, cflPatient, cflPerson, apps, settings, concept, openmrs: { session: { sessionLocation }} }) => ({ loading: registration.loading, success: registration.success, message: registration.message, @@ -411,7 +417,8 @@ const mapStateToProps = ({ registration, cflPatient, cflPerson, apps, settings, caregiverSteps: apps.caregiverRegistrationSteps || caregiverDefaultSteps, registrationRedirectUrl: apps.registrationRedirectUrl || DEFAULT_REGISTRATION_FORM_REDIRECT, settingsLoading: apps.loading || registration.loading || settings.loading || concept.loading.concept, - confirmPageCustomElements: apps.confirmPageCustomElements || [] + confirmPageCustomElements: apps.confirmPageCustomElements || [], + sessionLocation }); const mapDispatchToProps = { @@ -431,4 +438,4 @@ const mapDispatchToProps = { type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; -export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(withRouter(RegistrationForm))); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(withRouter(RegistrationForm))); diff --git a/src/components/register/Step.tsx b/src/components/register/Step.tsx index 04b8ab4..30d6dce 100644 --- a/src/components/register/Step.tsx +++ b/src/components/register/Step.tsx @@ -50,6 +50,7 @@ export const LOCATIONS_OPTION_SOURCE = 'locations'; export const SEPARATOR_FIELD_TYPE = 'separator'; export const RELATIVES_FIELD_TYPE = 'relatives'; export const PHONE_FIELD_TYPE = 'phone'; +export const STATIC_FIELD_TYPE = 'static'; export const BIRTHDATE_FIELD = 'birthdate'; export const ESTIMATED_BIRTHDATE_FIELDS = ['birthdateYears', 'birthdateMonths']; @@ -216,7 +217,8 @@ export class Step extends React.Component { const additionalProps = {} as any; const patientIdentifierType = this.getPatientIdentifierType(field); - if (i === stepDefinition.fields.length - 1 || (field.name === BIRTHDATE_FIELD && !!patient[BIRTHDATE_FIELD])) { + if (i === stepDefinition.fields.filter(field => field.type !== STATIC_FIELD_TYPE).length - 1 || + (field.name === BIRTHDATE_FIELD && !!patient[BIRTHDATE_FIELD])) { additionalProps.onKeyDown = this.handleLastFieldKeyDown; } @@ -263,4 +265,4 @@ const mapDispatchToProps = { type StateProps = ReturnType; type DispatchProps = typeof mapDispatchToProps; -export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(Step)); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Step)); diff --git a/src/components/register/inputs/Select.tsx b/src/components/register/inputs/Select.tsx index b36c13c..b2fb992 100644 --- a/src/components/register/inputs/Select.tsx +++ b/src/components/register/inputs/Select.tsx @@ -8,7 +8,7 @@ * graphic logo is a trademark of OpenMRS Inc. */ -import React, { useEffect, useRef } from 'react'; +import React, { useEffect } from 'react'; import ValidationError from './ValidationError'; import cx from 'classnames'; import { connect } from 'react-redux'; @@ -27,10 +27,9 @@ export interface ISelectProps extends StateProps, DispatchProps, IFieldProps { interface IStore { concept: IConceptState; settings: { - settings: [{ property: string, value: string }], + settings: [{ property: string, value: string }], setting: { value: string } }; - openmrs: { session: { sessionLocation: { uuid: string }}}; } export const Select = (props: ISelectProps) => { @@ -45,10 +44,9 @@ export const Select = (props: ISelectProps) => { selectOptions, concept, onPatientChange, - settings, - sessionLocation + settings } = props; - const { name, required, label, options, defaultOption = field.name === 'LocationAttribute' ? sessionLocation?.uuid : '', optionSource = '', optionUuid = '', optionKey = '' } = field; + const { name, required, label, options, defaultOption = '', optionSource = '', optionUuid = '', optionKey = '' } = field; const hasValue = value || patient[name] || defaultOption; const placeholder = getPlaceholder(intl, label, name, required); const commonProps = getCommonInputProps(props, placeholder); @@ -56,24 +54,6 @@ export const Select = (props: ISelectProps) => { const isConceptOptionSource = optionSource === CONCEPT; const isGlobalPropertyOptionSource = optionSource === GLOBAL_PROPERTY; - const usePrevious = value => { - const ref = useRef(); - - useEffect(() => { - ref.current = value; - }, [value]); - - return ref.current; - }; - - const prevSessionLocation = usePrevious(sessionLocation?.uuid); - - useEffect(() => { - if (prevSessionLocation !== sessionLocation?.uuid) { - onPatientChange({ ...patient, 'LocationAttribute': sessionLocation.uuid }); - } - },[onPatientChange, patient, prevSessionLocation, sessionLocation]); - useEffect(() => { if (!patient[name] && defaultOption) { onPatientChange({ ...patient, [name]: defaultOption }); @@ -115,7 +95,7 @@ export const Select = (props: ISelectProps) => { ); } }; - + return (
{ ); }; -const mapStateToProps = ({ concept, settings, openmrs: { session: { sessionLocation }} }: IStore) => ({ concept, settings, sessionLocation }); +const mapStateToProps = ({ concept, settings }: IStore) => ({ concept, settings }); const mapDispatchToProps = {}; diff --git a/src/components/register/inputs/TimeInput.tsx b/src/components/register/inputs/TimeInput.tsx index 6581802..80ea56d 100644 --- a/src/components/register/inputs/TimeInput.tsx +++ b/src/components/register/inputs/TimeInput.tsx @@ -9,7 +9,6 @@ */ import React, { useEffect } from 'react'; -import { useIntl } from 'react-intl'; import moment from "moment"; import { TimePicker } from "../../common/time-picker/TimePicker"; import { getCommonInputProps, getPlaceholder } from "../../../shared/util/patient-form-util"; @@ -20,12 +19,11 @@ import ValidationError from "./ValidationError"; interface ITimeInputProps extends IFieldProps { } -const TimeInput = (props: ITimeInputProps) => { - const intl = useIntl(); +const TimeInput = (props: PropsWithIntl) => { const {field, isInvalid, isDirty, className, value, patient, onPatientChange} = props; const {name, required, label} = field; const hasValue = !!value || !!patient[field.name]; - const placeholder = getPlaceholder(intl, label, name, required); + const placeholder = getPlaceholder(props.intl, label, name, required); useEffect(() => { setValueInModel(patient, field.name, onPatientChange, field.defaultValue); @@ -68,7 +66,7 @@ const TimeInput = (props: ITimeInputProps) => { return (
- {hasValue && {placeholder ? intl.formatMessage({ id: `${placeholder}` }) : ''}} + {hasValue && {placeholder ? props.intl.formatMessage({ id: `${placeholder}` }) : ''}} {isDirty && isInvalid && }
); diff --git a/src/components/translation/PropsWithIntl.tsx b/src/components/translation/PropsWithIntl.tsx new file mode 100644 index 0000000..c3400db --- /dev/null +++ b/src/components/translation/PropsWithIntl.tsx @@ -0,0 +1,11 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under + * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. + *

+ * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS + * graphic logo is a trademark of OpenMRS Inc. + */ + +type PropsWithIntl

= P & { intl: any }; diff --git a/src/components/translation/translation-provider.tsx b/src/components/translation/translation-provider.tsx new file mode 100644 index 0000000..04207da --- /dev/null +++ b/src/components/translation/translation-provider.tsx @@ -0,0 +1,59 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under + * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. + *

+ * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS + * graphic logo is a trademark of OpenMRS Inc. + */ + +import { addLocaleData, IntlProvider} from 'react-intl'; +import React, {PropsWithChildren, useEffect} from 'react'; +import { connect } from 'react-redux'; +import { getSession } from '../../redux/reducers/session'; +import { getMessages } from '../../redux/reducers/translation-messages'; +import LocalizationContext from '@openmrs/react-components/lib/components/localization/LocalizationContext'; + +interface IStore { + session: any, + translationMessages: any +} + +const TranslationProvider = ({locale, translationMessages, getSession, getMessages, children}: PropsWithChildren) => { + + useEffect(() => { + getSession(); + }, []); + + useEffect(() => { + if (locale) { + getMessages(locale); + addLocaleData(require(`react-intl/locale-data/${locale.split('_')[0]}`)); + } + }, [locale]); + + return ( + <> + {translationMessages && locale ? ( + + + {children} + + + ) : + <>} + + ); +}; + +const mapStateToProps = (({session: { session }, translationMessages: { translationMessages }}: IStore) => ({ + locale: session ? session.locale : null, + translationMessages: translationMessages +})); +type StateProps = ReturnType; + +const mapDispatchToProps = { getSession, getMessages }; +type DispatchProps = typeof mapDispatchToProps; + +export default connect(mapStateToProps, mapDispatchToProps)(TranslationProvider); diff --git a/src/lang/en.json b/src/lang/en.json deleted file mode 100644 index db89626..0000000 --- a/src/lang/en.json +++ /dev/null @@ -1,490 +0,0 @@ -{ - "home": { - "title": "Home" - }, - "plusMinusButtons": { - "delete": "Delete", - "addNew": "Add new" - }, - "table": { - "enterSearch": "For the search results to appear, enter at least 3 characters.", - "noRecords": "No records.", - "recordsFound": "records found." - }, - "dashboard": { - "findPatient": "Find Patient Record", - "registerPatient": "CFL Register Patient", - "findCaregiver": "Find Caregiver Record" - }, - "findPatient": { - "title": "Find Patient Record", - "searchInputPlaceholder": "Search by Id, name or phone number" - }, - "findCaregiver": { - "title": "Find Caregiver Record", - "searchInputPlaceholder": "Search by Id, name or phone number" - }, - "dropzone": { - "openFileDialog": "Open File Dialog", - "acceptedFile": "Accepted File:", - "rejectedFile": "Rejected File:" - }, - "addressData": { - "title": "Manage Address Data", - "upload": { - "title": "Upload Address Data", - "instruction1": "Please upload file in .csv or .txt format. The file should contain comma delimiter.", - "instruction2": "Download file samples here:", - "overwriteAddressData": { - "true": { - "radioLabel": "Overwrite existing address data", - "modalHeader": "Overwriting existing data", - "modalBody": "Are you sure you want to overwrite existing data?" - }, - "false": { - "radioLabel": "Add to existing address data", - "modalHeader": "Adding new data to existing file", - "modalBody": "Are you sure you want to add new data to existing file?" - } - }, - "success": "Address data uploaded successfully", - "addressDataEmpty": "There is no file to be displayed yet", - "button": "Upload file", - "errorMessage1": "{numberOfInvalidRecords} out of {numberOfTotalRecords} ", - "errorMessage2": "records failed to import. Download the .csv file with the failed records ", - "csvDownloadLink": "here", - "dot": "." - }, - "dropzone": { - "instruction": "Drag and drop Address Data file here. The file should be in .csv or .txt format." - }, - "table": { - "title": "Uploaded File" - }, - "download": { - "csvFileSample": "csv file sample", - "txtFileSample": "txt file sample", - "button": "Download file" - } - }, - "conditions": { - "title": "Manage Conditions", - "success": "Condition saved successfully", - "set": "SET", - "active": "Active", - "inactive": "Inactive", - "addNew": "Add new Condition", - "remove": "Remove Condition", - "removeConfirmation": "Are you sure you want to remove condition for this patient?", - "yes": "Yes", - "no": "No", - "condition": "Condition", - "onsetDate": "Onset Date", - "actions": "Actions" - }, - "manageCondition": { - "title": "Condition", - "editCondition": "Edit Condition", - "addNewCondition": "Add New Condition", - "conditions": "Conditions", - "condition": "Condition", - "onsetDate": "Onset Date", - "endDate": "End date", - "cancel": "Cancel" - }, - "columnNames": { - "patientIdentifier": "Identifier", - "personIdentifier": "Identifier", - "givenName": "First Name", - "middleName": "Middle Name", - "familyName": "Last Name", - "display": "Name", - "gender": "Gender", - "age": "Age", - "birthdate": "Birthdate", - "birthdateEstimated": "Is birthdate estimated", - "birthtime": "Birth time", - "causeOfDeath": "Cause of death", - "dead": "Is dead", - "deathDate": "Death date", - "deathDateEstimated": "Is death date estimated", - "preferredAddress": "Preferred address", - "phoneNumber": "Phone number", - "uuid": "ID", - "personLanguage": "Language", - "field1": "Country", - "field2": "Hierarchy level 2", - "field3": "Hierarchy level 3", - "field4": "Hierarchy level 4", - "field5": "Hierarchy level 5" - }, - "editPatient": { - "title": "Patient Profile", - "subtitle": "Please edit Patient profile below", - "success": { - "subtitle": "The Patient has been saved successfully." - } - }, - "editCaregiver": { - "title": "Caregiver Profile", - "subtitle": "Please edit Caregiver profile below" - }, - "registerCaregiver": { - "title": "Register a Caregiver", - "subtitle": "Please register a caregiver below", - "steps": { - "confirm": { - "title": "Person Demographics", - "subtitle": "Confirm the person details are correct." - } - } - }, - "registerPatient": { - "title": "Register a Patient", - "subtitle": "Please register a patient below", - "steps": { - "name": { - "label": "Name", - "title": "Patient Demographics", - "subtitle": "What's the patient's name?" - }, - "gender": { - "label": "Gender", - "title": "Patient Demographics", - "subtitle": "What's the patient's gender?", - "male": "Male", - "female": "Female", - "transgender": "Transgender", - "other": "Other" - }, - "birthdate": { - "label": "Birthdate", - "title": "Patient Demographics", - "subtitle": "What's the patient's birth date?", - "or": "Or" - }, - "address": { - "label": "Address", - "title": "Patient Demographics", - "subtitle": "What's the patient's address?" - }, - "language": { - "label": "Language", - "title": "Patient Demographics", - "subtitle": "What's the patient's preferred language?" - }, - "phoneNumber": { - "label": "Phone Number", - "title": "Patient Demographics", - "subtitle": "What's the patient's phone number?" - }, - "patientLocation": { - "label": "Patient Location", - "title": "Patient Demographics", - "subtitle": "What's the patient's location?" - }, - "aadharNumber": { - "label": "Aadhar Number", - "title": "Patient Demographics", - "subtitle": "What's the patient's Aadhar Number?" - }, - "artNumber": { - "label": "ART Number", - "title": "Patient Demographics", - "subtitle": "What's the patient's ART Number?" - }, - "relatives": { - "label": "Relatives", - "title": "Patient Demographics", - "subtitle": "Who is the patient related to?" - }, - "nationality": { - "label": "Nationality", - "title": "Patient Demographics", - "subtitle": "What's the patient's nationality?" - }, - "edcNumber": { - "label": "EDC-number", - "title": "Patient Demographics", - "subtitle": "What's the participant's EDC-number?" - }, - "subjectID": { - "label": "Subject ID", - "title": "Patient Demographics", - "subtitle": "What's the subject ID?" - }, - "messagesConfiguration": { - "label": "Messages configuration", - "title": "Messages configuration", - "subtitle": "Messages configuration" - }, - "confirm": { - "label": "Confirm", - "title": "Patient Demographics", - "subtitle": "Confirm the patient details are correct.", - "estimated": "Estimated", - "years": "Year(s)", - "months": "Month(s)" - } - }, - "fields": { - "firstName": "First Name", - "givenName": "Given Name", - "middleName": "Middle Name", - "familyName": "Family Name", - "gender": "Gender", - "birthdateDay": "Day", - "birthdateMonth": "Month", - "birthdateYear": "Year", - "birthdateYears": "Estimated Years", - "birthdateMonths": "Estimated Months", - "address1": "Address 1", - "address2": "Address 2", - "cityVillage": "City/Village", - "stateProvince": "State/Province", - "country": "Country", - "postalCode": "Postal Code", - "personLanguage": "Language", - "Telephone Number": "Phone Number", - "patientLocation": "Location", - "Aadhar Number": "AADHAR Number", - "ART Number": "ART Number", - "relationshipType": "Relationship Type", - "otherPerson": "Person's Name", - "LocationAttribute": "Location", - "relatives": "Relatives", - "language": "Language", - "name": "Name", - "birthdate": "Birthdate", - "address": "Address", - "location": "Location", - "required": "(Required)", - "city": "City", - "startDate": "Start date", - "dailyContactTime": "Daily contact time", - "eveningContactTime": "Evening contact time", - "or": "Or", - "sexAssignedAtBirth": "Sex assigned at birth", - "genderIdentity": "Gender identity", - "participantConsent": "Participant received information" - }, - "success": { - "title": "Success", - "subtitle": "The Patient has been successfully registered.", - "editSubtitle": "The Patient has been saved successfully.", - "goBack": "Go back" - }, - "unknown": "Unknown", - "required": "Required", - "invalid": "Invalid", - "previous": "Previous", - "next": "Next", - "confirm": "Confirm", - "invalidPhoneNumber": "Please provide a valid phone number including the country code. Example: +1 555 555 1234" - }, - "notificationConfiguration": { - "title": "Manage Notification Configuration", - "configureSettings": "Configure Settings", - "defaultCountry": "Default Country", - "country": "Country", - "smsSettings": "SMS settings:", - "whatsAppSettings": "WhatsApp settings:", - "callSettings": "Call settings:", - "provider": "Provider", - "uponRegistration": "Upon registration:", - "allowedNotificationWindow": { - "label": "Allowed notification window:", - "from": "From", - "to": "To" - }, - "bestContactTime": { - "label": "Best contact time:", - "placeholder": "Best contact time" - }, - "visitReminder": { - "label": "Visit reminder (days before visit):", - "placeholder": "Days before visit", - "switch": "Visit reminder:" - }, - "button": { - "expand": "Expand all", - "collapse": "Collapse all", - "addNewCountry": "Add new Country" - }, - "confirmationModal": { - "header": "Submit Notification Configuration", - "body": "Are you sure you want to submit Notification Configuration?" - }, - "success": "Configuration saved successfully!", - "createFirstVisit": "Automatically create first visit upon registration:", - "createFutureVisits": "Automatically create visits according to schedule:" - }, - "notificationTemplates": { - "title": "Manage Notification Templates", - "notificationTemplate": "Notification Template", - "injectedServices": { - "label": "Injected Services", - "tooltip": "Values which represent the map of services which should be injected into the messaging notification template.", - "key": "Key", - "value": "Value" - }, - "template": { - "customTemplateName": { - "label": "Custom Template Name", - "tooltip": "When creating a custom template, use only lowercase letters and ‘-’ with no spaces.", - "invalid": "The Template Name should only contain lowercase letters, and ‘-’, no spaces" - }, - "description": "Description", - "text": "SMS Text" - }, - "button": { - "expand": "Expand all", - "collapse": "Collapse all", - "addNewTemplate": "Add new Template" - }, - "saveModal": { - "header": "Submit Notification Templates", - "body": "Are you sure you want to submit Notification Templates?" - }, - "removeTemplateModal": { - "header": "Delete Notification Template", - "body": "Are you sure you want to delete {templateName}?" - }, - "success": "Configuration saved successfully!" - }, - "locations": { - "location": { - "create.title": "Add New Location", - "edit.title": "Edit Location", - "name": "Location Name", - "description": "Description", - "address1": "Address (line 1)", - "address2": "Address (line 2)", - "cityVillage": "City/Village", - "stateProvince": "State/Province", - "postalCode": "Postal Code", - "country": "Country", - "delete": "Delete Location" - } - }, - "common": { - "yes": "Yes", - "no": "No", - "ok": "Ok", - "cancel": "Cancel", - "moveUp": "Move up", - "moveDown": "Move down", - "ordinalSuffix": { - "st": "st", - "nd": "nd", - "rd": "rd", - "th": "th" - }, - "required": "(Required)", - "error": { - "required": "Required", - "nameUnique": "The name should be unique. Please try again.", - "nameInvalid": "Username is invalid. It must be between 2 and 50 characters. Only letters, digits, '.', '-', and '_' are allowed.", - "invalidEmail": "The email address is invalid. Please correct it.", - "invalidPassword": "Your entered password does not match the needed complexity. It should be minimum 8 characters long and contain at least: one upper and one lower case characters, one digit. Please try again.", - "confirmPassword": "Your entered passwords do not match. Please try again." - }, - "switch": { - "on": "on", - "off": "off" - }, - "return": "Return", - "save": "Save", - "true": "True", - "false": "False", - "grandTotal": "Grand Total", - "downloadCsv": "Download csv" - }, - "userAccount": { - "title": "User Account", - "add": "Add New Account", - "edit": "Edit Account", - "accountNotSaved": "Not all fields have been filled in correctly. Please try again.", - "auditInfo": { - "title": "Audit info", - "created": "Created By {creator} On {date}", - "changedBy": "Changed By {changedBy} On {date}" - }, - "personDetails": { - "title": "Person Details", - "familyName": "Family Name", - "givenName": "Given Name", - "phone": "Phone", - "email": "Email" - }, - "userAccountDetails": { - "title": "User Account Details", - "username": "Username", - "locations": "Locations", - "userRole": "User Role", - "password": "Password", - "confirmPassword": "Confirm Password", - "forcePasswordChange": "Force Password Change" - }, - "deleteAccount": { - "label": "Delete Account", - "confirmationModal": { - "header": "Warning", - "body": "Are you sure you want to delete this account?" - } - } - }, - "manageRegimens": { - "title": "Manage Regimens", - "regimenName": "Regimen Name", - "drugName": "Drug Name", - "drugAbbreviation": "Drug Abbreviation", - "doseUnitType": "Dose Unit Type", - "numberOfUnits": "Number Of Units", - "frequency": "Frequency", - "addNewRegimen": "Add New Regimen", - "deleteRegimenModal": { - "header": "Warning", - "body": "Are you sure you want to delete this regimen?" - }, - "deleteDrugModal": { - "header": "Warning", - "body": "Are you sure you want to delete this drug?" - }, - "regimenDeleted": "The regimen has been deleted.", - "drugDeleted": "The drug has been deleted.", - "regimensNotSaved": "The regimens have not been saved. Please try again.", - "regimensSaved": "The regimens have been saved.", - "error": { - "regimenNameUnique": "The regimen name should be unique. Please try again." - } - }, - "findPatientColumnsConfiguration": { - "title": "Manage Patient's Record Columns Configuration", - "columnName": "Column Name", - "configureColumns": "Configure Columns", - "configurationNotSaved": "The columns configuration has not been saved.", - "emptyColumnsConfiguration": "Please configure at least one column.", - "configurationSaved": "The columns configuration has been saved.", - "modal": { - "header": "Submit Columns Configuration", - "body": "Are you sure you want to submit Columns Configuration for the Patient's Record?" - } - }, - "patientFlagsOverview": { - "title": "Patient Flags Overview", - "noRecordsFound": "No records found", - "somethingWentWrong": "Something Went Wrong", - "searchInputPlaceholder": "Search by Id, name or phone number", - "selectPatientFlagsPlaceholder": "Patient flags", - "pleaseSelectFilter": "Please select a filter to see results", - "description": "The results presented below are related to the current location.", - "recordsFound": "records found.", - "noRecords": "No records.", - "identifierColumnLabel": "Identifier", - "nameColumnLabel": "Name", - "phoneNumberColumnLabel": "Phone number", - "statusColumnLabel": "Status", - "genderColumnLabel": "Gender" - } -} diff --git a/src/lang/fr.json b/src/lang/fr.json deleted file mode 100644 index 2deeb70..0000000 --- a/src/lang/fr.json +++ /dev/null @@ -1,538 +0,0 @@ -{ - "home": { - "title": "Accueil" - }, - "plusMinusButtons": { - "delete": "Effacer", - "addNew": "Ajouter nouveau" - }, - "table": { - "enterSearch": "Pour afficher les résultats de la recherche, saisissez au moins 3 caractères.", - "noRecords": "Pas d'enregistrements.", - "recordsFound": "enregistré trouvés." - }, - "dashboard": { - "findPatient": "Trouver le dossier du patient", - "registerPatient": "Inscrire les patients", - "findCaregiver": "Trouver le dossier du soignant" - }, - "findPatient": { - "title": "Trouver le dossier du patient", - "searchInputPlaceholder": "Recherche par Id, nom ou numéro de téléphone" - }, - "findCaregiver": { - "title": "Trouver le dossier du soignant", - "searchInputPlaceholder": "Recherche par Id, nom ou numéro de téléphone" - }, - "dropzone": { - "openFileDialog": "Ouvrir le dialogue du fichier", - "acceptedFile": "Fichier accepté :", - "rejectedFile": "Fichier rejeté :" - }, - "addressData": { - "title": "Gérer les données d'adresse", - "upload": { - "title": "Télécharger les données d'adresse", - "instruction1": "Veuillez télécharger le fichier au format .csv ou .txt. Le fichier doit contenir un délimiteur virgule.", - "instruction2": "Téléchargez des exemples de fichiers ici :", - "overwriteAddressData": { - "true": { - "radioLabel": "Écraser les données d'adresse existantes", - "modalHeader": "Écraser les données existantes", - "modalBody": "Voulez-vous vraiment écraser les données existantes ?" - }, - "false": { - "radioLabel": "Ajouter aux données d'adresse existantes", - "modalHeader": "Ajout de nouvelles données au fichier existant", - "modalBody": "Voulez-vous vraiment ajouter de nouvelles données au fichier existant ?" - } - }, - "success": "Les données d'adresse ont été téléchargées avec succés", - "addressDataEmpty": "Il n'y a pas encore de fichier à afficher", - "button": "Téléverser un fichier", - "errorMessage1": "{NombreDeEnregistrementsNonValides} sur {NombreDeEnregistrementsTotal} ", - "errorMessage2": "les enregistrés n'ont pas pu être importés. Téléchargez le fichier .csv avec les enregistrements ayant échoué", - "csvDownloadLink": "ici", - "dot": "." - }, - "dropzone": { - "instruction": "Glisser-déposer le fichier de données d'adresse ici. Le fichier doit être au format .csv ou .txt." - }, - "table": { - "title": "Fichier téléchargé" - }, - "download": { - "csvFileSample": "exemple de fichier csv", - "txtFileSample": "exemple de fichier txt", - "button": "Télécharger un fichier" - } - }, - "conditions": { - "title": "Gérer les termes", - "success": "Condition enregistrée avec succès", - "set": "Rendre", - "active": "Actif", - "inactive": "Inactif", - "addNew": "Ajouter une nouvelle condition", - "remove": "Supprimer la condition", - "removeConfirmation": "Voulez-vous vraiment supprimer la condition de ce patient ?", - "yes": "Oui", - "no": "Non", - "condition": "Condition", - "onsetDate": "Date de début", - "actions": "Actions" - }, - "manageCondition": { - "title": "Condition", - "editCondition": "Modifier la condition", - "addNewCondition": "Ajouter une nouvelle condition", - "conditions": "Les conditions", - "condition": "Condition", - "onsetDate": "Date de début", - "endDate": "Date de fin", - "cancel": "Annuler" - }, - "columnNames": { - "patientIdentifier": "Identifiant", - "personIdentifier": "Identifiant", - "givenName": "Prénom", - "middleName": "Deuxième prénom", - "familyName": "Nom de famille", - "display": "Nom", - "gender": "Genre", - "age": "Âge", - "birthdate": "Date de naissance", - "birthdateEstimated": "La date de naissance est-elle estimée", - "birthtime": "Heure de naissance", - "causeOfDeath": "Cause de décès", - "dead": "Est mort", - "deathDate": "Date de mort", - "deathDateEstimated": "La date de décès est-elle estimée", - "preferredAddress": "Adresse préférée", - "phoneNumber": "Numéro de téléphone", - "uuid": "ID", - "personLanguage": "Langue", - "field1": "Pays", - "field2": "Hiérarchie niveau 2", - "field3": "Hiérarchie niveau 3", - "field4": "Hiérarchie niveau 4", - "field5": "Hiérarchie niveau 5" - }, - "editPatient": { - "title": "Profil du patient", - "subtitle": "Veuillez modifier le profil du patient ci-dessous", - "success": { - "subtitle": "Le patient a été enregistré avec succès." - } - }, - "editCaregiver": { - "title": "Profil du soignant", - "subtitle": "Veuillez modifier le profil du soignant ci-dessous" - }, - "registerCaregiver": { - "title": "Inscrire un soignant", - "subtitle": "Veuillez inscrire un soignant ci-dessous", - "steps": { - "confirm": { - "title": "Donnée démographiques de la personne", - "subtitle": "Confirmez que les détails de la personne sont corrects." - } - } - }, - "registerPatient": { - "title": "Inscrire un patient", - "subtitle": "Veuillez inscrire un patient ci-dessous", - "steps": { - "name": { - "label": "Nom", - "title": "Données démographiques des patients", - "subtitle": "Comment s'appelle le patient?" - }, - "gender": { - "label": "Genre", - "title": "Données démographiques des patients", - "subtitle": "Quel est le sexe du patient?", - "male": "Mâle", - "female": "Femelle", - "transgender": "Transgenres", - "other": "Autre" - }, - "birthdate": { - "label": "Date de naissance", - "title": "Données démographiques des patients", - "subtitle": "Quelle est la date de naissance du patient?", - "or": "Ou" - }, - "address": { - "label": "Adresse", - "title": "Données démographiques des patients", - "subtitle": "Quelle est l'adresse du patient?" - }, - "language": { - "label": "Langue", - "title": "Données démographiques des patients", - "subtitle": "Quelle est la langue préférée du patient?" - }, - "phoneNumber": { - "label": "Numéro de téléphone", - "title": "Données démographiques des patients", - "subtitle": "Quel est le numéro de téléphone du patient?" - }, - "patientLocation": { - "label": "Localisation du patient", - "title": "Données démographiques des patients", - "subtitle": "Où est le patient?" - }, - "aadharNumber": { - "label": "Nombre Adhar", - "title": "Données démographiques des patients", - "subtitle": "Quel est le numéro Aadhar du patient?" - }, - "artNumber": { - "label": "Numéro de TAR", - "title": "Données démographiques des patients", - "subtitle": "Quel est le numéro ART du patient?" - }, - "relatives": { - "label": "Les proches", - "title": "Données démographiques des patients", - "subtitle": "À qui le patient est-il lié?" - }, - "nationality": { - "label": "Nationalité", - "title": "Données démographiques des patients", - "subtitle": "Quelle est la nationalité du patient?" - }, - "edcNumber": { - "label": "Numéro EDC", - "title": "Données démographiques des patients", - "subtitle": "Quel est le numéro EDC du participant?" - }, - "subjectID": { - "label": "Identifiant du sujet", - "title": "Données démographiques des patients", - "subtitle": "Quel est l'identifiant du sujet?" - }, - "messagesConfiguration": { - "label": "Configuration des messages", - "title": "Configuration des messages", - "subtitle": "Configuration des messages" - }, - "confirm": { - "label": "Confirmer", - "title": "Données démographiques des patients", - "subtitle": "Confirmez que les détails du patient sont corrects.", - "estimated": "Estimé", - "years": "Ans", - "months": "Mois" - } - }, - "fields": { - "firstName": "Prénom", - "givenName": "Prénom", - "middleName": "Deuxième prénom", - "familyName": "Nom de famille", - "gender": "Genre", - "birthdateDay": "Jour", - "birthdateMonth": "Mois", - "birthdateYear": "An", - "birthdateYears": "Années estimées", - "birthdateMonths": "Mois estimés", - "address1": "Adresse 1", - "address2": "Adresse 2", - "cityVillage": "Village/Ville", - "stateProvince": "État/Province", - "country": "Pays", - "postalCode": "Code Postal", - "personLanguage": "Langue", - "Telephone Number": "Numéro de téléphone", - "patientLocation": "Localisation", - "Aadhar Number": "AADHAR Number", - "ART Number": "Numéro de ART", - "relationshipType": "Type de relation", - "otherPerson": "Nom de la personne", - "LocationAttribute": "Localisation", - "relatives": "Les proches", - "language": "Langue", - "name": "Nom", - "birthdate": " Date de naissance", - "address": "Adresse", - "location": "Localisation", - "required": "(Obligatoire)", - "city": "City", - "startDate": "Date de début", - "dailyContactTime": "Heure de contact quotidien", - "eveningContactTime": "Temps de contact du soir", - "or": "Ou", - "sexAssignedAtBirth": "Sexe attribué à la naissance", - "genderIdentity": "Identité de genre", - "participantConsent": "Le participant a reçu des informations" - }, - "success": { - "title": "Succès", - "subtitle": "Le patient a été enregistré avec succès.", - "editSubtitle": "Le patient a été enregistré avec succès", - "goBack": "Retourner" - - }, - "unknown": "Inconnue", - "required": "Obligatoire", - "invalid": "Non valide", - "previous": "Précédent", - "next": "Prochain", - "confirm": "Confirmer", - "invalidPhoneNumber": "Veuillez fournir un numéro de téléphone valide, y compris l'indicatif du pays. Exemple : +1 555 555 1234", - "name": "Nom", - "middleName": "Deuxième prénom", - "firstName": "Prénom", - "birthdate": "Date de naissance", - "gender": "Sexe", - "patientLocation": "Localisation du patient", - "address": "Adresse", - "nationality": "Nationalité", - "language": "Langue", - "phoneNumber": "Numéro de téléphone", - "city": "Ville", - "messagesConfiguration": "Configuration des messages", - "startDate": "Date de début", - "dailyContactTime": "Heure de contact quotidien", - "edcNumber": "Numéro EDC", - "patientDemographics": "Données démographiques du patient", - "patientNameQuestion": "Quel est le nom du patient?", - "patientBirthdateQUestion": "Quelle est la date de naissance du patient?", - "patientGenderQuestion": "Quel est le sexe du patient?", - "patientLocationQuestion": "Quel est le localisation du patient?", - "patientAddressQuestion": "Quelle est l'adresse du patient?", - "patientNationalityQuestion": "Quelle est la nationalité du patient?", - "patientLanguageQuestion": "Quelle est la langue préférée du patient?", - "patientPhoneNumberQuestion": "Quel est le numéro de téléphone du patient?", - "patientEDCNumberQuestion": "Quel est le numéro EDC du participant?" - }, - "notificationConfiguration": { - "title": "Générer la configuration des notifications", - "configureSettings": "Configurer les paramètres", - "defaultCountry": "Pays par défaut", - "country": "Pays", - "smsSettings": "Paramètres SMS:", - "whatsAppSettings": "Paramètres WhatsApp:", - "callSettings": "Paramètres d'appel:", - "provider": "Fournisseur", - "uponRegistration": "Lors de l'inscription", - "allowedNotificationWindow": { - "label": "Fenêtre de notification autorisée:", - "from": "De", - "to": "à" - }, - "bestContactTime": { - "label": "Meilleur temps de contact:", - "placeholder": "Meilleur temps de contact" - }, - "visitReminder": { - "label": "Rappel de visite (jours avant la visite):", - "placeholder": "Jours avant la visite", - "switch": "Rappel de visite" - }, - "button": { - "expand": "Développeur tout", - "collapse": "Réduire tout", - "addNewCountry": "Ajouter un nouveau pays" - }, - "confirmationModal": { - "header": "Soumettre la configuration des notifications", - "body": "Voulez-vous vraiment soumettre la configuration de notification?" - }, - "success": "Configuration enregistrée avec succès !" - }, - "notificationTemplates": { - "title": "Générer les modèles de notification", - "notificationTemplate": "Modèle de notification", - "injectedServices": { - "label": "Services injectés", - "tooltip": "Valeurs qui représentent la carte des services qui doivent être injectés dans le modèle de notification de messagerie.", - "key": "Clé", - "value": "Évaluer" - }, - "template": { - "customTemplateName": { - "label": "Nom du modèle personnalisé", - "tooltip": "Lors de la création d'un modèle personnalisé, n'utilisez que des lettres minuscules et \"-\" sans espaces.", - "invalid": "Le nom du modèle ne doit contenir que des lettres minuscules et '-', pas d'espaces" - }, - "description": "La description", - "text": "Texte SMS" - }, - "button": { - "expand": "Développer tout", - "collapse": "Réduire tout", - "addNewTemplate": "Ajouter un nouveau modèle" - }, - "saveModal": { - "header": "Soumettre des modèles de notification", - "body": "Voulez-vous vraiment soumettre des modèles de notification ?" - }, - "removeTemplateModal": { - "header": "Supprimer le modèle de notification", - "body": "Voulez-vous vraiment supprimer {templateName} ?" - }, - "success": "Configuration enregistrée avec succès !" - }, - "locations": { - "location": { - "create.title": "Ajouter un nouvel localisation", - "edit.title": "Ajouter un nouvel localisation", - "name": "Nom de la localisation", - "description": "La description", - "address1": "Adresse (ligne 1)", - "address2": "Adresse (ligne 2)", - "cityVillage": "Village/Ville", - "stateProvince": "État/Province", - "postalCode": "Code postal", - "country": "Pays", - "delete": "Supprimer le localisation" - } - }, - "common": { - "yes": "Oui", - "no": "Non", - "ok": "D'accord", - "cancel": "Annuler", - "moveUp": "Déplacer vers le haut", - "moveDown": "Déplacer vers le bas", - "ordinalSuffix": { - "st": "er", - "nd": "e", - "rd": "e", - "th": "e" - }, - "required": "(Obligatoire)", - "error": { - "required": "Obligatoire", - "nameUnique": "Le nom doit être unique. Veuillez réessayer.", - "nameInvalid": "Nom d'utilisateur non valide. Il doit comporter entre 2 et 50 caractères. Seuls les lettres, chiffres, '.', '-' et '_' sont autorisés.", - "invalidEmail": "L'adresse mail est non valide. Veuillez corriger s'il vous plait.", - "invalidPassword": "Votre mot de passe saisi ne correspond pas à la complexité requise. Il doit comporter au minimum 8 caractères et contenir au moins : une majuscule et une minuscule, un chiffre. Veuillez réessayer.", - "confirmPassword": "Vos mots de passe saisis ne correspondent pas. Veuillez réessayer." - }, - "switch": { - "on": "on", - "off": "off" - }, - "return": "Revenir", - "save": "Enregistrer", - "true": "Vrai", - "false": "Faux", - "grandTotal": "Total", - "downloadCsv": "Télécharger le csv" - }, - "userAccount": { - "title": "Compte d'utilisateur", - "add": "Ajouter un nouveau compte", - "edit": "Modifier le compte", - "accountNotSaved": "Tous les champs n'ont pas été remplis correctement. Veuillez réessayer.", - "auditInfo": { - "title": "Informations d'audit", - "created": "Créé par {creator} le {date}", - "changedBy": "Modifié par {changedBy} le {date}" - }, - "personDetails": { - "title": "Détails de la personne", - "familyName": "Nom de famille", - "givenName": "Prénom", - "phone": "téléphoner", - "email": "E-mail" - }, - "userAccountDetails": { - "title": "Détails du compte utilisateur", - "username": "Nom d'utilisateur", - "locations": "Locations", - "userRole": "Rôle d'utilisateur", - "password": "Mot de passe", - "confirmPassword": "Confirmez le mot de passe", - "forcePasswordChange": "Forcer le changement de mot de passe" - }, - "deleteAccount": { - "label": "Supprimer le compte", - "confirmationModal": { - "header": "Avertissement", - "body": "Voulez-vous vraiment supprimer ce compte?" - } - } - }, - "manageRegimens": { - "title": "Gérer les régimes", - "regimenName": "Nom du régime", - "drugName": "Nom du médicament", - "drugAbbreviation": "Abréviation du médicament", - "doseUnitType": "Type d'unité posologique", - "numberOfUnits": "Nombre d'unités", - "frequency": "La fréquence", - "addNewRegimen": "Ajouter un nouveau régime", - "deleteRegimenModal": { - "header": "Avertissement", - "body": "Voulez-vous vraiment supprimer ce régime ?" - }, - "deleteDrugModal": { - "header": "Avertissement", - "body": "Voulez-vous vraiment supprimer ce médicament ?" - }, - "regimenDeleted": "The regimen has been deleted.", - "drugDeleted": "Le médicament a été supprimé.", - "regimensNotSaved": "Les régimes n'ont pas été enregistrés. Veuillez réessayer.", - "regimensSaved": "Les régimes ont été enregistrés.", - "error": { - "regimenNameUnique": "Le nom du régime doit être unique. Veuillez réessayer." - } - }, - "findPatientColumnsConfiguration": { - "title": "Gérer la configuration des colonnes du dossier patient", - "columnName": "Nom de colonne", - "configureColumns": "Configurer les colonnes", - "configurationNotSaved": "La configuration des colonnes n'a pas été enregistrée.", - "emptyColumnsConfiguration": "Veuillez configurer au moins une colonne.", - "configurationSaved": "La configuration des colonnes a été enregistrée.", - "modal": { - "header": "Envoyer la configuration des colonnes", - "body": "Êtes-vous sûr de vouloir soumettre la configuration des colonnes pour le dossier patient ?" - } - }, - "dataVisualization": { - "title": "Visualisation de données" - }, - "dataVisualizationConfiguration": { - "title": "Configuration de la visualisation des données", - "addNewReport": "Ajouter un nouveau rapport", - "report": "Rapport", - "configurationNotSaved": "Tous les champs obligatoires n'ont pas été remplis. Veuillez réessayer.", - "chart": { - "title": "Titre du graphique", - "type": "Type de graphique", - "xAxis": "Axe X du graphique", - "yAxis": "Axe Y du graphique", - "legend": "Légende du graphique", - "description": "Description du graphique", - "width": "Largeur du graphique en pixels", - "height": "Hauteur du graphique en pixels", - "marginTop": "Haut de la marge du graphique en pixels", - "marginBottom": "Marge inférieure du graphique en pixels", - "marginRight": "Marge droite du graphique en pixels", - "marginLeft": "Marge gauche du graphique en pixels", - "colors": "Couleurs du graphique" - } - }, - "patientFlagsOverview": { - "title": "Aperçu des indicateurs", - "noRecordsFound": "Aucun enregistrement trouvé", - "somethingWentWrong": "quelque chose s'est mal passé", - "searchInputPlaceholder": "Recherche par Id, nom ou numéro de téléphone", - "selectPatientFlagsPlaceholder": "Indicateurs de patients", - "pleaseSelectFilter": "Veuillez sélectionner un filtre pour voir les résultats", - "description": "Les résultats présentés ci-dessous sont liés à la localisation actuelle.", - "recordsFound":"enregistrements trouvés.", - "noRecords": "Aucun enregistrement.", - "identifierColumnLabel": "Identifiant", - "nameColumnLabel": "Nom", - "phoneNumberColumnLabel": "Numéro de téléphone", - "statusColumnLabel": "Statut", - "genderColumnLabel": "Le genre" - } -} diff --git a/src/lang/pt_BR.json b/src/lang/pt_BR.json deleted file mode 100644 index 8828039..0000000 --- a/src/lang/pt_BR.json +++ /dev/null @@ -1,513 +0,0 @@ -{ - "home": { - "title": "Pagina incial" - }, - "plusMinusButtons": { - "delete": "Apagar", - "addNew": "Adicionar Novo" - }, - "table": { - "enterSearch": "Para mostrar resultados de pesquisa, por favor inserir pelo menos três caracteres.", - "noRecords": "Sem registros.", - "recordsFound": "registros encontrados." - }, - "dashboard": { - "findPatient": "Encontrar registro de paciente", - "registerPatient": "CFL Registrar Paciente", - "findCaregiver": "Encontrar Registro de Cuidador" - }, - "findPatient": { - "title": "Encontrar Registro de Paciente", - "searchInputPlaceholder": "Pesquisar por ID, nome ou número de telefone" - }, - "findCaregiver": { - "title": "Encontrar Registro de Cuidador", - "searchInputPlaceholder": "Pesquisar por ID, nome ou número de telefone" - }, - "dropzone": { - "openFileDialog": "Abrir o diálogo do ficheiro", - "acceptedFile": "Ficheiro Aceite:", - "rejectedFile": "Ficheiro Rejeitado:" - }, - "addressData": { - "title": "Gerir dados de endereço", - "upload": { - "title": "Carregar dados de endereço", - "instruction1": "Por favor carregar ficheiro no formato .csv ou .txt. O ficheiro deverá conter delimitador por vírgula.", - "instruction2": "Descarregar ficheiro exemplo aqui:", - "overwriteAddressData": { - "true": { - "radioLabel": "Sobregravar dados de endereço existentes", - "modalHeader": "A sobregravar dados existentes", - "modalBody": "Confirma que quer sobregravar dados existentes?" - }, - "false": { - "radioLabel": "Adicionar a dados de endereço existentes", - "modalHeader": "A adicionar dados ao ficheiro existente", - "modalBody": "Confirma que quer adicionar novos dados ao ficheiro existente?" - } - }, - "success": "Dados de endereço carregado com sucesso", - "addressDataEmpty": "Ainda não há nenhum ficheiro a ser exibido", - "button": "Carregar ficheiro", - "errorMessage1": "{numberOfInvalidRecords} de {numberOfTotalRecords} ", - "errorMessage2": "registros falharam em importar. Baixe o arquivo .csv com os registros falhados ", - "csvDownloadLink": "aqui", - "dot": "." - }, - "dropzone": { - "instruction": "Arraste e solte o arquivo de dados de endereço aqui. O arquivo deve estar no formato .csv ou .txt." - }, - "table": { - "title": "Carregar ficheiro" - }, - "download": { - "csvFileSample": "ficheiro exemplo csv", - "txtFileSample": "ficheiro exemplo txt", - "button": "Descarregar ficheiro" - } - }, - "conditions": { - "title": "Administrar condições", - "success": "Condição salva com sucesso", - "set": "Definir", - "active": "Ativo", - "inactive": "Inativo", - "addNew": "Adicionar nova condição", - "remove": "Remover condição", - "removeConfirmation": "Você tem certeza de que quer remover a condição para este paciente?", - "yes": "Sim", - "no": "Não", - "condition": "Condição", - "onsetDate": "Data de início", - "actions": "Ações" - }, - "manageCondition": { - "title": "Condição", - "editCondition": "Editar Condição", - "addNewCondition": "Adicionar Nova Condição", - "conditions": "Condições", - "condition": "Condição", - "onsetDate": "Data de início", - "endDate": "Data de fim", - "cancel": "Cancelar" - }, - "columnNames": { - "patientIdentifier": "Identificador", - "personIdentifier": "Identificador", - "givenName": "Nome", - "middleName": "Nome do Meio", - "familyName": "Sobrenome", - "display": "Nome", - "gender": "Gênero", - "age": "Idade", - "birthdate": "Data de nascimento", - "birthdateEstimated": "Data de nascimento estimada", - "birthtime": "Hora do nascimento", - "causeOfDeath": "Causa de falecimento", - "dead": "Falecido", - "deathDate": "Data de falecimento", - "deathDateEstimated": "Data de falecimento estimada", - "preferredAddress": "Morada preferida", - "phoneNumber": "Número de Telefone", - "uuid": "ID", - "personLanguage": "Idioma", - "field1": "País", - "field2": "Hierarquia nível 2", - "field3": "Hierarquia nível 3", - "field4": "Hierarquia nível 4", - "field5": "Hierarquia nível 5" - }, - "editPatient": { - "title": "Perfil do paciente", - "subtitle": "Favor editar o perfil do paciente abaixo", - "success": { - "subtitle": "O Paciente foi salvo com sucesso." - } - }, - "editCaregiver": { - "title": "Perfil do cuidador", - "subtitle": "Favor editar o perfil do cuidador abaixo" - }, - "registerCaregiver": { - "title": "Registrar um Cuidador", - "subtitle": "Favor registrar o perfil do cuidador abaixo", - "steps": { - "confirm": { - "title": "Dados Demográficos Pessoais", - "subtitle": "Confirme se os dados da pessoa estão corretos." - } - } - }, - "registerPatient": { - "title": "Registrar um paciente", - "subtitle": "Favor registrar um paciente abaixo", - "steps": { - "name": { - "label": "Nome", - "title": "Dados Demográficos Pessoais", - "subtitle": "Qual é o nome do paciente?" - }, - "gender": { - "label": "Gênero'", - "title": "Dados Demográficos Pessoais", - "subtitle": "Qual é o sexo do paciente?", - "male": "Masculino", - "female": "Feminino", - "transgender": "Transexual", - "other": "Outro" - }, - "birthdate": { - "label": "Data de Nascimento", - "title": "Dados Demográficos do paciente", - "subtitle": "Qual é a data de nascimento do Paciente?", - "or": "Ou" - }, - "address": { - "label": "Morada", - "title": "Dados Demográficos do paciente", - "subtitle": "Qual é a morada do paciente?" - }, - "language": { - "label": "Idioma", - "title": "Dados Demográficos do paciente", - "subtitle": "Que idioma o paciente prefere?" - }, - "phoneNumber": { - "label": "Número de Telefone", - "title": "Dados Demográficos do paciente", - "subtitle": "Qual é o número de telefone do paciente?" - }, - "patientLocation": { - "label": "Localização do paciente", - "title": "Dados Demográficos do paciente", - "subtitle": "Qual é a localização do paciente?" - }, - "aadharNumber": { - "label": "Número Aadhar", - "title": "Dados Demográficos do paciente", - "subtitle": "Qual é o número Aadhar do paciente?" - }, - "artNumber": { - "label": "Número ART", - "title": "Dados Demográficos do paciente", - "subtitle": "Qual é número ART do paciente?" - }, - "relatives": { - "label": "Parentes", - "title": "Dados Demográficos do paciente", - "subtitle": "Quem são os parentes do paciente?" - }, - "nationality": { - "label": "Nacionalidade", - "title": "Dados Demográficos do paciente", - "subtitle": "Qual é a nacionalidade do paciente?" - }, - "edcNumber": { - "label": "Número EDC", - "title": "Dados Demográficos do paciente", - "subtitle": "Qual é o número de EDC do paciente?" - }, - "subjectID": { - "label": "ID do assunto", - "title": "Dados Demográficos do paciente", - "subtitle": "Qual é o ID do assunto?" - }, - "messagesConfiguration": { - "label": "Configuração de mensagens", - "title": "Configuração de mensagens", - "subtitle": "Configuração de mensagens" - }, - "confirm": { - "label": "Confirmar", - "title": "Dados Demográficos do paciente", - "subtitle": "Confirme que os dados do paciente estão corretos.", - "estimated": "Estimado", - "years": "Ano(s)", - "months": "Mês(es)" - } - }, - "fields": { - "firstName": "Sobrenome", - "givenName": "Nome", - "middleName": "Nome do meio", - "familyName": "Sobrenome", - "gender": "Gênero", - "birthdateDay": "Dia", - "birthdateMonth": "Mês", - "birthdateYear": "Ano", - "birthdateYears": "Anos Estimados", - "birthdateMonths": "Meses estimados", - "address1": "Morada 1", - "address2": "Morada 2", - "cityVillage": "Cidade/Vila", - "stateProvince": "Estado/Província", - "country": "País", - "postalCode": "Código Postal", - "personLanguage": "Idioma", - "Telephone Number": "Número de Telefone", - "patientLocation": "Local", - "Aadhar Number": "Número AADHAR", - "ART Number": "Número ART", - "relationshipType": "Tipo de Relação", - "otherPerson": "Nome da pessoa", - "LocationAttribute": "Local", - "relatives": "Parentes", - "language": "Idioma", - "name": "Nome", - "birthdate": "Data de Nascimento", - "address": "Morada", - "location": "Local", - "required": "(Obrigatório)", - "city": "City", - "startDate": "Data de Início", - "dailyContactTime": "Hora de contacto (dia)", - "eveningContactTime": "Hora de contacto noturna", - "or": "Ou", - "sexAssignedAtBirth": "Sexo atribuído à nascença", - "genderIdentity": "Identidade sexual", - "participantConsent": "Participante recebeu informações" - }, - "success": { - "title": "Sucesso", - "subtitle": "O Paciente foi registrado com sucesso.", - "editSubtitle": "O Paciente foi salvo com sucesso.", - "goBack": "Voltar" - }, - "unknown": "Desconhecido", - "required": "Obrigatório", - "invalid": "Inválido", - "previous": "Anterior", - "next": "Próximo", - "confirm": "Confirmar", - "invalidPhoneNumber": "Favor fornecer um número de telefone válido, incluindo o código do país. Exemplo: +1 555 555 1234", - "name": "Nome", - "middleName": "Nome do Meio", - "firstName": "Sobrenome", - "birthdate": "Data de Nascimento", - "gender": "Gênero", - "patientLocation": "Local do Paciente", - "address": "Endereço", - "nationality": "Nacionalidade", - "language": "Idioma", - "phoneNumber": "Número de Telefone", - "city": "Cidade", - "messagesConfiguration": "Configuração de mensagens", - "startDate": "Data de Início", - "dailyContactTime": "Hora de contacto (dia)", - "edcNumber": "Número EDC", - "patientDemographics": "Dados Demográficos do paciente", - "patientNameQuestion": "Qual é o nome do paciente?", - "patientBirthdateQUestion": "Qual é a data de nascimento do paciente?", - "patientGenderQuestion": "Qual é o sexo do paciente?", - "patientLocationQuestion": "Qual é o local do paciente?", - "patientAddressQuestion": "Qual é a endereço do paciente?", - "patientNationalityQuestion": "Qual é a nacionalidade do paciente?", - "patientLanguageQuestion": "Que idioma o paciente prefere?", - "patientPhoneNumberQuestion": "Qual é o número de telefone do paciente?", - "patientEDCNumberQuestion": "Qual é o número de EDC do paciente?" - }, - "notificationConfiguration": { - "title": "Gerenciar a configuração da Notificação", - "configureSettings": "Configurar definições", - "defaultCountry": "País Padrão", - "country": "País", - "smsSettings": "Definições SMS:", - "whatsAppSettings": "Definições WhatsApp:", - "callSettings": "Configurações de chamada:", - "provider": "Fornecedor", - "uponRegistration": "No momento do registro", - "allowedNotificationWindow": { - "label": "Janela de notificação permitida:", - "from": "De", - "to": "Para" - }, - "bestContactTime": { - "label": "Melhor tempo de contato:", - "placeholder": "Melhor tempo de contato" - }, - "visitReminder": { - "label": "Lembrete de visita (dias antes da visita):", - "placeholder": "Dias antes da visita", - "switch": "Lembrete de visita" - }, - "button": { - "expand": "Expandir tudo", - "collapse": "Comprimir tudo", - "addNewCountry": "Adicionar novo país" - }, - "confirmationModal": { - "header": "Submeter configuração de notificação", - "body": "Você tem certeza de que deseja submeter Configuração de Notificação?" - }, - "success": "Configuração gravada com sucesso!" - }, - "notificationTemplates": { - "title": "Gerenciar Modelos de Notificação", - "notificationTemplate": "Modelo de Notificação", - "injectedServices": { - "label": "Servicos injectados", - "tooltip": "Valores que representam o mapa de serviços que devem ser injetados no modelo de notificação de mensagens.", - "key": "Chave", - "value": "Valor" - }, - "template": { - "customTemplateName": { - "label": "Nome do Modelo Personalizado", - "tooltip": "Ao criar um modelo personalizado, use apenas letras minúsculas e '-' sem espaços.", - "invalid": "O Nome do Modelo Personalizado deve conter apenas letras minúsculas, e '-', sem espaços" - }, - "description": "Descrição", - "text": "Mensagem SMS" - }, - "button": { - "expand": "Expandir tudo", - "collapse": "Comprimir tudo", - "addNewTemplate": "Adicionar novo Modelo" - }, - "saveModal": { - "header": "Submeter Modelo de Notificação", - "body": "Confirma que quer submeter o Modelo de Notificação?" - }, - "removeTemplateModal": { - "header": "Eliminar Modelo de Notificação", - "body": "Confirma que quer eliminar {templateName}?" - }, - "success": "Configuração salva com sucesso!" - }, - "locations": { - "location": { - "create.title": "Adicionar Novo Local", - "edit.title": "Editar Local", - "name": "Nome do Local", - "description": "Descrição", - "address1": "Morada (linha 1)", - "address2": "Morada (linha 2)", - "cityVillage": "Cidade/Vila", - "stateProvince": "Estado/Província", - "postalCode": "Código Postal", - "country": "País", - "delete": "Eliminar Local" - } - }, - "common": { - "yes": "Sim", - "no": "Não", - "ok": "Ok", - "cancel": "Cancelar", - "moveUp": "Subir", - "moveDown": "Descer", - "ordinalSuffix": { - "st": ".º", - "nd": ".º", - "rd": ".º", - "th": ".º" - }, - "required": "(Obrigatório)", - "error": { - "required": "Obrigatório", - "nameUnique": "O nome deve ser único. Por favor, tente novamente.", - "nameInvalid": "O nome de usuário é inválido. Ele deve ter entre 2 e 50 caracteres. Somente letras, dígitos, '.', '-', e '_' são permitidos.", - "invalidEmail": "O endereço de e-mail é inválido. Favor corrigi-lo.", - "invalidPassword": "Sua senha digitada não corresponde à complexidade necessária. Ela deve ter no mínimo 8 caracteres e conter pelo menos: um caractere maiúsculo e um minúsculo, um dígito. Por favor, tente novamente.", - "confirmPassword": "Suas senhas digitadas não correspondem. Por favor, tente novamente." - }, - "switch": { - "on": "on", - "off": "off" - }, - "return": "Voltar", - "save": "Gravar", - "true": "Verdadeiro", - "false": "Falso", - "grandTotal": "Total geral", - "downloadCsv": "Descarregar csv" - }, - "userAccount": { - "title": "Conta de usuário", - "add": "Adicionar nova Conta", - "edit": "Editar Conta", - "accountNotSaved": "Nem todos os campos foram preenchidos corretamente. Por favor, tente novamente.", - "auditInfo": { - "title": "Informações de auditoria", - "created": "Criado Por {creator} Em {date}", - "changedBy": "Modificado Por {changedBy} Em {date}" - }, - "personDetails": { - "title": "Detalhes da Pessoa", - "familyName": "Sobrenome", - "givenName": "Nome", - "phone": "Número de Telefone", - "email": "Email" - }, - "userAccountDetails": { - "title": "Detalhes da Conta do usuário", - "username": "Nome de usuário", - "locations": "Locais", - "userRole": "Função do usuário", - "password": "Senha", - "confirmPassword": "Confirmar Senha", - "forcePasswordChange": "Forçar mudança de senha" - }, - "deleteAccount": { - "label": "Eliminar Conta", - "confirmationModal": { - "header": "Alerta", - "body": "Você tem certeza de que deseja eliminar esta conta?" - } - } - }, - "manageRegimens": { - "title": "Gerenciar Regimes", - "regimenName": "Nome do Regime", - "drugName": "Nome do medicamento", - "drugAbbreviation": "Abreviação do medicamento", - "doseUnitType": "Tipo de unidade de dosagem", - "numberOfUnits": "Número de unidades", - "frequency": "Frequência", - "addNewRegimen": "Adicionar novo Regime", - "deleteRegimenModal": { - "header": "Alerta", - "body": "Você tem certeza de que quer eliminar este regime?" - }, - "deleteDrugModal": { - "header": "Alerta", - "body": "Você tem certeza de que quer eliminar este medicamento?" - }, - "regimenDeleted": "O regime foi eliminado.", - "drugDeleted": "O medicamento foi eliminado.", - "regimensNotSaved": "Os regimes não foram salvos. Por favor, tente novamente.", - "regimensSaved": "Os regimes foram salvos.", - "error": { - "regimenNameUnique": "O nome do regime deve ser único. Por favor, tente novamente." - } - }, - "findPatientColumnsConfiguration": { - "title": "Gerenciar a configuração das Colunas de Registro do paciente", - "columnName": "Nome das Colunas", - "configureColumns": "Configurar Colunas", - "configurationNotSaved": "A configuração das colunas não foi salva.", - "emptyColumnsConfiguration": "Por favor, configure pelo menos uma coluna.", - "configurationSaved": "A configuração das colunas foi salva.", - "modal": { - "header": "Submeter Configuração das Colunas", - "body": "Você tem certeza de que deseja enviar a configuração das colunas para o Registro do Paciente?" - } - }, - "patientFlagsOverview": { - "title": "Visão Geral de Alertas", - "noRecordsFound": "Nenhum registro foi encontrado", - "somethingWentWrong": "algo deu errado", - "searchInputPlaceholder": "Pesquisar por ID, nome ou número de telefone", - "selectPatientFlagsPlaceholder": "Alertas para os pacientes", - "pleaseSelectFilter": "Selecione um filtro para ver os resultados", - "description": "Os resultados apresentados abaixo estão relacionados com o local atual.", - "recordsFound": "registros encontrados.", - "noRecords": "Sem registros.", - "identifierColumnLabel": "Identificador", - "nameColumnLabel": "Nome", - "phoneNumberColumnLabel": "Número de telefone", - "statusColumnLabel": "Status", - "genderColumnLabel": "Gênero" - } -} diff --git a/src/redux/reducers/apps.ts b/src/redux/reducers/apps.ts index 898d7d3..d023c83 100644 --- a/src/redux/reducers/apps.ts +++ b/src/redux/reducers/apps.ts @@ -12,11 +12,10 @@ import axios from 'axios'; import { FAILURE, REQUEST, SUCCESS } from '../action-type.util'; import { getAppConfig } from '../../shared/util/app-util'; -import { FIND_CAREGIVER_APP, FIND_PATIENT_APP, REGISTER_CAREGIVER_APP, REGISTER_PATIENT_APP } from '../../shared/constants/app'; +import { FIND_CAREGIVER_APP, FIND_PATIENT_APP, PATIENT_FLAGS_OVERVIEW_APP, REGISTER_CAREGIVER_APP, REGISTER_PATIENT_APP } from '../../shared/constants/app'; export const ACTION_TYPES = { - GET_APPS: 'settings/GET_APPS', - GET_APP: 'settings/GET_APP' + GET_APPS: 'settings/GET_APPS' }; const initialState = { @@ -29,8 +28,8 @@ const initialState = { findCaregiverTableColumns: null, patientRegistrationSteps: null, caregiverRegistrationSteps: null, + confirmPageCustomElements: null, patientFlagsOverviewTableColumns: null, - confirmPageCustomElements: null }; export const getAppsState = (apps, projectName) => ({ @@ -40,7 +39,8 @@ export const getAppsState = (apps, projectName) => ({ patientRegistrationSteps: getAppConfig(apps, REGISTER_PATIENT_APP, projectName)?.steps, caregiverRegistrationSteps: getAppConfig(apps, REGISTER_CAREGIVER_APP, projectName)?.steps, registrationRedirectUrl: getAppConfig(apps, REGISTER_PATIENT_APP, projectName)?.redirectUrl, - confirmPageCustomElements: getAppConfig(apps, REGISTER_PATIENT_APP, projectName)?.confirmPageCustomElements + confirmPageCustomElements: getAppConfig(apps, REGISTER_PATIENT_APP, projectName)?.confirmPageCustomElements, + patientFlagsOverviewTableColumns: getAppConfig(apps, PATIENT_FLAGS_OVERVIEW_APP, projectName)?.tableColumns }); const reducer = (state = initialState, action) => { @@ -64,24 +64,6 @@ const reducer = (state = initialState, action) => { loading: false, ...getAppsState(action.payload.data, projectName) }; - case REQUEST(ACTION_TYPES.GET_APP): - return { - ...state, - appLoading: true, - errorMessage: null - }; - case FAILURE(ACTION_TYPES.GET_APP): - return { - ...state, - appLoading: false, - errorMessage: action.payload.message - }; - case SUCCESS(ACTION_TYPES.GET_APP): - return { - ...state, - appLoading: false, - app: action.payload.data - }; default: return state; } @@ -99,12 +81,4 @@ export const getApps = (projectName: string) => { }; }; -export const getAppById = (appId: string) => { - const requestUrl = `/openmrs/ws/rest/v1/app/${appId}`; - return { - type: ACTION_TYPES.GET_APP, - payload: axios.get(requestUrl) - } -}; - export default reducer; diff --git a/src/redux/reducers/index.ts b/src/redux/reducers/index.ts index 164d8e9..8708ad2 100644 --- a/src/redux/reducers/index.ts +++ b/src/redux/reducers/index.ts @@ -42,6 +42,9 @@ import orderType from './order-type'; import findPatientColumnsConfiguration from './columns-configuration'; import patientFlagsOverview from './patient-flags-overview'; import globalPropertyReducer from './global-property.reducer'; +import translationMessages from './translation-messages'; +import project from './project'; + export default combineReducers({ cflPatient, cflPerson, @@ -60,6 +63,7 @@ export default combineReducers({ patient, patientFlagsOverview, personStatus, + project, role, user, customizeReducer, @@ -74,6 +78,7 @@ export default combineReducers({ orderType, findPatientColumnsConfiguration, globalPropertyReducer, + translationMessages, openmrs: openmrsReducers, form: reduxFormReducer }); diff --git a/src/redux/reducers/patient-flags-overview.ts b/src/redux/reducers/patient-flags-overview.ts index c36b466..073cd54 100644 --- a/src/redux/reducers/patient-flags-overview.ts +++ b/src/redux/reducers/patient-flags-overview.ts @@ -110,9 +110,16 @@ export const getPatientFlags = () => ({ type: ACTION_TYPES.GET_PATIENT_FLAGS, payload: axios.get('/openmrs/ws/cfl/flags') }); -export const getFlaggedPatientsOverview = (uuidLocation: string, query?: string, flagName?: string, page: number = DEFAULT_PAGE_NUMBER_TO_SEND, pageSize: number = DEFAULT_PAGE_SIZE) => ({ +export const getFlaggedPatientsOverview = (uuidLocation: string, query?: string, flagName?: string, pageNumber: number = DEFAULT_PAGE_NUMBER_TO_SEND, pageSize: number = DEFAULT_PAGE_SIZE) => ({ type: ACTION_TYPES.GET_FLAGGED_PATIENTS, - payload: axios.get(`/openmrs/ws/cfl/patientFlags/${uuidLocation}?${query ? `query=${query}&` : ''}${flagName ? `flagName=${flagName}&` : ''}${page ? `pageNumber=${page}&` : ''}${pageSize ? `pageSize=${pageSize}&` : ''}`) + payload: axios.get(`/openmrs/ws/cfl/patientFlags/${uuidLocation}`, { + params: { + query, + flagName, + pageNumber, + pageSize + } + }) }); export default reducer; diff --git a/src/redux/reducers/project.ts b/src/redux/reducers/project.ts new file mode 100644 index 0000000..98c7fb0 --- /dev/null +++ b/src/redux/reducers/project.ts @@ -0,0 +1,55 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under + * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. + *

+ * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS + * graphic logo is a trademark of OpenMRS Inc. + */ + +import axios from 'axios'; +import { FAILURE, REQUEST, SUCCESS } from '../action-type.util'; + +export const ACTION_TYPES = { + GET_PROJECT_NAMES: 'project/GET_PROJECT_NAMES' + }; + +const initialState = { + loading: false, + projects: [], + errorMessage: '' +}; + +const reducer = (state = initialState, action) => { + switch(action.type) { + case REQUEST(ACTION_TYPES.GET_PROJECT_NAMES): + return { + ...state, + loading: true + }; + case FAILURE(ACTION_TYPES.GET_PROJECT_NAMES): + return { + ...initialState, + errorMessage: action.payload.message + }; + case SUCCESS(ACTION_TYPES.GET_PROJECT_NAMES): + return { + ...initialState, + projects: action.payload.data.results + }; + case ACTION_TYPES.GET_PROJECT_NAMES: + return { + ...initialState + }; + default: + return state; + } +}; + +export const getProjectNames = () => ({ + type: ACTION_TYPES.GET_PROJECT_NAMES, + payload: axios.get('/openmrs/ws/rest/v1/project') +}); + +export default reducer; \ No newline at end of file diff --git a/src/redux/reducers/translation-messages.ts b/src/redux/reducers/translation-messages.ts new file mode 100644 index 0000000..44611d9 --- /dev/null +++ b/src/redux/reducers/translation-messages.ts @@ -0,0 +1,59 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under + * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. + *

+ * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS + * graphic logo is a trademark of OpenMRS Inc. + */ + +import axios from 'axios'; + +import { FAILURE, REQUEST, SUCCESS } from '../action-type.util'; + +export const ACTION_TYPES = { + GET_MESSAGES: 'messages/GET_MESSAGES' +}; + +const initialState = { + loading: false, + errorMessage: null, + translationMessages: [] +}; + +const reducer = (state = initialState, action) => { + switch (action.type) { + case REQUEST(ACTION_TYPES.GET_MESSAGES): + return { + ...initialState, + loading: true + }; + case FAILURE(ACTION_TYPES.GET_MESSAGES): + return { + ...initialState, + errorMessage: action.payload.message, + loading: false + }; + case SUCCESS(ACTION_TYPES.GET_MESSAGES): + const messagesRaw = action.payload.data; + const translationMessages = typeof messagesRaw == 'object' ? messagesRaw : JSON.parse(messagesRaw); + return { + ...initialState, + translationMessages, + loading: false + }; + default: + return state; + } +}; + +export const getMessages = (locale = 'en') => { + const requestUrl = `/openmrs/module/uicommons/messages/messages.json?localeKey=${locale}`; + return { + type: ACTION_TYPES.GET_MESSAGES, + payload: axios.get(requestUrl) + }; +}; + +export default reducer; diff --git a/src/redux/reducers/user.ts b/src/redux/reducers/user.ts index b46ab03..a3b92d4 100644 --- a/src/redux/reducers/user.ts +++ b/src/redux/reducers/user.ts @@ -10,7 +10,6 @@ import axios from 'axios'; import { FAILURE, REQUEST, SUCCESS } from '../action-type.util'; -import { PURGE_TRUE_FLAG } from '../../shared/constants/openmrs'; import { USER, USER_URL, PROVIDER_URL, PASSWORD_URL } from '../../shared/constants/user-account'; export const ACTION_TYPES = { @@ -145,12 +144,12 @@ export const saveProvider = (provider: { uuid: string; data: {} }) => ({ export const deleteUser = (uuid: string) => ({ type: ACTION_TYPES.DELETE_USER, - payload: axios.delete(`${USER_URL}/${uuid}?${PURGE_TRUE_FLAG}`) + payload: axios.delete(`${USER_URL}/${uuid}`) }); export const deleteProvider = (providerUuid: string) => ({ type: ACTION_TYPES.DELETE_PROVIDER, - payload: axios.delete(`${PROVIDER_URL}/${providerUuid}?${PURGE_TRUE_FLAG}`) + payload: axios.delete(`${PROVIDER_URL}/${providerUuid}`) }); export default reducer; diff --git a/src/shared/constants/app.tsx b/src/shared/constants/app.tsx index ef6bd4f..0e83b97 100644 --- a/src/shared/constants/app.tsx +++ b/src/shared/constants/app.tsx @@ -14,3 +14,4 @@ export const FIND_CAREGIVER_APP = APP_PREFIX + 'findCaregiver'; export const REGISTER_PATIENT_APP = APP_PREFIX + 'registerPatient'; export const REGISTER_CAREGIVER_APP = APP_PREFIX + 'registerCaregiver'; export const PROJECT_LOCATION_ATTRIBUTE_TYPE_NAME = 'Project'; +export const PATIENT_FLAGS_OVERVIEW_APP = "cfl.patientFlagsOverview"; diff --git a/src/shared/constants/location.ts b/src/shared/constants/location.ts index 4c1b47e..42f5db7 100644 --- a/src/shared/constants/location.ts +++ b/src/shared/constants/location.ts @@ -31,4 +31,5 @@ export const DEFAULT_LOCATION: ILocation = { }; export const COUNTRY_CODE_LOCATION_ATTRIBUTE_TYPE_UUID = '78dd0af8-9ea5-475a-858a-0adf31e448bd'; export const CLUSTER_LOCATION_ATTRIBUTE_TYPE_UUID = 'b59e7f64-11a0-44e2-bbff-27693ff5e735'; +export const PROJECT_LOCATION_ATTRIBUTE_TYPE_UUID = '8280768b-f4c1-4a91-9b53-3b816c5d5367'; export const MANDATORY_LOCATION_ATTRIBUTE_TYPE_UUID = [COUNTRY_CODE_LOCATION_ATTRIBUTE_TYPE_UUID, CLUSTER_LOCATION_ATTRIBUTE_TYPE_UUID]; diff --git a/src/shared/constants/openmrs.tsx b/src/shared/constants/openmrs.tsx index f08cf01..769a9e5 100644 --- a/src/shared/constants/openmrs.tsx +++ b/src/shared/constants/openmrs.tsx @@ -10,7 +10,6 @@ export const ROOT_URL = '/openmrs/'; export const WS_REST_V1_URL = `${ROOT_URL}ws/rest/v1/`; -export const PURGE_TRUE_FLAG = 'purge=true'; export const PATIENT_PAGE_URL = `${ROOT_URL}coreapps/clinicianfacing/patient.page`; export const CONDITIONS_PAGE_URL = `${ROOT_URL}coreapps/conditionlist/manageConditions.page`; /** Default URL to redirect after successful registration. */ diff --git a/src/shared/constants/patient-flags-overview.ts b/src/shared/constants/patient-flags-overview.ts index 4564cf8..e573f90 100644 --- a/src/shared/constants/patient-flags-overview.ts +++ b/src/shared/constants/patient-flags-overview.ts @@ -17,5 +17,4 @@ export const DEFAULT_COLUMNS = [ { label: 'Phone number', value: 'phoneNumber'}, { label: 'Status', value: 'patientStatus'}, { label: 'Gender', value: 'gender' } -]; -export const PATIENT_FLAGS_OVERVIEW_APP_NAME = "cfl.patientFlagsOverview"; \ No newline at end of file +]; \ No newline at end of file diff --git a/src/shared/constants/routes.tsx b/src/shared/constants/routes.tsx index 8e69840..ec72cf9 100644 --- a/src/shared/constants/routes.tsx +++ b/src/shared/constants/routes.tsx @@ -84,7 +84,7 @@ export const routeConfig = [ { path: '/find-patient', component: FindPatient, - breadcrumb: 'findPatient.title', + breadcrumb: 'cfl.findPatient.title', requiredPrivilege: PRIVILEGES.GET_PATIENTS }, { diff --git a/src/shared/models/patient.ts b/src/shared/models/patient.ts index dc1f829..aed2e54 100644 --- a/src/shared/models/patient.ts +++ b/src/shared/models/patient.ts @@ -38,4 +38,5 @@ export interface IPatient { uuid?: string; // custom relatives?: any[]; + LocationAttribute?: string; } diff --git a/src/shared/util/date-util.ts b/src/shared/util/date-util.ts index d6c423f..cfb5459 100644 --- a/src/shared/util/date-util.ts +++ b/src/shared/util/date-util.ts @@ -29,3 +29,27 @@ export const formatDate = (intl, date) => export const isoDateString = jsDate => (jsDate ? jsDate.toISOString().split('T')[0] : null); export const MILLIS_PER_MINUTE = 60 * 1000; + +export const WEEK_DAYS_KEYS = [ + 'cfl.weekDay.Sunday.shortName', + 'cfl.weekDay.Monday.shortName', + 'cfl.weekDay.Tuesday.shortName', + 'cfl.weekDay.Wednesday.shortName', + 'cfl.weekDay.Thursday.shortName', + 'cfl.weekDay.Friday.shortName', + 'cfl.weekDay.Saturday.shortName' +]; +export const MONTH_NAMES_KEYS = [ + 'cfl.month.January.fullName', + 'cfl.month.February.fullName', + 'cfl.month.March.fullName', + 'cfl.month.April.fullName', + 'cfl.month.May.fullName', + 'cfl.month.June.fullName', + 'cfl.month.July.fullName', + 'cfl.month.August.fullName', + 'cfl.month.September.fullName', + 'cfl.month.October.fullName', + 'cfl.month.November.fullName', + 'cfl.month.December.fullName' +]; \ No newline at end of file